From f548723f2139a80938219bf05a23041b28ed8f25 Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Mon, 13 Jul 2026 13:49:47 -0400 Subject: [PATCH 01/31] CI: switch to using single pyproject.toml --- .isort.cfg | 5 - MANIFEST.in | 18 --- pprint | 0 pyproject.toml | 138 ++++++++++++++++++ requirements-dev.txt | 33 ----- requirements.txt | 16 -- .../bluesky_queueserver}/__init__.py | 0 .../bluesky_queueserver}/_version.py | 0 .../bluesky_queueserver}/manager/__init__.py | 0 .../manager/annotation_decorator.py | 0 .../bluesky_queueserver}/manager/comms.py | 0 .../bluesky_queueserver}/manager/config.py | 0 .../manager/config_schemas/__init__.py | 0 .../manager/config_schemas/config_schema.yml | 0 .../manager/config_schemas/loading.py | 0 .../manager/conversions.py | 0 .../bluesky_queueserver}/manager/gen_lists.py | 0 .../bluesky_queueserver}/manager/json_rpc.py | 0 .../manager/logging_setup.py | 0 .../bluesky_queueserver}/manager/manager.py | 0 .../manager/output_streaming.py | 0 .../manager/plan_monitoring.py | 0 .../manager/plan_queue_ops.py | 0 .../manager/profile_ops.py | 0 .../manager/profile_tools.py | 0 .../manager/qserver_cli.py | 0 .../manager/start_manager.py | 0 .../manager/task_results.py | 0 .../manager/tests/__init__.py | 0 .../manager/tests/common.py | 0 .../manager/tests/conftest.py | 0 .../manager/tests/plan_lists.py | 0 .../tests/spreadsheet_custom_functions.py | 0 .../tests/test_annotation_decorator.py | 0 .../manager/tests/test_comms.py | 0 .../manager/tests/test_config.py | 0 .../manager/tests/test_console_monitor_cli.py | 0 .../manager/tests/test_conversions.py | 0 .../manager/tests/test_fixtures.py | 0 .../manager/tests/test_gen_lists.py | 0 .../manager/tests/test_info_streaming.py | 0 .../manager/tests/test_ip_kernel_func.py | 0 .../manager/tests/test_json_rpc.py | 0 .../manager/tests/test_logging.py | 0 .../manager/tests/test_manager.py | 0 .../manager/tests/test_manager_options.py | 0 .../manager/tests/test_output_streaming.py | 0 .../manager/tests/test_plan_monitoring.py | 0 .../manager/tests/test_plan_queue_ops.py | 0 .../manager/tests/test_profile_ops.py | 0 .../manager/tests/test_profile_tools.py | 0 .../manager/tests/test_qserver_cli.py | 0 .../manager/tests/test_qserver_console.py | 0 .../manager/tests/test_scenarios.py | 0 .../manager/tests/test_start_manager.py | 0 .../tests/test_start_re_manager_cli.py | 0 .../manager/tests/test_task_results.py | 0 .../manager/tests/test_utils.py | 0 .../manager/tests/test_zmq_api_base.py | 0 .../bluesky_queueserver}/manager/utils.py | 0 .../bluesky_queueserver}/manager/worker.py | 0 .../profile_collection_sim/00-ophyd.py | 0 .../profile_collection_sim/05-run-engine.py | 0 .../profile_collection_sim/15-plans.py | 0 .../profile_collection_sim/99-custom.py | 0 .../existing_plans_and_devices.yaml | 0 .../user_group_permissions.yaml | 0 .../bluesky_queueserver}/tests/__init__.py | 0 .../bluesky_queueserver}/tests/common.py | 0 .../bluesky_queueserver}/tests/conftest.py | 0 70 files changed, 138 insertions(+), 72 deletions(-) delete mode 100644 .isort.cfg delete mode 100644 MANIFEST.in delete mode 100644 pprint delete mode 100644 requirements-dev.txt delete mode 100644 requirements.txt rename {bluesky_queueserver => src/bluesky_queueserver}/__init__.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/_version.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/__init__.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/annotation_decorator.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/comms.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/config.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/config_schemas/__init__.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/config_schemas/config_schema.yml (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/config_schemas/loading.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/conversions.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/gen_lists.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/json_rpc.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/logging_setup.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/manager.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/output_streaming.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/plan_monitoring.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/plan_queue_ops.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/profile_ops.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/profile_tools.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/qserver_cli.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/start_manager.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/task_results.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/__init__.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/common.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/conftest.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/plan_lists.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/spreadsheet_custom_functions.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/test_annotation_decorator.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/test_comms.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/test_config.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/test_console_monitor_cli.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/test_conversions.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/test_fixtures.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/test_gen_lists.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/test_info_streaming.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/test_ip_kernel_func.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/test_json_rpc.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/test_logging.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/test_manager.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/test_manager_options.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/test_output_streaming.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/test_plan_monitoring.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/test_plan_queue_ops.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/test_profile_ops.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/test_profile_tools.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/test_qserver_cli.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/test_qserver_console.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/test_scenarios.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/test_start_manager.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/test_start_re_manager_cli.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/test_task_results.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/test_utils.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/tests/test_zmq_api_base.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/utils.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/manager/worker.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/profile_collection_sim/00-ophyd.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/profile_collection_sim/05-run-engine.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/profile_collection_sim/15-plans.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/profile_collection_sim/99-custom.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/profile_collection_sim/existing_plans_and_devices.yaml (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/profile_collection_sim/user_group_permissions.yaml (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/tests/__init__.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/tests/common.py (100%) rename {bluesky_queueserver => src/bluesky_queueserver}/tests/conftest.py (100%) diff --git a/.isort.cfg b/.isort.cfg deleted file mode 100644 index ac9c74a5..00000000 --- a/.isort.cfg +++ /dev/null @@ -1,5 +0,0 @@ -[settings] -line_length = 115 -multi_line_output = 3 -include_trailing_comma = True -profile = black diff --git a/MANIFEST.in b/MANIFEST.in deleted file mode 100644 index a33bbeb2..00000000 --- a/MANIFEST.in +++ /dev/null @@ -1,18 +0,0 @@ -include AUTHORS.rst -include CONTRIBUTING.rst -include LICENSE -include README.rst -include requirements.txt - -recursive-exclude * __pycache__ -recursive-exclude * *.py[co] - -recursive-include docs *.rst conf.py Makefile make.bat - -include versioneer.py -include bluesky_queueserver/_version.py -include bluesky_queueserver/manager/config_schemas/*.yml -recursive-include bluesky_queueserver/profile_collection_sim/ * - -# If including data files in the package, add them like: -# include path/to/data_file diff --git a/pprint b/pprint deleted file mode 100644 index e69de29b..00000000 diff --git a/pyproject.toml b/pyproject.toml index 79c9ebe5..f53d9299 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,141 @@ +[build-system] +requires = ["setuptools>=64", "setuptools_scm[toml]>=8"] +build-backend = "setuptools.build_meta" + +name = "bluesky-queueserver" +classifiers = [ + "Development Status :: 3 - Alpha", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", +] +description = "Server for queueing and executing Bluesky plans." +dependencies = [ + "bluesky>=1.7.0", + "ipykernel", + "jsonschema", + "jupyter-client>=7.4.2", + "jupyter-console", + "numpydoc", + "openpyxl", + "ophyd", + "packaging", + "pydantic", + "python-multipart", + "pyyaml", + "pyzmq", + "redis[hiredis]", + "requests", +] +dynamic = ["version"] +license.file = "LICENSE" +readme = "README.md" +requires-python = ">=3.10" + +[project.optional-dependencies] +dev = [ + "black!=25.11.0", + "coverage", + "flake8", + "isort", + "happi>=1.14.0", + "pre-commit", + "pytest", + "pytest-xprocess", + "pytest-split", + "py", + "ipython", + "matplotlib", + "numpy", + "intake", + "numpydoc", + "scikit-image", + "sphinx", + "sphinx_rtd_theme", + "pandas", + "pyarrow", + "scikit-image", # Needed for BEC/other stuff to run, factor out + # Dependencies of ophyd-async + "h5py", + "aioca", + "ophyd-async", +] + +[project.scripts] +qserver = "bluesky_queueserver.manager.qserver_cli:qserver" +start-re-manager = "bluesky_queueserver.manager.start_manager:start_manager" +qserver-list-plans-devices = "bluesky_queueserver.manager.gen_lists:gen_list_of_plans_and_devices_cli", +qserver-zmq-keys = "bluesky_queueserver.manager.qserver_cli:qserver_zmq_keys" +qserver-clear-lock = "bluesky_queueserver.manager.qserver_cli:qserver_clear_lock" +qserver-console = "bluesky_queueserver.manager.qserver_cli:qserver_console" +qserver-qtconsole = "bluesky_queueserver.manager.qserver_cli:qserver_qtconsole" +qserver-console-monitor = "bluesky_queueserver.manager.output_streaming:qserver_console_monitor_cli" + +[project.urls] +GitHub = "https://github.com/bluesky/bluesky-queueserver" + +[[project.authors]] # Further authors may be added by duplicating this section +name = "Brookhaven National Laboratory" + +[tool.setuptools_scm] +version_file = "src/bluesky_queueserver/_version.py" + +[tool.mypy] +ignore_missing_imports = true # Ignore missing stubs in imported modules + +[tool.pytest.ini_options] +# Run pytest with all our checkers, and don't spam us with massive tracebacks on error +# Don't collect the interactive directory which is intended for manual execution +addopts = """ + --tb=native -vv --doctest-modules --doctest-glob="*.rst" --ignore src/bluesky/tests/interactive + """ +# https://iscinumpy.gitlab.io/post/bound-version-constraints/#watch-for-warnings +filterwarnings = [ + "error", + "ignore::PendingDeprecationWarning", + "ignore::UserWarning", + "ignore::DeprecationWarning", +] +# Doctest python code in docs, python code in src docstrings, test functions in tests +testpaths = "src/bluesky_queueserver/tests;src/bluesky_queueserver/manager/tests" + +[tool.coverage.run] +data_file = "/tmp/bluesky_queueserver.coverage" + +[tool.coverage.report] +exclude_lines = ["if __name__ == '__main__':"] + +[tool.coverage.paths] +# Tests are run from installed location, map back to the src directory +source = ["src", "**/site-packages/"] + +[tool.ruff] +src = ["src", "tests"] +line-length = 115 +exclude = [ + "docs/source/conf.py", + "docs/source/examples", +] + +[tool.ruff.lint] +select = [ + "B", # flake8-bugbear - https://docs.astral.sh/ruff/rules/#flake8-bugbear-b + "C4", # flake8-comprehensions - https://docs.astral.sh/ruff/rules/#flake8-comprehensions-c4 + "E", # pycodestyle errors - https://docs.astral.sh/ruff/rules/#error-e + "F", # pyflakes rules - https://docs.astral.sh/ruff/rules/#pyflakes-f + "W", # pycodestyle warnings - https://docs.astral.sh/ruff/rules/#warning-w + "I", # isort - https://docs.astral.sh/ruff/rules/#isort-i + "UP", # pyupgrade - https://docs.astral.sh/ruff/rules/#pyupgrade-up +] +unfixable = ["F401"] +ignore = [ + "B905", # adding strict=False to every zip call is just noise +] +isort.required-imports = [ +] + [tool.black] line-length = 115 target-version = ['py310'] diff --git a/requirements-dev.txt b/requirements-dev.txt deleted file mode 100644 index 3fa06476..00000000 --- a/requirements-dev.txt +++ /dev/null @@ -1,33 +0,0 @@ -# These are required for developing the package (running the tests, building -# the documentation) but not necessarily required for _using_ it. -black!=25.11.0 -coverage -flake8 -isort -happi>=1.14.0 -pre-commit -pytest -pytest-xprocess -pytest-split -py -sphinx -# These are dependencies of various sphinx extensions for documentation. -ipython -matplotlib -numpy -intake -numpydoc -scikit-image -sphinx -sphinx_rtd_theme -# Extra dependencies for development -fastapi[all] -# moved from requirements.txt -pandas -pyarrow -matplotlib # Needed for BEC, should be factored out -scikit-image # Needed for BEC/other stuff to run, factor out -# Dependencies of ophyd-async -h5py -aioca -ophyd-async diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index dce64e56..00000000 --- a/requirements.txt +++ /dev/null @@ -1,16 +0,0 @@ -bluesky>=1.7.0 -ipykernel -jsonschema -jupyter-client>=7.4.2 -jupyter-console -numpydoc -openpyxl -ophyd -packaging -pydantic -python-multipart -pyyaml -pyzmq -redis[hiredis] -requests -typing-extensions;python_version<'3.8' diff --git a/bluesky_queueserver/__init__.py b/src/bluesky_queueserver/__init__.py similarity index 100% rename from bluesky_queueserver/__init__.py rename to src/bluesky_queueserver/__init__.py diff --git a/bluesky_queueserver/_version.py b/src/bluesky_queueserver/_version.py similarity index 100% rename from bluesky_queueserver/_version.py rename to src/bluesky_queueserver/_version.py diff --git a/bluesky_queueserver/manager/__init__.py b/src/bluesky_queueserver/manager/__init__.py similarity index 100% rename from bluesky_queueserver/manager/__init__.py rename to src/bluesky_queueserver/manager/__init__.py diff --git a/bluesky_queueserver/manager/annotation_decorator.py b/src/bluesky_queueserver/manager/annotation_decorator.py similarity index 100% rename from bluesky_queueserver/manager/annotation_decorator.py rename to src/bluesky_queueserver/manager/annotation_decorator.py diff --git a/bluesky_queueserver/manager/comms.py b/src/bluesky_queueserver/manager/comms.py similarity index 100% rename from bluesky_queueserver/manager/comms.py rename to src/bluesky_queueserver/manager/comms.py diff --git a/bluesky_queueserver/manager/config.py b/src/bluesky_queueserver/manager/config.py similarity index 100% rename from bluesky_queueserver/manager/config.py rename to src/bluesky_queueserver/manager/config.py diff --git a/bluesky_queueserver/manager/config_schemas/__init__.py b/src/bluesky_queueserver/manager/config_schemas/__init__.py similarity index 100% rename from bluesky_queueserver/manager/config_schemas/__init__.py rename to src/bluesky_queueserver/manager/config_schemas/__init__.py diff --git a/bluesky_queueserver/manager/config_schemas/config_schema.yml b/src/bluesky_queueserver/manager/config_schemas/config_schema.yml similarity index 100% rename from bluesky_queueserver/manager/config_schemas/config_schema.yml rename to src/bluesky_queueserver/manager/config_schemas/config_schema.yml diff --git a/bluesky_queueserver/manager/config_schemas/loading.py b/src/bluesky_queueserver/manager/config_schemas/loading.py similarity index 100% rename from bluesky_queueserver/manager/config_schemas/loading.py rename to src/bluesky_queueserver/manager/config_schemas/loading.py diff --git a/bluesky_queueserver/manager/conversions.py b/src/bluesky_queueserver/manager/conversions.py similarity index 100% rename from bluesky_queueserver/manager/conversions.py rename to src/bluesky_queueserver/manager/conversions.py diff --git a/bluesky_queueserver/manager/gen_lists.py b/src/bluesky_queueserver/manager/gen_lists.py similarity index 100% rename from bluesky_queueserver/manager/gen_lists.py rename to src/bluesky_queueserver/manager/gen_lists.py diff --git a/bluesky_queueserver/manager/json_rpc.py b/src/bluesky_queueserver/manager/json_rpc.py similarity index 100% rename from bluesky_queueserver/manager/json_rpc.py rename to src/bluesky_queueserver/manager/json_rpc.py diff --git a/bluesky_queueserver/manager/logging_setup.py b/src/bluesky_queueserver/manager/logging_setup.py similarity index 100% rename from bluesky_queueserver/manager/logging_setup.py rename to src/bluesky_queueserver/manager/logging_setup.py diff --git a/bluesky_queueserver/manager/manager.py b/src/bluesky_queueserver/manager/manager.py similarity index 100% rename from bluesky_queueserver/manager/manager.py rename to src/bluesky_queueserver/manager/manager.py diff --git a/bluesky_queueserver/manager/output_streaming.py b/src/bluesky_queueserver/manager/output_streaming.py similarity index 100% rename from bluesky_queueserver/manager/output_streaming.py rename to src/bluesky_queueserver/manager/output_streaming.py diff --git a/bluesky_queueserver/manager/plan_monitoring.py b/src/bluesky_queueserver/manager/plan_monitoring.py similarity index 100% rename from bluesky_queueserver/manager/plan_monitoring.py rename to src/bluesky_queueserver/manager/plan_monitoring.py diff --git a/bluesky_queueserver/manager/plan_queue_ops.py b/src/bluesky_queueserver/manager/plan_queue_ops.py similarity index 100% rename from bluesky_queueserver/manager/plan_queue_ops.py rename to src/bluesky_queueserver/manager/plan_queue_ops.py diff --git a/bluesky_queueserver/manager/profile_ops.py b/src/bluesky_queueserver/manager/profile_ops.py similarity index 100% rename from bluesky_queueserver/manager/profile_ops.py rename to src/bluesky_queueserver/manager/profile_ops.py diff --git a/bluesky_queueserver/manager/profile_tools.py b/src/bluesky_queueserver/manager/profile_tools.py similarity index 100% rename from bluesky_queueserver/manager/profile_tools.py rename to src/bluesky_queueserver/manager/profile_tools.py diff --git a/bluesky_queueserver/manager/qserver_cli.py b/src/bluesky_queueserver/manager/qserver_cli.py similarity index 100% rename from bluesky_queueserver/manager/qserver_cli.py rename to src/bluesky_queueserver/manager/qserver_cli.py diff --git a/bluesky_queueserver/manager/start_manager.py b/src/bluesky_queueserver/manager/start_manager.py similarity index 100% rename from bluesky_queueserver/manager/start_manager.py rename to src/bluesky_queueserver/manager/start_manager.py diff --git a/bluesky_queueserver/manager/task_results.py b/src/bluesky_queueserver/manager/task_results.py similarity index 100% rename from bluesky_queueserver/manager/task_results.py rename to src/bluesky_queueserver/manager/task_results.py diff --git a/bluesky_queueserver/manager/tests/__init__.py b/src/bluesky_queueserver/manager/tests/__init__.py similarity index 100% rename from bluesky_queueserver/manager/tests/__init__.py rename to src/bluesky_queueserver/manager/tests/__init__.py diff --git a/bluesky_queueserver/manager/tests/common.py b/src/bluesky_queueserver/manager/tests/common.py similarity index 100% rename from bluesky_queueserver/manager/tests/common.py rename to src/bluesky_queueserver/manager/tests/common.py diff --git a/bluesky_queueserver/manager/tests/conftest.py b/src/bluesky_queueserver/manager/tests/conftest.py similarity index 100% rename from bluesky_queueserver/manager/tests/conftest.py rename to src/bluesky_queueserver/manager/tests/conftest.py diff --git a/bluesky_queueserver/manager/tests/plan_lists.py b/src/bluesky_queueserver/manager/tests/plan_lists.py similarity index 100% rename from bluesky_queueserver/manager/tests/plan_lists.py rename to src/bluesky_queueserver/manager/tests/plan_lists.py diff --git a/bluesky_queueserver/manager/tests/spreadsheet_custom_functions.py b/src/bluesky_queueserver/manager/tests/spreadsheet_custom_functions.py similarity index 100% rename from bluesky_queueserver/manager/tests/spreadsheet_custom_functions.py rename to src/bluesky_queueserver/manager/tests/spreadsheet_custom_functions.py diff --git a/bluesky_queueserver/manager/tests/test_annotation_decorator.py b/src/bluesky_queueserver/manager/tests/test_annotation_decorator.py similarity index 100% rename from bluesky_queueserver/manager/tests/test_annotation_decorator.py rename to src/bluesky_queueserver/manager/tests/test_annotation_decorator.py diff --git a/bluesky_queueserver/manager/tests/test_comms.py b/src/bluesky_queueserver/manager/tests/test_comms.py similarity index 100% rename from bluesky_queueserver/manager/tests/test_comms.py rename to src/bluesky_queueserver/manager/tests/test_comms.py diff --git a/bluesky_queueserver/manager/tests/test_config.py b/src/bluesky_queueserver/manager/tests/test_config.py similarity index 100% rename from bluesky_queueserver/manager/tests/test_config.py rename to src/bluesky_queueserver/manager/tests/test_config.py diff --git a/bluesky_queueserver/manager/tests/test_console_monitor_cli.py b/src/bluesky_queueserver/manager/tests/test_console_monitor_cli.py similarity index 100% rename from bluesky_queueserver/manager/tests/test_console_monitor_cli.py rename to src/bluesky_queueserver/manager/tests/test_console_monitor_cli.py diff --git a/bluesky_queueserver/manager/tests/test_conversions.py b/src/bluesky_queueserver/manager/tests/test_conversions.py similarity index 100% rename from bluesky_queueserver/manager/tests/test_conversions.py rename to src/bluesky_queueserver/manager/tests/test_conversions.py diff --git a/bluesky_queueserver/manager/tests/test_fixtures.py b/src/bluesky_queueserver/manager/tests/test_fixtures.py similarity index 100% rename from bluesky_queueserver/manager/tests/test_fixtures.py rename to src/bluesky_queueserver/manager/tests/test_fixtures.py diff --git a/bluesky_queueserver/manager/tests/test_gen_lists.py b/src/bluesky_queueserver/manager/tests/test_gen_lists.py similarity index 100% rename from bluesky_queueserver/manager/tests/test_gen_lists.py rename to src/bluesky_queueserver/manager/tests/test_gen_lists.py diff --git a/bluesky_queueserver/manager/tests/test_info_streaming.py b/src/bluesky_queueserver/manager/tests/test_info_streaming.py similarity index 100% rename from bluesky_queueserver/manager/tests/test_info_streaming.py rename to src/bluesky_queueserver/manager/tests/test_info_streaming.py diff --git a/bluesky_queueserver/manager/tests/test_ip_kernel_func.py b/src/bluesky_queueserver/manager/tests/test_ip_kernel_func.py similarity index 100% rename from bluesky_queueserver/manager/tests/test_ip_kernel_func.py rename to src/bluesky_queueserver/manager/tests/test_ip_kernel_func.py diff --git a/bluesky_queueserver/manager/tests/test_json_rpc.py b/src/bluesky_queueserver/manager/tests/test_json_rpc.py similarity index 100% rename from bluesky_queueserver/manager/tests/test_json_rpc.py rename to src/bluesky_queueserver/manager/tests/test_json_rpc.py diff --git a/bluesky_queueserver/manager/tests/test_logging.py b/src/bluesky_queueserver/manager/tests/test_logging.py similarity index 100% rename from bluesky_queueserver/manager/tests/test_logging.py rename to src/bluesky_queueserver/manager/tests/test_logging.py diff --git a/bluesky_queueserver/manager/tests/test_manager.py b/src/bluesky_queueserver/manager/tests/test_manager.py similarity index 100% rename from bluesky_queueserver/manager/tests/test_manager.py rename to src/bluesky_queueserver/manager/tests/test_manager.py diff --git a/bluesky_queueserver/manager/tests/test_manager_options.py b/src/bluesky_queueserver/manager/tests/test_manager_options.py similarity index 100% rename from bluesky_queueserver/manager/tests/test_manager_options.py rename to src/bluesky_queueserver/manager/tests/test_manager_options.py diff --git a/bluesky_queueserver/manager/tests/test_output_streaming.py b/src/bluesky_queueserver/manager/tests/test_output_streaming.py similarity index 100% rename from bluesky_queueserver/manager/tests/test_output_streaming.py rename to src/bluesky_queueserver/manager/tests/test_output_streaming.py diff --git a/bluesky_queueserver/manager/tests/test_plan_monitoring.py b/src/bluesky_queueserver/manager/tests/test_plan_monitoring.py similarity index 100% rename from bluesky_queueserver/manager/tests/test_plan_monitoring.py rename to src/bluesky_queueserver/manager/tests/test_plan_monitoring.py diff --git a/bluesky_queueserver/manager/tests/test_plan_queue_ops.py b/src/bluesky_queueserver/manager/tests/test_plan_queue_ops.py similarity index 100% rename from bluesky_queueserver/manager/tests/test_plan_queue_ops.py rename to src/bluesky_queueserver/manager/tests/test_plan_queue_ops.py diff --git a/bluesky_queueserver/manager/tests/test_profile_ops.py b/src/bluesky_queueserver/manager/tests/test_profile_ops.py similarity index 100% rename from bluesky_queueserver/manager/tests/test_profile_ops.py rename to src/bluesky_queueserver/manager/tests/test_profile_ops.py diff --git a/bluesky_queueserver/manager/tests/test_profile_tools.py b/src/bluesky_queueserver/manager/tests/test_profile_tools.py similarity index 100% rename from bluesky_queueserver/manager/tests/test_profile_tools.py rename to src/bluesky_queueserver/manager/tests/test_profile_tools.py diff --git a/bluesky_queueserver/manager/tests/test_qserver_cli.py b/src/bluesky_queueserver/manager/tests/test_qserver_cli.py similarity index 100% rename from bluesky_queueserver/manager/tests/test_qserver_cli.py rename to src/bluesky_queueserver/manager/tests/test_qserver_cli.py diff --git a/bluesky_queueserver/manager/tests/test_qserver_console.py b/src/bluesky_queueserver/manager/tests/test_qserver_console.py similarity index 100% rename from bluesky_queueserver/manager/tests/test_qserver_console.py rename to src/bluesky_queueserver/manager/tests/test_qserver_console.py diff --git a/bluesky_queueserver/manager/tests/test_scenarios.py b/src/bluesky_queueserver/manager/tests/test_scenarios.py similarity index 100% rename from bluesky_queueserver/manager/tests/test_scenarios.py rename to src/bluesky_queueserver/manager/tests/test_scenarios.py diff --git a/bluesky_queueserver/manager/tests/test_start_manager.py b/src/bluesky_queueserver/manager/tests/test_start_manager.py similarity index 100% rename from bluesky_queueserver/manager/tests/test_start_manager.py rename to src/bluesky_queueserver/manager/tests/test_start_manager.py diff --git a/bluesky_queueserver/manager/tests/test_start_re_manager_cli.py b/src/bluesky_queueserver/manager/tests/test_start_re_manager_cli.py similarity index 100% rename from bluesky_queueserver/manager/tests/test_start_re_manager_cli.py rename to src/bluesky_queueserver/manager/tests/test_start_re_manager_cli.py diff --git a/bluesky_queueserver/manager/tests/test_task_results.py b/src/bluesky_queueserver/manager/tests/test_task_results.py similarity index 100% rename from bluesky_queueserver/manager/tests/test_task_results.py rename to src/bluesky_queueserver/manager/tests/test_task_results.py diff --git a/bluesky_queueserver/manager/tests/test_utils.py b/src/bluesky_queueserver/manager/tests/test_utils.py similarity index 100% rename from bluesky_queueserver/manager/tests/test_utils.py rename to src/bluesky_queueserver/manager/tests/test_utils.py diff --git a/bluesky_queueserver/manager/tests/test_zmq_api_base.py b/src/bluesky_queueserver/manager/tests/test_zmq_api_base.py similarity index 100% rename from bluesky_queueserver/manager/tests/test_zmq_api_base.py rename to src/bluesky_queueserver/manager/tests/test_zmq_api_base.py diff --git a/bluesky_queueserver/manager/utils.py b/src/bluesky_queueserver/manager/utils.py similarity index 100% rename from bluesky_queueserver/manager/utils.py rename to src/bluesky_queueserver/manager/utils.py diff --git a/bluesky_queueserver/manager/worker.py b/src/bluesky_queueserver/manager/worker.py similarity index 100% rename from bluesky_queueserver/manager/worker.py rename to src/bluesky_queueserver/manager/worker.py diff --git a/bluesky_queueserver/profile_collection_sim/00-ophyd.py b/src/bluesky_queueserver/profile_collection_sim/00-ophyd.py similarity index 100% rename from bluesky_queueserver/profile_collection_sim/00-ophyd.py rename to src/bluesky_queueserver/profile_collection_sim/00-ophyd.py diff --git a/bluesky_queueserver/profile_collection_sim/05-run-engine.py b/src/bluesky_queueserver/profile_collection_sim/05-run-engine.py similarity index 100% rename from bluesky_queueserver/profile_collection_sim/05-run-engine.py rename to src/bluesky_queueserver/profile_collection_sim/05-run-engine.py diff --git a/bluesky_queueserver/profile_collection_sim/15-plans.py b/src/bluesky_queueserver/profile_collection_sim/15-plans.py similarity index 100% rename from bluesky_queueserver/profile_collection_sim/15-plans.py rename to src/bluesky_queueserver/profile_collection_sim/15-plans.py diff --git a/bluesky_queueserver/profile_collection_sim/99-custom.py b/src/bluesky_queueserver/profile_collection_sim/99-custom.py similarity index 100% rename from bluesky_queueserver/profile_collection_sim/99-custom.py rename to src/bluesky_queueserver/profile_collection_sim/99-custom.py diff --git a/bluesky_queueserver/profile_collection_sim/existing_plans_and_devices.yaml b/src/bluesky_queueserver/profile_collection_sim/existing_plans_and_devices.yaml similarity index 100% rename from bluesky_queueserver/profile_collection_sim/existing_plans_and_devices.yaml rename to src/bluesky_queueserver/profile_collection_sim/existing_plans_and_devices.yaml diff --git a/bluesky_queueserver/profile_collection_sim/user_group_permissions.yaml b/src/bluesky_queueserver/profile_collection_sim/user_group_permissions.yaml similarity index 100% rename from bluesky_queueserver/profile_collection_sim/user_group_permissions.yaml rename to src/bluesky_queueserver/profile_collection_sim/user_group_permissions.yaml diff --git a/bluesky_queueserver/tests/__init__.py b/src/bluesky_queueserver/tests/__init__.py similarity index 100% rename from bluesky_queueserver/tests/__init__.py rename to src/bluesky_queueserver/tests/__init__.py diff --git a/bluesky_queueserver/tests/common.py b/src/bluesky_queueserver/tests/common.py similarity index 100% rename from bluesky_queueserver/tests/common.py rename to src/bluesky_queueserver/tests/common.py diff --git a/bluesky_queueserver/tests/conftest.py b/src/bluesky_queueserver/tests/conftest.py similarity index 100% rename from bluesky_queueserver/tests/conftest.py rename to src/bluesky_queueserver/tests/conftest.py From b26088bfc9d46f11295df2a2f2c6c7c2e15e4c7e Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Mon, 13 Jul 2026 14:12:44 -0400 Subject: [PATCH 02/31] CI: initialize pixi --- .gitattributes | 2 ++ .gitignore | 3 +++ pixi.toml | 15 +++++++++++++++ 3 files changed, 20 insertions(+) create mode 100644 pixi.toml diff --git a/.gitattributes b/.gitattributes index d3fba7fe..e5de5d64 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,3 @@ bluesky_queueserver/_version.py export-subst +# SCM syntax highlighting & preventing 3-way merges +pixi.lock merge=binary linguist-language=YAML linguist-generated=true -diff diff --git a/.gitignore b/.gitignore index db4b6559..b0283892 100644 --- a/.gitignore +++ b/.gitignore @@ -83,3 +83,6 @@ target/ # pytest-xprocess .xprocess/ +# pixi environments +.pixi/* +!.pixi/config.toml diff --git a/pixi.toml b/pixi.toml new file mode 100644 index 00000000..260eadce --- /dev/null +++ b/pixi.toml @@ -0,0 +1,15 @@ +[workspace] +authors = ["Dmitri Gavrilov "] +channels = ["conda-forge"] +name = "bluesky-queueserver" +platforms = ["linux-64"] +version = "0.0.24" + +[tasks] + +[dependencies] +python = "*" +pip = "*" + +[pypi-dependencies] +bluesky-queueserver = { path = ".", editable = true, extras = ["dev"] } From 68cc382cb5baea0b0be5c7eb480649ea260d95a8 Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Tue, 14 Jul 2026 09:47:46 -0400 Subject: [PATCH 03/31] CI: tests running with pixi locally --- docs/source/features_and_config.rst | 2 +- docs/source/tutorials.rst | 6 +- pixi.lock | 4948 +++++++++++++++++++++++++++ pixi.toml | 23 + pyproject.toml | 12 +- setup.cfg | 6 - setup.py | 75 - src/bluesky_queueserver/__init__.py | 5 +- src/bluesky_queueserver/_version.py | 575 +--- versioneer.py | 1824 ---------- 10 files changed, 5008 insertions(+), 2468 deletions(-) create mode 100644 pixi.lock delete mode 100644 setup.cfg delete mode 100644 setup.py delete mode 100644 versioneer.py diff --git a/docs/source/features_and_config.rst b/docs/source/features_and_config.rst index 15e9b175..435ea29c 100644 --- a/docs/source/features_and_config.rst +++ b/docs/source/features_and_config.rst @@ -145,7 +145,7 @@ is created with the sole purpose of demonstrating different types of name patter - ":^motor\\d+$:?.*" # Same for all numbered motors, such as 'motor2' or 'motor256' It is recommended that new projects are started using the sample file -`user_group_permissions.yaml `_, +`user_group_permissions.yaml `_, which could be copied to the directory containing startup files and then modified according to the project needs. diff --git a/docs/source/tutorials.rst b/docs/source/tutorials.rst index 84bed714..6c31c3e1 100644 --- a/docs/source/tutorials.rst +++ b/docs/source/tutorials.rst @@ -142,7 +142,7 @@ a new RE Worker process (for executing Bluesky plans), configures Run Engine and loads startup code in the RE Worker namespace. RE Manager may load startup code represented as a set of startup files (IPython style), Python script or module. ``bluesky-queueserver`` package includes -`a set of startup files `_ +`a set of startup files `_ with simulated devices and plans sufficient for simple demos. RE Manager is loading the built-in startup code unless alternative location is specified (see :ref:`tutorial_running_custom_startup_code`). @@ -2005,7 +2005,7 @@ or replaced custom scripts. The directory should be readable and writable for the user running RE Manager. **Step 2.** Copy startup scripts (only .py files) and ``user_group_permissions.yaml`` from -`the repository `_ +`the repository `_ to ``~/qs_startup``. The file ``existing_plans_and_devices.yaml`` will be generated by RE Manager as part of the tutorial, so do not copy it. The directory should contain the following files:: @@ -2067,7 +2067,7 @@ Manually Generating Lists of Existing Plans and Devices RE Manager generates or updates the list of existing plans and devices automatically when RE Worker environment is opened, but in some cases it is convenient to generate the list manually. For example, the developers wishing to update ``existing_plans_and_devices.yaml`` -in `the 'profile_collection_sim' directory `_ +in `the 'profile_collection_sim' directory `_ when the respective startup files are modified only have the option to do it manually (RE Manager is designed not to automatically modify files in built-in ``profile_collection_sim`` directory). diff --git a/pixi.lock b/pixi.lock new file mode 100644 index 00000000..083bfede --- /dev/null +++ b/pixi.lock @@ -0,0 +1,4948 @@ +version: 6 +environments: + default: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + options: + pypi-prerelease-mode: if-necessary-or-explicit + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.3-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.2-pyh145f28c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.6-habeac84_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - pypi: https://files.pythonhosted.org/packages/51/89/da0f32b679b8769dd472eb2927308d328bf75c296629fd9f95135afacd0a/aioca-2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/2b/04b8a15f3a1c77bc79ddf5c73875327f34b4fa75982df2b76e45e402d364/asttokens-3.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/6b/cfaf3d39f25132c156a068f6b805576c9103a84086019507c70e1911ee7d/black-26.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8e/99/cc217b2a727fdf730d0c0064bc8c03473dfe5d0528f2bd0c4f59fdab4179/bluesky-1.15.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/c4/b3e049d2aa3766180c78507110543d9d50894cc97f57de543f1be521dcdc/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/4f/f94ac1b84d2169cf2ebf64353ce98fd743f85d30678059c514d9b3d6644c/compress_pickle-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/5f/9ff93450ba96b09c7c2b3f81c94de31c89f92292f1380261bd7195bea4ea/contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e1/53/0d3dd963631259d794c898735d5436e68d6a8d40749c419a07ff7c171469/coverage-7.15.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/51/67e7cf11a53e40694f720457d5b3a1cdaaa3d5a9a633e482f225456b93ff/debugpy-1.8.21-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/a8/365059bbcd4572cbc41de17fd5b682be5868b218c3c5479071865cab9078/entrypoints-0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/57/42c5bb50507c528d9af10879067920d27c5a6b33fbef16c2e1b55de77ccc/epicscorelibs-7.0.10.99.0.1-cp314-cp314-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/9e/d410b0ff08a2519d197928afdc1aa36eb47e197f5ba683389b00e216f83c/event_model-1.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/60/02/be4a57b60c7149b55b9e3b3c13f609cd8eb5307c751f22bd8fb8d262e75b/filelock-3.29.7-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/36/e1/a8933a72c45a87177fbde2696e0d0755c8c9062f8c077a961c6215fa27b1/fonttools-4.63.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/16/d905e7f53e661ce2c24686c38048d8e2b750ffc4350009d41c4e6c6c9826/h5py-3.16.0-cp314-cp314-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ce/27/83314cfd4800ada7542ba49efc772c7a8949d349c7bec177e4e7fa5257e0/happi-3.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/70/b7/32110aa458690722a1069c7349b8ebe374a6ba0bdf9ef8925a9f37a74978/hiredis-3.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fe/47/deb64c73aec25af7699247e021153a6bfe9a08452f7f7337dcee4aa07a2b/historydict-1.2.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f0/0f/310fb31e39e2d734ccaa2c0fb981ee41f7bd5056ce9bc29b2248bd569169/humanfriendly-10.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/fa/391e437a34e55095173dca5f24070d89cbc233ff85bf1c29c93248c6588d/imageio-2.37.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bc/a4/d6f91d756f901626a30f47578e0bfdfde401e54a3eb49cb9dce9b855000a/intake-2.0.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3d/02/77b271f5dc58bfbc0b577c877b2365d1ffea2afe66a80c13f2312820348c/ipykernel-7.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/40/3a/948263ca3b9d65bb2b1b0c521b3a49fad5d59ada58724bd87d2bd5ff3f36/ipython-9.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/95/c7c34aa53c16353c56d0b802fba48d5f5caa2cdee7958acbcb795c830416/isort-8.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9a/93/242e2eab5fe682ffcb8b0084bde703a41d51e17ee0f3a31ff0d9d813620a/jedi-0.20.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3f/6f/56d39bf385c5c27988aebaf0c18a2a17e960575740100973511018bd904e/jupyter_client-8.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ca/77/71d78d58f15c22db16328a476426f7ac4a60d3a5a7ba3b9627ee2f7903d4/jupyter_console-6.6.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/f9/b06c934a6aa8bc91f566bd2a214fd04c30506c2d9e2b6b171953216a65b6/kiwisolver-1.5.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8a/a1/8d812e53a5da1687abb10445275d41a8b13adb781bbf7196ddbcf8d88505/lazy_loader-0.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/01/d52c7b11eaa286d49dae619c0eec4aabc0bf3cda7a7467eb77c62c4471f3/lz4-4.4.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/29/dc/6377ecfaa5fef79430f74a1a16638b4e2aa30d4692bae2c19f9d76fe3b01/matplotlib-3.11.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/19/03/8c63e8cf52958534ef688625965ab04c269a6cadd8caef16758b380a821a/msgpack-1.2.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9b/5d/f25ac7d4fb77cbd53ddc6d05d833c6bf52b12770a44fa9a447eed470ca9a/msgpack_numpy-0.4.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c5/3c/3179b85b0e1c3659f0369940200cd6d0fa900e6cefcc7ea0bc6dd0e29ffb/nest_asyncio2-1.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/5f/0f992cb24560673496c5d68de61913b57166ce530ffda07c1f280e0cc464/numpy-2.5.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/62/5e/3a6a3e90f35cea3853c45e5d5fb9b7192ce4384616f932cf7591298ab6e1/numpydoc-1.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/17/83/6dba32b85f31868400440dc7ad2ca1eab94cbbf3a7b0459ed39f8311a9e2/opentelemetry_api-1.43.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ef/80/c6dbf1f8d14fbb5615d2e99b798d61b76eb937f09e1e948d0e8aaf8873b2/ophyd-1.11.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/2c/76ac5e485f6405fc0f1dbbd1c98b7c1137d4aa5c1e49ea9e69bbd8d22ae1/ophyd_async-0.19.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/99/5d/8268b644392ee874ee82a635cd0df1773de230bde356c38de28e298392cc/parso-0.8.7-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1b/dd/a9fe6a0a09512da23951c68bf36466aeecd89def3183dc095edbc807ddc5/pint-0.25.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fe/be/2e6798ace5cc036f5d05d36b7b2fd85346f1a708c87060890b070d0ec607/prettytable-3.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/29/0ed312ec800fb536f93783215126cee4b8977dcfeccba6f0f44df0cc87d7/pyarrow-25.0.0-cp314-cp314-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/90/cb/c13d8a74419dde9590ed6fab293b516f68316ac87d06569b79b5f446d519/pydantic_numpy-8.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ae/a1/d4423657caaa8be9b31e491592b49cebdcfd434d3e74512ce71f6ec39905/pytest_split-0.11.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/63/cf/91b94238c843bfbae0a6674df45015aa3908b91454c496b2eb29e7991255/pytest_xprocess-1.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9d/ae/84bc0d2440c95772272bb6f4b3d09ccf08b2898fce89b3d4f969a9fc74e9/python_discovery-1.4.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e1/04/e8135ebd1ad02c56ec633277529b2602ff99ff634be76cdba5744cf554fd/python_multipart-0.0.32-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0f/95/70d7041273890f9f97a24234c00b746e8da86df462620194cef1d411ddeb/pytokens-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fd/0a/c2345ebf1ebe70840ce3f6c6ee612f8fa749cfbd1b03069c53bf0c62aaad/redis-8.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d1/9c/0d1fdc2e7aba23e290d603bc494e97bd205bae262ce33c6b32a69768ed5e/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/af/fe/b6045c782f1fd1ae317d2a6ca1884857ce5c20f59befe6ab25a8603c43a7/ruamel_yaml-0.18.17-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a1/5c/8b56b08db91e569d0a4fbfa3e492ed2026081bdd7e892f63ba1c88a2f548/ruamel_yaml_clib-0.2.15-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/68/b9/f44b139096467996b4d85589d9880fd55f0c80a204d298a1b73d0adc2654/scanspec-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/73/c3/cec6a3cbaadfdcc02bd6ff02f3abfe09eaa7f4d4e0a525a1e3a3f4bce49c/scikit_image-0.26.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/7f/c4/bc41eb19b0fd0db868f4132920879019318d80cc522ad8f2bca4611af808/scipy-1.18.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/40/e1e72872c6354b306daef1703549e8e83b4d43cfea356311bf722a043752/setuptools-83.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/51/6b/3feec8016ab2263946c4480510d2d1a7924a5400c455974a7a0344bb4304/setuptools_dso-2.12.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/91/3635cdb13318cb0a328abaa69e2b91251caad39d6779aa308098f341f6cb/simplejson-4.1.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/87/c7/b5c8015d823bfda1a346adb2c634a2101d50bb75d421eb6dcb31acd25ebc/sphinx_rtd_theme-3.1.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/85/749bd22d1a68db7291c89e2ebca53f4306c3f205853cf31e9de279034c3c/sphinxcontrib_jquery-4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1d/f0/1ff90a1d1dd02de23feafdf9dffaecef3958348be5c192df56670ccb4f86/stamina-26.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/59/208f71d70ddc6184f79b8c6d87d46eb7d7b12c19186a817dec9c9c3f3693/tifffile-2026.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/37/d8/ef374952fd5da67d4463122c2b8e5a96536ec10b4b339254c6dcde81d01c/tornado-6.5.7-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/22/2a/5e5e750890ada51017d18d0d4c30da696e5b5bd3180947729927628fc3cb/tqdm-4.68.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/8d/1080ee4c231f361b6ce4470d556c8c435b67c7e0753aaa641497ee92f88b/traitlets-5.15.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/72/89/0265b2b79424ed05b8d1e9c8fca71e1b150478e5b0c19aa50b0ae397326e/velocity_profile-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/7c/4e7225d46d634a0d8d534dd8a6ce0c319d09b4d0cf0337eb314ca4789d8c/virtualenv-21.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/42/3e5985a0a7e57de470b320c6d6a1a67c844f6737a587f3d44dd13d1819e7/wcwidth-0.8.2-py3-none-any.whl + - pypi: ./ + py311: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + options: + pypi-prerelease-mode: if-necessary-or-explicit + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.3-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.2-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.15-h7508c33_1_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-83.0.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - pypi: https://files.pythonhosted.org/packages/51/89/da0f32b679b8769dd472eb2927308d328bf75c296629fd9f95135afacd0a/aioca-2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/2b/04b8a15f3a1c77bc79ddf5c73875327f34b4fa75982df2b76e45e402d364/asttokens-3.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/06/3a/7c448bc623fcdfa96672531beb5a616ea5e64f6975955254d7731ffb0ad9/black-26.5.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8e/99/cc217b2a727fdf730d0c0064bc8c03473dfe5d0528f2bd0c4f59fdab4179/bluesky-1.15.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a5/34/49b9060e8418b14fb5cba9cf6bfb383111e2538a03a1fb18e66a95aeb3d5/charset_normalizer-3.4.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/4f/f94ac1b84d2169cf2ebf64353ce98fd743f85d30678059c514d9b3d6644c/compress_pickle-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/4b/6157f24ca425b89fe2eb7e7be642375711ab671135be21e6faa100f7448c/contourpy-1.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/05/37/5e439725a96de592309725550c8df639c359c209dcb4b152ed46032d4c0d/coverage-7.15.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/51/67e7cf11a53e40694f720457d5b3a1cdaaa3d5a9a633e482f225456b93ff/debugpy-1.8.21-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/a8/365059bbcd4572cbc41de17fd5b682be5868b218c3c5479071865cab9078/entrypoints-0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/12/29/ce9c8e81a6b9be7722ac00cb592ce6b652405eecb178bf410810732957ec/epicscorelibs-7.0.10.99.0.1-cp311-cp311-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/9e/d410b0ff08a2519d197928afdc1aa36eb47e197f5ba683389b00e216f83c/event_model-1.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/60/02/be4a57b60c7149b55b9e3b3c13f609cd8eb5307c751f22bd8fb8d262e75b/filelock-3.29.7-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0b/43/a81f20050a3115b57d62c8e781446949512eac36690dc384ccea65ff4cc1/fonttools-4.63.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a0/c1f604538ff6db22a0690be2dc44ab59178e115f63c917794e529356ab23/h5py-3.16.0-cp311-cp311-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ce/27/83314cfd4800ada7542ba49efc772c7a8949d349c7bec177e4e7fa5257e0/happi-3.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/07/716ffeb049377d92da6261c5563e554b82336ce3eafb11eb4510c5558be7/hiredis-3.4.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fe/47/deb64c73aec25af7699247e021153a6bfe9a08452f7f7337dcee4aa07a2b/historydict-1.2.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f0/0f/310fb31e39e2d734ccaa2c0fb981ee41f7bd5056ce9bc29b2248bd569169/humanfriendly-10.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/fa/391e437a34e55095173dca5f24070d89cbc233ff85bf1c29c93248c6588d/imageio-2.37.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bc/a4/d6f91d756f901626a30f47578e0bfdfde401e54a3eb49cb9dce9b855000a/intake-2.0.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3d/02/77b271f5dc58bfbc0b577c877b2365d1ffea2afe66a80c13f2312820348c/ipykernel-7.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/40/3a/948263ca3b9d65bb2b1b0c521b3a49fad5d59ada58724bd87d2bd5ff3f36/ipython-9.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/95/c7c34aa53c16353c56d0b802fba48d5f5caa2cdee7958acbcb795c830416/isort-8.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9a/93/242e2eab5fe682ffcb8b0084bde703a41d51e17ee0f3a31ff0d9d813620a/jedi-0.20.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3f/6f/56d39bf385c5c27988aebaf0c18a2a17e960575740100973511018bd904e/jupyter_client-8.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ca/77/71d78d58f15c22db16328a476426f7ac4a60d3a5a7ba3b9627ee2f7903d4/jupyter_console-6.6.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/80/46/bddc13df6c2a40741e0cc7865bb1c9ed4796b6760bd04ce5fae3928ef917/kiwisolver-1.5.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8a/a1/8d812e53a5da1687abb10445275d41a8b13adb781bbf7196ddbcf8d88505/lazy_loader-0.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/3b/b55cb577aa148ed4e383e9700c36f70b651cd434e1c07568f0a86c9d5fbb/lz4-4.4.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/53/f4/f0b4f9ba7ec14a7af8151f3ad71ecfe3561e6ba38cfab1db3681ba4ca112/matplotlib-3.11.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/03/8d/671d81534ea0e2b0e8a121be100020da09eb78861fe3aa8f3ef7dcd3bed1/msgpack-1.2.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9b/5d/f25ac7d4fb77cbd53ddc6d05d833c6bf52b12770a44fa9a447eed470ca9a/msgpack_numpy-0.4.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c5/3c/3179b85b0e1c3659f0369940200cd6d0fa900e6cefcc7ea0bc6dd0e29ffb/nest_asyncio2-1.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/02/03/74fe2a4cb3817d94d86402f2506554130a2f01414e299b5a843e5a8a957f/numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/62/5e/3a6a3e90f35cea3853c45e5d5fb9b7192ce4384616f932cf7591298ab6e1/numpydoc-1.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/17/83/6dba32b85f31868400440dc7ad2ca1eab94cbbf3a7b0459ed39f8311a9e2/opentelemetry_api-1.43.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ef/80/c6dbf1f8d14fbb5615d2e99b798d61b76eb937f09e1e948d0e8aaf8873b2/ophyd-1.11.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/2c/76ac5e485f6405fc0f1dbbd1c98b7c1137d4aa5c1e49ea9e69bbd8d22ae1/ophyd_async-0.19.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/f1/bbecd2f867b97abebe0f9b53d750f862251b40337e061b36676ded3d920f/pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/99/5d/8268b644392ee874ee82a635cd0df1773de230bde356c38de28e298392cc/parso-0.8.7-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3b/2d/ede717bc1144f63886c21fd349bb95860b0d1a21149ff16f2bb362b612b6/pillow-12.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1b/dd/a9fe6a0a09512da23951c68bf36466aeecd89def3183dc095edbc807ddc5/pint-0.25.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fe/be/2e6798ace5cc036f5d05d36b7b2fd85346f1a708c87060890b070d0ec607/prettytable-3.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/79/72d704b02bc5fc6d06954d76a0208c1e79cad3ab370f6d6a91ffe5078870/pyarrow-25.0.0-cp311-cp311-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/80/50/540cd3aeefc041beb111125c4bff779831a2111fc6b15a9138cda277d32c/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/90/cb/c13d8a74419dde9590ed6fab293b516f68316ac87d06569b79b5f446d519/pydantic_numpy-8.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ae/a1/d4423657caaa8be9b31e491592b49cebdcfd434d3e74512ce71f6ec39905/pytest_split-0.11.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/63/cf/91b94238c843bfbae0a6674df45015aa3908b91454c496b2eb29e7991255/pytest_xprocess-1.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9d/ae/84bc0d2440c95772272bb6f4b3d09ccf08b2898fce89b3d4f969a9fc74e9/python_discovery-1.4.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e1/04/e8135ebd1ad02c56ec633277529b2602ff99ff634be76cdba5744cf554fd/python_multipart-0.0.32-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/17/50/bc0394b4ad5b1601be22fa43652173d47e4c9efbf0044c62e9a59b747c56/pytokens-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b1/c4/2a6fe5111a01005fc7af3878259ce17684fabb8852815eda6225620f3c59/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fd/0a/c2345ebf1ebe70840ce3f6c6ee612f8fa749cfbd1b03069c53bf0c62aaad/redis-8.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5e/19/7e98f468bd50346faff5b10e5297374b443bfdddacc8e9fbc65984539597/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/af/fe/b6045c782f1fd1ae317d2a6ca1884857ce5c20f59befe6ab25a8603c43a7/ruamel_yaml-0.18.17-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/ed/3fb20a1a96b8dc645d88c4072df481fe06e0289e4d528ebbdcc044ebc8b3/ruamel_yaml_clib-0.2.15-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/68/b9/f44b139096467996b4d85589d9880fd55f0c80a204d298a1b73d0adc2654/scanspec-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a5/2a/e71c1a7d90e70da67b88ccc609bd6ae54798d5847369b15d3a8052232f9d/scikit_image-0.26.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/09/7d/af933f0f6e0767995b4e2d705a0665e454d1c19402aa7e895de3951ebb04/scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/51/6b/3feec8016ab2263946c4480510d2d1a7924a5400c455974a7a0344bb4304/setuptools_dso-2.12.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/80/7e/c9e6c0c4ad8415e64dad0c47f619b556b02680a41631b4dbc281d55dc54d/simplejson-4.1.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/87/c7/b5c8015d823bfda1a346adb2c634a2101d50bb75d421eb6dcb31acd25ebc/sphinx_rtd_theme-3.1.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/85/749bd22d1a68db7291c89e2ebca53f4306c3f205853cf31e9de279034c3c/sphinxcontrib_jquery-4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1d/f0/1ff90a1d1dd02de23feafdf9dffaecef3958348be5c192df56670ccb4f86/stamina-26.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/e4/e804505f87627cd8cdae9c010c47c4485fd8c1ce31a7dd0ab7fcc4707377/tifffile-2026.3.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/37/d8/ef374952fd5da67d4463122c2b8e5a96536ec10b4b339254c6dcde81d01c/tornado-6.5.7-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/22/2a/5e5e750890ada51017d18d0d4c30da696e5b5bd3180947729927628fc3cb/tqdm-4.68.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/8d/1080ee4c231f361b6ce4470d556c8c435b67c7e0753aaa641497ee92f88b/traitlets-5.15.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/72/89/0265b2b79424ed05b8d1e9c8fca71e1b150478e5b0c19aa50b0ae397326e/velocity_profile-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/7c/4e7225d46d634a0d8d534dd8a6ce0c319d09b4d0cf0337eb314ca4789d8c/virtualenv-21.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/42/3e5985a0a7e57de470b320c6d6a1a67c844f6737a587f3d44dd13d1819e7/wcwidth-0.8.2-py3-none-any.whl + - pypi: ./ + py312: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + options: + pypi-prerelease-mode: if-necessary-or-explicit + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.3-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.2-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.13-hd63d673_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-83.0.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - pypi: https://files.pythonhosted.org/packages/51/89/da0f32b679b8769dd472eb2927308d328bf75c296629fd9f95135afacd0a/aioca-2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/2b/04b8a15f3a1c77bc79ddf5c73875327f34b4fa75982df2b76e45e402d364/asttokens-3.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1f/0e/36044316b65ca471d3bb6d3703fd06fb50c6b727c3562f6a5a3153634f88/black-26.5.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8e/99/cc217b2a727fdf730d0c0064bc8c03473dfe5d0528f2bd0c4f59fdab4179/bluesky-1.15.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/01/c4/4fa4c8b3097a11f3c5f09a35b72ed6855fb1d332469504962ab7bafcc702/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/4f/f94ac1b84d2169cf2ebf64353ce98fd743f85d30678059c514d9b3d6644c/compress_pickle-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e5/81/c7009ed7ea9765adb2b9d095054d748266fae5f07ac6c5f925f33715fcde/coverage-7.15.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/51/67e7cf11a53e40694f720457d5b3a1cdaaa3d5a9a633e482f225456b93ff/debugpy-1.8.21-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/a8/365059bbcd4572cbc41de17fd5b682be5868b218c3c5479071865cab9078/entrypoints-0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4f/7b/55f41ec7746713db21aff5e794fc98b5a2e4c40fc72d69f6a1cdb04df360/epicscorelibs-7.0.10.99.0.1-cp312-cp312-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/9e/d410b0ff08a2519d197928afdc1aa36eb47e197f5ba683389b00e216f83c/event_model-1.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/60/02/be4a57b60c7149b55b9e3b3c13f609cd8eb5307c751f22bd8fb8d262e75b/filelock-3.29.7-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/77/c7/2342da9830e3e9d4870305ca5d2091d2a83284f2953079b7bdd3b5e029d8/fonttools-4.63.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/e9/1a19e42cd43cc1365e127db6aae85e1c671da1d9a5d746f4d34a50edb577/h5py-3.16.0-cp312-cp312-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ce/27/83314cfd4800ada7542ba49efc772c7a8949d349c7bec177e4e7fa5257e0/happi-3.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/8c/440369f727dcb856f3eeda238d6e67781b180feaa831bd28997d8af10c3b/hiredis-3.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fe/47/deb64c73aec25af7699247e021153a6bfe9a08452f7f7337dcee4aa07a2b/historydict-1.2.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f0/0f/310fb31e39e2d734ccaa2c0fb981ee41f7bd5056ce9bc29b2248bd569169/humanfriendly-10.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/fa/391e437a34e55095173dca5f24070d89cbc233ff85bf1c29c93248c6588d/imageio-2.37.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bc/a4/d6f91d756f901626a30f47578e0bfdfde401e54a3eb49cb9dce9b855000a/intake-2.0.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3d/02/77b271f5dc58bfbc0b577c877b2365d1ffea2afe66a80c13f2312820348c/ipykernel-7.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/40/3a/948263ca3b9d65bb2b1b0c521b3a49fad5d59ada58724bd87d2bd5ff3f36/ipython-9.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/95/c7c34aa53c16353c56d0b802fba48d5f5caa2cdee7958acbcb795c830416/isort-8.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9a/93/242e2eab5fe682ffcb8b0084bde703a41d51e17ee0f3a31ff0d9d813620a/jedi-0.20.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3f/6f/56d39bf385c5c27988aebaf0c18a2a17e960575740100973511018bd904e/jupyter_client-8.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ca/77/71d78d58f15c22db16328a476426f7ac4a60d3a5a7ba3b9627ee2f7903d4/jupyter_console-6.6.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c4/13/680c54afe3e65767bed7ec1a15571e1a2f1257128733851ade24abcefbcc/kiwisolver-1.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8a/a1/8d812e53a5da1687abb10445275d41a8b13adb781bbf7196ddbcf8d88505/lazy_loader-0.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/d9/e3867222474f6c1b76e89f3bd914595af69f55bf2c1866e984c548afdc15/lz4-4.4.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/94/95/7f522393c88313336b20d70fc849555757b2e5febc22b83b3a3f0fd4bce9/matplotlib-3.11.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/fd/6adabd4f6d5e686f97dd02ce7fce3fe4cf672cbac36b8f67ff4040e8ad8b/msgpack-1.2.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9b/5d/f25ac7d4fb77cbd53ddc6d05d833c6bf52b12770a44fa9a447eed470ca9a/msgpack_numpy-0.4.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c5/3c/3179b85b0e1c3659f0369940200cd6d0fa900e6cefcc7ea0bc6dd0e29ffb/nest_asyncio2-1.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b8/a9/6e73d68500f80773f65f0654ea932019d6694329a0eb0ed0533de38df376/numpy-2.5.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/62/5e/3a6a3e90f35cea3853c45e5d5fb9b7192ce4384616f932cf7591298ab6e1/numpydoc-1.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/17/83/6dba32b85f31868400440dc7ad2ca1eab94cbbf3a7b0459ed39f8311a9e2/opentelemetry_api-1.43.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ef/80/c6dbf1f8d14fbb5615d2e99b798d61b76eb937f09e1e948d0e8aaf8873b2/ophyd-1.11.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/2c/76ac5e485f6405fc0f1dbbd1c98b7c1137d4aa5c1e49ea9e69bbd8d22ae1/ophyd_async-0.19.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/b6/09b01cdbc15224e2850365192d17b7bdebb8bdbd8780ed221fcdf0d9a515/pandas-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/99/5d/8268b644392ee874ee82a635cd0df1773de230bde356c38de28e298392cc/parso-0.8.7-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/21/a35af28dcc61f37ed850a2d64c65c701321dfbf25085e469d5559360cbbf/pillow-12.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1b/dd/a9fe6a0a09512da23951c68bf36466aeecd89def3183dc095edbc807ddc5/pint-0.25.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fe/be/2e6798ace5cc036f5d05d36b7b2fd85346f1a708c87060890b070d0ec607/prettytable-3.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/0e/cd705c042bc4fe7022478db577fcab4abdcfabb9bc37ab7a75556b3fcb2b/pyarrow-25.0.0-cp312-cp312-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/90/cb/c13d8a74419dde9590ed6fab293b516f68316ac87d06569b79b5f446d519/pydantic_numpy-8.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ae/a1/d4423657caaa8be9b31e491592b49cebdcfd434d3e74512ce71f6ec39905/pytest_split-0.11.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/63/cf/91b94238c843bfbae0a6674df45015aa3908b91454c496b2eb29e7991255/pytest_xprocess-1.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9d/ae/84bc0d2440c95772272bb6f4b3d09ccf08b2898fce89b3d4f969a9fc74e9/python_discovery-1.4.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e1/04/e8135ebd1ad02c56ec633277529b2602ff99ff634be76cdba5744cf554fd/python_multipart-0.0.32-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bf/3c/2d5297d82286f6f3d92770289fd439956b201c0a4fc7e72efb9b2293758e/pytokens-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fd/0a/c2345ebf1ebe70840ce3f6c6ee612f8fa749cfbd1b03069c53bf0c62aaad/redis-8.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/8f/d2f3f532616be4d06c316ef119683e832bd3d41e112bf3a88f4151c95b17/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/af/fe/b6045c782f1fd1ae317d2a6ca1884857ce5c20f59befe6ab25a8603c43a7/ruamel_yaml-0.18.17-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/61/62/150c841f24cda9e30f588ef396ed83f64cfdc13b92d2f925bb96df337ba9/ruamel_yaml_clib-0.2.15-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/68/b9/f44b139096467996b4d85589d9880fd55f0c80a204d298a1b73d0adc2654/scanspec-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/a2/70401a107d6d7466d64b466927e6b96fcefa99d57494b972608e2f8be50f/scikit_image-0.26.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/dd/aa/1b939f6c67ed68635bb538e6752d3dacc02f66535182e939a89581a44e9c/scipy-1.18.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/51/6b/3feec8016ab2263946c4480510d2d1a7924a5400c455974a7a0344bb4304/setuptools_dso-2.12.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/b6/156a8de1e1b47694f0e7de6675866936608d45dc68388fd017d36f8693be/simplejson-4.1.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/87/c7/b5c8015d823bfda1a346adb2c634a2101d50bb75d421eb6dcb31acd25ebc/sphinx_rtd_theme-3.1.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/85/749bd22d1a68db7291c89e2ebca53f4306c3f205853cf31e9de279034c3c/sphinxcontrib_jquery-4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1d/f0/1ff90a1d1dd02de23feafdf9dffaecef3958348be5c192df56670ccb4f86/stamina-26.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/59/208f71d70ddc6184f79b8c6d87d46eb7d7b12c19186a817dec9c9c3f3693/tifffile-2026.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/37/d8/ef374952fd5da67d4463122c2b8e5a96536ec10b4b339254c6dcde81d01c/tornado-6.5.7-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/22/2a/5e5e750890ada51017d18d0d4c30da696e5b5bd3180947729927628fc3cb/tqdm-4.68.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/8d/1080ee4c231f361b6ce4470d556c8c435b67c7e0753aaa641497ee92f88b/traitlets-5.15.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/72/89/0265b2b79424ed05b8d1e9c8fca71e1b150478e5b0c19aa50b0ae397326e/velocity_profile-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/7c/4e7225d46d634a0d8d534dd8a6ce0c319d09b4d0cf0337eb314ca4789d8c/virtualenv-21.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/42/3e5985a0a7e57de470b320c6d6a1a67c844f6737a587f3d44dd13d1819e7/wcwidth-0.8.2-py3-none-any.whl + - pypi: ./ + py313: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + options: + pypi-prerelease-mode: if-necessary-or-explicit + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.3-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.2-pyh145f28c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.14-h6add32d_100_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - pypi: https://files.pythonhosted.org/packages/51/89/da0f32b679b8769dd472eb2927308d328bf75c296629fd9f95135afacd0a/aioca-2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/2b/04b8a15f3a1c77bc79ddf5c73875327f34b4fa75982df2b76e45e402d364/asttokens-3.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/24/8e7b9a2fa61b0afd82209efe937557d180a1fa055bd7f6161eb9defc3719/black-26.5.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8e/99/cc217b2a727fdf730d0c0064bc8c03473dfe5d0528f2bd0c4f59fdab4179/bluesky-1.15.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ea/f8/72eb13dcabe7257035cea8aefd922caad2f110d252bf9f67c4c2ca763aee/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/4f/f94ac1b84d2169cf2ebf64353ce98fd743f85d30678059c514d9b3d6644c/compress_pickle-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4b/32/e0f13a1c5b0f8572d0ec6ae2f6c677b7991fafd95da523159c19eff0696a/contourpy-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1c/5e/caf3abbdbb22629626160ffc9c017eb995b7cb11c0be46b974834cef1792/coverage-7.15.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/51/67e7cf11a53e40694f720457d5b3a1cdaaa3d5a9a633e482f225456b93ff/debugpy-1.8.21-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/a8/365059bbcd4572cbc41de17fd5b682be5868b218c3c5479071865cab9078/entrypoints-0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7c/aa/3b0faa7eea6a2957af7ee116f08b5edd99eff7e7461e22ac613b0a8d38ea/epicscorelibs-7.0.10.99.0.1-cp313-cp313-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/9e/d410b0ff08a2519d197928afdc1aa36eb47e197f5ba683389b00e216f83c/event_model-1.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/60/02/be4a57b60c7149b55b9e3b3c13f609cd8eb5307c751f22bd8fb8d262e75b/filelock-3.29.7-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/36/0b805d8c485f872f65a509cbe3b58a5d0d17bee855333b54a150c79d3061/fonttools-4.63.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/98/ef2b6fe2903e377cbe870c3b2800d62552f1e3dbe81ce49e1923c53d1c5c/h5py-3.16.0-cp313-cp313-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ce/27/83314cfd4800ada7542ba49efc772c7a8949d349c7bec177e4e7fa5257e0/happi-3.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/33/b5/ff8fe4f812348f09d2943b109cb64c5301af4f601e1cf026518e93a72fff/hiredis-3.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fe/47/deb64c73aec25af7699247e021153a6bfe9a08452f7f7337dcee4aa07a2b/historydict-1.2.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f0/0f/310fb31e39e2d734ccaa2c0fb981ee41f7bd5056ce9bc29b2248bd569169/humanfriendly-10.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/fa/391e437a34e55095173dca5f24070d89cbc233ff85bf1c29c93248c6588d/imageio-2.37.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bc/a4/d6f91d756f901626a30f47578e0bfdfde401e54a3eb49cb9dce9b855000a/intake-2.0.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3d/02/77b271f5dc58bfbc0b577c877b2365d1ffea2afe66a80c13f2312820348c/ipykernel-7.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/40/3a/948263ca3b9d65bb2b1b0c521b3a49fad5d59ada58724bd87d2bd5ff3f36/ipython-9.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/95/c7c34aa53c16353c56d0b802fba48d5f5caa2cdee7958acbcb795c830416/isort-8.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9a/93/242e2eab5fe682ffcb8b0084bde703a41d51e17ee0f3a31ff0d9d813620a/jedi-0.20.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3f/6f/56d39bf385c5c27988aebaf0c18a2a17e960575740100973511018bd904e/jupyter_client-8.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ca/77/71d78d58f15c22db16328a476426f7ac4a60d3a5a7ba3b9627ee2f7903d4/jupyter_console-6.6.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2b/0a/7b98e1e119878a27ba8618ca1e18b14f992ff1eda40f47bccccf4de44121/kiwisolver-1.5.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8a/a1/8d812e53a5da1687abb10445275d41a8b13adb781bbf7196ddbcf8d88505/lazy_loader-0.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d2/fb/ba9256c48266a09012ed1d9b0253b9aa4fe9cdff094f8febf5b26a4aa2a2/lz4-4.4.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a4/c0/1117d53077e3ac3152503a84e9cf7a5c239576805ee71276e80c2aaa7471/matplotlib-3.11.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/79/d3/36a46a8ed992b781acbc05928bd5bee3c810cb0c3563bf81a7b0c04a1a76/msgpack-1.2.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9b/5d/f25ac7d4fb77cbd53ddc6d05d833c6bf52b12770a44fa9a447eed470ca9a/msgpack_numpy-0.4.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c5/3c/3179b85b0e1c3659f0369940200cd6d0fa900e6cefcc7ea0bc6dd0e29ffb/nest_asyncio2-1.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/a7/2bcd3fdbb87804755c35b729bf8709d62025c5f4cfd7d5b2415997097515/numpy-2.5.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/62/5e/3a6a3e90f35cea3853c45e5d5fb9b7192ce4384616f932cf7591298ab6e1/numpydoc-1.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/17/83/6dba32b85f31868400440dc7ad2ca1eab94cbbf3a7b0459ed39f8311a9e2/opentelemetry_api-1.43.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ef/80/c6dbf1f8d14fbb5615d2e99b798d61b76eb937f09e1e948d0e8aaf8873b2/ophyd-1.11.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/2c/76ac5e485f6405fc0f1dbbd1c98b7c1137d4aa5c1e49ea9e69bbd8d22ae1/ophyd_async-0.19.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/99/68/1237369725aa617bb358263d535803e3053fdbc593513ec5ed9c9896b5b6/pandas-3.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/99/5d/8268b644392ee874ee82a635cd0df1773de230bde356c38de28e298392cc/parso-0.8.7-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f7/62/de5bdd77d935331f4f802edc11e4d82950f642caad6cb2f949837b8560e2/pillow-12.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1b/dd/a9fe6a0a09512da23951c68bf36466aeecd89def3183dc095edbc807ddc5/pint-0.25.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fe/be/2e6798ace5cc036f5d05d36b7b2fd85346f1a708c87060890b070d0ec607/prettytable-3.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/5d/f790fb6965ab54c9da0dda7856abc75fd0d7648d865f8d603c111d203a64/pyarrow-25.0.0-cp313-cp313-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/07/f8/41db9de19d7987d6b04715a02b3b40aea467000275d9d758ffaa31af7d50/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/90/cb/c13d8a74419dde9590ed6fab293b516f68316ac87d06569b79b5f446d519/pydantic_numpy-8.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ae/a1/d4423657caaa8be9b31e491592b49cebdcfd434d3e74512ce71f6ec39905/pytest_split-0.11.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/63/cf/91b94238c843bfbae0a6674df45015aa3908b91454c496b2eb29e7991255/pytest_xprocess-1.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9d/ae/84bc0d2440c95772272bb6f4b3d09ccf08b2898fce89b3d4f969a9fc74e9/python_discovery-1.4.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e1/04/e8135ebd1ad02c56ec633277529b2602ff99ff634be76cdba5744cf554fd/python_multipart-0.0.32-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e0/d2/afe5c7f8607018beb99971489dbb846508f1b8f351fcefc225fcf4b2adc0/pytokens-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fd/0a/c2345ebf1ebe70840ce3f6c6ee612f8fa749cfbd1b03069c53bf0c62aaad/redis-8.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/57/d7/fe978efc2ae50abe48eb7464668ea99f53c010c60aeebb7b35ad27f23661/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/af/fe/b6045c782f1fd1ae317d2a6ca1884857ce5c20f59befe6ab25a8603c43a7/ruamel_yaml-0.18.17-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/5d/e4f84c9c448613e12bd62e90b23aa127ea4c46b697f3d760acc32cb94f25/ruamel_yaml_clib-0.2.15-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/68/b9/f44b139096467996b4d85589d9880fd55f0c80a204d298a1b73d0adc2654/scanspec-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a3/b8/0d8eeb5a9fd7d34ba84f8a55753a0a3e2b5b51b2a5a0ade648a8db4a62f7/scikit_image-0.26.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f6/af/e8fe5fb136f51e2b01678b92cb4106d10d8cd68ec147ead2e7cb0ac75398/scipy-1.18.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/40/e1e72872c6354b306daef1703549e8e83b4d43cfea356311bf722a043752/setuptools-83.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/51/6b/3feec8016ab2263946c4480510d2d1a7924a5400c455974a7a0344bb4304/setuptools_dso-2.12.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/38/2e/21a3ede87f0bf82d6c7bcb90480d50a6490eb974c6ab20881188e440957c/simplejson-4.1.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/87/c7/b5c8015d823bfda1a346adb2c634a2101d50bb75d421eb6dcb31acd25ebc/sphinx_rtd_theme-3.1.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/85/749bd22d1a68db7291c89e2ebca53f4306c3f205853cf31e9de279034c3c/sphinxcontrib_jquery-4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1d/f0/1ff90a1d1dd02de23feafdf9dffaecef3958348be5c192df56670ccb4f86/stamina-26.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/59/208f71d70ddc6184f79b8c6d87d46eb7d7b12c19186a817dec9c9c3f3693/tifffile-2026.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/37/d8/ef374952fd5da67d4463122c2b8e5a96536ec10b4b339254c6dcde81d01c/tornado-6.5.7-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/22/2a/5e5e750890ada51017d18d0d4c30da696e5b5bd3180947729927628fc3cb/tqdm-4.68.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/8d/1080ee4c231f361b6ce4470d556c8c435b67c7e0753aaa641497ee92f88b/traitlets-5.15.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/72/89/0265b2b79424ed05b8d1e9c8fca71e1b150478e5b0c19aa50b0ae397326e/velocity_profile-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/7c/4e7225d46d634a0d8d534dd8a6ce0c319d09b4d0cf0337eb314ca4789d8c/virtualenv-21.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/42/3e5985a0a7e57de470b320c6d6a1a67c844f6737a587f3d44dd13d1819e7/wcwidth-0.8.2-py3-none-any.whl + - pypi: ./ + py314: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + options: + pypi-prerelease-mode: if-necessary-or-explicit + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.3-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.2-pyh145f28c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.6-habeac84_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - pypi: https://files.pythonhosted.org/packages/51/89/da0f32b679b8769dd472eb2927308d328bf75c296629fd9f95135afacd0a/aioca-2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/2b/04b8a15f3a1c77bc79ddf5c73875327f34b4fa75982df2b76e45e402d364/asttokens-3.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/6b/cfaf3d39f25132c156a068f6b805576c9103a84086019507c70e1911ee7d/black-26.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8e/99/cc217b2a727fdf730d0c0064bc8c03473dfe5d0528f2bd0c4f59fdab4179/bluesky-1.15.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/c4/b3e049d2aa3766180c78507110543d9d50894cc97f57de543f1be521dcdc/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/4f/f94ac1b84d2169cf2ebf64353ce98fd743f85d30678059c514d9b3d6644c/compress_pickle-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/5f/9ff93450ba96b09c7c2b3f81c94de31c89f92292f1380261bd7195bea4ea/contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e1/53/0d3dd963631259d794c898735d5436e68d6a8d40749c419a07ff7c171469/coverage-7.15.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/51/67e7cf11a53e40694f720457d5b3a1cdaaa3d5a9a633e482f225456b93ff/debugpy-1.8.21-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/a8/365059bbcd4572cbc41de17fd5b682be5868b218c3c5479071865cab9078/entrypoints-0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/57/42c5bb50507c528d9af10879067920d27c5a6b33fbef16c2e1b55de77ccc/epicscorelibs-7.0.10.99.0.1-cp314-cp314-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/9e/d410b0ff08a2519d197928afdc1aa36eb47e197f5ba683389b00e216f83c/event_model-1.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/60/02/be4a57b60c7149b55b9e3b3c13f609cd8eb5307c751f22bd8fb8d262e75b/filelock-3.29.7-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/36/e1/a8933a72c45a87177fbde2696e0d0755c8c9062f8c077a961c6215fa27b1/fonttools-4.63.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/16/d905e7f53e661ce2c24686c38048d8e2b750ffc4350009d41c4e6c6c9826/h5py-3.16.0-cp314-cp314-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ce/27/83314cfd4800ada7542ba49efc772c7a8949d349c7bec177e4e7fa5257e0/happi-3.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/70/b7/32110aa458690722a1069c7349b8ebe374a6ba0bdf9ef8925a9f37a74978/hiredis-3.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fe/47/deb64c73aec25af7699247e021153a6bfe9a08452f7f7337dcee4aa07a2b/historydict-1.2.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f0/0f/310fb31e39e2d734ccaa2c0fb981ee41f7bd5056ce9bc29b2248bd569169/humanfriendly-10.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/fa/391e437a34e55095173dca5f24070d89cbc233ff85bf1c29c93248c6588d/imageio-2.37.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bc/a4/d6f91d756f901626a30f47578e0bfdfde401e54a3eb49cb9dce9b855000a/intake-2.0.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3d/02/77b271f5dc58bfbc0b577c877b2365d1ffea2afe66a80c13f2312820348c/ipykernel-7.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/40/3a/948263ca3b9d65bb2b1b0c521b3a49fad5d59ada58724bd87d2bd5ff3f36/ipython-9.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/95/c7c34aa53c16353c56d0b802fba48d5f5caa2cdee7958acbcb795c830416/isort-8.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9a/93/242e2eab5fe682ffcb8b0084bde703a41d51e17ee0f3a31ff0d9d813620a/jedi-0.20.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3f/6f/56d39bf385c5c27988aebaf0c18a2a17e960575740100973511018bd904e/jupyter_client-8.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ca/77/71d78d58f15c22db16328a476426f7ac4a60d3a5a7ba3b9627ee2f7903d4/jupyter_console-6.6.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/f9/b06c934a6aa8bc91f566bd2a214fd04c30506c2d9e2b6b171953216a65b6/kiwisolver-1.5.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8a/a1/8d812e53a5da1687abb10445275d41a8b13adb781bbf7196ddbcf8d88505/lazy_loader-0.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/01/d52c7b11eaa286d49dae619c0eec4aabc0bf3cda7a7467eb77c62c4471f3/lz4-4.4.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/29/dc/6377ecfaa5fef79430f74a1a16638b4e2aa30d4692bae2c19f9d76fe3b01/matplotlib-3.11.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/19/03/8c63e8cf52958534ef688625965ab04c269a6cadd8caef16758b380a821a/msgpack-1.2.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9b/5d/f25ac7d4fb77cbd53ddc6d05d833c6bf52b12770a44fa9a447eed470ca9a/msgpack_numpy-0.4.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c5/3c/3179b85b0e1c3659f0369940200cd6d0fa900e6cefcc7ea0bc6dd0e29ffb/nest_asyncio2-1.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/5f/0f992cb24560673496c5d68de61913b57166ce530ffda07c1f280e0cc464/numpy-2.5.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/62/5e/3a6a3e90f35cea3853c45e5d5fb9b7192ce4384616f932cf7591298ab6e1/numpydoc-1.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/17/83/6dba32b85f31868400440dc7ad2ca1eab94cbbf3a7b0459ed39f8311a9e2/opentelemetry_api-1.43.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ef/80/c6dbf1f8d14fbb5615d2e99b798d61b76eb937f09e1e948d0e8aaf8873b2/ophyd-1.11.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/2c/76ac5e485f6405fc0f1dbbd1c98b7c1137d4aa5c1e49ea9e69bbd8d22ae1/ophyd_async-0.19.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/99/5d/8268b644392ee874ee82a635cd0df1773de230bde356c38de28e298392cc/parso-0.8.7-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1b/dd/a9fe6a0a09512da23951c68bf36466aeecd89def3183dc095edbc807ddc5/pint-0.25.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fe/be/2e6798ace5cc036f5d05d36b7b2fd85346f1a708c87060890b070d0ec607/prettytable-3.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/29/0ed312ec800fb536f93783215126cee4b8977dcfeccba6f0f44df0cc87d7/pyarrow-25.0.0-cp314-cp314-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/90/cb/c13d8a74419dde9590ed6fab293b516f68316ac87d06569b79b5f446d519/pydantic_numpy-8.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ae/a1/d4423657caaa8be9b31e491592b49cebdcfd434d3e74512ce71f6ec39905/pytest_split-0.11.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/63/cf/91b94238c843bfbae0a6674df45015aa3908b91454c496b2eb29e7991255/pytest_xprocess-1.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9d/ae/84bc0d2440c95772272bb6f4b3d09ccf08b2898fce89b3d4f969a9fc74e9/python_discovery-1.4.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e1/04/e8135ebd1ad02c56ec633277529b2602ff99ff634be76cdba5744cf554fd/python_multipart-0.0.32-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0f/95/70d7041273890f9f97a24234c00b746e8da86df462620194cef1d411ddeb/pytokens-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fd/0a/c2345ebf1ebe70840ce3f6c6ee612f8fa749cfbd1b03069c53bf0c62aaad/redis-8.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d1/9c/0d1fdc2e7aba23e290d603bc494e97bd205bae262ce33c6b32a69768ed5e/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/af/fe/b6045c782f1fd1ae317d2a6ca1884857ce5c20f59befe6ab25a8603c43a7/ruamel_yaml-0.18.17-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a1/5c/8b56b08db91e569d0a4fbfa3e492ed2026081bdd7e892f63ba1c88a2f548/ruamel_yaml_clib-0.2.15-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/68/b9/f44b139096467996b4d85589d9880fd55f0c80a204d298a1b73d0adc2654/scanspec-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/73/c3/cec6a3cbaadfdcc02bd6ff02f3abfe09eaa7f4d4e0a525a1e3a3f4bce49c/scikit_image-0.26.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/7f/c4/bc41eb19b0fd0db868f4132920879019318d80cc522ad8f2bca4611af808/scipy-1.18.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/40/e1e72872c6354b306daef1703549e8e83b4d43cfea356311bf722a043752/setuptools-83.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/51/6b/3feec8016ab2263946c4480510d2d1a7924a5400c455974a7a0344bb4304/setuptools_dso-2.12.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/91/3635cdb13318cb0a328abaa69e2b91251caad39d6779aa308098f341f6cb/simplejson-4.1.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/87/c7/b5c8015d823bfda1a346adb2c634a2101d50bb75d421eb6dcb31acd25ebc/sphinx_rtd_theme-3.1.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/85/749bd22d1a68db7291c89e2ebca53f4306c3f205853cf31e9de279034c3c/sphinxcontrib_jquery-4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1d/f0/1ff90a1d1dd02de23feafdf9dffaecef3958348be5c192df56670ccb4f86/stamina-26.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/59/208f71d70ddc6184f79b8c6d87d46eb7d7b12c19186a817dec9c9c3f3693/tifffile-2026.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/37/d8/ef374952fd5da67d4463122c2b8e5a96536ec10b4b339254c6dcde81d01c/tornado-6.5.7-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/22/2a/5e5e750890ada51017d18d0d4c30da696e5b5bd3180947729927628fc3cb/tqdm-4.68.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/8d/1080ee4c231f361b6ce4470d556c8c435b67c7e0753aaa641497ee92f88b/traitlets-5.15.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/72/89/0265b2b79424ed05b8d1e9c8fca71e1b150478e5b0c19aa50b0ae397326e/velocity_profile-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/7c/4e7225d46d634a0d8d534dd8a6ce0c319d09b4d0cf0337eb314ca4789d8c/virtualenv-21.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/42/3e5985a0a7e57de470b320c6d6a1a67c844f6737a587f3d44dd13d1819e7/wcwidth-0.8.2-py3-none-any.whl + - pypi: ./ +packages: +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + build_number: 20 + sha256: 1dd3fffd892081df9726d7eb7e0dea6198962ba775bd88842135a4ddb4deb3c9 + md5: a9f577daf3de00bca7c3c76c0ecbd1de + depends: + - __glibc >=2.17,<3.0.a0 + - libgomp >=7.5.0 + constrains: + - openmp_impl <0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 28948 + timestamp: 1770939786096 +- pypi: https://files.pythonhosted.org/packages/51/89/da0f32b679b8769dd472eb2927308d328bf75c296629fd9f95135afacd0a/aioca-2.1-py3-none-any.whl + name: aioca + version: '2.1' + sha256: df0f062b81a4846d3e5705f0bfaf7bee9f876009302cf3b06ada93d6f5153b6f + requires_dist: + - numpy + - epicscorelibs>=7.0.3.99.4.0 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl + name: alabaster + version: 1.0.0 + sha256: fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + name: annotated-types + version: 0.7.0 + sha256: 1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 + requires_dist: + - typing-extensions>=4.0.0 ; python_full_version < '3.9' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/d4/2b/04b8a15f3a1c77bc79ddf5c73875327f34b4fa75982df2b76e45e402d364/asttokens-3.0.2-py3-none-any.whl + name: asttokens + version: 3.0.2 + sha256: 9da13157f5b28becde0bd374fc677dcd3c290614264eff096f167c469cd9f933 + requires_dist: + - astroid>=2,<5 ; extra == 'astroid' + - astroid>=2,<5 ; extra == 'test' + - pytest<9.0 ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-xdist ; extra == 'test' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl + name: attrs + version: 26.1.0 + sha256: c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl + name: babel + version: 2.18.0 + sha256: e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35 + requires_dist: + - pytz>=2015.7 ; python_full_version < '3.9' + - tzdata ; sys_platform == 'win32' and extra == 'dev' + - backports-zoneinfo ; python_full_version < '3.9' and extra == 'dev' + - freezegun~=1.0 ; extra == 'dev' + - jinja2>=3.0 ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - pytest>=6.0 ; extra == 'dev' + - pytz ; extra == 'dev' + - setuptools ; extra == 'dev' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/06/3a/7c448bc623fcdfa96672531beb5a616ea5e64f6975955254d7731ffb0ad9/black-26.5.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: black + version: 26.5.1 + sha256: 5119fa92ae61f786e8c3662fd60aece1d0a2dd5cca5d0c79417a95e7a4272a59 + requires_dist: + - click>=8.0.0 + - mypy-extensions>=0.4.3 + - packaging>=22.0 + - pathspec>=1.0.0 + - platformdirs>=2 + - pytokens~=0.4.0 + - tomli>=1.1.0 ; python_full_version < '3.11' + - typing-extensions>=4.0.1 ; python_full_version < '3.11' + - colorama>=0.4.3 ; extra == 'colorama' + - aiohttp>=3.10 ; extra == 'd' + - ipython>=7.8.0 ; extra == 'jupyter' + - tokenize-rt>=3.2.0 ; extra == 'jupyter' + - uvloop>=0.15.2 ; sys_platform != 'win32' and extra == 'uvloop' + - winloop>=0.5.0 ; sys_platform == 'win32' and extra == 'uvloop' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/1f/0e/36044316b65ca471d3bb6d3703fd06fb50c6b727c3562f6a5a3153634f88/black-26.5.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: black + version: 26.5.1 + sha256: 9d98d4137277c75dfb898ec8d846c4fd68ba1e9cf77f95e2865c203dc18f4c3d + requires_dist: + - click>=8.0.0 + - mypy-extensions>=0.4.3 + - packaging>=22.0 + - pathspec>=1.0.0 + - platformdirs>=2 + - pytokens~=0.4.0 + - tomli>=1.1.0 ; python_full_version < '3.11' + - typing-extensions>=4.0.1 ; python_full_version < '3.11' + - colorama>=0.4.3 ; extra == 'colorama' + - aiohttp>=3.10 ; extra == 'd' + - ipython>=7.8.0 ; extra == 'jupyter' + - tokenize-rt>=3.2.0 ; extra == 'jupyter' + - uvloop>=0.15.2 ; sys_platform != 'win32' and extra == 'uvloop' + - winloop>=0.5.0 ; sys_platform == 'win32' and extra == 'uvloop' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/81/6b/cfaf3d39f25132c156a068f6b805576c9103a84086019507c70e1911ee7d/black-26.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: black + version: 26.5.1 + sha256: ea8d16dc41655aa113cd64665e7219446cd7e4ff2248d7178eaa905190c86b18 + requires_dist: + - click>=8.0.0 + - mypy-extensions>=0.4.3 + - packaging>=22.0 + - pathspec>=1.0.0 + - platformdirs>=2 + - pytokens~=0.4.0 + - tomli>=1.1.0 ; python_full_version < '3.11' + - typing-extensions>=4.0.1 ; python_full_version < '3.11' + - colorama>=0.4.3 ; extra == 'colorama' + - aiohttp>=3.10 ; extra == 'd' + - ipython>=7.8.0 ; extra == 'jupyter' + - tokenize-rt>=3.2.0 ; extra == 'jupyter' + - uvloop>=0.15.2 ; sys_platform != 'win32' and extra == 'uvloop' + - winloop>=0.5.0 ; sys_platform == 'win32' and extra == 'uvloop' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/fb/24/8e7b9a2fa61b0afd82209efe937557d180a1fa055bd7f6161eb9defc3719/black-26.5.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: black + version: 26.5.1 + sha256: ecb3e624844c798144e9bd986954e0adc81d8911a1f30f375e1252fe26e8c294 + requires_dist: + - click>=8.0.0 + - mypy-extensions>=0.4.3 + - packaging>=22.0 + - pathspec>=1.0.0 + - platformdirs>=2 + - pytokens~=0.4.0 + - tomli>=1.1.0 ; python_full_version < '3.11' + - typing-extensions>=4.0.1 ; python_full_version < '3.11' + - colorama>=0.4.3 ; extra == 'colorama' + - aiohttp>=3.10 ; extra == 'd' + - ipython>=7.8.0 ; extra == 'jupyter' + - tokenize-rt>=3.2.0 ; extra == 'jupyter' + - uvloop>=0.15.2 ; sys_platform != 'win32' and extra == 'uvloop' + - winloop>=0.5.0 ; sys_platform == 'win32' and extra == 'uvloop' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/8e/99/cc217b2a727fdf730d0c0064bc8c03473dfe5d0528f2bd0c4f59fdab4179/bluesky-1.15.1-py3-none-any.whl + name: bluesky + version: 1.15.1 + sha256: 7b3a0f04cf2bb0a7907771e014e59fe6fced777347df8df84adec7239f6c3d2a + requires_dist: + - cycler + - event-model>=1.23.1 + - historydict + - msgpack + - msgpack-numpy + - numpy + - opentelemetry-api + - toolz + - tqdm>=4.44 + - typing-extensions>=4.10.0 + - attrs ; extra == 'dev' + - bluesky-tiled-plugins ; extra == 'dev' + - cloudpickle ; extra == 'dev' + - copier ; extra == 'dev' + - coverage ; extra == 'dev' + - databroker ; extra == 'dev' + - doct ; extra == 'dev' + - doctr ; extra == 'dev' + - flake8 ; extra == 'dev' + - ipython ; extra == 'dev' + - ipywidgets ; extra == 'dev' + - jinja2 ; extra == 'dev' + - lmfit ; extra == 'dev' + - matplotlib>=3.5.0 ; extra == 'dev' + - mongoquery ; extra == 'dev' + - mongomock ; extra == 'dev' + - multiprocess ; extra == 'dev' + - mypy ; extra == 'dev' + - myst-parser ; extra == 'dev' + - networkx ; extra == 'dev' + - numpydoc ; extra == 'dev' + - opentelemetry-sdk ; extra == 'dev' + - ophyd ; extra == 'dev' + - orjson ; extra == 'dev' + - packaging ; extra == 'dev' + - pandas ; extra == 'dev' + - pickleshare ; extra == 'dev' + - pipdeptree ; extra == 'dev' + - pre-commit ; extra == 'dev' + - pydata-sphinx-theme>=0.12 ; extra == 'dev' + - pyepics ; extra == 'dev' + - pyqt5 ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - pytest-faulthandler ; extra == 'dev' + - pyyaml ; extra == 'dev' + - pyzmq ; extra == 'dev' + - requests ; extra == 'dev' + - ruff ; extra == 'dev' + - scikit-image ; extra == 'dev' + - scipy ; extra == 'dev' + - sphinx<7.3 ; extra == 'dev' + - sphinx-autobuild ; extra == 'dev' + - sphinx-copybutton ; extra == 'dev' + - sphinx-design ; extra == 'dev' + - sphinxcontrib-mermaid ; extra == 'dev' + - sphinx-rtd-theme ; extra == 'dev' + - streamz ; extra == 'dev' + - suitcase-jsonl ; extra == 'dev' + - suitcase-mongo ; extra == 'dev' + - suitcase-msgpack ; extra == 'dev' + - tifffile ; extra == 'dev' + - tox-direct ; extra == 'dev' + - types-mock ; extra == 'dev' + - tiled[all] ; extra == 'dev' + - vendoring ; extra == 'dev' + - zict ; extra == 'dev' + - pytest-mock>=3.15.1 ; extra == 'dev' + - ipython ; extra == 'ipython' + - pyzmq ; extra == 'zmq' + - ophyd ; extra == 'common' + - databroker ; extra == 'common' + - doct ; extra == 'tools' + - lmfit ; extra == 'tools' + - tifffile ; extra == 'tools' + - historydict ; extra == 'tools' + - streamz ; extra == 'streamz' + - matplotlib ; extra == 'plotting' + - colorama ; extra == 'cmd' + - jinja2 ; extra == 'olog' + - zict<3 ; extra == 'old-persistentdict' + - bluesky[cmd,common,dev,ipython,olog,plotting,streamz,tools,zmq] ; extra == 'all' + requires_python: '>=3.10' +- pypi: ./ + name: bluesky-queueserver + version: 0.0.25.dev55+gb26088bfc.d20260714 + sha256: 7a0319e89eab6c92c6dc1cb6bc4f8856af09fc51c5b9f43f721ef66febe34f90 + requires_dist: + - bluesky>=1.7.0 + - ipykernel + - jsonschema + - jupyter-client>=7.4.2 + - jupyter-console + - numpydoc + - openpyxl + - ophyd + - packaging + - pydantic + - python-multipart + - pyyaml + - pyzmq + - redis[hiredis] + - requests + - black!=25.11.0 ; extra == 'dev' + - coverage ; extra == 'dev' + - flake8 ; extra == 'dev' + - isort ; extra == 'dev' + - happi>=1.14.0 ; extra == 'dev' + - pre-commit ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-xprocess ; extra == 'dev' + - pytest-split ; extra == 'dev' + - py ; extra == 'dev' + - ipython ; extra == 'dev' + - matplotlib ; extra == 'dev' + - numpy ; extra == 'dev' + - intake ; extra == 'dev' + - numpydoc ; extra == 'dev' + - scikit-image ; extra == 'dev' + - sphinx ; extra == 'dev' + - sphinx-rtd-theme ; extra == 'dev' + - pandas ; extra == 'dev' + - pyarrow ; extra == 'dev' + - scikit-image ; extra == 'dev' + - h5py ; extra == 'dev' + - aioca ; extra == 'dev' + - ophyd-async ; extra == 'dev' + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + sha256: 0b75d45f0bba3e95dc693336fa51f40ea28c980131fec438afb7ce6118ed05f6 + md5: d2ffd7602c02f2b316fd921d39876885 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 260182 + timestamp: 1771350215188 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda + sha256: f8e3c730fa14ee3f170493779f06522c4acf89169f43db4f039727709b6419cf + md5: a9965dd99f683c5f444428f896635716 + depends: + - __unix + license: ISC + purls: [] + size: 128866 + timestamp: 1781708962055 +- pypi: https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl + name: certifi + version: 2026.6.17 + sha256: 2227dcbaafe0d2f59279d1762ddddc37783ed4354594f194ffc31d20f41fc3db + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl + name: cfgv + version: 3.5.0 + sha256: a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/01/c4/4fa4c8b3097a11f3c5f09a35b72ed6855fb1d332469504962ab7bafcc702/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: charset-normalizer + version: 3.4.9 + sha256: 5e226f6218febc71f6c1fc2fafb91c226f75bdc1d8fb12d66823716e891608fd + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/a5/34/49b9060e8418b14fb5cba9cf6bfb383111e2538a03a1fb18e66a95aeb3d5/charset_normalizer-3.4.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: charset-normalizer + version: 3.4.9 + sha256: 04ce310cb89c15df659582aee80a0603788732a5e017d5bd5c81158106ce249c + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/ea/f8/72eb13dcabe7257035cea8aefd922caad2f110d252bf9f67c4c2ca763aee/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: charset-normalizer + version: 3.4.9 + sha256: 84fd18bcc17526fc2b3c1af7d2b9217d32c9c04448c16ec693b9b4f1985c3d33 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/f4/c4/b3e049d2aa3766180c78507110543d9d50894cc97f57de543f1be521dcdc/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: charset-normalizer + version: 3.4.9 + sha256: c25fe15c70c59eb7c5ce8c06a1f3fa1da0ecc5ea1e7a5922c40fd2fa9b0d5046 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl + name: click + version: 8.4.2 + sha256: e6f9f66136c816745b9d65817da91d61d957fb16e02e4dcd0552553c5a197b76 + requires_dist: + - colorama ; sys_platform == 'win32' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl + name: coloredlogs + version: 15.0.1 + sha256: 612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934 + requires_dist: + - humanfriendly>=9.1 + - capturer>=2.4 ; extra == 'cron' + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*' +- pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl + name: colorlog + version: 6.10.1 + sha256: 2d7e8348291948af66122cff006c9f8da6255d224e7cf8e37d8de2df3bad8c9c + requires_dist: + - colorama ; sys_platform == 'win32' + - black ; extra == 'development' + - flake8 ; extra == 'development' + - mypy ; extra == 'development' + - pytest ; extra == 'development' + - types-colorama ; extra == 'development' + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl + name: comm + version: 0.2.3 + sha256: c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417 + requires_dist: + - pytest ; extra == 'test' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/f3/4f/f94ac1b84d2169cf2ebf64353ce98fd743f85d30678059c514d9b3d6644c/compress_pickle-2.1.0-py3-none-any.whl + name: compress-pickle + version: 2.1.0 + sha256: 598650da4686d9bd97bee185b61e74d7fe1872bb0c23909d5ed2d8793b4a8818 + requires_dist: + - cloudpickle ; extra == 'cloudpickle' + - dill ; extra == 'dill' + - lz4 ; extra == 'full' + - dill ; extra == 'full' + - cloudpickle ; extra == 'full' + - lz4 ; extra == 'lz4' + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/04/5f/9ff93450ba96b09c7c2b3f81c94de31c89f92292f1380261bd7195bea4ea/contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: contourpy + version: 1.3.3 + sha256: f64836de09927cba6f79dcd00fdd7d5329f3fccc633468507079c829ca4db4e3 + requires_dist: + - numpy>=1.25 + - furo ; extra == 'docs' + - sphinx>=7.2 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - bokeh ; extra == 'bokeh' + - selenium ; extra == 'bokeh' + - contourpy[bokeh,docs] ; extra == 'mypy' + - bokeh ; extra == 'mypy' + - docutils-stubs ; extra == 'mypy' + - mypy==1.17.0 ; extra == 'mypy' + - types-pillow ; extra == 'mypy' + - contourpy[test-no-images] ; extra == 'test' + - matplotlib ; extra == 'test' + - pillow ; extra == 'test' + - pytest ; extra == 'test-no-images' + - pytest-cov ; extra == 'test-no-images' + - pytest-rerunfailures ; extra == 'test-no-images' + - pytest-xdist ; extra == 'test-no-images' + - wurlitzer ; extra == 'test-no-images' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/4b/32/e0f13a1c5b0f8572d0ec6ae2f6c677b7991fafd95da523159c19eff0696a/contourpy-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: contourpy + version: 1.3.3 + sha256: 4debd64f124ca62069f313a9cb86656ff087786016d76927ae2cf37846b006c9 + requires_dist: + - numpy>=1.25 + - furo ; extra == 'docs' + - sphinx>=7.2 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - bokeh ; extra == 'bokeh' + - selenium ; extra == 'bokeh' + - contourpy[bokeh,docs] ; extra == 'mypy' + - bokeh ; extra == 'mypy' + - docutils-stubs ; extra == 'mypy' + - mypy==1.17.0 ; extra == 'mypy' + - types-pillow ; extra == 'mypy' + - contourpy[test-no-images] ; extra == 'test' + - matplotlib ; extra == 'test' + - pillow ; extra == 'test' + - pytest ; extra == 'test-no-images' + - pytest-cov ; extra == 'test-no-images' + - pytest-rerunfailures ; extra == 'test-no-images' + - pytest-xdist ; extra == 'test-no-images' + - wurlitzer ; extra == 'test-no-images' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/5f/4b/6157f24ca425b89fe2eb7e7be642375711ab671135be21e6faa100f7448c/contourpy-1.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: contourpy + version: 1.3.3 + sha256: 51e79c1f7470158e838808d4a996fa9bac72c498e93d8ebe5119bc1e6becb0db + requires_dist: + - numpy>=1.25 + - furo ; extra == 'docs' + - sphinx>=7.2 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - bokeh ; extra == 'bokeh' + - selenium ; extra == 'bokeh' + - contourpy[bokeh,docs] ; extra == 'mypy' + - bokeh ; extra == 'mypy' + - docutils-stubs ; extra == 'mypy' + - mypy==1.17.0 ; extra == 'mypy' + - types-pillow ; extra == 'mypy' + - contourpy[test-no-images] ; extra == 'test' + - matplotlib ; extra == 'test' + - pillow ; extra == 'test' + - pytest ; extra == 'test-no-images' + - pytest-cov ; extra == 'test-no-images' + - pytest-rerunfailures ; extra == 'test-no-images' + - pytest-xdist ; extra == 'test-no-images' + - wurlitzer ; extra == 'test-no-images' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: contourpy + version: 1.3.3 + sha256: 4d00e655fcef08aba35ec9610536bfe90267d7ab5ba944f7032549c55a146da1 + requires_dist: + - numpy>=1.25 + - furo ; extra == 'docs' + - sphinx>=7.2 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - bokeh ; extra == 'bokeh' + - selenium ; extra == 'bokeh' + - contourpy[bokeh,docs] ; extra == 'mypy' + - bokeh ; extra == 'mypy' + - docutils-stubs ; extra == 'mypy' + - mypy==1.17.0 ; extra == 'mypy' + - types-pillow ; extra == 'mypy' + - contourpy[test-no-images] ; extra == 'test' + - matplotlib ; extra == 'test' + - pillow ; extra == 'test' + - pytest ; extra == 'test-no-images' + - pytest-cov ; extra == 'test-no-images' + - pytest-rerunfailures ; extra == 'test-no-images' + - pytest-xdist ; extra == 'test-no-images' + - wurlitzer ; extra == 'test-no-images' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/05/37/5e439725a96de592309725550c8df639c359c209dcb4b152ed46032d4c0d/coverage-7.15.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: coverage + version: 7.15.1 + sha256: aab9902a64b8390e3b56e539fddae1d79a267807fe5cb0c18d7d2f544ce867e2 + requires_dist: + - tomli ; python_full_version <= '3.11' and extra == 'toml' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/1c/5e/caf3abbdbb22629626160ffc9c017eb995b7cb11c0be46b974834cef1792/coverage-7.15.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: coverage + version: 7.15.1 + sha256: 962aa56c1c9b016d681265880eb6acc9966029d2c4c559319cc43a1abbb9b59a + requires_dist: + - tomli ; python_full_version <= '3.11' and extra == 'toml' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/e1/53/0d3dd963631259d794c898735d5436e68d6a8d40749c419a07ff7c171469/coverage-7.15.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: coverage + version: 7.15.1 + sha256: bde0fe24083d0b7b3dbafa7a09f0796410af1afa2523f28f5f208d8340a4aaca + requires_dist: + - tomli ; python_full_version <= '3.11' and extra == 'toml' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/e5/81/c7009ed7ea9765adb2b9d095054d748266fae5f07ac6c5f925f33715fcde/coverage-7.15.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: coverage + version: 7.15.1 + sha256: df164be93b46b4825cc39339440a05edc54c4d1d865ba4a60fd43d151a2a1cd3 + requires_dist: + - tomli ; python_full_version <= '3.11' and extra == 'toml' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl + name: cycler + version: 0.12.1 + sha256: 85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30 + requires_dist: + - ipython ; extra == 'docs' + - matplotlib ; extra == 'docs' + - numpydoc ; extra == 'docs' + - sphinx ; extra == 'docs' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-xdist ; extra == 'tests' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/95/51/67e7cf11a53e40694f720457d5b3a1cdaaa3d5a9a633e482f225456b93ff/debugpy-1.8.21-py2.py3-none-any.whl + name: debugpy + version: 1.8.21 + sha256: b1e37d333663c8851516a47364ef473da127f9caebe4417e6df6f5825a7e9a92 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl + name: decorator + version: 5.3.1 + sha256: f47fe6fdbd2edd623ecfe36875d37aba411624e2670dd395dddae1358689bb3c + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl + name: distlib + version: 0.4.3 + sha256: 4b0ce306c966eb73bc3a7b6abad017c556dadd92c44701562cd528ac7fde4d5b +- pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl + name: docutils + version: 0.22.4 + sha256: d0013f540772d1420576855455d050a2180186c91c15779301ac2ccb3eeb68de + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/35/a8/365059bbcd4572cbc41de17fd5b682be5868b218c3c5479071865cab9078/entrypoints-0.4-py3-none-any.whl + name: entrypoints + version: '0.4' + sha256: f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/12/29/ce9c8e81a6b9be7722ac00cb592ce6b652405eecb178bf410810732957ec/epicscorelibs-7.0.10.99.0.1-cp311-cp311-manylinux2014_x86_64.whl + name: epicscorelibs + version: 7.0.10.99.0.1 + sha256: 91f112790a31c296bdb2c0f9b661e993c3ded9df9f4731a92887c5abfbaf568a + requires_dist: + - setuptools + - setuptools-dso>=2.11a2 + - numpy + requires_python: '>=2.7' +- pypi: https://files.pythonhosted.org/packages/4f/7b/55f41ec7746713db21aff5e794fc98b5a2e4c40fc72d69f6a1cdb04df360/epicscorelibs-7.0.10.99.0.1-cp312-cp312-manylinux2014_x86_64.whl + name: epicscorelibs + version: 7.0.10.99.0.1 + sha256: b7b9cb9dc1b533f6bb569dffe246256ba4d553a5843ddf494645c9b33a38ba2a + requires_dist: + - setuptools + - setuptools-dso>=2.11a2 + - numpy + requires_python: '>=2.7' +- pypi: https://files.pythonhosted.org/packages/55/57/42c5bb50507c528d9af10879067920d27c5a6b33fbef16c2e1b55de77ccc/epicscorelibs-7.0.10.99.0.1-cp314-cp314-manylinux_2_28_x86_64.whl + name: epicscorelibs + version: 7.0.10.99.0.1 + sha256: 7de58f4e8a7dd8edf7b808ffc99391e95ca3516c4f2780258c31f4f844d63239 + requires_dist: + - setuptools + - setuptools-dso>=2.11a2 + - numpy + requires_python: '>=2.7' +- pypi: https://files.pythonhosted.org/packages/7c/aa/3b0faa7eea6a2957af7ee116f08b5edd99eff7e7461e22ac613b0a8d38ea/epicscorelibs-7.0.10.99.0.1-cp313-cp313-manylinux2014_x86_64.whl + name: epicscorelibs + version: 7.0.10.99.0.1 + sha256: 8ac0a67067d06c42d4ac83b685f8020d4e993858bc4e36d58631983b1117aa39 + requires_dist: + - setuptools + - setuptools-dso>=2.11a2 + - numpy + requires_python: '>=2.7' +- pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl + name: et-xmlfile + version: 2.0.0 + sha256: 7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/b2/9e/d410b0ff08a2519d197928afdc1aa36eb47e197f5ba683389b00e216f83c/event_model-1.24.0-py3-none-any.whl + name: event-model + version: 1.24.0 + sha256: 87e9415b349f9c9aa7576090b671442e49548ea9b63c5e8ab64573f4df1c2d61 + requires_dist: + - jsonschema>=4 + - numpy + - typing-extensions + - mypy ; extra == 'dev' + - myst-parser ; extra == 'dev' + - pipdeptree ; extra == 'dev' + - pre-commit ; extra == 'dev' + - pydata-sphinx-theme>=0.12 ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - ruff ; extra == 'dev' + - sphinx-autobuild ; extra == 'dev' + - sphinx-copybutton ; extra == 'dev' + - sphinx-design ; extra == 'dev' + - tox-direct ; extra == 'dev' + - types-mock ; extra == 'dev' + - copier ; extra == 'dev' + - ipython ; extra == 'dev' + - matplotlib ; extra == 'dev' + - numpydoc ; extra == 'dev' + - pydantic ; extra == 'dev' + - datamodel-code-generator>=0.53.0 ; extra == 'dev' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl + name: executing + version: 2.2.1 + sha256: 760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017 + requires_dist: + - asttokens>=2.1.0 ; extra == 'tests' + - ipython ; extra == 'tests' + - pytest ; extra == 'tests' + - coverage ; extra == 'tests' + - coverage-enable-subprocess ; extra == 'tests' + - littleutils ; extra == 'tests' + - rich ; python_full_version >= '3.11' and extra == 'tests' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/60/02/be4a57b60c7149b55b9e3b3c13f609cd8eb5307c751f22bd8fb8d262e75b/filelock-3.29.7-py3-none-any.whl + name: filelock + version: 3.29.7 + sha256: 987db6f789a3a2a59f55081801b2b3697cb97e2a736b5f1a9e99b559285fbc51 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl + name: flake8 + version: 7.3.0 + sha256: b9696257b9ce8beb888cdbe31cf885c90d31928fe202be0889a7cdafad32f01e + requires_dist: + - mccabe>=0.7.0,<0.8.0 + - pycodestyle>=2.14.0,<2.15.0 + - pyflakes>=3.4.0,<3.5.0 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl + name: flexcache + version: '0.3' + sha256: d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32 + requires_dist: + - typing-extensions + - pytest ; extra == 'test' + - pytest-mpl ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-subtests ; extra == 'test' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl + name: flexparser + version: '0.4' + sha256: 3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846 + requires_dist: + - typing-extensions + - pytest ; extra == 'test' + - pytest-mpl ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-subtests ; extra == 'test' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/0b/43/a81f20050a3115b57d62c8e781446949512eac36690dc384ccea65ff4cc1/fonttools-4.63.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: fonttools + version: 4.63.0 + sha256: d76ac49f929aecaf82d83250b8347e099d7aecba0f4726c1d9b6df3b8bb5fe18 + requires_dist: + - lxml>=4.0 ; extra == 'lxml' + - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'woff' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'woff' + - zopfli>=0.1.4 ; extra == 'woff' + - unicodedata2>=17.0.0 ; python_full_version < '3.15' and extra == 'unicode' + - lz4>=1.7.4.2 ; extra == 'graphite' + - scipy ; platform_python_implementation != 'PyPy' and extra == 'interpolatable' + - munkres ; platform_python_implementation == 'PyPy' and extra == 'interpolatable' + - pycairo ; extra == 'interpolatable' + - matplotlib ; extra == 'plot' + - sympy ; extra == 'symfont' + - xattr ; sys_platform == 'darwin' and extra == 'type1' + - skia-pathops>=0.5.0 ; extra == 'pathops' + - uharfbuzz>=0.45.0 ; extra == 'repacker' + - lxml>=4.0 ; extra == 'all' + - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'all' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'all' + - zopfli>=0.1.4 ; extra == 'all' + - unicodedata2>=17.0.0 ; python_full_version < '3.15' and extra == 'all' + - lz4>=1.7.4.2 ; extra == 'all' + - scipy ; platform_python_implementation != 'PyPy' and extra == 'all' + - munkres ; platform_python_implementation == 'PyPy' and extra == 'all' + - pycairo ; extra == 'all' + - matplotlib ; extra == 'all' + - sympy ; extra == 'all' + - xattr ; sys_platform == 'darwin' and extra == 'all' + - skia-pathops>=0.5.0 ; extra == 'all' + - uharfbuzz>=0.45.0 ; extra == 'all' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/36/e1/a8933a72c45a87177fbde2696e0d0755c8c9062f8c077a961c6215fa27b1/fonttools-4.63.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: fonttools + version: 4.63.0 + sha256: 308f957cdeaf8abe4e5f2f124902ef405448af92c90f80e302a3b771c2e6116b + requires_dist: + - lxml>=4.0 ; extra == 'lxml' + - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'woff' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'woff' + - zopfli>=0.1.4 ; extra == 'woff' + - unicodedata2>=17.0.0 ; python_full_version < '3.15' and extra == 'unicode' + - lz4>=1.7.4.2 ; extra == 'graphite' + - scipy ; platform_python_implementation != 'PyPy' and extra == 'interpolatable' + - munkres ; platform_python_implementation == 'PyPy' and extra == 'interpolatable' + - pycairo ; extra == 'interpolatable' + - matplotlib ; extra == 'plot' + - sympy ; extra == 'symfont' + - xattr ; sys_platform == 'darwin' and extra == 'type1' + - skia-pathops>=0.5.0 ; extra == 'pathops' + - uharfbuzz>=0.45.0 ; extra == 'repacker' + - lxml>=4.0 ; extra == 'all' + - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'all' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'all' + - zopfli>=0.1.4 ; extra == 'all' + - unicodedata2>=17.0.0 ; python_full_version < '3.15' and extra == 'all' + - lz4>=1.7.4.2 ; extra == 'all' + - scipy ; platform_python_implementation != 'PyPy' and extra == 'all' + - munkres ; platform_python_implementation == 'PyPy' and extra == 'all' + - pycairo ; extra == 'all' + - matplotlib ; extra == 'all' + - sympy ; extra == 'all' + - xattr ; sys_platform == 'darwin' and extra == 'all' + - skia-pathops>=0.5.0 ; extra == 'all' + - uharfbuzz>=0.45.0 ; extra == 'all' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/77/c7/2342da9830e3e9d4870305ca5d2091d2a83284f2953079b7bdd3b5e029d8/fonttools-4.63.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: fonttools + version: 4.63.0 + sha256: 58dc6bb86a78d782f00f9190ca02c119cf5bbe2807536e361e18d42019f877d8 + requires_dist: + - lxml>=4.0 ; extra == 'lxml' + - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'woff' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'woff' + - zopfli>=0.1.4 ; extra == 'woff' + - unicodedata2>=17.0.0 ; python_full_version < '3.15' and extra == 'unicode' + - lz4>=1.7.4.2 ; extra == 'graphite' + - scipy ; platform_python_implementation != 'PyPy' and extra == 'interpolatable' + - munkres ; platform_python_implementation == 'PyPy' and extra == 'interpolatable' + - pycairo ; extra == 'interpolatable' + - matplotlib ; extra == 'plot' + - sympy ; extra == 'symfont' + - xattr ; sys_platform == 'darwin' and extra == 'type1' + - skia-pathops>=0.5.0 ; extra == 'pathops' + - uharfbuzz>=0.45.0 ; extra == 'repacker' + - lxml>=4.0 ; extra == 'all' + - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'all' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'all' + - zopfli>=0.1.4 ; extra == 'all' + - unicodedata2>=17.0.0 ; python_full_version < '3.15' and extra == 'all' + - lz4>=1.7.4.2 ; extra == 'all' + - scipy ; platform_python_implementation != 'PyPy' and extra == 'all' + - munkres ; platform_python_implementation == 'PyPy' and extra == 'all' + - pycairo ; extra == 'all' + - matplotlib ; extra == 'all' + - sympy ; extra == 'all' + - xattr ; sys_platform == 'darwin' and extra == 'all' + - skia-pathops>=0.5.0 ; extra == 'all' + - uharfbuzz>=0.45.0 ; extra == 'all' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/ce/36/0b805d8c485f872f65a509cbe3b58a5d0d17bee855333b54a150c79d3061/fonttools-4.63.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: fonttools + version: 4.63.0 + sha256: 22135da48a348785c5e2d5d2d9d6bec5ed44adacbaeb9db12d9493bf6c6bfa68 + requires_dist: + - lxml>=4.0 ; extra == 'lxml' + - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'woff' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'woff' + - zopfli>=0.1.4 ; extra == 'woff' + - unicodedata2>=17.0.0 ; python_full_version < '3.15' and extra == 'unicode' + - lz4>=1.7.4.2 ; extra == 'graphite' + - scipy ; platform_python_implementation != 'PyPy' and extra == 'interpolatable' + - munkres ; platform_python_implementation == 'PyPy' and extra == 'interpolatable' + - pycairo ; extra == 'interpolatable' + - matplotlib ; extra == 'plot' + - sympy ; extra == 'symfont' + - xattr ; sys_platform == 'darwin' and extra == 'type1' + - skia-pathops>=0.5.0 ; extra == 'pathops' + - uharfbuzz>=0.45.0 ; extra == 'repacker' + - lxml>=4.0 ; extra == 'all' + - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'all' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'all' + - zopfli>=0.1.4 ; extra == 'all' + - unicodedata2>=17.0.0 ; python_full_version < '3.15' and extra == 'all' + - lz4>=1.7.4.2 ; extra == 'all' + - scipy ; platform_python_implementation != 'PyPy' and extra == 'all' + - munkres ; platform_python_implementation == 'PyPy' and extra == 'all' + - pycairo ; extra == 'all' + - matplotlib ; extra == 'all' + - sympy ; extra == 'all' + - xattr ; sys_platform == 'darwin' and extra == 'all' + - skia-pathops>=0.5.0 ; extra == 'all' + - uharfbuzz>=0.45.0 ; extra == 'all' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl + name: fsspec + version: 2026.6.0 + sha256: 02e0b71817df9b2169dc30a16832045764def1191b43dcff5bb85bdee212d2a1 + requires_dist: + - adlfs ; extra == 'abfs' + - adlfs ; extra == 'adl' + - pyarrow>=1 ; extra == 'arrow' + - dask ; extra == 'dask' + - distributed ; extra == 'dask' + - pre-commit ; extra == 'dev' + - ruff>=0.5 ; extra == 'dev' + - numpydoc ; extra == 'doc' + - sphinx ; extra == 'doc' + - sphinx-design ; extra == 'doc' + - sphinx-rtd-theme ; extra == 'doc' + - yarl ; extra == 'doc' + - dropbox ; extra == 'dropbox' + - dropboxdrivefs ; extra == 'dropbox' + - requests ; extra == 'dropbox' + - adlfs ; extra == 'full' + - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'full' + - dask ; extra == 'full' + - distributed ; extra == 'full' + - dropbox ; extra == 'full' + - dropboxdrivefs ; extra == 'full' + - fusepy ; extra == 'full' + - gcsfs>2024.2.0 ; extra == 'full' + - libarchive-c ; extra == 'full' + - ocifs ; extra == 'full' + - panel ; extra == 'full' + - paramiko ; extra == 'full' + - pyarrow>=1 ; extra == 'full' + - pygit2 ; extra == 'full' + - requests ; extra == 'full' + - s3fs>2024.2.0 ; extra == 'full' + - smbprotocol ; extra == 'full' + - tqdm ; extra == 'full' + - fusepy ; extra == 'fuse' + - gcsfs>2024.2.0 ; extra == 'gcs' + - pygit2 ; extra == 'git' + - requests ; extra == 'github' + - gcsfs ; extra == 'gs' + - panel ; extra == 'gui' + - pyarrow>=1 ; extra == 'hdfs' + - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'http' + - libarchive-c ; extra == 'libarchive' + - ocifs ; extra == 'oci' + - s3fs>2024.2.0 ; extra == 's3' + - paramiko ; extra == 'sftp' + - smbprotocol ; extra == 'smb' + - paramiko ; extra == 'ssh' + - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'test' + - numpy ; extra == 'test' + - pytest ; extra == 'test' + - pytest-asyncio!=0.22.0 ; extra == 'test' + - pytest-benchmark ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-mock ; extra == 'test' + - pytest-recording ; extra == 'test' + - pytest-rerunfailures ; extra == 'test' + - requests ; extra == 'test' + - aiobotocore>=2.5.4,<3.0.0 ; extra == 'test-downstream' + - dask[dataframe,test] ; extra == 'test-downstream' + - moto[server]>4,<5 ; extra == 'test-downstream' + - pytest-timeout ; extra == 'test-downstream' + - xarray ; extra == 'test-downstream' + - adlfs ; extra == 'test-full' + - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'test-full' + - backports-zstd ; python_full_version < '3.14' and extra == 'test-full' + - cloudpickle ; extra == 'test-full' + - dask ; extra == 'test-full' + - distributed ; extra == 'test-full' + - dropbox ; extra == 'test-full' + - dropboxdrivefs ; extra == 'test-full' + - fastparquet ; extra == 'test-full' + - fusepy ; extra == 'test-full' + - gcsfs ; extra == 'test-full' + - jinja2 ; extra == 'test-full' + - kerchunk ; extra == 'test-full' + - libarchive-c ; extra == 'test-full' + - lz4 ; extra == 'test-full' + - notebook ; extra == 'test-full' + - numpy ; extra == 'test-full' + - ocifs ; extra == 'test-full' + - pandas<3.0.0 ; extra == 'test-full' + - panel ; extra == 'test-full' + - paramiko ; extra == 'test-full' + - pyarrow ; extra == 'test-full' + - pyarrow>=1 ; extra == 'test-full' + - pyftpdlib ; extra == 'test-full' + - pygit2 ; extra == 'test-full' + - pytest ; extra == 'test-full' + - pytest-asyncio!=0.22.0 ; extra == 'test-full' + - pytest-benchmark ; extra == 'test-full' + - pytest-cov ; extra == 'test-full' + - pytest-mock ; extra == 'test-full' + - pytest-recording ; extra == 'test-full' + - pytest-rerunfailures ; extra == 'test-full' + - python-snappy ; extra == 'test-full' + - requests ; extra == 'test-full' + - smbprotocol ; extra == 'test-full' + - tqdm ; extra == 'test-full' + - urllib3 ; extra == 'test-full' + - zarr<3.2.0 ; extra == 'test-full' + - zstandard ; python_full_version < '3.14' and extra == 'test-full' + - tqdm ; extra == 'tqdm' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/52/a0/c1f604538ff6db22a0690be2dc44ab59178e115f63c917794e529356ab23/h5py-3.16.0-cp311-cp311-manylinux_2_28_x86_64.whl + name: h5py + version: 3.16.0 + sha256: fb1720028d99040792bb2fb31facb8da44a6f29df7697e0b84f0d79aff2e9bd3 + requires_dist: + - numpy>=1.21.2 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/9e/e9/1a19e42cd43cc1365e127db6aae85e1c671da1d9a5d746f4d34a50edb577/h5py-3.16.0-cp312-cp312-manylinux_2_28_x86_64.whl + name: h5py + version: 3.16.0 + sha256: dfc21898ff025f1e8e67e194965a95a8d4754f452f83454538f98f8a3fcb207e + requires_dist: + - numpy>=1.21.2 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/bd/98/ef2b6fe2903e377cbe870c3b2800d62552f1e3dbe81ce49e1923c53d1c5c/h5py-3.16.0-cp313-cp313-manylinux_2_28_x86_64.whl + name: h5py + version: 3.16.0 + sha256: 9300ad32dea9dfc5171f94d5f6948e159ed93e4701280b0f508773b3f582f402 + requires_dist: + - numpy>=1.21.2 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/f1/16/d905e7f53e661ce2c24686c38048d8e2b750ffc4350009d41c4e6c6c9826/h5py-3.16.0-cp314-cp314-manylinux_2_28_x86_64.whl + name: h5py + version: 3.16.0 + sha256: e4360f15875a532bc7b98196c7592ed4fc92672a57c0a621355961cafb17a6dd + requires_dist: + - numpy>=1.21.2 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/ce/27/83314cfd4800ada7542ba49efc772c7a8949d349c7bec177e4e7fa5257e0/happi-3.0.1-py3-none-any.whl + name: happi + version: 3.0.1 + sha256: 0bbf16da6935f2f892ddc78b3ebfecb7c84a6a432d1b2ed49530a6136645d7f5 + requires_dist: + - click + - jinja2 + - simplejson + - platformdirs + - prettytable + - coloredlogs + - entrypoints + - pyqt5 ; extra == 'gui' + - qtpy ; extra == 'gui' + - pymongo ; extra == 'mongo' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-qt ; extra == 'test' + - ipython ; extra == 'test' + - matplotlib>=3.2.0 ; extra == 'test' + - ophyd>=1.5.0 ; extra == 'test' + - pcdsutils ; extra == 'test' + - pcdsdevices ; extra == 'test' + - mongomock>=3.22.0 ; extra == 'test' + - line-profiler ; extra == 'test' + - pyqt5 ; extra == 'test' + - qtpy ; extra == 'test' + - pymongo ; extra == 'test' + - docs-versions-menu ; extra == 'doc' + - doctr ; extra == 'doc' + - sphinx ; extra == 'doc' + - sphinx-rtd-theme>=1.2.0 ; extra == 'doc' + - sphinx-click ; extra == 'doc' + - sphinxcontrib-jquery ; extra == 'doc' + - pyqt5 ; extra == 'all' + - qtpy ; extra == 'all' + - pymongo ; extra == 'all' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/1e/8c/440369f727dcb856f3eeda238d6e67781b180feaa831bd28997d8af10c3b/hiredis-3.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: hiredis + version: 3.4.0 + sha256: 452cff764acb30c106d1e33f1bdf03fa9d4a9b0a9c995d722d4d39c998b40582 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/33/b5/ff8fe4f812348f09d2943b109cb64c5301af4f601e1cf026518e93a72fff/hiredis-3.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: hiredis + version: 3.4.0 + sha256: 35ab3653569b9867b8d8a3b4c0684a20dc769fe45d4666bedfe9a3391a61b30b + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/70/b7/32110aa458690722a1069c7349b8ebe374a6ba0bdf9ef8925a9f37a74978/hiredis-3.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: hiredis + version: 3.4.0 + sha256: 54b6267918c66d8ba4a3cf519db1235a4bd56d2a0969ca5b2ae3c6b6b7d9ed79 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/88/07/716ffeb049377d92da6261c5563e554b82336ce3eafb11eb4510c5558be7/hiredis-3.4.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: hiredis + version: 3.4.0 + sha256: 43004b0b48abc628dda1ac3ac4871e1326c126f8cd9f11164d61934d827d7a3b + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/fe/47/deb64c73aec25af7699247e021153a6bfe9a08452f7f7337dcee4aa07a2b/historydict-1.2.6-py3-none-any.whl + name: historydict + version: 1.2.6 + sha256: b4b00a170f05502aa682caba62435da5fe1f73037e884707581fe84f8d7b43f5 +- pypi: https://files.pythonhosted.org/packages/f0/0f/310fb31e39e2d734ccaa2c0fb981ee41f7bd5056ce9bc29b2248bd569169/humanfriendly-10.0-py2.py3-none-any.whl + name: humanfriendly + version: '10.0' + sha256: 1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477 + requires_dist: + - monotonic ; python_full_version == '2.7.*' + - pyreadline ; python_full_version < '3.8' and sys_platform == 'win32' + - pyreadline3 ; python_full_version >= '3.8' and sys_platform == 'win32' + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*' +- pypi: https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl + name: identify + version: 2.6.19 + sha256: 20e6a87f786f768c092a721ad107fc9df0eb89347be9396cadf3f4abbd1fb78a + requires_dist: + - ukkonen ; extra == 'license' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl + name: idna + version: '3.18' + sha256: 7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2 + requires_dist: + - ruff>=0.6.2 ; extra == 'all' + - mypy>=1.11.2 ; extra == 'all' + - pytest>=8.3.2 ; extra == 'all' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/49/fa/391e437a34e55095173dca5f24070d89cbc233ff85bf1c29c93248c6588d/imageio-2.37.3-py3-none-any.whl + name: imageio + version: 2.37.3 + sha256: 46f5bb8522cd421c0f5ae104d8268f569d856b29eb1a13b92829d1970f32c9f0 + requires_dist: + - numpy + - pillow>=8.3.2 + - imageio-ffmpeg ; extra == 'ffmpeg' + - psutil ; extra == 'ffmpeg' + - fsspec[http] ; extra == 'freeimage' + - pillow-heif ; extra == 'pillow-heif' + - tifffile ; extra == 'tifffile' + - av ; extra == 'pyav' + - astropy ; extra == 'fits' + - rawpy ; extra == 'rawpy' + - numpy>2 ; extra == 'rawpy' + - gdal ; extra == 'gdal' + - itk ; extra == 'itk' + - black ; extra == 'linting' + - flake8 ; extra == 'linting' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - fsspec[github] ; extra == 'test' + - sphinx<6 ; extra == 'docs' + - numpydoc ; extra == 'docs' + - pydata-sphinx-theme ; extra == 'docs' + - pytest ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - fsspec[github] ; extra == 'dev' + - black ; extra == 'dev' + - flake8 ; extra == 'dev' + - av ; extra == 'all-plugins' + - astropy ; extra == 'all-plugins' + - fsspec[http] ; extra == 'all-plugins' + - imageio-ffmpeg ; extra == 'all-plugins' + - numpy>2 ; extra == 'all-plugins' + - pillow-heif ; extra == 'all-plugins' + - psutil ; extra == 'all-plugins' + - rawpy ; extra == 'all-plugins' + - tifffile ; extra == 'all-plugins' + - fsspec[http] ; extra == 'all-plugins-pypy' + - imageio-ffmpeg ; extra == 'all-plugins-pypy' + - pillow-heif ; extra == 'all-plugins-pypy' + - psutil ; extra == 'all-plugins-pypy' + - tifffile ; extra == 'all-plugins-pypy' + - astropy ; extra == 'full' + - av ; extra == 'full' + - black ; extra == 'full' + - flake8 ; extra == 'full' + - fsspec[github,http] ; extra == 'full' + - imageio-ffmpeg ; extra == 'full' + - numpydoc ; extra == 'full' + - numpy>2 ; extra == 'full' + - pillow-heif ; extra == 'full' + - psutil ; extra == 'full' + - pydata-sphinx-theme ; extra == 'full' + - pytest ; extra == 'full' + - pytest-cov ; extra == 'full' + - rawpy ; extra == 'full' + - sphinx<6 ; extra == 'full' + - tifffile ; extra == 'full' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl + name: imagesize + version: 2.0.0 + sha256: 5667c5bbb57ab3f1fa4bc366f4fbc971db3d5ed011fd2715fd8001f782718d96 + requires_python: '>=3.10,<3.15' +- pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl + name: iniconfig + version: 2.3.0 + sha256: f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/bc/a4/d6f91d756f901626a30f47578e0bfdfde401e54a3eb49cb9dce9b855000a/intake-2.0.9-py3-none-any.whl + name: intake + version: 2.0.9 + sha256: b509c335bba95b839ccad3d7296a79392468679a5967491c122d3f7fada91352 + requires_dist: + - fsspec>=2023.0.0 + - pyyaml + - platformdirs + - networkx + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/3d/02/77b271f5dc58bfbc0b577c877b2365d1ffea2afe66a80c13f2312820348c/ipykernel-7.3.0-py3-none-any.whl + name: ipykernel + version: 7.3.0 + sha256: 897eb64da762549ef610698fca5e9675195ec6ac8ec7f19d81ce1ca20c876057 + requires_dist: + - appnope>=0.1.2 ; sys_platform == 'darwin' + - comm>=0.1.1 + - debugpy>=1.6.5 + - ipython>=7.23.1 + - jupyter-client>=8.9.0 + - jupyter-core>=5.1,!=6.0.* + - matplotlib-inline>=0.1 + - nest-asyncio2>=1.7.0 + - packaging>=22 + - psutil>=5.7 + - pyzmq>=25 + - tornado>=6.4.1 + - traitlets>=5.4.0 + - coverage[toml] ; extra == 'cov' + - matplotlib ; extra == 'cov' + - pytest-cov ; extra == 'cov' + - trio ; extra == 'cov' + - intersphinx-registry ; extra == 'docs' + - myst-parser ; extra == 'docs' + - pydata-sphinx-theme ; extra == 'docs' + - sphinx ; extra == 'docs' + - sphinx-autodoc-typehints ; extra == 'docs' + - sphinxcontrib-github-alt ; extra == 'docs' + - sphinxcontrib-spelling ; extra == 'docs' + - trio ; extra == 'docs' + - pyqt5 ; extra == 'pyqt5' + - pyside6 ; extra == 'pyside6' + - flaky ; extra == 'test' + - ipyparallel ; extra == 'test' + - pre-commit ; extra == 'test' + - pytest-asyncio>=0.23.5 ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-timeout ; extra == 'test' + - pytest>=7.0,<10 ; extra == 'test' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/40/3a/948263ca3b9d65bb2b1b0c521b3a49fad5d59ada58724bd87d2bd5ff3f36/ipython-9.15.0-py3-none-any.whl + name: ipython + version: 9.15.0 + sha256: 515ad9c3cdf0c932a5a9f6245419e8aba706b7bd03c3e1d3a1c83d9351d6aa6e + requires_dist: + - colorama>=0.4.4 ; sys_platform == 'win32' + - decorator>=5.1.0 + - ipython-pygments-lexers>=1.0.0 + - jedi>=0.18.2 + - matplotlib-inline>=0.1.6 + - pexpect>4.6 ; sys_platform != 'emscripten' and sys_platform != 'win32' + - prompt-toolkit>=3.0.41,<3.1.0 + - psutil>=7 ; sys_platform != 'cygwin' and sys_platform != 'emscripten' + - pygments>=2.14.0 + - stack-data>=0.6.0 + - traitlets>=5.13.0 + - typing-extensions>=4.6 ; python_full_version < '3.12' + - black ; extra == 'black' + - docrepr ; extra == 'doc' + - exceptiongroup ; extra == 'doc' + - intersphinx-registry ; extra == 'doc' + - ipykernel ; extra == 'doc' + - ipython[matplotlib,test] ; extra == 'doc' + - setuptools>=80.0 ; extra == 'doc' + - sphinx-toml==0.0.4 ; extra == 'doc' + - sphinx-rtd-theme>=0.1.8 ; extra == 'doc' + - sphinx>=8.0 ; extra == 'doc' + - typing-extensions ; extra == 'doc' + - pytest>=7.0.0 ; extra == 'test' + - pytest-asyncio>=1.0.0 ; extra == 'test' + - testpath>=0.2 ; extra == 'test' + - packaging>=23.0.0 ; extra == 'test' + - setuptools>=80.0 ; extra == 'test' + - ipython[test] ; extra == 'test-extra' + - curio ; extra == 'test-extra' + - jupyter-ai ; extra == 'test-extra' + - ipython[matplotlib] ; extra == 'test-extra' + - nbformat ; extra == 'test-extra' + - nbclient ; extra == 'test-extra' + - ipykernel>6.30 ; extra == 'test-extra' + - numpy>=2.0 ; extra == 'test-extra' + - pandas>2.1 ; extra == 'test-extra' + - trio>=0.22.0 ; extra == 'test-extra' + - matplotlib>3.9 ; extra == 'matplotlib' + - ipython[doc,matplotlib,terminal,test,test-extra] ; extra == 'all' + - argcomplete>=3.0 ; extra == 'all' + - types-decorator ; extra == 'all' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl + name: ipython-pygments-lexers + version: 1.1.1 + sha256: a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c + requires_dist: + - pygments + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/3e/95/c7c34aa53c16353c56d0b802fba48d5f5caa2cdee7958acbcb795c830416/isort-8.0.1-py3-none-any.whl + name: isort + version: 8.0.1 + sha256: 28b89bc70f751b559aeca209e6120393d43fbe2490de0559662be7a9787e3d75 + requires_dist: + - colorama ; extra == 'colors' + requires_python: '>=3.10.0' +- pypi: https://files.pythonhosted.org/packages/9a/93/242e2eab5fe682ffcb8b0084bde703a41d51e17ee0f3a31ff0d9d813620a/jedi-0.20.0-py2.py3-none-any.whl + name: jedi + version: 0.20.0 + sha256: 7bdd9c2634f56713299976f4cbd59cb3fa92165cc5e05ea811fb253480728b67 + requires_dist: + - parso>=0.8.6,<0.9.0 + - django ; extra == 'dev' + - attrs ; extra == 'dev' + - colorama ; extra == 'dev' + - docopt ; extra == 'dev' + - flake8==7.1.2 ; extra == 'dev' + - pytest<9.0.0 ; extra == 'dev' + - types-setuptools==80.9.0.20250529 ; extra == 'dev' + - typing-extensions ; extra == 'dev' + - zuban==0.7.0 ; extra == 'dev' + - jinja2==3.1.6 ; extra == 'docs' + - markupsafe==3.0.3 ; extra == 'docs' + - pygments==2.20.0 ; extra == 'docs' + - sphinx==9.1.0 ; extra == 'docs' + - alabaster==1.0.0 ; extra == 'docs' + - babel==2.18.0 ; extra == 'docs' + - certifi==2026.4.22 ; extra == 'docs' + - charset-normalizer==3.4.7 ; extra == 'docs' + - docutils==0.22.4 ; extra == 'docs' + - idna==3.13 ; extra == 'docs' + - imagesize==2.0.0 ; extra == 'docs' + - iniconfig==2.3.0 ; extra == 'docs' + - packaging==26.2 ; extra == 'docs' + - pluggy==1.6.0 ; extra == 'docs' + - pytest==9.0.3 ; extra == 'docs' + - requests==2.33.1 ; extra == 'docs' + - roman-numerals==4.1.0 ; extra == 'docs' + - snowballstemmer==3.0.1 ; extra == 'docs' + - sphinx-rtd-theme==3.1.0 ; extra == 'docs' + - sphinxcontrib-applehelp==2.0.0 ; extra == 'docs' + - sphinxcontrib-devhelp==2.0.0 ; extra == 'docs' + - sphinxcontrib-htmlhelp==2.1.0 ; extra == 'docs' + - sphinxcontrib-jquery==4.1 ; extra == 'docs' + - sphinxcontrib-jsmath==1.0.1 ; extra == 'docs' + - sphinxcontrib-qthelp==2.0.0 ; extra == 'docs' + - sphinxcontrib-serializinghtml==2.0.0 ; extra == 'docs' + - urllib3==2.6.3 ; extra == 'docs' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl + name: jinja2 + version: 3.1.6 + sha256: 85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 + requires_dist: + - markupsafe>=2.0 + - babel>=2.7 ; extra == 'i18n' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl + name: jsonschema + version: 4.26.0 + sha256: d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce + requires_dist: + - attrs>=22.2.0 + - jsonschema-specifications>=2023.3.6 + - referencing>=0.28.4 + - rpds-py>=0.25.0 + - fqdn ; extra == 'format' + - idna ; extra == 'format' + - isoduration ; extra == 'format' + - jsonpointer>1.13 ; extra == 'format' + - rfc3339-validator ; extra == 'format' + - rfc3987 ; extra == 'format' + - uri-template ; extra == 'format' + - webcolors>=1.11 ; extra == 'format' + - fqdn ; extra == 'format-nongpl' + - idna ; extra == 'format-nongpl' + - isoduration ; extra == 'format-nongpl' + - jsonpointer>1.13 ; extra == 'format-nongpl' + - rfc3339-validator ; extra == 'format-nongpl' + - rfc3986-validator>0.1.0 ; extra == 'format-nongpl' + - rfc3987-syntax>=1.1.0 ; extra == 'format-nongpl' + - uri-template ; extra == 'format-nongpl' + - webcolors>=24.6.0 ; extra == 'format-nongpl' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + name: jsonschema-specifications + version: 2025.9.1 + sha256: 98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe + requires_dist: + - referencing>=0.31.0 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/3f/6f/56d39bf385c5c27988aebaf0c18a2a17e960575740100973511018bd904e/jupyter_client-8.9.1-py3-none-any.whl + name: jupyter-client + version: 8.9.1 + sha256: 0b7a295bc46e8751e9adae84781f726c851c1d911bd793edc4a3bde942e3da81 + requires_dist: + - jupyter-core>=5.1 + - python-dateutil>=2.8.2 + - pyzmq>=25.0 + - tornado>=6.4.1 + - traitlets>=5.3 + - typing-extensions>=4.13.0 + - ipykernel ; extra == 'docs' + - myst-parser ; extra == 'docs' + - pydata-sphinx-theme ; extra == 'docs' + - sphinx-autodoc-typehints ; extra == 'docs' + - sphinx>=4 ; extra == 'docs' + - sphinxcontrib-github-alt ; extra == 'docs' + - sphinxcontrib-spelling ; extra == 'docs' + - orjson ; extra == 'orjson' + - anyio ; extra == 'test' + - coverage ; extra == 'test' + - ipykernel>=6.14 ; extra == 'test' + - msgpack ; extra == 'test' + - mypy ; platform_python_implementation != 'PyPy' and extra == 'test' + - paramiko ; sys_platform == 'win32' and extra == 'test' + - pre-commit ; extra == 'test' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-jupyter[client]>=0.6.2 ; extra == 'test' + - pytest-timeout ; extra == 'test' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/ca/77/71d78d58f15c22db16328a476426f7ac4a60d3a5a7ba3b9627ee2f7903d4/jupyter_console-6.6.3-py3-none-any.whl + name: jupyter-console + version: 6.6.3 + sha256: 309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485 + requires_dist: + - ipykernel>=6.14 + - ipython + - jupyter-client>=7.0.0 + - jupyter-core>=4.12,!=5.0.* + - prompt-toolkit>=3.0.30 + - pygments + - pyzmq>=17 + - traitlets>=5.4 + - flaky ; extra == 'test' + - pexpect ; extra == 'test' + - pytest ; extra == 'test' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl + name: jupyter-core + version: 5.9.1 + sha256: ebf87fdc6073d142e114c72c9e29a9d7ca03fad818c5d300ce2adc1fb0743407 + requires_dist: + - platformdirs>=2.5 + - traitlets>=5.3 + - intersphinx-registry ; extra == 'docs' + - myst-parser ; extra == 'docs' + - pydata-sphinx-theme ; extra == 'docs' + - sphinx-autodoc-typehints ; extra == 'docs' + - sphinxcontrib-spelling ; extra == 'docs' + - traitlets ; extra == 'docs' + - ipykernel ; extra == 'test' + - pre-commit ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-timeout ; extra == 'test' + - pytest<9 ; extra == 'test' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/2b/0a/7b98e1e119878a27ba8618ca1e18b14f992ff1eda40f47bccccf4de44121/kiwisolver-1.5.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: kiwisolver + version: 1.5.0 + sha256: 332b4f0145c30b5f5ad9374881133e5aa64320428a57c2c2b61e9d891a51c2f3 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/80/46/bddc13df6c2a40741e0cc7865bb1c9ed4796b6760bd04ce5fae3928ef917/kiwisolver-1.5.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: kiwisolver + version: 1.5.0 + sha256: 2517e24d7315eb51c10664cdb865195df38ab74456c677df67bb47f12d088a27 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/c4/13/680c54afe3e65767bed7ec1a15571e1a2f1257128733851ade24abcefbcc/kiwisolver-1.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: kiwisolver + version: 1.5.0 + sha256: bb5136fb5352d3f422df33f0c879a1b0c204004324150cc3b5e3c4f310c9049f + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/e7/f9/b06c934a6aa8bc91f566bd2a214fd04c30506c2d9e2b6b171953216a65b6/kiwisolver-1.5.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: kiwisolver + version: 1.5.0 + sha256: 80aa065ffd378ff784822a6d7c3212f2d5f5e9c3589614b5c228b311fd3063ac + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/8a/a1/8d812e53a5da1687abb10445275d41a8b13adb781bbf7196ddbcf8d88505/lazy_loader-0.5-py3-none-any.whl + name: lazy-loader + version: '0.5' + sha256: ab0ea149e9c554d4ffeeb21105ac60bed7f3b4fd69b1d2360a4add51b170b005 + requires_dist: + - packaging + - pytest>=8.0 ; extra == 'test' + - pytest-cov>=5.0 ; extra == 'test' + - coverage[toml]>=7.2 ; extra == 'test' + - pre-commit==4.3.0 ; extra == 'lint' + - changelist==0.5 ; extra == 'dev' + - spin==0.15 ; extra == 'dev' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + sha256: 3d584956604909ff5df353767f3a2a2f60e07d070b328d109f30ac40cd62df6c + md5: 18335a698559cdbcd86150a48bf54ba6 + depends: + - __glibc >=2.17,<3.0.a0 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - binutils_impl_linux-64 2.45.1 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 728002 + timestamp: 1774197446916 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda + sha256: 16feffd9ddbbe5b718515d38ee376c685ba95491cd901244e24671d20b952a77 + md5: b24d3c612f71e7aa74158d92106318b2 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - expat 2.8.1.* + license: MIT + license_family: MIT + purls: [] + size: 77856 + timestamp: 1781203599810 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + sha256: 31f19b6a88ce40ebc0d5a992c131f57d919f73c0b92cd1617a5bec83f6e961e6 + md5: a360c33a5abe61c07959e449fa1453eb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 58592 + timestamp: 1769456073053 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + sha256: 8e0a3b5e41272e5678499b5dfc4cddb673f9e935de01eb0767ce857001229f46 + md5: 57736f29cc2b0ec0b6c2952d3f101b6a + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + constrains: + - libgcc-ng ==15.2.0=*_19 + - libgomp 15.2.0 he0feb66_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 1041084 + timestamp: 1778269013026 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda + sha256: 9dcf54adfaa5e861123c2da4f2f0451a685464ea7e5a41ad91cf67b31d658d98 + md5: 331ee9b72b9dff570d56b1302c5ab37d + depends: + - libgcc 15.2.0 he0feb66_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 27694 + timestamp: 1778269016987 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + sha256: 5abe4ab9d93f6c9757d654f1969ae2267d4505315c1f2f8fe705fd60af084f1b + md5: faac990cb7aedc7f3a2224f2c9b0c26c + depends: + - __glibc >=2.17,<3.0.a0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 603817 + timestamp: 1778268942614 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + sha256: ec30e52a3c1bf7d0425380a189d209a52baa03f22fb66dd3eb587acaa765bd6d + md5: b88d90cad08e6bc8ad540cb310a761fb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - xz 5.8.3.* + license: 0BSD + purls: [] + size: 113478 + timestamp: 1775825492909 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda + sha256: fe171ed5cf5959993d43ff72de7596e8ac2853e9021dec0344e583734f1e0843 + md5: 2c21e66f50753a083cbe6b80f38268fa + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 92400 + timestamp: 1769482286018 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + sha256: 927fe72b054277cde6cb82597d0fcf6baf127dcbce2e0a9d8925a68f1265eef5 + md5: d864d34357c3b65a4b731f78c0801dc4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: LGPL-2.1-only + license_family: GPL + purls: [] + size: 33731 + timestamp: 1750274110928 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.3-h0c1763c_0.conda + sha256: 365376f4815e5e80def2b3462a2419708b7c292da0da85278386c2618621fff4 + md5: 4aed8e657e9ff156bdbe849b4df44389 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libzlib >=1.3.2,<2.0a0 + license: blessing + purls: [] + size: 962119 + timestamp: 1782519076616 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda + sha256: 9b1bdce27a7e31f7d241aeecff67a1f3101d52a2b1e33ccc2cdf2613072bf81f + md5: 01bb81d12c957de066ea7362007df642 + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 40017 + timestamp: 1781625522462 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + md5: 5aa797f8787fe7a17d1b0821485b5adc + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 100393 + timestamp: 1702724383534 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + sha256: 55044c403570f0dc26e6364de4dc5368e5f3fc7ff103e867c487e2b5ab2bcda9 + md5: d87ff7921124eccd67248aa483c23fec + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - zlib 1.3.2 *_2 + license: Zlib + license_family: Other + purls: [] + size: 63629 + timestamp: 1774072609062 +- pypi: https://files.pythonhosted.org/packages/25/3b/b55cb577aa148ed4e383e9700c36f70b651cd434e1c07568f0a86c9d5fbb/lz4-4.4.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: lz4 + version: 4.4.5 + sha256: 75419bb1a559af00250b8f1360d508444e80ed4b26d9d40ec5b09fe7875cb989 + requires_dist: + - pytest!=3.3.0 ; extra == 'tests' + - psutil ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - sphinx>=1.6.0 ; extra == 'docs' + - sphinx-bootstrap-theme ; extra == 'docs' + - flake8 ; extra == 'flake8' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/55/d9/e3867222474f6c1b76e89f3bd914595af69f55bf2c1866e984c548afdc15/lz4-4.4.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: lz4 + version: 4.4.5 + sha256: 24092635f47538b392c4eaeff14c7270d2c8e806bf4be2a6446a378591c5e69e + requires_dist: + - pytest!=3.3.0 ; extra == 'tests' + - psutil ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - sphinx>=1.6.0 ; extra == 'docs' + - sphinx-bootstrap-theme ; extra == 'docs' + - flake8 ; extra == 'flake8' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/d2/fb/ba9256c48266a09012ed1d9b0253b9aa4fe9cdff094f8febf5b26a4aa2a2/lz4-4.4.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: lz4 + version: 4.4.5 + sha256: 451039b609b9a88a934800b5fc6ee401c89ad9c175abf2f4d9f8b2e4ef1afc64 + requires_dist: + - pytest!=3.3.0 ; extra == 'tests' + - psutil ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - sphinx>=1.6.0 ; extra == 'docs' + - sphinx-bootstrap-theme ; extra == 'docs' + - flake8 ; extra == 'flake8' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/f1/01/d52c7b11eaa286d49dae619c0eec4aabc0bf3cda7a7467eb77c62c4471f3/lz4-4.4.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: lz4 + version: 4.4.5 + sha256: 0bba042ec5a61fa77c7e380351a61cb768277801240249841defd2ff0a10742f + requires_dist: + - pytest!=3.3.0 ; extra == 'tests' + - psutil ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - sphinx>=1.6.0 ; extra == 'docs' + - sphinx-bootstrap-theme ; extra == 'docs' + - flake8 ; extra == 'flake8' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: markupsafe + version: 3.0.3 + sha256: 0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: markupsafe + version: 3.0.3 + sha256: d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: markupsafe + version: 3.0.3 + sha256: 457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: markupsafe + version: 3.0.3 + sha256: ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/29/dc/6377ecfaa5fef79430f74a1a16638b4e2aa30d4692bae2c19f9d76fe3b01/matplotlib-3.11.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: matplotlib + version: 3.11.0 + sha256: 19c16c61dea63b3582918503e6b294193961261d9daa806d4ae2151f1ad05430 + requires_dist: + - contourpy>=1.0.1 + - cycler>=0.10 + - fonttools>=4.22.0 + - kiwisolver>=1.3.1 + - numpy>=1.25 + - packaging>=20.0 + - pillow>=9 + - pyparsing>=3 + - python-dateutil>=2.7 + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/53/f4/f0b4f9ba7ec14a7af8151f3ad71ecfe3561e6ba38cfab1db3681ba4ca112/matplotlib-3.11.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: matplotlib + version: 3.11.0 + sha256: 630eee0e67d35cce2019a0e670719f4816e3b86aff0fa72729f6c69786fceb45 + requires_dist: + - contourpy>=1.0.1 + - cycler>=0.10 + - fonttools>=4.22.0 + - kiwisolver>=1.3.1 + - numpy>=1.25 + - packaging>=20.0 + - pillow>=9 + - pyparsing>=3 + - python-dateutil>=2.7 + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/94/95/7f522393c88313336b20d70fc849555757b2e5febc22b83b3a3f0fd4bce9/matplotlib-3.11.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: matplotlib + version: 3.11.0 + sha256: be5f93a1d21981bfb802ded0d77a0caa92d4342a47d45754fac77e314a506344 + requires_dist: + - contourpy>=1.0.1 + - cycler>=0.10 + - fonttools>=4.22.0 + - kiwisolver>=1.3.1 + - numpy>=1.25 + - packaging>=20.0 + - pillow>=9 + - pyparsing>=3 + - python-dateutil>=2.7 + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/a4/c0/1117d53077e3ac3152503a84e9cf7a5c239576805ee71276e80c2aaa7471/matplotlib-3.11.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: matplotlib + version: 3.11.0 + sha256: be152b7570324dc8d01574cc9474dd2d803237acf528bcbb5b211fa347461a09 + requires_dist: + - contourpy>=1.0.1 + - cycler>=0.10 + - fonttools>=4.22.0 + - kiwisolver>=1.3.1 + - numpy>=1.25 + - packaging>=20.0 + - pillow>=9 + - pyparsing>=3 + - python-dateutil>=2.7 + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl + name: matplotlib-inline + version: 0.2.2 + sha256: 3c821cf1c209f59fb2d2d64abbf5b23b67bcb2210d663f9918dd851c6da1fcf6 + requires_dist: + - traitlets + - flake8 ; extra == 'test' + - nbdime ; extra == 'test' + - nbval ; extra == 'test' + - notebook ; extra == 'test' + - pytest ; extra == 'test' + - matplotlib ; extra == 'test' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl + name: mccabe + version: 0.7.0 + sha256: 6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/03/8d/671d81534ea0e2b0e8a121be100020da09eb78861fe3aa8f3ef7dcd3bed1/msgpack-1.2.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: msgpack + version: 1.2.1 + sha256: a28d076ca7c82b9c8728ad90b7147489449557038bed50e4241eb832395169b4 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/19/03/8c63e8cf52958534ef688625965ab04c269a6cadd8caef16758b380a821a/msgpack-1.2.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: msgpack + version: 1.2.1 + sha256: 0e2bf9280bceb5efca998435904b5d3e9fdbcc11d90dc9df30aec7973252b720 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/6a/fd/6adabd4f6d5e686f97dd02ce7fce3fe4cf672cbac36b8f67ff4040e8ad8b/msgpack-1.2.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: msgpack + version: 1.2.1 + sha256: 020e881a764b20d8d7ca1a54fc01b8175519d108e3c3f194fddc200bda95951a + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/79/d3/36a46a8ed992b781acbc05928bd5bee3c810cb0c3563bf81a7b0c04a1a76/msgpack-1.2.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: msgpack + version: 1.2.1 + sha256: 787c9bebb5833e8f6fc8abca3c0597683d8d87f56a8842b6b89c75a5f3176e2d + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/9b/5d/f25ac7d4fb77cbd53ddc6d05d833c6bf52b12770a44fa9a447eed470ca9a/msgpack_numpy-0.4.8-py2.py3-none-any.whl + name: msgpack-numpy + version: 0.4.8 + sha256: 773c19d4dfbae1b3c7b791083e2caf66983bb19b40901646f61d8731554ae3da + requires_dist: + - numpy>=1.9.0 + - msgpack>=0.5.2 +- pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl + name: mypy-extensions + version: 1.1.0 + sha256: 1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505 + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + sha256: fc89f74bbe362fb29fa3c037697a89bec140b346a2469a90f7936d1d7ea4d8a3 + md5: fc21868a1a5aacc937e7a18747acb8a5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: X11 AND BSD-3-Clause + purls: [] + size: 918956 + timestamp: 1777422145199 +- pypi: https://files.pythonhosted.org/packages/c5/3c/3179b85b0e1c3659f0369940200cd6d0fa900e6cefcc7ea0bc6dd0e29ffb/nest_asyncio2-1.7.2-py3-none-any.whl + name: nest-asyncio2 + version: 1.7.2 + sha256: f5dfa702f3f81f6a03857e9a19e2ba578c0946a4ad417b4c50a24d7ba641fe01 + requires_python: '>=3.5' +- pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl + name: networkx + version: 3.6.1 + sha256: d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762 + requires_dist: + - asv ; extra == 'benchmarking' + - virtualenv ; extra == 'benchmarking' + - numpy>=1.25 ; extra == 'default' + - scipy>=1.11.2 ; extra == 'default' + - matplotlib>=3.8 ; extra == 'default' + - pandas>=2.0 ; extra == 'default' + - pre-commit>=4.1 ; extra == 'developer' + - mypy>=1.15 ; extra == 'developer' + - sphinx>=8.0 ; extra == 'doc' + - pydata-sphinx-theme>=0.16 ; extra == 'doc' + - sphinx-gallery>=0.18 ; extra == 'doc' + - numpydoc>=1.8.0 ; extra == 'doc' + - pillow>=10 ; extra == 'doc' + - texext>=0.6.7 ; extra == 'doc' + - myst-nb>=1.1 ; extra == 'doc' + - intersphinx-registry ; extra == 'doc' + - osmnx>=2.0.0 ; extra == 'example' + - momepy>=0.7.2 ; extra == 'example' + - contextily>=1.6 ; extra == 'example' + - seaborn>=0.13 ; extra == 'example' + - cairocffi>=1.7 ; extra == 'example' + - igraph>=0.11 ; extra == 'example' + - scikit-learn>=1.5 ; extra == 'example' + - iplotx>=0.9.0 ; extra == 'example' + - lxml>=4.6 ; extra == 'extra' + - pygraphviz>=1.14 ; extra == 'extra' + - pydot>=3.0.1 ; extra == 'extra' + - sympy>=1.10 ; extra == 'extra' + - build>=0.10 ; extra == 'release' + - twine>=4.0 ; extra == 'release' + - wheel>=0.40 ; extra == 'release' + - changelist==0.5 ; extra == 'release' + - pytest>=7.2 ; extra == 'test' + - pytest-cov>=4.0 ; extra == 'test' + - pytest-xdist>=3.0 ; extra == 'test' + - pytest-mpl ; extra == 'test-extras' + - pytest-randomly ; extra == 'test-extras' + requires_python: '>=3.11,!=3.14.1' +- pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl + name: nodeenv + version: 1.10.0 + sha256: 5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*' +- pypi: https://files.pythonhosted.org/packages/02/03/74fe2a4cb3817d94d86402f2506554130a2f01414e299b5a843e5a8a957f/numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: numpy + version: 2.4.6 + sha256: 89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93 + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/41/5f/0f992cb24560673496c5d68de61913b57166ce530ffda07c1f280e0cc464/numpy-2.5.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: numpy + version: 2.5.1 + sha256: 54ad769f17bc2d833b620851989f62054fb9ab93c969d9e1dc3c8e3d56beea21 + requires_python: '>=3.12' +- pypi: https://files.pythonhosted.org/packages/b8/a9/6e73d68500f80773f65f0654ea932019d6694329a0eb0ed0533de38df376/numpy-2.5.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: numpy + version: 2.5.1 + sha256: 59fda5e192b570217ec2580c96f00e9a7e12ef6866a900eb089b62c1a32545ca + requires_python: '>=3.12' +- pypi: https://files.pythonhosted.org/packages/ed/a7/2bcd3fdbb87804755c35b729bf8709d62025c5f4cfd7d5b2415997097515/numpy-2.5.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: numpy + version: 2.5.1 + sha256: 9726558e8db4a5bf7929a70ae50f63abda4daf0efe810e3bfbab95976f75fc1a + requires_python: '>=3.12' +- pypi: https://files.pythonhosted.org/packages/62/5e/3a6a3e90f35cea3853c45e5d5fb9b7192ce4384616f932cf7591298ab6e1/numpydoc-1.10.0-py3-none-any.whl + name: numpydoc + version: 1.10.0 + sha256: 3149da9874af890bcc2a82ef7aae5484e5aa81cb2778f08e3c307ba6d963721b + requires_dist: + - sphinx>=6 + - tomli>=1.1.0 ; python_full_version < '3.11' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl + name: openpyxl + version: 3.1.5 + sha256: 5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2 + requires_dist: + - et-xmlfile + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda + sha256: d48f5c22b9897c01e4dff3680f1f57ceb02711ab9c62f74339b080419dfad34b + md5: 79dd2074b5cd5c5c6b2930514a11e22d + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=14 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 3159683 + timestamp: 1781069855778 +- pypi: https://files.pythonhosted.org/packages/17/83/6dba32b85f31868400440dc7ad2ca1eab94cbbf3a7b0459ed39f8311a9e2/opentelemetry_api-1.43.0-py3-none-any.whl + name: opentelemetry-api + version: 1.43.0 + sha256: 20acf45e9b21851926835292e4045d290acade1edd2ff3de86d2f069687ba1fd + requires_dist: + - typing-extensions>=4.5.0 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/ef/80/c6dbf1f8d14fbb5615d2e99b798d61b76eb937f09e1e948d0e8aaf8873b2/ophyd-1.11.2-py3-none-any.whl + name: ophyd + version: 1.11.2 + sha256: 0254dbced299fbff1841b4f80102dd0e0c482176d5812a2246a08763acd87a75 + requires_dist: + - networkx>=2.0 + - numpy + - opentelemetry-api + - packaging + - pint + - attrs>=19.3.0 ; extra == 'dev' + - black==22.3.0 ; extra == 'dev' + - bluesky>=1.11.0 ; extra == 'dev' + - caproto[standard]>=0.4.2rc1,!=1.2.0 ; extra == 'dev' + - pytest-codecov ; extra == 'dev' + - databroker>=1.0.0b1 ; extra == 'dev' + - doctr ; extra == 'dev' + - epics-pypdb ; extra == 'dev' + - flake8 ; extra == 'dev' + - flake8-isort ; extra == 'dev' + - h5py ; extra == 'dev' + - inflection ; extra == 'dev' + - ipython ; extra == 'dev' + - ipywidgets ; extra == 'dev' + - matplotlib ; extra == 'dev' + - mypy ; extra == 'dev' + - myst-parser ; extra == 'dev' + - numpydoc ; extra == 'dev' + - pre-commit ; extra == 'dev' + - pydata-sphinx-theme ; extra == 'dev' + - pyepics>=3.4.2,<3.5.7 ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-asyncio ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - pytest-faulthandler ; extra == 'dev' + - pytest-rerunfailures ; extra == 'dev' + - pytest-timeout ; extra == 'dev' + - pipdeptree ; extra == 'dev' + - setuptools>=64 ; extra == 'dev' + - setuptools-scm[toml]>=6.2 ; extra == 'dev' + - sphinx-autobuild ; extra == 'dev' + - sphinx-design ; extra == 'dev' + - tox-direct ; extra == 'dev' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/1e/2c/76ac5e485f6405fc0f1dbbd1c98b7c1137d4aa5c1e49ea9e69bbd8d22ae1/ophyd_async-0.19.3-py3-none-any.whl + name: ophyd-async + version: 0.19.3 + sha256: ef6201edb52e5a54008d57cad1808626aa6493ba4a8fd015e08d14bcffbb697a + requires_dist: + - numpy + - bluesky>=1.13.1rc2 + - event-model>=1.23 + - pyyaml + - colorlog + - pydantic>=2.0 + - pydantic-numpy + - stamina>=23.1.0 + - scanspec>=0.8 + - velocity-profile + - h5py ; extra == 'sim' + - aioca>=2.0a4 ; extra == 'ca' + - p4p>=4.2.0 ; extra == 'pva' + - pytango>=10.1.3 ; extra == 'tango' + - ipython ; extra == 'demo' + - matplotlib ; extra == 'demo' + - pyqt6 ; extra == 'demo' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl + name: packaging + version: '26.2' + sha256: 5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + sha256: 3906abfb6511a3bb309e39b9b1b7bc38f50a723971de2395489fd1f379255890 + md5: 4c06a92e74452cfa53623a81592e8934 + depends: + - python >=3.8 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/packaging?source=hash-mapping + size: 91574 + timestamp: 1777103621679 +- pypi: https://files.pythonhosted.org/packages/32/f1/bbecd2f867b97abebe0f9b53d750f862251b40337e061b36676ded3d920f/pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + name: pandas + version: 3.0.3 + sha256: 8a1e45c80cceb3b4a21bc5939d52e8cbd8d9b7305309219d59e9754d9ce09e27 + requires_dist: + - numpy>=1.26.0 ; python_full_version < '3.14' + - numpy>=2.3.3 ; python_full_version >= '3.14' + - python-dateutil>=2.8.2 + - tzdata ; sys_platform == 'win32' + - tzdata ; sys_platform == 'emscripten' + - hypothesis>=6.116.0 ; extra == 'test' + - pytest>=8.3.4 ; extra == 'test' + - pytest-xdist>=3.6.1 ; extra == 'test' + - pyarrow>=13.0.0 ; extra == 'pyarrow' + - bottleneck>=1.4.2 ; extra == 'performance' + - numba>=0.60.0 ; extra == 'performance' + - numexpr>=2.10.2 ; extra == 'performance' + - scipy>=1.14.1 ; extra == 'computation' + - xarray>=2024.10.0 ; extra == 'computation' + - fsspec>=2024.10.0 ; extra == 'fss' + - s3fs>=2024.10.0 ; extra == 'aws' + - gcsfs>=2024.10.0 ; extra == 'gcp' + - odfpy>=1.4.1 ; extra == 'excel' + - openpyxl>=3.1.5 ; extra == 'excel' + - python-calamine>=0.3.0 ; extra == 'excel' + - pyxlsb>=1.0.10 ; extra == 'excel' + - xlrd>=2.0.1 ; extra == 'excel' + - xlsxwriter>=3.2.0 ; extra == 'excel' + - pyarrow>=13.0.0 ; extra == 'parquet' + - pyarrow>=13.0.0 ; extra == 'feather' + - pyiceberg>=0.8.1 ; extra == 'iceberg' + - tables>=3.10.1 ; extra == 'hdf5' + - pyreadstat>=1.2.8 ; extra == 'spss' + - sqlalchemy>=2.0.36 ; extra == 'postgresql' + - psycopg2>=2.9.10 ; extra == 'postgresql' + - adbc-driver-postgresql>=1.2.0 ; extra == 'postgresql' + - sqlalchemy>=2.0.36 ; extra == 'mysql' + - pymysql>=1.1.1 ; extra == 'mysql' + - sqlalchemy>=2.0.36 ; extra == 'sql-other' + - adbc-driver-postgresql>=1.2.0 ; extra == 'sql-other' + - adbc-driver-sqlite>=1.2.0 ; extra == 'sql-other' + - beautifulsoup4>=4.12.3 ; extra == 'html' + - html5lib>=1.1 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'xml' + - matplotlib>=3.9.3 ; extra == 'plot' + - jinja2>=3.1.5 ; extra == 'output-formatting' + - tabulate>=0.9.0 ; extra == 'output-formatting' + - pyqt5>=5.15.9 ; extra == 'clipboard' + - qtpy>=2.4.2 ; extra == 'clipboard' + - zstandard>=0.23.0 ; extra == 'compression' + - pytz>=2020.1 ; extra == 'timezone' + - adbc-driver-postgresql>=1.2.0 ; extra == 'all' + - adbc-driver-sqlite>=1.2.0 ; extra == 'all' + - beautifulsoup4>=4.12.3 ; extra == 'all' + - bottleneck>=1.4.2 ; extra == 'all' + - fastparquet>=2024.11.0 ; extra == 'all' + - fsspec>=2024.10.0 ; extra == 'all' + - gcsfs>=2024.10.0 ; extra == 'all' + - html5lib>=1.1 ; extra == 'all' + - hypothesis>=6.116.0 ; extra == 'all' + - jinja2>=3.1.5 ; extra == 'all' + - lxml>=5.3.0 ; extra == 'all' + - matplotlib>=3.9.3 ; extra == 'all' + - numba>=0.60.0 ; extra == 'all' + - numexpr>=2.10.2 ; extra == 'all' + - odfpy>=1.4.1 ; extra == 'all' + - openpyxl>=3.1.5 ; extra == 'all' + - psycopg2>=2.9.10 ; extra == 'all' + - pyarrow>=13.0.0 ; extra == 'all' + - pyiceberg>=0.8.1 ; extra == 'all' + - pymysql>=1.1.1 ; extra == 'all' + - pyqt5>=5.15.9 ; extra == 'all' + - pyreadstat>=1.2.8 ; extra == 'all' + - pytest>=8.3.4 ; extra == 'all' + - pytest-xdist>=3.6.1 ; extra == 'all' + - python-calamine>=0.3.0 ; extra == 'all' + - pytz>=2020.1 ; extra == 'all' + - pyxlsb>=1.0.10 ; extra == 'all' + - qtpy>=2.4.2 ; extra == 'all' + - scipy>=1.14.1 ; extra == 'all' + - s3fs>=2024.10.0 ; extra == 'all' + - sqlalchemy>=2.0.36 ; extra == 'all' + - tables>=3.10.1 ; extra == 'all' + - tabulate>=0.9.0 ; extra == 'all' + - xarray>=2024.10.0 ; extra == 'all' + - xlrd>=2.0.1 ; extra == 'all' + - xlsxwriter>=3.2.0 ; extra == 'all' + - zstandard>=0.23.0 ; extra == 'all' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + name: pandas + version: 3.0.3 + sha256: 9d71c63ae4ebdbf70209742096f1fc46a83a0613c99d4b23766cced9ff8cd62a + requires_dist: + - numpy>=1.26.0 ; python_full_version < '3.14' + - numpy>=2.3.3 ; python_full_version >= '3.14' + - python-dateutil>=2.8.2 + - tzdata ; sys_platform == 'win32' + - tzdata ; sys_platform == 'emscripten' + - hypothesis>=6.116.0 ; extra == 'test' + - pytest>=8.3.4 ; extra == 'test' + - pytest-xdist>=3.6.1 ; extra == 'test' + - pyarrow>=13.0.0 ; extra == 'pyarrow' + - bottleneck>=1.4.2 ; extra == 'performance' + - numba>=0.60.0 ; extra == 'performance' + - numexpr>=2.10.2 ; extra == 'performance' + - scipy>=1.14.1 ; extra == 'computation' + - xarray>=2024.10.0 ; extra == 'computation' + - fsspec>=2024.10.0 ; extra == 'fss' + - s3fs>=2024.10.0 ; extra == 'aws' + - gcsfs>=2024.10.0 ; extra == 'gcp' + - odfpy>=1.4.1 ; extra == 'excel' + - openpyxl>=3.1.5 ; extra == 'excel' + - python-calamine>=0.3.0 ; extra == 'excel' + - pyxlsb>=1.0.10 ; extra == 'excel' + - xlrd>=2.0.1 ; extra == 'excel' + - xlsxwriter>=3.2.0 ; extra == 'excel' + - pyarrow>=13.0.0 ; extra == 'parquet' + - pyarrow>=13.0.0 ; extra == 'feather' + - pyiceberg>=0.8.1 ; extra == 'iceberg' + - tables>=3.10.1 ; extra == 'hdf5' + - pyreadstat>=1.2.8 ; extra == 'spss' + - sqlalchemy>=2.0.36 ; extra == 'postgresql' + - psycopg2>=2.9.10 ; extra == 'postgresql' + - adbc-driver-postgresql>=1.2.0 ; extra == 'postgresql' + - sqlalchemy>=2.0.36 ; extra == 'mysql' + - pymysql>=1.1.1 ; extra == 'mysql' + - sqlalchemy>=2.0.36 ; extra == 'sql-other' + - adbc-driver-postgresql>=1.2.0 ; extra == 'sql-other' + - adbc-driver-sqlite>=1.2.0 ; extra == 'sql-other' + - beautifulsoup4>=4.12.3 ; extra == 'html' + - html5lib>=1.1 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'xml' + - matplotlib>=3.9.3 ; extra == 'plot' + - jinja2>=3.1.5 ; extra == 'output-formatting' + - tabulate>=0.9.0 ; extra == 'output-formatting' + - pyqt5>=5.15.9 ; extra == 'clipboard' + - qtpy>=2.4.2 ; extra == 'clipboard' + - zstandard>=0.23.0 ; extra == 'compression' + - pytz>=2020.1 ; extra == 'timezone' + - adbc-driver-postgresql>=1.2.0 ; extra == 'all' + - adbc-driver-sqlite>=1.2.0 ; extra == 'all' + - beautifulsoup4>=4.12.3 ; extra == 'all' + - bottleneck>=1.4.2 ; extra == 'all' + - fastparquet>=2024.11.0 ; extra == 'all' + - fsspec>=2024.10.0 ; extra == 'all' + - gcsfs>=2024.10.0 ; extra == 'all' + - html5lib>=1.1 ; extra == 'all' + - hypothesis>=6.116.0 ; extra == 'all' + - jinja2>=3.1.5 ; extra == 'all' + - lxml>=5.3.0 ; extra == 'all' + - matplotlib>=3.9.3 ; extra == 'all' + - numba>=0.60.0 ; extra == 'all' + - numexpr>=2.10.2 ; extra == 'all' + - odfpy>=1.4.1 ; extra == 'all' + - openpyxl>=3.1.5 ; extra == 'all' + - psycopg2>=2.9.10 ; extra == 'all' + - pyarrow>=13.0.0 ; extra == 'all' + - pyiceberg>=0.8.1 ; extra == 'all' + - pymysql>=1.1.1 ; extra == 'all' + - pyqt5>=5.15.9 ; extra == 'all' + - pyreadstat>=1.2.8 ; extra == 'all' + - pytest>=8.3.4 ; extra == 'all' + - pytest-xdist>=3.6.1 ; extra == 'all' + - python-calamine>=0.3.0 ; extra == 'all' + - pytz>=2020.1 ; extra == 'all' + - pyxlsb>=1.0.10 ; extra == 'all' + - qtpy>=2.4.2 ; extra == 'all' + - scipy>=1.14.1 ; extra == 'all' + - s3fs>=2024.10.0 ; extra == 'all' + - sqlalchemy>=2.0.36 ; extra == 'all' + - tables>=3.10.1 ; extra == 'all' + - tabulate>=0.9.0 ; extra == 'all' + - xarray>=2024.10.0 ; extra == 'all' + - xlrd>=2.0.1 ; extra == 'all' + - xlsxwriter>=3.2.0 ; extra == 'all' + - zstandard>=0.23.0 ; extra == 'all' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/65/b6/09b01cdbc15224e2850365192d17b7bdebb8bdbd8780ed221fcdf0d9a515/pandas-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + name: pandas + version: 3.0.3 + sha256: 6dc0b3fd2169c9157deed50b4d519553a3655c8c6a96027136d654592be973a9 + requires_dist: + - numpy>=1.26.0 ; python_full_version < '3.14' + - numpy>=2.3.3 ; python_full_version >= '3.14' + - python-dateutil>=2.8.2 + - tzdata ; sys_platform == 'win32' + - tzdata ; sys_platform == 'emscripten' + - hypothesis>=6.116.0 ; extra == 'test' + - pytest>=8.3.4 ; extra == 'test' + - pytest-xdist>=3.6.1 ; extra == 'test' + - pyarrow>=13.0.0 ; extra == 'pyarrow' + - bottleneck>=1.4.2 ; extra == 'performance' + - numba>=0.60.0 ; extra == 'performance' + - numexpr>=2.10.2 ; extra == 'performance' + - scipy>=1.14.1 ; extra == 'computation' + - xarray>=2024.10.0 ; extra == 'computation' + - fsspec>=2024.10.0 ; extra == 'fss' + - s3fs>=2024.10.0 ; extra == 'aws' + - gcsfs>=2024.10.0 ; extra == 'gcp' + - odfpy>=1.4.1 ; extra == 'excel' + - openpyxl>=3.1.5 ; extra == 'excel' + - python-calamine>=0.3.0 ; extra == 'excel' + - pyxlsb>=1.0.10 ; extra == 'excel' + - xlrd>=2.0.1 ; extra == 'excel' + - xlsxwriter>=3.2.0 ; extra == 'excel' + - pyarrow>=13.0.0 ; extra == 'parquet' + - pyarrow>=13.0.0 ; extra == 'feather' + - pyiceberg>=0.8.1 ; extra == 'iceberg' + - tables>=3.10.1 ; extra == 'hdf5' + - pyreadstat>=1.2.8 ; extra == 'spss' + - sqlalchemy>=2.0.36 ; extra == 'postgresql' + - psycopg2>=2.9.10 ; extra == 'postgresql' + - adbc-driver-postgresql>=1.2.0 ; extra == 'postgresql' + - sqlalchemy>=2.0.36 ; extra == 'mysql' + - pymysql>=1.1.1 ; extra == 'mysql' + - sqlalchemy>=2.0.36 ; extra == 'sql-other' + - adbc-driver-postgresql>=1.2.0 ; extra == 'sql-other' + - adbc-driver-sqlite>=1.2.0 ; extra == 'sql-other' + - beautifulsoup4>=4.12.3 ; extra == 'html' + - html5lib>=1.1 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'xml' + - matplotlib>=3.9.3 ; extra == 'plot' + - jinja2>=3.1.5 ; extra == 'output-formatting' + - tabulate>=0.9.0 ; extra == 'output-formatting' + - pyqt5>=5.15.9 ; extra == 'clipboard' + - qtpy>=2.4.2 ; extra == 'clipboard' + - zstandard>=0.23.0 ; extra == 'compression' + - pytz>=2020.1 ; extra == 'timezone' + - adbc-driver-postgresql>=1.2.0 ; extra == 'all' + - adbc-driver-sqlite>=1.2.0 ; extra == 'all' + - beautifulsoup4>=4.12.3 ; extra == 'all' + - bottleneck>=1.4.2 ; extra == 'all' + - fastparquet>=2024.11.0 ; extra == 'all' + - fsspec>=2024.10.0 ; extra == 'all' + - gcsfs>=2024.10.0 ; extra == 'all' + - html5lib>=1.1 ; extra == 'all' + - hypothesis>=6.116.0 ; extra == 'all' + - jinja2>=3.1.5 ; extra == 'all' + - lxml>=5.3.0 ; extra == 'all' + - matplotlib>=3.9.3 ; extra == 'all' + - numba>=0.60.0 ; extra == 'all' + - numexpr>=2.10.2 ; extra == 'all' + - odfpy>=1.4.1 ; extra == 'all' + - openpyxl>=3.1.5 ; extra == 'all' + - psycopg2>=2.9.10 ; extra == 'all' + - pyarrow>=13.0.0 ; extra == 'all' + - pyiceberg>=0.8.1 ; extra == 'all' + - pymysql>=1.1.1 ; extra == 'all' + - pyqt5>=5.15.9 ; extra == 'all' + - pyreadstat>=1.2.8 ; extra == 'all' + - pytest>=8.3.4 ; extra == 'all' + - pytest-xdist>=3.6.1 ; extra == 'all' + - python-calamine>=0.3.0 ; extra == 'all' + - pytz>=2020.1 ; extra == 'all' + - pyxlsb>=1.0.10 ; extra == 'all' + - qtpy>=2.4.2 ; extra == 'all' + - scipy>=1.14.1 ; extra == 'all' + - s3fs>=2024.10.0 ; extra == 'all' + - sqlalchemy>=2.0.36 ; extra == 'all' + - tables>=3.10.1 ; extra == 'all' + - tabulate>=0.9.0 ; extra == 'all' + - xarray>=2024.10.0 ; extra == 'all' + - xlrd>=2.0.1 ; extra == 'all' + - xlsxwriter>=3.2.0 ; extra == 'all' + - zstandard>=0.23.0 ; extra == 'all' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/99/68/1237369725aa617bb358263d535803e3053fdbc593513ec5ed9c9896b5b6/pandas-3.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + name: pandas + version: 3.0.3 + sha256: a4eeb6830daf35a71cc09649bd823e2b542dac246cdee9614c6e4bd65028cd6a + requires_dist: + - numpy>=1.26.0 ; python_full_version < '3.14' + - numpy>=2.3.3 ; python_full_version >= '3.14' + - python-dateutil>=2.8.2 + - tzdata ; sys_platform == 'win32' + - tzdata ; sys_platform == 'emscripten' + - hypothesis>=6.116.0 ; extra == 'test' + - pytest>=8.3.4 ; extra == 'test' + - pytest-xdist>=3.6.1 ; extra == 'test' + - pyarrow>=13.0.0 ; extra == 'pyarrow' + - bottleneck>=1.4.2 ; extra == 'performance' + - numba>=0.60.0 ; extra == 'performance' + - numexpr>=2.10.2 ; extra == 'performance' + - scipy>=1.14.1 ; extra == 'computation' + - xarray>=2024.10.0 ; extra == 'computation' + - fsspec>=2024.10.0 ; extra == 'fss' + - s3fs>=2024.10.0 ; extra == 'aws' + - gcsfs>=2024.10.0 ; extra == 'gcp' + - odfpy>=1.4.1 ; extra == 'excel' + - openpyxl>=3.1.5 ; extra == 'excel' + - python-calamine>=0.3.0 ; extra == 'excel' + - pyxlsb>=1.0.10 ; extra == 'excel' + - xlrd>=2.0.1 ; extra == 'excel' + - xlsxwriter>=3.2.0 ; extra == 'excel' + - pyarrow>=13.0.0 ; extra == 'parquet' + - pyarrow>=13.0.0 ; extra == 'feather' + - pyiceberg>=0.8.1 ; extra == 'iceberg' + - tables>=3.10.1 ; extra == 'hdf5' + - pyreadstat>=1.2.8 ; extra == 'spss' + - sqlalchemy>=2.0.36 ; extra == 'postgresql' + - psycopg2>=2.9.10 ; extra == 'postgresql' + - adbc-driver-postgresql>=1.2.0 ; extra == 'postgresql' + - sqlalchemy>=2.0.36 ; extra == 'mysql' + - pymysql>=1.1.1 ; extra == 'mysql' + - sqlalchemy>=2.0.36 ; extra == 'sql-other' + - adbc-driver-postgresql>=1.2.0 ; extra == 'sql-other' + - adbc-driver-sqlite>=1.2.0 ; extra == 'sql-other' + - beautifulsoup4>=4.12.3 ; extra == 'html' + - html5lib>=1.1 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'xml' + - matplotlib>=3.9.3 ; extra == 'plot' + - jinja2>=3.1.5 ; extra == 'output-formatting' + - tabulate>=0.9.0 ; extra == 'output-formatting' + - pyqt5>=5.15.9 ; extra == 'clipboard' + - qtpy>=2.4.2 ; extra == 'clipboard' + - zstandard>=0.23.0 ; extra == 'compression' + - pytz>=2020.1 ; extra == 'timezone' + - adbc-driver-postgresql>=1.2.0 ; extra == 'all' + - adbc-driver-sqlite>=1.2.0 ; extra == 'all' + - beautifulsoup4>=4.12.3 ; extra == 'all' + - bottleneck>=1.4.2 ; extra == 'all' + - fastparquet>=2024.11.0 ; extra == 'all' + - fsspec>=2024.10.0 ; extra == 'all' + - gcsfs>=2024.10.0 ; extra == 'all' + - html5lib>=1.1 ; extra == 'all' + - hypothesis>=6.116.0 ; extra == 'all' + - jinja2>=3.1.5 ; extra == 'all' + - lxml>=5.3.0 ; extra == 'all' + - matplotlib>=3.9.3 ; extra == 'all' + - numba>=0.60.0 ; extra == 'all' + - numexpr>=2.10.2 ; extra == 'all' + - odfpy>=1.4.1 ; extra == 'all' + - openpyxl>=3.1.5 ; extra == 'all' + - psycopg2>=2.9.10 ; extra == 'all' + - pyarrow>=13.0.0 ; extra == 'all' + - pyiceberg>=0.8.1 ; extra == 'all' + - pymysql>=1.1.1 ; extra == 'all' + - pyqt5>=5.15.9 ; extra == 'all' + - pyreadstat>=1.2.8 ; extra == 'all' + - pytest>=8.3.4 ; extra == 'all' + - pytest-xdist>=3.6.1 ; extra == 'all' + - python-calamine>=0.3.0 ; extra == 'all' + - pytz>=2020.1 ; extra == 'all' + - pyxlsb>=1.0.10 ; extra == 'all' + - qtpy>=2.4.2 ; extra == 'all' + - scipy>=1.14.1 ; extra == 'all' + - s3fs>=2024.10.0 ; extra == 'all' + - sqlalchemy>=2.0.36 ; extra == 'all' + - tables>=3.10.1 ; extra == 'all' + - tabulate>=0.9.0 ; extra == 'all' + - xarray>=2024.10.0 ; extra == 'all' + - xlrd>=2.0.1 ; extra == 'all' + - xlsxwriter>=3.2.0 ; extra == 'all' + - zstandard>=0.23.0 ; extra == 'all' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/99/5d/8268b644392ee874ee82a635cd0df1773de230bde356c38de28e298392cc/parso-0.8.7-py2.py3-none-any.whl + name: parso + version: 0.8.7 + sha256: a8926eb2a1b915486941fdbd31e86a4baf88fe8c210f25f2f35ecec5b574ca1c + requires_dist: + - flake8==5.0.4 ; extra == 'qa' + - types-setuptools==67.2.0.1 ; extra == 'qa' + - zuban==0.5.1 ; extra == 'qa' + - docopt ; extra == 'testing' + - pytest ; extra == 'testing' + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl + name: pathspec + version: 1.1.1 + sha256: a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189 + requires_dist: + - hyperscan>=0.7 ; extra == 'hyperscan' + - typing-extensions>=4 ; extra == 'optional' + - google-re2>=1.1 ; extra == 're2' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl + name: pexpect + version: 4.9.0 + sha256: 7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523 + requires_dist: + - ptyprocess>=0.5 +- pypi: https://files.pythonhosted.org/packages/3b/2d/ede717bc1144f63886c21fd349bb95860b0d1a21149ff16f2bb362b612b6/pillow-12.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: pillow + version: 12.3.0 + sha256: 23d27a3e0307ec2244cc51e7287b919aa68d097504ebe19df4e76a98a3eea5bd + requires_dist: + - furo ; extra == 'docs' + - olefile ; extra == 'docs' + - sphinx>=8.2 ; extra == 'docs' + - sphinx-autobuild ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - sphinxext-opengraph ; extra == 'docs' + - olefile ; extra == 'fpx' + - olefile ; extra == 'mic' + - arro3-compute ; extra == 'test-arrow' + - arro3-core ; extra == 'test-arrow' + - nanoarrow ; extra == 'test-arrow' + - pyarrow ; extra == 'test-arrow' + - coverage>=7.4.2 ; extra == 'tests' + - defusedxml ; extra == 'tests' + - markdown2 ; extra == 'tests' + - olefile ; extra == 'tests' + - packaging ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-timeout ; extra == 'tests' + - pytest-xdist ; extra == 'tests' + - setuptools ; extra == 'tests' + - trove-classifiers>=2024.10.12 ; extra == 'tests' + - defusedxml ; extra == 'xmp' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: pillow + version: 12.3.0 + sha256: 251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b + requires_dist: + - furo ; extra == 'docs' + - olefile ; extra == 'docs' + - sphinx>=8.2 ; extra == 'docs' + - sphinx-autobuild ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - sphinxext-opengraph ; extra == 'docs' + - olefile ; extra == 'fpx' + - olefile ; extra == 'mic' + - arro3-compute ; extra == 'test-arrow' + - arro3-core ; extra == 'test-arrow' + - nanoarrow ; extra == 'test-arrow' + - pyarrow ; extra == 'test-arrow' + - coverage>=7.4.2 ; extra == 'tests' + - defusedxml ; extra == 'tests' + - markdown2 ; extra == 'tests' + - olefile ; extra == 'tests' + - packaging ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-timeout ; extra == 'tests' + - pytest-xdist ; extra == 'tests' + - setuptools ; extra == 'tests' + - trove-classifiers>=2024.10.12 ; extra == 'tests' + - defusedxml ; extra == 'xmp' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/84/21/a35af28dcc61f37ed850a2d64c65c701321dfbf25085e469d5559360cbbf/pillow-12.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: pillow + version: 12.3.0 + sha256: 78cb2c6865a35ab8ff8b75fd122f6033b92a62c82801110e48ddd6c936a45d91 + requires_dist: + - furo ; extra == 'docs' + - olefile ; extra == 'docs' + - sphinx>=8.2 ; extra == 'docs' + - sphinx-autobuild ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - sphinxext-opengraph ; extra == 'docs' + - olefile ; extra == 'fpx' + - olefile ; extra == 'mic' + - arro3-compute ; extra == 'test-arrow' + - arro3-core ; extra == 'test-arrow' + - nanoarrow ; extra == 'test-arrow' + - pyarrow ; extra == 'test-arrow' + - coverage>=7.4.2 ; extra == 'tests' + - defusedxml ; extra == 'tests' + - markdown2 ; extra == 'tests' + - olefile ; extra == 'tests' + - packaging ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-timeout ; extra == 'tests' + - pytest-xdist ; extra == 'tests' + - setuptools ; extra == 'tests' + - trove-classifiers>=2024.10.12 ; extra == 'tests' + - defusedxml ; extra == 'xmp' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/f7/62/de5bdd77d935331f4f802edc11e4d82950f642caad6cb2f949837b8560e2/pillow-12.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: pillow + version: 12.3.0 + sha256: 0847a763afefb695bc912d7c131e7e0632d4edc1d8698f58ddabec8e46b8b6d3 + requires_dist: + - furo ; extra == 'docs' + - olefile ; extra == 'docs' + - sphinx>=8.2 ; extra == 'docs' + - sphinx-autobuild ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - sphinxext-opengraph ; extra == 'docs' + - olefile ; extra == 'fpx' + - olefile ; extra == 'mic' + - arro3-compute ; extra == 'test-arrow' + - arro3-core ; extra == 'test-arrow' + - nanoarrow ; extra == 'test-arrow' + - pyarrow ; extra == 'test-arrow' + - coverage>=7.4.2 ; extra == 'tests' + - defusedxml ; extra == 'tests' + - markdown2 ; extra == 'tests' + - olefile ; extra == 'tests' + - packaging ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-timeout ; extra == 'tests' + - pytest-xdist ; extra == 'tests' + - setuptools ; extra == 'tests' + - trove-classifiers>=2024.10.12 ; extra == 'tests' + - defusedxml ; extra == 'xmp' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/1b/dd/a9fe6a0a09512da23951c68bf36466aeecd89def3183dc095edbc807ddc5/pint-0.25.3-py3-none-any.whl + name: pint + version: 0.25.3 + sha256: 27eb25143bd5de9fcc4d5a4b484f16faf6b4615aa93ece6b3373a8c1a3c1b97d + requires_dist: + - flexcache>=0.3 + - flexparser>=0.4 + - platformdirs>=2.1.0 + - typing-extensions>=4.0.0 + - babel<=2.8 ; extra == 'all' + - dask<2025.3.0 ; extra == 'all' + - matplotlib ; extra == 'all' + - numpy>=1.23 ; extra == 'all' + - pint-pandas>=0.3 ; extra == 'all' + - scipy ; extra == 'all' + - uncertainties>=3.1.6 ; extra == 'all' + - xarray ; extra == 'all' + - babel<=2.8 ; extra == 'babel' + - pytest ; extra == 'codspeed' + - pytest-benchmark ; extra == 'codspeed' + - pytest-codspeed ; extra == 'codspeed' + - pytest-cov ; extra == 'codspeed' + - pytest-mpl ; extra == 'codspeed' + - pytest-subtests ; extra == 'codspeed' + - dask<2025.3.0 ; extra == 'dask' + - babel ; extra == 'docs' + - commonmark==0.8.1 ; extra == 'docs' + - currencyconverter ; extra == 'docs' + - docutils ; extra == 'docs' + - graphviz ; extra == 'docs' + - ipykernel ; extra == 'docs' + - ipython<=8.12 ; extra == 'docs' + - jupyter-client ; extra == 'docs' + - nbsphinx ; extra == 'docs' + - pooch ; extra == 'docs' + - pygments>=2.4 ; extra == 'docs' + - recommonmark==0.5.0 ; extra == 'docs' + - sciform ; extra == 'docs' + - scipy ; extra == 'docs' + - serialize ; extra == 'docs' + - sparse ; extra == 'docs' + - sphinx-book-theme>=1.1.0 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-design ; extra == 'docs' + - sphinx>=6,<8.2 ; extra == 'docs' + - matplotlib ; extra == 'matplotlib' + - numpy>=1.23 ; extra == 'numpy' + - pint-pandas>=0.3 ; extra == 'pandas' + - scipy ; extra == 'scipy' + - pytest ; extra == 'test' + - pytest-benchmark ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-subtests ; extra == 'test' + - pytest ; extra == 'test-all' + - pytest-benchmark ; extra == 'test-all' + - pytest-cov ; extra == 'test-all' + - pytest-mpl ; extra == 'test-all' + - pytest-subtests ; extra == 'test-all' + - pytest-mpl ; extra == 'test-mpl' + - uncertainties>=3.1.6 ; extra == 'uncertainties' + - xarray ; extra == 'xarray' + requires_python: '>=3.11' +- conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.2-pyh145f28c_0.conda + sha256: 9e673d3c6003f416df11670a14b026a04e3a45ebec55357987e15b860f138f2a + md5: 733cc07ed34162ac50b936464b163366 + depends: + - python >=3.13.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pip?source=compressed-mapping + size: 1202377 + timestamp: 1780262809860 +- conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.2-pyh8b19718_0.conda + sha256: 29b7d75bf81ad11645a8e320b369abdc90a92b93f2a9178e853d9dddf82e5106 + md5: 511fbc2c63d2c73650ad1755e4d357ba + depends: + - python >=3.10,<3.13.0a0 + - setuptools + - wheel + license: MIT + license_family: MIT + purls: + - pkg:pypi/pip?source=compressed-mapping + size: 1203173 + timestamp: 1780262795392 +- pypi: https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl + name: platformdirs + version: 4.10.0 + sha256: fb516cdb12eb0d857d0cd85a7c57cea4d060bee4578d6cf5a14dfdf8cbf8784a + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + name: pluggy + version: 1.6.0 + sha256: e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746 + requires_dist: + - pre-commit ; extra == 'dev' + - tox ; extra == 'dev' + - pytest ; extra == 'testing' + - pytest-benchmark ; extra == 'testing' + - coverage ; extra == 'testing' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl + name: pre-commit + version: 4.6.0 + sha256: e2cf246f7299edcabcf15f9b0571fdce06058527f0a06535068a86d38089f29b + requires_dist: + - cfgv>=2.0.0 + - identify>=1.0.0 + - nodeenv>=0.11.1 + - pyyaml>=5.1 + - virtualenv>=20.10.0 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/fe/be/2e6798ace5cc036f5d05d36b7b2fd85346f1a708c87060890b070d0ec607/prettytable-3.18.0-py3-none-any.whl + name: prettytable + version: 3.18.0 + sha256: b3346e0e6f79180833aebaac088ae926340586cf6d7d991b9eb125b65f72313a + requires_dist: + - wcwidth>=0.3.5 + - pytest-cov ; extra == 'tests' + - pytest-lazy-fixtures ; extra == 'tests' + - pytest>=9 ; extra == 'tests' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl + name: prompt-toolkit + version: 3.0.52 + sha256: 9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955 + requires_dist: + - wcwidth + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl + name: psutil + version: 7.2.2 + sha256: 076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9 + requires_dist: + - psleak ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-instafail ; extra == 'dev' + - pytest-xdist ; extra == 'dev' + - setuptools ; extra == 'dev' + - abi3audit ; extra == 'dev' + - black ; extra == 'dev' + - check-manifest ; extra == 'dev' + - coverage ; extra == 'dev' + - packaging ; extra == 'dev' + - pylint ; extra == 'dev' + - pyperf ; extra == 'dev' + - pypinfo ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - requests ; extra == 'dev' + - rstcheck ; extra == 'dev' + - ruff ; extra == 'dev' + - sphinx ; extra == 'dev' + - sphinx-rtd-theme ; extra == 'dev' + - toml-sort ; extra == 'dev' + - twine ; extra == 'dev' + - validate-pyproject[all] ; extra == 'dev' + - virtualenv ; extra == 'dev' + - vulture ; extra == 'dev' + - wheel ; extra == 'dev' + - colorama ; os_name == 'nt' and extra == 'dev' + - pyreadline3 ; os_name == 'nt' and extra == 'dev' + - pywin32 ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev' + - wheel ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev' + - wmi ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev' + - psleak ; extra == 'test' + - pytest ; extra == 'test' + - pytest-instafail ; extra == 'test' + - pytest-xdist ; extra == 'test' + - setuptools ; extra == 'test' + - pywin32 ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test' + - wheel ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test' + - wmi ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test' + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl + name: ptyprocess + version: 0.7.0 + sha256: 4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35 +- pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl + name: pure-eval + version: 0.2.3 + sha256: 1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0 + requires_dist: + - pytest ; extra == 'tests' +- pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl + name: py + version: 1.11.0 + sha256: 607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*' +- pypi: https://files.pythonhosted.org/packages/55/0e/cd705c042bc4fe7022478db577fcab4abdcfabb9bc37ab7a75556b3fcb2b/pyarrow-25.0.0-cp312-cp312-manylinux_2_28_x86_64.whl + name: pyarrow + version: 25.0.0 + sha256: 5d1dbf24e151042f2fa3c129563f65d66674128868496fb008c4272b16bdf778 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/6a/29/0ed312ec800fb536f93783215126cee4b8977dcfeccba6f0f44df0cc87d7/pyarrow-25.0.0-cp314-cp314-manylinux_2_28_x86_64.whl + name: pyarrow + version: 25.0.0 + sha256: 447df764beb07c544f0178a5f6b70ef44b9ecf382b3cdfad4c2d7867353c3887 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/7b/79/72d704b02bc5fc6d06954d76a0208c1e79cad3ab370f6d6a91ffe5078870/pyarrow-25.0.0-cp311-cp311-manylinux_2_28_x86_64.whl + name: pyarrow + version: 25.0.0 + sha256: 0222f0071d13313962a88d21bf28b80d355ac39d81bfa6ff3fe00eeaf748e4be + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/b5/5d/f790fb6965ab54c9da0dda7856abc75fd0d7648d865f8d603c111d203a64/pyarrow-25.0.0-cp313-cp313-manylinux_2_28_x86_64.whl + name: pyarrow + version: 25.0.0 + sha256: 6f9dbd83e91c239a1f5ee7ce13f108b5f6c0efbe40a4375260d8f08b43ad05e9 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl + name: pycodestyle + version: 2.14.0 + sha256: dd6bf7cb4ee77f8e016f9c8e74a35ddd9f67e1d5fd4184d86c3b98e07099f42d + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl + name: pydantic + version: 2.13.4 + sha256: 45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba + requires_dist: + - annotated-types>=0.6.0 + - pydantic-core==2.46.4 + - typing-extensions>=4.14.1 + - typing-inspection>=0.4.2 + - email-validator>=2.0.0 ; extra == 'email' + - tzdata ; python_full_version >= '3.9' and sys_platform == 'win32' and extra == 'timezone' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/07/f8/41db9de19d7987d6b04715a02b3b40aea467000275d9d758ffaa31af7d50/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: pydantic-core + version: 2.46.4 + sha256: 9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a + requires_dist: + - typing-extensions>=4.14.1 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: pydantic-core + version: 2.46.4 + sha256: 926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce + requires_dist: + - typing-extensions>=4.14.1 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/80/50/540cd3aeefc041beb111125c4bff779831a2111fc6b15a9138cda277d32c/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: pydantic-core + version: 2.46.4 + sha256: f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4 + requires_dist: + - typing-extensions>=4.14.1 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: pydantic-core + version: 2.46.4 + sha256: 7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b + requires_dist: + - typing-extensions>=4.14.1 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/90/cb/c13d8a74419dde9590ed6fab293b516f68316ac87d06569b79b5f446d519/pydantic_numpy-8.0.1-py3-none-any.whl + name: pydantic-numpy + version: 8.0.1 + sha256: bf4cd84f4f864074197e9cfeafddca76bfbd1c2ef48f88be7322cc75838de4ae + requires_dist: + - compress-pickle[lz4] + - numpy>=2,<3 + - pydantic>=2.0,<3.0 + - ruamel-yaml>=0.18.5,<0.19.0 + - semver>=3.0.1,<4.0.0 + requires_python: '>=3.10,<3.14' +- pypi: https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl + name: pyflakes + version: 3.4.0 + sha256: f742a7dbd0d9cb9ea41e9a24a918996e8170c799fa528688d40dd582c8265f4f + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl + name: pygments + version: 2.20.0 + sha256: 81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 + requires_dist: + - colorama>=0.4.6 ; extra == 'windows-terminal' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl + name: pyparsing + version: 3.3.2 + sha256: 850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d + requires_dist: + - railroad-diagrams ; extra == 'diagrams' + - jinja2 ; extra == 'diagrams' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl + name: pytest + version: 9.1.1 + sha256: 37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c + requires_dist: + - colorama>=0.4 ; sys_platform == 'win32' + - exceptiongroup>=1 ; python_full_version < '3.11' + - iniconfig>=1.0.1 + - packaging>=22 + - pluggy>=1.5,<2 + - pygments>=2.7.2 + - tomli>=1 ; python_full_version < '3.11' + - argcomplete ; extra == 'dev' + - attrs>=19.2 ; extra == 'dev' + - hypothesis>=3.56 ; extra == 'dev' + - mock ; extra == 'dev' + - requests ; extra == 'dev' + - setuptools ; extra == 'dev' + - xmlschema ; extra == 'dev' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/ae/a1/d4423657caaa8be9b31e491592b49cebdcfd434d3e74512ce71f6ec39905/pytest_split-0.11.0-py3-none-any.whl + name: pytest-split + version: 0.11.0 + sha256: 899d7c0f5730da91e2daf283860eb73b503259cb416851a65599368849c7f382 + requires_dist: + - pytest>=5,<10 + requires_python: '>=3.10,<4.0' +- pypi: https://files.pythonhosted.org/packages/63/cf/91b94238c843bfbae0a6674df45015aa3908b91454c496b2eb29e7991255/pytest_xprocess-1.0.2-py3-none-any.whl + name: pytest-xprocess + version: 1.0.2 + sha256: 0b0444d1f789fd9b4ba8b6b38b1d0139f226ab14091db2698a0521c1770523dd + requires_dist: + - pytest>=2.8 + - psutil + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.15-h7508c33_1_cpython.conda + build_number: 1 + sha256: e830c8c69605674a997ee280d79c0f05ff5c1ed80ce3743678b2f663f410dfb9 + md5: fa29f621acaa9c0db5fd2c0ffc65312c + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.8.1,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - liblzma >=5.8.3,<6.0a0 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.53.2,<4.0a0 + - libuuid >=2.42.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.2,<2.0a0 + - ncurses >=6.6,<7.0a0 + - openssl >=3.5.7,<4.0a0 + - readline >=8.3,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + constrains: + - python_abi 3.11.* *_cp311 + license: Python-2.0 + purls: [] + size: 30907259 + timestamp: 1781149782225 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.13-hd63d673_0_cpython.conda + sha256: a44655c1c3e1d43ed8704890a91e12afd68130414ea2c0872e154e5633a13d7e + md5: 7eccb41177e15cc672e1babe9056018e + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.7.4,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - liblzma >=5.8.2,<6.0a0 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.51.2,<4.0a0 + - libuuid >=2.41.3,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.5.5,<4.0a0 + - readline >=8.3,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 31608571 + timestamp: 1772730708989 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.14-h6add32d_100_cp313.conda + build_number: 100 + sha256: f2146aff59ce4b571a8f1d1acf94f9bed6cc18ab5632d7dcc940fb48ecdeef99 + md5: 93762cd272814a142cf21d794f8fb0c1 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.8.1,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - liblzma >=5.8.3,<6.0a0 + - libmpdec >=4.0.0,<5.0a0 + - libsqlite >=3.53.2,<4.0a0 + - libuuid >=2.42.1,<3.0a0 + - libzlib >=1.3.2,<2.0a0 + - ncurses >=6.6,<7.0a0 + - openssl >=3.5.7,<4.0a0 + - python_abi 3.13.* *_cp313 + - readline >=8.3,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + license: Python-2.0 + purls: [] + size: 37398694 + timestamp: 1781258934574 + python_site_packages_path: lib/python3.13/site-packages +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.6-habeac84_100_cp314.conda + build_number: 100 + sha256: 6d28ac2b061179deb434d3d57afa98ffd20ec3c5d44ab8048a1ca33424b22d38 + md5: 0b9b2f83b5b600e1ac38becde8d0dd44 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.8.1,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - liblzma >=5.8.3,<6.0a0 + - libmpdec >=4.0.0,<5.0a0 + - libsqlite >=3.53.2,<4.0a0 + - libuuid >=2.42.1,<3.0a0 + - libzlib >=1.3.2,<2.0a0 + - ncurses >=6.6,<7.0a0 + - openssl >=3.5.7,<4.0a0 + - python_abi 3.14.* *_cp314 + - readline >=8.3,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - zstd >=1.5.7,<1.6.0a0 + license: Python-2.0 + purls: [] + size: 36717183 + timestamp: 1781255094700 + python_site_packages_path: lib/python3.14/site-packages +- pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl + name: python-dateutil + version: 2.9.0.post0 + sha256: a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 + requires_dist: + - six>=1.5 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*' +- pypi: https://files.pythonhosted.org/packages/9d/ae/84bc0d2440c95772272bb6f4b3d09ccf08b2898fce89b3d4f969a9fc74e9/python_discovery-1.4.4-py3-none-any.whl + name: python-discovery + version: 1.4.4 + sha256: abebe9120b43453b68c908acfb1e72a19d1a959ed2cb620ad38fc57d08056dbe + requires_dist: + - filelock>=3.15.4 + - platformdirs>=4.3.6,<5 + - furo>=2025.12.19 ; extra == 'docs' + - sphinx-autodoc-typehints>=3.6.3 ; extra == 'docs' + - sphinx>=9.1 ; extra == 'docs' + - sphinxcontrib-mermaid>=2 ; extra == 'docs' + - sphinxcontrib-towncrier>=0.4 ; extra == 'docs' + - towncrier>=25.8 ; extra == 'docs' + - covdefaults>=2.3 ; extra == 'testing' + - coverage>=7.5.4 ; extra == 'testing' + - pytest-mock>=3.14 ; extra == 'testing' + - pytest>=8.3.5 ; extra == 'testing' + - setuptools>=75.1 ; extra == 'testing' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/e1/04/e8135ebd1ad02c56ec633277529b2602ff99ff634be76cdba5744cf554fd/python_multipart-0.0.32-py3-none-any.whl + name: python-multipart + version: 0.0.32 + sha256: ff6d3f776f16878c894e52e107296ffc890e913c611b1a4ec6c44e2821fe2e23 + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + build_number: 8 + sha256: 210bffe7b121e651419cb196a2a63687b087497595c9be9d20ebe97dd06060a7 + md5: 94305520c52a4aa3f6c2b1ff6008d9f8 + constrains: + - python 3.13.* *_cp313 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 7002 + timestamp: 1752805902938 +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + build_number: 8 + sha256: ad6d2e9ac39751cc0529dd1566a26751a0bf2542adb0c232533d32e176e21db5 + md5: 0539938c55b6b1a59b560e843ad864a4 + constrains: + - python 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6989 + timestamp: 1752805904792 +- pypi: https://files.pythonhosted.org/packages/0f/95/70d7041273890f9f97a24234c00b746e8da86df462620194cef1d411ddeb/pytokens-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: pytokens + version: 0.4.1 + sha256: dc74c035f9bfca0255c1af77ddd2d6ae8419012805453e4b0e7513e17904545d + requires_dist: + - black ; extra == 'dev' + - build ; extra == 'dev' + - mypy ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - setuptools ; extra == 'dev' + - tox ; extra == 'dev' + - twine ; extra == 'dev' + - wheel ; extra == 'dev' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/17/50/bc0394b4ad5b1601be22fa43652173d47e4c9efbf0044c62e9a59b747c56/pytokens-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: pytokens + version: 0.4.1 + sha256: b49750419d300e2b5a3813cf229d4e5a4c728dae470bcc89867a9ad6f25a722d + requires_dist: + - black ; extra == 'dev' + - build ; extra == 'dev' + - mypy ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - setuptools ; extra == 'dev' + - tox ; extra == 'dev' + - twine ; extra == 'dev' + - wheel ; extra == 'dev' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/bf/3c/2d5297d82286f6f3d92770289fd439956b201c0a4fc7e72efb9b2293758e/pytokens-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: pytokens + version: 0.4.1 + sha256: 24afde1f53d95348b5a0eb19488661147285ca4dd7ed752bbc3e1c6242a304d1 + requires_dist: + - black ; extra == 'dev' + - build ; extra == 'dev' + - mypy ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - setuptools ; extra == 'dev' + - tox ; extra == 'dev' + - twine ; extra == 'dev' + - wheel ; extra == 'dev' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/e0/d2/afe5c7f8607018beb99971489dbb846508f1b8f351fcefc225fcf4b2adc0/pytokens-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: pytokens + version: 0.4.1 + sha256: 29d1d8fb1030af4d231789959f21821ab6325e463f0503a61d204343c9b355d1 + requires_dist: + - black ; extra == 'dev' + - build ; extra == 'dev' + - mypy ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - setuptools ; extra == 'dev' + - tox ; extra == 'dev' + - twine ; extra == 'dev' + - wheel ; extra == 'dev' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: pyyaml + version: 6.0.3 + sha256: b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: pyyaml + version: 6.0.3 + sha256: 0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: pyyaml + version: 6.0.3 + sha256: c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: pyyaml + version: 6.0.3 + sha256: ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/b1/c4/2a6fe5111a01005fc7af3878259ce17684fabb8852815eda6225620f3c59/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl + name: pyzmq + version: 27.1.0 + sha256: 5bbf8d3630bf96550b3be8e1fc0fea5cbdc8d5466c1192887bd94869da17a63e + requires_dist: + - cffi ; implementation_name == 'pypy' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl + name: pyzmq + version: 27.1.0 + sha256: 43ad9a73e3da1fab5b0e7e13402f0b2fb934ae1c876c51d0afff0e7c052eca31 + requires_dist: + - cffi ; implementation_name == 'pypy' + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + sha256: 12ffde5a6f958e285aa22c191ca01bbd3d6e710aa852e00618fa6ddc59149002 + md5: d7d95fc8287ea7bf33e0e7116d2b95ec + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - ncurses >=6.5,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 345073 + timestamp: 1765813471974 +- pypi: https://files.pythonhosted.org/packages/fd/0a/c2345ebf1ebe70840ce3f6c6ee612f8fa749cfbd1b03069c53bf0c62aaad/redis-8.0.1-py3-none-any.whl + name: redis + version: 8.0.1 + sha256: 47daa35a058c23468d6437f17a8c76882cb316b838ef763036af99b96cedd743 + requires_dist: + - async-timeout>=4.0.3 ; python_full_version < '3.11.3' + - pybreaker>=1.4.0 ; extra == 'circuit-breaker' + - hiredis>=3.2.0 ; extra == 'hiredis' + - pyjwt>=2.13.0 ; extra == 'jwt' + - cryptography>=36.0.1 ; extra == 'ocsp' + - pyopenssl>=20.0.1 ; extra == 'ocsp' + - requests>=2.31.0 ; extra == 'ocsp' + - opentelemetry-api>=1.39.1 ; extra == 'otel' + - opentelemetry-exporter-otlp-proto-http>=1.39.1 ; extra == 'otel' + - opentelemetry-sdk>=1.39.1 ; extra == 'otel' + - xxhash~=3.6.0 ; extra == 'xxhash' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + name: referencing + version: 0.37.0 + sha256: 381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231 + requires_dist: + - attrs>=22.2.0 + - rpds-py>=0.7.0 + - typing-extensions>=4.4.0 ; python_full_version < '3.13' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl + name: requests + version: 2.34.2 + sha256: 2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0 + requires_dist: + - charset-normalizer>=2,<4 + - idna>=2.5,<4 + - urllib3>=1.26,<3 + - certifi>=2023.5.7 + - pysocks>=1.5.6,!=1.5.7 ; extra == 'socks' + - chardet>=3.0.2,<8 ; extra == 'use-chardet-on-py3' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl + name: roman-numerals + version: 4.1.0 + sha256: 647ba99caddc2cc1e55a51e4360689115551bf4476d90e8162cf8c345fe233c7 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/04/8f/d2f3f532616be4d06c316ef119683e832bd3d41e112bf3a88f4151c95b17/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: rpds-py + version: 2026.6.3 + sha256: ecabd69db66de867690f9797f2f8fa27ba501bbc24540cbdbdc649cd15888ba6 + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/57/d7/fe978efc2ae50abe48eb7464668ea99f53c010c60aeebb7b35ad27f23661/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: rpds-py + version: 2026.6.3 + sha256: acac386b453c2516111b50985d60ce46e7fadb5ea71ae7b25f4c946935bf27cf + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/5e/19/7e98f468bd50346faff5b10e5297374b443bfdddacc8e9fbc65984539597/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: rpds-py + version: 2026.6.3 + sha256: 9c1255b302953c86a486b81d330d5ee1d5bd937691ce271b6be0ef0e299eaab7 + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/d1/9c/0d1fdc2e7aba23e290d603bc494e97bd205bae262ce33c6b32a69768ed5e/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: rpds-py + version: 2026.6.3 + sha256: dc319e5a1de4b6913aac94bf6a2f9e847371e0a140a43dd4991db1a09bc2d504 + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/af/fe/b6045c782f1fd1ae317d2a6ca1884857ce5c20f59befe6ab25a8603c43a7/ruamel_yaml-0.18.17-py3-none-any.whl + name: ruamel-yaml + version: 0.18.17 + sha256: 9c8ba9eb3e793efdf924b60d521820869d5bf0cb9c6f1b82d82de8295e290b9d + requires_dist: + - ruamel-yaml-clib>=0.2.15 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' + - ruamel-yaml-jinja2>=0.2 ; extra == 'jinja2' + - ryd ; extra == 'docs' + - mercurial>5.7 ; extra == 'docs' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/61/62/150c841f24cda9e30f588ef396ed83f64cfdc13b92d2f925bb96df337ba9/ruamel_yaml_clib-0.2.15-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: ruamel-yaml-clib + version: 0.2.15 + sha256: 11e5499db1ccbc7f4b41f0565e4f799d863ea720e01d3e99fa0b7b5fcd7802c9 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/a1/5c/8b56b08db91e569d0a4fbfa3e492ed2026081bdd7e892f63ba1c88a2f548/ruamel_yaml_clib-0.2.15-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: ruamel-yaml-clib + version: 0.2.15 + sha256: 2812ff359ec1f30129b62372e5f22a52936fac13d5d21e70373dbca5d64bb97c + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/aa/ed/3fb20a1a96b8dc645d88c4072df481fe06e0289e4d528ebbdcc044ebc8b3/ruamel_yaml_clib-0.2.15-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: ruamel-yaml-clib + version: 0.2.15 + sha256: 617d35dc765715fa86f8c3ccdae1e4229055832c452d4ec20856136acc75053f + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/ff/5d/e4f84c9c448613e12bd62e90b23aa127ea4c46b697f3d760acc32cb94f25/ruamel_yaml_clib-0.2.15-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: ruamel-yaml-clib + version: 0.2.15 + sha256: 4d1032919280ebc04a80e4fb1e93f7a738129857eaec9448310e638c8bccefcf + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/68/b9/f44b139096467996b4d85589d9880fd55f0c80a204d298a1b73d0adc2654/scanspec-1.0.0-py3-none-any.whl + name: scanspec + version: 1.0.0 + sha256: 4ad6dccd6ac19dbd8af888c80c5db53c70d6b8aee9d26c0ca174cebd3c396730 + requires_dist: + - numpy + - click>=8.1 + - pydantic>=2.0 + - scipy ; extra == 'plotting' + - matplotlib ; extra == 'plotting' + - fastapi>=0.100.0 ; extra == 'service' + - uvicorn ; extra == 'service' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/73/c3/cec6a3cbaadfdcc02bd6ff02f3abfe09eaa7f4d4e0a525a1e3a3f4bce49c/scikit_image-0.26.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + name: scikit-image + version: 0.26.0 + sha256: c6624a76c6085218248154cc7e1500e6b488edcd9499004dd0d35040607d7505 + requires_dist: + - numpy>=1.24 + - scipy>=1.11.4 + - networkx>=3.0 + - pillow>=10.1 + - imageio>=2.33,!=2.35.0 + - tifffile>=2022.8.12 + - packaging>=21 + - lazy-loader>=0.4 + - meson-python>=0.16 ; extra == 'build' + - ninja>=1.11.1.1 ; extra == 'build' + - cython>=3.0.8,!=3.2.0b1 ; extra == 'build' + - pythran>=0.16 ; extra == 'build' + - numpy>=2.0 ; extra == 'build' + - spin==0.13 ; extra == 'build' + - build>=1.2.1 ; extra == 'build' + - pooch>=1.6.0 ; extra == 'data' + - pre-commit ; extra == 'developer' + - ipython ; extra == 'developer' + - docstub==0.3.0.post0 ; extra == 'developer' + - scikit-image[asv] ; extra == 'developer' + - asv ; sys_platform != 'emscripten' and extra == 'asv' + - sphinx>=8.0 ; extra == 'docs' + - sphinx-gallery[parallel]>=0.18 ; extra == 'docs' + - numpydoc>=1.7 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - matplotlib>=3.7 ; extra == 'docs' + - dask[array]>=2023.2.0 ; extra == 'docs' + - pandas>=2.0 ; extra == 'docs' + - seaborn>=0.11 ; extra == 'docs' + - pooch>=1.6 ; extra == 'docs' + - tifffile>=2022.8.12 ; extra == 'docs' + - myst-parser ; extra == 'docs' + - intersphinx-registry>=0.2411.14 ; extra == 'docs' + - ipywidgets ; extra == 'docs' + - ipykernel ; extra == 'docs' + - plotly>=5.20 ; extra == 'docs' + - kaleido==0.2.1 ; extra == 'docs' + - scikit-learn>=1.2 ; extra == 'docs' + - sphinx-design>=0.5 ; extra == 'docs' + - pydata-sphinx-theme>=0.16 ; extra == 'docs' + - pywavelets>=1.6 ; extra == 'docs' + - pytest-doctestplus>=1.6.0 ; extra == 'docs' + - simpleitk ; sys_platform != 'emscripten' and extra == 'optional' + - scikit-learn>=1.2 ; extra == 'optional' + - pyamg>=5.2 ; python_full_version < '3.14' and sys_platform != 'emscripten' and extra == 'optional' + - scikit-image[optional-free-threaded] ; extra == 'optional' + - astropy>=6.0 ; extra == 'optional-free-threaded' + - dask[array]>=2023.2.0 ; extra == 'optional-free-threaded' + - matplotlib>=3.7 ; extra == 'optional-free-threaded' + - pooch>=1.6.0 ; sys_platform != 'emscripten' and extra == 'optional-free-threaded' + - pywavelets>=1.6 ; extra == 'optional-free-threaded' + - numpydoc>=1.7 ; extra == 'test' + - pooch>=1.6.0 ; sys_platform != 'emscripten' and extra == 'test' + - pytest>=8.3 ; extra == 'test' + - pytest-cov>=2.11.0 ; extra == 'test' + - pytest-pretty ; extra == 'test' + - pytest-localserver ; extra == 'test' + - pytest-faulthandler ; extra == 'test' + - pytest-doctestplus>=1.6.0 ; extra == 'test' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/a3/b8/0d8eeb5a9fd7d34ba84f8a55753a0a3e2b5b51b2a5a0ade648a8db4a62f7/scikit_image-0.26.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + name: scikit-image + version: 0.26.0 + sha256: b36ab5e778bf50af5ff386c3ac508027dc3aaeccf2161bdf96bde6848f44d21b + requires_dist: + - numpy>=1.24 + - scipy>=1.11.4 + - networkx>=3.0 + - pillow>=10.1 + - imageio>=2.33,!=2.35.0 + - tifffile>=2022.8.12 + - packaging>=21 + - lazy-loader>=0.4 + - meson-python>=0.16 ; extra == 'build' + - ninja>=1.11.1.1 ; extra == 'build' + - cython>=3.0.8,!=3.2.0b1 ; extra == 'build' + - pythran>=0.16 ; extra == 'build' + - numpy>=2.0 ; extra == 'build' + - spin==0.13 ; extra == 'build' + - build>=1.2.1 ; extra == 'build' + - pooch>=1.6.0 ; extra == 'data' + - pre-commit ; extra == 'developer' + - ipython ; extra == 'developer' + - docstub==0.3.0.post0 ; extra == 'developer' + - scikit-image[asv] ; extra == 'developer' + - asv ; sys_platform != 'emscripten' and extra == 'asv' + - sphinx>=8.0 ; extra == 'docs' + - sphinx-gallery[parallel]>=0.18 ; extra == 'docs' + - numpydoc>=1.7 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - matplotlib>=3.7 ; extra == 'docs' + - dask[array]>=2023.2.0 ; extra == 'docs' + - pandas>=2.0 ; extra == 'docs' + - seaborn>=0.11 ; extra == 'docs' + - pooch>=1.6 ; extra == 'docs' + - tifffile>=2022.8.12 ; extra == 'docs' + - myst-parser ; extra == 'docs' + - intersphinx-registry>=0.2411.14 ; extra == 'docs' + - ipywidgets ; extra == 'docs' + - ipykernel ; extra == 'docs' + - plotly>=5.20 ; extra == 'docs' + - kaleido==0.2.1 ; extra == 'docs' + - scikit-learn>=1.2 ; extra == 'docs' + - sphinx-design>=0.5 ; extra == 'docs' + - pydata-sphinx-theme>=0.16 ; extra == 'docs' + - pywavelets>=1.6 ; extra == 'docs' + - pytest-doctestplus>=1.6.0 ; extra == 'docs' + - simpleitk ; sys_platform != 'emscripten' and extra == 'optional' + - scikit-learn>=1.2 ; extra == 'optional' + - pyamg>=5.2 ; python_full_version < '3.14' and sys_platform != 'emscripten' and extra == 'optional' + - scikit-image[optional-free-threaded] ; extra == 'optional' + - astropy>=6.0 ; extra == 'optional-free-threaded' + - dask[array]>=2023.2.0 ; extra == 'optional-free-threaded' + - matplotlib>=3.7 ; extra == 'optional-free-threaded' + - pooch>=1.6.0 ; sys_platform != 'emscripten' and extra == 'optional-free-threaded' + - pywavelets>=1.6 ; extra == 'optional-free-threaded' + - numpydoc>=1.7 ; extra == 'test' + - pooch>=1.6.0 ; sys_platform != 'emscripten' and extra == 'test' + - pytest>=8.3 ; extra == 'test' + - pytest-cov>=2.11.0 ; extra == 'test' + - pytest-pretty ; extra == 'test' + - pytest-localserver ; extra == 'test' + - pytest-faulthandler ; extra == 'test' + - pytest-doctestplus>=1.6.0 ; extra == 'test' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/a5/2a/e71c1a7d90e70da67b88ccc609bd6ae54798d5847369b15d3a8052232f9d/scikit_image-0.26.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + name: scikit-image + version: 0.26.0 + sha256: 74aa5518ccea28121f57a95374581d3b979839adc25bb03f289b1bc9b99c58af + requires_dist: + - numpy>=1.24 + - scipy>=1.11.4 + - networkx>=3.0 + - pillow>=10.1 + - imageio>=2.33,!=2.35.0 + - tifffile>=2022.8.12 + - packaging>=21 + - lazy-loader>=0.4 + - meson-python>=0.16 ; extra == 'build' + - ninja>=1.11.1.1 ; extra == 'build' + - cython>=3.0.8,!=3.2.0b1 ; extra == 'build' + - pythran>=0.16 ; extra == 'build' + - numpy>=2.0 ; extra == 'build' + - spin==0.13 ; extra == 'build' + - build>=1.2.1 ; extra == 'build' + - pooch>=1.6.0 ; extra == 'data' + - pre-commit ; extra == 'developer' + - ipython ; extra == 'developer' + - docstub==0.3.0.post0 ; extra == 'developer' + - scikit-image[asv] ; extra == 'developer' + - asv ; sys_platform != 'emscripten' and extra == 'asv' + - sphinx>=8.0 ; extra == 'docs' + - sphinx-gallery[parallel]>=0.18 ; extra == 'docs' + - numpydoc>=1.7 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - matplotlib>=3.7 ; extra == 'docs' + - dask[array]>=2023.2.0 ; extra == 'docs' + - pandas>=2.0 ; extra == 'docs' + - seaborn>=0.11 ; extra == 'docs' + - pooch>=1.6 ; extra == 'docs' + - tifffile>=2022.8.12 ; extra == 'docs' + - myst-parser ; extra == 'docs' + - intersphinx-registry>=0.2411.14 ; extra == 'docs' + - ipywidgets ; extra == 'docs' + - ipykernel ; extra == 'docs' + - plotly>=5.20 ; extra == 'docs' + - kaleido==0.2.1 ; extra == 'docs' + - scikit-learn>=1.2 ; extra == 'docs' + - sphinx-design>=0.5 ; extra == 'docs' + - pydata-sphinx-theme>=0.16 ; extra == 'docs' + - pywavelets>=1.6 ; extra == 'docs' + - pytest-doctestplus>=1.6.0 ; extra == 'docs' + - simpleitk ; sys_platform != 'emscripten' and extra == 'optional' + - scikit-learn>=1.2 ; extra == 'optional' + - pyamg>=5.2 ; python_full_version < '3.14' and sys_platform != 'emscripten' and extra == 'optional' + - scikit-image[optional-free-threaded] ; extra == 'optional' + - astropy>=6.0 ; extra == 'optional-free-threaded' + - dask[array]>=2023.2.0 ; extra == 'optional-free-threaded' + - matplotlib>=3.7 ; extra == 'optional-free-threaded' + - pooch>=1.6.0 ; sys_platform != 'emscripten' and extra == 'optional-free-threaded' + - pywavelets>=1.6 ; extra == 'optional-free-threaded' + - numpydoc>=1.7 ; extra == 'test' + - pooch>=1.6.0 ; sys_platform != 'emscripten' and extra == 'test' + - pytest>=8.3 ; extra == 'test' + - pytest-cov>=2.11.0 ; extra == 'test' + - pytest-pretty ; extra == 'test' + - pytest-localserver ; extra == 'test' + - pytest-faulthandler ; extra == 'test' + - pytest-doctestplus>=1.6.0 ; extra == 'test' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/f4/a2/70401a107d6d7466d64b466927e6b96fcefa99d57494b972608e2f8be50f/scikit_image-0.26.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + name: scikit-image + version: 0.26.0 + sha256: 7df650e79031634ac90b11e64a9eedaf5a5e06fcd09bcd03a34be01745744466 + requires_dist: + - numpy>=1.24 + - scipy>=1.11.4 + - networkx>=3.0 + - pillow>=10.1 + - imageio>=2.33,!=2.35.0 + - tifffile>=2022.8.12 + - packaging>=21 + - lazy-loader>=0.4 + - meson-python>=0.16 ; extra == 'build' + - ninja>=1.11.1.1 ; extra == 'build' + - cython>=3.0.8,!=3.2.0b1 ; extra == 'build' + - pythran>=0.16 ; extra == 'build' + - numpy>=2.0 ; extra == 'build' + - spin==0.13 ; extra == 'build' + - build>=1.2.1 ; extra == 'build' + - pooch>=1.6.0 ; extra == 'data' + - pre-commit ; extra == 'developer' + - ipython ; extra == 'developer' + - docstub==0.3.0.post0 ; extra == 'developer' + - scikit-image[asv] ; extra == 'developer' + - asv ; sys_platform != 'emscripten' and extra == 'asv' + - sphinx>=8.0 ; extra == 'docs' + - sphinx-gallery[parallel]>=0.18 ; extra == 'docs' + - numpydoc>=1.7 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - matplotlib>=3.7 ; extra == 'docs' + - dask[array]>=2023.2.0 ; extra == 'docs' + - pandas>=2.0 ; extra == 'docs' + - seaborn>=0.11 ; extra == 'docs' + - pooch>=1.6 ; extra == 'docs' + - tifffile>=2022.8.12 ; extra == 'docs' + - myst-parser ; extra == 'docs' + - intersphinx-registry>=0.2411.14 ; extra == 'docs' + - ipywidgets ; extra == 'docs' + - ipykernel ; extra == 'docs' + - plotly>=5.20 ; extra == 'docs' + - kaleido==0.2.1 ; extra == 'docs' + - scikit-learn>=1.2 ; extra == 'docs' + - sphinx-design>=0.5 ; extra == 'docs' + - pydata-sphinx-theme>=0.16 ; extra == 'docs' + - pywavelets>=1.6 ; extra == 'docs' + - pytest-doctestplus>=1.6.0 ; extra == 'docs' + - simpleitk ; sys_platform != 'emscripten' and extra == 'optional' + - scikit-learn>=1.2 ; extra == 'optional' + - pyamg>=5.2 ; python_full_version < '3.14' and sys_platform != 'emscripten' and extra == 'optional' + - scikit-image[optional-free-threaded] ; extra == 'optional' + - astropy>=6.0 ; extra == 'optional-free-threaded' + - dask[array]>=2023.2.0 ; extra == 'optional-free-threaded' + - matplotlib>=3.7 ; extra == 'optional-free-threaded' + - pooch>=1.6.0 ; sys_platform != 'emscripten' and extra == 'optional-free-threaded' + - pywavelets>=1.6 ; extra == 'optional-free-threaded' + - numpydoc>=1.7 ; extra == 'test' + - pooch>=1.6.0 ; sys_platform != 'emscripten' and extra == 'test' + - pytest>=8.3 ; extra == 'test' + - pytest-cov>=2.11.0 ; extra == 'test' + - pytest-pretty ; extra == 'test' + - pytest-localserver ; extra == 'test' + - pytest-faulthandler ; extra == 'test' + - pytest-doctestplus>=1.6.0 ; extra == 'test' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/09/7d/af933f0f6e0767995b4e2d705a0665e454d1c19402aa7e895de3951ebb04/scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: scipy + version: 1.17.1 + sha256: 43af8d1f3bea642559019edfe64e9b11192a8978efbd1539d7bc2aaa23d92de4 + requires_dist: + - numpy>=1.26.4,<2.7 + - pytest>=8.0.0 ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-timeout ; extra == 'test' + - pytest-xdist ; extra == 'test' + - asv ; extra == 'test' + - mpmath ; extra == 'test' + - gmpy2 ; extra == 'test' + - threadpoolctl ; extra == 'test' + - scikit-umfpack ; extra == 'test' + - pooch ; extra == 'test' + - hypothesis>=6.30 ; extra == 'test' + - array-api-strict>=2.3.1 ; extra == 'test' + - cython ; extra == 'test' + - meson ; extra == 'test' + - ninja ; sys_platform != 'emscripten' and extra == 'test' + - sphinx>=5.0.0,<8.2.0 ; extra == 'doc' + - intersphinx-registry ; extra == 'doc' + - pydata-sphinx-theme>=0.15.2 ; extra == 'doc' + - sphinx-copybutton ; extra == 'doc' + - sphinx-design>=0.4.0 ; extra == 'doc' + - matplotlib>=3.5 ; extra == 'doc' + - numpydoc ; extra == 'doc' + - jupytext ; extra == 'doc' + - myst-nb>=1.2.0 ; extra == 'doc' + - pooch ; extra == 'doc' + - jupyterlite-sphinx>=0.19.1 ; extra == 'doc' + - jupyterlite-pyodide-kernel ; extra == 'doc' + - linkify-it-py ; extra == 'doc' + - tabulate ; extra == 'doc' + - click<8.3.0 ; extra == 'dev' + - spin ; extra == 'dev' + - mypy==1.10.0 ; extra == 'dev' + - typing-extensions ; extra == 'dev' + - types-psutil ; extra == 'dev' + - pycodestyle ; extra == 'dev' + - ruff>=0.12.0 ; extra == 'dev' + - cython-lint>=0.12.2 ; extra == 'dev' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/7f/c4/bc41eb19b0fd0db868f4132920879019318d80cc522ad8f2bca4611af808/scipy-1.18.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: scipy + version: 1.18.0 + sha256: 8ca01e8ae69f1b18e9a58d91afead31be3cef0dd905a10249dac559ee15460a0 + requires_dist: + - numpy>=2.0.0,<2.8 + - pytest>=8.0.0 ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-timeout ; extra == 'test' + - pytest-xdist ; extra == 'test' + - asv ; extra == 'test' + - mpmath ; extra == 'test' + - gmpy2 ; extra == 'test' + - threadpoolctl ; extra == 'test' + - scikit-umfpack ; extra == 'test' + - pooch ; extra == 'test' + - hypothesis>=6.30 ; extra == 'test' + - array-api-strict>=2.3.1 ; extra == 'test' + - cython ; extra == 'test' + - meson ; extra == 'test' + - ninja ; sys_platform != 'emscripten' and extra == 'test' + - scipy-doctest>=2.0.0 ; extra == 'test' + - sphinx>=5.0.0,<8.2.0 ; extra == 'doc' + - intersphinx-registry ; extra == 'doc' + - pydata-sphinx-theme>=0.15.2 ; extra == 'doc' + - sphinx-copybutton ; extra == 'doc' + - sphinx-design>=0.4.0 ; extra == 'doc' + - matplotlib>=3.5 ; extra == 'doc' + - numpydoc ; extra == 'doc' + - jupytext ; extra == 'doc' + - myst-nb>=1.2.0 ; extra == 'doc' + - pooch ; extra == 'doc' + - jupyterlite-sphinx>=0.19.1 ; extra == 'doc' + - jupyterlite-pyodide-kernel ; extra == 'doc' + - linkify-it-py ; extra == 'doc' + - tabulate ; extra == 'doc' + - click<8.3.0 ; extra == 'dev' + - spin ; extra == 'dev' + - mypy==1.19.1 ; extra == 'dev' + - pyrefly==0.63.0 ; extra == 'dev' + - typing-extensions ; extra == 'dev' + - types-psutil ; extra == 'dev' + - pycodestyle ; extra == 'dev' + - ruff>=0.12.0 ; extra == 'dev' + - cython-lint>=0.12.2 ; extra == 'dev' + requires_python: '>=3.12' +- pypi: https://files.pythonhosted.org/packages/dd/aa/1b939f6c67ed68635bb538e6752d3dacc02f66535182e939a89581a44e9c/scipy-1.18.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: scipy + version: 1.18.0 + sha256: 1f55797419e16e7f30cf88ffb3113ce0467f00cfe3f70d5c281730b21769bfc2 + requires_dist: + - numpy>=2.0.0,<2.8 + - pytest>=8.0.0 ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-timeout ; extra == 'test' + - pytest-xdist ; extra == 'test' + - asv ; extra == 'test' + - mpmath ; extra == 'test' + - gmpy2 ; extra == 'test' + - threadpoolctl ; extra == 'test' + - scikit-umfpack ; extra == 'test' + - pooch ; extra == 'test' + - hypothesis>=6.30 ; extra == 'test' + - array-api-strict>=2.3.1 ; extra == 'test' + - cython ; extra == 'test' + - meson ; extra == 'test' + - ninja ; sys_platform != 'emscripten' and extra == 'test' + - scipy-doctest>=2.0.0 ; extra == 'test' + - sphinx>=5.0.0,<8.2.0 ; extra == 'doc' + - intersphinx-registry ; extra == 'doc' + - pydata-sphinx-theme>=0.15.2 ; extra == 'doc' + - sphinx-copybutton ; extra == 'doc' + - sphinx-design>=0.4.0 ; extra == 'doc' + - matplotlib>=3.5 ; extra == 'doc' + - numpydoc ; extra == 'doc' + - jupytext ; extra == 'doc' + - myst-nb>=1.2.0 ; extra == 'doc' + - pooch ; extra == 'doc' + - jupyterlite-sphinx>=0.19.1 ; extra == 'doc' + - jupyterlite-pyodide-kernel ; extra == 'doc' + - linkify-it-py ; extra == 'doc' + - tabulate ; extra == 'doc' + - click<8.3.0 ; extra == 'dev' + - spin ; extra == 'dev' + - mypy==1.19.1 ; extra == 'dev' + - pyrefly==0.63.0 ; extra == 'dev' + - typing-extensions ; extra == 'dev' + - types-psutil ; extra == 'dev' + - pycodestyle ; extra == 'dev' + - ruff>=0.12.0 ; extra == 'dev' + - cython-lint>=0.12.2 ; extra == 'dev' + requires_python: '>=3.12' +- pypi: https://files.pythonhosted.org/packages/f6/af/e8fe5fb136f51e2b01678b92cb4106d10d8cd68ec147ead2e7cb0ac75398/scipy-1.18.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: scipy + version: 1.18.0 + sha256: a46f9273dbd0eb1cefba61c9b8648b4dfe3cbc14a080176f9a73e44b8336dc7f + requires_dist: + - numpy>=2.0.0,<2.8 + - pytest>=8.0.0 ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-timeout ; extra == 'test' + - pytest-xdist ; extra == 'test' + - asv ; extra == 'test' + - mpmath ; extra == 'test' + - gmpy2 ; extra == 'test' + - threadpoolctl ; extra == 'test' + - scikit-umfpack ; extra == 'test' + - pooch ; extra == 'test' + - hypothesis>=6.30 ; extra == 'test' + - array-api-strict>=2.3.1 ; extra == 'test' + - cython ; extra == 'test' + - meson ; extra == 'test' + - ninja ; sys_platform != 'emscripten' and extra == 'test' + - scipy-doctest>=2.0.0 ; extra == 'test' + - sphinx>=5.0.0,<8.2.0 ; extra == 'doc' + - intersphinx-registry ; extra == 'doc' + - pydata-sphinx-theme>=0.15.2 ; extra == 'doc' + - sphinx-copybutton ; extra == 'doc' + - sphinx-design>=0.4.0 ; extra == 'doc' + - matplotlib>=3.5 ; extra == 'doc' + - numpydoc ; extra == 'doc' + - jupytext ; extra == 'doc' + - myst-nb>=1.2.0 ; extra == 'doc' + - pooch ; extra == 'doc' + - jupyterlite-sphinx>=0.19.1 ; extra == 'doc' + - jupyterlite-pyodide-kernel ; extra == 'doc' + - linkify-it-py ; extra == 'doc' + - tabulate ; extra == 'doc' + - click<8.3.0 ; extra == 'dev' + - spin ; extra == 'dev' + - mypy==1.19.1 ; extra == 'dev' + - pyrefly==0.63.0 ; extra == 'dev' + - typing-extensions ; extra == 'dev' + - types-psutil ; extra == 'dev' + - pycodestyle ; extra == 'dev' + - ruff>=0.12.0 ; extra == 'dev' + - cython-lint>=0.12.2 ; extra == 'dev' + requires_python: '>=3.12' +- pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl + name: semver + version: 3.0.4 + sha256: 9c824d87ba7f7ab4a1890799cec8596f15c1241cb473404ea1cb0c55e4b04746 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/5d/40/e1e72872c6354b306daef1703549e8e83b4d43cfea356311bf722a043752/setuptools-83.0.0-py3-none-any.whl + name: setuptools + version: 83.0.0 + sha256: 29b23c360f22f414dc7336bb39178cc7bcbf6021ed2733cde173f09dba19abb3 + requires_dist: + - pytest>=6,!=8.1.* ; extra == 'test' + - virtualenv>=13.0.0 ; extra == 'test' + - wheel>=0.44.0 ; extra == 'test' + - pip>=19.1 ; extra == 'test' + - packaging>=24.2 ; extra == 'test' + - jaraco-envs>=2.2 ; extra == 'test' + - pytest-xdist>=3 ; extra == 'test' + - jaraco-path>=3.7.2 ; extra == 'test' + - build[virtualenv]>=1.0.3 ; extra == 'test' + - filelock>=3.4.0 ; extra == 'test' + - ini2toml[lite]>=0.14 ; extra == 'test' + - tomli-w>=1.0.0 ; extra == 'test' + - pytest-timeout ; extra == 'test' + - pytest-perf ; sys_platform != 'cygwin' and extra == 'test' + - jaraco-develop>=7.21 ; python_full_version >= '3.9' and sys_platform != 'cygwin' and extra == 'test' + - pytest-home>=0.5 ; extra == 'test' + - pytest-subprocess ; extra == 'test' + - pyproject-hooks!=1.1 ; extra == 'test' + - jaraco-test>=5.5 ; extra == 'test' + - sphinx>=3.5 ; extra == 'doc' + - jaraco-packaging>=9.3 ; extra == 'doc' + - rst-linker>=1.9 ; extra == 'doc' + - furo ; extra == 'doc' + - sphinx-lint ; extra == 'doc' + - jaraco-tidelift>=1.4 ; extra == 'doc' + - pygments-github-lexers==0.0.5 ; extra == 'doc' + - sphinx-favicon ; extra == 'doc' + - sphinx-inline-tabs ; extra == 'doc' + - sphinx-reredirects ; extra == 'doc' + - sphinxcontrib-towncrier ; extra == 'doc' + - sphinx-notfound-page>=1,<2 ; extra == 'doc' + - pyproject-hooks!=1.1 ; extra == 'doc' + - towncrier<24.7 ; extra == 'doc' + - packaging>=24.2 ; extra == 'core' + - more-itertools>=8.8 ; extra == 'core' + - jaraco-text>=3.7 ; extra == 'core' + - importlib-metadata>=6 ; python_full_version < '3.10' and extra == 'core' + - tomli>=2.0.1 ; python_full_version < '3.11' and extra == 'core' + - wheel>=0.43.0 ; extra == 'core' + - jaraco-functools>=4 ; extra == 'core' + - more-itertools ; extra == 'core' + - pytest-checkdocs>=2.14 ; extra == 'check' + - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' + - ruff>=0.13.0 ; sys_platform != 'cygwin' and extra == 'check' + - pytest-cov ; extra == 'cover' + - pytest-enabler>=3.4 ; extra == 'enabler' + - pytest-mypy>=1.0.1 ; platform_python_implementation != 'PyPy' and extra == 'type' + - mypy==1.18.* ; extra == 'type' + - importlib-metadata>=7.0.2 ; python_full_version < '3.10' and extra == 'type' + - jaraco-develop>=7.21 ; sys_platform != 'cygwin' and extra == 'type' + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-83.0.0-pyh332efcf_0.conda + sha256: 48a9f96016505debadfc67f06de7ac548decbc38d327409b24b0432ef6f16335 + md5: 6bf6acbab2499830180ec88c3aff2fa4 + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/setuptools?source=compressed-mapping + size: 642081 + timestamp: 1783619174976 +- pypi: https://files.pythonhosted.org/packages/51/6b/3feec8016ab2263946c4480510d2d1a7924a5400c455974a7a0344bb4304/setuptools_dso-2.12.3-py2.py3-none-any.whl + name: setuptools-dso + version: 2.12.3 + sha256: 5040be8628bd6cb82653391cf59f22126b261941cdbc9c36becca87e09c011c3 + requires_dist: + - setuptools + requires_python: '>=2.7' +- pypi: https://files.pythonhosted.org/packages/0c/b6/156a8de1e1b47694f0e7de6675866936608d45dc68388fd017d36f8693be/simplejson-4.1.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: simplejson + version: 4.1.1 + sha256: 45ec18e337fec538b7e902d489505c450b2454653d1290f3f50385e6fd8aa607 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*' +- pypi: https://files.pythonhosted.org/packages/38/2e/21a3ede87f0bf82d6c7bcb90480d50a6490eb974c6ab20881188e440957c/simplejson-4.1.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: simplejson + version: 4.1.1 + sha256: 8e5cdd6a5d52299f345c15ab5678cc4249e24f383f361d986afbc3c7072a6b6b + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*' +- pypi: https://files.pythonhosted.org/packages/78/91/3635cdb13318cb0a328abaa69e2b91251caad39d6779aa308098f341f6cb/simplejson-4.1.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: simplejson + version: 4.1.1 + sha256: 3851658d642c1184d2023f0e6c9ce44a21eb1629e74e7c84ef956b128841fe12 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*' +- pypi: https://files.pythonhosted.org/packages/80/7e/c9e6c0c4ad8415e64dad0c47f619b556b02680a41631b4dbc281d55dc54d/simplejson-4.1.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: simplejson + version: 4.1.1 + sha256: 7ce252b28fddbdd83db5bd7d93dad2a8a591d7ada098afec9c1b23d6b722a7a4 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*' +- pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + name: six + version: 1.17.0 + sha256: 4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*' +- pypi: https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl + name: snowballstemmer + version: 3.1.1 + sha256: 7e207fa178741da09cdee59d3ecec3827ad5f92b1fc5c9ff3755b639f71f5752 + requires_python: '>=3.3' +- pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + name: sphinx + version: 9.0.4 + sha256: 5bebc595a5e943ea248b99c13814c1c5e10b3ece718976824ffa7959ff95fffb + requires_dist: + - sphinxcontrib-applehelp>=1.0.7 + - sphinxcontrib-devhelp>=1.0.6 + - sphinxcontrib-htmlhelp>=2.0.6 + - sphinxcontrib-jsmath>=1.0.1 + - sphinxcontrib-qthelp>=1.0.6 + - sphinxcontrib-serializinghtml>=1.1.9 + - jinja2>=3.1 + - pygments>=2.17 + - docutils>=0.20,<0.23 + - snowballstemmer>=2.2 + - babel>=2.13 + - alabaster>=0.7.14 + - imagesize>=1.3 + - requests>=2.30.0 + - roman-numerals>=1.0.0 + - packaging>=23.0 + - colorama>=0.4.6 ; sys_platform == 'win32' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl + name: sphinx + version: 9.1.0 + sha256: c84fdd4e782504495fe4f2c0b3413d6c2bf388589bb352d439b2a3bb99991978 + requires_dist: + - sphinxcontrib-applehelp>=1.0.7 + - sphinxcontrib-devhelp>=1.0.6 + - sphinxcontrib-htmlhelp>=2.0.6 + - sphinxcontrib-jsmath>=1.0.1 + - sphinxcontrib-qthelp>=1.0.6 + - sphinxcontrib-serializinghtml>=1.1.9 + - jinja2>=3.1 + - pygments>=2.17 + - docutils>=0.21,<0.23 + - snowballstemmer>=2.2 + - babel>=2.13 + - alabaster>=0.7.14 + - imagesize>=1.3 + - requests>=2.30.0 + - roman-numerals>=1.0.0 + - packaging>=23.0 + - colorama>=0.4.6 ; sys_platform == 'win32' + requires_python: '>=3.12' +- pypi: https://files.pythonhosted.org/packages/87/c7/b5c8015d823bfda1a346adb2c634a2101d50bb75d421eb6dcb31acd25ebc/sphinx_rtd_theme-3.1.0-py2.py3-none-any.whl + name: sphinx-rtd-theme + version: 3.1.0 + sha256: 1785824ae8e6632060490f67cf3a72d404a85d2d9fc26bce3619944de5682b89 + requires_dist: + - sphinx>=6,<10 + - docutils>0.18,<0.23 + - sphinxcontrib-jquery>=4,<5 + - transifex-client ; extra == 'dev' + - bump2version ; extra == 'dev' + - wheel ; extra == 'dev' + - twine ; extra == 'dev' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + name: sphinxcontrib-applehelp + version: 2.0.0 + sha256: 4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5 + requires_dist: + - ruff==0.5.5 ; extra == 'lint' + - mypy ; extra == 'lint' + - types-docutils ; extra == 'lint' + - sphinx>=5 ; extra == 'standalone' + - pytest ; extra == 'test' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + name: sphinxcontrib-devhelp + version: 2.0.0 + sha256: aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2 + requires_dist: + - ruff==0.5.5 ; extra == 'lint' + - mypy ; extra == 'lint' + - types-docutils ; extra == 'lint' + - sphinx>=5 ; extra == 'standalone' + - pytest ; extra == 'test' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + name: sphinxcontrib-htmlhelp + version: 2.1.0 + sha256: 166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8 + requires_dist: + - ruff==0.5.5 ; extra == 'lint' + - mypy ; extra == 'lint' + - types-docutils ; extra == 'lint' + - sphinx>=5 ; extra == 'standalone' + - pytest ; extra == 'test' + - html5lib ; extra == 'test' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/76/85/749bd22d1a68db7291c89e2ebca53f4306c3f205853cf31e9de279034c3c/sphinxcontrib_jquery-4.1-py2.py3-none-any.whl + name: sphinxcontrib-jquery + version: '4.1' + sha256: f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae + requires_dist: + - sphinx>=1.8 + requires_python: '>=2.7' +- pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + name: sphinxcontrib-jsmath + version: 1.0.1 + sha256: 2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 + requires_dist: + - pytest ; extra == 'test' + - flake8 ; extra == 'test' + - mypy ; extra == 'test' + requires_python: '>=3.5' +- pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + name: sphinxcontrib-qthelp + version: 2.0.0 + sha256: b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb + requires_dist: + - ruff==0.5.5 ; extra == 'lint' + - mypy ; extra == 'lint' + - types-docutils ; extra == 'lint' + - sphinx>=5 ; extra == 'standalone' + - pytest ; extra == 'test' + - defusedxml>=0.7.1 ; extra == 'test' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl + name: sphinxcontrib-serializinghtml + version: 2.0.0 + sha256: 6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331 + requires_dist: + - ruff==0.5.5 ; extra == 'lint' + - mypy ; extra == 'lint' + - types-docutils ; extra == 'lint' + - sphinx>=5 ; extra == 'standalone' + - pytest ; extra == 'test' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl + name: stack-data + version: 0.6.3 + sha256: d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695 + requires_dist: + - executing>=1.2.0 + - asttokens>=2.1.0 + - pure-eval + - pytest ; extra == 'tests' + - typeguard ; extra == 'tests' + - pygments ; extra == 'tests' + - littleutils ; extra == 'tests' + - cython ; extra == 'tests' +- pypi: https://files.pythonhosted.org/packages/1d/f0/1ff90a1d1dd02de23feafdf9dffaecef3958348be5c192df56670ccb4f86/stamina-26.1.0-py3-none-any.whl + name: stamina + version: 26.1.0 + sha256: 62e06829bec87c06d4cafde520b32a6097d1017c378a9eb63253c5bf5ebbbb88 + requires_dist: + - tenacity + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl + name: tenacity + version: 9.1.4 + sha256: 6095a360c919085f28c6527de529e76a06ad89b23659fa881ae0649b867a9d55 + requires_dist: + - reno ; extra == 'doc' + - sphinx ; extra == 'doc' + - pytest ; extra == 'test' + - tornado>=4.5 ; extra == 'test' + - typeguard ; extra == 'test' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/1a/e4/e804505f87627cd8cdae9c010c47c4485fd8c1ce31a7dd0ab7fcc4707377/tifffile-2026.3.3-py3-none-any.whl + name: tifffile + version: 2026.3.3 + sha256: e8be15c94273113d31ecb7aa3a39822189dd11c4967e3cc88c178f1ad2fd1170 + requires_dist: + - numpy + - imagecodecs>=2025.11.11 ; extra == 'codecs' + - defusedxml ; extra == 'xml' + - lxml ; extra == 'xml' + - zarr>=3.1.5 ; extra == 'zarr' + - fsspec ; extra == 'zarr' + - kerchunk ; extra == 'zarr' + - matplotlib ; extra == 'plot' + - imagecodecs>=2025.11.11 ; extra == 'all' + - matplotlib ; extra == 'all' + - defusedxml ; extra == 'all' + - lxml ; extra == 'all' + - zarr>=3.1.5 ; extra == 'all' + - fsspec ; extra == 'all' + - kerchunk ; extra == 'all' + - cmapfile ; extra == 'test' + - czifile ; extra == 'test' + - dask ; extra == 'test' + - defusedxml ; extra == 'test' + - fsspec ; extra == 'test' + - imagecodecs ; extra == 'test' + - kerchunk ; extra == 'test' + - lfdfiles ; extra == 'test' + - lxml ; extra == 'test' + - ndtiff ; extra == 'test' + - oiffile ; extra == 'test' + - psdtags ; extra == 'test' + - pytest ; extra == 'test' + - requests ; extra == 'test' + - roifile ; extra == 'test' + - xarray ; extra == 'test' + - zarr>=3.1.5 ; extra == 'test' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/81/59/208f71d70ddc6184f79b8c6d87d46eb7d7b12c19186a817dec9c9c3f3693/tifffile-2026.6.1-py3-none-any.whl + name: tifffile + version: 2026.6.1 + sha256: 0d7382d2769b855b81ce358528e2b40c16d48aa39031746efa81215205332a8d + requires_dist: + - numpy>=2.1 + - imagecodecs>=2026.5.10 ; extra == 'codecs' + - lxml ; extra == 'xml' + - zarr>=3.2.0 ; extra == 'zarr' + - fsspec ; extra == 'zarr' + - kerchunk ; extra == 'zarr' + - matplotlib ; extra == 'plot' + - imagecodecs>=2026.5.10 ; extra == 'all' + - matplotlib ; extra == 'all' + - lxml ; extra == 'all' + - zarr>=3.2.0 ; extra == 'all' + - xarray ; extra == 'all' + - fsspec ; extra == 'all' + - kerchunk ; extra == 'all' + - cmapfile ; extra == 'test' + - czifile ; extra == 'test' + - dask ; extra == 'test' + - fsspec ; extra == 'test' + - imagecodecs ; extra == 'test' + - kerchunk ; extra == 'test' + - lfdfiles ; extra == 'test' + - lxml ; extra == 'test' + - ndtiff ; extra == 'test' + - oiffile ; extra == 'test' + - psdtags ; extra == 'test' + - pytest ; extra == 'test' + - requests ; extra == 'test' + - roifile ; extra == 'test' + - xarray ; extra == 'test' + - zarr>=3.2.0 ; extra == 'test' + requires_python: '>=3.12' +- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + sha256: cafeec44494f842ffeca27e9c8b0c27ed714f93ac77ddadc6aaf726b5554ebac + md5: cffd3bdd58090148f4cfcd831f4b26ab + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + constrains: + - xorg-libx11 >=1.8.12,<2.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3301196 + timestamp: 1769460227866 +- pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl + name: toolz + version: 1.1.0 + sha256: 15ccc861ac51c53696de0a5d6d4607f99c210739caf987b5d2054f3efed429d8 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/37/d8/ef374952fd5da67d4463122c2b8e5a96536ec10b4b339254c6dcde81d01c/tornado-6.5.7-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: tornado + version: 6.5.7 + sha256: 8d759e71906ee783f8867b93bf26a265743da4c1e2f4a018464c1ba019862972 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/22/2a/5e5e750890ada51017d18d0d4c30da696e5b5bd3180947729927628fc3cb/tqdm-4.68.4-py3-none-any.whl + name: tqdm + version: 4.68.4 + sha256: 5168118b2368f48c561afda8020fd79195b1bdb0bdf8086b88442c267a315dc2 + requires_dist: + - colorama ; sys_platform == 'win32' + - requests ; extra == 'discord' + - envwrap ; extra == 'discord' + - slack-sdk ; extra == 'slack' + - envwrap ; extra == 'slack' + - requests ; extra == 'telegram' + - envwrap ; extra == 'telegram' + - ipywidgets>=6 ; extra == 'notebook' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/96/8d/1080ee4c231f361b6ce4470d556c8c435b67c7e0753aaa641497ee92f88b/traitlets-5.15.1-py3-none-any.whl + name: traitlets + version: 5.15.1 + sha256: 770a53705f84b81ac107e83a1b3328ff2dae16094d8fc3cfc004e4b22dfd8e92 + requires_dist: + - myst-parser ; extra == 'docs' + - pydata-sphinx-theme ; extra == 'docs' + - sphinx ; extra == 'docs' + - argcomplete>=3.0.3 ; extra == 'test' + - mypy>=1.17.0,<1.19 ; extra == 'test' + - pre-commit ; extra == 'test' + - pytest-mock ; extra == 'test' + - pytest-mypy-testing ; extra == 'test' + - pytest>=7.0,<8.2 ; extra == 'test' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl + name: typing-extensions + version: 4.16.0 + sha256: 481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + name: typing-inspection + version: 0.4.2 + sha256: 4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7 + requires_dist: + - typing-extensions>=4.12.0 + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + sha256: 1d30098909076af33a35017eed6f2953af1c769e273a0626a04722ac4acaba3c + md5: ad659d0a2b3e47e38d829aa8cad2d610 + license: LicenseRef-Public-Domain + purls: [] + size: 119135 + timestamp: 1767016325805 +- pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl + name: urllib3 + version: 2.7.0 + sha256: 9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897 + requires_dist: + - brotli>=1.2.0 ; platform_python_implementation == 'CPython' and extra == 'brotli' + - brotlicffi>=1.2.0.0 ; platform_python_implementation != 'CPython' and extra == 'brotli' + - h2>=4,<5 ; extra == 'h2' + - pysocks>=1.5.6,!=1.5.7,<2.0 ; extra == 'socks' + - backports-zstd>=1.0.0 ; python_full_version < '3.14' and extra == 'zstd' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/72/89/0265b2b79424ed05b8d1e9c8fca71e1b150478e5b0c19aa50b0ae397326e/velocity_profile-1.0.0-py3-none-any.whl + name: velocity-profile + version: 1.0.0 + sha256: b9082aedb2863748e1e6e56e7a794cd5742addd571f6ba2e13f4f5b8a09422d9 + requires_dist: + - numpy + - copier ; extra == 'dev' + - mypy ; extra == 'dev' + - pipdeptree ; extra == 'dev' + - pre-commit ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - ruff ; extra == 'dev' + - tox-direct ; extra == 'dev' + - types-mock ; extra == 'dev' + - scanspec ; extra == 'dev' + - pydantic<2.0 ; extra == 'dev' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/c1/7c/4e7225d46d634a0d8d534dd8a6ce0c319d09b4d0cf0337eb314ca4789d8c/virtualenv-21.6.1-py3-none-any.whl + name: virtualenv + version: 21.6.1 + sha256: afe991df855715a2b2f60edfcc0107ef95a79fdfd8cb4cdaa71603d1c12e463b + requires_dist: + - distlib>=0.3.7,<1 + - filelock>=3.24.2,<4 ; python_full_version >= '3.10' + - filelock>=3.16.1,<=3.19.1 ; python_full_version < '3.10' + - platformdirs>=3.9.1,<5 + - python-discovery>=1.4.2 + - typing-extensions>=4.13.2 ; python_full_version < '3.11' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/96/42/3e5985a0a7e57de470b320c6d6a1a67c844f6737a587f3d44dd13d1819e7/wcwidth-0.8.2-py3-none-any.whl + name: wcwidth + version: 0.8.2 + sha256: d63947694a0539a1d51e01eda7caf800c291020e6cdd7e28ad7b14dd33ad4f85 + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda + sha256: 9e156ffaefb8463437144326ada4b85d1de17961b9997ac5f1cbbaf747bd8bed + md5: d0e3b2f0030cf4fca58bde71d246e94c + depends: + - packaging >=24.0 + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/wheel?source=hash-mapping + size: 33491 + timestamp: 1776878563806 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + sha256: 68f0206ca6e98fea941e5717cec780ed2873ffabc0e1ed34428c061e2c6268c7 + md5: 4a13eeac0b5c8e5b8ab496e6c4ddd829 + depends: + - __glibc >=2.17,<3.0.a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 601375 + timestamp: 1764777111296 diff --git a/pixi.toml b/pixi.toml index 260eadce..48fd7586 100644 --- a/pixi.toml +++ b/pixi.toml @@ -13,3 +13,26 @@ pip = "*" [pypi-dependencies] bluesky-queueserver = { path = ".", editable = true, extras = ["dev"] } + +#[feature.default.dependencies] +#python = "3.14" + +[feature.py311.dependencies] +python = "3.11.*" + +[feature.py312.dependencies] +python = "3.12.*" + +[feature.py313.dependencies] +python = "3.13.*" + +[feature.py314.dependencies] +python = "3.14.*" + + +[environments] +py311 = { features = ["py311"] } +py312 = { features = ["py312"] } +py313 = { features = ["py313"] } +py314 = { features = ["py314"] } + diff --git a/pyproject.toml b/pyproject.toml index f53d9299..091b4a5f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,6 +2,7 @@ requires = ["setuptools>=64", "setuptools_scm[toml]>=8"] build-backend = "setuptools.build_meta" +[project] name = "bluesky-queueserver" classifiers = [ "Development Status :: 3 - Alpha", @@ -30,8 +31,8 @@ dependencies = [ "requests", ] dynamic = ["version"] -license.file = "LICENSE" -readme = "README.md" +license = { file = "LICENSE" } +readme = "README.rst" requires-python = ">=3.10" [project.optional-dependencies] @@ -66,7 +67,7 @@ dev = [ [project.scripts] qserver = "bluesky_queueserver.manager.qserver_cli:qserver" start-re-manager = "bluesky_queueserver.manager.start_manager:start_manager" -qserver-list-plans-devices = "bluesky_queueserver.manager.gen_lists:gen_list_of_plans_and_devices_cli", +qserver-list-plans-devices = "bluesky_queueserver.manager.gen_lists:gen_list_of_plans_and_devices_cli" qserver-zmq-keys = "bluesky_queueserver.manager.qserver_cli:qserver_zmq_keys" qserver-clear-lock = "bluesky_queueserver.manager.qserver_cli:qserver_clear_lock" qserver-console = "bluesky_queueserver.manager.qserver_cli:qserver_console" @@ -89,7 +90,10 @@ ignore_missing_imports = true # Ignore missing stubs in imported modules # Run pytest with all our checkers, and don't spam us with massive tracebacks on error # Don't collect the interactive directory which is intended for manual execution addopts = """ - --tb=native -vv --doctest-modules --doctest-glob="*.rst" --ignore src/bluesky/tests/interactive + --tb=native -vv + --doctest-modules + --doctest-glob="*.rst" + --ignore src/bluesky_queueserver/profile_collection_sim """ # https://iscinumpy.gitlab.io/post/bound-version-constraints/#watch-for-warnings filterwarnings = [ diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 73376221..00000000 --- a/setup.cfg +++ /dev/null @@ -1,6 +0,0 @@ -[versioneer] -VCS = git -style = pep440-post -versionfile_source = bluesky_queueserver/_version.py -versionfile_build = bluesky_queueserver/_version.py -tag_prefix = v diff --git a/setup.py b/setup.py deleted file mode 100644 index f51d469e..00000000 --- a/setup.py +++ /dev/null @@ -1,75 +0,0 @@ -import sys -from os import path - -from setuptools import find_packages, setup - -import versioneer - -# NOTE: This file must remain Python 2 compatible for the foreseeable future, -# to ensure that we error out properly for people with outdated setuptools -# and/or pip. -min_version = (3, 7) -if sys.version_info < min_version: - error = """ -bluesky-queueserver does not support Python {0}.{1}. -Python {2}.{3} and above is required. Check your Python version like so: - -python3 --version - -This may be due to an out-of-date pip. Make sure you have pip >= 9.0.1. -Upgrade pip like so: - -pip install --upgrade pip -""".format(*(sys.version_info[:2] + min_version)) - sys.exit(error) - -here = path.abspath(path.dirname(__file__)) - -with open(path.join(here, "README.rst"), encoding="utf-8") as readme_file: - readme = readme_file.read() - -with open(path.join(here, "requirements.txt")) as requirements_file: - # Parse requirements.txt, ignoring any commented-out lines. - requirements = [line for line in requirements_file.read().splitlines() if not line.startswith("#")] - -setup( - name="bluesky-queueserver", - version=versioneer.get_version(), - cmdclass=versioneer.get_cmdclass(), - description="Server for queueing plans", - long_description=readme, - author="Brookhaven National Laboratory", - author_email="", - url="https://github.com/bluesky/bluesky-queueserver", - python_requires=">={}".format(".".join(str(n) for n in min_version)), - packages=find_packages(exclude=["docs", "tests"]), - entry_points={ - "console_scripts": [ - "qserver = bluesky_queueserver.manager.qserver_cli:qserver", - "start-re-manager = bluesky_queueserver.manager.start_manager:start_manager", - "qserver-list-plans-devices = bluesky_queueserver.manager." - "gen_lists:gen_list_of_plans_and_devices_cli", - "qserver-zmq-keys = bluesky_queueserver.manager.qserver_cli:qserver_zmq_keys", - "qserver-clear-lock = bluesky_queueserver.manager.qserver_cli:qserver_clear_lock", - "qserver-console = bluesky_queueserver.manager.qserver_cli:qserver_console", - "qserver-qtconsole = bluesky_queueserver.manager.qserver_cli:qserver_qtconsole", - "qserver-console-monitor = bluesky_queueserver.manager.output_streaming:qserver_console_monitor_cli", - ], - }, - include_package_data=True, - package_data={ - "bluesky_queueserver": [ - "profile_collection_sim/*" - # When adding files here, remember to update MANIFEST.in as well, - # or else they will not be included in the distribution on PyPI! - # 'path/to/data_file', - ] - }, - install_requires=requirements, - license="BSD (3-clause)", - classifiers=[ - "Development Status :: 2 - Pre-Alpha", - "Natural Language :: English", - "Programming Language :: Python :: 3", - ], -) diff --git a/src/bluesky_queueserver/__init__.py b/src/bluesky_queueserver/__init__.py index 454c6736..2d17d95b 100644 --- a/src/bluesky_queueserver/__init__.py +++ b/src/bluesky_queueserver/__init__.py @@ -1,7 +1,4 @@ -from ._version import get_versions - -__version__ = get_versions()["version"] -del get_versions +from ._version import __version__ from .manager.annotation_decorator import parameter_annotation_decorator # noqa: E402, F401 from .manager.comms import ( # noqa: E402, F401 diff --git a/src/bluesky_queueserver/_version.py b/src/bluesky_queueserver/_version.py index e5135b1d..615c197c 100644 --- a/src/bluesky_queueserver/_version.py +++ b/src/bluesky_queueserver/_version.py @@ -1,551 +1,24 @@ -# This file helps to compute a version number in source trees obtained from -# git-archive tarball (such as those provided by githubs download-from-tag -# feature). Distribution tarballs (built by setup.py sdist) and build -# directories (produced by setup.py build) will contain a much shorter file -# that just contains the computed version number. - -# This file is released into the public domain. Generated by -# versioneer-0.18 (https://github.com/warner/python-versioneer) - -"""Git implementation of _version.py.""" - -import errno -import os -import re -import subprocess -import sys - - -def get_keywords(): - """Get the keywords needed to look up the version information.""" - # these strings will be replaced by git during git-archive. - # setup.py/versioneer.py will grep for the variable names, so they must - # each be defined on a line of their own. _version.py will just call - # get_keywords(). - git_refnames = "$Format:%d$" - git_full = "$Format:%H$" - git_date = "$Format:%ci$" - keywords = {"refnames": git_refnames, "full": git_full, "date": git_date} - return keywords - - -class VersioneerConfig: - """Container for Versioneer configuration parameters.""" - - -def get_config(): - """Create, populate and return the VersioneerConfig() object.""" - # these strings are filled in when 'setup.py versioneer' creates - # _version.py - cfg = VersioneerConfig() - cfg.VCS = "git" - cfg.style = "pep440-post" - cfg.tag_prefix = "v" - cfg.parentdir_prefix = "None" - cfg.versionfile_source = "bluesky_queueserver/_version.py" - cfg.verbose = False - return cfg - - -class NotThisMethod(Exception): - """Exception raised if a method is not valid for the current scenario.""" - - -LONG_VERSION_PY = {} -HANDLERS = {} - - -def register_vcs_handler(vcs, method): # decorator - """Decorator to mark a method as the handler for a particular VCS.""" - - def decorate(f): - """Store f in HANDLERS[vcs][method].""" - if vcs not in HANDLERS: - HANDLERS[vcs] = {} - HANDLERS[vcs][method] = f - return f - - return decorate - - -def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, env=None): - """Call the given command(s).""" - assert isinstance(commands, list) - p = None - for c in commands: - try: - dispcmd = str([c] + args) - # remember shell=False, so use git.cmd on windows, not just git - p = subprocess.Popen( - [c] + args, - cwd=cwd, - env=env, - stdout=subprocess.PIPE, - stderr=(subprocess.PIPE if hide_stderr else None), - ) - break - except EnvironmentError: - e = sys.exc_info()[1] - if e.errno == errno.ENOENT: - continue - if verbose: - print("unable to run %s" % dispcmd) - print(e) - return None, None - else: - if verbose: - print("unable to find command, tried %s" % (commands,)) - return None, None - stdout = p.communicate()[0].strip() - if sys.version_info[0] >= 3: - stdout = stdout.decode() - if p.returncode != 0: - if verbose: - print("unable to run %s (error)" % dispcmd) - print("stdout was %s" % stdout) - return None, p.returncode - return stdout, p.returncode - - -def versions_from_parentdir(parentdir_prefix, root, verbose): - """Try to determine the version from the parent directory name. - - Source tarballs conventionally unpack into a directory that includes both - the project name and a version string. We will also support searching up - two directory levels for an appropriately named parent directory - """ - rootdirs = [] - - for i in range(3): - dirname = os.path.basename(root) - if dirname.startswith(parentdir_prefix): - return { - "version": dirname[len(parentdir_prefix) :], - "full-revisionid": None, - "dirty": False, - "error": None, - "date": None, - } - else: - rootdirs.append(root) - root = os.path.dirname(root) # up a level - - if verbose: - print("Tried directories %s but none started with prefix %s" % (str(rootdirs), parentdir_prefix)) - raise NotThisMethod("rootdir doesn't start with parentdir_prefix") - - -@register_vcs_handler("git", "get_keywords") -def git_get_keywords(versionfile_abs): - """Extract version information from the given file.""" - # the code embedded in _version.py can just fetch the value of these - # keywords. When used from setup.py, we don't want to import _version.py, - # so we do it with a regexp instead. This function is not used from - # _version.py. - keywords = {} - try: - f = open(versionfile_abs, "r") - for line in f.readlines(): - if line.strip().startswith("git_refnames ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["refnames"] = mo.group(1) - if line.strip().startswith("git_full ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["full"] = mo.group(1) - if line.strip().startswith("git_date ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["date"] = mo.group(1) - f.close() - except EnvironmentError: - pass - return keywords - - -@register_vcs_handler("git", "keywords") -def git_versions_from_keywords(keywords, tag_prefix, verbose): - """Get version information from git keywords.""" - if not keywords: - raise NotThisMethod("no keywords at all, weird") - date = keywords.get("date") - if date is not None: - # git-2.2.0 added "%cI", which expands to an ISO-8601 -compliant - # datestamp. However we prefer "%ci" (which expands to an "ISO-8601 - # -like" string, which we must then edit to make compliant), because - # it's been around since git-1.5.3, and it's too difficult to - # discover which version we're using, or to work around using an - # older one. - date = date.strip().replace(" ", "T", 1).replace(" ", "", 1) - refnames = keywords["refnames"].strip() - if refnames.startswith("$Format"): - if verbose: - print("keywords are unexpanded, not using") - raise NotThisMethod("unexpanded keywords, not a git-archive tarball") - refs = set([r.strip() for r in refnames.strip("()").split(",")]) - # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of - # just "foo-1.0". If we see a "tag: " prefix, prefer those. - TAG = "tag: " - tags = set([r[len(TAG) :] for r in refs if r.startswith(TAG)]) - if not tags: - # Either we're using git < 1.8.3, or there really are no tags. We use - # a heuristic: assume all version tags have a digit. The old git %d - # expansion behaves like git log --decorate=short and strips out the - # refs/heads/ and refs/tags/ prefixes that would let us distinguish - # between branches and tags. By ignoring refnames without digits, we - # filter out many common branch names like "release" and - # "stabilization", as well as "HEAD" and "master". - tags = set([r for r in refs if re.search(r"\d", r)]) - if verbose: - print("discarding '%s', no digits" % ",".join(refs - tags)) - if verbose: - print("likely tags: %s" % ",".join(sorted(tags))) - for ref in sorted(tags): - # sorting will prefer e.g. "2.0" over "2.0rc1" - if ref.startswith(tag_prefix): - r = ref[len(tag_prefix) :] - if verbose: - print("picking %s" % r) - return { - "version": r, - "full-revisionid": keywords["full"].strip(), - "dirty": False, - "error": None, - "date": date, - } - # no suitable tags, so version is "0+unknown", but full hex is still there - if verbose: - print("no suitable tags, using unknown + full revision id") - return { - "version": "0+unknown", - "full-revisionid": keywords["full"].strip(), - "dirty": False, - "error": "no suitable tags", - "date": None, - } - - -@register_vcs_handler("git", "pieces_from_vcs") -def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command): - """Get version from 'git describe' in the root of the source tree. - - This only gets called if the git-archive 'subst' keywords were *not* - expanded, and _version.py hasn't already been rewritten with a short - version string, meaning we're inside a checked out source tree. - """ - GITS = ["git"] - if sys.platform == "win32": - GITS = ["git.cmd", "git.exe"] - - out, rc = run_command(GITS, ["rev-parse", "--git-dir"], cwd=root, hide_stderr=True) - if rc != 0: - if verbose: - print("Directory %s not under git control" % root) - raise NotThisMethod("'git rev-parse --git-dir' returned error") - - # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty] - # if there isn't one, this yields HEX[-dirty] (no NUM) - describe_out, rc = run_command( - GITS, - [ - "describe", - "--tags", - "--dirty", - "--always", - "--long", - "--match", - "%s*" % tag_prefix, - ], - cwd=root, - ) - # --long was added in git-1.5.5 - if describe_out is None: - raise NotThisMethod("'git describe' failed") - describe_out = describe_out.strip() - full_out, rc = run_command(GITS, ["rev-parse", "HEAD"], cwd=root) - if full_out is None: - raise NotThisMethod("'git rev-parse' failed") - full_out = full_out.strip() - - pieces = {} - pieces["long"] = full_out - pieces["short"] = full_out[:7] # maybe improved later - pieces["error"] = None - - # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty] - # TAG might have hyphens. - git_describe = describe_out - - # look for -dirty suffix - dirty = git_describe.endswith("-dirty") - pieces["dirty"] = dirty - if dirty: - git_describe = git_describe[: git_describe.rindex("-dirty")] - - # now we have TAG-NUM-gHEX or HEX - - if "-" in git_describe: - # TAG-NUM-gHEX - mo = re.search(r"^(.+)-(\d+)-g([0-9a-f]+)$", git_describe) - if not mo: - # unparseable. Maybe git-describe is misbehaving? - pieces["error"] = "unable to parse git-describe output: '%s'" % describe_out - return pieces - - # tag - full_tag = mo.group(1) - if not full_tag.startswith(tag_prefix): - if verbose: - fmt = "tag '%s' doesn't start with prefix '%s'" - print(fmt % (full_tag, tag_prefix)) - pieces["error"] = "tag '%s' doesn't start with prefix '%s'" % ( - full_tag, - tag_prefix, - ) - return pieces - pieces["closest-tag"] = full_tag[len(tag_prefix) :] - - # distance: number of commits since tag - pieces["distance"] = int(mo.group(2)) - - # commit: short hex revision ID - pieces["short"] = mo.group(3) - - else: - # HEX: no tags - pieces["closest-tag"] = None - count_out, rc = run_command(GITS, ["rev-list", "HEAD", "--count"], cwd=root) - pieces["distance"] = int(count_out) # total number of commits - - # commit date: see ISO-8601 comment in git_versions_from_keywords() - date = run_command(GITS, ["show", "-s", "--format=%ci", "HEAD"], cwd=root)[0].strip() - pieces["date"] = date.strip().replace(" ", "T", 1).replace(" ", "", 1) - - return pieces - - -def plus_or_dot(pieces): - """Return a + if we don't already have one, else return a .""" - if "+" in pieces.get("closest-tag", ""): - return "." - return "+" - - -def render_pep440(pieces): - """Build up version string, with post-release "local version identifier". - - Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you - get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty - - Exceptions: - 1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += plus_or_dot(pieces) - rendered += "%d.g%s" % (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0+untagged.%d.g%s" % (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def render_pep440_pre(pieces): - """TAG[.post.devDISTANCE] -- No -dirty. - - Exceptions: - 1: no tags. 0.post.devDISTANCE - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"]: - rendered += ".post.dev%d" % pieces["distance"] - else: - # exception #1 - rendered = "0.post.dev%d" % pieces["distance"] - return rendered - - -def render_pep440_post(pieces): - """TAG[.postDISTANCE[.dev0]+gHEX] . - - The ".dev0" means dirty. Note that .dev0 sorts backwards - (a dirty tree will appear "older" than the corresponding clean one), - but you shouldn't be releasing software with -dirty anyways. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "g%s" % pieces["short"] - else: - # exception #1 - rendered = "0.post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += "+g%s" % pieces["short"] - return rendered - - -def render_pep440_old(pieces): - """TAG[.postDISTANCE[.dev0]] . - - The ".dev0" means dirty. - - Eexceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - else: - # exception #1 - rendered = "0.post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - return rendered - - -def render_git_describe(pieces): - """TAG[-DISTANCE-gHEX][-dirty]. - - Like 'git describe --tags --dirty --always'. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"]: - rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render_git_describe_long(pieces): - """TAG-DISTANCE-gHEX[-dirty]. - - Like 'git describe --tags --dirty --always -long'. - The distance/hash is unconditional. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render(pieces, style): - """Render the given version pieces into the requested style.""" - if pieces["error"]: - return { - "version": "unknown", - "full-revisionid": pieces.get("long"), - "dirty": None, - "error": pieces["error"], - "date": None, - } - - if not style or style == "default": - style = "pep440" # the default - - if style == "pep440": - rendered = render_pep440(pieces) - elif style == "pep440-pre": - rendered = render_pep440_pre(pieces) - elif style == "pep440-post": - rendered = render_pep440_post(pieces) - elif style == "pep440-old": - rendered = render_pep440_old(pieces) - elif style == "git-describe": - rendered = render_git_describe(pieces) - elif style == "git-describe-long": - rendered = render_git_describe_long(pieces) - else: - raise ValueError("unknown style '%s'" % style) - - return { - "version": rendered, - "full-revisionid": pieces["long"], - "dirty": pieces["dirty"], - "error": None, - "date": pieces.get("date"), - } - - -def get_versions(): - """Get version information or return default if unable to do so.""" - # I am in _version.py, which lives at ROOT/VERSIONFILE_SOURCE. If we have - # __file__, we can work backwards from there to the root. Some - # py2exe/bbfreeze/non-CPython implementations don't do __file__, in which - # case we can only use expanded keywords. - - cfg = get_config() - verbose = cfg.verbose - - try: - return git_versions_from_keywords(get_keywords(), cfg.tag_prefix, verbose) - except NotThisMethod: - pass - - try: - root = os.path.realpath(__file__) - # versionfile_source is the relative path from the top of the source - # tree (where the .git directory might live) to this file. Invert - # this to find the root from __file__. - for i in cfg.versionfile_source.split("/"): - root = os.path.dirname(root) - except NameError: - return { - "version": "0+unknown", - "full-revisionid": None, - "dirty": None, - "error": "unable to find root of source tree", - "date": None, - } - - try: - pieces = git_pieces_from_vcs(cfg.tag_prefix, root, verbose) - return render(pieces, cfg.style) - except NotThisMethod: - pass - - try: - if cfg.parentdir_prefix: - return versions_from_parentdir(cfg.parentdir_prefix, root, verbose) - except NotThisMethod: - pass - - return { - "version": "0+unknown", - "full-revisionid": None, - "dirty": None, - "error": "unable to compute version", - "date": None, - } +# file generated by vcs-versioning +# don't change, don't track in version control +from __future__ import annotations + +__all__ = [ + "__version__", + "__version_tuple__", + "version", + "version_tuple", + "__commit_id__", + "commit_id", +] + +version: str +__version__: str +__version_tuple__: tuple[int | str, ...] +version_tuple: tuple[int | str, ...] +commit_id: str | None +__commit_id__: str | None + +__version__ = version = '0.0.25.dev55+gb26088bfc.d20260714' +__version_tuple__ = version_tuple = (0, 0, 25, 'dev55', 'gb26088bfc.d20260714') + +__commit_id__ = commit_id = 'gb26088bfc' diff --git a/versioneer.py b/versioneer.py deleted file mode 100644 index b1b9cc89..00000000 --- a/versioneer.py +++ /dev/null @@ -1,1824 +0,0 @@ - -# Version: 0.18 - -"""The Versioneer - like a rocketeer, but for versions. - -The Versioneer -============== - -* like a rocketeer, but for versions! -* https://github.com/warner/python-versioneer -* Brian Warner -* License: Public Domain -* Compatible With: python2.6, 2.7, 3.2, 3.3, 3.4, 3.5, 3.6, and pypy -* [![Latest Version] -(https://pypip.in/version/versioneer/badge.svg?style=flat) -](https://pypi.python.org/pypi/versioneer/) -* [![Build Status] -(https://travis-ci.org/warner/python-versioneer.png?branch=master) -](https://travis-ci.org/warner/python-versioneer) - -This is a tool for managing a recorded version number in distutils-based -python projects. The goal is to remove the tedious and error-prone "update -the embedded version string" step from your release process. Making a new -release should be as easy as recording a new tag in your version-control -system, and maybe making new tarballs. - - -## Quick Install - -* `pip install versioneer` to somewhere to your $PATH -* add a `[versioneer]` section to your setup.cfg (see below) -* run `versioneer install` in your source tree, commit the results - -## Version Identifiers - -Source trees come from a variety of places: - -* a version-control system checkout (mostly used by developers) -* a nightly tarball, produced by build automation -* a snapshot tarball, produced by a web-based VCS browser, like github's - "tarball from tag" feature -* a release tarball, produced by "setup.py sdist", distributed through PyPI - -Within each source tree, the version identifier (either a string or a number, -this tool is format-agnostic) can come from a variety of places: - -* ask the VCS tool itself, e.g. "git describe" (for checkouts), which knows - about recent "tags" and an absolute revision-id -* the name of the directory into which the tarball was unpacked -* an expanded VCS keyword ($Id$, etc) -* a `_version.py` created by some earlier build step - -For released software, the version identifier is closely related to a VCS -tag. Some projects use tag names that include more than just the version -string (e.g. "myproject-1.2" instead of just "1.2"), in which case the tool -needs to strip the tag prefix to extract the version identifier. For -unreleased software (between tags), the version identifier should provide -enough information to help developers recreate the same tree, while also -giving them an idea of roughly how old the tree is (after version 1.2, before -version 1.3). Many VCS systems can report a description that captures this, -for example `git describe --tags --dirty --always` reports things like -"0.7-1-g574ab98-dirty" to indicate that the checkout is one revision past the -0.7 tag, has a unique revision id of "574ab98", and is "dirty" (it has -uncommitted changes. - -The version identifier is used for multiple purposes: - -* to allow the module to self-identify its version: `myproject.__version__` -* to choose a name and prefix for a 'setup.py sdist' tarball - -## Theory of Operation - -Versioneer works by adding a special `_version.py` file into your source -tree, where your `__init__.py` can import it. This `_version.py` knows how to -dynamically ask the VCS tool for version information at import time. - -`_version.py` also contains `$Revision$` markers, and the installation -process marks `_version.py` to have this marker rewritten with a tag name -during the `git archive` command. As a result, generated tarballs will -contain enough information to get the proper version. - -To allow `setup.py` to compute a version too, a `versioneer.py` is added to -the top level of your source tree, next to `setup.py` and the `setup.cfg` -that configures it. This overrides several distutils/setuptools commands to -compute the version when invoked, and changes `setup.py build` and `setup.py -sdist` to replace `_version.py` with a small static file that contains just -the generated version data. - -## Installation - -See [INSTALL.md](./INSTALL.md) for detailed installation instructions. - -## Version-String Flavors - -Code which uses Versioneer can learn about its version string at runtime by -importing `_version` from your main `__init__.py` file and running the -`get_versions()` function. From the "outside" (e.g. in `setup.py`), you can -import the top-level `versioneer.py` and run `get_versions()`. - -Both functions return a dictionary with different flavors of version -information: - -* `['version']`: A condensed version string, rendered using the selected - style. This is the most commonly used value for the project's version - string. The default "pep440" style yields strings like `0.11`, - `0.11+2.g1076c97`, or `0.11+2.g1076c97.dirty`. See the "Styles" section - below for alternative styles. - -* `['full-revisionid']`: detailed revision identifier. For Git, this is the - full SHA1 commit id, e.g. "1076c978a8d3cfc70f408fe5974aa6c092c949ac". - -* `['date']`: Date and time of the latest `HEAD` commit. For Git, it is the - commit date in ISO 8601 format. This will be None if the date is not - available. - -* `['dirty']`: a boolean, True if the tree has uncommitted changes. Note that - this is only accurate if run in a VCS checkout, otherwise it is likely to - be False or None - -* `['error']`: if the version string could not be computed, this will be set - to a string describing the problem, otherwise it will be None. It may be - useful to throw an exception in setup.py if this is set, to avoid e.g. - creating tarballs with a version string of "unknown". - -Some variants are more useful than others. Including `full-revisionid` in a -bug report should allow developers to reconstruct the exact code being tested -(or indicate the presence of local changes that should be shared with the -developers). `version` is suitable for display in an "about" box or a CLI -`--version` output: it can be easily compared against release notes and lists -of bugs fixed in various releases. - -The installer adds the following text to your `__init__.py` to place a basic -version in `YOURPROJECT.__version__`: - - from ._version import get_versions - __version__ = get_versions()['version'] - del get_versions - -## Styles - -The setup.cfg `style=` configuration controls how the VCS information is -rendered into a version string. - -The default style, "pep440", produces a PEP440-compliant string, equal to the -un-prefixed tag name for actual releases, and containing an additional "local -version" section with more detail for in-between builds. For Git, this is -TAG[+DISTANCE.gHEX[.dirty]] , using information from `git describe --tags ---dirty --always`. For example "0.11+2.g1076c97.dirty" indicates that the -tree is like the "1076c97" commit but has uncommitted changes (".dirty"), and -that this commit is two revisions ("+2") beyond the "0.11" tag. For released -software (exactly equal to a known tag), the identifier will only contain the -stripped tag, e.g. "0.11". - -Other styles are available. See [details.md](details.md) in the Versioneer -source tree for descriptions. - -## Debugging - -Versioneer tries to avoid fatal errors: if something goes wrong, it will tend -to return a version of "0+unknown". To investigate the problem, run `setup.py -version`, which will run the version-lookup code in a verbose mode, and will -display the full contents of `get_versions()` (including the `error` string, -which may help identify what went wrong). - -## Known Limitations - -Some situations are known to cause problems for Versioneer. This details the -most significant ones. More can be found on Github -[issues page](https://github.com/warner/python-versioneer/issues). - -### Subprojects - -Versioneer has limited support for source trees in which `setup.py` is not in -the root directory (e.g. `setup.py` and `.git/` are *not* siblings). The are -two common reasons why `setup.py` might not be in the root: - -* Source trees which contain multiple subprojects, such as - [Buildbot](https://github.com/buildbot/buildbot), which contains both - "master" and "slave" subprojects, each with their own `setup.py`, - `setup.cfg`, and `tox.ini`. Projects like these produce multiple PyPI - distributions (and upload multiple independently-installable tarballs). -* Source trees whose main purpose is to contain a C library, but which also - provide bindings to Python (and perhaps other langauges) in subdirectories. - -Versioneer will look for `.git` in parent directories, and most operations -should get the right version string. However `pip` and `setuptools` have bugs -and implementation details which frequently cause `pip install .` from a -subproject directory to fail to find a correct version string (so it usually -defaults to `0+unknown`). - -`pip install --editable .` should work correctly. `setup.py install` might -work too. - -Pip-8.1.1 is known to have this problem, but hopefully it will get fixed in -some later version. - -[Bug #38](https://github.com/warner/python-versioneer/issues/38) is tracking -this issue. The discussion in -[PR #61](https://github.com/warner/python-versioneer/pull/61) describes the -issue from the Versioneer side in more detail. -[pip PR#3176](https://github.com/pypa/pip/pull/3176) and -[pip PR#3615](https://github.com/pypa/pip/pull/3615) contain work to improve -pip to let Versioneer work correctly. - -Versioneer-0.16 and earlier only looked for a `.git` directory next to the -`setup.cfg`, so subprojects were completely unsupported with those releases. - -### Editable installs with setuptools <= 18.5 - -`setup.py develop` and `pip install --editable .` allow you to install a -project into a virtualenv once, then continue editing the source code (and -test) without re-installing after every change. - -"Entry-point scripts" (`setup(entry_points={"console_scripts": ..})`) are a -convenient way to specify executable scripts that should be installed along -with the python package. - -These both work as expected when using modern setuptools. When using -setuptools-18.5 or earlier, however, certain operations will cause -`pkg_resources.DistributionNotFound` errors when running the entrypoint -script, which must be resolved by re-installing the package. This happens -when the install happens with one version, then the egg_info data is -regenerated while a different version is checked out. Many setup.py commands -cause egg_info to be rebuilt (including `sdist`, `wheel`, and installing into -a different virtualenv), so this can be surprising. - -[Bug #83](https://github.com/warner/python-versioneer/issues/83) describes -this one, but upgrading to a newer version of setuptools should probably -resolve it. - -### Unicode version strings - -While Versioneer works (and is continually tested) with both Python 2 and -Python 3, it is not entirely consistent with bytes-vs-unicode distinctions. -Newer releases probably generate unicode version strings on py2. It's not -clear that this is wrong, but it may be surprising for applications when then -write these strings to a network connection or include them in bytes-oriented -APIs like cryptographic checksums. - -[Bug #71](https://github.com/warner/python-versioneer/issues/71) investigates -this question. - - -## Updating Versioneer - -To upgrade your project to a new release of Versioneer, do the following: - -* install the new Versioneer (`pip install -U versioneer` or equivalent) -* edit `setup.cfg`, if necessary, to include any new configuration settings - indicated by the release notes. See [UPGRADING](./UPGRADING.md) for details. -* re-run `versioneer install` in your source tree, to replace - `SRC/_version.py` -* commit any changed files - -## Future Directions - -This tool is designed to make it easily extended to other version-control -systems: all VCS-specific components are in separate directories like -src/git/ . The top-level `versioneer.py` script is assembled from these -components by running make-versioneer.py . In the future, make-versioneer.py -will take a VCS name as an argument, and will construct a version of -`versioneer.py` that is specific to the given VCS. It might also take the -configuration arguments that are currently provided manually during -installation by editing setup.py . Alternatively, it might go the other -direction and include code from all supported VCS systems, reducing the -number of intermediate scripts. - - -## License - -To make Versioneer easier to embed, all its code is dedicated to the public -domain. The `_version.py` that it creates is also in the public domain. -Specifically, both are released under the Creative Commons "Public Domain -Dedication" license (CC0-1.0), as described in -https://creativecommons.org/publicdomain/zero/1.0/ . - -""" - -from __future__ import print_function - -try: - import configparser -except ImportError: - import ConfigParser as configparser - -import errno -import json -import os -import re -import subprocess -import sys - - -class VersioneerConfig: - """Container for Versioneer configuration parameters.""" - - -def get_root(): - """Get the project root directory. - - We require that all commands are run from the project root, i.e. the - directory that contains setup.py, setup.cfg, and versioneer.py . - """ - root = os.path.realpath(os.path.abspath(os.getcwd())) - setup_py = os.path.join(root, "setup.py") - versioneer_py = os.path.join(root, "versioneer.py") - if not (os.path.exists(setup_py) or os.path.exists(versioneer_py)): - # allow 'python path/to/setup.py COMMAND' - root = os.path.dirname(os.path.realpath(os.path.abspath(sys.argv[0]))) - setup_py = os.path.join(root, "setup.py") - versioneer_py = os.path.join(root, "versioneer.py") - if not (os.path.exists(setup_py) or os.path.exists(versioneer_py)): - err = ("Versioneer was unable to run the project root directory. " - "Versioneer requires setup.py to be executed from " - "its immediate directory (like 'python setup.py COMMAND'), " - "or in a way that lets it use sys.argv[0] to find the root " - "(like 'python path/to/setup.py COMMAND').") - raise VersioneerBadRootError(err) - try: - # Certain runtime workflows (setup.py install/develop in a setuptools - # tree) execute all dependencies in a single python process, so - # "versioneer" may be imported multiple times, and python's shared - # module-import table will cache the first one. So we can't use - # os.path.dirname(__file__), as that will find whichever - # versioneer.py was first imported, even in later projects. - me = os.path.realpath(os.path.abspath(__file__)) - me_dir = os.path.normcase(os.path.splitext(me)[0]) - vsr_dir = os.path.normcase(os.path.splitext(versioneer_py)[0]) - if me_dir != vsr_dir: - print("Warning: build in %s is using versioneer.py from %s" - % (os.path.dirname(me), versioneer_py)) - except NameError: - pass - return root - - -def get_config_from_root(root): - """Read the project setup.cfg file to determine Versioneer config.""" - # This might raise EnvironmentError (if setup.cfg is missing), or - # configparser.NoSectionError (if it lacks a [versioneer] section), or - # configparser.NoOptionError (if it lacks "VCS="). See the docstring at - # the top of versioneer.py for instructions on writing your setup.cfg . - setup_cfg = os.path.join(root, "setup.cfg") - parser = configparser.ConfigParser() - parser.read(setup_cfg) - VCS = parser.get("versioneer", "VCS") # mandatory - - def get(parser, name): - if parser.has_option("versioneer", name): - return parser.get("versioneer", name) - return None - cfg = VersioneerConfig() - cfg.VCS = VCS - cfg.style = get(parser, "style") or "" - cfg.versionfile_source = get(parser, "versionfile_source") - cfg.versionfile_build = get(parser, "versionfile_build") - cfg.tag_prefix = get(parser, "tag_prefix") - if cfg.tag_prefix in ("''", '""'): - cfg.tag_prefix = "" - cfg.parentdir_prefix = get(parser, "parentdir_prefix") - cfg.verbose = get(parser, "verbose") - return cfg - - -class NotThisMethod(Exception): - """Exception raised if a method is not valid for the current scenario.""" - - -# these dictionaries contain VCS-specific tools -LONG_VERSION_PY = {} -HANDLERS = {} - - -def register_vcs_handler(vcs, method): # decorator - """Decorator to mark a method as the handler for a particular VCS.""" - def decorate(f): - """Store f in HANDLERS[vcs][method].""" - if vcs not in HANDLERS: - HANDLERS[vcs] = {} - HANDLERS[vcs][method] = f - return f - return decorate - - -def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, - env=None): - """Call the given command(s).""" - assert isinstance(commands, list) - p = None - for c in commands: - try: - dispcmd = str([c] + args) - # remember shell=False, so use git.cmd on windows, not just git - p = subprocess.Popen([c] + args, cwd=cwd, env=env, - stdout=subprocess.PIPE, - stderr=(subprocess.PIPE if hide_stderr - else None)) - break - except EnvironmentError: - e = sys.exc_info()[1] - if e.errno == errno.ENOENT: - continue - if verbose: - print("unable to run %s" % dispcmd) - print(e) - return None, None - else: - if verbose: - print("unable to find command, tried %s" % (commands,)) - return None, None - stdout = p.communicate()[0].strip() - if sys.version_info[0] >= 3: - stdout = stdout.decode() - if p.returncode != 0: - if verbose: - print("unable to run %s (error)" % dispcmd) - print("stdout was %s" % stdout) - return None, p.returncode - return stdout, p.returncode - - -LONG_VERSION_PY['git'] = ''' -# This file helps to compute a version number in source trees obtained from -# git-archive tarball (such as those provided by githubs download-from-tag -# feature). Distribution tarballs (built by setup.py sdist) and build -# directories (produced by setup.py build) will contain a much shorter file -# that just contains the computed version number. - -# This file is released into the public domain. Generated by -# versioneer-0.18 (https://github.com/warner/python-versioneer) - -"""Git implementation of _version.py.""" - -import errno -import os -import re -import subprocess -import sys - - -def get_keywords(): - """Get the keywords needed to look up the version information.""" - # these strings will be replaced by git during git-archive. - # setup.py/versioneer.py will grep for the variable names, so they must - # each be defined on a line of their own. _version.py will just call - # get_keywords(). - git_refnames = "%(DOLLAR)sFormat:%%d%(DOLLAR)s" - git_full = "%(DOLLAR)sFormat:%%H%(DOLLAR)s" - git_date = "%(DOLLAR)sFormat:%%ci%(DOLLAR)s" - keywords = {"refnames": git_refnames, "full": git_full, "date": git_date} - return keywords - - -class VersioneerConfig: - """Container for Versioneer configuration parameters.""" - - -def get_config(): - """Create, populate and return the VersioneerConfig() object.""" - # these strings are filled in when 'setup.py versioneer' creates - # _version.py - cfg = VersioneerConfig() - cfg.VCS = "git" - cfg.style = "%(STYLE)s" - cfg.tag_prefix = "%(TAG_PREFIX)s" - cfg.parentdir_prefix = "%(PARENTDIR_PREFIX)s" - cfg.versionfile_source = "%(VERSIONFILE_SOURCE)s" - cfg.verbose = False - return cfg - - -class NotThisMethod(Exception): - """Exception raised if a method is not valid for the current scenario.""" - - -LONG_VERSION_PY = {} -HANDLERS = {} - - -def register_vcs_handler(vcs, method): # decorator - """Decorator to mark a method as the handler for a particular VCS.""" - def decorate(f): - """Store f in HANDLERS[vcs][method].""" - if vcs not in HANDLERS: - HANDLERS[vcs] = {} - HANDLERS[vcs][method] = f - return f - return decorate - - -def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, - env=None): - """Call the given command(s).""" - assert isinstance(commands, list) - p = None - for c in commands: - try: - dispcmd = str([c] + args) - # remember shell=False, so use git.cmd on windows, not just git - p = subprocess.Popen([c] + args, cwd=cwd, env=env, - stdout=subprocess.PIPE, - stderr=(subprocess.PIPE if hide_stderr - else None)) - break - except EnvironmentError: - e = sys.exc_info()[1] - if e.errno == errno.ENOENT: - continue - if verbose: - print("unable to run %%s" %% dispcmd) - print(e) - return None, None - else: - if verbose: - print("unable to find command, tried %%s" %% (commands,)) - return None, None - stdout = p.communicate()[0].strip() - if sys.version_info[0] >= 3: - stdout = stdout.decode() - if p.returncode != 0: - if verbose: - print("unable to run %%s (error)" %% dispcmd) - print("stdout was %%s" %% stdout) - return None, p.returncode - return stdout, p.returncode - - -def versions_from_parentdir(parentdir_prefix, root, verbose): - """Try to determine the version from the parent directory name. - - Source tarballs conventionally unpack into a directory that includes both - the project name and a version string. We will also support searching up - two directory levels for an appropriately named parent directory - """ - rootdirs = [] - - for i in range(3): - dirname = os.path.basename(root) - if dirname.startswith(parentdir_prefix): - return {"version": dirname[len(parentdir_prefix):], - "full-revisionid": None, - "dirty": False, "error": None, "date": None} - else: - rootdirs.append(root) - root = os.path.dirname(root) # up a level - - if verbose: - print("Tried directories %%s but none started with prefix %%s" %% - (str(rootdirs), parentdir_prefix)) - raise NotThisMethod("rootdir doesn't start with parentdir_prefix") - - -@register_vcs_handler("git", "get_keywords") -def git_get_keywords(versionfile_abs): - """Extract version information from the given file.""" - # the code embedded in _version.py can just fetch the value of these - # keywords. When used from setup.py, we don't want to import _version.py, - # so we do it with a regexp instead. This function is not used from - # _version.py. - keywords = {} - try: - f = open(versionfile_abs, "r") - for line in f.readlines(): - if line.strip().startswith("git_refnames ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["refnames"] = mo.group(1) - if line.strip().startswith("git_full ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["full"] = mo.group(1) - if line.strip().startswith("git_date ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["date"] = mo.group(1) - f.close() - except EnvironmentError: - pass - return keywords - - -@register_vcs_handler("git", "keywords") -def git_versions_from_keywords(keywords, tag_prefix, verbose): - """Get version information from git keywords.""" - if not keywords: - raise NotThisMethod("no keywords at all, weird") - date = keywords.get("date") - if date is not None: - # git-2.2.0 added "%%cI", which expands to an ISO-8601 -compliant - # datestamp. However we prefer "%%ci" (which expands to an "ISO-8601 - # -like" string, which we must then edit to make compliant), because - # it's been around since git-1.5.3, and it's too difficult to - # discover which version we're using, or to work around using an - # older one. - date = date.strip().replace(" ", "T", 1).replace(" ", "", 1) - refnames = keywords["refnames"].strip() - if refnames.startswith("$Format"): - if verbose: - print("keywords are unexpanded, not using") - raise NotThisMethod("unexpanded keywords, not a git-archive tarball") - refs = set([r.strip() for r in refnames.strip("()").split(",")]) - # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of - # just "foo-1.0". If we see a "tag: " prefix, prefer those. - TAG = "tag: " - tags = set([r[len(TAG):] for r in refs if r.startswith(TAG)]) - if not tags: - # Either we're using git < 1.8.3, or there really are no tags. We use - # a heuristic: assume all version tags have a digit. The old git %%d - # expansion behaves like git log --decorate=short and strips out the - # refs/heads/ and refs/tags/ prefixes that would let us distinguish - # between branches and tags. By ignoring refnames without digits, we - # filter out many common branch names like "release" and - # "stabilization", as well as "HEAD" and "master". - tags = set([r for r in refs if re.search(r'\d', r)]) - if verbose: - print("discarding '%%s', no digits" %% ",".join(refs - tags)) - if verbose: - print("likely tags: %%s" %% ",".join(sorted(tags))) - for ref in sorted(tags): - # sorting will prefer e.g. "2.0" over "2.0rc1" - if ref.startswith(tag_prefix): - r = ref[len(tag_prefix):] - if verbose: - print("picking %%s" %% r) - return {"version": r, - "full-revisionid": keywords["full"].strip(), - "dirty": False, "error": None, - "date": date} - # no suitable tags, so version is "0+unknown", but full hex is still there - if verbose: - print("no suitable tags, using unknown + full revision id") - return {"version": "0+unknown", - "full-revisionid": keywords["full"].strip(), - "dirty": False, "error": "no suitable tags", "date": None} - - -@register_vcs_handler("git", "pieces_from_vcs") -def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command): - """Get version from 'git describe' in the root of the source tree. - - This only gets called if the git-archive 'subst' keywords were *not* - expanded, and _version.py hasn't already been rewritten with a short - version string, meaning we're inside a checked out source tree. - """ - GITS = ["git"] - if sys.platform == "win32": - GITS = ["git.cmd", "git.exe"] - - out, rc = run_command(GITS, ["rev-parse", "--git-dir"], cwd=root, - hide_stderr=True) - if rc != 0: - if verbose: - print("Directory %%s not under git control" %% root) - raise NotThisMethod("'git rev-parse --git-dir' returned error") - - # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty] - # if there isn't one, this yields HEX[-dirty] (no NUM) - describe_out, rc = run_command(GITS, ["describe", "--tags", "--dirty", - "--always", "--long", - "--match", "%%s*" %% tag_prefix], - cwd=root) - # --long was added in git-1.5.5 - if describe_out is None: - raise NotThisMethod("'git describe' failed") - describe_out = describe_out.strip() - full_out, rc = run_command(GITS, ["rev-parse", "HEAD"], cwd=root) - if full_out is None: - raise NotThisMethod("'git rev-parse' failed") - full_out = full_out.strip() - - pieces = {} - pieces["long"] = full_out - pieces["short"] = full_out[:7] # maybe improved later - pieces["error"] = None - - # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty] - # TAG might have hyphens. - git_describe = describe_out - - # look for -dirty suffix - dirty = git_describe.endswith("-dirty") - pieces["dirty"] = dirty - if dirty: - git_describe = git_describe[:git_describe.rindex("-dirty")] - - # now we have TAG-NUM-gHEX or HEX - - if "-" in git_describe: - # TAG-NUM-gHEX - mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe) - if not mo: - # unparseable. Maybe git-describe is misbehaving? - pieces["error"] = ("unable to parse git-describe output: '%%s'" - %% describe_out) - return pieces - - # tag - full_tag = mo.group(1) - if not full_tag.startswith(tag_prefix): - if verbose: - fmt = "tag '%%s' doesn't start with prefix '%%s'" - print(fmt %% (full_tag, tag_prefix)) - pieces["error"] = ("tag '%%s' doesn't start with prefix '%%s'" - %% (full_tag, tag_prefix)) - return pieces - pieces["closest-tag"] = full_tag[len(tag_prefix):] - - # distance: number of commits since tag - pieces["distance"] = int(mo.group(2)) - - # commit: short hex revision ID - pieces["short"] = mo.group(3) - - else: - # HEX: no tags - pieces["closest-tag"] = None - count_out, rc = run_command(GITS, ["rev-list", "HEAD", "--count"], - cwd=root) - pieces["distance"] = int(count_out) # total number of commits - - # commit date: see ISO-8601 comment in git_versions_from_keywords() - date = run_command(GITS, ["show", "-s", "--format=%%ci", "HEAD"], - cwd=root)[0].strip() - pieces["date"] = date.strip().replace(" ", "T", 1).replace(" ", "", 1) - - return pieces - - -def plus_or_dot(pieces): - """Return a + if we don't already have one, else return a .""" - if "+" in pieces.get("closest-tag", ""): - return "." - return "+" - - -def render_pep440(pieces): - """Build up version string, with post-release "local version identifier". - - Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you - get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty - - Exceptions: - 1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += plus_or_dot(pieces) - rendered += "%%d.g%%s" %% (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0+untagged.%%d.g%%s" %% (pieces["distance"], - pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def render_pep440_pre(pieces): - """TAG[.post.devDISTANCE] -- No -dirty. - - Exceptions: - 1: no tags. 0.post.devDISTANCE - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"]: - rendered += ".post.dev%%d" %% pieces["distance"] - else: - # exception #1 - rendered = "0.post.dev%%d" %% pieces["distance"] - return rendered - - -def render_pep440_post(pieces): - """TAG[.postDISTANCE[.dev0]+gHEX] . - - The ".dev0" means dirty. Note that .dev0 sorts backwards - (a dirty tree will appear "older" than the corresponding clean one), - but you shouldn't be releasing software with -dirty anyways. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%%d" %% pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "g%%s" %% pieces["short"] - else: - # exception #1 - rendered = "0.post%%d" %% pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += "+g%%s" %% pieces["short"] - return rendered - - -def render_pep440_old(pieces): - """TAG[.postDISTANCE[.dev0]] . - - The ".dev0" means dirty. - - Eexceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%%d" %% pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - else: - # exception #1 - rendered = "0.post%%d" %% pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - return rendered - - -def render_git_describe(pieces): - """TAG[-DISTANCE-gHEX][-dirty]. - - Like 'git describe --tags --dirty --always'. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"]: - rendered += "-%%d-g%%s" %% (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render_git_describe_long(pieces): - """TAG-DISTANCE-gHEX[-dirty]. - - Like 'git describe --tags --dirty --always -long'. - The distance/hash is unconditional. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - rendered += "-%%d-g%%s" %% (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render(pieces, style): - """Render the given version pieces into the requested style.""" - if pieces["error"]: - return {"version": "unknown", - "full-revisionid": pieces.get("long"), - "dirty": None, - "error": pieces["error"], - "date": None} - - if not style or style == "default": - style = "pep440" # the default - - if style == "pep440": - rendered = render_pep440(pieces) - elif style == "pep440-pre": - rendered = render_pep440_pre(pieces) - elif style == "pep440-post": - rendered = render_pep440_post(pieces) - elif style == "pep440-old": - rendered = render_pep440_old(pieces) - elif style == "git-describe": - rendered = render_git_describe(pieces) - elif style == "git-describe-long": - rendered = render_git_describe_long(pieces) - else: - raise ValueError("unknown style '%%s'" %% style) - - return {"version": rendered, "full-revisionid": pieces["long"], - "dirty": pieces["dirty"], "error": None, - "date": pieces.get("date")} - - -def get_versions(): - """Get version information or return default if unable to do so.""" - # I am in _version.py, which lives at ROOT/VERSIONFILE_SOURCE. If we have - # __file__, we can work backwards from there to the root. Some - # py2exe/bbfreeze/non-CPython implementations don't do __file__, in which - # case we can only use expanded keywords. - - cfg = get_config() - verbose = cfg.verbose - - try: - return git_versions_from_keywords(get_keywords(), cfg.tag_prefix, - verbose) - except NotThisMethod: - pass - - try: - root = os.path.realpath(__file__) - # versionfile_source is the relative path from the top of the source - # tree (where the .git directory might live) to this file. Invert - # this to find the root from __file__. - for i in cfg.versionfile_source.split('/'): - root = os.path.dirname(root) - except NameError: - return {"version": "0+unknown", "full-revisionid": None, - "dirty": None, - "error": "unable to find root of source tree", - "date": None} - - try: - pieces = git_pieces_from_vcs(cfg.tag_prefix, root, verbose) - return render(pieces, cfg.style) - except NotThisMethod: - pass - - try: - if cfg.parentdir_prefix: - return versions_from_parentdir(cfg.parentdir_prefix, root, verbose) - except NotThisMethod: - pass - - return {"version": "0+unknown", "full-revisionid": None, - "dirty": None, - "error": "unable to compute version", "date": None} -''' - - -@register_vcs_handler("git", "get_keywords") -def git_get_keywords(versionfile_abs): - """Extract version information from the given file.""" - # the code embedded in _version.py can just fetch the value of these - # keywords. When used from setup.py, we don't want to import _version.py, - # so we do it with a regexp instead. This function is not used from - # _version.py. - keywords = {} - try: - f = open(versionfile_abs, "r") - for line in f.readlines(): - if line.strip().startswith("git_refnames ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["refnames"] = mo.group(1) - if line.strip().startswith("git_full ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["full"] = mo.group(1) - if line.strip().startswith("git_date ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["date"] = mo.group(1) - f.close() - except EnvironmentError: - pass - return keywords - - -@register_vcs_handler("git", "keywords") -def git_versions_from_keywords(keywords, tag_prefix, verbose): - """Get version information from git keywords.""" - if not keywords: - raise NotThisMethod("no keywords at all, weird") - date = keywords.get("date") - if date is not None: - # git-2.2.0 added "%cI", which expands to an ISO-8601 -compliant - # datestamp. However we prefer "%ci" (which expands to an "ISO-8601 - # -like" string, which we must then edit to make compliant), because - # it's been around since git-1.5.3, and it's too difficult to - # discover which version we're using, or to work around using an - # older one. - date = date.strip().replace(" ", "T", 1).replace(" ", "", 1) - refnames = keywords["refnames"].strip() - if refnames.startswith("$Format"): - if verbose: - print("keywords are unexpanded, not using") - raise NotThisMethod("unexpanded keywords, not a git-archive tarball") - refs = set([r.strip() for r in refnames.strip("()").split(",")]) - # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of - # just "foo-1.0". If we see a "tag: " prefix, prefer those. - TAG = "tag: " - tags = set([r[len(TAG):] for r in refs if r.startswith(TAG)]) - if not tags: - # Either we're using git < 1.8.3, or there really are no tags. We use - # a heuristic: assume all version tags have a digit. The old git %d - # expansion behaves like git log --decorate=short and strips out the - # refs/heads/ and refs/tags/ prefixes that would let us distinguish - # between branches and tags. By ignoring refnames without digits, we - # filter out many common branch names like "release" and - # "stabilization", as well as "HEAD" and "master". - tags = set([r for r in refs if re.search(r'\d', r)]) - if verbose: - print("discarding '%s', no digits" % ",".join(refs - tags)) - if verbose: - print("likely tags: %s" % ",".join(sorted(tags))) - for ref in sorted(tags): - # sorting will prefer e.g. "2.0" over "2.0rc1" - if ref.startswith(tag_prefix): - r = ref[len(tag_prefix):] - if verbose: - print("picking %s" % r) - return {"version": r, - "full-revisionid": keywords["full"].strip(), - "dirty": False, "error": None, - "date": date} - # no suitable tags, so version is "0+unknown", but full hex is still there - if verbose: - print("no suitable tags, using unknown + full revision id") - return {"version": "0+unknown", - "full-revisionid": keywords["full"].strip(), - "dirty": False, "error": "no suitable tags", "date": None} - - -@register_vcs_handler("git", "pieces_from_vcs") -def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command): - """Get version from 'git describe' in the root of the source tree. - - This only gets called if the git-archive 'subst' keywords were *not* - expanded, and _version.py hasn't already been rewritten with a short - version string, meaning we're inside a checked out source tree. - """ - GITS = ["git"] - if sys.platform == "win32": - GITS = ["git.cmd", "git.exe"] - - out, rc = run_command(GITS, ["rev-parse", "--git-dir"], cwd=root, - hide_stderr=True) - if rc != 0: - if verbose: - print("Directory %s not under git control" % root) - raise NotThisMethod("'git rev-parse --git-dir' returned error") - - # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty] - # if there isn't one, this yields HEX[-dirty] (no NUM) - describe_out, rc = run_command(GITS, ["describe", "--tags", "--dirty", - "--always", "--long", - "--match", "%s*" % tag_prefix], - cwd=root) - # --long was added in git-1.5.5 - if describe_out is None: - raise NotThisMethod("'git describe' failed") - describe_out = describe_out.strip() - full_out, rc = run_command(GITS, ["rev-parse", "HEAD"], cwd=root) - if full_out is None: - raise NotThisMethod("'git rev-parse' failed") - full_out = full_out.strip() - - pieces = {} - pieces["long"] = full_out - pieces["short"] = full_out[:7] # maybe improved later - pieces["error"] = None - - # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty] - # TAG might have hyphens. - git_describe = describe_out - - # look for -dirty suffix - dirty = git_describe.endswith("-dirty") - pieces["dirty"] = dirty - if dirty: - git_describe = git_describe[:git_describe.rindex("-dirty")] - - # now we have TAG-NUM-gHEX or HEX - - if "-" in git_describe: - # TAG-NUM-gHEX - mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe) - if not mo: - # unparseable. Maybe git-describe is misbehaving? - pieces["error"] = ("unable to parse git-describe output: '%s'" - % describe_out) - return pieces - - # tag - full_tag = mo.group(1) - if not full_tag.startswith(tag_prefix): - if verbose: - fmt = "tag '%s' doesn't start with prefix '%s'" - print(fmt % (full_tag, tag_prefix)) - pieces["error"] = ("tag '%s' doesn't start with prefix '%s'" - % (full_tag, tag_prefix)) - return pieces - pieces["closest-tag"] = full_tag[len(tag_prefix):] - - # distance: number of commits since tag - pieces["distance"] = int(mo.group(2)) - - # commit: short hex revision ID - pieces["short"] = mo.group(3) - - else: - # HEX: no tags - pieces["closest-tag"] = None - count_out, rc = run_command(GITS, ["rev-list", "HEAD", "--count"], - cwd=root) - pieces["distance"] = int(count_out) # total number of commits - - # commit date: see ISO-8601 comment in git_versions_from_keywords() - date = run_command(GITS, ["show", "-s", "--format=%ci", "HEAD"], - cwd=root)[0].strip() - pieces["date"] = date.strip().replace(" ", "T", 1).replace(" ", "", 1) - - return pieces - - -def do_vcs_install(manifest_in, versionfile_source, ipy): - """Git-specific installation logic for Versioneer. - - For Git, this means creating/changing .gitattributes to mark _version.py - for export-subst keyword substitution. - """ - GITS = ["git"] - if sys.platform == "win32": - GITS = ["git.cmd", "git.exe"] - files = [manifest_in, versionfile_source] - if ipy: - files.append(ipy) - try: - me = __file__ - if me.endswith(".pyc") or me.endswith(".pyo"): - me = os.path.splitext(me)[0] + ".py" - versioneer_file = os.path.relpath(me) - except NameError: - versioneer_file = "versioneer.py" - files.append(versioneer_file) - present = False - try: - f = open(".gitattributes", "r") - for line in f.readlines(): - if line.strip().startswith(versionfile_source): - if "export-subst" in line.strip().split()[1:]: - present = True - f.close() - except EnvironmentError: - pass - if not present: - f = open(".gitattributes", "a+") - f.write("%s export-subst\n" % versionfile_source) - f.close() - files.append(".gitattributes") - run_command(GITS, ["add", "--"] + files) - - -def versions_from_parentdir(parentdir_prefix, root, verbose): - """Try to determine the version from the parent directory name. - - Source tarballs conventionally unpack into a directory that includes both - the project name and a version string. We will also support searching up - two directory levels for an appropriately named parent directory - """ - rootdirs = [] - - for i in range(3): - dirname = os.path.basename(root) - if dirname.startswith(parentdir_prefix): - return {"version": dirname[len(parentdir_prefix):], - "full-revisionid": None, - "dirty": False, "error": None, "date": None} - else: - rootdirs.append(root) - root = os.path.dirname(root) # up a level - - if verbose: - print("Tried directories %s but none started with prefix %s" % - (str(rootdirs), parentdir_prefix)) - raise NotThisMethod("rootdir doesn't start with parentdir_prefix") - - -SHORT_VERSION_PY = """ -# This file was generated by 'versioneer.py' (0.18) from -# revision-control system data, or from the parent directory name of an -# unpacked source archive. Distribution tarballs contain a pre-generated copy -# of this file. - -import json - -version_json = ''' -%s -''' # END VERSION_JSON - - -def get_versions(): - return json.loads(version_json) -""" - - -def versions_from_file(filename): - """Try to determine the version from _version.py if present.""" - try: - with open(filename) as f: - contents = f.read() - except EnvironmentError: - raise NotThisMethod("unable to read _version.py") - mo = re.search(r"version_json = '''\n(.*)''' # END VERSION_JSON", - contents, re.M | re.S) - if not mo: - mo = re.search(r"version_json = '''\r\n(.*)''' # END VERSION_JSON", - contents, re.M | re.S) - if not mo: - raise NotThisMethod("no version_json in _version.py") - return json.loads(mo.group(1)) - - -def write_to_version_file(filename, versions): - """Write the given version number to the given _version.py file.""" - os.unlink(filename) - contents = json.dumps(versions, sort_keys=True, - indent=1, separators=(",", ": ")) - with open(filename, "w") as f: - f.write(SHORT_VERSION_PY % contents) - - print("set %s to '%s'" % (filename, versions["version"])) - - -def plus_or_dot(pieces): - """Return a + if we don't already have one, else return a .""" - if "+" in pieces.get("closest-tag", ""): - return "." - return "+" - - -def render_pep440(pieces): - """Build up version string, with post-release "local version identifier". - - Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you - get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty - - Exceptions: - 1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += plus_or_dot(pieces) - rendered += "%d.g%s" % (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0+untagged.%d.g%s" % (pieces["distance"], - pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def render_pep440_pre(pieces): - """TAG[.post.devDISTANCE] -- No -dirty. - - Exceptions: - 1: no tags. 0.post.devDISTANCE - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"]: - rendered += ".post.dev%d" % pieces["distance"] - else: - # exception #1 - rendered = "0.post.dev%d" % pieces["distance"] - return rendered - - -def render_pep440_post(pieces): - """TAG[.postDISTANCE[.dev0]+gHEX] . - - The ".dev0" means dirty. Note that .dev0 sorts backwards - (a dirty tree will appear "older" than the corresponding clean one), - but you shouldn't be releasing software with -dirty anyways. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "g%s" % pieces["short"] - else: - # exception #1 - rendered = "0.post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += "+g%s" % pieces["short"] - return rendered - - -def render_pep440_old(pieces): - """TAG[.postDISTANCE[.dev0]] . - - The ".dev0" means dirty. - - Eexceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - else: - # exception #1 - rendered = "0.post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - return rendered - - -def render_git_describe(pieces): - """TAG[-DISTANCE-gHEX][-dirty]. - - Like 'git describe --tags --dirty --always'. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"]: - rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render_git_describe_long(pieces): - """TAG-DISTANCE-gHEX[-dirty]. - - Like 'git describe --tags --dirty --always -long'. - The distance/hash is unconditional. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render(pieces, style): - """Render the given version pieces into the requested style.""" - if pieces["error"]: - return {"version": "unknown", - "full-revisionid": pieces.get("long"), - "dirty": None, - "error": pieces["error"], - "date": None} - - if not style or style == "default": - style = "pep440" # the default - - if style == "pep440": - rendered = render_pep440(pieces) - elif style == "pep440-pre": - rendered = render_pep440_pre(pieces) - elif style == "pep440-post": - rendered = render_pep440_post(pieces) - elif style == "pep440-old": - rendered = render_pep440_old(pieces) - elif style == "git-describe": - rendered = render_git_describe(pieces) - elif style == "git-describe-long": - rendered = render_git_describe_long(pieces) - else: - raise ValueError("unknown style '%s'" % style) - - return {"version": rendered, "full-revisionid": pieces["long"], - "dirty": pieces["dirty"], "error": None, - "date": pieces.get("date")} - - -class VersioneerBadRootError(Exception): - """The project root directory is unknown or missing key files.""" - - -def get_versions(verbose=False): - """Get the project version from whatever source is available. - - Returns dict with two keys: 'version' and 'full'. - """ - if "versioneer" in sys.modules: - # see the discussion in cmdclass.py:get_cmdclass() - del sys.modules["versioneer"] - - root = get_root() - cfg = get_config_from_root(root) - - assert cfg.VCS is not None, "please set [versioneer]VCS= in setup.cfg" - handlers = HANDLERS.get(cfg.VCS) - assert handlers, "unrecognized VCS '%s'" % cfg.VCS - verbose = verbose or cfg.verbose - assert cfg.versionfile_source is not None, \ - "please set versioneer.versionfile_source" - assert cfg.tag_prefix is not None, "please set versioneer.tag_prefix" - - versionfile_abs = os.path.join(root, cfg.versionfile_source) - - # extract version from first of: _version.py, VCS command (e.g. 'git - # describe'), parentdir. This is meant to work for developers using a - # source checkout, for users of a tarball created by 'setup.py sdist', - # and for users of a tarball/zipball created by 'git archive' or github's - # download-from-tag feature or the equivalent in other VCSes. - - get_keywords_f = handlers.get("get_keywords") - from_keywords_f = handlers.get("keywords") - if get_keywords_f and from_keywords_f: - try: - keywords = get_keywords_f(versionfile_abs) - ver = from_keywords_f(keywords, cfg.tag_prefix, verbose) - if verbose: - print("got version from expanded keyword %s" % ver) - return ver - except NotThisMethod: - pass - - try: - ver = versions_from_file(versionfile_abs) - if verbose: - print("got version from file %s %s" % (versionfile_abs, ver)) - return ver - except NotThisMethod: - pass - - from_vcs_f = handlers.get("pieces_from_vcs") - if from_vcs_f: - try: - pieces = from_vcs_f(cfg.tag_prefix, root, verbose) - ver = render(pieces, cfg.style) - if verbose: - print("got version from VCS %s" % ver) - return ver - except NotThisMethod: - pass - - try: - if cfg.parentdir_prefix: - ver = versions_from_parentdir(cfg.parentdir_prefix, root, verbose) - if verbose: - print("got version from parentdir %s" % ver) - return ver - except NotThisMethod: - pass - - if verbose: - print("unable to compute version") - - return {"version": "0+unknown", "full-revisionid": None, - "dirty": None, "error": "unable to compute version", - "date": None} - - -def get_version(): - """Get the short version string for this project.""" - return get_versions()["version"] - - -def get_cmdclass(): - """Get the custom setuptools/distutils subclasses used by Versioneer.""" - if "versioneer" in sys.modules: - del sys.modules["versioneer"] - # this fixes the "python setup.py develop" case (also 'install' and - # 'easy_install .'), in which subdependencies of the main project are - # built (using setup.py bdist_egg) in the same python process. Assume - # a main project A and a dependency B, which use different versions - # of Versioneer. A's setup.py imports A's Versioneer, leaving it in - # sys.modules by the time B's setup.py is executed, causing B to run - # with the wrong versioneer. Setuptools wraps the sub-dep builds in a - # sandbox that restores sys.modules to it's pre-build state, so the - # parent is protected against the child's "import versioneer". By - # removing ourselves from sys.modules here, before the child build - # happens, we protect the child from the parent's versioneer too. - # Also see https://github.com/warner/python-versioneer/issues/52 - - cmds = {} - - # we add "version" to both distutils and setuptools - from distutils.core import Command - - class cmd_version(Command): - description = "report generated version string" - user_options = [] - boolean_options = [] - - def initialize_options(self): - pass - - def finalize_options(self): - pass - - def run(self): - vers = get_versions(verbose=True) - print("Version: %s" % vers["version"]) - print(" full-revisionid: %s" % vers.get("full-revisionid")) - print(" dirty: %s" % vers.get("dirty")) - print(" date: %s" % vers.get("date")) - if vers["error"]: - print(" error: %s" % vers["error"]) - cmds["version"] = cmd_version - - # we override "build_py" in both distutils and setuptools - # - # most invocation pathways end up running build_py: - # distutils/build -> build_py - # distutils/install -> distutils/build ->.. - # setuptools/bdist_wheel -> distutils/install ->.. - # setuptools/bdist_egg -> distutils/install_lib -> build_py - # setuptools/install -> bdist_egg ->.. - # setuptools/develop -> ? - # pip install: - # copies source tree to a tempdir before running egg_info/etc - # if .git isn't copied too, 'git describe' will fail - # then does setup.py bdist_wheel, or sometimes setup.py install - # setup.py egg_info -> ? - - # we override different "build_py" commands for both environments - if "setuptools" in sys.modules: - from setuptools.command.build_py import build_py as _build_py - else: - from distutils.command.build_py import build_py as _build_py - - class cmd_build_py(_build_py): - def run(self): - root = get_root() - cfg = get_config_from_root(root) - versions = get_versions() - _build_py.run(self) - # now locate _version.py in the new build/ directory and replace - # it with an updated value - if cfg.versionfile_build: - target_versionfile = os.path.join(self.build_lib, - cfg.versionfile_build) - print("UPDATING %s" % target_versionfile) - write_to_version_file(target_versionfile, versions) - cmds["build_py"] = cmd_build_py - - if "cx_Freeze" in sys.modules: # cx_freeze enabled? - from cx_Freeze.dist import build_exe as _build_exe - - # nczeczulin reports that py2exe won't like the pep440-style string - # as FILEVERSION, but it can be used for PRODUCTVERSION, e.g. - # setup(console=[{ - # "version": versioneer.get_version().split("+", 1)[0], # FILEVERSION - # "product_version": versioneer.get_version(), - # ... - - class cmd_build_exe(_build_exe): - def run(self): - root = get_root() - cfg = get_config_from_root(root) - versions = get_versions() - target_versionfile = cfg.versionfile_source - print("UPDATING %s" % target_versionfile) - write_to_version_file(target_versionfile, versions) - - _build_exe.run(self) - os.unlink(target_versionfile) - with open(cfg.versionfile_source, "w") as f: - LONG = LONG_VERSION_PY[cfg.VCS] - f.write(LONG % - {"DOLLAR": "$", - "STYLE": cfg.style, - "TAG_PREFIX": cfg.tag_prefix, - "PARENTDIR_PREFIX": cfg.parentdir_prefix, - "VERSIONFILE_SOURCE": cfg.versionfile_source, - }) - cmds["build_exe"] = cmd_build_exe - del cmds["build_py"] - - if 'py2exe' in sys.modules: # py2exe enabled? - try: - from py2exe.distutils_buildexe import py2exe as _py2exe # py3 - except ImportError: - from py2exe.build_exe import py2exe as _py2exe # py2 - - class cmd_py2exe(_py2exe): - def run(self): - root = get_root() - cfg = get_config_from_root(root) - versions = get_versions() - target_versionfile = cfg.versionfile_source - print("UPDATING %s" % target_versionfile) - write_to_version_file(target_versionfile, versions) - - _py2exe.run(self) - os.unlink(target_versionfile) - with open(cfg.versionfile_source, "w") as f: - LONG = LONG_VERSION_PY[cfg.VCS] - f.write(LONG % - {"DOLLAR": "$", - "STYLE": cfg.style, - "TAG_PREFIX": cfg.tag_prefix, - "PARENTDIR_PREFIX": cfg.parentdir_prefix, - "VERSIONFILE_SOURCE": cfg.versionfile_source, - }) - cmds["py2exe"] = cmd_py2exe - - # we override different "sdist" commands for both environments - if "setuptools" in sys.modules: - from setuptools.command.sdist import sdist as _sdist - else: - from distutils.command.sdist import sdist as _sdist - - class cmd_sdist(_sdist): - def run(self): - versions = get_versions() - self._versioneer_generated_versions = versions - # unless we update this, the command will keep using the old - # version - self.distribution.metadata.version = versions["version"] - return _sdist.run(self) - - def make_release_tree(self, base_dir, files): - root = get_root() - cfg = get_config_from_root(root) - _sdist.make_release_tree(self, base_dir, files) - # now locate _version.py in the new base_dir directory - # (remembering that it may be a hardlink) and replace it with an - # updated value - target_versionfile = os.path.join(base_dir, cfg.versionfile_source) - print("UPDATING %s" % target_versionfile) - write_to_version_file(target_versionfile, - self._versioneer_generated_versions) - cmds["sdist"] = cmd_sdist - - return cmds - - -CONFIG_ERROR = """ -setup.cfg is missing the necessary Versioneer configuration. You need -a section like: - - [versioneer] - VCS = git - style = pep440 - versionfile_source = src/myproject/_version.py - versionfile_build = myproject/_version.py - tag_prefix = - parentdir_prefix = myproject- - -You will also need to edit your setup.py to use the results: - - import versioneer - setup(version=versioneer.get_version(), - cmdclass=versioneer.get_cmdclass(), ...) - -Please read the docstring in ./versioneer.py for configuration instructions, -edit setup.cfg, and re-run the installer or 'python versioneer.py setup'. -""" - -SAMPLE_CONFIG = """ -# See the docstring in versioneer.py for instructions. Note that you must -# re-run 'versioneer.py setup' after changing this section, and commit the -# resulting files. - -[versioneer] -#VCS = git -#style = pep440 -#versionfile_source = -#versionfile_build = -#tag_prefix = -#parentdir_prefix = - -""" - -INIT_PY_SNIPPET = """ -from ._version import get_versions -__version__ = get_versions()['version'] -del get_versions -""" - - -def do_setup(): - """Main VCS-independent setup function for installing Versioneer.""" - root = get_root() - try: - cfg = get_config_from_root(root) - except (EnvironmentError, configparser.NoSectionError, - configparser.NoOptionError) as e: - if isinstance(e, (EnvironmentError, configparser.NoSectionError)): - print("Adding sample versioneer config to setup.cfg", - file=sys.stderr) - with open(os.path.join(root, "setup.cfg"), "a") as f: - f.write(SAMPLE_CONFIG) - print(CONFIG_ERROR, file=sys.stderr) - return 1 - - print(" creating %s" % cfg.versionfile_source) - with open(cfg.versionfile_source, "w") as f: - LONG = LONG_VERSION_PY[cfg.VCS] - f.write(LONG % {"DOLLAR": "$", - "STYLE": cfg.style, - "TAG_PREFIX": cfg.tag_prefix, - "PARENTDIR_PREFIX": cfg.parentdir_prefix, - "VERSIONFILE_SOURCE": cfg.versionfile_source, - }) - - ipy = os.path.join(os.path.dirname(cfg.versionfile_source), - "__init__.py") - if os.path.exists(ipy): - try: - with open(ipy, "r") as f: - old = f.read() - except EnvironmentError: - old = "" - if INIT_PY_SNIPPET not in old: - print(" appending to %s" % ipy) - with open(ipy, "a") as f: - f.write(INIT_PY_SNIPPET) - else: - print(" %s unmodified" % ipy) - else: - print(" %s doesn't exist, ok" % ipy) - ipy = None - - # Make sure both the top-level "versioneer.py" and versionfile_source - # (PKG/_version.py, used by runtime code) are in MANIFEST.in, so - # they'll be copied into source distributions. Pip won't be able to - # install the package without this. - manifest_in = os.path.join(root, "MANIFEST.in") - simple_includes = set() - try: - with open(manifest_in, "r") as f: - for line in f: - if line.startswith("include "): - for include in line.split()[1:]: - simple_includes.add(include) - except EnvironmentError: - pass - # That doesn't cover everything MANIFEST.in can do - # (http://docs.python.org/2/distutils/sourcedist.html#commands), so - # it might give some false negatives. Appending redundant 'include' - # lines is safe, though. - if "versioneer.py" not in simple_includes: - print(" appending 'versioneer.py' to MANIFEST.in") - with open(manifest_in, "a") as f: - f.write("include versioneer.py\n") - else: - print(" 'versioneer.py' already in MANIFEST.in") - if cfg.versionfile_source not in simple_includes: - print(" appending versionfile_source ('%s') to MANIFEST.in" % - cfg.versionfile_source) - with open(manifest_in, "a") as f: - f.write("include %s\n" % cfg.versionfile_source) - else: - print(" versionfile_source already in MANIFEST.in") - - # Make VCS-specific changes. For git, this means creating/changing - # .gitattributes to mark _version.py for export-subst keyword - # substitution. - do_vcs_install(manifest_in, cfg.versionfile_source, ipy) - return 0 - - -def scan_setup_py(): - """Validate the contents of setup.py against Versioneer's expectations.""" - found = set() - setters = False - errors = 0 - with open("setup.py", "r") as f: - for line in f.readlines(): - if "import versioneer" in line: - found.add("import") - if "versioneer.get_cmdclass()" in line: - found.add("cmdclass") - if "versioneer.get_version()" in line: - found.add("get_version") - if "versioneer.VCS" in line: - setters = True - if "versioneer.versionfile_source" in line: - setters = True - if len(found) != 3: - print("") - print("Your setup.py appears to be missing some important items") - print("(but I might be wrong). Please make sure it has something") - print("roughly like the following:") - print("") - print(" import versioneer") - print(" setup( version=versioneer.get_version(),") - print(" cmdclass=versioneer.get_cmdclass(), ...)") - print("") - errors += 1 - if setters: - print("You should remove lines like 'versioneer.VCS = ' and") - print("'versioneer.versionfile_source = ' . This configuration") - print("now lives in setup.cfg, and should be removed from setup.py") - print("") - errors += 1 - return errors - - -if __name__ == "__main__": - cmd = sys.argv[1] - if cmd == "setup": - errors = do_setup() - errors += scan_setup_py() - if errors: - sys.exit(1) From 255404175a24d1f7b03fbf2ae42923207bf9a83e Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Tue, 14 Jul 2026 10:07:05 -0400 Subject: [PATCH 04/31] CI: modify workflow to run tests using pixi --- .github/workflows/testing.yml | 42 +++++++++++------------------------ 1 file changed, 13 insertions(+), 29 deletions(-) diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 58e458fe..124a3f2e 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -13,54 +13,38 @@ jobs: strategy: matrix: use-ipykernel: [false, true] - python-version: ["3.11", "3.12", "3.13", "3.14"] + python-env: ["py311", "py312", "py313", "py314"] zmq-encoding: ["json", "msgpack"] - # pydantic-version: ["<2.0.0", ">=2.0.0"] group: [1, 2, 3] exclude: - - python-version: "3.11" + - python-env: "py311" zmq-encoding: "msgpack" - - python-version: "3.12" + - python-env: "py312" zmq-encoding: "msgpack" - - python-version: "3.13" + - python-env: "py313" zmq-encoding: "msgpack" - # - python-version: "3.9" - # pydantic-version: "<2.0.0" - # - python-version: "3.10" - # pydantic-version: "<2.0.0" - # - python-version: "3.12" - # pydantic-version: "<2.0.0" fail-fast: false steps: - - uses: actions/checkout@v2 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + - uses: actions/checkout@v4 with: - python-version: ${{ matrix.python-version }} + # Need this to get version number from last tag + fetch-depth: 0 - uses: shogo82148/actions-setup-redis@v1 with: redis-version: "7.x" - name: Install dependencies run: | - # sudo apt install redis + pixi install --environment=${{ matrix.python-env }} + pixi list --environment=${{ matrix.python-env }} + pixi run --environment=${{ matrix.python-env }} pip list + pixi run --environment=${{ matrix.python-env }} conda list - # These packages are installed in the base environment but may be older - # versions. Explicitly upgrade them because they often create - # installation problems if out of date. - python -m pip install --upgrade pip setuptools numpy - - pip install . - pip install -r requirements-dev.txt - # pip install "pydantic${{ matrix.pydantic-version }}" - # pip install bluesky==1.13.1 - - pip list - name: Test with pytest env: USE_IPYKERNEL: ${{ matrix.use-ipykernel }} USE_ZMQ_ENCODING: ${{ matrix.zmq-encoding }} run: | # pytest -k test_ip_kernel_func -vvv - coverage run -m pytest -vv --splits 3 --group ${{ matrix.group }} - coverage report -m + pixi run --environment=${{ matrix.python-env }} coverage run -m pytest -vv --splits 3 --group ${{ matrix.group }} + pixi run --environment=${{ matrix.python-env }} coverage report -m From dd787ab01274907201db86dfed1917106b567db4 Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Tue, 14 Jul 2026 10:13:02 -0400 Subject: [PATCH 05/31] CI: install pixi before running tests --- .github/workflows/testing.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 124a3f2e..21439da0 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -35,6 +35,7 @@ jobs: redis-version: "7.x" - name: Install dependencies run: | + curl -fsSL https://pixi.sh/install.sh | sh pixi install --environment=${{ matrix.python-env }} pixi list --environment=${{ matrix.python-env }} pixi run --environment=${{ matrix.python-env }} pip list From daf3ff8f08bbcd1e977d93d1cbab587712fca1fd Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Tue, 14 Jul 2026 10:16:06 -0400 Subject: [PATCH 06/31] CI: install pixi before running tests --- .github/workflows/testing.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 21439da0..5169c9cf 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -33,9 +33,9 @@ jobs: - uses: shogo82148/actions-setup-redis@v1 with: redis-version: "7.x" + - uses: prefix-dev/setup-pixi@v0.10.0 - name: Install dependencies run: | - curl -fsSL https://pixi.sh/install.sh | sh pixi install --environment=${{ matrix.python-env }} pixi list --environment=${{ matrix.python-env }} pixi run --environment=${{ matrix.python-env }} pip list From 8ba4475f40c3fe69e15ab9a4591f01fcce714319 Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Tue, 14 Jul 2026 10:20:39 -0400 Subject: [PATCH 07/31] CI: remove pixi.lock --- pixi.lock | 4948 ----------------------------------------------------- 1 file changed, 4948 deletions(-) delete mode 100644 pixi.lock diff --git a/pixi.lock b/pixi.lock deleted file mode 100644 index 083bfede..00000000 --- a/pixi.lock +++ /dev/null @@ -1,4948 +0,0 @@ -version: 6 -environments: - default: - channels: - - url: https://conda.anaconda.org/conda-forge/ - indexes: - - https://pypi.org/simple - options: - pypi-prerelease-mode: if-necessary-or-explicit - packages: - linux-64: - - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.3-h0c1763c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.2-pyh145f28c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.6-habeac84_100_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - pypi: https://files.pythonhosted.org/packages/51/89/da0f32b679b8769dd472eb2927308d328bf75c296629fd9f95135afacd0a/aioca-2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d4/2b/04b8a15f3a1c77bc79ddf5c73875327f34b4fa75982df2b76e45e402d364/asttokens-3.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/6b/cfaf3d39f25132c156a068f6b805576c9103a84086019507c70e1911ee7d/black-26.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/8e/99/cc217b2a727fdf730d0c0064bc8c03473dfe5d0528f2bd0c4f59fdab4179/bluesky-1.15.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/c4/b3e049d2aa3766180c78507110543d9d50894cc97f57de543f1be521dcdc/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f3/4f/f94ac1b84d2169cf2ebf64353ce98fd743f85d30678059c514d9b3d6644c/compress_pickle-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/5f/9ff93450ba96b09c7c2b3f81c94de31c89f92292f1380261bd7195bea4ea/contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e1/53/0d3dd963631259d794c898735d5436e68d6a8d40749c419a07ff7c171469/coverage-7.15.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/95/51/67e7cf11a53e40694f720457d5b3a1cdaaa3d5a9a633e482f225456b93ff/debugpy-1.8.21-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/a8/365059bbcd4572cbc41de17fd5b682be5868b218c3c5479071865cab9078/entrypoints-0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/55/57/42c5bb50507c528d9af10879067920d27c5a6b33fbef16c2e1b55de77ccc/epicscorelibs-7.0.10.99.0.1-cp314-cp314-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b2/9e/d410b0ff08a2519d197928afdc1aa36eb47e197f5ba683389b00e216f83c/event_model-1.24.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/60/02/be4a57b60c7149b55b9e3b3c13f609cd8eb5307c751f22bd8fb8d262e75b/filelock-3.29.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/36/e1/a8933a72c45a87177fbde2696e0d0755c8c9062f8c077a961c6215fa27b1/fonttools-4.63.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f1/16/d905e7f53e661ce2c24686c38048d8e2b750ffc4350009d41c4e6c6c9826/h5py-3.16.0-cp314-cp314-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ce/27/83314cfd4800ada7542ba49efc772c7a8949d349c7bec177e4e7fa5257e0/happi-3.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/70/b7/32110aa458690722a1069c7349b8ebe374a6ba0bdf9ef8925a9f37a74978/hiredis-3.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fe/47/deb64c73aec25af7699247e021153a6bfe9a08452f7f7337dcee4aa07a2b/historydict-1.2.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f0/0f/310fb31e39e2d734ccaa2c0fb981ee41f7bd5056ce9bc29b2248bd569169/humanfriendly-10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/49/fa/391e437a34e55095173dca5f24070d89cbc233ff85bf1c29c93248c6588d/imageio-2.37.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bc/a4/d6f91d756f901626a30f47578e0bfdfde401e54a3eb49cb9dce9b855000a/intake-2.0.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3d/02/77b271f5dc58bfbc0b577c877b2365d1ffea2afe66a80c13f2312820348c/ipykernel-7.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/40/3a/948263ca3b9d65bb2b1b0c521b3a49fad5d59ada58724bd87d2bd5ff3f36/ipython-9.15.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3e/95/c7c34aa53c16353c56d0b802fba48d5f5caa2cdee7958acbcb795c830416/isort-8.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/93/242e2eab5fe682ffcb8b0084bde703a41d51e17ee0f3a31ff0d9d813620a/jedi-0.20.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3f/6f/56d39bf385c5c27988aebaf0c18a2a17e960575740100973511018bd904e/jupyter_client-8.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ca/77/71d78d58f15c22db16328a476426f7ac4a60d3a5a7ba3b9627ee2f7903d4/jupyter_console-6.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/f9/b06c934a6aa8bc91f566bd2a214fd04c30506c2d9e2b6b171953216a65b6/kiwisolver-1.5.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/8a/a1/8d812e53a5da1687abb10445275d41a8b13adb781bbf7196ddbcf8d88505/lazy_loader-0.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f1/01/d52c7b11eaa286d49dae619c0eec4aabc0bf3cda7a7467eb77c62c4471f3/lz4-4.4.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/29/dc/6377ecfaa5fef79430f74a1a16638b4e2aa30d4692bae2c19f9d76fe3b01/matplotlib-3.11.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/19/03/8c63e8cf52958534ef688625965ab04c269a6cadd8caef16758b380a821a/msgpack-1.2.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/9b/5d/f25ac7d4fb77cbd53ddc6d05d833c6bf52b12770a44fa9a447eed470ca9a/msgpack_numpy-0.4.8-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c5/3c/3179b85b0e1c3659f0369940200cd6d0fa900e6cefcc7ea0bc6dd0e29ffb/nest_asyncio2-1.7.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/41/5f/0f992cb24560673496c5d68de61913b57166ce530ffda07c1f280e0cc464/numpy-2.5.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/62/5e/3a6a3e90f35cea3853c45e5d5fb9b7192ce4384616f932cf7591298ab6e1/numpydoc-1.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/17/83/6dba32b85f31868400440dc7ad2ca1eab94cbbf3a7b0459ed39f8311a9e2/opentelemetry_api-1.43.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ef/80/c6dbf1f8d14fbb5615d2e99b798d61b76eb937f09e1e948d0e8aaf8873b2/ophyd-1.11.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1e/2c/76ac5e485f6405fc0f1dbbd1c98b7c1137d4aa5c1e49ea9e69bbd8d22ae1/ophyd_async-0.19.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/99/5d/8268b644392ee874ee82a635cd0df1773de230bde356c38de28e298392cc/parso-0.8.7-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/1b/dd/a9fe6a0a09512da23951c68bf36466aeecd89def3183dc095edbc807ddc5/pint-0.25.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fe/be/2e6798ace5cc036f5d05d36b7b2fd85346f1a708c87060890b070d0ec607/prettytable-3.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/29/0ed312ec800fb536f93783215126cee4b8977dcfeccba6f0f44df0cc87d7/pyarrow-25.0.0-cp314-cp314-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/90/cb/c13d8a74419dde9590ed6fab293b516f68316ac87d06569b79b5f446d519/pydantic_numpy-8.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ae/a1/d4423657caaa8be9b31e491592b49cebdcfd434d3e74512ce71f6ec39905/pytest_split-0.11.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/63/cf/91b94238c843bfbae0a6674df45015aa3908b91454c496b2eb29e7991255/pytest_xprocess-1.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9d/ae/84bc0d2440c95772272bb6f4b3d09ccf08b2898fce89b3d4f969a9fc74e9/python_discovery-1.4.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/04/e8135ebd1ad02c56ec633277529b2602ff99ff634be76cdba5744cf554fd/python_multipart-0.0.32-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0f/95/70d7041273890f9f97a24234c00b746e8da86df462620194cef1d411ddeb/pytokens-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fd/0a/c2345ebf1ebe70840ce3f6c6ee612f8fa749cfbd1b03069c53bf0c62aaad/redis-8.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/9c/0d1fdc2e7aba23e290d603bc494e97bd205bae262ce33c6b32a69768ed5e/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/af/fe/b6045c782f1fd1ae317d2a6ca1884857ce5c20f59befe6ab25a8603c43a7/ruamel_yaml-0.18.17-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a1/5c/8b56b08db91e569d0a4fbfa3e492ed2026081bdd7e892f63ba1c88a2f548/ruamel_yaml_clib-0.2.15-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/68/b9/f44b139096467996b4d85589d9880fd55f0c80a204d298a1b73d0adc2654/scanspec-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/73/c3/cec6a3cbaadfdcc02bd6ff02f3abfe09eaa7f4d4e0a525a1e3a3f4bce49c/scikit_image-0.26.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/7f/c4/bc41eb19b0fd0db868f4132920879019318d80cc522ad8f2bca4611af808/scipy-1.18.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/40/e1e72872c6354b306daef1703549e8e83b4d43cfea356311bf722a043752/setuptools-83.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/51/6b/3feec8016ab2263946c4480510d2d1a7924a5400c455974a7a0344bb4304/setuptools_dso-2.12.3-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/78/91/3635cdb13318cb0a328abaa69e2b91251caad39d6779aa308098f341f6cb/simplejson-4.1.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/87/c7/b5c8015d823bfda1a346adb2c634a2101d50bb75d421eb6dcb31acd25ebc/sphinx_rtd_theme-3.1.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/85/749bd22d1a68db7291c89e2ebca53f4306c3f205853cf31e9de279034c3c/sphinxcontrib_jquery-4.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1d/f0/1ff90a1d1dd02de23feafdf9dffaecef3958348be5c192df56670ccb4f86/stamina-26.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/59/208f71d70ddc6184f79b8c6d87d46eb7d7b12c19186a817dec9c9c3f3693/tifffile-2026.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/37/d8/ef374952fd5da67d4463122c2b8e5a96536ec10b4b339254c6dcde81d01c/tornado-6.5.7-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/22/2a/5e5e750890ada51017d18d0d4c30da696e5b5bd3180947729927628fc3cb/tqdm-4.68.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/96/8d/1080ee4c231f361b6ce4470d556c8c435b67c7e0753aaa641497ee92f88b/traitlets-5.15.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/72/89/0265b2b79424ed05b8d1e9c8fca71e1b150478e5b0c19aa50b0ae397326e/velocity_profile-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/7c/4e7225d46d634a0d8d534dd8a6ce0c319d09b4d0cf0337eb314ca4789d8c/virtualenv-21.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/96/42/3e5985a0a7e57de470b320c6d6a1a67c844f6737a587f3d44dd13d1819e7/wcwidth-0.8.2-py3-none-any.whl - - pypi: ./ - py311: - channels: - - url: https://conda.anaconda.org/conda-forge/ - indexes: - - https://pypi.org/simple - options: - pypi-prerelease-mode: if-necessary-or-explicit - packages: - linux-64: - - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.3-h0c1763c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.2-pyh8b19718_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.15-h7508c33_1_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-83.0.0-pyh332efcf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - pypi: https://files.pythonhosted.org/packages/51/89/da0f32b679b8769dd472eb2927308d328bf75c296629fd9f95135afacd0a/aioca-2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d4/2b/04b8a15f3a1c77bc79ddf5c73875327f34b4fa75982df2b76e45e402d364/asttokens-3.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/06/3a/7c448bc623fcdfa96672531beb5a616ea5e64f6975955254d7731ffb0ad9/black-26.5.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/8e/99/cc217b2a727fdf730d0c0064bc8c03473dfe5d0528f2bd0c4f59fdab4179/bluesky-1.15.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a5/34/49b9060e8418b14fb5cba9cf6bfb383111e2538a03a1fb18e66a95aeb3d5/charset_normalizer-3.4.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f3/4f/f94ac1b84d2169cf2ebf64353ce98fd743f85d30678059c514d9b3d6644c/compress_pickle-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5f/4b/6157f24ca425b89fe2eb7e7be642375711ab671135be21e6faa100f7448c/contourpy-1.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/05/37/5e439725a96de592309725550c8df639c359c209dcb4b152ed46032d4c0d/coverage-7.15.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/95/51/67e7cf11a53e40694f720457d5b3a1cdaaa3d5a9a633e482f225456b93ff/debugpy-1.8.21-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/a8/365059bbcd4572cbc41de17fd5b682be5868b218c3c5479071865cab9078/entrypoints-0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/12/29/ce9c8e81a6b9be7722ac00cb592ce6b652405eecb178bf410810732957ec/epicscorelibs-7.0.10.99.0.1-cp311-cp311-manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b2/9e/d410b0ff08a2519d197928afdc1aa36eb47e197f5ba683389b00e216f83c/event_model-1.24.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/60/02/be4a57b60c7149b55b9e3b3c13f609cd8eb5307c751f22bd8fb8d262e75b/filelock-3.29.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0b/43/a81f20050a3115b57d62c8e781446949512eac36690dc384ccea65ff4cc1/fonttools-4.63.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/a0/c1f604538ff6db22a0690be2dc44ab59178e115f63c917794e529356ab23/h5py-3.16.0-cp311-cp311-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ce/27/83314cfd4800ada7542ba49efc772c7a8949d349c7bec177e4e7fa5257e0/happi-3.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/07/716ffeb049377d92da6261c5563e554b82336ce3eafb11eb4510c5558be7/hiredis-3.4.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fe/47/deb64c73aec25af7699247e021153a6bfe9a08452f7f7337dcee4aa07a2b/historydict-1.2.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f0/0f/310fb31e39e2d734ccaa2c0fb981ee41f7bd5056ce9bc29b2248bd569169/humanfriendly-10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/49/fa/391e437a34e55095173dca5f24070d89cbc233ff85bf1c29c93248c6588d/imageio-2.37.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bc/a4/d6f91d756f901626a30f47578e0bfdfde401e54a3eb49cb9dce9b855000a/intake-2.0.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3d/02/77b271f5dc58bfbc0b577c877b2365d1ffea2afe66a80c13f2312820348c/ipykernel-7.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/40/3a/948263ca3b9d65bb2b1b0c521b3a49fad5d59ada58724bd87d2bd5ff3f36/ipython-9.15.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3e/95/c7c34aa53c16353c56d0b802fba48d5f5caa2cdee7958acbcb795c830416/isort-8.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/93/242e2eab5fe682ffcb8b0084bde703a41d51e17ee0f3a31ff0d9d813620a/jedi-0.20.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3f/6f/56d39bf385c5c27988aebaf0c18a2a17e960575740100973511018bd904e/jupyter_client-8.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ca/77/71d78d58f15c22db16328a476426f7ac4a60d3a5a7ba3b9627ee2f7903d4/jupyter_console-6.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/46/bddc13df6c2a40741e0cc7865bb1c9ed4796b6760bd04ce5fae3928ef917/kiwisolver-1.5.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/8a/a1/8d812e53a5da1687abb10445275d41a8b13adb781bbf7196ddbcf8d88505/lazy_loader-0.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/25/3b/b55cb577aa148ed4e383e9700c36f70b651cd434e1c07568f0a86c9d5fbb/lz4-4.4.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/53/f4/f0b4f9ba7ec14a7af8151f3ad71ecfe3561e6ba38cfab1db3681ba4ca112/matplotlib-3.11.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/03/8d/671d81534ea0e2b0e8a121be100020da09eb78861fe3aa8f3ef7dcd3bed1/msgpack-1.2.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/9b/5d/f25ac7d4fb77cbd53ddc6d05d833c6bf52b12770a44fa9a447eed470ca9a/msgpack_numpy-0.4.8-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c5/3c/3179b85b0e1c3659f0369940200cd6d0fa900e6cefcc7ea0bc6dd0e29ffb/nest_asyncio2-1.7.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/02/03/74fe2a4cb3817d94d86402f2506554130a2f01414e299b5a843e5a8a957f/numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/62/5e/3a6a3e90f35cea3853c45e5d5fb9b7192ce4384616f932cf7591298ab6e1/numpydoc-1.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/17/83/6dba32b85f31868400440dc7ad2ca1eab94cbbf3a7b0459ed39f8311a9e2/opentelemetry_api-1.43.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ef/80/c6dbf1f8d14fbb5615d2e99b798d61b76eb937f09e1e948d0e8aaf8873b2/ophyd-1.11.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1e/2c/76ac5e485f6405fc0f1dbbd1c98b7c1137d4aa5c1e49ea9e69bbd8d22ae1/ophyd_async-0.19.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/32/f1/bbecd2f867b97abebe0f9b53d750f862251b40337e061b36676ded3d920f/pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/99/5d/8268b644392ee874ee82a635cd0df1773de230bde356c38de28e298392cc/parso-0.8.7-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/2d/ede717bc1144f63886c21fd349bb95860b0d1a21149ff16f2bb362b612b6/pillow-12.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/1b/dd/a9fe6a0a09512da23951c68bf36466aeecd89def3183dc095edbc807ddc5/pint-0.25.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fe/be/2e6798ace5cc036f5d05d36b7b2fd85346f1a708c87060890b070d0ec607/prettytable-3.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/79/72d704b02bc5fc6d06954d76a0208c1e79cad3ab370f6d6a91ffe5078870/pyarrow-25.0.0-cp311-cp311-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/50/540cd3aeefc041beb111125c4bff779831a2111fc6b15a9138cda277d32c/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/90/cb/c13d8a74419dde9590ed6fab293b516f68316ac87d06569b79b5f446d519/pydantic_numpy-8.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ae/a1/d4423657caaa8be9b31e491592b49cebdcfd434d3e74512ce71f6ec39905/pytest_split-0.11.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/63/cf/91b94238c843bfbae0a6674df45015aa3908b91454c496b2eb29e7991255/pytest_xprocess-1.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9d/ae/84bc0d2440c95772272bb6f4b3d09ccf08b2898fce89b3d4f969a9fc74e9/python_discovery-1.4.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/04/e8135ebd1ad02c56ec633277529b2602ff99ff634be76cdba5744cf554fd/python_multipart-0.0.32-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/17/50/bc0394b4ad5b1601be22fa43652173d47e4c9efbf0044c62e9a59b747c56/pytokens-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b1/c4/2a6fe5111a01005fc7af3878259ce17684fabb8852815eda6225620f3c59/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fd/0a/c2345ebf1ebe70840ce3f6c6ee612f8fa749cfbd1b03069c53bf0c62aaad/redis-8.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5e/19/7e98f468bd50346faff5b10e5297374b443bfdddacc8e9fbc65984539597/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/af/fe/b6045c782f1fd1ae317d2a6ca1884857ce5c20f59befe6ab25a8603c43a7/ruamel_yaml-0.18.17-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/aa/ed/3fb20a1a96b8dc645d88c4072df481fe06e0289e4d528ebbdcc044ebc8b3/ruamel_yaml_clib-0.2.15-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/68/b9/f44b139096467996b4d85589d9880fd55f0c80a204d298a1b73d0adc2654/scanspec-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a5/2a/e71c1a7d90e70da67b88ccc609bd6ae54798d5847369b15d3a8052232f9d/scikit_image-0.26.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/09/7d/af933f0f6e0767995b4e2d705a0665e454d1c19402aa7e895de3951ebb04/scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/51/6b/3feec8016ab2263946c4480510d2d1a7924a5400c455974a7a0344bb4304/setuptools_dso-2.12.3-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/7e/c9e6c0c4ad8415e64dad0c47f619b556b02680a41631b4dbc281d55dc54d/simplejson-4.1.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/87/c7/b5c8015d823bfda1a346adb2c634a2101d50bb75d421eb6dcb31acd25ebc/sphinx_rtd_theme-3.1.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/85/749bd22d1a68db7291c89e2ebca53f4306c3f205853cf31e9de279034c3c/sphinxcontrib_jquery-4.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1d/f0/1ff90a1d1dd02de23feafdf9dffaecef3958348be5c192df56670ccb4f86/stamina-26.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/e4/e804505f87627cd8cdae9c010c47c4485fd8c1ce31a7dd0ab7fcc4707377/tifffile-2026.3.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/37/d8/ef374952fd5da67d4463122c2b8e5a96536ec10b4b339254c6dcde81d01c/tornado-6.5.7-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/22/2a/5e5e750890ada51017d18d0d4c30da696e5b5bd3180947729927628fc3cb/tqdm-4.68.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/96/8d/1080ee4c231f361b6ce4470d556c8c435b67c7e0753aaa641497ee92f88b/traitlets-5.15.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/72/89/0265b2b79424ed05b8d1e9c8fca71e1b150478e5b0c19aa50b0ae397326e/velocity_profile-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/7c/4e7225d46d634a0d8d534dd8a6ce0c319d09b4d0cf0337eb314ca4789d8c/virtualenv-21.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/96/42/3e5985a0a7e57de470b320c6d6a1a67c844f6737a587f3d44dd13d1819e7/wcwidth-0.8.2-py3-none-any.whl - - pypi: ./ - py312: - channels: - - url: https://conda.anaconda.org/conda-forge/ - indexes: - - https://pypi.org/simple - options: - pypi-prerelease-mode: if-necessary-or-explicit - packages: - linux-64: - - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.3-h0c1763c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.2-pyh8b19718_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.13-hd63d673_0_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-83.0.0-pyh332efcf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - pypi: https://files.pythonhosted.org/packages/51/89/da0f32b679b8769dd472eb2927308d328bf75c296629fd9f95135afacd0a/aioca-2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d4/2b/04b8a15f3a1c77bc79ddf5c73875327f34b4fa75982df2b76e45e402d364/asttokens-3.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1f/0e/36044316b65ca471d3bb6d3703fd06fb50c6b727c3562f6a5a3153634f88/black-26.5.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/8e/99/cc217b2a727fdf730d0c0064bc8c03473dfe5d0528f2bd0c4f59fdab4179/bluesky-1.15.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/01/c4/4fa4c8b3097a11f3c5f09a35b72ed6855fb1d332469504962ab7bafcc702/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f3/4f/f94ac1b84d2169cf2ebf64353ce98fd743f85d30678059c514d9b3d6644c/compress_pickle-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e5/81/c7009ed7ea9765adb2b9d095054d748266fae5f07ac6c5f925f33715fcde/coverage-7.15.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/95/51/67e7cf11a53e40694f720457d5b3a1cdaaa3d5a9a633e482f225456b93ff/debugpy-1.8.21-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/a8/365059bbcd4572cbc41de17fd5b682be5868b218c3c5479071865cab9078/entrypoints-0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4f/7b/55f41ec7746713db21aff5e794fc98b5a2e4c40fc72d69f6a1cdb04df360/epicscorelibs-7.0.10.99.0.1-cp312-cp312-manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b2/9e/d410b0ff08a2519d197928afdc1aa36eb47e197f5ba683389b00e216f83c/event_model-1.24.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/60/02/be4a57b60c7149b55b9e3b3c13f609cd8eb5307c751f22bd8fb8d262e75b/filelock-3.29.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/c7/2342da9830e3e9d4870305ca5d2091d2a83284f2953079b7bdd3b5e029d8/fonttools-4.63.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/e9/1a19e42cd43cc1365e127db6aae85e1c671da1d9a5d746f4d34a50edb577/h5py-3.16.0-cp312-cp312-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ce/27/83314cfd4800ada7542ba49efc772c7a8949d349c7bec177e4e7fa5257e0/happi-3.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1e/8c/440369f727dcb856f3eeda238d6e67781b180feaa831bd28997d8af10c3b/hiredis-3.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fe/47/deb64c73aec25af7699247e021153a6bfe9a08452f7f7337dcee4aa07a2b/historydict-1.2.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f0/0f/310fb31e39e2d734ccaa2c0fb981ee41f7bd5056ce9bc29b2248bd569169/humanfriendly-10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/49/fa/391e437a34e55095173dca5f24070d89cbc233ff85bf1c29c93248c6588d/imageio-2.37.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bc/a4/d6f91d756f901626a30f47578e0bfdfde401e54a3eb49cb9dce9b855000a/intake-2.0.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3d/02/77b271f5dc58bfbc0b577c877b2365d1ffea2afe66a80c13f2312820348c/ipykernel-7.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/40/3a/948263ca3b9d65bb2b1b0c521b3a49fad5d59ada58724bd87d2bd5ff3f36/ipython-9.15.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3e/95/c7c34aa53c16353c56d0b802fba48d5f5caa2cdee7958acbcb795c830416/isort-8.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/93/242e2eab5fe682ffcb8b0084bde703a41d51e17ee0f3a31ff0d9d813620a/jedi-0.20.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3f/6f/56d39bf385c5c27988aebaf0c18a2a17e960575740100973511018bd904e/jupyter_client-8.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ca/77/71d78d58f15c22db16328a476426f7ac4a60d3a5a7ba3b9627ee2f7903d4/jupyter_console-6.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c4/13/680c54afe3e65767bed7ec1a15571e1a2f1257128733851ade24abcefbcc/kiwisolver-1.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/8a/a1/8d812e53a5da1687abb10445275d41a8b13adb781bbf7196ddbcf8d88505/lazy_loader-0.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/55/d9/e3867222474f6c1b76e89f3bd914595af69f55bf2c1866e984c548afdc15/lz4-4.4.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/94/95/7f522393c88313336b20d70fc849555757b2e5febc22b83b3a3f0fd4bce9/matplotlib-3.11.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/fd/6adabd4f6d5e686f97dd02ce7fce3fe4cf672cbac36b8f67ff4040e8ad8b/msgpack-1.2.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/9b/5d/f25ac7d4fb77cbd53ddc6d05d833c6bf52b12770a44fa9a447eed470ca9a/msgpack_numpy-0.4.8-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c5/3c/3179b85b0e1c3659f0369940200cd6d0fa900e6cefcc7ea0bc6dd0e29ffb/nest_asyncio2-1.7.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b8/a9/6e73d68500f80773f65f0654ea932019d6694329a0eb0ed0533de38df376/numpy-2.5.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/62/5e/3a6a3e90f35cea3853c45e5d5fb9b7192ce4384616f932cf7591298ab6e1/numpydoc-1.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/17/83/6dba32b85f31868400440dc7ad2ca1eab94cbbf3a7b0459ed39f8311a9e2/opentelemetry_api-1.43.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ef/80/c6dbf1f8d14fbb5615d2e99b798d61b76eb937f09e1e948d0e8aaf8873b2/ophyd-1.11.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1e/2c/76ac5e485f6405fc0f1dbbd1c98b7c1137d4aa5c1e49ea9e69bbd8d22ae1/ophyd_async-0.19.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/65/b6/09b01cdbc15224e2850365192d17b7bdebb8bdbd8780ed221fcdf0d9a515/pandas-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/99/5d/8268b644392ee874ee82a635cd0df1773de230bde356c38de28e298392cc/parso-0.8.7-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/84/21/a35af28dcc61f37ed850a2d64c65c701321dfbf25085e469d5559360cbbf/pillow-12.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/1b/dd/a9fe6a0a09512da23951c68bf36466aeecd89def3183dc095edbc807ddc5/pint-0.25.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fe/be/2e6798ace5cc036f5d05d36b7b2fd85346f1a708c87060890b070d0ec607/prettytable-3.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/55/0e/cd705c042bc4fe7022478db577fcab4abdcfabb9bc37ab7a75556b3fcb2b/pyarrow-25.0.0-cp312-cp312-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/90/cb/c13d8a74419dde9590ed6fab293b516f68316ac87d06569b79b5f446d519/pydantic_numpy-8.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ae/a1/d4423657caaa8be9b31e491592b49cebdcfd434d3e74512ce71f6ec39905/pytest_split-0.11.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/63/cf/91b94238c843bfbae0a6674df45015aa3908b91454c496b2eb29e7991255/pytest_xprocess-1.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9d/ae/84bc0d2440c95772272bb6f4b3d09ccf08b2898fce89b3d4f969a9fc74e9/python_discovery-1.4.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/04/e8135ebd1ad02c56ec633277529b2602ff99ff634be76cdba5744cf554fd/python_multipart-0.0.32-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bf/3c/2d5297d82286f6f3d92770289fd439956b201c0a4fc7e72efb9b2293758e/pytokens-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fd/0a/c2345ebf1ebe70840ce3f6c6ee612f8fa749cfbd1b03069c53bf0c62aaad/redis-8.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/8f/d2f3f532616be4d06c316ef119683e832bd3d41e112bf3a88f4151c95b17/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/af/fe/b6045c782f1fd1ae317d2a6ca1884857ce5c20f59befe6ab25a8603c43a7/ruamel_yaml-0.18.17-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/61/62/150c841f24cda9e30f588ef396ed83f64cfdc13b92d2f925bb96df337ba9/ruamel_yaml_clib-0.2.15-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/68/b9/f44b139096467996b4d85589d9880fd55f0c80a204d298a1b73d0adc2654/scanspec-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/a2/70401a107d6d7466d64b466927e6b96fcefa99d57494b972608e2f8be50f/scikit_image-0.26.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/dd/aa/1b939f6c67ed68635bb538e6752d3dacc02f66535182e939a89581a44e9c/scipy-1.18.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/51/6b/3feec8016ab2263946c4480510d2d1a7924a5400c455974a7a0344bb4304/setuptools_dso-2.12.3-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/b6/156a8de1e1b47694f0e7de6675866936608d45dc68388fd017d36f8693be/simplejson-4.1.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/87/c7/b5c8015d823bfda1a346adb2c634a2101d50bb75d421eb6dcb31acd25ebc/sphinx_rtd_theme-3.1.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/85/749bd22d1a68db7291c89e2ebca53f4306c3f205853cf31e9de279034c3c/sphinxcontrib_jquery-4.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1d/f0/1ff90a1d1dd02de23feafdf9dffaecef3958348be5c192df56670ccb4f86/stamina-26.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/59/208f71d70ddc6184f79b8c6d87d46eb7d7b12c19186a817dec9c9c3f3693/tifffile-2026.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/37/d8/ef374952fd5da67d4463122c2b8e5a96536ec10b4b339254c6dcde81d01c/tornado-6.5.7-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/22/2a/5e5e750890ada51017d18d0d4c30da696e5b5bd3180947729927628fc3cb/tqdm-4.68.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/96/8d/1080ee4c231f361b6ce4470d556c8c435b67c7e0753aaa641497ee92f88b/traitlets-5.15.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/72/89/0265b2b79424ed05b8d1e9c8fca71e1b150478e5b0c19aa50b0ae397326e/velocity_profile-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/7c/4e7225d46d634a0d8d534dd8a6ce0c319d09b4d0cf0337eb314ca4789d8c/virtualenv-21.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/96/42/3e5985a0a7e57de470b320c6d6a1a67c844f6737a587f3d44dd13d1819e7/wcwidth-0.8.2-py3-none-any.whl - - pypi: ./ - py313: - channels: - - url: https://conda.anaconda.org/conda-forge/ - indexes: - - https://pypi.org/simple - options: - pypi-prerelease-mode: if-necessary-or-explicit - packages: - linux-64: - - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.3-h0c1763c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.2-pyh145f28c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.14-h6add32d_100_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - pypi: https://files.pythonhosted.org/packages/51/89/da0f32b679b8769dd472eb2927308d328bf75c296629fd9f95135afacd0a/aioca-2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d4/2b/04b8a15f3a1c77bc79ddf5c73875327f34b4fa75982df2b76e45e402d364/asttokens-3.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fb/24/8e7b9a2fa61b0afd82209efe937557d180a1fa055bd7f6161eb9defc3719/black-26.5.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/8e/99/cc217b2a727fdf730d0c0064bc8c03473dfe5d0528f2bd0c4f59fdab4179/bluesky-1.15.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ea/f8/72eb13dcabe7257035cea8aefd922caad2f110d252bf9f67c4c2ca763aee/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f3/4f/f94ac1b84d2169cf2ebf64353ce98fd743f85d30678059c514d9b3d6644c/compress_pickle-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4b/32/e0f13a1c5b0f8572d0ec6ae2f6c677b7991fafd95da523159c19eff0696a/contourpy-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/1c/5e/caf3abbdbb22629626160ffc9c017eb995b7cb11c0be46b974834cef1792/coverage-7.15.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/95/51/67e7cf11a53e40694f720457d5b3a1cdaaa3d5a9a633e482f225456b93ff/debugpy-1.8.21-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/a8/365059bbcd4572cbc41de17fd5b682be5868b218c3c5479071865cab9078/entrypoints-0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7c/aa/3b0faa7eea6a2957af7ee116f08b5edd99eff7e7461e22ac613b0a8d38ea/epicscorelibs-7.0.10.99.0.1-cp313-cp313-manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b2/9e/d410b0ff08a2519d197928afdc1aa36eb47e197f5ba683389b00e216f83c/event_model-1.24.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/60/02/be4a57b60c7149b55b9e3b3c13f609cd8eb5307c751f22bd8fb8d262e75b/filelock-3.29.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/36/0b805d8c485f872f65a509cbe3b58a5d0d17bee855333b54a150c79d3061/fonttools-4.63.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bd/98/ef2b6fe2903e377cbe870c3b2800d62552f1e3dbe81ce49e1923c53d1c5c/h5py-3.16.0-cp313-cp313-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ce/27/83314cfd4800ada7542ba49efc772c7a8949d349c7bec177e4e7fa5257e0/happi-3.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/33/b5/ff8fe4f812348f09d2943b109cb64c5301af4f601e1cf026518e93a72fff/hiredis-3.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fe/47/deb64c73aec25af7699247e021153a6bfe9a08452f7f7337dcee4aa07a2b/historydict-1.2.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f0/0f/310fb31e39e2d734ccaa2c0fb981ee41f7bd5056ce9bc29b2248bd569169/humanfriendly-10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/49/fa/391e437a34e55095173dca5f24070d89cbc233ff85bf1c29c93248c6588d/imageio-2.37.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bc/a4/d6f91d756f901626a30f47578e0bfdfde401e54a3eb49cb9dce9b855000a/intake-2.0.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3d/02/77b271f5dc58bfbc0b577c877b2365d1ffea2afe66a80c13f2312820348c/ipykernel-7.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/40/3a/948263ca3b9d65bb2b1b0c521b3a49fad5d59ada58724bd87d2bd5ff3f36/ipython-9.15.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3e/95/c7c34aa53c16353c56d0b802fba48d5f5caa2cdee7958acbcb795c830416/isort-8.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/93/242e2eab5fe682ffcb8b0084bde703a41d51e17ee0f3a31ff0d9d813620a/jedi-0.20.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3f/6f/56d39bf385c5c27988aebaf0c18a2a17e960575740100973511018bd904e/jupyter_client-8.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ca/77/71d78d58f15c22db16328a476426f7ac4a60d3a5a7ba3b9627ee2f7903d4/jupyter_console-6.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2b/0a/7b98e1e119878a27ba8618ca1e18b14f992ff1eda40f47bccccf4de44121/kiwisolver-1.5.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/8a/a1/8d812e53a5da1687abb10445275d41a8b13adb781bbf7196ddbcf8d88505/lazy_loader-0.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/fb/ba9256c48266a09012ed1d9b0253b9aa4fe9cdff094f8febf5b26a4aa2a2/lz4-4.4.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/a4/c0/1117d53077e3ac3152503a84e9cf7a5c239576805ee71276e80c2aaa7471/matplotlib-3.11.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/79/d3/36a46a8ed992b781acbc05928bd5bee3c810cb0c3563bf81a7b0c04a1a76/msgpack-1.2.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/9b/5d/f25ac7d4fb77cbd53ddc6d05d833c6bf52b12770a44fa9a447eed470ca9a/msgpack_numpy-0.4.8-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c5/3c/3179b85b0e1c3659f0369940200cd6d0fa900e6cefcc7ea0bc6dd0e29ffb/nest_asyncio2-1.7.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ed/a7/2bcd3fdbb87804755c35b729bf8709d62025c5f4cfd7d5b2415997097515/numpy-2.5.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/62/5e/3a6a3e90f35cea3853c45e5d5fb9b7192ce4384616f932cf7591298ab6e1/numpydoc-1.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/17/83/6dba32b85f31868400440dc7ad2ca1eab94cbbf3a7b0459ed39f8311a9e2/opentelemetry_api-1.43.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ef/80/c6dbf1f8d14fbb5615d2e99b798d61b76eb937f09e1e948d0e8aaf8873b2/ophyd-1.11.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1e/2c/76ac5e485f6405fc0f1dbbd1c98b7c1137d4aa5c1e49ea9e69bbd8d22ae1/ophyd_async-0.19.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/99/68/1237369725aa617bb358263d535803e3053fdbc593513ec5ed9c9896b5b6/pandas-3.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/99/5d/8268b644392ee874ee82a635cd0df1773de230bde356c38de28e298392cc/parso-0.8.7-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/62/de5bdd77d935331f4f802edc11e4d82950f642caad6cb2f949837b8560e2/pillow-12.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/1b/dd/a9fe6a0a09512da23951c68bf36466aeecd89def3183dc095edbc807ddc5/pint-0.25.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fe/be/2e6798ace5cc036f5d05d36b7b2fd85346f1a708c87060890b070d0ec607/prettytable-3.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b5/5d/f790fb6965ab54c9da0dda7856abc75fd0d7648d865f8d603c111d203a64/pyarrow-25.0.0-cp313-cp313-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/07/f8/41db9de19d7987d6b04715a02b3b40aea467000275d9d758ffaa31af7d50/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/90/cb/c13d8a74419dde9590ed6fab293b516f68316ac87d06569b79b5f446d519/pydantic_numpy-8.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ae/a1/d4423657caaa8be9b31e491592b49cebdcfd434d3e74512ce71f6ec39905/pytest_split-0.11.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/63/cf/91b94238c843bfbae0a6674df45015aa3908b91454c496b2eb29e7991255/pytest_xprocess-1.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9d/ae/84bc0d2440c95772272bb6f4b3d09ccf08b2898fce89b3d4f969a9fc74e9/python_discovery-1.4.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/04/e8135ebd1ad02c56ec633277529b2602ff99ff634be76cdba5744cf554fd/python_multipart-0.0.32-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/d2/afe5c7f8607018beb99971489dbb846508f1b8f351fcefc225fcf4b2adc0/pytokens-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fd/0a/c2345ebf1ebe70840ce3f6c6ee612f8fa749cfbd1b03069c53bf0c62aaad/redis-8.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/57/d7/fe978efc2ae50abe48eb7464668ea99f53c010c60aeebb7b35ad27f23661/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/af/fe/b6045c782f1fd1ae317d2a6ca1884857ce5c20f59befe6ab25a8603c43a7/ruamel_yaml-0.18.17-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ff/5d/e4f84c9c448613e12bd62e90b23aa127ea4c46b697f3d760acc32cb94f25/ruamel_yaml_clib-0.2.15-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/68/b9/f44b139096467996b4d85589d9880fd55f0c80a204d298a1b73d0adc2654/scanspec-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a3/b8/0d8eeb5a9fd7d34ba84f8a55753a0a3e2b5b51b2a5a0ade648a8db4a62f7/scikit_image-0.26.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/f6/af/e8fe5fb136f51e2b01678b92cb4106d10d8cd68ec147ead2e7cb0ac75398/scipy-1.18.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/40/e1e72872c6354b306daef1703549e8e83b4d43cfea356311bf722a043752/setuptools-83.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/51/6b/3feec8016ab2263946c4480510d2d1a7924a5400c455974a7a0344bb4304/setuptools_dso-2.12.3-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/38/2e/21a3ede87f0bf82d6c7bcb90480d50a6490eb974c6ab20881188e440957c/simplejson-4.1.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/87/c7/b5c8015d823bfda1a346adb2c634a2101d50bb75d421eb6dcb31acd25ebc/sphinx_rtd_theme-3.1.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/85/749bd22d1a68db7291c89e2ebca53f4306c3f205853cf31e9de279034c3c/sphinxcontrib_jquery-4.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1d/f0/1ff90a1d1dd02de23feafdf9dffaecef3958348be5c192df56670ccb4f86/stamina-26.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/59/208f71d70ddc6184f79b8c6d87d46eb7d7b12c19186a817dec9c9c3f3693/tifffile-2026.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/37/d8/ef374952fd5da67d4463122c2b8e5a96536ec10b4b339254c6dcde81d01c/tornado-6.5.7-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/22/2a/5e5e750890ada51017d18d0d4c30da696e5b5bd3180947729927628fc3cb/tqdm-4.68.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/96/8d/1080ee4c231f361b6ce4470d556c8c435b67c7e0753aaa641497ee92f88b/traitlets-5.15.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/72/89/0265b2b79424ed05b8d1e9c8fca71e1b150478e5b0c19aa50b0ae397326e/velocity_profile-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/7c/4e7225d46d634a0d8d534dd8a6ce0c319d09b4d0cf0337eb314ca4789d8c/virtualenv-21.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/96/42/3e5985a0a7e57de470b320c6d6a1a67c844f6737a587f3d44dd13d1819e7/wcwidth-0.8.2-py3-none-any.whl - - pypi: ./ - py314: - channels: - - url: https://conda.anaconda.org/conda-forge/ - indexes: - - https://pypi.org/simple - options: - pypi-prerelease-mode: if-necessary-or-explicit - packages: - linux-64: - - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.3-h0c1763c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.2-pyh145f28c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.6-habeac84_100_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - pypi: https://files.pythonhosted.org/packages/51/89/da0f32b679b8769dd472eb2927308d328bf75c296629fd9f95135afacd0a/aioca-2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d4/2b/04b8a15f3a1c77bc79ddf5c73875327f34b4fa75982df2b76e45e402d364/asttokens-3.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/6b/cfaf3d39f25132c156a068f6b805576c9103a84086019507c70e1911ee7d/black-26.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/8e/99/cc217b2a727fdf730d0c0064bc8c03473dfe5d0528f2bd0c4f59fdab4179/bluesky-1.15.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/c4/b3e049d2aa3766180c78507110543d9d50894cc97f57de543f1be521dcdc/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f3/4f/f94ac1b84d2169cf2ebf64353ce98fd743f85d30678059c514d9b3d6644c/compress_pickle-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/5f/9ff93450ba96b09c7c2b3f81c94de31c89f92292f1380261bd7195bea4ea/contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e1/53/0d3dd963631259d794c898735d5436e68d6a8d40749c419a07ff7c171469/coverage-7.15.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/95/51/67e7cf11a53e40694f720457d5b3a1cdaaa3d5a9a633e482f225456b93ff/debugpy-1.8.21-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/a8/365059bbcd4572cbc41de17fd5b682be5868b218c3c5479071865cab9078/entrypoints-0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/55/57/42c5bb50507c528d9af10879067920d27c5a6b33fbef16c2e1b55de77ccc/epicscorelibs-7.0.10.99.0.1-cp314-cp314-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b2/9e/d410b0ff08a2519d197928afdc1aa36eb47e197f5ba683389b00e216f83c/event_model-1.24.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/60/02/be4a57b60c7149b55b9e3b3c13f609cd8eb5307c751f22bd8fb8d262e75b/filelock-3.29.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/36/e1/a8933a72c45a87177fbde2696e0d0755c8c9062f8c077a961c6215fa27b1/fonttools-4.63.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f1/16/d905e7f53e661ce2c24686c38048d8e2b750ffc4350009d41c4e6c6c9826/h5py-3.16.0-cp314-cp314-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ce/27/83314cfd4800ada7542ba49efc772c7a8949d349c7bec177e4e7fa5257e0/happi-3.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/70/b7/32110aa458690722a1069c7349b8ebe374a6ba0bdf9ef8925a9f37a74978/hiredis-3.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fe/47/deb64c73aec25af7699247e021153a6bfe9a08452f7f7337dcee4aa07a2b/historydict-1.2.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f0/0f/310fb31e39e2d734ccaa2c0fb981ee41f7bd5056ce9bc29b2248bd569169/humanfriendly-10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/49/fa/391e437a34e55095173dca5f24070d89cbc233ff85bf1c29c93248c6588d/imageio-2.37.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bc/a4/d6f91d756f901626a30f47578e0bfdfde401e54a3eb49cb9dce9b855000a/intake-2.0.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3d/02/77b271f5dc58bfbc0b577c877b2365d1ffea2afe66a80c13f2312820348c/ipykernel-7.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/40/3a/948263ca3b9d65bb2b1b0c521b3a49fad5d59ada58724bd87d2bd5ff3f36/ipython-9.15.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3e/95/c7c34aa53c16353c56d0b802fba48d5f5caa2cdee7958acbcb795c830416/isort-8.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/93/242e2eab5fe682ffcb8b0084bde703a41d51e17ee0f3a31ff0d9d813620a/jedi-0.20.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3f/6f/56d39bf385c5c27988aebaf0c18a2a17e960575740100973511018bd904e/jupyter_client-8.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ca/77/71d78d58f15c22db16328a476426f7ac4a60d3a5a7ba3b9627ee2f7903d4/jupyter_console-6.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/f9/b06c934a6aa8bc91f566bd2a214fd04c30506c2d9e2b6b171953216a65b6/kiwisolver-1.5.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/8a/a1/8d812e53a5da1687abb10445275d41a8b13adb781bbf7196ddbcf8d88505/lazy_loader-0.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f1/01/d52c7b11eaa286d49dae619c0eec4aabc0bf3cda7a7467eb77c62c4471f3/lz4-4.4.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/29/dc/6377ecfaa5fef79430f74a1a16638b4e2aa30d4692bae2c19f9d76fe3b01/matplotlib-3.11.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/19/03/8c63e8cf52958534ef688625965ab04c269a6cadd8caef16758b380a821a/msgpack-1.2.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/9b/5d/f25ac7d4fb77cbd53ddc6d05d833c6bf52b12770a44fa9a447eed470ca9a/msgpack_numpy-0.4.8-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c5/3c/3179b85b0e1c3659f0369940200cd6d0fa900e6cefcc7ea0bc6dd0e29ffb/nest_asyncio2-1.7.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/41/5f/0f992cb24560673496c5d68de61913b57166ce530ffda07c1f280e0cc464/numpy-2.5.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/62/5e/3a6a3e90f35cea3853c45e5d5fb9b7192ce4384616f932cf7591298ab6e1/numpydoc-1.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/17/83/6dba32b85f31868400440dc7ad2ca1eab94cbbf3a7b0459ed39f8311a9e2/opentelemetry_api-1.43.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ef/80/c6dbf1f8d14fbb5615d2e99b798d61b76eb937f09e1e948d0e8aaf8873b2/ophyd-1.11.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1e/2c/76ac5e485f6405fc0f1dbbd1c98b7c1137d4aa5c1e49ea9e69bbd8d22ae1/ophyd_async-0.19.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/99/5d/8268b644392ee874ee82a635cd0df1773de230bde356c38de28e298392cc/parso-0.8.7-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/1b/dd/a9fe6a0a09512da23951c68bf36466aeecd89def3183dc095edbc807ddc5/pint-0.25.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fe/be/2e6798ace5cc036f5d05d36b7b2fd85346f1a708c87060890b070d0ec607/prettytable-3.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/29/0ed312ec800fb536f93783215126cee4b8977dcfeccba6f0f44df0cc87d7/pyarrow-25.0.0-cp314-cp314-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/90/cb/c13d8a74419dde9590ed6fab293b516f68316ac87d06569b79b5f446d519/pydantic_numpy-8.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ae/a1/d4423657caaa8be9b31e491592b49cebdcfd434d3e74512ce71f6ec39905/pytest_split-0.11.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/63/cf/91b94238c843bfbae0a6674df45015aa3908b91454c496b2eb29e7991255/pytest_xprocess-1.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9d/ae/84bc0d2440c95772272bb6f4b3d09ccf08b2898fce89b3d4f969a9fc74e9/python_discovery-1.4.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/04/e8135ebd1ad02c56ec633277529b2602ff99ff634be76cdba5744cf554fd/python_multipart-0.0.32-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0f/95/70d7041273890f9f97a24234c00b746e8da86df462620194cef1d411ddeb/pytokens-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fd/0a/c2345ebf1ebe70840ce3f6c6ee612f8fa749cfbd1b03069c53bf0c62aaad/redis-8.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/9c/0d1fdc2e7aba23e290d603bc494e97bd205bae262ce33c6b32a69768ed5e/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/af/fe/b6045c782f1fd1ae317d2a6ca1884857ce5c20f59befe6ab25a8603c43a7/ruamel_yaml-0.18.17-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a1/5c/8b56b08db91e569d0a4fbfa3e492ed2026081bdd7e892f63ba1c88a2f548/ruamel_yaml_clib-0.2.15-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/68/b9/f44b139096467996b4d85589d9880fd55f0c80a204d298a1b73d0adc2654/scanspec-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/73/c3/cec6a3cbaadfdcc02bd6ff02f3abfe09eaa7f4d4e0a525a1e3a3f4bce49c/scikit_image-0.26.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/7f/c4/bc41eb19b0fd0db868f4132920879019318d80cc522ad8f2bca4611af808/scipy-1.18.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/40/e1e72872c6354b306daef1703549e8e83b4d43cfea356311bf722a043752/setuptools-83.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/51/6b/3feec8016ab2263946c4480510d2d1a7924a5400c455974a7a0344bb4304/setuptools_dso-2.12.3-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/78/91/3635cdb13318cb0a328abaa69e2b91251caad39d6779aa308098f341f6cb/simplejson-4.1.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/87/c7/b5c8015d823bfda1a346adb2c634a2101d50bb75d421eb6dcb31acd25ebc/sphinx_rtd_theme-3.1.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/85/749bd22d1a68db7291c89e2ebca53f4306c3f205853cf31e9de279034c3c/sphinxcontrib_jquery-4.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1d/f0/1ff90a1d1dd02de23feafdf9dffaecef3958348be5c192df56670ccb4f86/stamina-26.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/59/208f71d70ddc6184f79b8c6d87d46eb7d7b12c19186a817dec9c9c3f3693/tifffile-2026.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/37/d8/ef374952fd5da67d4463122c2b8e5a96536ec10b4b339254c6dcde81d01c/tornado-6.5.7-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/22/2a/5e5e750890ada51017d18d0d4c30da696e5b5bd3180947729927628fc3cb/tqdm-4.68.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/96/8d/1080ee4c231f361b6ce4470d556c8c435b67c7e0753aaa641497ee92f88b/traitlets-5.15.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/72/89/0265b2b79424ed05b8d1e9c8fca71e1b150478e5b0c19aa50b0ae397326e/velocity_profile-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/7c/4e7225d46d634a0d8d534dd8a6ce0c319d09b4d0cf0337eb314ca4789d8c/virtualenv-21.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/96/42/3e5985a0a7e57de470b320c6d6a1a67c844f6737a587f3d44dd13d1819e7/wcwidth-0.8.2-py3-none-any.whl - - pypi: ./ -packages: -- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - build_number: 20 - sha256: 1dd3fffd892081df9726d7eb7e0dea6198962ba775bd88842135a4ddb4deb3c9 - md5: a9f577daf3de00bca7c3c76c0ecbd1de - depends: - - __glibc >=2.17,<3.0.a0 - - libgomp >=7.5.0 - constrains: - - openmp_impl <0.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 28948 - timestamp: 1770939786096 -- pypi: https://files.pythonhosted.org/packages/51/89/da0f32b679b8769dd472eb2927308d328bf75c296629fd9f95135afacd0a/aioca-2.1-py3-none-any.whl - name: aioca - version: '2.1' - sha256: df0f062b81a4846d3e5705f0bfaf7bee9f876009302cf3b06ada93d6f5153b6f - requires_dist: - - numpy - - epicscorelibs>=7.0.3.99.4.0 - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - name: alabaster - version: 1.0.0 - sha256: fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - name: annotated-types - version: 0.7.0 - sha256: 1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 - requires_dist: - - typing-extensions>=4.0.0 ; python_full_version < '3.9' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/d4/2b/04b8a15f3a1c77bc79ddf5c73875327f34b4fa75982df2b76e45e402d364/asttokens-3.0.2-py3-none-any.whl - name: asttokens - version: 3.0.2 - sha256: 9da13157f5b28becde0bd374fc677dcd3c290614264eff096f167c469cd9f933 - requires_dist: - - astroid>=2,<5 ; extra == 'astroid' - - astroid>=2,<5 ; extra == 'test' - - pytest<9.0 ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-xdist ; extra == 'test' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - name: attrs - version: 26.1.0 - sha256: c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309 - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl - name: babel - version: 2.18.0 - sha256: e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35 - requires_dist: - - pytz>=2015.7 ; python_full_version < '3.9' - - tzdata ; sys_platform == 'win32' and extra == 'dev' - - backports-zoneinfo ; python_full_version < '3.9' and extra == 'dev' - - freezegun~=1.0 ; extra == 'dev' - - jinja2>=3.0 ; extra == 'dev' - - pytest-cov ; extra == 'dev' - - pytest>=6.0 ; extra == 'dev' - - pytz ; extra == 'dev' - - setuptools ; extra == 'dev' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/06/3a/7c448bc623fcdfa96672531beb5a616ea5e64f6975955254d7731ffb0ad9/black-26.5.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: black - version: 26.5.1 - sha256: 5119fa92ae61f786e8c3662fd60aece1d0a2dd5cca5d0c79417a95e7a4272a59 - requires_dist: - - click>=8.0.0 - - mypy-extensions>=0.4.3 - - packaging>=22.0 - - pathspec>=1.0.0 - - platformdirs>=2 - - pytokens~=0.4.0 - - tomli>=1.1.0 ; python_full_version < '3.11' - - typing-extensions>=4.0.1 ; python_full_version < '3.11' - - colorama>=0.4.3 ; extra == 'colorama' - - aiohttp>=3.10 ; extra == 'd' - - ipython>=7.8.0 ; extra == 'jupyter' - - tokenize-rt>=3.2.0 ; extra == 'jupyter' - - uvloop>=0.15.2 ; sys_platform != 'win32' and extra == 'uvloop' - - winloop>=0.5.0 ; sys_platform == 'win32' and extra == 'uvloop' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/1f/0e/36044316b65ca471d3bb6d3703fd06fb50c6b727c3562f6a5a3153634f88/black-26.5.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: black - version: 26.5.1 - sha256: 9d98d4137277c75dfb898ec8d846c4fd68ba1e9cf77f95e2865c203dc18f4c3d - requires_dist: - - click>=8.0.0 - - mypy-extensions>=0.4.3 - - packaging>=22.0 - - pathspec>=1.0.0 - - platformdirs>=2 - - pytokens~=0.4.0 - - tomli>=1.1.0 ; python_full_version < '3.11' - - typing-extensions>=4.0.1 ; python_full_version < '3.11' - - colorama>=0.4.3 ; extra == 'colorama' - - aiohttp>=3.10 ; extra == 'd' - - ipython>=7.8.0 ; extra == 'jupyter' - - tokenize-rt>=3.2.0 ; extra == 'jupyter' - - uvloop>=0.15.2 ; sys_platform != 'win32' and extra == 'uvloop' - - winloop>=0.5.0 ; sys_platform == 'win32' and extra == 'uvloop' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/81/6b/cfaf3d39f25132c156a068f6b805576c9103a84086019507c70e1911ee7d/black-26.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: black - version: 26.5.1 - sha256: ea8d16dc41655aa113cd64665e7219446cd7e4ff2248d7178eaa905190c86b18 - requires_dist: - - click>=8.0.0 - - mypy-extensions>=0.4.3 - - packaging>=22.0 - - pathspec>=1.0.0 - - platformdirs>=2 - - pytokens~=0.4.0 - - tomli>=1.1.0 ; python_full_version < '3.11' - - typing-extensions>=4.0.1 ; python_full_version < '3.11' - - colorama>=0.4.3 ; extra == 'colorama' - - aiohttp>=3.10 ; extra == 'd' - - ipython>=7.8.0 ; extra == 'jupyter' - - tokenize-rt>=3.2.0 ; extra == 'jupyter' - - uvloop>=0.15.2 ; sys_platform != 'win32' and extra == 'uvloop' - - winloop>=0.5.0 ; sys_platform == 'win32' and extra == 'uvloop' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/fb/24/8e7b9a2fa61b0afd82209efe937557d180a1fa055bd7f6161eb9defc3719/black-26.5.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: black - version: 26.5.1 - sha256: ecb3e624844c798144e9bd986954e0adc81d8911a1f30f375e1252fe26e8c294 - requires_dist: - - click>=8.0.0 - - mypy-extensions>=0.4.3 - - packaging>=22.0 - - pathspec>=1.0.0 - - platformdirs>=2 - - pytokens~=0.4.0 - - tomli>=1.1.0 ; python_full_version < '3.11' - - typing-extensions>=4.0.1 ; python_full_version < '3.11' - - colorama>=0.4.3 ; extra == 'colorama' - - aiohttp>=3.10 ; extra == 'd' - - ipython>=7.8.0 ; extra == 'jupyter' - - tokenize-rt>=3.2.0 ; extra == 'jupyter' - - uvloop>=0.15.2 ; sys_platform != 'win32' and extra == 'uvloop' - - winloop>=0.5.0 ; sys_platform == 'win32' and extra == 'uvloop' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/8e/99/cc217b2a727fdf730d0c0064bc8c03473dfe5d0528f2bd0c4f59fdab4179/bluesky-1.15.1-py3-none-any.whl - name: bluesky - version: 1.15.1 - sha256: 7b3a0f04cf2bb0a7907771e014e59fe6fced777347df8df84adec7239f6c3d2a - requires_dist: - - cycler - - event-model>=1.23.1 - - historydict - - msgpack - - msgpack-numpy - - numpy - - opentelemetry-api - - toolz - - tqdm>=4.44 - - typing-extensions>=4.10.0 - - attrs ; extra == 'dev' - - bluesky-tiled-plugins ; extra == 'dev' - - cloudpickle ; extra == 'dev' - - copier ; extra == 'dev' - - coverage ; extra == 'dev' - - databroker ; extra == 'dev' - - doct ; extra == 'dev' - - doctr ; extra == 'dev' - - flake8 ; extra == 'dev' - - ipython ; extra == 'dev' - - ipywidgets ; extra == 'dev' - - jinja2 ; extra == 'dev' - - lmfit ; extra == 'dev' - - matplotlib>=3.5.0 ; extra == 'dev' - - mongoquery ; extra == 'dev' - - mongomock ; extra == 'dev' - - multiprocess ; extra == 'dev' - - mypy ; extra == 'dev' - - myst-parser ; extra == 'dev' - - networkx ; extra == 'dev' - - numpydoc ; extra == 'dev' - - opentelemetry-sdk ; extra == 'dev' - - ophyd ; extra == 'dev' - - orjson ; extra == 'dev' - - packaging ; extra == 'dev' - - pandas ; extra == 'dev' - - pickleshare ; extra == 'dev' - - pipdeptree ; extra == 'dev' - - pre-commit ; extra == 'dev' - - pydata-sphinx-theme>=0.12 ; extra == 'dev' - - pyepics ; extra == 'dev' - - pyqt5 ; extra == 'dev' - - pytest ; extra == 'dev' - - pytest-cov ; extra == 'dev' - - pytest-faulthandler ; extra == 'dev' - - pyyaml ; extra == 'dev' - - pyzmq ; extra == 'dev' - - requests ; extra == 'dev' - - ruff ; extra == 'dev' - - scikit-image ; extra == 'dev' - - scipy ; extra == 'dev' - - sphinx<7.3 ; extra == 'dev' - - sphinx-autobuild ; extra == 'dev' - - sphinx-copybutton ; extra == 'dev' - - sphinx-design ; extra == 'dev' - - sphinxcontrib-mermaid ; extra == 'dev' - - sphinx-rtd-theme ; extra == 'dev' - - streamz ; extra == 'dev' - - suitcase-jsonl ; extra == 'dev' - - suitcase-mongo ; extra == 'dev' - - suitcase-msgpack ; extra == 'dev' - - tifffile ; extra == 'dev' - - tox-direct ; extra == 'dev' - - types-mock ; extra == 'dev' - - tiled[all] ; extra == 'dev' - - vendoring ; extra == 'dev' - - zict ; extra == 'dev' - - pytest-mock>=3.15.1 ; extra == 'dev' - - ipython ; extra == 'ipython' - - pyzmq ; extra == 'zmq' - - ophyd ; extra == 'common' - - databroker ; extra == 'common' - - doct ; extra == 'tools' - - lmfit ; extra == 'tools' - - tifffile ; extra == 'tools' - - historydict ; extra == 'tools' - - streamz ; extra == 'streamz' - - matplotlib ; extra == 'plotting' - - colorama ; extra == 'cmd' - - jinja2 ; extra == 'olog' - - zict<3 ; extra == 'old-persistentdict' - - bluesky[cmd,common,dev,ipython,olog,plotting,streamz,tools,zmq] ; extra == 'all' - requires_python: '>=3.10' -- pypi: ./ - name: bluesky-queueserver - version: 0.0.25.dev55+gb26088bfc.d20260714 - sha256: 7a0319e89eab6c92c6dc1cb6bc4f8856af09fc51c5b9f43f721ef66febe34f90 - requires_dist: - - bluesky>=1.7.0 - - ipykernel - - jsonschema - - jupyter-client>=7.4.2 - - jupyter-console - - numpydoc - - openpyxl - - ophyd - - packaging - - pydantic - - python-multipart - - pyyaml - - pyzmq - - redis[hiredis] - - requests - - black!=25.11.0 ; extra == 'dev' - - coverage ; extra == 'dev' - - flake8 ; extra == 'dev' - - isort ; extra == 'dev' - - happi>=1.14.0 ; extra == 'dev' - - pre-commit ; extra == 'dev' - - pytest ; extra == 'dev' - - pytest-xprocess ; extra == 'dev' - - pytest-split ; extra == 'dev' - - py ; extra == 'dev' - - ipython ; extra == 'dev' - - matplotlib ; extra == 'dev' - - numpy ; extra == 'dev' - - intake ; extra == 'dev' - - numpydoc ; extra == 'dev' - - scikit-image ; extra == 'dev' - - sphinx ; extra == 'dev' - - sphinx-rtd-theme ; extra == 'dev' - - pandas ; extra == 'dev' - - pyarrow ; extra == 'dev' - - scikit-image ; extra == 'dev' - - h5py ; extra == 'dev' - - aioca ; extra == 'dev' - - ophyd-async ; extra == 'dev' - requires_python: '>=3.10' -- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - sha256: 0b75d45f0bba3e95dc693336fa51f40ea28c980131fec438afb7ce6118ed05f6 - md5: d2ffd7602c02f2b316fd921d39876885 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - license: bzip2-1.0.6 - license_family: BSD - purls: [] - size: 260182 - timestamp: 1771350215188 -- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda - sha256: f8e3c730fa14ee3f170493779f06522c4acf89169f43db4f039727709b6419cf - md5: a9965dd99f683c5f444428f896635716 - depends: - - __unix - license: ISC - purls: [] - size: 128866 - timestamp: 1781708962055 -- pypi: https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl - name: certifi - version: 2026.6.17 - sha256: 2227dcbaafe0d2f59279d1762ddddc37783ed4354594f194ffc31d20f41fc3db - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - name: cfgv - version: 3.5.0 - sha256: a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/01/c4/4fa4c8b3097a11f3c5f09a35b72ed6855fb1d332469504962ab7bafcc702/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: charset-normalizer - version: 3.4.9 - sha256: 5e226f6218febc71f6c1fc2fafb91c226f75bdc1d8fb12d66823716e891608fd - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/a5/34/49b9060e8418b14fb5cba9cf6bfb383111e2538a03a1fb18e66a95aeb3d5/charset_normalizer-3.4.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: charset-normalizer - version: 3.4.9 - sha256: 04ce310cb89c15df659582aee80a0603788732a5e017d5bd5c81158106ce249c - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/ea/f8/72eb13dcabe7257035cea8aefd922caad2f110d252bf9f67c4c2ca763aee/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: charset-normalizer - version: 3.4.9 - sha256: 84fd18bcc17526fc2b3c1af7d2b9217d32c9c04448c16ec693b9b4f1985c3d33 - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/f4/c4/b3e049d2aa3766180c78507110543d9d50894cc97f57de543f1be521dcdc/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: charset-normalizer - version: 3.4.9 - sha256: c25fe15c70c59eb7c5ce8c06a1f3fa1da0ecc5ea1e7a5922c40fd2fa9b0d5046 - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl - name: click - version: 8.4.2 - sha256: e6f9f66136c816745b9d65817da91d61d957fb16e02e4dcd0552553c5a197b76 - requires_dist: - - colorama ; sys_platform == 'win32' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl - name: coloredlogs - version: 15.0.1 - sha256: 612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934 - requires_dist: - - humanfriendly>=9.1 - - capturer>=2.4 ; extra == 'cron' - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*' -- pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl - name: colorlog - version: 6.10.1 - sha256: 2d7e8348291948af66122cff006c9f8da6255d224e7cf8e37d8de2df3bad8c9c - requires_dist: - - colorama ; sys_platform == 'win32' - - black ; extra == 'development' - - flake8 ; extra == 'development' - - mypy ; extra == 'development' - - pytest ; extra == 'development' - - types-colorama ; extra == 'development' - requires_python: '>=3.6' -- pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl - name: comm - version: 0.2.3 - sha256: c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417 - requires_dist: - - pytest ; extra == 'test' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/f3/4f/f94ac1b84d2169cf2ebf64353ce98fd743f85d30678059c514d9b3d6644c/compress_pickle-2.1.0-py3-none-any.whl - name: compress-pickle - version: 2.1.0 - sha256: 598650da4686d9bd97bee185b61e74d7fe1872bb0c23909d5ed2d8793b4a8818 - requires_dist: - - cloudpickle ; extra == 'cloudpickle' - - dill ; extra == 'dill' - - lz4 ; extra == 'full' - - dill ; extra == 'full' - - cloudpickle ; extra == 'full' - - lz4 ; extra == 'lz4' - requires_python: '>=3.6' -- pypi: https://files.pythonhosted.org/packages/04/5f/9ff93450ba96b09c7c2b3f81c94de31c89f92292f1380261bd7195bea4ea/contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - name: contourpy - version: 1.3.3 - sha256: f64836de09927cba6f79dcd00fdd7d5329f3fccc633468507079c829ca4db4e3 - requires_dist: - - numpy>=1.25 - - furo ; extra == 'docs' - - sphinx>=7.2 ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - bokeh ; extra == 'bokeh' - - selenium ; extra == 'bokeh' - - contourpy[bokeh,docs] ; extra == 'mypy' - - bokeh ; extra == 'mypy' - - docutils-stubs ; extra == 'mypy' - - mypy==1.17.0 ; extra == 'mypy' - - types-pillow ; extra == 'mypy' - - contourpy[test-no-images] ; extra == 'test' - - matplotlib ; extra == 'test' - - pillow ; extra == 'test' - - pytest ; extra == 'test-no-images' - - pytest-cov ; extra == 'test-no-images' - - pytest-rerunfailures ; extra == 'test-no-images' - - pytest-xdist ; extra == 'test-no-images' - - wurlitzer ; extra == 'test-no-images' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/4b/32/e0f13a1c5b0f8572d0ec6ae2f6c677b7991fafd95da523159c19eff0696a/contourpy-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - name: contourpy - version: 1.3.3 - sha256: 4debd64f124ca62069f313a9cb86656ff087786016d76927ae2cf37846b006c9 - requires_dist: - - numpy>=1.25 - - furo ; extra == 'docs' - - sphinx>=7.2 ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - bokeh ; extra == 'bokeh' - - selenium ; extra == 'bokeh' - - contourpy[bokeh,docs] ; extra == 'mypy' - - bokeh ; extra == 'mypy' - - docutils-stubs ; extra == 'mypy' - - mypy==1.17.0 ; extra == 'mypy' - - types-pillow ; extra == 'mypy' - - contourpy[test-no-images] ; extra == 'test' - - matplotlib ; extra == 'test' - - pillow ; extra == 'test' - - pytest ; extra == 'test-no-images' - - pytest-cov ; extra == 'test-no-images' - - pytest-rerunfailures ; extra == 'test-no-images' - - pytest-xdist ; extra == 'test-no-images' - - wurlitzer ; extra == 'test-no-images' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/5f/4b/6157f24ca425b89fe2eb7e7be642375711ab671135be21e6faa100f7448c/contourpy-1.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - name: contourpy - version: 1.3.3 - sha256: 51e79c1f7470158e838808d4a996fa9bac72c498e93d8ebe5119bc1e6becb0db - requires_dist: - - numpy>=1.25 - - furo ; extra == 'docs' - - sphinx>=7.2 ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - bokeh ; extra == 'bokeh' - - selenium ; extra == 'bokeh' - - contourpy[bokeh,docs] ; extra == 'mypy' - - bokeh ; extra == 'mypy' - - docutils-stubs ; extra == 'mypy' - - mypy==1.17.0 ; extra == 'mypy' - - types-pillow ; extra == 'mypy' - - contourpy[test-no-images] ; extra == 'test' - - matplotlib ; extra == 'test' - - pillow ; extra == 'test' - - pytest ; extra == 'test-no-images' - - pytest-cov ; extra == 'test-no-images' - - pytest-rerunfailures ; extra == 'test-no-images' - - pytest-xdist ; extra == 'test-no-images' - - wurlitzer ; extra == 'test-no-images' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - name: contourpy - version: 1.3.3 - sha256: 4d00e655fcef08aba35ec9610536bfe90267d7ab5ba944f7032549c55a146da1 - requires_dist: - - numpy>=1.25 - - furo ; extra == 'docs' - - sphinx>=7.2 ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - bokeh ; extra == 'bokeh' - - selenium ; extra == 'bokeh' - - contourpy[bokeh,docs] ; extra == 'mypy' - - bokeh ; extra == 'mypy' - - docutils-stubs ; extra == 'mypy' - - mypy==1.17.0 ; extra == 'mypy' - - types-pillow ; extra == 'mypy' - - contourpy[test-no-images] ; extra == 'test' - - matplotlib ; extra == 'test' - - pillow ; extra == 'test' - - pytest ; extra == 'test-no-images' - - pytest-cov ; extra == 'test-no-images' - - pytest-rerunfailures ; extra == 'test-no-images' - - pytest-xdist ; extra == 'test-no-images' - - wurlitzer ; extra == 'test-no-images' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/05/37/5e439725a96de592309725550c8df639c359c209dcb4b152ed46032d4c0d/coverage-7.15.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - name: coverage - version: 7.15.1 - sha256: aab9902a64b8390e3b56e539fddae1d79a267807fe5cb0c18d7d2f544ce867e2 - requires_dist: - - tomli ; python_full_version <= '3.11' and extra == 'toml' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/1c/5e/caf3abbdbb22629626160ffc9c017eb995b7cb11c0be46b974834cef1792/coverage-7.15.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - name: coverage - version: 7.15.1 - sha256: 962aa56c1c9b016d681265880eb6acc9966029d2c4c559319cc43a1abbb9b59a - requires_dist: - - tomli ; python_full_version <= '3.11' and extra == 'toml' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/e1/53/0d3dd963631259d794c898735d5436e68d6a8d40749c419a07ff7c171469/coverage-7.15.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - name: coverage - version: 7.15.1 - sha256: bde0fe24083d0b7b3dbafa7a09f0796410af1afa2523f28f5f208d8340a4aaca - requires_dist: - - tomli ; python_full_version <= '3.11' and extra == 'toml' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/e5/81/c7009ed7ea9765adb2b9d095054d748266fae5f07ac6c5f925f33715fcde/coverage-7.15.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - name: coverage - version: 7.15.1 - sha256: df164be93b46b4825cc39339440a05edc54c4d1d865ba4a60fd43d151a2a1cd3 - requires_dist: - - tomli ; python_full_version <= '3.11' and extra == 'toml' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - name: cycler - version: 0.12.1 - sha256: 85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30 - requires_dist: - - ipython ; extra == 'docs' - - matplotlib ; extra == 'docs' - - numpydoc ; extra == 'docs' - - sphinx ; extra == 'docs' - - pytest ; extra == 'tests' - - pytest-cov ; extra == 'tests' - - pytest-xdist ; extra == 'tests' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/95/51/67e7cf11a53e40694f720457d5b3a1cdaaa3d5a9a633e482f225456b93ff/debugpy-1.8.21-py2.py3-none-any.whl - name: debugpy - version: 1.8.21 - sha256: b1e37d333663c8851516a47364ef473da127f9caebe4417e6df6f5825a7e9a92 - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl - name: decorator - version: 5.3.1 - sha256: f47fe6fdbd2edd623ecfe36875d37aba411624e2670dd395dddae1358689bb3c - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl - name: distlib - version: 0.4.3 - sha256: 4b0ce306c966eb73bc3a7b6abad017c556dadd92c44701562cd528ac7fde4d5b -- pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - name: docutils - version: 0.22.4 - sha256: d0013f540772d1420576855455d050a2180186c91c15779301ac2ccb3eeb68de - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/35/a8/365059bbcd4572cbc41de17fd5b682be5868b218c3c5479071865cab9078/entrypoints-0.4-py3-none-any.whl - name: entrypoints - version: '0.4' - sha256: f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f - requires_python: '>=3.6' -- pypi: https://files.pythonhosted.org/packages/12/29/ce9c8e81a6b9be7722ac00cb592ce6b652405eecb178bf410810732957ec/epicscorelibs-7.0.10.99.0.1-cp311-cp311-manylinux2014_x86_64.whl - name: epicscorelibs - version: 7.0.10.99.0.1 - sha256: 91f112790a31c296bdb2c0f9b661e993c3ded9df9f4731a92887c5abfbaf568a - requires_dist: - - setuptools - - setuptools-dso>=2.11a2 - - numpy - requires_python: '>=2.7' -- pypi: https://files.pythonhosted.org/packages/4f/7b/55f41ec7746713db21aff5e794fc98b5a2e4c40fc72d69f6a1cdb04df360/epicscorelibs-7.0.10.99.0.1-cp312-cp312-manylinux2014_x86_64.whl - name: epicscorelibs - version: 7.0.10.99.0.1 - sha256: b7b9cb9dc1b533f6bb569dffe246256ba4d553a5843ddf494645c9b33a38ba2a - requires_dist: - - setuptools - - setuptools-dso>=2.11a2 - - numpy - requires_python: '>=2.7' -- pypi: https://files.pythonhosted.org/packages/55/57/42c5bb50507c528d9af10879067920d27c5a6b33fbef16c2e1b55de77ccc/epicscorelibs-7.0.10.99.0.1-cp314-cp314-manylinux_2_28_x86_64.whl - name: epicscorelibs - version: 7.0.10.99.0.1 - sha256: 7de58f4e8a7dd8edf7b808ffc99391e95ca3516c4f2780258c31f4f844d63239 - requires_dist: - - setuptools - - setuptools-dso>=2.11a2 - - numpy - requires_python: '>=2.7' -- pypi: https://files.pythonhosted.org/packages/7c/aa/3b0faa7eea6a2957af7ee116f08b5edd99eff7e7461e22ac613b0a8d38ea/epicscorelibs-7.0.10.99.0.1-cp313-cp313-manylinux2014_x86_64.whl - name: epicscorelibs - version: 7.0.10.99.0.1 - sha256: 8ac0a67067d06c42d4ac83b685f8020d4e993858bc4e36d58631983b1117aa39 - requires_dist: - - setuptools - - setuptools-dso>=2.11a2 - - numpy - requires_python: '>=2.7' -- pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - name: et-xmlfile - version: 2.0.0 - sha256: 7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/b2/9e/d410b0ff08a2519d197928afdc1aa36eb47e197f5ba683389b00e216f83c/event_model-1.24.0-py3-none-any.whl - name: event-model - version: 1.24.0 - sha256: 87e9415b349f9c9aa7576090b671442e49548ea9b63c5e8ab64573f4df1c2d61 - requires_dist: - - jsonschema>=4 - - numpy - - typing-extensions - - mypy ; extra == 'dev' - - myst-parser ; extra == 'dev' - - pipdeptree ; extra == 'dev' - - pre-commit ; extra == 'dev' - - pydata-sphinx-theme>=0.12 ; extra == 'dev' - - pytest ; extra == 'dev' - - pytest-cov ; extra == 'dev' - - ruff ; extra == 'dev' - - sphinx-autobuild ; extra == 'dev' - - sphinx-copybutton ; extra == 'dev' - - sphinx-design ; extra == 'dev' - - tox-direct ; extra == 'dev' - - types-mock ; extra == 'dev' - - copier ; extra == 'dev' - - ipython ; extra == 'dev' - - matplotlib ; extra == 'dev' - - numpydoc ; extra == 'dev' - - pydantic ; extra == 'dev' - - datamodel-code-generator>=0.53.0 ; extra == 'dev' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl - name: executing - version: 2.2.1 - sha256: 760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017 - requires_dist: - - asttokens>=2.1.0 ; extra == 'tests' - - ipython ; extra == 'tests' - - pytest ; extra == 'tests' - - coverage ; extra == 'tests' - - coverage-enable-subprocess ; extra == 'tests' - - littleutils ; extra == 'tests' - - rich ; python_full_version >= '3.11' and extra == 'tests' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/60/02/be4a57b60c7149b55b9e3b3c13f609cd8eb5307c751f22bd8fb8d262e75b/filelock-3.29.7-py3-none-any.whl - name: filelock - version: 3.29.7 - sha256: 987db6f789a3a2a59f55081801b2b3697cb97e2a736b5f1a9e99b559285fbc51 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl - name: flake8 - version: 7.3.0 - sha256: b9696257b9ce8beb888cdbe31cf885c90d31928fe202be0889a7cdafad32f01e - requires_dist: - - mccabe>=0.7.0,<0.8.0 - - pycodestyle>=2.14.0,<2.15.0 - - pyflakes>=3.4.0,<3.5.0 - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl - name: flexcache - version: '0.3' - sha256: d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32 - requires_dist: - - typing-extensions - - pytest ; extra == 'test' - - pytest-mpl ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-subtests ; extra == 'test' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl - name: flexparser - version: '0.4' - sha256: 3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846 - requires_dist: - - typing-extensions - - pytest ; extra == 'test' - - pytest-mpl ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-subtests ; extra == 'test' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/0b/43/a81f20050a3115b57d62c8e781446949512eac36690dc384ccea65ff4cc1/fonttools-4.63.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - name: fonttools - version: 4.63.0 - sha256: d76ac49f929aecaf82d83250b8347e099d7aecba0f4726c1d9b6df3b8bb5fe18 - requires_dist: - - lxml>=4.0 ; extra == 'lxml' - - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'woff' - - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'woff' - - zopfli>=0.1.4 ; extra == 'woff' - - unicodedata2>=17.0.0 ; python_full_version < '3.15' and extra == 'unicode' - - lz4>=1.7.4.2 ; extra == 'graphite' - - scipy ; platform_python_implementation != 'PyPy' and extra == 'interpolatable' - - munkres ; platform_python_implementation == 'PyPy' and extra == 'interpolatable' - - pycairo ; extra == 'interpolatable' - - matplotlib ; extra == 'plot' - - sympy ; extra == 'symfont' - - xattr ; sys_platform == 'darwin' and extra == 'type1' - - skia-pathops>=0.5.0 ; extra == 'pathops' - - uharfbuzz>=0.45.0 ; extra == 'repacker' - - lxml>=4.0 ; extra == 'all' - - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'all' - - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'all' - - zopfli>=0.1.4 ; extra == 'all' - - unicodedata2>=17.0.0 ; python_full_version < '3.15' and extra == 'all' - - lz4>=1.7.4.2 ; extra == 'all' - - scipy ; platform_python_implementation != 'PyPy' and extra == 'all' - - munkres ; platform_python_implementation == 'PyPy' and extra == 'all' - - pycairo ; extra == 'all' - - matplotlib ; extra == 'all' - - sympy ; extra == 'all' - - xattr ; sys_platform == 'darwin' and extra == 'all' - - skia-pathops>=0.5.0 ; extra == 'all' - - uharfbuzz>=0.45.0 ; extra == 'all' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/36/e1/a8933a72c45a87177fbde2696e0d0755c8c9062f8c077a961c6215fa27b1/fonttools-4.63.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - name: fonttools - version: 4.63.0 - sha256: 308f957cdeaf8abe4e5f2f124902ef405448af92c90f80e302a3b771c2e6116b - requires_dist: - - lxml>=4.0 ; extra == 'lxml' - - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'woff' - - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'woff' - - zopfli>=0.1.4 ; extra == 'woff' - - unicodedata2>=17.0.0 ; python_full_version < '3.15' and extra == 'unicode' - - lz4>=1.7.4.2 ; extra == 'graphite' - - scipy ; platform_python_implementation != 'PyPy' and extra == 'interpolatable' - - munkres ; platform_python_implementation == 'PyPy' and extra == 'interpolatable' - - pycairo ; extra == 'interpolatable' - - matplotlib ; extra == 'plot' - - sympy ; extra == 'symfont' - - xattr ; sys_platform == 'darwin' and extra == 'type1' - - skia-pathops>=0.5.0 ; extra == 'pathops' - - uharfbuzz>=0.45.0 ; extra == 'repacker' - - lxml>=4.0 ; extra == 'all' - - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'all' - - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'all' - - zopfli>=0.1.4 ; extra == 'all' - - unicodedata2>=17.0.0 ; python_full_version < '3.15' and extra == 'all' - - lz4>=1.7.4.2 ; extra == 'all' - - scipy ; platform_python_implementation != 'PyPy' and extra == 'all' - - munkres ; platform_python_implementation == 'PyPy' and extra == 'all' - - pycairo ; extra == 'all' - - matplotlib ; extra == 'all' - - sympy ; extra == 'all' - - xattr ; sys_platform == 'darwin' and extra == 'all' - - skia-pathops>=0.5.0 ; extra == 'all' - - uharfbuzz>=0.45.0 ; extra == 'all' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/77/c7/2342da9830e3e9d4870305ca5d2091d2a83284f2953079b7bdd3b5e029d8/fonttools-4.63.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - name: fonttools - version: 4.63.0 - sha256: 58dc6bb86a78d782f00f9190ca02c119cf5bbe2807536e361e18d42019f877d8 - requires_dist: - - lxml>=4.0 ; extra == 'lxml' - - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'woff' - - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'woff' - - zopfli>=0.1.4 ; extra == 'woff' - - unicodedata2>=17.0.0 ; python_full_version < '3.15' and extra == 'unicode' - - lz4>=1.7.4.2 ; extra == 'graphite' - - scipy ; platform_python_implementation != 'PyPy' and extra == 'interpolatable' - - munkres ; platform_python_implementation == 'PyPy' and extra == 'interpolatable' - - pycairo ; extra == 'interpolatable' - - matplotlib ; extra == 'plot' - - sympy ; extra == 'symfont' - - xattr ; sys_platform == 'darwin' and extra == 'type1' - - skia-pathops>=0.5.0 ; extra == 'pathops' - - uharfbuzz>=0.45.0 ; extra == 'repacker' - - lxml>=4.0 ; extra == 'all' - - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'all' - - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'all' - - zopfli>=0.1.4 ; extra == 'all' - - unicodedata2>=17.0.0 ; python_full_version < '3.15' and extra == 'all' - - lz4>=1.7.4.2 ; extra == 'all' - - scipy ; platform_python_implementation != 'PyPy' and extra == 'all' - - munkres ; platform_python_implementation == 'PyPy' and extra == 'all' - - pycairo ; extra == 'all' - - matplotlib ; extra == 'all' - - sympy ; extra == 'all' - - xattr ; sys_platform == 'darwin' and extra == 'all' - - skia-pathops>=0.5.0 ; extra == 'all' - - uharfbuzz>=0.45.0 ; extra == 'all' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/ce/36/0b805d8c485f872f65a509cbe3b58a5d0d17bee855333b54a150c79d3061/fonttools-4.63.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - name: fonttools - version: 4.63.0 - sha256: 22135da48a348785c5e2d5d2d9d6bec5ed44adacbaeb9db12d9493bf6c6bfa68 - requires_dist: - - lxml>=4.0 ; extra == 'lxml' - - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'woff' - - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'woff' - - zopfli>=0.1.4 ; extra == 'woff' - - unicodedata2>=17.0.0 ; python_full_version < '3.15' and extra == 'unicode' - - lz4>=1.7.4.2 ; extra == 'graphite' - - scipy ; platform_python_implementation != 'PyPy' and extra == 'interpolatable' - - munkres ; platform_python_implementation == 'PyPy' and extra == 'interpolatable' - - pycairo ; extra == 'interpolatable' - - matplotlib ; extra == 'plot' - - sympy ; extra == 'symfont' - - xattr ; sys_platform == 'darwin' and extra == 'type1' - - skia-pathops>=0.5.0 ; extra == 'pathops' - - uharfbuzz>=0.45.0 ; extra == 'repacker' - - lxml>=4.0 ; extra == 'all' - - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'all' - - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'all' - - zopfli>=0.1.4 ; extra == 'all' - - unicodedata2>=17.0.0 ; python_full_version < '3.15' and extra == 'all' - - lz4>=1.7.4.2 ; extra == 'all' - - scipy ; platform_python_implementation != 'PyPy' and extra == 'all' - - munkres ; platform_python_implementation == 'PyPy' and extra == 'all' - - pycairo ; extra == 'all' - - matplotlib ; extra == 'all' - - sympy ; extra == 'all' - - xattr ; sys_platform == 'darwin' and extra == 'all' - - skia-pathops>=0.5.0 ; extra == 'all' - - uharfbuzz>=0.45.0 ; extra == 'all' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl - name: fsspec - version: 2026.6.0 - sha256: 02e0b71817df9b2169dc30a16832045764def1191b43dcff5bb85bdee212d2a1 - requires_dist: - - adlfs ; extra == 'abfs' - - adlfs ; extra == 'adl' - - pyarrow>=1 ; extra == 'arrow' - - dask ; extra == 'dask' - - distributed ; extra == 'dask' - - pre-commit ; extra == 'dev' - - ruff>=0.5 ; extra == 'dev' - - numpydoc ; extra == 'doc' - - sphinx ; extra == 'doc' - - sphinx-design ; extra == 'doc' - - sphinx-rtd-theme ; extra == 'doc' - - yarl ; extra == 'doc' - - dropbox ; extra == 'dropbox' - - dropboxdrivefs ; extra == 'dropbox' - - requests ; extra == 'dropbox' - - adlfs ; extra == 'full' - - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'full' - - dask ; extra == 'full' - - distributed ; extra == 'full' - - dropbox ; extra == 'full' - - dropboxdrivefs ; extra == 'full' - - fusepy ; extra == 'full' - - gcsfs>2024.2.0 ; extra == 'full' - - libarchive-c ; extra == 'full' - - ocifs ; extra == 'full' - - panel ; extra == 'full' - - paramiko ; extra == 'full' - - pyarrow>=1 ; extra == 'full' - - pygit2 ; extra == 'full' - - requests ; extra == 'full' - - s3fs>2024.2.0 ; extra == 'full' - - smbprotocol ; extra == 'full' - - tqdm ; extra == 'full' - - fusepy ; extra == 'fuse' - - gcsfs>2024.2.0 ; extra == 'gcs' - - pygit2 ; extra == 'git' - - requests ; extra == 'github' - - gcsfs ; extra == 'gs' - - panel ; extra == 'gui' - - pyarrow>=1 ; extra == 'hdfs' - - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'http' - - libarchive-c ; extra == 'libarchive' - - ocifs ; extra == 'oci' - - s3fs>2024.2.0 ; extra == 's3' - - paramiko ; extra == 'sftp' - - smbprotocol ; extra == 'smb' - - paramiko ; extra == 'ssh' - - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'test' - - numpy ; extra == 'test' - - pytest ; extra == 'test' - - pytest-asyncio!=0.22.0 ; extra == 'test' - - pytest-benchmark ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-mock ; extra == 'test' - - pytest-recording ; extra == 'test' - - pytest-rerunfailures ; extra == 'test' - - requests ; extra == 'test' - - aiobotocore>=2.5.4,<3.0.0 ; extra == 'test-downstream' - - dask[dataframe,test] ; extra == 'test-downstream' - - moto[server]>4,<5 ; extra == 'test-downstream' - - pytest-timeout ; extra == 'test-downstream' - - xarray ; extra == 'test-downstream' - - adlfs ; extra == 'test-full' - - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'test-full' - - backports-zstd ; python_full_version < '3.14' and extra == 'test-full' - - cloudpickle ; extra == 'test-full' - - dask ; extra == 'test-full' - - distributed ; extra == 'test-full' - - dropbox ; extra == 'test-full' - - dropboxdrivefs ; extra == 'test-full' - - fastparquet ; extra == 'test-full' - - fusepy ; extra == 'test-full' - - gcsfs ; extra == 'test-full' - - jinja2 ; extra == 'test-full' - - kerchunk ; extra == 'test-full' - - libarchive-c ; extra == 'test-full' - - lz4 ; extra == 'test-full' - - notebook ; extra == 'test-full' - - numpy ; extra == 'test-full' - - ocifs ; extra == 'test-full' - - pandas<3.0.0 ; extra == 'test-full' - - panel ; extra == 'test-full' - - paramiko ; extra == 'test-full' - - pyarrow ; extra == 'test-full' - - pyarrow>=1 ; extra == 'test-full' - - pyftpdlib ; extra == 'test-full' - - pygit2 ; extra == 'test-full' - - pytest ; extra == 'test-full' - - pytest-asyncio!=0.22.0 ; extra == 'test-full' - - pytest-benchmark ; extra == 'test-full' - - pytest-cov ; extra == 'test-full' - - pytest-mock ; extra == 'test-full' - - pytest-recording ; extra == 'test-full' - - pytest-rerunfailures ; extra == 'test-full' - - python-snappy ; extra == 'test-full' - - requests ; extra == 'test-full' - - smbprotocol ; extra == 'test-full' - - tqdm ; extra == 'test-full' - - urllib3 ; extra == 'test-full' - - zarr<3.2.0 ; extra == 'test-full' - - zstandard ; python_full_version < '3.14' and extra == 'test-full' - - tqdm ; extra == 'tqdm' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/52/a0/c1f604538ff6db22a0690be2dc44ab59178e115f63c917794e529356ab23/h5py-3.16.0-cp311-cp311-manylinux_2_28_x86_64.whl - name: h5py - version: 3.16.0 - sha256: fb1720028d99040792bb2fb31facb8da44a6f29df7697e0b84f0d79aff2e9bd3 - requires_dist: - - numpy>=1.21.2 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/9e/e9/1a19e42cd43cc1365e127db6aae85e1c671da1d9a5d746f4d34a50edb577/h5py-3.16.0-cp312-cp312-manylinux_2_28_x86_64.whl - name: h5py - version: 3.16.0 - sha256: dfc21898ff025f1e8e67e194965a95a8d4754f452f83454538f98f8a3fcb207e - requires_dist: - - numpy>=1.21.2 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/bd/98/ef2b6fe2903e377cbe870c3b2800d62552f1e3dbe81ce49e1923c53d1c5c/h5py-3.16.0-cp313-cp313-manylinux_2_28_x86_64.whl - name: h5py - version: 3.16.0 - sha256: 9300ad32dea9dfc5171f94d5f6948e159ed93e4701280b0f508773b3f582f402 - requires_dist: - - numpy>=1.21.2 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/f1/16/d905e7f53e661ce2c24686c38048d8e2b750ffc4350009d41c4e6c6c9826/h5py-3.16.0-cp314-cp314-manylinux_2_28_x86_64.whl - name: h5py - version: 3.16.0 - sha256: e4360f15875a532bc7b98196c7592ed4fc92672a57c0a621355961cafb17a6dd - requires_dist: - - numpy>=1.21.2 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/ce/27/83314cfd4800ada7542ba49efc772c7a8949d349c7bec177e4e7fa5257e0/happi-3.0.1-py3-none-any.whl - name: happi - version: 3.0.1 - sha256: 0bbf16da6935f2f892ddc78b3ebfecb7c84a6a432d1b2ed49530a6136645d7f5 - requires_dist: - - click - - jinja2 - - simplejson - - platformdirs - - prettytable - - coloredlogs - - entrypoints - - pyqt5 ; extra == 'gui' - - qtpy ; extra == 'gui' - - pymongo ; extra == 'mongo' - - pytest ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-qt ; extra == 'test' - - ipython ; extra == 'test' - - matplotlib>=3.2.0 ; extra == 'test' - - ophyd>=1.5.0 ; extra == 'test' - - pcdsutils ; extra == 'test' - - pcdsdevices ; extra == 'test' - - mongomock>=3.22.0 ; extra == 'test' - - line-profiler ; extra == 'test' - - pyqt5 ; extra == 'test' - - qtpy ; extra == 'test' - - pymongo ; extra == 'test' - - docs-versions-menu ; extra == 'doc' - - doctr ; extra == 'doc' - - sphinx ; extra == 'doc' - - sphinx-rtd-theme>=1.2.0 ; extra == 'doc' - - sphinx-click ; extra == 'doc' - - sphinxcontrib-jquery ; extra == 'doc' - - pyqt5 ; extra == 'all' - - qtpy ; extra == 'all' - - pymongo ; extra == 'all' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/1e/8c/440369f727dcb856f3eeda238d6e67781b180feaa831bd28997d8af10c3b/hiredis-3.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: hiredis - version: 3.4.0 - sha256: 452cff764acb30c106d1e33f1bdf03fa9d4a9b0a9c995d722d4d39c998b40582 - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/33/b5/ff8fe4f812348f09d2943b109cb64c5301af4f601e1cf026518e93a72fff/hiredis-3.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: hiredis - version: 3.4.0 - sha256: 35ab3653569b9867b8d8a3b4c0684a20dc769fe45d4666bedfe9a3391a61b30b - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/70/b7/32110aa458690722a1069c7349b8ebe374a6ba0bdf9ef8925a9f37a74978/hiredis-3.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: hiredis - version: 3.4.0 - sha256: 54b6267918c66d8ba4a3cf519db1235a4bd56d2a0969ca5b2ae3c6b6b7d9ed79 - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/88/07/716ffeb049377d92da6261c5563e554b82336ce3eafb11eb4510c5558be7/hiredis-3.4.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: hiredis - version: 3.4.0 - sha256: 43004b0b48abc628dda1ac3ac4871e1326c126f8cd9f11164d61934d827d7a3b - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/fe/47/deb64c73aec25af7699247e021153a6bfe9a08452f7f7337dcee4aa07a2b/historydict-1.2.6-py3-none-any.whl - name: historydict - version: 1.2.6 - sha256: b4b00a170f05502aa682caba62435da5fe1f73037e884707581fe84f8d7b43f5 -- pypi: https://files.pythonhosted.org/packages/f0/0f/310fb31e39e2d734ccaa2c0fb981ee41f7bd5056ce9bc29b2248bd569169/humanfriendly-10.0-py2.py3-none-any.whl - name: humanfriendly - version: '10.0' - sha256: 1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477 - requires_dist: - - monotonic ; python_full_version == '2.7.*' - - pyreadline ; python_full_version < '3.8' and sys_platform == 'win32' - - pyreadline3 ; python_full_version >= '3.8' and sys_platform == 'win32' - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*' -- pypi: https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl - name: identify - version: 2.6.19 - sha256: 20e6a87f786f768c092a721ad107fc9df0eb89347be9396cadf3f4abbd1fb78a - requires_dist: - - ukkonen ; extra == 'license' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl - name: idna - version: '3.18' - sha256: 7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2 - requires_dist: - - ruff>=0.6.2 ; extra == 'all' - - mypy>=1.11.2 ; extra == 'all' - - pytest>=8.3.2 ; extra == 'all' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/49/fa/391e437a34e55095173dca5f24070d89cbc233ff85bf1c29c93248c6588d/imageio-2.37.3-py3-none-any.whl - name: imageio - version: 2.37.3 - sha256: 46f5bb8522cd421c0f5ae104d8268f569d856b29eb1a13b92829d1970f32c9f0 - requires_dist: - - numpy - - pillow>=8.3.2 - - imageio-ffmpeg ; extra == 'ffmpeg' - - psutil ; extra == 'ffmpeg' - - fsspec[http] ; extra == 'freeimage' - - pillow-heif ; extra == 'pillow-heif' - - tifffile ; extra == 'tifffile' - - av ; extra == 'pyav' - - astropy ; extra == 'fits' - - rawpy ; extra == 'rawpy' - - numpy>2 ; extra == 'rawpy' - - gdal ; extra == 'gdal' - - itk ; extra == 'itk' - - black ; extra == 'linting' - - flake8 ; extra == 'linting' - - pytest ; extra == 'test' - - pytest-cov ; extra == 'test' - - fsspec[github] ; extra == 'test' - - sphinx<6 ; extra == 'docs' - - numpydoc ; extra == 'docs' - - pydata-sphinx-theme ; extra == 'docs' - - pytest ; extra == 'dev' - - pytest-cov ; extra == 'dev' - - fsspec[github] ; extra == 'dev' - - black ; extra == 'dev' - - flake8 ; extra == 'dev' - - av ; extra == 'all-plugins' - - astropy ; extra == 'all-plugins' - - fsspec[http] ; extra == 'all-plugins' - - imageio-ffmpeg ; extra == 'all-plugins' - - numpy>2 ; extra == 'all-plugins' - - pillow-heif ; extra == 'all-plugins' - - psutil ; extra == 'all-plugins' - - rawpy ; extra == 'all-plugins' - - tifffile ; extra == 'all-plugins' - - fsspec[http] ; extra == 'all-plugins-pypy' - - imageio-ffmpeg ; extra == 'all-plugins-pypy' - - pillow-heif ; extra == 'all-plugins-pypy' - - psutil ; extra == 'all-plugins-pypy' - - tifffile ; extra == 'all-plugins-pypy' - - astropy ; extra == 'full' - - av ; extra == 'full' - - black ; extra == 'full' - - flake8 ; extra == 'full' - - fsspec[github,http] ; extra == 'full' - - imageio-ffmpeg ; extra == 'full' - - numpydoc ; extra == 'full' - - numpy>2 ; extra == 'full' - - pillow-heif ; extra == 'full' - - psutil ; extra == 'full' - - pydata-sphinx-theme ; extra == 'full' - - pytest ; extra == 'full' - - pytest-cov ; extra == 'full' - - rawpy ; extra == 'full' - - sphinx<6 ; extra == 'full' - - tifffile ; extra == 'full' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl - name: imagesize - version: 2.0.0 - sha256: 5667c5bbb57ab3f1fa4bc366f4fbc971db3d5ed011fd2715fd8001f782718d96 - requires_python: '>=3.10,<3.15' -- pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - name: iniconfig - version: 2.3.0 - sha256: f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/bc/a4/d6f91d756f901626a30f47578e0bfdfde401e54a3eb49cb9dce9b855000a/intake-2.0.9-py3-none-any.whl - name: intake - version: 2.0.9 - sha256: b509c335bba95b839ccad3d7296a79392468679a5967491c122d3f7fada91352 - requires_dist: - - fsspec>=2023.0.0 - - pyyaml - - platformdirs - - networkx - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/3d/02/77b271f5dc58bfbc0b577c877b2365d1ffea2afe66a80c13f2312820348c/ipykernel-7.3.0-py3-none-any.whl - name: ipykernel - version: 7.3.0 - sha256: 897eb64da762549ef610698fca5e9675195ec6ac8ec7f19d81ce1ca20c876057 - requires_dist: - - appnope>=0.1.2 ; sys_platform == 'darwin' - - comm>=0.1.1 - - debugpy>=1.6.5 - - ipython>=7.23.1 - - jupyter-client>=8.9.0 - - jupyter-core>=5.1,!=6.0.* - - matplotlib-inline>=0.1 - - nest-asyncio2>=1.7.0 - - packaging>=22 - - psutil>=5.7 - - pyzmq>=25 - - tornado>=6.4.1 - - traitlets>=5.4.0 - - coverage[toml] ; extra == 'cov' - - matplotlib ; extra == 'cov' - - pytest-cov ; extra == 'cov' - - trio ; extra == 'cov' - - intersphinx-registry ; extra == 'docs' - - myst-parser ; extra == 'docs' - - pydata-sphinx-theme ; extra == 'docs' - - sphinx ; extra == 'docs' - - sphinx-autodoc-typehints ; extra == 'docs' - - sphinxcontrib-github-alt ; extra == 'docs' - - sphinxcontrib-spelling ; extra == 'docs' - - trio ; extra == 'docs' - - pyqt5 ; extra == 'pyqt5' - - pyside6 ; extra == 'pyside6' - - flaky ; extra == 'test' - - ipyparallel ; extra == 'test' - - pre-commit ; extra == 'test' - - pytest-asyncio>=0.23.5 ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-timeout ; extra == 'test' - - pytest>=7.0,<10 ; extra == 'test' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/40/3a/948263ca3b9d65bb2b1b0c521b3a49fad5d59ada58724bd87d2bd5ff3f36/ipython-9.15.0-py3-none-any.whl - name: ipython - version: 9.15.0 - sha256: 515ad9c3cdf0c932a5a9f6245419e8aba706b7bd03c3e1d3a1c83d9351d6aa6e - requires_dist: - - colorama>=0.4.4 ; sys_platform == 'win32' - - decorator>=5.1.0 - - ipython-pygments-lexers>=1.0.0 - - jedi>=0.18.2 - - matplotlib-inline>=0.1.6 - - pexpect>4.6 ; sys_platform != 'emscripten' and sys_platform != 'win32' - - prompt-toolkit>=3.0.41,<3.1.0 - - psutil>=7 ; sys_platform != 'cygwin' and sys_platform != 'emscripten' - - pygments>=2.14.0 - - stack-data>=0.6.0 - - traitlets>=5.13.0 - - typing-extensions>=4.6 ; python_full_version < '3.12' - - black ; extra == 'black' - - docrepr ; extra == 'doc' - - exceptiongroup ; extra == 'doc' - - intersphinx-registry ; extra == 'doc' - - ipykernel ; extra == 'doc' - - ipython[matplotlib,test] ; extra == 'doc' - - setuptools>=80.0 ; extra == 'doc' - - sphinx-toml==0.0.4 ; extra == 'doc' - - sphinx-rtd-theme>=0.1.8 ; extra == 'doc' - - sphinx>=8.0 ; extra == 'doc' - - typing-extensions ; extra == 'doc' - - pytest>=7.0.0 ; extra == 'test' - - pytest-asyncio>=1.0.0 ; extra == 'test' - - testpath>=0.2 ; extra == 'test' - - packaging>=23.0.0 ; extra == 'test' - - setuptools>=80.0 ; extra == 'test' - - ipython[test] ; extra == 'test-extra' - - curio ; extra == 'test-extra' - - jupyter-ai ; extra == 'test-extra' - - ipython[matplotlib] ; extra == 'test-extra' - - nbformat ; extra == 'test-extra' - - nbclient ; extra == 'test-extra' - - ipykernel>6.30 ; extra == 'test-extra' - - numpy>=2.0 ; extra == 'test-extra' - - pandas>2.1 ; extra == 'test-extra' - - trio>=0.22.0 ; extra == 'test-extra' - - matplotlib>3.9 ; extra == 'matplotlib' - - ipython[doc,matplotlib,terminal,test,test-extra] ; extra == 'all' - - argcomplete>=3.0 ; extra == 'all' - - types-decorator ; extra == 'all' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl - name: ipython-pygments-lexers - version: 1.1.1 - sha256: a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c - requires_dist: - - pygments - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/3e/95/c7c34aa53c16353c56d0b802fba48d5f5caa2cdee7958acbcb795c830416/isort-8.0.1-py3-none-any.whl - name: isort - version: 8.0.1 - sha256: 28b89bc70f751b559aeca209e6120393d43fbe2490de0559662be7a9787e3d75 - requires_dist: - - colorama ; extra == 'colors' - requires_python: '>=3.10.0' -- pypi: https://files.pythonhosted.org/packages/9a/93/242e2eab5fe682ffcb8b0084bde703a41d51e17ee0f3a31ff0d9d813620a/jedi-0.20.0-py2.py3-none-any.whl - name: jedi - version: 0.20.0 - sha256: 7bdd9c2634f56713299976f4cbd59cb3fa92165cc5e05ea811fb253480728b67 - requires_dist: - - parso>=0.8.6,<0.9.0 - - django ; extra == 'dev' - - attrs ; extra == 'dev' - - colorama ; extra == 'dev' - - docopt ; extra == 'dev' - - flake8==7.1.2 ; extra == 'dev' - - pytest<9.0.0 ; extra == 'dev' - - types-setuptools==80.9.0.20250529 ; extra == 'dev' - - typing-extensions ; extra == 'dev' - - zuban==0.7.0 ; extra == 'dev' - - jinja2==3.1.6 ; extra == 'docs' - - markupsafe==3.0.3 ; extra == 'docs' - - pygments==2.20.0 ; extra == 'docs' - - sphinx==9.1.0 ; extra == 'docs' - - alabaster==1.0.0 ; extra == 'docs' - - babel==2.18.0 ; extra == 'docs' - - certifi==2026.4.22 ; extra == 'docs' - - charset-normalizer==3.4.7 ; extra == 'docs' - - docutils==0.22.4 ; extra == 'docs' - - idna==3.13 ; extra == 'docs' - - imagesize==2.0.0 ; extra == 'docs' - - iniconfig==2.3.0 ; extra == 'docs' - - packaging==26.2 ; extra == 'docs' - - pluggy==1.6.0 ; extra == 'docs' - - pytest==9.0.3 ; extra == 'docs' - - requests==2.33.1 ; extra == 'docs' - - roman-numerals==4.1.0 ; extra == 'docs' - - snowballstemmer==3.0.1 ; extra == 'docs' - - sphinx-rtd-theme==3.1.0 ; extra == 'docs' - - sphinxcontrib-applehelp==2.0.0 ; extra == 'docs' - - sphinxcontrib-devhelp==2.0.0 ; extra == 'docs' - - sphinxcontrib-htmlhelp==2.1.0 ; extra == 'docs' - - sphinxcontrib-jquery==4.1 ; extra == 'docs' - - sphinxcontrib-jsmath==1.0.1 ; extra == 'docs' - - sphinxcontrib-qthelp==2.0.0 ; extra == 'docs' - - sphinxcontrib-serializinghtml==2.0.0 ; extra == 'docs' - - urllib3==2.6.3 ; extra == 'docs' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - name: jinja2 - version: 3.1.6 - sha256: 85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 - requires_dist: - - markupsafe>=2.0 - - babel>=2.7 ; extra == 'i18n' - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - name: jsonschema - version: 4.26.0 - sha256: d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce - requires_dist: - - attrs>=22.2.0 - - jsonschema-specifications>=2023.3.6 - - referencing>=0.28.4 - - rpds-py>=0.25.0 - - fqdn ; extra == 'format' - - idna ; extra == 'format' - - isoduration ; extra == 'format' - - jsonpointer>1.13 ; extra == 'format' - - rfc3339-validator ; extra == 'format' - - rfc3987 ; extra == 'format' - - uri-template ; extra == 'format' - - webcolors>=1.11 ; extra == 'format' - - fqdn ; extra == 'format-nongpl' - - idna ; extra == 'format-nongpl' - - isoduration ; extra == 'format-nongpl' - - jsonpointer>1.13 ; extra == 'format-nongpl' - - rfc3339-validator ; extra == 'format-nongpl' - - rfc3986-validator>0.1.0 ; extra == 'format-nongpl' - - rfc3987-syntax>=1.1.0 ; extra == 'format-nongpl' - - uri-template ; extra == 'format-nongpl' - - webcolors>=24.6.0 ; extra == 'format-nongpl' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - name: jsonschema-specifications - version: 2025.9.1 - sha256: 98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe - requires_dist: - - referencing>=0.31.0 - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/3f/6f/56d39bf385c5c27988aebaf0c18a2a17e960575740100973511018bd904e/jupyter_client-8.9.1-py3-none-any.whl - name: jupyter-client - version: 8.9.1 - sha256: 0b7a295bc46e8751e9adae84781f726c851c1d911bd793edc4a3bde942e3da81 - requires_dist: - - jupyter-core>=5.1 - - python-dateutil>=2.8.2 - - pyzmq>=25.0 - - tornado>=6.4.1 - - traitlets>=5.3 - - typing-extensions>=4.13.0 - - ipykernel ; extra == 'docs' - - myst-parser ; extra == 'docs' - - pydata-sphinx-theme ; extra == 'docs' - - sphinx-autodoc-typehints ; extra == 'docs' - - sphinx>=4 ; extra == 'docs' - - sphinxcontrib-github-alt ; extra == 'docs' - - sphinxcontrib-spelling ; extra == 'docs' - - orjson ; extra == 'orjson' - - anyio ; extra == 'test' - - coverage ; extra == 'test' - - ipykernel>=6.14 ; extra == 'test' - - msgpack ; extra == 'test' - - mypy ; platform_python_implementation != 'PyPy' and extra == 'test' - - paramiko ; sys_platform == 'win32' and extra == 'test' - - pre-commit ; extra == 'test' - - pytest ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-jupyter[client]>=0.6.2 ; extra == 'test' - - pytest-timeout ; extra == 'test' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/ca/77/71d78d58f15c22db16328a476426f7ac4a60d3a5a7ba3b9627ee2f7903d4/jupyter_console-6.6.3-py3-none-any.whl - name: jupyter-console - version: 6.6.3 - sha256: 309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485 - requires_dist: - - ipykernel>=6.14 - - ipython - - jupyter-client>=7.0.0 - - jupyter-core>=4.12,!=5.0.* - - prompt-toolkit>=3.0.30 - - pygments - - pyzmq>=17 - - traitlets>=5.4 - - flaky ; extra == 'test' - - pexpect ; extra == 'test' - - pytest ; extra == 'test' - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - name: jupyter-core - version: 5.9.1 - sha256: ebf87fdc6073d142e114c72c9e29a9d7ca03fad818c5d300ce2adc1fb0743407 - requires_dist: - - platformdirs>=2.5 - - traitlets>=5.3 - - intersphinx-registry ; extra == 'docs' - - myst-parser ; extra == 'docs' - - pydata-sphinx-theme ; extra == 'docs' - - sphinx-autodoc-typehints ; extra == 'docs' - - sphinxcontrib-spelling ; extra == 'docs' - - traitlets ; extra == 'docs' - - ipykernel ; extra == 'test' - - pre-commit ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-timeout ; extra == 'test' - - pytest<9 ; extra == 'test' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/2b/0a/7b98e1e119878a27ba8618ca1e18b14f992ff1eda40f47bccccf4de44121/kiwisolver-1.5.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - name: kiwisolver - version: 1.5.0 - sha256: 332b4f0145c30b5f5ad9374881133e5aa64320428a57c2c2b61e9d891a51c2f3 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/80/46/bddc13df6c2a40741e0cc7865bb1c9ed4796b6760bd04ce5fae3928ef917/kiwisolver-1.5.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - name: kiwisolver - version: 1.5.0 - sha256: 2517e24d7315eb51c10664cdb865195df38ab74456c677df67bb47f12d088a27 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/c4/13/680c54afe3e65767bed7ec1a15571e1a2f1257128733851ade24abcefbcc/kiwisolver-1.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - name: kiwisolver - version: 1.5.0 - sha256: bb5136fb5352d3f422df33f0c879a1b0c204004324150cc3b5e3c4f310c9049f - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/e7/f9/b06c934a6aa8bc91f566bd2a214fd04c30506c2d9e2b6b171953216a65b6/kiwisolver-1.5.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - name: kiwisolver - version: 1.5.0 - sha256: 80aa065ffd378ff784822a6d7c3212f2d5f5e9c3589614b5c228b311fd3063ac - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/8a/a1/8d812e53a5da1687abb10445275d41a8b13adb781bbf7196ddbcf8d88505/lazy_loader-0.5-py3-none-any.whl - name: lazy-loader - version: '0.5' - sha256: ab0ea149e9c554d4ffeeb21105ac60bed7f3b4fd69b1d2360a4add51b170b005 - requires_dist: - - packaging - - pytest>=8.0 ; extra == 'test' - - pytest-cov>=5.0 ; extra == 'test' - - coverage[toml]>=7.2 ; extra == 'test' - - pre-commit==4.3.0 ; extra == 'lint' - - changelist==0.5 ; extra == 'dev' - - spin==0.15 ; extra == 'dev' - requires_python: '>=3.9' -- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda - sha256: 3d584956604909ff5df353767f3a2a2f60e07d070b328d109f30ac40cd62df6c - md5: 18335a698559cdbcd86150a48bf54ba6 - depends: - - __glibc >=2.17,<3.0.a0 - - zstd >=1.5.7,<1.6.0a0 - constrains: - - binutils_impl_linux-64 2.45.1 - license: GPL-3.0-only - license_family: GPL - purls: [] - size: 728002 - timestamp: 1774197446916 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda - sha256: 16feffd9ddbbe5b718515d38ee376c685ba95491cd901244e24671d20b952a77 - md5: b24d3c612f71e7aa74158d92106318b2 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - constrains: - - expat 2.8.1.* - license: MIT - license_family: MIT - purls: [] - size: 77856 - timestamp: 1781203599810 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - sha256: 31f19b6a88ce40ebc0d5a992c131f57d919f73c0b92cd1617a5bec83f6e961e6 - md5: a360c33a5abe61c07959e449fa1453eb - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - license: MIT - license_family: MIT - purls: [] - size: 58592 - timestamp: 1769456073053 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda - sha256: 8e0a3b5e41272e5678499b5dfc4cddb673f9e935de01eb0767ce857001229f46 - md5: 57736f29cc2b0ec0b6c2952d3f101b6a - depends: - - __glibc >=2.17,<3.0.a0 - - _openmp_mutex >=4.5 - constrains: - - libgcc-ng ==15.2.0=*_19 - - libgomp 15.2.0 he0feb66_19 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 1041084 - timestamp: 1778269013026 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda - sha256: 9dcf54adfaa5e861123c2da4f2f0451a685464ea7e5a41ad91cf67b31d658d98 - md5: 331ee9b72b9dff570d56b1302c5ab37d - depends: - - libgcc 15.2.0 he0feb66_19 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 27694 - timestamp: 1778269016987 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda - sha256: 5abe4ab9d93f6c9757d654f1969ae2267d4505315c1f2f8fe705fd60af084f1b - md5: faac990cb7aedc7f3a2224f2c9b0c26c - depends: - - __glibc >=2.17,<3.0.a0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 603817 - timestamp: 1778268942614 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda - sha256: ec30e52a3c1bf7d0425380a189d209a52baa03f22fb66dd3eb587acaa765bd6d - md5: b88d90cad08e6bc8ad540cb310a761fb - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - constrains: - - xz 5.8.3.* - license: 0BSD - purls: [] - size: 113478 - timestamp: 1775825492909 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - sha256: fe171ed5cf5959993d43ff72de7596e8ac2853e9021dec0344e583734f1e0843 - md5: 2c21e66f50753a083cbe6b80f38268fa - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 92400 - timestamp: 1769482286018 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda - sha256: 927fe72b054277cde6cb82597d0fcf6baf127dcbce2e0a9d8925a68f1265eef5 - md5: d864d34357c3b65a4b731f78c0801dc4 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - license: LGPL-2.1-only - license_family: GPL - purls: [] - size: 33731 - timestamp: 1750274110928 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.3-h0c1763c_0.conda - sha256: 365376f4815e5e80def2b3462a2419708b7c292da0da85278386c2618621fff4 - md5: 4aed8e657e9ff156bdbe849b4df44389 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libzlib >=1.3.2,<2.0a0 - license: blessing - purls: [] - size: 962119 - timestamp: 1782519076616 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda - sha256: 9b1bdce27a7e31f7d241aeecff67a1f3101d52a2b1e33ccc2cdf2613072bf81f - md5: 01bb81d12c957de066ea7362007df642 - depends: - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 40017 - timestamp: 1781625522462 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c - md5: 5aa797f8787fe7a17d1b0821485b5adc - depends: - - libgcc-ng >=12 - license: LGPL-2.1-or-later - purls: [] - size: 100393 - timestamp: 1702724383534 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda - sha256: 55044c403570f0dc26e6364de4dc5368e5f3fc7ff103e867c487e2b5ab2bcda9 - md5: d87ff7921124eccd67248aa483c23fec - depends: - - __glibc >=2.17,<3.0.a0 - constrains: - - zlib 1.3.2 *_2 - license: Zlib - license_family: Other - purls: [] - size: 63629 - timestamp: 1774072609062 -- pypi: https://files.pythonhosted.org/packages/25/3b/b55cb577aa148ed4e383e9700c36f70b651cd434e1c07568f0a86c9d5fbb/lz4-4.4.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: lz4 - version: 4.4.5 - sha256: 75419bb1a559af00250b8f1360d508444e80ed4b26d9d40ec5b09fe7875cb989 - requires_dist: - - pytest!=3.3.0 ; extra == 'tests' - - psutil ; extra == 'tests' - - pytest-cov ; extra == 'tests' - - sphinx>=1.6.0 ; extra == 'docs' - - sphinx-bootstrap-theme ; extra == 'docs' - - flake8 ; extra == 'flake8' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/55/d9/e3867222474f6c1b76e89f3bd914595af69f55bf2c1866e984c548afdc15/lz4-4.4.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: lz4 - version: 4.4.5 - sha256: 24092635f47538b392c4eaeff14c7270d2c8e806bf4be2a6446a378591c5e69e - requires_dist: - - pytest!=3.3.0 ; extra == 'tests' - - psutil ; extra == 'tests' - - pytest-cov ; extra == 'tests' - - sphinx>=1.6.0 ; extra == 'docs' - - sphinx-bootstrap-theme ; extra == 'docs' - - flake8 ; extra == 'flake8' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/d2/fb/ba9256c48266a09012ed1d9b0253b9aa4fe9cdff094f8febf5b26a4aa2a2/lz4-4.4.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: lz4 - version: 4.4.5 - sha256: 451039b609b9a88a934800b5fc6ee401c89ad9c175abf2f4d9f8b2e4ef1afc64 - requires_dist: - - pytest!=3.3.0 ; extra == 'tests' - - psutil ; extra == 'tests' - - pytest-cov ; extra == 'tests' - - sphinx>=1.6.0 ; extra == 'docs' - - sphinx-bootstrap-theme ; extra == 'docs' - - flake8 ; extra == 'flake8' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/f1/01/d52c7b11eaa286d49dae619c0eec4aabc0bf3cda7a7467eb77c62c4471f3/lz4-4.4.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: lz4 - version: 4.4.5 - sha256: 0bba042ec5a61fa77c7e380351a61cb768277801240249841defd2ff0a10742f - requires_dist: - - pytest!=3.3.0 ; extra == 'tests' - - psutil ; extra == 'tests' - - pytest-cov ; extra == 'tests' - - sphinx>=1.6.0 ; extra == 'docs' - - sphinx-bootstrap-theme ; extra == 'docs' - - flake8 ; extra == 'flake8' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: markupsafe - version: 3.0.3 - sha256: 0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: markupsafe - version: 3.0.3 - sha256: d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: markupsafe - version: 3.0.3 - sha256: 457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97 - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: markupsafe - version: 3.0.3 - sha256: ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676 - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/29/dc/6377ecfaa5fef79430f74a1a16638b4e2aa30d4692bae2c19f9d76fe3b01/matplotlib-3.11.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - name: matplotlib - version: 3.11.0 - sha256: 19c16c61dea63b3582918503e6b294193961261d9daa806d4ae2151f1ad05430 - requires_dist: - - contourpy>=1.0.1 - - cycler>=0.10 - - fonttools>=4.22.0 - - kiwisolver>=1.3.1 - - numpy>=1.25 - - packaging>=20.0 - - pillow>=9 - - pyparsing>=3 - - python-dateutil>=2.7 - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/53/f4/f0b4f9ba7ec14a7af8151f3ad71ecfe3561e6ba38cfab1db3681ba4ca112/matplotlib-3.11.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - name: matplotlib - version: 3.11.0 - sha256: 630eee0e67d35cce2019a0e670719f4816e3b86aff0fa72729f6c69786fceb45 - requires_dist: - - contourpy>=1.0.1 - - cycler>=0.10 - - fonttools>=4.22.0 - - kiwisolver>=1.3.1 - - numpy>=1.25 - - packaging>=20.0 - - pillow>=9 - - pyparsing>=3 - - python-dateutil>=2.7 - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/94/95/7f522393c88313336b20d70fc849555757b2e5febc22b83b3a3f0fd4bce9/matplotlib-3.11.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - name: matplotlib - version: 3.11.0 - sha256: be5f93a1d21981bfb802ded0d77a0caa92d4342a47d45754fac77e314a506344 - requires_dist: - - contourpy>=1.0.1 - - cycler>=0.10 - - fonttools>=4.22.0 - - kiwisolver>=1.3.1 - - numpy>=1.25 - - packaging>=20.0 - - pillow>=9 - - pyparsing>=3 - - python-dateutil>=2.7 - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/a4/c0/1117d53077e3ac3152503a84e9cf7a5c239576805ee71276e80c2aaa7471/matplotlib-3.11.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - name: matplotlib - version: 3.11.0 - sha256: be152b7570324dc8d01574cc9474dd2d803237acf528bcbb5b211fa347461a09 - requires_dist: - - contourpy>=1.0.1 - - cycler>=0.10 - - fonttools>=4.22.0 - - kiwisolver>=1.3.1 - - numpy>=1.25 - - packaging>=20.0 - - pillow>=9 - - pyparsing>=3 - - python-dateutil>=2.7 - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl - name: matplotlib-inline - version: 0.2.2 - sha256: 3c821cf1c209f59fb2d2d64abbf5b23b67bcb2210d663f9918dd851c6da1fcf6 - requires_dist: - - traitlets - - flake8 ; extra == 'test' - - nbdime ; extra == 'test' - - nbval ; extra == 'test' - - notebook ; extra == 'test' - - pytest ; extra == 'test' - - matplotlib ; extra == 'test' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl - name: mccabe - version: 0.7.0 - sha256: 6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e - requires_python: '>=3.6' -- pypi: https://files.pythonhosted.org/packages/03/8d/671d81534ea0e2b0e8a121be100020da09eb78861fe3aa8f3ef7dcd3bed1/msgpack-1.2.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: msgpack - version: 1.2.1 - sha256: a28d076ca7c82b9c8728ad90b7147489449557038bed50e4241eb832395169b4 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/19/03/8c63e8cf52958534ef688625965ab04c269a6cadd8caef16758b380a821a/msgpack-1.2.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: msgpack - version: 1.2.1 - sha256: 0e2bf9280bceb5efca998435904b5d3e9fdbcc11d90dc9df30aec7973252b720 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/6a/fd/6adabd4f6d5e686f97dd02ce7fce3fe4cf672cbac36b8f67ff4040e8ad8b/msgpack-1.2.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: msgpack - version: 1.2.1 - sha256: 020e881a764b20d8d7ca1a54fc01b8175519d108e3c3f194fddc200bda95951a - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/79/d3/36a46a8ed992b781acbc05928bd5bee3c810cb0c3563bf81a7b0c04a1a76/msgpack-1.2.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: msgpack - version: 1.2.1 - sha256: 787c9bebb5833e8f6fc8abca3c0597683d8d87f56a8842b6b89c75a5f3176e2d - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/9b/5d/f25ac7d4fb77cbd53ddc6d05d833c6bf52b12770a44fa9a447eed470ca9a/msgpack_numpy-0.4.8-py2.py3-none-any.whl - name: msgpack-numpy - version: 0.4.8 - sha256: 773c19d4dfbae1b3c7b791083e2caf66983bb19b40901646f61d8731554ae3da - requires_dist: - - numpy>=1.9.0 - - msgpack>=0.5.2 -- pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl - name: mypy-extensions - version: 1.1.0 - sha256: 1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505 - requires_python: '>=3.8' -- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda - sha256: fc89f74bbe362fb29fa3c037697a89bec140b346a2469a90f7936d1d7ea4d8a3 - md5: fc21868a1a5aacc937e7a18747acb8a5 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - license: X11 AND BSD-3-Clause - purls: [] - size: 918956 - timestamp: 1777422145199 -- pypi: https://files.pythonhosted.org/packages/c5/3c/3179b85b0e1c3659f0369940200cd6d0fa900e6cefcc7ea0bc6dd0e29ffb/nest_asyncio2-1.7.2-py3-none-any.whl - name: nest-asyncio2 - version: 1.7.2 - sha256: f5dfa702f3f81f6a03857e9a19e2ba578c0946a4ad417b4c50a24d7ba641fe01 - requires_python: '>=3.5' -- pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - name: networkx - version: 3.6.1 - sha256: d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762 - requires_dist: - - asv ; extra == 'benchmarking' - - virtualenv ; extra == 'benchmarking' - - numpy>=1.25 ; extra == 'default' - - scipy>=1.11.2 ; extra == 'default' - - matplotlib>=3.8 ; extra == 'default' - - pandas>=2.0 ; extra == 'default' - - pre-commit>=4.1 ; extra == 'developer' - - mypy>=1.15 ; extra == 'developer' - - sphinx>=8.0 ; extra == 'doc' - - pydata-sphinx-theme>=0.16 ; extra == 'doc' - - sphinx-gallery>=0.18 ; extra == 'doc' - - numpydoc>=1.8.0 ; extra == 'doc' - - pillow>=10 ; extra == 'doc' - - texext>=0.6.7 ; extra == 'doc' - - myst-nb>=1.1 ; extra == 'doc' - - intersphinx-registry ; extra == 'doc' - - osmnx>=2.0.0 ; extra == 'example' - - momepy>=0.7.2 ; extra == 'example' - - contextily>=1.6 ; extra == 'example' - - seaborn>=0.13 ; extra == 'example' - - cairocffi>=1.7 ; extra == 'example' - - igraph>=0.11 ; extra == 'example' - - scikit-learn>=1.5 ; extra == 'example' - - iplotx>=0.9.0 ; extra == 'example' - - lxml>=4.6 ; extra == 'extra' - - pygraphviz>=1.14 ; extra == 'extra' - - pydot>=3.0.1 ; extra == 'extra' - - sympy>=1.10 ; extra == 'extra' - - build>=0.10 ; extra == 'release' - - twine>=4.0 ; extra == 'release' - - wheel>=0.40 ; extra == 'release' - - changelist==0.5 ; extra == 'release' - - pytest>=7.2 ; extra == 'test' - - pytest-cov>=4.0 ; extra == 'test' - - pytest-xdist>=3.0 ; extra == 'test' - - pytest-mpl ; extra == 'test-extras' - - pytest-randomly ; extra == 'test-extras' - requires_python: '>=3.11,!=3.14.1' -- pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - name: nodeenv - version: 1.10.0 - sha256: 5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827 - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*' -- pypi: https://files.pythonhosted.org/packages/02/03/74fe2a4cb3817d94d86402f2506554130a2f01414e299b5a843e5a8a957f/numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - name: numpy - version: 2.4.6 - sha256: 89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93 - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/41/5f/0f992cb24560673496c5d68de61913b57166ce530ffda07c1f280e0cc464/numpy-2.5.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - name: numpy - version: 2.5.1 - sha256: 54ad769f17bc2d833b620851989f62054fb9ab93c969d9e1dc3c8e3d56beea21 - requires_python: '>=3.12' -- pypi: https://files.pythonhosted.org/packages/b8/a9/6e73d68500f80773f65f0654ea932019d6694329a0eb0ed0533de38df376/numpy-2.5.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - name: numpy - version: 2.5.1 - sha256: 59fda5e192b570217ec2580c96f00e9a7e12ef6866a900eb089b62c1a32545ca - requires_python: '>=3.12' -- pypi: https://files.pythonhosted.org/packages/ed/a7/2bcd3fdbb87804755c35b729bf8709d62025c5f4cfd7d5b2415997097515/numpy-2.5.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - name: numpy - version: 2.5.1 - sha256: 9726558e8db4a5bf7929a70ae50f63abda4daf0efe810e3bfbab95976f75fc1a - requires_python: '>=3.12' -- pypi: https://files.pythonhosted.org/packages/62/5e/3a6a3e90f35cea3853c45e5d5fb9b7192ce4384616f932cf7591298ab6e1/numpydoc-1.10.0-py3-none-any.whl - name: numpydoc - version: 1.10.0 - sha256: 3149da9874af890bcc2a82ef7aae5484e5aa81cb2778f08e3c307ba6d963721b - requires_dist: - - sphinx>=6 - - tomli>=1.1.0 ; python_full_version < '3.11' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl - name: openpyxl - version: 3.1.5 - sha256: 5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2 - requires_dist: - - et-xmlfile - requires_python: '>=3.8' -- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda - sha256: d48f5c22b9897c01e4dff3680f1f57ceb02711ab9c62f74339b080419dfad34b - md5: 79dd2074b5cd5c5c6b2930514a11e22d - depends: - - __glibc >=2.17,<3.0.a0 - - ca-certificates - - libgcc >=14 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 3159683 - timestamp: 1781069855778 -- pypi: https://files.pythonhosted.org/packages/17/83/6dba32b85f31868400440dc7ad2ca1eab94cbbf3a7b0459ed39f8311a9e2/opentelemetry_api-1.43.0-py3-none-any.whl - name: opentelemetry-api - version: 1.43.0 - sha256: 20acf45e9b21851926835292e4045d290acade1edd2ff3de86d2f069687ba1fd - requires_dist: - - typing-extensions>=4.5.0 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/ef/80/c6dbf1f8d14fbb5615d2e99b798d61b76eb937f09e1e948d0e8aaf8873b2/ophyd-1.11.2-py3-none-any.whl - name: ophyd - version: 1.11.2 - sha256: 0254dbced299fbff1841b4f80102dd0e0c482176d5812a2246a08763acd87a75 - requires_dist: - - networkx>=2.0 - - numpy - - opentelemetry-api - - packaging - - pint - - attrs>=19.3.0 ; extra == 'dev' - - black==22.3.0 ; extra == 'dev' - - bluesky>=1.11.0 ; extra == 'dev' - - caproto[standard]>=0.4.2rc1,!=1.2.0 ; extra == 'dev' - - pytest-codecov ; extra == 'dev' - - databroker>=1.0.0b1 ; extra == 'dev' - - doctr ; extra == 'dev' - - epics-pypdb ; extra == 'dev' - - flake8 ; extra == 'dev' - - flake8-isort ; extra == 'dev' - - h5py ; extra == 'dev' - - inflection ; extra == 'dev' - - ipython ; extra == 'dev' - - ipywidgets ; extra == 'dev' - - matplotlib ; extra == 'dev' - - mypy ; extra == 'dev' - - myst-parser ; extra == 'dev' - - numpydoc ; extra == 'dev' - - pre-commit ; extra == 'dev' - - pydata-sphinx-theme ; extra == 'dev' - - pyepics>=3.4.2,<3.5.7 ; extra == 'dev' - - pytest ; extra == 'dev' - - pytest-asyncio ; extra == 'dev' - - pytest-cov ; extra == 'dev' - - pytest-faulthandler ; extra == 'dev' - - pytest-rerunfailures ; extra == 'dev' - - pytest-timeout ; extra == 'dev' - - pipdeptree ; extra == 'dev' - - setuptools>=64 ; extra == 'dev' - - setuptools-scm[toml]>=6.2 ; extra == 'dev' - - sphinx-autobuild ; extra == 'dev' - - sphinx-design ; extra == 'dev' - - tox-direct ; extra == 'dev' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/1e/2c/76ac5e485f6405fc0f1dbbd1c98b7c1137d4aa5c1e49ea9e69bbd8d22ae1/ophyd_async-0.19.3-py3-none-any.whl - name: ophyd-async - version: 0.19.3 - sha256: ef6201edb52e5a54008d57cad1808626aa6493ba4a8fd015e08d14bcffbb697a - requires_dist: - - numpy - - bluesky>=1.13.1rc2 - - event-model>=1.23 - - pyyaml - - colorlog - - pydantic>=2.0 - - pydantic-numpy - - stamina>=23.1.0 - - scanspec>=0.8 - - velocity-profile - - h5py ; extra == 'sim' - - aioca>=2.0a4 ; extra == 'ca' - - p4p>=4.2.0 ; extra == 'pva' - - pytango>=10.1.3 ; extra == 'tango' - - ipython ; extra == 'demo' - - matplotlib ; extra == 'demo' - - pyqt6 ; extra == 'demo' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl - name: packaging - version: '26.2' - sha256: 5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e - requires_python: '>=3.8' -- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda - sha256: 3906abfb6511a3bb309e39b9b1b7bc38f50a723971de2395489fd1f379255890 - md5: 4c06a92e74452cfa53623a81592e8934 - depends: - - python >=3.8 - - python - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/packaging?source=hash-mapping - size: 91574 - timestamp: 1777103621679 -- pypi: https://files.pythonhosted.org/packages/32/f1/bbecd2f867b97abebe0f9b53d750f862251b40337e061b36676ded3d920f/pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - name: pandas - version: 3.0.3 - sha256: 8a1e45c80cceb3b4a21bc5939d52e8cbd8d9b7305309219d59e9754d9ce09e27 - requires_dist: - - numpy>=1.26.0 ; python_full_version < '3.14' - - numpy>=2.3.3 ; python_full_version >= '3.14' - - python-dateutil>=2.8.2 - - tzdata ; sys_platform == 'win32' - - tzdata ; sys_platform == 'emscripten' - - hypothesis>=6.116.0 ; extra == 'test' - - pytest>=8.3.4 ; extra == 'test' - - pytest-xdist>=3.6.1 ; extra == 'test' - - pyarrow>=13.0.0 ; extra == 'pyarrow' - - bottleneck>=1.4.2 ; extra == 'performance' - - numba>=0.60.0 ; extra == 'performance' - - numexpr>=2.10.2 ; extra == 'performance' - - scipy>=1.14.1 ; extra == 'computation' - - xarray>=2024.10.0 ; extra == 'computation' - - fsspec>=2024.10.0 ; extra == 'fss' - - s3fs>=2024.10.0 ; extra == 'aws' - - gcsfs>=2024.10.0 ; extra == 'gcp' - - odfpy>=1.4.1 ; extra == 'excel' - - openpyxl>=3.1.5 ; extra == 'excel' - - python-calamine>=0.3.0 ; extra == 'excel' - - pyxlsb>=1.0.10 ; extra == 'excel' - - xlrd>=2.0.1 ; extra == 'excel' - - xlsxwriter>=3.2.0 ; extra == 'excel' - - pyarrow>=13.0.0 ; extra == 'parquet' - - pyarrow>=13.0.0 ; extra == 'feather' - - pyiceberg>=0.8.1 ; extra == 'iceberg' - - tables>=3.10.1 ; extra == 'hdf5' - - pyreadstat>=1.2.8 ; extra == 'spss' - - sqlalchemy>=2.0.36 ; extra == 'postgresql' - - psycopg2>=2.9.10 ; extra == 'postgresql' - - adbc-driver-postgresql>=1.2.0 ; extra == 'postgresql' - - sqlalchemy>=2.0.36 ; extra == 'mysql' - - pymysql>=1.1.1 ; extra == 'mysql' - - sqlalchemy>=2.0.36 ; extra == 'sql-other' - - adbc-driver-postgresql>=1.2.0 ; extra == 'sql-other' - - adbc-driver-sqlite>=1.2.0 ; extra == 'sql-other' - - beautifulsoup4>=4.12.3 ; extra == 'html' - - html5lib>=1.1 ; extra == 'html' - - lxml>=5.3.0 ; extra == 'html' - - lxml>=5.3.0 ; extra == 'xml' - - matplotlib>=3.9.3 ; extra == 'plot' - - jinja2>=3.1.5 ; extra == 'output-formatting' - - tabulate>=0.9.0 ; extra == 'output-formatting' - - pyqt5>=5.15.9 ; extra == 'clipboard' - - qtpy>=2.4.2 ; extra == 'clipboard' - - zstandard>=0.23.0 ; extra == 'compression' - - pytz>=2020.1 ; extra == 'timezone' - - adbc-driver-postgresql>=1.2.0 ; extra == 'all' - - adbc-driver-sqlite>=1.2.0 ; extra == 'all' - - beautifulsoup4>=4.12.3 ; extra == 'all' - - bottleneck>=1.4.2 ; extra == 'all' - - fastparquet>=2024.11.0 ; extra == 'all' - - fsspec>=2024.10.0 ; extra == 'all' - - gcsfs>=2024.10.0 ; extra == 'all' - - html5lib>=1.1 ; extra == 'all' - - hypothesis>=6.116.0 ; extra == 'all' - - jinja2>=3.1.5 ; extra == 'all' - - lxml>=5.3.0 ; extra == 'all' - - matplotlib>=3.9.3 ; extra == 'all' - - numba>=0.60.0 ; extra == 'all' - - numexpr>=2.10.2 ; extra == 'all' - - odfpy>=1.4.1 ; extra == 'all' - - openpyxl>=3.1.5 ; extra == 'all' - - psycopg2>=2.9.10 ; extra == 'all' - - pyarrow>=13.0.0 ; extra == 'all' - - pyiceberg>=0.8.1 ; extra == 'all' - - pymysql>=1.1.1 ; extra == 'all' - - pyqt5>=5.15.9 ; extra == 'all' - - pyreadstat>=1.2.8 ; extra == 'all' - - pytest>=8.3.4 ; extra == 'all' - - pytest-xdist>=3.6.1 ; extra == 'all' - - python-calamine>=0.3.0 ; extra == 'all' - - pytz>=2020.1 ; extra == 'all' - - pyxlsb>=1.0.10 ; extra == 'all' - - qtpy>=2.4.2 ; extra == 'all' - - scipy>=1.14.1 ; extra == 'all' - - s3fs>=2024.10.0 ; extra == 'all' - - sqlalchemy>=2.0.36 ; extra == 'all' - - tables>=3.10.1 ; extra == 'all' - - tabulate>=0.9.0 ; extra == 'all' - - xarray>=2024.10.0 ; extra == 'all' - - xlrd>=2.0.1 ; extra == 'all' - - xlsxwriter>=3.2.0 ; extra == 'all' - - zstandard>=0.23.0 ; extra == 'all' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - name: pandas - version: 3.0.3 - sha256: 9d71c63ae4ebdbf70209742096f1fc46a83a0613c99d4b23766cced9ff8cd62a - requires_dist: - - numpy>=1.26.0 ; python_full_version < '3.14' - - numpy>=2.3.3 ; python_full_version >= '3.14' - - python-dateutil>=2.8.2 - - tzdata ; sys_platform == 'win32' - - tzdata ; sys_platform == 'emscripten' - - hypothesis>=6.116.0 ; extra == 'test' - - pytest>=8.3.4 ; extra == 'test' - - pytest-xdist>=3.6.1 ; extra == 'test' - - pyarrow>=13.0.0 ; extra == 'pyarrow' - - bottleneck>=1.4.2 ; extra == 'performance' - - numba>=0.60.0 ; extra == 'performance' - - numexpr>=2.10.2 ; extra == 'performance' - - scipy>=1.14.1 ; extra == 'computation' - - xarray>=2024.10.0 ; extra == 'computation' - - fsspec>=2024.10.0 ; extra == 'fss' - - s3fs>=2024.10.0 ; extra == 'aws' - - gcsfs>=2024.10.0 ; extra == 'gcp' - - odfpy>=1.4.1 ; extra == 'excel' - - openpyxl>=3.1.5 ; extra == 'excel' - - python-calamine>=0.3.0 ; extra == 'excel' - - pyxlsb>=1.0.10 ; extra == 'excel' - - xlrd>=2.0.1 ; extra == 'excel' - - xlsxwriter>=3.2.0 ; extra == 'excel' - - pyarrow>=13.0.0 ; extra == 'parquet' - - pyarrow>=13.0.0 ; extra == 'feather' - - pyiceberg>=0.8.1 ; extra == 'iceberg' - - tables>=3.10.1 ; extra == 'hdf5' - - pyreadstat>=1.2.8 ; extra == 'spss' - - sqlalchemy>=2.0.36 ; extra == 'postgresql' - - psycopg2>=2.9.10 ; extra == 'postgresql' - - adbc-driver-postgresql>=1.2.0 ; extra == 'postgresql' - - sqlalchemy>=2.0.36 ; extra == 'mysql' - - pymysql>=1.1.1 ; extra == 'mysql' - - sqlalchemy>=2.0.36 ; extra == 'sql-other' - - adbc-driver-postgresql>=1.2.0 ; extra == 'sql-other' - - adbc-driver-sqlite>=1.2.0 ; extra == 'sql-other' - - beautifulsoup4>=4.12.3 ; extra == 'html' - - html5lib>=1.1 ; extra == 'html' - - lxml>=5.3.0 ; extra == 'html' - - lxml>=5.3.0 ; extra == 'xml' - - matplotlib>=3.9.3 ; extra == 'plot' - - jinja2>=3.1.5 ; extra == 'output-formatting' - - tabulate>=0.9.0 ; extra == 'output-formatting' - - pyqt5>=5.15.9 ; extra == 'clipboard' - - qtpy>=2.4.2 ; extra == 'clipboard' - - zstandard>=0.23.0 ; extra == 'compression' - - pytz>=2020.1 ; extra == 'timezone' - - adbc-driver-postgresql>=1.2.0 ; extra == 'all' - - adbc-driver-sqlite>=1.2.0 ; extra == 'all' - - beautifulsoup4>=4.12.3 ; extra == 'all' - - bottleneck>=1.4.2 ; extra == 'all' - - fastparquet>=2024.11.0 ; extra == 'all' - - fsspec>=2024.10.0 ; extra == 'all' - - gcsfs>=2024.10.0 ; extra == 'all' - - html5lib>=1.1 ; extra == 'all' - - hypothesis>=6.116.0 ; extra == 'all' - - jinja2>=3.1.5 ; extra == 'all' - - lxml>=5.3.0 ; extra == 'all' - - matplotlib>=3.9.3 ; extra == 'all' - - numba>=0.60.0 ; extra == 'all' - - numexpr>=2.10.2 ; extra == 'all' - - odfpy>=1.4.1 ; extra == 'all' - - openpyxl>=3.1.5 ; extra == 'all' - - psycopg2>=2.9.10 ; extra == 'all' - - pyarrow>=13.0.0 ; extra == 'all' - - pyiceberg>=0.8.1 ; extra == 'all' - - pymysql>=1.1.1 ; extra == 'all' - - pyqt5>=5.15.9 ; extra == 'all' - - pyreadstat>=1.2.8 ; extra == 'all' - - pytest>=8.3.4 ; extra == 'all' - - pytest-xdist>=3.6.1 ; extra == 'all' - - python-calamine>=0.3.0 ; extra == 'all' - - pytz>=2020.1 ; extra == 'all' - - pyxlsb>=1.0.10 ; extra == 'all' - - qtpy>=2.4.2 ; extra == 'all' - - scipy>=1.14.1 ; extra == 'all' - - s3fs>=2024.10.0 ; extra == 'all' - - sqlalchemy>=2.0.36 ; extra == 'all' - - tables>=3.10.1 ; extra == 'all' - - tabulate>=0.9.0 ; extra == 'all' - - xarray>=2024.10.0 ; extra == 'all' - - xlrd>=2.0.1 ; extra == 'all' - - xlsxwriter>=3.2.0 ; extra == 'all' - - zstandard>=0.23.0 ; extra == 'all' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/65/b6/09b01cdbc15224e2850365192d17b7bdebb8bdbd8780ed221fcdf0d9a515/pandas-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - name: pandas - version: 3.0.3 - sha256: 6dc0b3fd2169c9157deed50b4d519553a3655c8c6a96027136d654592be973a9 - requires_dist: - - numpy>=1.26.0 ; python_full_version < '3.14' - - numpy>=2.3.3 ; python_full_version >= '3.14' - - python-dateutil>=2.8.2 - - tzdata ; sys_platform == 'win32' - - tzdata ; sys_platform == 'emscripten' - - hypothesis>=6.116.0 ; extra == 'test' - - pytest>=8.3.4 ; extra == 'test' - - pytest-xdist>=3.6.1 ; extra == 'test' - - pyarrow>=13.0.0 ; extra == 'pyarrow' - - bottleneck>=1.4.2 ; extra == 'performance' - - numba>=0.60.0 ; extra == 'performance' - - numexpr>=2.10.2 ; extra == 'performance' - - scipy>=1.14.1 ; extra == 'computation' - - xarray>=2024.10.0 ; extra == 'computation' - - fsspec>=2024.10.0 ; extra == 'fss' - - s3fs>=2024.10.0 ; extra == 'aws' - - gcsfs>=2024.10.0 ; extra == 'gcp' - - odfpy>=1.4.1 ; extra == 'excel' - - openpyxl>=3.1.5 ; extra == 'excel' - - python-calamine>=0.3.0 ; extra == 'excel' - - pyxlsb>=1.0.10 ; extra == 'excel' - - xlrd>=2.0.1 ; extra == 'excel' - - xlsxwriter>=3.2.0 ; extra == 'excel' - - pyarrow>=13.0.0 ; extra == 'parquet' - - pyarrow>=13.0.0 ; extra == 'feather' - - pyiceberg>=0.8.1 ; extra == 'iceberg' - - tables>=3.10.1 ; extra == 'hdf5' - - pyreadstat>=1.2.8 ; extra == 'spss' - - sqlalchemy>=2.0.36 ; extra == 'postgresql' - - psycopg2>=2.9.10 ; extra == 'postgresql' - - adbc-driver-postgresql>=1.2.0 ; extra == 'postgresql' - - sqlalchemy>=2.0.36 ; extra == 'mysql' - - pymysql>=1.1.1 ; extra == 'mysql' - - sqlalchemy>=2.0.36 ; extra == 'sql-other' - - adbc-driver-postgresql>=1.2.0 ; extra == 'sql-other' - - adbc-driver-sqlite>=1.2.0 ; extra == 'sql-other' - - beautifulsoup4>=4.12.3 ; extra == 'html' - - html5lib>=1.1 ; extra == 'html' - - lxml>=5.3.0 ; extra == 'html' - - lxml>=5.3.0 ; extra == 'xml' - - matplotlib>=3.9.3 ; extra == 'plot' - - jinja2>=3.1.5 ; extra == 'output-formatting' - - tabulate>=0.9.0 ; extra == 'output-formatting' - - pyqt5>=5.15.9 ; extra == 'clipboard' - - qtpy>=2.4.2 ; extra == 'clipboard' - - zstandard>=0.23.0 ; extra == 'compression' - - pytz>=2020.1 ; extra == 'timezone' - - adbc-driver-postgresql>=1.2.0 ; extra == 'all' - - adbc-driver-sqlite>=1.2.0 ; extra == 'all' - - beautifulsoup4>=4.12.3 ; extra == 'all' - - bottleneck>=1.4.2 ; extra == 'all' - - fastparquet>=2024.11.0 ; extra == 'all' - - fsspec>=2024.10.0 ; extra == 'all' - - gcsfs>=2024.10.0 ; extra == 'all' - - html5lib>=1.1 ; extra == 'all' - - hypothesis>=6.116.0 ; extra == 'all' - - jinja2>=3.1.5 ; extra == 'all' - - lxml>=5.3.0 ; extra == 'all' - - matplotlib>=3.9.3 ; extra == 'all' - - numba>=0.60.0 ; extra == 'all' - - numexpr>=2.10.2 ; extra == 'all' - - odfpy>=1.4.1 ; extra == 'all' - - openpyxl>=3.1.5 ; extra == 'all' - - psycopg2>=2.9.10 ; extra == 'all' - - pyarrow>=13.0.0 ; extra == 'all' - - pyiceberg>=0.8.1 ; extra == 'all' - - pymysql>=1.1.1 ; extra == 'all' - - pyqt5>=5.15.9 ; extra == 'all' - - pyreadstat>=1.2.8 ; extra == 'all' - - pytest>=8.3.4 ; extra == 'all' - - pytest-xdist>=3.6.1 ; extra == 'all' - - python-calamine>=0.3.0 ; extra == 'all' - - pytz>=2020.1 ; extra == 'all' - - pyxlsb>=1.0.10 ; extra == 'all' - - qtpy>=2.4.2 ; extra == 'all' - - scipy>=1.14.1 ; extra == 'all' - - s3fs>=2024.10.0 ; extra == 'all' - - sqlalchemy>=2.0.36 ; extra == 'all' - - tables>=3.10.1 ; extra == 'all' - - tabulate>=0.9.0 ; extra == 'all' - - xarray>=2024.10.0 ; extra == 'all' - - xlrd>=2.0.1 ; extra == 'all' - - xlsxwriter>=3.2.0 ; extra == 'all' - - zstandard>=0.23.0 ; extra == 'all' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/99/68/1237369725aa617bb358263d535803e3053fdbc593513ec5ed9c9896b5b6/pandas-3.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - name: pandas - version: 3.0.3 - sha256: a4eeb6830daf35a71cc09649bd823e2b542dac246cdee9614c6e4bd65028cd6a - requires_dist: - - numpy>=1.26.0 ; python_full_version < '3.14' - - numpy>=2.3.3 ; python_full_version >= '3.14' - - python-dateutil>=2.8.2 - - tzdata ; sys_platform == 'win32' - - tzdata ; sys_platform == 'emscripten' - - hypothesis>=6.116.0 ; extra == 'test' - - pytest>=8.3.4 ; extra == 'test' - - pytest-xdist>=3.6.1 ; extra == 'test' - - pyarrow>=13.0.0 ; extra == 'pyarrow' - - bottleneck>=1.4.2 ; extra == 'performance' - - numba>=0.60.0 ; extra == 'performance' - - numexpr>=2.10.2 ; extra == 'performance' - - scipy>=1.14.1 ; extra == 'computation' - - xarray>=2024.10.0 ; extra == 'computation' - - fsspec>=2024.10.0 ; extra == 'fss' - - s3fs>=2024.10.0 ; extra == 'aws' - - gcsfs>=2024.10.0 ; extra == 'gcp' - - odfpy>=1.4.1 ; extra == 'excel' - - openpyxl>=3.1.5 ; extra == 'excel' - - python-calamine>=0.3.0 ; extra == 'excel' - - pyxlsb>=1.0.10 ; extra == 'excel' - - xlrd>=2.0.1 ; extra == 'excel' - - xlsxwriter>=3.2.0 ; extra == 'excel' - - pyarrow>=13.0.0 ; extra == 'parquet' - - pyarrow>=13.0.0 ; extra == 'feather' - - pyiceberg>=0.8.1 ; extra == 'iceberg' - - tables>=3.10.1 ; extra == 'hdf5' - - pyreadstat>=1.2.8 ; extra == 'spss' - - sqlalchemy>=2.0.36 ; extra == 'postgresql' - - psycopg2>=2.9.10 ; extra == 'postgresql' - - adbc-driver-postgresql>=1.2.0 ; extra == 'postgresql' - - sqlalchemy>=2.0.36 ; extra == 'mysql' - - pymysql>=1.1.1 ; extra == 'mysql' - - sqlalchemy>=2.0.36 ; extra == 'sql-other' - - adbc-driver-postgresql>=1.2.0 ; extra == 'sql-other' - - adbc-driver-sqlite>=1.2.0 ; extra == 'sql-other' - - beautifulsoup4>=4.12.3 ; extra == 'html' - - html5lib>=1.1 ; extra == 'html' - - lxml>=5.3.0 ; extra == 'html' - - lxml>=5.3.0 ; extra == 'xml' - - matplotlib>=3.9.3 ; extra == 'plot' - - jinja2>=3.1.5 ; extra == 'output-formatting' - - tabulate>=0.9.0 ; extra == 'output-formatting' - - pyqt5>=5.15.9 ; extra == 'clipboard' - - qtpy>=2.4.2 ; extra == 'clipboard' - - zstandard>=0.23.0 ; extra == 'compression' - - pytz>=2020.1 ; extra == 'timezone' - - adbc-driver-postgresql>=1.2.0 ; extra == 'all' - - adbc-driver-sqlite>=1.2.0 ; extra == 'all' - - beautifulsoup4>=4.12.3 ; extra == 'all' - - bottleneck>=1.4.2 ; extra == 'all' - - fastparquet>=2024.11.0 ; extra == 'all' - - fsspec>=2024.10.0 ; extra == 'all' - - gcsfs>=2024.10.0 ; extra == 'all' - - html5lib>=1.1 ; extra == 'all' - - hypothesis>=6.116.0 ; extra == 'all' - - jinja2>=3.1.5 ; extra == 'all' - - lxml>=5.3.0 ; extra == 'all' - - matplotlib>=3.9.3 ; extra == 'all' - - numba>=0.60.0 ; extra == 'all' - - numexpr>=2.10.2 ; extra == 'all' - - odfpy>=1.4.1 ; extra == 'all' - - openpyxl>=3.1.5 ; extra == 'all' - - psycopg2>=2.9.10 ; extra == 'all' - - pyarrow>=13.0.0 ; extra == 'all' - - pyiceberg>=0.8.1 ; extra == 'all' - - pymysql>=1.1.1 ; extra == 'all' - - pyqt5>=5.15.9 ; extra == 'all' - - pyreadstat>=1.2.8 ; extra == 'all' - - pytest>=8.3.4 ; extra == 'all' - - pytest-xdist>=3.6.1 ; extra == 'all' - - python-calamine>=0.3.0 ; extra == 'all' - - pytz>=2020.1 ; extra == 'all' - - pyxlsb>=1.0.10 ; extra == 'all' - - qtpy>=2.4.2 ; extra == 'all' - - scipy>=1.14.1 ; extra == 'all' - - s3fs>=2024.10.0 ; extra == 'all' - - sqlalchemy>=2.0.36 ; extra == 'all' - - tables>=3.10.1 ; extra == 'all' - - tabulate>=0.9.0 ; extra == 'all' - - xarray>=2024.10.0 ; extra == 'all' - - xlrd>=2.0.1 ; extra == 'all' - - xlsxwriter>=3.2.0 ; extra == 'all' - - zstandard>=0.23.0 ; extra == 'all' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/99/5d/8268b644392ee874ee82a635cd0df1773de230bde356c38de28e298392cc/parso-0.8.7-py2.py3-none-any.whl - name: parso - version: 0.8.7 - sha256: a8926eb2a1b915486941fdbd31e86a4baf88fe8c210f25f2f35ecec5b574ca1c - requires_dist: - - flake8==5.0.4 ; extra == 'qa' - - types-setuptools==67.2.0.1 ; extra == 'qa' - - zuban==0.5.1 ; extra == 'qa' - - docopt ; extra == 'testing' - - pytest ; extra == 'testing' - requires_python: '>=3.6' -- pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl - name: pathspec - version: 1.1.1 - sha256: a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189 - requires_dist: - - hyperscan>=0.7 ; extra == 'hyperscan' - - typing-extensions>=4 ; extra == 'optional' - - google-re2>=1.1 ; extra == 're2' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl - name: pexpect - version: 4.9.0 - sha256: 7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523 - requires_dist: - - ptyprocess>=0.5 -- pypi: https://files.pythonhosted.org/packages/3b/2d/ede717bc1144f63886c21fd349bb95860b0d1a21149ff16f2bb362b612b6/pillow-12.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - name: pillow - version: 12.3.0 - sha256: 23d27a3e0307ec2244cc51e7287b919aa68d097504ebe19df4e76a98a3eea5bd - requires_dist: - - furo ; extra == 'docs' - - olefile ; extra == 'docs' - - sphinx>=8.2 ; extra == 'docs' - - sphinx-autobuild ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - sphinx-inline-tabs ; extra == 'docs' - - sphinxext-opengraph ; extra == 'docs' - - olefile ; extra == 'fpx' - - olefile ; extra == 'mic' - - arro3-compute ; extra == 'test-arrow' - - arro3-core ; extra == 'test-arrow' - - nanoarrow ; extra == 'test-arrow' - - pyarrow ; extra == 'test-arrow' - - coverage>=7.4.2 ; extra == 'tests' - - defusedxml ; extra == 'tests' - - markdown2 ; extra == 'tests' - - olefile ; extra == 'tests' - - packaging ; extra == 'tests' - - pytest ; extra == 'tests' - - pytest-cov ; extra == 'tests' - - pytest-timeout ; extra == 'tests' - - pytest-xdist ; extra == 'tests' - - setuptools ; extra == 'tests' - - trove-classifiers>=2024.10.12 ; extra == 'tests' - - defusedxml ; extra == 'xmp' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - name: pillow - version: 12.3.0 - sha256: 251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b - requires_dist: - - furo ; extra == 'docs' - - olefile ; extra == 'docs' - - sphinx>=8.2 ; extra == 'docs' - - sphinx-autobuild ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - sphinx-inline-tabs ; extra == 'docs' - - sphinxext-opengraph ; extra == 'docs' - - olefile ; extra == 'fpx' - - olefile ; extra == 'mic' - - arro3-compute ; extra == 'test-arrow' - - arro3-core ; extra == 'test-arrow' - - nanoarrow ; extra == 'test-arrow' - - pyarrow ; extra == 'test-arrow' - - coverage>=7.4.2 ; extra == 'tests' - - defusedxml ; extra == 'tests' - - markdown2 ; extra == 'tests' - - olefile ; extra == 'tests' - - packaging ; extra == 'tests' - - pytest ; extra == 'tests' - - pytest-cov ; extra == 'tests' - - pytest-timeout ; extra == 'tests' - - pytest-xdist ; extra == 'tests' - - setuptools ; extra == 'tests' - - trove-classifiers>=2024.10.12 ; extra == 'tests' - - defusedxml ; extra == 'xmp' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/84/21/a35af28dcc61f37ed850a2d64c65c701321dfbf25085e469d5559360cbbf/pillow-12.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - name: pillow - version: 12.3.0 - sha256: 78cb2c6865a35ab8ff8b75fd122f6033b92a62c82801110e48ddd6c936a45d91 - requires_dist: - - furo ; extra == 'docs' - - olefile ; extra == 'docs' - - sphinx>=8.2 ; extra == 'docs' - - sphinx-autobuild ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - sphinx-inline-tabs ; extra == 'docs' - - sphinxext-opengraph ; extra == 'docs' - - olefile ; extra == 'fpx' - - olefile ; extra == 'mic' - - arro3-compute ; extra == 'test-arrow' - - arro3-core ; extra == 'test-arrow' - - nanoarrow ; extra == 'test-arrow' - - pyarrow ; extra == 'test-arrow' - - coverage>=7.4.2 ; extra == 'tests' - - defusedxml ; extra == 'tests' - - markdown2 ; extra == 'tests' - - olefile ; extra == 'tests' - - packaging ; extra == 'tests' - - pytest ; extra == 'tests' - - pytest-cov ; extra == 'tests' - - pytest-timeout ; extra == 'tests' - - pytest-xdist ; extra == 'tests' - - setuptools ; extra == 'tests' - - trove-classifiers>=2024.10.12 ; extra == 'tests' - - defusedxml ; extra == 'xmp' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/f7/62/de5bdd77d935331f4f802edc11e4d82950f642caad6cb2f949837b8560e2/pillow-12.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - name: pillow - version: 12.3.0 - sha256: 0847a763afefb695bc912d7c131e7e0632d4edc1d8698f58ddabec8e46b8b6d3 - requires_dist: - - furo ; extra == 'docs' - - olefile ; extra == 'docs' - - sphinx>=8.2 ; extra == 'docs' - - sphinx-autobuild ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - sphinx-inline-tabs ; extra == 'docs' - - sphinxext-opengraph ; extra == 'docs' - - olefile ; extra == 'fpx' - - olefile ; extra == 'mic' - - arro3-compute ; extra == 'test-arrow' - - arro3-core ; extra == 'test-arrow' - - nanoarrow ; extra == 'test-arrow' - - pyarrow ; extra == 'test-arrow' - - coverage>=7.4.2 ; extra == 'tests' - - defusedxml ; extra == 'tests' - - markdown2 ; extra == 'tests' - - olefile ; extra == 'tests' - - packaging ; extra == 'tests' - - pytest ; extra == 'tests' - - pytest-cov ; extra == 'tests' - - pytest-timeout ; extra == 'tests' - - pytest-xdist ; extra == 'tests' - - setuptools ; extra == 'tests' - - trove-classifiers>=2024.10.12 ; extra == 'tests' - - defusedxml ; extra == 'xmp' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/1b/dd/a9fe6a0a09512da23951c68bf36466aeecd89def3183dc095edbc807ddc5/pint-0.25.3-py3-none-any.whl - name: pint - version: 0.25.3 - sha256: 27eb25143bd5de9fcc4d5a4b484f16faf6b4615aa93ece6b3373a8c1a3c1b97d - requires_dist: - - flexcache>=0.3 - - flexparser>=0.4 - - platformdirs>=2.1.0 - - typing-extensions>=4.0.0 - - babel<=2.8 ; extra == 'all' - - dask<2025.3.0 ; extra == 'all' - - matplotlib ; extra == 'all' - - numpy>=1.23 ; extra == 'all' - - pint-pandas>=0.3 ; extra == 'all' - - scipy ; extra == 'all' - - uncertainties>=3.1.6 ; extra == 'all' - - xarray ; extra == 'all' - - babel<=2.8 ; extra == 'babel' - - pytest ; extra == 'codspeed' - - pytest-benchmark ; extra == 'codspeed' - - pytest-codspeed ; extra == 'codspeed' - - pytest-cov ; extra == 'codspeed' - - pytest-mpl ; extra == 'codspeed' - - pytest-subtests ; extra == 'codspeed' - - dask<2025.3.0 ; extra == 'dask' - - babel ; extra == 'docs' - - commonmark==0.8.1 ; extra == 'docs' - - currencyconverter ; extra == 'docs' - - docutils ; extra == 'docs' - - graphviz ; extra == 'docs' - - ipykernel ; extra == 'docs' - - ipython<=8.12 ; extra == 'docs' - - jupyter-client ; extra == 'docs' - - nbsphinx ; extra == 'docs' - - pooch ; extra == 'docs' - - pygments>=2.4 ; extra == 'docs' - - recommonmark==0.5.0 ; extra == 'docs' - - sciform ; extra == 'docs' - - scipy ; extra == 'docs' - - serialize ; extra == 'docs' - - sparse ; extra == 'docs' - - sphinx-book-theme>=1.1.0 ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - sphinx-design ; extra == 'docs' - - sphinx>=6,<8.2 ; extra == 'docs' - - matplotlib ; extra == 'matplotlib' - - numpy>=1.23 ; extra == 'numpy' - - pint-pandas>=0.3 ; extra == 'pandas' - - scipy ; extra == 'scipy' - - pytest ; extra == 'test' - - pytest-benchmark ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-subtests ; extra == 'test' - - pytest ; extra == 'test-all' - - pytest-benchmark ; extra == 'test-all' - - pytest-cov ; extra == 'test-all' - - pytest-mpl ; extra == 'test-all' - - pytest-subtests ; extra == 'test-all' - - pytest-mpl ; extra == 'test-mpl' - - uncertainties>=3.1.6 ; extra == 'uncertainties' - - xarray ; extra == 'xarray' - requires_python: '>=3.11' -- conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.2-pyh145f28c_0.conda - sha256: 9e673d3c6003f416df11670a14b026a04e3a45ebec55357987e15b860f138f2a - md5: 733cc07ed34162ac50b936464b163366 - depends: - - python >=3.13.0a0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pip?source=compressed-mapping - size: 1202377 - timestamp: 1780262809860 -- conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.2-pyh8b19718_0.conda - sha256: 29b7d75bf81ad11645a8e320b369abdc90a92b93f2a9178e853d9dddf82e5106 - md5: 511fbc2c63d2c73650ad1755e4d357ba - depends: - - python >=3.10,<3.13.0a0 - - setuptools - - wheel - license: MIT - license_family: MIT - purls: - - pkg:pypi/pip?source=compressed-mapping - size: 1203173 - timestamp: 1780262795392 -- pypi: https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl - name: platformdirs - version: 4.10.0 - sha256: fb516cdb12eb0d857d0cd85a7c57cea4d060bee4578d6cf5a14dfdf8cbf8784a - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - name: pluggy - version: 1.6.0 - sha256: e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746 - requires_dist: - - pre-commit ; extra == 'dev' - - tox ; extra == 'dev' - - pytest ; extra == 'testing' - - pytest-benchmark ; extra == 'testing' - - coverage ; extra == 'testing' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl - name: pre-commit - version: 4.6.0 - sha256: e2cf246f7299edcabcf15f9b0571fdce06058527f0a06535068a86d38089f29b - requires_dist: - - cfgv>=2.0.0 - - identify>=1.0.0 - - nodeenv>=0.11.1 - - pyyaml>=5.1 - - virtualenv>=20.10.0 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/fe/be/2e6798ace5cc036f5d05d36b7b2fd85346f1a708c87060890b070d0ec607/prettytable-3.18.0-py3-none-any.whl - name: prettytable - version: 3.18.0 - sha256: b3346e0e6f79180833aebaac088ae926340586cf6d7d991b9eb125b65f72313a - requires_dist: - - wcwidth>=0.3.5 - - pytest-cov ; extra == 'tests' - - pytest-lazy-fixtures ; extra == 'tests' - - pytest>=9 ; extra == 'tests' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl - name: prompt-toolkit - version: 3.0.52 - sha256: 9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955 - requires_dist: - - wcwidth - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl - name: psutil - version: 7.2.2 - sha256: 076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9 - requires_dist: - - psleak ; extra == 'dev' - - pytest ; extra == 'dev' - - pytest-instafail ; extra == 'dev' - - pytest-xdist ; extra == 'dev' - - setuptools ; extra == 'dev' - - abi3audit ; extra == 'dev' - - black ; extra == 'dev' - - check-manifest ; extra == 'dev' - - coverage ; extra == 'dev' - - packaging ; extra == 'dev' - - pylint ; extra == 'dev' - - pyperf ; extra == 'dev' - - pypinfo ; extra == 'dev' - - pytest-cov ; extra == 'dev' - - requests ; extra == 'dev' - - rstcheck ; extra == 'dev' - - ruff ; extra == 'dev' - - sphinx ; extra == 'dev' - - sphinx-rtd-theme ; extra == 'dev' - - toml-sort ; extra == 'dev' - - twine ; extra == 'dev' - - validate-pyproject[all] ; extra == 'dev' - - virtualenv ; extra == 'dev' - - vulture ; extra == 'dev' - - wheel ; extra == 'dev' - - colorama ; os_name == 'nt' and extra == 'dev' - - pyreadline3 ; os_name == 'nt' and extra == 'dev' - - pywin32 ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev' - - wheel ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev' - - wmi ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev' - - psleak ; extra == 'test' - - pytest ; extra == 'test' - - pytest-instafail ; extra == 'test' - - pytest-xdist ; extra == 'test' - - setuptools ; extra == 'test' - - pywin32 ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test' - - wheel ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test' - - wmi ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test' - requires_python: '>=3.6' -- pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl - name: ptyprocess - version: 0.7.0 - sha256: 4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35 -- pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl - name: pure-eval - version: 0.2.3 - sha256: 1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0 - requires_dist: - - pytest ; extra == 'tests' -- pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - name: py - version: 1.11.0 - sha256: 607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378 - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*' -- pypi: https://files.pythonhosted.org/packages/55/0e/cd705c042bc4fe7022478db577fcab4abdcfabb9bc37ab7a75556b3fcb2b/pyarrow-25.0.0-cp312-cp312-manylinux_2_28_x86_64.whl - name: pyarrow - version: 25.0.0 - sha256: 5d1dbf24e151042f2fa3c129563f65d66674128868496fb008c4272b16bdf778 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/6a/29/0ed312ec800fb536f93783215126cee4b8977dcfeccba6f0f44df0cc87d7/pyarrow-25.0.0-cp314-cp314-manylinux_2_28_x86_64.whl - name: pyarrow - version: 25.0.0 - sha256: 447df764beb07c544f0178a5f6b70ef44b9ecf382b3cdfad4c2d7867353c3887 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/7b/79/72d704b02bc5fc6d06954d76a0208c1e79cad3ab370f6d6a91ffe5078870/pyarrow-25.0.0-cp311-cp311-manylinux_2_28_x86_64.whl - name: pyarrow - version: 25.0.0 - sha256: 0222f0071d13313962a88d21bf28b80d355ac39d81bfa6ff3fe00eeaf748e4be - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/b5/5d/f790fb6965ab54c9da0dda7856abc75fd0d7648d865f8d603c111d203a64/pyarrow-25.0.0-cp313-cp313-manylinux_2_28_x86_64.whl - name: pyarrow - version: 25.0.0 - sha256: 6f9dbd83e91c239a1f5ee7ce13f108b5f6c0efbe40a4375260d8f08b43ad05e9 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - name: pycodestyle - version: 2.14.0 - sha256: dd6bf7cb4ee77f8e016f9c8e74a35ddd9f67e1d5fd4184d86c3b98e07099f42d - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl - name: pydantic - version: 2.13.4 - sha256: 45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba - requires_dist: - - annotated-types>=0.6.0 - - pydantic-core==2.46.4 - - typing-extensions>=4.14.1 - - typing-inspection>=0.4.2 - - email-validator>=2.0.0 ; extra == 'email' - - tzdata ; python_full_version >= '3.9' and sys_platform == 'win32' and extra == 'timezone' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/07/f8/41db9de19d7987d6b04715a02b3b40aea467000275d9d758ffaa31af7d50/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - name: pydantic-core - version: 2.46.4 - sha256: 9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a - requires_dist: - - typing-extensions>=4.14.1 - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - name: pydantic-core - version: 2.46.4 - sha256: 926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce - requires_dist: - - typing-extensions>=4.14.1 - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/80/50/540cd3aeefc041beb111125c4bff779831a2111fc6b15a9138cda277d32c/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - name: pydantic-core - version: 2.46.4 - sha256: f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4 - requires_dist: - - typing-extensions>=4.14.1 - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - name: pydantic-core - version: 2.46.4 - sha256: 7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b - requires_dist: - - typing-extensions>=4.14.1 - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/90/cb/c13d8a74419dde9590ed6fab293b516f68316ac87d06569b79b5f446d519/pydantic_numpy-8.0.1-py3-none-any.whl - name: pydantic-numpy - version: 8.0.1 - sha256: bf4cd84f4f864074197e9cfeafddca76bfbd1c2ef48f88be7322cc75838de4ae - requires_dist: - - compress-pickle[lz4] - - numpy>=2,<3 - - pydantic>=2.0,<3.0 - - ruamel-yaml>=0.18.5,<0.19.0 - - semver>=3.0.1,<4.0.0 - requires_python: '>=3.10,<3.14' -- pypi: https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl - name: pyflakes - version: 3.4.0 - sha256: f742a7dbd0d9cb9ea41e9a24a918996e8170c799fa528688d40dd582c8265f4f - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl - name: pygments - version: 2.20.0 - sha256: 81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 - requires_dist: - - colorama>=0.4.6 ; extra == 'windows-terminal' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - name: pyparsing - version: 3.3.2 - sha256: 850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d - requires_dist: - - railroad-diagrams ; extra == 'diagrams' - - jinja2 ; extra == 'diagrams' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl - name: pytest - version: 9.1.1 - sha256: 37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c - requires_dist: - - colorama>=0.4 ; sys_platform == 'win32' - - exceptiongroup>=1 ; python_full_version < '3.11' - - iniconfig>=1.0.1 - - packaging>=22 - - pluggy>=1.5,<2 - - pygments>=2.7.2 - - tomli>=1 ; python_full_version < '3.11' - - argcomplete ; extra == 'dev' - - attrs>=19.2 ; extra == 'dev' - - hypothesis>=3.56 ; extra == 'dev' - - mock ; extra == 'dev' - - requests ; extra == 'dev' - - setuptools ; extra == 'dev' - - xmlschema ; extra == 'dev' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/ae/a1/d4423657caaa8be9b31e491592b49cebdcfd434d3e74512ce71f6ec39905/pytest_split-0.11.0-py3-none-any.whl - name: pytest-split - version: 0.11.0 - sha256: 899d7c0f5730da91e2daf283860eb73b503259cb416851a65599368849c7f382 - requires_dist: - - pytest>=5,<10 - requires_python: '>=3.10,<4.0' -- pypi: https://files.pythonhosted.org/packages/63/cf/91b94238c843bfbae0a6674df45015aa3908b91454c496b2eb29e7991255/pytest_xprocess-1.0.2-py3-none-any.whl - name: pytest-xprocess - version: 1.0.2 - sha256: 0b0444d1f789fd9b4ba8b6b38b1d0139f226ab14091db2698a0521c1770523dd - requires_dist: - - pytest>=2.8 - - psutil - requires_python: '>=3.8' -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.15-h7508c33_1_cpython.conda - build_number: 1 - sha256: e830c8c69605674a997ee280d79c0f05ff5c1ed80ce3743678b2f663f410dfb9 - md5: fa29f621acaa9c0db5fd2c0ffc65312c - depends: - - __glibc >=2.17,<3.0.a0 - - bzip2 >=1.0.8,<2.0a0 - - ld_impl_linux-64 >=2.36.1 - - libexpat >=2.8.1,<3.0a0 - - libffi >=3.5.2,<3.6.0a0 - - libgcc >=14 - - liblzma >=5.8.3,<6.0a0 - - libnsl >=2.0.1,<2.1.0a0 - - libsqlite >=3.53.2,<4.0a0 - - libuuid >=2.42.1,<3.0a0 - - libxcrypt >=4.4.36 - - libzlib >=1.3.2,<2.0a0 - - ncurses >=6.6,<7.0a0 - - openssl >=3.5.7,<4.0a0 - - readline >=8.3,<9.0a0 - - tk >=8.6.13,<8.7.0a0 - - tzdata - constrains: - - python_abi 3.11.* *_cp311 - license: Python-2.0 - purls: [] - size: 30907259 - timestamp: 1781149782225 -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.13-hd63d673_0_cpython.conda - sha256: a44655c1c3e1d43ed8704890a91e12afd68130414ea2c0872e154e5633a13d7e - md5: 7eccb41177e15cc672e1babe9056018e - depends: - - __glibc >=2.17,<3.0.a0 - - bzip2 >=1.0.8,<2.0a0 - - ld_impl_linux-64 >=2.36.1 - - libexpat >=2.7.4,<3.0a0 - - libffi >=3.5.2,<3.6.0a0 - - libgcc >=14 - - liblzma >=5.8.2,<6.0a0 - - libnsl >=2.0.1,<2.1.0a0 - - libsqlite >=3.51.2,<4.0a0 - - libuuid >=2.41.3,<3.0a0 - - libxcrypt >=4.4.36 - - libzlib >=1.3.1,<2.0a0 - - ncurses >=6.5,<7.0a0 - - openssl >=3.5.5,<4.0a0 - - readline >=8.3,<9.0a0 - - tk >=8.6.13,<8.7.0a0 - - tzdata - constrains: - - python_abi 3.12.* *_cp312 - license: Python-2.0 - purls: [] - size: 31608571 - timestamp: 1772730708989 -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.14-h6add32d_100_cp313.conda - build_number: 100 - sha256: f2146aff59ce4b571a8f1d1acf94f9bed6cc18ab5632d7dcc940fb48ecdeef99 - md5: 93762cd272814a142cf21d794f8fb0c1 - depends: - - __glibc >=2.17,<3.0.a0 - - bzip2 >=1.0.8,<2.0a0 - - ld_impl_linux-64 >=2.36.1 - - libexpat >=2.8.1,<3.0a0 - - libffi >=3.5.2,<3.6.0a0 - - libgcc >=14 - - liblzma >=5.8.3,<6.0a0 - - libmpdec >=4.0.0,<5.0a0 - - libsqlite >=3.53.2,<4.0a0 - - libuuid >=2.42.1,<3.0a0 - - libzlib >=1.3.2,<2.0a0 - - ncurses >=6.6,<7.0a0 - - openssl >=3.5.7,<4.0a0 - - python_abi 3.13.* *_cp313 - - readline >=8.3,<9.0a0 - - tk >=8.6.13,<8.7.0a0 - - tzdata - license: Python-2.0 - purls: [] - size: 37398694 - timestamp: 1781258934574 - python_site_packages_path: lib/python3.13/site-packages -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.6-habeac84_100_cp314.conda - build_number: 100 - sha256: 6d28ac2b061179deb434d3d57afa98ffd20ec3c5d44ab8048a1ca33424b22d38 - md5: 0b9b2f83b5b600e1ac38becde8d0dd44 - depends: - - __glibc >=2.17,<3.0.a0 - - bzip2 >=1.0.8,<2.0a0 - - ld_impl_linux-64 >=2.36.1 - - libexpat >=2.8.1,<3.0a0 - - libffi >=3.5.2,<3.6.0a0 - - libgcc >=14 - - liblzma >=5.8.3,<6.0a0 - - libmpdec >=4.0.0,<5.0a0 - - libsqlite >=3.53.2,<4.0a0 - - libuuid >=2.42.1,<3.0a0 - - libzlib >=1.3.2,<2.0a0 - - ncurses >=6.6,<7.0a0 - - openssl >=3.5.7,<4.0a0 - - python_abi 3.14.* *_cp314 - - readline >=8.3,<9.0a0 - - tk >=8.6.13,<8.7.0a0 - - tzdata - - zstd >=1.5.7,<1.6.0a0 - license: Python-2.0 - purls: [] - size: 36717183 - timestamp: 1781255094700 - python_site_packages_path: lib/python3.14/site-packages -- pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - name: python-dateutil - version: 2.9.0.post0 - sha256: a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 - requires_dist: - - six>=1.5 - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*' -- pypi: https://files.pythonhosted.org/packages/9d/ae/84bc0d2440c95772272bb6f4b3d09ccf08b2898fce89b3d4f969a9fc74e9/python_discovery-1.4.4-py3-none-any.whl - name: python-discovery - version: 1.4.4 - sha256: abebe9120b43453b68c908acfb1e72a19d1a959ed2cb620ad38fc57d08056dbe - requires_dist: - - filelock>=3.15.4 - - platformdirs>=4.3.6,<5 - - furo>=2025.12.19 ; extra == 'docs' - - sphinx-autodoc-typehints>=3.6.3 ; extra == 'docs' - - sphinx>=9.1 ; extra == 'docs' - - sphinxcontrib-mermaid>=2 ; extra == 'docs' - - sphinxcontrib-towncrier>=0.4 ; extra == 'docs' - - towncrier>=25.8 ; extra == 'docs' - - covdefaults>=2.3 ; extra == 'testing' - - coverage>=7.5.4 ; extra == 'testing' - - pytest-mock>=3.14 ; extra == 'testing' - - pytest>=8.3.5 ; extra == 'testing' - - setuptools>=75.1 ; extra == 'testing' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/e1/04/e8135ebd1ad02c56ec633277529b2602ff99ff634be76cdba5744cf554fd/python_multipart-0.0.32-py3-none-any.whl - name: python-multipart - version: 0.0.32 - sha256: ff6d3f776f16878c894e52e107296ffc890e913c611b1a4ec6c44e2821fe2e23 - requires_python: '>=3.10' -- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - build_number: 8 - sha256: 210bffe7b121e651419cb196a2a63687b087497595c9be9d20ebe97dd06060a7 - md5: 94305520c52a4aa3f6c2b1ff6008d9f8 - constrains: - - python 3.13.* *_cp313 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 7002 - timestamp: 1752805902938 -- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - build_number: 8 - sha256: ad6d2e9ac39751cc0529dd1566a26751a0bf2542adb0c232533d32e176e21db5 - md5: 0539938c55b6b1a59b560e843ad864a4 - constrains: - - python 3.14.* *_cp314 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 6989 - timestamp: 1752805904792 -- pypi: https://files.pythonhosted.org/packages/0f/95/70d7041273890f9f97a24234c00b746e8da86df462620194cef1d411ddeb/pytokens-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: pytokens - version: 0.4.1 - sha256: dc74c035f9bfca0255c1af77ddd2d6ae8419012805453e4b0e7513e17904545d - requires_dist: - - black ; extra == 'dev' - - build ; extra == 'dev' - - mypy ; extra == 'dev' - - pytest ; extra == 'dev' - - pytest-cov ; extra == 'dev' - - setuptools ; extra == 'dev' - - tox ; extra == 'dev' - - twine ; extra == 'dev' - - wheel ; extra == 'dev' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/17/50/bc0394b4ad5b1601be22fa43652173d47e4c9efbf0044c62e9a59b747c56/pytokens-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: pytokens - version: 0.4.1 - sha256: b49750419d300e2b5a3813cf229d4e5a4c728dae470bcc89867a9ad6f25a722d - requires_dist: - - black ; extra == 'dev' - - build ; extra == 'dev' - - mypy ; extra == 'dev' - - pytest ; extra == 'dev' - - pytest-cov ; extra == 'dev' - - setuptools ; extra == 'dev' - - tox ; extra == 'dev' - - twine ; extra == 'dev' - - wheel ; extra == 'dev' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/bf/3c/2d5297d82286f6f3d92770289fd439956b201c0a4fc7e72efb9b2293758e/pytokens-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: pytokens - version: 0.4.1 - sha256: 24afde1f53d95348b5a0eb19488661147285ca4dd7ed752bbc3e1c6242a304d1 - requires_dist: - - black ; extra == 'dev' - - build ; extra == 'dev' - - mypy ; extra == 'dev' - - pytest ; extra == 'dev' - - pytest-cov ; extra == 'dev' - - setuptools ; extra == 'dev' - - tox ; extra == 'dev' - - twine ; extra == 'dev' - - wheel ; extra == 'dev' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/e0/d2/afe5c7f8607018beb99971489dbb846508f1b8f351fcefc225fcf4b2adc0/pytokens-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: pytokens - version: 0.4.1 - sha256: 29d1d8fb1030af4d231789959f21821ab6325e463f0503a61d204343c9b355d1 - requires_dist: - - black ; extra == 'dev' - - build ; extra == 'dev' - - mypy ; extra == 'dev' - - pytest ; extra == 'dev' - - pytest-cov ; extra == 'dev' - - setuptools ; extra == 'dev' - - tox ; extra == 'dev' - - twine ; extra == 'dev' - - wheel ; extra == 'dev' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: pyyaml - version: 6.0.3 - sha256: b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: pyyaml - version: 6.0.3 - sha256: 0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6 - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: pyyaml - version: 6.0.3 - sha256: c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5 - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: pyyaml - version: 6.0.3 - sha256: ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/b1/c4/2a6fe5111a01005fc7af3878259ce17684fabb8852815eda6225620f3c59/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - name: pyzmq - version: 27.1.0 - sha256: 5bbf8d3630bf96550b3be8e1fc0fea5cbdc8d5466c1192887bd94869da17a63e - requires_dist: - - cffi ; implementation_name == 'pypy' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - name: pyzmq - version: 27.1.0 - sha256: 43ad9a73e3da1fab5b0e7e13402f0b2fb934ae1c876c51d0afff0e7c052eca31 - requires_dist: - - cffi ; implementation_name == 'pypy' - requires_python: '>=3.8' -- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - sha256: 12ffde5a6f958e285aa22c191ca01bbd3d6e710aa852e00618fa6ddc59149002 - md5: d7d95fc8287ea7bf33e0e7116d2b95ec - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - ncurses >=6.5,<7.0a0 - license: GPL-3.0-only - license_family: GPL - purls: [] - size: 345073 - timestamp: 1765813471974 -- pypi: https://files.pythonhosted.org/packages/fd/0a/c2345ebf1ebe70840ce3f6c6ee612f8fa749cfbd1b03069c53bf0c62aaad/redis-8.0.1-py3-none-any.whl - name: redis - version: 8.0.1 - sha256: 47daa35a058c23468d6437f17a8c76882cb316b838ef763036af99b96cedd743 - requires_dist: - - async-timeout>=4.0.3 ; python_full_version < '3.11.3' - - pybreaker>=1.4.0 ; extra == 'circuit-breaker' - - hiredis>=3.2.0 ; extra == 'hiredis' - - pyjwt>=2.13.0 ; extra == 'jwt' - - cryptography>=36.0.1 ; extra == 'ocsp' - - pyopenssl>=20.0.1 ; extra == 'ocsp' - - requests>=2.31.0 ; extra == 'ocsp' - - opentelemetry-api>=1.39.1 ; extra == 'otel' - - opentelemetry-exporter-otlp-proto-http>=1.39.1 ; extra == 'otel' - - opentelemetry-sdk>=1.39.1 ; extra == 'otel' - - xxhash~=3.6.0 ; extra == 'xxhash' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - name: referencing - version: 0.37.0 - sha256: 381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231 - requires_dist: - - attrs>=22.2.0 - - rpds-py>=0.7.0 - - typing-extensions>=4.4.0 ; python_full_version < '3.13' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl - name: requests - version: 2.34.2 - sha256: 2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0 - requires_dist: - - charset-normalizer>=2,<4 - - idna>=2.5,<4 - - urllib3>=1.26,<3 - - certifi>=2023.5.7 - - pysocks>=1.5.6,!=1.5.7 ; extra == 'socks' - - chardet>=3.0.2,<8 ; extra == 'use-chardet-on-py3' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl - name: roman-numerals - version: 4.1.0 - sha256: 647ba99caddc2cc1e55a51e4360689115551bf4476d90e8162cf8c345fe233c7 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/04/8f/d2f3f532616be4d06c316ef119683e832bd3d41e112bf3a88f4151c95b17/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - name: rpds-py - version: 2026.6.3 - sha256: ecabd69db66de867690f9797f2f8fa27ba501bbc24540cbdbdc649cd15888ba6 - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/57/d7/fe978efc2ae50abe48eb7464668ea99f53c010c60aeebb7b35ad27f23661/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - name: rpds-py - version: 2026.6.3 - sha256: acac386b453c2516111b50985d60ce46e7fadb5ea71ae7b25f4c946935bf27cf - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/5e/19/7e98f468bd50346faff5b10e5297374b443bfdddacc8e9fbc65984539597/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - name: rpds-py - version: 2026.6.3 - sha256: 9c1255b302953c86a486b81d330d5ee1d5bd937691ce271b6be0ef0e299eaab7 - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/d1/9c/0d1fdc2e7aba23e290d603bc494e97bd205bae262ce33c6b32a69768ed5e/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - name: rpds-py - version: 2026.6.3 - sha256: dc319e5a1de4b6913aac94bf6a2f9e847371e0a140a43dd4991db1a09bc2d504 - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/af/fe/b6045c782f1fd1ae317d2a6ca1884857ce5c20f59befe6ab25a8603c43a7/ruamel_yaml-0.18.17-py3-none-any.whl - name: ruamel-yaml - version: 0.18.17 - sha256: 9c8ba9eb3e793efdf924b60d521820869d5bf0cb9c6f1b82d82de8295e290b9d - requires_dist: - - ruamel-yaml-clib>=0.2.15 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - - ruamel-yaml-jinja2>=0.2 ; extra == 'jinja2' - - ryd ; extra == 'docs' - - mercurial>5.7 ; extra == 'docs' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/61/62/150c841f24cda9e30f588ef396ed83f64cfdc13b92d2f925bb96df337ba9/ruamel_yaml_clib-0.2.15-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: ruamel-yaml-clib - version: 0.2.15 - sha256: 11e5499db1ccbc7f4b41f0565e4f799d863ea720e01d3e99fa0b7b5fcd7802c9 - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/a1/5c/8b56b08db91e569d0a4fbfa3e492ed2026081bdd7e892f63ba1c88a2f548/ruamel_yaml_clib-0.2.15-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: ruamel-yaml-clib - version: 0.2.15 - sha256: 2812ff359ec1f30129b62372e5f22a52936fac13d5d21e70373dbca5d64bb97c - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/aa/ed/3fb20a1a96b8dc645d88c4072df481fe06e0289e4d528ebbdcc044ebc8b3/ruamel_yaml_clib-0.2.15-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: ruamel-yaml-clib - version: 0.2.15 - sha256: 617d35dc765715fa86f8c3ccdae1e4229055832c452d4ec20856136acc75053f - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/ff/5d/e4f84c9c448613e12bd62e90b23aa127ea4c46b697f3d760acc32cb94f25/ruamel_yaml_clib-0.2.15-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: ruamel-yaml-clib - version: 0.2.15 - sha256: 4d1032919280ebc04a80e4fb1e93f7a738129857eaec9448310e638c8bccefcf - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/68/b9/f44b139096467996b4d85589d9880fd55f0c80a204d298a1b73d0adc2654/scanspec-1.0.0-py3-none-any.whl - name: scanspec - version: 1.0.0 - sha256: 4ad6dccd6ac19dbd8af888c80c5db53c70d6b8aee9d26c0ca174cebd3c396730 - requires_dist: - - numpy - - click>=8.1 - - pydantic>=2.0 - - scipy ; extra == 'plotting' - - matplotlib ; extra == 'plotting' - - fastapi>=0.100.0 ; extra == 'service' - - uvicorn ; extra == 'service' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/73/c3/cec6a3cbaadfdcc02bd6ff02f3abfe09eaa7f4d4e0a525a1e3a3f4bce49c/scikit_image-0.26.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - name: scikit-image - version: 0.26.0 - sha256: c6624a76c6085218248154cc7e1500e6b488edcd9499004dd0d35040607d7505 - requires_dist: - - numpy>=1.24 - - scipy>=1.11.4 - - networkx>=3.0 - - pillow>=10.1 - - imageio>=2.33,!=2.35.0 - - tifffile>=2022.8.12 - - packaging>=21 - - lazy-loader>=0.4 - - meson-python>=0.16 ; extra == 'build' - - ninja>=1.11.1.1 ; extra == 'build' - - cython>=3.0.8,!=3.2.0b1 ; extra == 'build' - - pythran>=0.16 ; extra == 'build' - - numpy>=2.0 ; extra == 'build' - - spin==0.13 ; extra == 'build' - - build>=1.2.1 ; extra == 'build' - - pooch>=1.6.0 ; extra == 'data' - - pre-commit ; extra == 'developer' - - ipython ; extra == 'developer' - - docstub==0.3.0.post0 ; extra == 'developer' - - scikit-image[asv] ; extra == 'developer' - - asv ; sys_platform != 'emscripten' and extra == 'asv' - - sphinx>=8.0 ; extra == 'docs' - - sphinx-gallery[parallel]>=0.18 ; extra == 'docs' - - numpydoc>=1.7 ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - matplotlib>=3.7 ; extra == 'docs' - - dask[array]>=2023.2.0 ; extra == 'docs' - - pandas>=2.0 ; extra == 'docs' - - seaborn>=0.11 ; extra == 'docs' - - pooch>=1.6 ; extra == 'docs' - - tifffile>=2022.8.12 ; extra == 'docs' - - myst-parser ; extra == 'docs' - - intersphinx-registry>=0.2411.14 ; extra == 'docs' - - ipywidgets ; extra == 'docs' - - ipykernel ; extra == 'docs' - - plotly>=5.20 ; extra == 'docs' - - kaleido==0.2.1 ; extra == 'docs' - - scikit-learn>=1.2 ; extra == 'docs' - - sphinx-design>=0.5 ; extra == 'docs' - - pydata-sphinx-theme>=0.16 ; extra == 'docs' - - pywavelets>=1.6 ; extra == 'docs' - - pytest-doctestplus>=1.6.0 ; extra == 'docs' - - simpleitk ; sys_platform != 'emscripten' and extra == 'optional' - - scikit-learn>=1.2 ; extra == 'optional' - - pyamg>=5.2 ; python_full_version < '3.14' and sys_platform != 'emscripten' and extra == 'optional' - - scikit-image[optional-free-threaded] ; extra == 'optional' - - astropy>=6.0 ; extra == 'optional-free-threaded' - - dask[array]>=2023.2.0 ; extra == 'optional-free-threaded' - - matplotlib>=3.7 ; extra == 'optional-free-threaded' - - pooch>=1.6.0 ; sys_platform != 'emscripten' and extra == 'optional-free-threaded' - - pywavelets>=1.6 ; extra == 'optional-free-threaded' - - numpydoc>=1.7 ; extra == 'test' - - pooch>=1.6.0 ; sys_platform != 'emscripten' and extra == 'test' - - pytest>=8.3 ; extra == 'test' - - pytest-cov>=2.11.0 ; extra == 'test' - - pytest-pretty ; extra == 'test' - - pytest-localserver ; extra == 'test' - - pytest-faulthandler ; extra == 'test' - - pytest-doctestplus>=1.6.0 ; extra == 'test' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/a3/b8/0d8eeb5a9fd7d34ba84f8a55753a0a3e2b5b51b2a5a0ade648a8db4a62f7/scikit_image-0.26.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - name: scikit-image - version: 0.26.0 - sha256: b36ab5e778bf50af5ff386c3ac508027dc3aaeccf2161bdf96bde6848f44d21b - requires_dist: - - numpy>=1.24 - - scipy>=1.11.4 - - networkx>=3.0 - - pillow>=10.1 - - imageio>=2.33,!=2.35.0 - - tifffile>=2022.8.12 - - packaging>=21 - - lazy-loader>=0.4 - - meson-python>=0.16 ; extra == 'build' - - ninja>=1.11.1.1 ; extra == 'build' - - cython>=3.0.8,!=3.2.0b1 ; extra == 'build' - - pythran>=0.16 ; extra == 'build' - - numpy>=2.0 ; extra == 'build' - - spin==0.13 ; extra == 'build' - - build>=1.2.1 ; extra == 'build' - - pooch>=1.6.0 ; extra == 'data' - - pre-commit ; extra == 'developer' - - ipython ; extra == 'developer' - - docstub==0.3.0.post0 ; extra == 'developer' - - scikit-image[asv] ; extra == 'developer' - - asv ; sys_platform != 'emscripten' and extra == 'asv' - - sphinx>=8.0 ; extra == 'docs' - - sphinx-gallery[parallel]>=0.18 ; extra == 'docs' - - numpydoc>=1.7 ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - matplotlib>=3.7 ; extra == 'docs' - - dask[array]>=2023.2.0 ; extra == 'docs' - - pandas>=2.0 ; extra == 'docs' - - seaborn>=0.11 ; extra == 'docs' - - pooch>=1.6 ; extra == 'docs' - - tifffile>=2022.8.12 ; extra == 'docs' - - myst-parser ; extra == 'docs' - - intersphinx-registry>=0.2411.14 ; extra == 'docs' - - ipywidgets ; extra == 'docs' - - ipykernel ; extra == 'docs' - - plotly>=5.20 ; extra == 'docs' - - kaleido==0.2.1 ; extra == 'docs' - - scikit-learn>=1.2 ; extra == 'docs' - - sphinx-design>=0.5 ; extra == 'docs' - - pydata-sphinx-theme>=0.16 ; extra == 'docs' - - pywavelets>=1.6 ; extra == 'docs' - - pytest-doctestplus>=1.6.0 ; extra == 'docs' - - simpleitk ; sys_platform != 'emscripten' and extra == 'optional' - - scikit-learn>=1.2 ; extra == 'optional' - - pyamg>=5.2 ; python_full_version < '3.14' and sys_platform != 'emscripten' and extra == 'optional' - - scikit-image[optional-free-threaded] ; extra == 'optional' - - astropy>=6.0 ; extra == 'optional-free-threaded' - - dask[array]>=2023.2.0 ; extra == 'optional-free-threaded' - - matplotlib>=3.7 ; extra == 'optional-free-threaded' - - pooch>=1.6.0 ; sys_platform != 'emscripten' and extra == 'optional-free-threaded' - - pywavelets>=1.6 ; extra == 'optional-free-threaded' - - numpydoc>=1.7 ; extra == 'test' - - pooch>=1.6.0 ; sys_platform != 'emscripten' and extra == 'test' - - pytest>=8.3 ; extra == 'test' - - pytest-cov>=2.11.0 ; extra == 'test' - - pytest-pretty ; extra == 'test' - - pytest-localserver ; extra == 'test' - - pytest-faulthandler ; extra == 'test' - - pytest-doctestplus>=1.6.0 ; extra == 'test' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/a5/2a/e71c1a7d90e70da67b88ccc609bd6ae54798d5847369b15d3a8052232f9d/scikit_image-0.26.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - name: scikit-image - version: 0.26.0 - sha256: 74aa5518ccea28121f57a95374581d3b979839adc25bb03f289b1bc9b99c58af - requires_dist: - - numpy>=1.24 - - scipy>=1.11.4 - - networkx>=3.0 - - pillow>=10.1 - - imageio>=2.33,!=2.35.0 - - tifffile>=2022.8.12 - - packaging>=21 - - lazy-loader>=0.4 - - meson-python>=0.16 ; extra == 'build' - - ninja>=1.11.1.1 ; extra == 'build' - - cython>=3.0.8,!=3.2.0b1 ; extra == 'build' - - pythran>=0.16 ; extra == 'build' - - numpy>=2.0 ; extra == 'build' - - spin==0.13 ; extra == 'build' - - build>=1.2.1 ; extra == 'build' - - pooch>=1.6.0 ; extra == 'data' - - pre-commit ; extra == 'developer' - - ipython ; extra == 'developer' - - docstub==0.3.0.post0 ; extra == 'developer' - - scikit-image[asv] ; extra == 'developer' - - asv ; sys_platform != 'emscripten' and extra == 'asv' - - sphinx>=8.0 ; extra == 'docs' - - sphinx-gallery[parallel]>=0.18 ; extra == 'docs' - - numpydoc>=1.7 ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - matplotlib>=3.7 ; extra == 'docs' - - dask[array]>=2023.2.0 ; extra == 'docs' - - pandas>=2.0 ; extra == 'docs' - - seaborn>=0.11 ; extra == 'docs' - - pooch>=1.6 ; extra == 'docs' - - tifffile>=2022.8.12 ; extra == 'docs' - - myst-parser ; extra == 'docs' - - intersphinx-registry>=0.2411.14 ; extra == 'docs' - - ipywidgets ; extra == 'docs' - - ipykernel ; extra == 'docs' - - plotly>=5.20 ; extra == 'docs' - - kaleido==0.2.1 ; extra == 'docs' - - scikit-learn>=1.2 ; extra == 'docs' - - sphinx-design>=0.5 ; extra == 'docs' - - pydata-sphinx-theme>=0.16 ; extra == 'docs' - - pywavelets>=1.6 ; extra == 'docs' - - pytest-doctestplus>=1.6.0 ; extra == 'docs' - - simpleitk ; sys_platform != 'emscripten' and extra == 'optional' - - scikit-learn>=1.2 ; extra == 'optional' - - pyamg>=5.2 ; python_full_version < '3.14' and sys_platform != 'emscripten' and extra == 'optional' - - scikit-image[optional-free-threaded] ; extra == 'optional' - - astropy>=6.0 ; extra == 'optional-free-threaded' - - dask[array]>=2023.2.0 ; extra == 'optional-free-threaded' - - matplotlib>=3.7 ; extra == 'optional-free-threaded' - - pooch>=1.6.0 ; sys_platform != 'emscripten' and extra == 'optional-free-threaded' - - pywavelets>=1.6 ; extra == 'optional-free-threaded' - - numpydoc>=1.7 ; extra == 'test' - - pooch>=1.6.0 ; sys_platform != 'emscripten' and extra == 'test' - - pytest>=8.3 ; extra == 'test' - - pytest-cov>=2.11.0 ; extra == 'test' - - pytest-pretty ; extra == 'test' - - pytest-localserver ; extra == 'test' - - pytest-faulthandler ; extra == 'test' - - pytest-doctestplus>=1.6.0 ; extra == 'test' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/f4/a2/70401a107d6d7466d64b466927e6b96fcefa99d57494b972608e2f8be50f/scikit_image-0.26.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - name: scikit-image - version: 0.26.0 - sha256: 7df650e79031634ac90b11e64a9eedaf5a5e06fcd09bcd03a34be01745744466 - requires_dist: - - numpy>=1.24 - - scipy>=1.11.4 - - networkx>=3.0 - - pillow>=10.1 - - imageio>=2.33,!=2.35.0 - - tifffile>=2022.8.12 - - packaging>=21 - - lazy-loader>=0.4 - - meson-python>=0.16 ; extra == 'build' - - ninja>=1.11.1.1 ; extra == 'build' - - cython>=3.0.8,!=3.2.0b1 ; extra == 'build' - - pythran>=0.16 ; extra == 'build' - - numpy>=2.0 ; extra == 'build' - - spin==0.13 ; extra == 'build' - - build>=1.2.1 ; extra == 'build' - - pooch>=1.6.0 ; extra == 'data' - - pre-commit ; extra == 'developer' - - ipython ; extra == 'developer' - - docstub==0.3.0.post0 ; extra == 'developer' - - scikit-image[asv] ; extra == 'developer' - - asv ; sys_platform != 'emscripten' and extra == 'asv' - - sphinx>=8.0 ; extra == 'docs' - - sphinx-gallery[parallel]>=0.18 ; extra == 'docs' - - numpydoc>=1.7 ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - matplotlib>=3.7 ; extra == 'docs' - - dask[array]>=2023.2.0 ; extra == 'docs' - - pandas>=2.0 ; extra == 'docs' - - seaborn>=0.11 ; extra == 'docs' - - pooch>=1.6 ; extra == 'docs' - - tifffile>=2022.8.12 ; extra == 'docs' - - myst-parser ; extra == 'docs' - - intersphinx-registry>=0.2411.14 ; extra == 'docs' - - ipywidgets ; extra == 'docs' - - ipykernel ; extra == 'docs' - - plotly>=5.20 ; extra == 'docs' - - kaleido==0.2.1 ; extra == 'docs' - - scikit-learn>=1.2 ; extra == 'docs' - - sphinx-design>=0.5 ; extra == 'docs' - - pydata-sphinx-theme>=0.16 ; extra == 'docs' - - pywavelets>=1.6 ; extra == 'docs' - - pytest-doctestplus>=1.6.0 ; extra == 'docs' - - simpleitk ; sys_platform != 'emscripten' and extra == 'optional' - - scikit-learn>=1.2 ; extra == 'optional' - - pyamg>=5.2 ; python_full_version < '3.14' and sys_platform != 'emscripten' and extra == 'optional' - - scikit-image[optional-free-threaded] ; extra == 'optional' - - astropy>=6.0 ; extra == 'optional-free-threaded' - - dask[array]>=2023.2.0 ; extra == 'optional-free-threaded' - - matplotlib>=3.7 ; extra == 'optional-free-threaded' - - pooch>=1.6.0 ; sys_platform != 'emscripten' and extra == 'optional-free-threaded' - - pywavelets>=1.6 ; extra == 'optional-free-threaded' - - numpydoc>=1.7 ; extra == 'test' - - pooch>=1.6.0 ; sys_platform != 'emscripten' and extra == 'test' - - pytest>=8.3 ; extra == 'test' - - pytest-cov>=2.11.0 ; extra == 'test' - - pytest-pretty ; extra == 'test' - - pytest-localserver ; extra == 'test' - - pytest-faulthandler ; extra == 'test' - - pytest-doctestplus>=1.6.0 ; extra == 'test' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/09/7d/af933f0f6e0767995b4e2d705a0665e454d1c19402aa7e895de3951ebb04/scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - name: scipy - version: 1.17.1 - sha256: 43af8d1f3bea642559019edfe64e9b11192a8978efbd1539d7bc2aaa23d92de4 - requires_dist: - - numpy>=1.26.4,<2.7 - - pytest>=8.0.0 ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-timeout ; extra == 'test' - - pytest-xdist ; extra == 'test' - - asv ; extra == 'test' - - mpmath ; extra == 'test' - - gmpy2 ; extra == 'test' - - threadpoolctl ; extra == 'test' - - scikit-umfpack ; extra == 'test' - - pooch ; extra == 'test' - - hypothesis>=6.30 ; extra == 'test' - - array-api-strict>=2.3.1 ; extra == 'test' - - cython ; extra == 'test' - - meson ; extra == 'test' - - ninja ; sys_platform != 'emscripten' and extra == 'test' - - sphinx>=5.0.0,<8.2.0 ; extra == 'doc' - - intersphinx-registry ; extra == 'doc' - - pydata-sphinx-theme>=0.15.2 ; extra == 'doc' - - sphinx-copybutton ; extra == 'doc' - - sphinx-design>=0.4.0 ; extra == 'doc' - - matplotlib>=3.5 ; extra == 'doc' - - numpydoc ; extra == 'doc' - - jupytext ; extra == 'doc' - - myst-nb>=1.2.0 ; extra == 'doc' - - pooch ; extra == 'doc' - - jupyterlite-sphinx>=0.19.1 ; extra == 'doc' - - jupyterlite-pyodide-kernel ; extra == 'doc' - - linkify-it-py ; extra == 'doc' - - tabulate ; extra == 'doc' - - click<8.3.0 ; extra == 'dev' - - spin ; extra == 'dev' - - mypy==1.10.0 ; extra == 'dev' - - typing-extensions ; extra == 'dev' - - types-psutil ; extra == 'dev' - - pycodestyle ; extra == 'dev' - - ruff>=0.12.0 ; extra == 'dev' - - cython-lint>=0.12.2 ; extra == 'dev' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/7f/c4/bc41eb19b0fd0db868f4132920879019318d80cc522ad8f2bca4611af808/scipy-1.18.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - name: scipy - version: 1.18.0 - sha256: 8ca01e8ae69f1b18e9a58d91afead31be3cef0dd905a10249dac559ee15460a0 - requires_dist: - - numpy>=2.0.0,<2.8 - - pytest>=8.0.0 ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-timeout ; extra == 'test' - - pytest-xdist ; extra == 'test' - - asv ; extra == 'test' - - mpmath ; extra == 'test' - - gmpy2 ; extra == 'test' - - threadpoolctl ; extra == 'test' - - scikit-umfpack ; extra == 'test' - - pooch ; extra == 'test' - - hypothesis>=6.30 ; extra == 'test' - - array-api-strict>=2.3.1 ; extra == 'test' - - cython ; extra == 'test' - - meson ; extra == 'test' - - ninja ; sys_platform != 'emscripten' and extra == 'test' - - scipy-doctest>=2.0.0 ; extra == 'test' - - sphinx>=5.0.0,<8.2.0 ; extra == 'doc' - - intersphinx-registry ; extra == 'doc' - - pydata-sphinx-theme>=0.15.2 ; extra == 'doc' - - sphinx-copybutton ; extra == 'doc' - - sphinx-design>=0.4.0 ; extra == 'doc' - - matplotlib>=3.5 ; extra == 'doc' - - numpydoc ; extra == 'doc' - - jupytext ; extra == 'doc' - - myst-nb>=1.2.0 ; extra == 'doc' - - pooch ; extra == 'doc' - - jupyterlite-sphinx>=0.19.1 ; extra == 'doc' - - jupyterlite-pyodide-kernel ; extra == 'doc' - - linkify-it-py ; extra == 'doc' - - tabulate ; extra == 'doc' - - click<8.3.0 ; extra == 'dev' - - spin ; extra == 'dev' - - mypy==1.19.1 ; extra == 'dev' - - pyrefly==0.63.0 ; extra == 'dev' - - typing-extensions ; extra == 'dev' - - types-psutil ; extra == 'dev' - - pycodestyle ; extra == 'dev' - - ruff>=0.12.0 ; extra == 'dev' - - cython-lint>=0.12.2 ; extra == 'dev' - requires_python: '>=3.12' -- pypi: https://files.pythonhosted.org/packages/dd/aa/1b939f6c67ed68635bb538e6752d3dacc02f66535182e939a89581a44e9c/scipy-1.18.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - name: scipy - version: 1.18.0 - sha256: 1f55797419e16e7f30cf88ffb3113ce0467f00cfe3f70d5c281730b21769bfc2 - requires_dist: - - numpy>=2.0.0,<2.8 - - pytest>=8.0.0 ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-timeout ; extra == 'test' - - pytest-xdist ; extra == 'test' - - asv ; extra == 'test' - - mpmath ; extra == 'test' - - gmpy2 ; extra == 'test' - - threadpoolctl ; extra == 'test' - - scikit-umfpack ; extra == 'test' - - pooch ; extra == 'test' - - hypothesis>=6.30 ; extra == 'test' - - array-api-strict>=2.3.1 ; extra == 'test' - - cython ; extra == 'test' - - meson ; extra == 'test' - - ninja ; sys_platform != 'emscripten' and extra == 'test' - - scipy-doctest>=2.0.0 ; extra == 'test' - - sphinx>=5.0.0,<8.2.0 ; extra == 'doc' - - intersphinx-registry ; extra == 'doc' - - pydata-sphinx-theme>=0.15.2 ; extra == 'doc' - - sphinx-copybutton ; extra == 'doc' - - sphinx-design>=0.4.0 ; extra == 'doc' - - matplotlib>=3.5 ; extra == 'doc' - - numpydoc ; extra == 'doc' - - jupytext ; extra == 'doc' - - myst-nb>=1.2.0 ; extra == 'doc' - - pooch ; extra == 'doc' - - jupyterlite-sphinx>=0.19.1 ; extra == 'doc' - - jupyterlite-pyodide-kernel ; extra == 'doc' - - linkify-it-py ; extra == 'doc' - - tabulate ; extra == 'doc' - - click<8.3.0 ; extra == 'dev' - - spin ; extra == 'dev' - - mypy==1.19.1 ; extra == 'dev' - - pyrefly==0.63.0 ; extra == 'dev' - - typing-extensions ; extra == 'dev' - - types-psutil ; extra == 'dev' - - pycodestyle ; extra == 'dev' - - ruff>=0.12.0 ; extra == 'dev' - - cython-lint>=0.12.2 ; extra == 'dev' - requires_python: '>=3.12' -- pypi: https://files.pythonhosted.org/packages/f6/af/e8fe5fb136f51e2b01678b92cb4106d10d8cd68ec147ead2e7cb0ac75398/scipy-1.18.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - name: scipy - version: 1.18.0 - sha256: a46f9273dbd0eb1cefba61c9b8648b4dfe3cbc14a080176f9a73e44b8336dc7f - requires_dist: - - numpy>=2.0.0,<2.8 - - pytest>=8.0.0 ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-timeout ; extra == 'test' - - pytest-xdist ; extra == 'test' - - asv ; extra == 'test' - - mpmath ; extra == 'test' - - gmpy2 ; extra == 'test' - - threadpoolctl ; extra == 'test' - - scikit-umfpack ; extra == 'test' - - pooch ; extra == 'test' - - hypothesis>=6.30 ; extra == 'test' - - array-api-strict>=2.3.1 ; extra == 'test' - - cython ; extra == 'test' - - meson ; extra == 'test' - - ninja ; sys_platform != 'emscripten' and extra == 'test' - - scipy-doctest>=2.0.0 ; extra == 'test' - - sphinx>=5.0.0,<8.2.0 ; extra == 'doc' - - intersphinx-registry ; extra == 'doc' - - pydata-sphinx-theme>=0.15.2 ; extra == 'doc' - - sphinx-copybutton ; extra == 'doc' - - sphinx-design>=0.4.0 ; extra == 'doc' - - matplotlib>=3.5 ; extra == 'doc' - - numpydoc ; extra == 'doc' - - jupytext ; extra == 'doc' - - myst-nb>=1.2.0 ; extra == 'doc' - - pooch ; extra == 'doc' - - jupyterlite-sphinx>=0.19.1 ; extra == 'doc' - - jupyterlite-pyodide-kernel ; extra == 'doc' - - linkify-it-py ; extra == 'doc' - - tabulate ; extra == 'doc' - - click<8.3.0 ; extra == 'dev' - - spin ; extra == 'dev' - - mypy==1.19.1 ; extra == 'dev' - - pyrefly==0.63.0 ; extra == 'dev' - - typing-extensions ; extra == 'dev' - - types-psutil ; extra == 'dev' - - pycodestyle ; extra == 'dev' - - ruff>=0.12.0 ; extra == 'dev' - - cython-lint>=0.12.2 ; extra == 'dev' - requires_python: '>=3.12' -- pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl - name: semver - version: 3.0.4 - sha256: 9c824d87ba7f7ab4a1890799cec8596f15c1241cb473404ea1cb0c55e4b04746 - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/5d/40/e1e72872c6354b306daef1703549e8e83b4d43cfea356311bf722a043752/setuptools-83.0.0-py3-none-any.whl - name: setuptools - version: 83.0.0 - sha256: 29b23c360f22f414dc7336bb39178cc7bcbf6021ed2733cde173f09dba19abb3 - requires_dist: - - pytest>=6,!=8.1.* ; extra == 'test' - - virtualenv>=13.0.0 ; extra == 'test' - - wheel>=0.44.0 ; extra == 'test' - - pip>=19.1 ; extra == 'test' - - packaging>=24.2 ; extra == 'test' - - jaraco-envs>=2.2 ; extra == 'test' - - pytest-xdist>=3 ; extra == 'test' - - jaraco-path>=3.7.2 ; extra == 'test' - - build[virtualenv]>=1.0.3 ; extra == 'test' - - filelock>=3.4.0 ; extra == 'test' - - ini2toml[lite]>=0.14 ; extra == 'test' - - tomli-w>=1.0.0 ; extra == 'test' - - pytest-timeout ; extra == 'test' - - pytest-perf ; sys_platform != 'cygwin' and extra == 'test' - - jaraco-develop>=7.21 ; python_full_version >= '3.9' and sys_platform != 'cygwin' and extra == 'test' - - pytest-home>=0.5 ; extra == 'test' - - pytest-subprocess ; extra == 'test' - - pyproject-hooks!=1.1 ; extra == 'test' - - jaraco-test>=5.5 ; extra == 'test' - - sphinx>=3.5 ; extra == 'doc' - - jaraco-packaging>=9.3 ; extra == 'doc' - - rst-linker>=1.9 ; extra == 'doc' - - furo ; extra == 'doc' - - sphinx-lint ; extra == 'doc' - - jaraco-tidelift>=1.4 ; extra == 'doc' - - pygments-github-lexers==0.0.5 ; extra == 'doc' - - sphinx-favicon ; extra == 'doc' - - sphinx-inline-tabs ; extra == 'doc' - - sphinx-reredirects ; extra == 'doc' - - sphinxcontrib-towncrier ; extra == 'doc' - - sphinx-notfound-page>=1,<2 ; extra == 'doc' - - pyproject-hooks!=1.1 ; extra == 'doc' - - towncrier<24.7 ; extra == 'doc' - - packaging>=24.2 ; extra == 'core' - - more-itertools>=8.8 ; extra == 'core' - - jaraco-text>=3.7 ; extra == 'core' - - importlib-metadata>=6 ; python_full_version < '3.10' and extra == 'core' - - tomli>=2.0.1 ; python_full_version < '3.11' and extra == 'core' - - wheel>=0.43.0 ; extra == 'core' - - jaraco-functools>=4 ; extra == 'core' - - more-itertools ; extra == 'core' - - pytest-checkdocs>=2.14 ; extra == 'check' - - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' - - ruff>=0.13.0 ; sys_platform != 'cygwin' and extra == 'check' - - pytest-cov ; extra == 'cover' - - pytest-enabler>=3.4 ; extra == 'enabler' - - pytest-mypy>=1.0.1 ; platform_python_implementation != 'PyPy' and extra == 'type' - - mypy==1.18.* ; extra == 'type' - - importlib-metadata>=7.0.2 ; python_full_version < '3.10' and extra == 'type' - - jaraco-develop>=7.21 ; sys_platform != 'cygwin' and extra == 'type' - requires_python: '>=3.10' -- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-83.0.0-pyh332efcf_0.conda - sha256: 48a9f96016505debadfc67f06de7ac548decbc38d327409b24b0432ef6f16335 - md5: 6bf6acbab2499830180ec88c3aff2fa4 - depends: - - python >=3.10 - license: MIT - license_family: MIT - purls: - - pkg:pypi/setuptools?source=compressed-mapping - size: 642081 - timestamp: 1783619174976 -- pypi: https://files.pythonhosted.org/packages/51/6b/3feec8016ab2263946c4480510d2d1a7924a5400c455974a7a0344bb4304/setuptools_dso-2.12.3-py2.py3-none-any.whl - name: setuptools-dso - version: 2.12.3 - sha256: 5040be8628bd6cb82653391cf59f22126b261941cdbc9c36becca87e09c011c3 - requires_dist: - - setuptools - requires_python: '>=2.7' -- pypi: https://files.pythonhosted.org/packages/0c/b6/156a8de1e1b47694f0e7de6675866936608d45dc68388fd017d36f8693be/simplejson-4.1.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - name: simplejson - version: 4.1.1 - sha256: 45ec18e337fec538b7e902d489505c450b2454653d1290f3f50385e6fd8aa607 - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*' -- pypi: https://files.pythonhosted.org/packages/38/2e/21a3ede87f0bf82d6c7bcb90480d50a6490eb974c6ab20881188e440957c/simplejson-4.1.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - name: simplejson - version: 4.1.1 - sha256: 8e5cdd6a5d52299f345c15ab5678cc4249e24f383f361d986afbc3c7072a6b6b - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*' -- pypi: https://files.pythonhosted.org/packages/78/91/3635cdb13318cb0a328abaa69e2b91251caad39d6779aa308098f341f6cb/simplejson-4.1.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - name: simplejson - version: 4.1.1 - sha256: 3851658d642c1184d2023f0e6c9ce44a21eb1629e74e7c84ef956b128841fe12 - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*' -- pypi: https://files.pythonhosted.org/packages/80/7e/c9e6c0c4ad8415e64dad0c47f619b556b02680a41631b4dbc281d55dc54d/simplejson-4.1.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - name: simplejson - version: 4.1.1 - sha256: 7ce252b28fddbdd83db5bd7d93dad2a8a591d7ada098afec9c1b23d6b722a7a4 - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*' -- pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - name: six - version: 1.17.0 - sha256: 4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*' -- pypi: https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl - name: snowballstemmer - version: 3.1.1 - sha256: 7e207fa178741da09cdee59d3ecec3827ad5f92b1fc5c9ff3755b639f71f5752 - requires_python: '>=3.3' -- pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl - name: sphinx - version: 9.0.4 - sha256: 5bebc595a5e943ea248b99c13814c1c5e10b3ece718976824ffa7959ff95fffb - requires_dist: - - sphinxcontrib-applehelp>=1.0.7 - - sphinxcontrib-devhelp>=1.0.6 - - sphinxcontrib-htmlhelp>=2.0.6 - - sphinxcontrib-jsmath>=1.0.1 - - sphinxcontrib-qthelp>=1.0.6 - - sphinxcontrib-serializinghtml>=1.1.9 - - jinja2>=3.1 - - pygments>=2.17 - - docutils>=0.20,<0.23 - - snowballstemmer>=2.2 - - babel>=2.13 - - alabaster>=0.7.14 - - imagesize>=1.3 - - requests>=2.30.0 - - roman-numerals>=1.0.0 - - packaging>=23.0 - - colorama>=0.4.6 ; sys_platform == 'win32' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl - name: sphinx - version: 9.1.0 - sha256: c84fdd4e782504495fe4f2c0b3413d6c2bf388589bb352d439b2a3bb99991978 - requires_dist: - - sphinxcontrib-applehelp>=1.0.7 - - sphinxcontrib-devhelp>=1.0.6 - - sphinxcontrib-htmlhelp>=2.0.6 - - sphinxcontrib-jsmath>=1.0.1 - - sphinxcontrib-qthelp>=1.0.6 - - sphinxcontrib-serializinghtml>=1.1.9 - - jinja2>=3.1 - - pygments>=2.17 - - docutils>=0.21,<0.23 - - snowballstemmer>=2.2 - - babel>=2.13 - - alabaster>=0.7.14 - - imagesize>=1.3 - - requests>=2.30.0 - - roman-numerals>=1.0.0 - - packaging>=23.0 - - colorama>=0.4.6 ; sys_platform == 'win32' - requires_python: '>=3.12' -- pypi: https://files.pythonhosted.org/packages/87/c7/b5c8015d823bfda1a346adb2c634a2101d50bb75d421eb6dcb31acd25ebc/sphinx_rtd_theme-3.1.0-py2.py3-none-any.whl - name: sphinx-rtd-theme - version: 3.1.0 - sha256: 1785824ae8e6632060490f67cf3a72d404a85d2d9fc26bce3619944de5682b89 - requires_dist: - - sphinx>=6,<10 - - docutils>0.18,<0.23 - - sphinxcontrib-jquery>=4,<5 - - transifex-client ; extra == 'dev' - - bump2version ; extra == 'dev' - - wheel ; extra == 'dev' - - twine ; extra == 'dev' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl - name: sphinxcontrib-applehelp - version: 2.0.0 - sha256: 4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5 - requires_dist: - - ruff==0.5.5 ; extra == 'lint' - - mypy ; extra == 'lint' - - types-docutils ; extra == 'lint' - - sphinx>=5 ; extra == 'standalone' - - pytest ; extra == 'test' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl - name: sphinxcontrib-devhelp - version: 2.0.0 - sha256: aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2 - requires_dist: - - ruff==0.5.5 ; extra == 'lint' - - mypy ; extra == 'lint' - - types-docutils ; extra == 'lint' - - sphinx>=5 ; extra == 'standalone' - - pytest ; extra == 'test' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl - name: sphinxcontrib-htmlhelp - version: 2.1.0 - sha256: 166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8 - requires_dist: - - ruff==0.5.5 ; extra == 'lint' - - mypy ; extra == 'lint' - - types-docutils ; extra == 'lint' - - sphinx>=5 ; extra == 'standalone' - - pytest ; extra == 'test' - - html5lib ; extra == 'test' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/76/85/749bd22d1a68db7291c89e2ebca53f4306c3f205853cf31e9de279034c3c/sphinxcontrib_jquery-4.1-py2.py3-none-any.whl - name: sphinxcontrib-jquery - version: '4.1' - sha256: f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae - requires_dist: - - sphinx>=1.8 - requires_python: '>=2.7' -- pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl - name: sphinxcontrib-jsmath - version: 1.0.1 - sha256: 2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 - requires_dist: - - pytest ; extra == 'test' - - flake8 ; extra == 'test' - - mypy ; extra == 'test' - requires_python: '>=3.5' -- pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl - name: sphinxcontrib-qthelp - version: 2.0.0 - sha256: b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb - requires_dist: - - ruff==0.5.5 ; extra == 'lint' - - mypy ; extra == 'lint' - - types-docutils ; extra == 'lint' - - sphinx>=5 ; extra == 'standalone' - - pytest ; extra == 'test' - - defusedxml>=0.7.1 ; extra == 'test' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - name: sphinxcontrib-serializinghtml - version: 2.0.0 - sha256: 6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331 - requires_dist: - - ruff==0.5.5 ; extra == 'lint' - - mypy ; extra == 'lint' - - types-docutils ; extra == 'lint' - - sphinx>=5 ; extra == 'standalone' - - pytest ; extra == 'test' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl - name: stack-data - version: 0.6.3 - sha256: d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695 - requires_dist: - - executing>=1.2.0 - - asttokens>=2.1.0 - - pure-eval - - pytest ; extra == 'tests' - - typeguard ; extra == 'tests' - - pygments ; extra == 'tests' - - littleutils ; extra == 'tests' - - cython ; extra == 'tests' -- pypi: https://files.pythonhosted.org/packages/1d/f0/1ff90a1d1dd02de23feafdf9dffaecef3958348be5c192df56670ccb4f86/stamina-26.1.0-py3-none-any.whl - name: stamina - version: 26.1.0 - sha256: 62e06829bec87c06d4cafde520b32a6097d1017c378a9eb63253c5bf5ebbbb88 - requires_dist: - - tenacity - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl - name: tenacity - version: 9.1.4 - sha256: 6095a360c919085f28c6527de529e76a06ad89b23659fa881ae0649b867a9d55 - requires_dist: - - reno ; extra == 'doc' - - sphinx ; extra == 'doc' - - pytest ; extra == 'test' - - tornado>=4.5 ; extra == 'test' - - typeguard ; extra == 'test' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/1a/e4/e804505f87627cd8cdae9c010c47c4485fd8c1ce31a7dd0ab7fcc4707377/tifffile-2026.3.3-py3-none-any.whl - name: tifffile - version: 2026.3.3 - sha256: e8be15c94273113d31ecb7aa3a39822189dd11c4967e3cc88c178f1ad2fd1170 - requires_dist: - - numpy - - imagecodecs>=2025.11.11 ; extra == 'codecs' - - defusedxml ; extra == 'xml' - - lxml ; extra == 'xml' - - zarr>=3.1.5 ; extra == 'zarr' - - fsspec ; extra == 'zarr' - - kerchunk ; extra == 'zarr' - - matplotlib ; extra == 'plot' - - imagecodecs>=2025.11.11 ; extra == 'all' - - matplotlib ; extra == 'all' - - defusedxml ; extra == 'all' - - lxml ; extra == 'all' - - zarr>=3.1.5 ; extra == 'all' - - fsspec ; extra == 'all' - - kerchunk ; extra == 'all' - - cmapfile ; extra == 'test' - - czifile ; extra == 'test' - - dask ; extra == 'test' - - defusedxml ; extra == 'test' - - fsspec ; extra == 'test' - - imagecodecs ; extra == 'test' - - kerchunk ; extra == 'test' - - lfdfiles ; extra == 'test' - - lxml ; extra == 'test' - - ndtiff ; extra == 'test' - - oiffile ; extra == 'test' - - psdtags ; extra == 'test' - - pytest ; extra == 'test' - - requests ; extra == 'test' - - roifile ; extra == 'test' - - xarray ; extra == 'test' - - zarr>=3.1.5 ; extra == 'test' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/81/59/208f71d70ddc6184f79b8c6d87d46eb7d7b12c19186a817dec9c9c3f3693/tifffile-2026.6.1-py3-none-any.whl - name: tifffile - version: 2026.6.1 - sha256: 0d7382d2769b855b81ce358528e2b40c16d48aa39031746efa81215205332a8d - requires_dist: - - numpy>=2.1 - - imagecodecs>=2026.5.10 ; extra == 'codecs' - - lxml ; extra == 'xml' - - zarr>=3.2.0 ; extra == 'zarr' - - fsspec ; extra == 'zarr' - - kerchunk ; extra == 'zarr' - - matplotlib ; extra == 'plot' - - imagecodecs>=2026.5.10 ; extra == 'all' - - matplotlib ; extra == 'all' - - lxml ; extra == 'all' - - zarr>=3.2.0 ; extra == 'all' - - xarray ; extra == 'all' - - fsspec ; extra == 'all' - - kerchunk ; extra == 'all' - - cmapfile ; extra == 'test' - - czifile ; extra == 'test' - - dask ; extra == 'test' - - fsspec ; extra == 'test' - - imagecodecs ; extra == 'test' - - kerchunk ; extra == 'test' - - lfdfiles ; extra == 'test' - - lxml ; extra == 'test' - - ndtiff ; extra == 'test' - - oiffile ; extra == 'test' - - psdtags ; extra == 'test' - - pytest ; extra == 'test' - - requests ; extra == 'test' - - roifile ; extra == 'test' - - xarray ; extra == 'test' - - zarr>=3.2.0 ; extra == 'test' - requires_python: '>=3.12' -- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - sha256: cafeec44494f842ffeca27e9c8b0c27ed714f93ac77ddadc6aaf726b5554ebac - md5: cffd3bdd58090148f4cfcd831f4b26ab - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libzlib >=1.3.1,<2.0a0 - constrains: - - xorg-libx11 >=1.8.12,<2.0a0 - license: TCL - license_family: BSD - purls: [] - size: 3301196 - timestamp: 1769460227866 -- pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl - name: toolz - version: 1.1.0 - sha256: 15ccc861ac51c53696de0a5d6d4607f99c210739caf987b5d2054f3efed429d8 - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/37/d8/ef374952fd5da67d4463122c2b8e5a96536ec10b4b339254c6dcde81d01c/tornado-6.5.7-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - name: tornado - version: 6.5.7 - sha256: 8d759e71906ee783f8867b93bf26a265743da4c1e2f4a018464c1ba019862972 - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/22/2a/5e5e750890ada51017d18d0d4c30da696e5b5bd3180947729927628fc3cb/tqdm-4.68.4-py3-none-any.whl - name: tqdm - version: 4.68.4 - sha256: 5168118b2368f48c561afda8020fd79195b1bdb0bdf8086b88442c267a315dc2 - requires_dist: - - colorama ; sys_platform == 'win32' - - requests ; extra == 'discord' - - envwrap ; extra == 'discord' - - slack-sdk ; extra == 'slack' - - envwrap ; extra == 'slack' - - requests ; extra == 'telegram' - - envwrap ; extra == 'telegram' - - ipywidgets>=6 ; extra == 'notebook' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/96/8d/1080ee4c231f361b6ce4470d556c8c435b67c7e0753aaa641497ee92f88b/traitlets-5.15.1-py3-none-any.whl - name: traitlets - version: 5.15.1 - sha256: 770a53705f84b81ac107e83a1b3328ff2dae16094d8fc3cfc004e4b22dfd8e92 - requires_dist: - - myst-parser ; extra == 'docs' - - pydata-sphinx-theme ; extra == 'docs' - - sphinx ; extra == 'docs' - - argcomplete>=3.0.3 ; extra == 'test' - - mypy>=1.17.0,<1.19 ; extra == 'test' - - pre-commit ; extra == 'test' - - pytest-mock ; extra == 'test' - - pytest-mypy-testing ; extra == 'test' - - pytest>=7.0,<8.2 ; extra == 'test' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl - name: typing-extensions - version: 4.16.0 - sha256: 481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8 - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - name: typing-inspection - version: 0.4.2 - sha256: 4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7 - requires_dist: - - typing-extensions>=4.12.0 - requires_python: '>=3.9' -- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - sha256: 1d30098909076af33a35017eed6f2953af1c769e273a0626a04722ac4acaba3c - md5: ad659d0a2b3e47e38d829aa8cad2d610 - license: LicenseRef-Public-Domain - purls: [] - size: 119135 - timestamp: 1767016325805 -- pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl - name: urllib3 - version: 2.7.0 - sha256: 9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897 - requires_dist: - - brotli>=1.2.0 ; platform_python_implementation == 'CPython' and extra == 'brotli' - - brotlicffi>=1.2.0.0 ; platform_python_implementation != 'CPython' and extra == 'brotli' - - h2>=4,<5 ; extra == 'h2' - - pysocks>=1.5.6,!=1.5.7,<2.0 ; extra == 'socks' - - backports-zstd>=1.0.0 ; python_full_version < '3.14' and extra == 'zstd' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/72/89/0265b2b79424ed05b8d1e9c8fca71e1b150478e5b0c19aa50b0ae397326e/velocity_profile-1.0.0-py3-none-any.whl - name: velocity-profile - version: 1.0.0 - sha256: b9082aedb2863748e1e6e56e7a794cd5742addd571f6ba2e13f4f5b8a09422d9 - requires_dist: - - numpy - - copier ; extra == 'dev' - - mypy ; extra == 'dev' - - pipdeptree ; extra == 'dev' - - pre-commit ; extra == 'dev' - - pytest ; extra == 'dev' - - pytest-cov ; extra == 'dev' - - ruff ; extra == 'dev' - - tox-direct ; extra == 'dev' - - types-mock ; extra == 'dev' - - scanspec ; extra == 'dev' - - pydantic<2.0 ; extra == 'dev' - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/c1/7c/4e7225d46d634a0d8d534dd8a6ce0c319d09b4d0cf0337eb314ca4789d8c/virtualenv-21.6.1-py3-none-any.whl - name: virtualenv - version: 21.6.1 - sha256: afe991df855715a2b2f60edfcc0107ef95a79fdfd8cb4cdaa71603d1c12e463b - requires_dist: - - distlib>=0.3.7,<1 - - filelock>=3.24.2,<4 ; python_full_version >= '3.10' - - filelock>=3.16.1,<=3.19.1 ; python_full_version < '3.10' - - platformdirs>=3.9.1,<5 - - python-discovery>=1.4.2 - - typing-extensions>=4.13.2 ; python_full_version < '3.11' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/96/42/3e5985a0a7e57de470b320c6d6a1a67c844f6737a587f3d44dd13d1819e7/wcwidth-0.8.2-py3-none-any.whl - name: wcwidth - version: 0.8.2 - sha256: d63947694a0539a1d51e01eda7caf800c291020e6cdd7e28ad7b14dd33ad4f85 - requires_python: '>=3.8' -- conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda - sha256: 9e156ffaefb8463437144326ada4b85d1de17961b9997ac5f1cbbaf747bd8bed - md5: d0e3b2f0030cf4fca58bde71d246e94c - depends: - - packaging >=24.0 - - python >=3.10 - license: MIT - license_family: MIT - purls: - - pkg:pypi/wheel?source=hash-mapping - size: 33491 - timestamp: 1776878563806 -- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - sha256: 68f0206ca6e98fea941e5717cec780ed2873ffabc0e1ed34428c061e2c6268c7 - md5: 4a13eeac0b5c8e5b8ab496e6c4ddd829 - depends: - - __glibc >=2.17,<3.0.a0 - - libzlib >=1.3.1,<2.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 601375 - timestamp: 1764777111296 From a54854e4d973dc67f8334c6a2f9fb784a3a52553 Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Tue, 14 Jul 2026 10:21:30 -0400 Subject: [PATCH 08/31] CI: add pixi.lock to .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index b0283892..177a1b2a 100644 --- a/.gitignore +++ b/.gitignore @@ -86,3 +86,4 @@ target/ # pixi environments .pixi/* !.pixi/config.toml +pixi.lock From b267afa9836e1a117c6afb4a7e8751111d9f3b62 Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Tue, 14 Jul 2026 10:26:37 -0400 Subject: [PATCH 09/31] CI: update precommit --- .pre-commit-config.yaml | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 78539f4d..849aa9d6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,25 +1,23 @@ -default_language_version: - python: python3 repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v6.0.0 + rev: v5.0.0 hooks: + - id: check-added-large-files - id: check-yaml - - id: end-of-file-fixer - - id: trailing-whitespace - - repo: https://github.com/ambv/black - rev: 26.3.1 + - id: check-merge-conflict + + - repo: local hooks: - - id: black - - repo: https://github.com/pycqa/flake8 - rev: 7.3.0 - hooks: - - id: flake8 - - repo: https://github.com/pycqa/isort - rev: 8.0.1 - hooks: - - id: isort - - repo: https://github.com/kynan/nbstripout - rev: 0.9.1 - hooks: - - id: nbstripout + - id: ruff + name: lint with ruff + language: system + entry: ruff check --force-exclude --fix + types: [python] + require_serial: true + + - id: ruff-format + name: format with ruff + language: system + entry: ruff format --force-exclude + types: [python] + require_serial: true From 16151f0fab811d87dc53950a829203a522f904dd Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Tue, 14 Jul 2026 10:51:45 -0400 Subject: [PATCH 10/31] CI: ignore C408 and B011 in ruff --- pyproject.toml | 2 ++ src/bluesky_queueserver/_version.py | 24 ------------------------ 2 files changed, 2 insertions(+), 24 deletions(-) delete mode 100644 src/bluesky_queueserver/_version.py diff --git a/pyproject.toml b/pyproject.toml index 091b4a5f..4dd16053 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -136,6 +136,8 @@ select = [ unfixable = ["F401"] ignore = [ "B905", # adding strict=False to every zip call is just noise + "C408", # errors due to using dict() + "B011", # do not use 'assert False' error ] isort.required-imports = [ ] diff --git a/src/bluesky_queueserver/_version.py b/src/bluesky_queueserver/_version.py deleted file mode 100644 index 615c197c..00000000 --- a/src/bluesky_queueserver/_version.py +++ /dev/null @@ -1,24 +0,0 @@ -# file generated by vcs-versioning -# don't change, don't track in version control -from __future__ import annotations - -__all__ = [ - "__version__", - "__version_tuple__", - "version", - "version_tuple", - "__commit_id__", - "commit_id", -] - -version: str -__version__: str -__version_tuple__: tuple[int | str, ...] -version_tuple: tuple[int | str, ...] -commit_id: str | None -__commit_id__: str | None - -__version__ = version = '0.0.25.dev55+gb26088bfc.d20260714' -__version_tuple__ = version_tuple = (0, 0, 25, 'dev55', 'gb26088bfc.d20260714') - -__commit_id__ = commit_id = 'gb26088bfc' From 9e540726647f8e76b8d56b8417e1584de08c68da Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Tue, 14 Jul 2026 10:54:06 -0400 Subject: [PATCH 11/31] CI: ignore _version.py --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 177a1b2a..b22c543a 100644 --- a/.gitignore +++ b/.gitignore @@ -31,6 +31,8 @@ venv/ *.manifest *.spec +**/_version.py + # Installer logs pip-log.txt pip-delete-this-directory.txt From 4282e12df1481d912a57cccb8bf1c09460e41dce Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Tue, 14 Jul 2026 10:57:03 -0400 Subject: [PATCH 12/31] CI: add ruff to dependencies --- pyproject.toml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 4dd16053..2f4ebdd7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,10 +37,8 @@ requires-python = ">=3.10" [project.optional-dependencies] dev = [ - "black!=25.11.0", "coverage", - "flake8", - "isort", + ruff, "happi>=1.14.0", "pre-commit", "pytest", From 4cf3fcce9b71de024656bed25f884fecd47e1817 Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Tue, 14 Jul 2026 10:58:11 -0400 Subject: [PATCH 13/31] CI: add ruff to dependencies --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 2f4ebdd7..24654d47 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ requires-python = ">=3.10" [project.optional-dependencies] dev = [ "coverage", - ruff, + "ruff", "happi>=1.14.0", "pre-commit", "pytest", From 352721fe307e1f96479d280301ef24d970d424b3 Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Tue, 14 Jul 2026 13:51:13 -0400 Subject: [PATCH 14/31] CI: ruff ignore UP006 --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 24654d47..84c9a208 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -136,6 +136,7 @@ ignore = [ "B905", # adding strict=False to every zip call is just noise "C408", # errors due to using dict() "B011", # do not use 'assert False' error + "UP006", # ignore non-PEP 585 generic annotations (e.g. typing.List -> list) ] isort.required-imports = [ ] From 2c9398c52f50f767a889fbe99097e16f54787741 Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Tue, 14 Jul 2026 14:02:24 -0400 Subject: [PATCH 15/31] CI: ruff ignore PYI041 --- pyproject.toml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 84c9a208..625cf0ff 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -133,10 +133,11 @@ select = [ ] unfixable = ["F401"] ignore = [ - "B905", # adding strict=False to every zip call is just noise - "C408", # errors due to using dict() - "B011", # do not use 'assert False' error - "UP006", # ignore non-PEP 585 generic annotations (e.g. typing.List -> list) + "B905", # adding strict=False to every zip call is just noise + "C408", # errors due to using dict() + "B011", # do not use 'assert False' error + "UP006", # ignore non-PEP 585 generic annotations (e.g. typing.List -> list) + "PYI041", # e.g. typing.Union[int, float] -> int | float ] isort.required-imports = [ ] From be0bd33807677dafd65920dd45548f70574f1efa Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Tue, 14 Jul 2026 14:10:52 -0400 Subject: [PATCH 16/31] CI: ruff ignore UP007 --- pyproject.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 625cf0ff..3dd5c941 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -137,7 +137,8 @@ ignore = [ "C408", # errors due to using dict() "B011", # do not use 'assert False' error "UP006", # ignore non-PEP 585 generic annotations (e.g. typing.List -> list) - "PYI041", # e.g. typing.Union[int, float] -> int | float + "UP007", # e.g. typing.Union[int, float] -> int | float + # "PYI041", # e.g. typing.Union[int, float] -> int | float ] isort.required-imports = [ ] From 25a63bd323e92aa4da5828d5da719a10902a7358 Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Tue, 14 Jul 2026 14:12:44 -0400 Subject: [PATCH 17/31] CI: ruff ignore UP045 --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 3dd5c941..8fb677c3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -138,6 +138,7 @@ ignore = [ "B011", # do not use 'assert False' error "UP006", # ignore non-PEP 585 generic annotations (e.g. typing.List -> list) "UP007", # e.g. typing.Union[int, float] -> int | float + "UP045", # e.g. typing.Optional[int] -> int | None # "PYI041", # e.g. typing.Union[int, float] -> int | float ] isort.required-imports = [ From d7d9c90533b0d3ef788698f1fc3631b9cd07e29a Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Tue, 14 Jul 2026 14:19:23 -0400 Subject: [PATCH 18/31] STY: autocorrections from ruff --- src/bluesky_queueserver/__init__.py | 19 +++-- .../manager/annotation_decorator.py | 2 +- src/bluesky_queueserver/manager/comms.py | 4 +- src/bluesky_queueserver/manager/config.py | 3 +- .../manager/config_schemas/loading.py | 2 +- src/bluesky_queueserver/manager/gen_lists.py | 2 +- src/bluesky_queueserver/manager/manager.py | 4 +- .../manager/plan_queue_ops.py | 4 +- .../manager/profile_ops.py | 30 +++---- .../manager/profile_tools.py | 12 ++- .../manager/qserver_cli.py | 4 +- .../manager/start_manager.py | 6 +- .../manager/tests/common.py | 4 +- .../manager/tests/test_console_monitor_cli.py | 2 +- .../manager/tests/test_conversions.py | 24 ++++-- .../manager/tests/test_info_streaming.py | 2 +- .../manager/tests/test_ip_kernel_func.py | 8 +- .../manager/tests/test_manager_options.py | 2 +- .../manager/tests/test_profile_ops.py | 18 ++-- .../manager/tests/test_profile_tools.py | 2 +- .../manager/tests/test_qserver_cli.py | 84 +++++++++---------- .../manager/tests/test_qserver_console.py | 2 +- .../tests/test_start_re_manager_cli.py | 4 +- .../manager/tests/test_zmq_api_base.py | 16 ++-- src/bluesky_queueserver/manager/worker.py | 4 +- 25 files changed, 137 insertions(+), 127 deletions(-) diff --git a/src/bluesky_queueserver/__init__.py b/src/bluesky_queueserver/__init__.py index 2d17d95b..5c588251 100644 --- a/src/bluesky_queueserver/__init__.py +++ b/src/bluesky_queueserver/__init__.py @@ -1,5 +1,4 @@ from ._version import __version__ - from .manager.annotation_decorator import parameter_annotation_decorator # noqa: E402, F401 from .manager.comms import ( # noqa: E402, F401 CommTimeoutError, @@ -16,17 +15,19 @@ ReceiveSystemInfo, ReceiveSystemInfoAsync, ) -from .manager.profile_ops import bind_plan_arguments # noqa: E402, F401 -from .manager.profile_ops import construct_parameters # noqa: E402, F401 -from .manager.profile_ops import format_text_descriptions # noqa: E402, F401 -from .manager.profile_ops import register_device # noqa: E402, F401 -from .manager.profile_ops import register_plan # noqa: E402, F401 -from .manager.profile_ops import validate_plan # noqa: E402, F401 -from .manager.profile_tools import is_ipython_mode # noqa: E402, F401 -from .manager.profile_tools import is_re_worker_active # noqa: E402, F401 +from .manager.profile_ops import ( + bind_plan_arguments, # noqa: E402, F401 + construct_parameters, # noqa: E402, F401 + format_text_descriptions, # noqa: E402, F401 + register_device, # noqa: E402, F401 + register_plan, # noqa: E402, F401 + validate_plan, # noqa: E402, F401 +) from .manager.profile_tools import ( # noqa: E402, F401 clear_ipython_mode, clear_re_worker_active, + is_ipython_mode, # noqa: E402, F401 + is_re_worker_active, # noqa: E402, F401 set_ipython_mode, set_re_worker_active, ) diff --git a/src/bluesky_queueserver/manager/annotation_decorator.py b/src/bluesky_queueserver/manager/annotation_decorator.py index e5ef24fb..af53a54b 100644 --- a/src/bluesky_queueserver/manager/annotation_decorator.py +++ b/src/bluesky_queueserver/manager/annotation_decorator.py @@ -305,7 +305,7 @@ def is_array(checker, instance): ) raise ValueError(msg) - setattr(wrapper, "_custom_parameter_annotation_", annotation) + wrapper._custom_parameter_annotation_ = annotation return wrapper diff --git a/src/bluesky_queueserver/manager/comms.py b/src/bluesky_queueserver/manager/comms.py index c72cd8d9..357421b5 100644 --- a/src/bluesky_queueserver/manager/comms.py +++ b/src/bluesky_queueserver/manager/comms.py @@ -466,7 +466,7 @@ async def send_msg(self, method, params=None, *, notification=False, timeout=Non # Server Error (issue with execution of the method) err_type = response["error"]["data"]["type"] # Message: "Server error: " - err_msg = f'{response["error"]["message"]}: {response["error"]["data"]["message"]}' + err_msg = f"{response['error']['message']}: {response['error']['data']['message']}" else: # Other json-rpc errors err_type = "CommJsonRpcError" @@ -474,7 +474,7 @@ async def send_msg(self, method, params=None, *, notification=False, timeout=Non raise CommJsonRpcError(err_msg, error_code=err_code, error_type=err_type) else: err_msg = ( - f"Message {ppfl(msg)}\n" f"resulted in response with unknown format: {ppfl(response)}" + f"Message {ppfl(msg)}\nresulted in response with unknown format: {ppfl(response)}" ) raise RuntimeError(err_msg) else: diff --git a/src/bluesky_queueserver/manager/config.py b/src/bluesky_queueserver/manager/config.py index 1d0421e1..5c9dcd04 100644 --- a/src/bluesky_queueserver/manager/config.py +++ b/src/bluesky_queueserver/manager/config.py @@ -305,8 +305,7 @@ def get_profile_name_from_path(startup_dir): if not profile_name or not ip_dir: raise ConfigError( - "Failed to extract IPython directory and profile " - f"name from startup directory name: {startup_dir!r}." + f"Failed to extract IPython directory and profile name from startup directory name: {startup_dir!r}." ) return profile_name, ip_dir diff --git a/src/bluesky_queueserver/manager/config_schemas/loading.py b/src/bluesky_queueserver/manager/config_schemas/loading.py index 84a47e51..b26bdea3 100644 --- a/src/bluesky_queueserver/manager/config_schemas/loading.py +++ b/src/bluesky_queueserver/manager/config_schemas/loading.py @@ -12,5 +12,5 @@ def load_schema_from_yml(file_name): here = Path(__file__).parent.absolute() schema_path = os.path.join(here, file_name) - with open(schema_path, "r") as file: + with open(schema_path) as file: return yaml.safe_load(file) diff --git a/src/bluesky_queueserver/manager/gen_lists.py b/src/bluesky_queueserver/manager/gen_lists.py index 262890c6..14512732 100644 --- a/src/bluesky_queueserver/manager/gen_lists.py +++ b/src/bluesky_queueserver/manager/gen_lists.py @@ -320,7 +320,7 @@ def gen_list_of_plans_and_devices( try: if startup_script_path and not os.path.isfile(startup_script_path): - raise IOError(f"Startup script {startup_script_path!r} is not found") + raise OSError(f"Startup script {startup_script_path!r} is not found") if startup_module_name and importlib.util.find_spec(startup_module_name) is None: raise ImportError(f"Startup module {startup_module_name!r} is not found") diff --git a/src/bluesky_queueserver/manager/manager.py b/src/bluesky_queueserver/manager/manager.py index 684f5045..91751fdb 100644 --- a/src/bluesky_queueserver/manager/manager.py +++ b/src/bluesky_queueserver/manager/manager.py @@ -866,7 +866,7 @@ async def _set_manager_state(self, state, *, coro=None, autostart_disable=False) if state not in (MState.IDLE, MState.PAUSED): raise ValueError( - f"Attempting to set invalid state: {state!r}. " "Only 'idle' or 'paused' states are allowed." + f"Attempting to set invalid state: {state!r}. Only 'idle' or 'paused' states are allowed." ) if self._use_ipython_kernel: @@ -3507,7 +3507,7 @@ async def _lock_handler(self, request): await self._save_lock_info_to_redis() logger.info( - "RE Manager was locked by the user '%s': environment=%s " "queue=%s. Note: %s", + "RE Manager was locked by the user '%s': environment=%s queue=%s. Note: %s", user_name, environment, queue, diff --git a/src/bluesky_queueserver/manager/plan_queue_ops.py b/src/bluesky_queueserver/manager/plan_queue_ops.py index 6388200f..57fe8294 100644 --- a/src/bluesky_queueserver/manager/plan_queue_ops.py +++ b/src/bluesky_queueserver/manager/plan_queue_ops.py @@ -194,9 +194,7 @@ def _validate_plan_queue_mode(self, plan_queue_mode): missing_keys.remove(k) key_type = expected_params.get(k) # Using [k] makes PyCharm to display annoying error if not isinstance(v, key_type): - raise TypeError( - f"Unsupported type '{type(v)}' of the parameter '{k}': " f"expected type '{key_type}'" - ) + raise TypeError(f"Unsupported type '{type(v)}' of the parameter '{k}': expected type '{key_type}'") if missing_keys: raise ValueError( f"Parameters {missing_keys} are missing from 'plan_queue_mode' dictionary. " diff --git a/src/bluesky_queueserver/manager/profile_ops.py b/src/bluesky_queueserver/manager/profile_ops.py index c0fb33f3..7b8a45f1 100644 --- a/src/bluesky_queueserver/manager/profile_ops.py +++ b/src/bluesky_queueserver/manager/profile_ops.py @@ -192,11 +192,11 @@ def get_default_startup_profile(): def create_demo_ipython_profile(startup_dir, *, delete_existing=True): """ Create demo IPython profile in temporary location. Copy startup directory - to the new profile. Raises IOError if the destination directory is not temporary. + to the new profile. Raises OSError if the destination directory is not temporary. """ tempdir = tempfile.gettempdir() if os.path.commonprefix([tempdir, startup_dir]) != tempdir: - raise IOError("Attempting to create a demo profile in non-temporary startup directory: %r", startup_dir) + raise OSError("Attempting to create a demo profile in non-temporary startup directory: %r", startup_dir) # Delete the existing startup directory (but not the whole profile). if delete_existing: @@ -283,7 +283,7 @@ def load_profile_collection(path, *, patch_profiles=True, nspace=None): Raises ------ - IOError + OSError path does not exist or the profile collection contains no valid startup files """ @@ -292,9 +292,9 @@ def load_profile_collection(path, *, patch_profiles=True, nspace=None): path = os.path.abspath(path) if not os.path.exists(path): - raise IOError(f"Path '{path}' does not exist.") + raise OSError(f"Path '{path}' does not exist.") if not os.path.isdir(path): - raise IOError(f"Failed to load the profile collection. Path '{path}' is not a directory.") + raise OSError(f"Failed to load the profile collection. Path '{path}' is not a directory.") file_pattern_py = os.path.join(path, "*.py") file_pattern_ipy = os.path.join(path, "*.ipy") @@ -304,7 +304,7 @@ def load_profile_collection(path, *, patch_profiles=True, nspace=None): # If the profile collection contains no startup files, it is very likely # that the profile collection directory is specified incorrectly. if not len(file_list): - raise IOError(f"The directory '{path}' contains no startup files (mask '[0-9][0-9]*.py').") + raise OSError(f"The directory '{path}' contains no startup files (mask '[0-9][0-9]*.py').") # Add original path to the profile collection to allow local imports # from the patched temporary file. @@ -330,7 +330,7 @@ def load_profile_collection(path, *, patch_profiles=True, nspace=None): exec(patch, nspace, nspace) if not os.path.isfile(file): - raise IOError(f"Startup file {file!r} was not found") + raise OSError(f"Startup file {file!r} was not found") code_str = _patch_script_code(open(file).read()) code = compile(code_str, file, "exec") exec(code, nspace, nspace) @@ -427,7 +427,7 @@ def load_startup_script(script_path, *, enable_local_imports=True, nspace=None): try: if not os.path.isfile(script_path): - raise IOError(f"Startup file {script_path!r} was not found") + raise OSError(f"Startup file {script_path!r} was not found") # Set '__file__' and '__name__' variables patch = f"__file__ = '{script_path}'; __name__ = '__main__'\n" @@ -2024,7 +2024,7 @@ def process_argument(v, v_min, v_max): except Exception as ex: msg = f"{msg}\n" if msg else msg - msg += f"Parameter value is out of range: key='{k}', " f"value='{kwargs_in[k]}': {ex}" + msg += f"Parameter value is out of range: key='{k}', value='{kwargs_in[k]}': {ex}" match = False return match, msg @@ -3466,7 +3466,7 @@ def save_existing_plans_and_devices( file_path = os.path.join(file_dir, file_name) if os.path.exists(file_path) and not overwrite: - raise IOError(f"File '{file_path}' already exists. File overwriting is disabled.") + raise OSError(f"File '{file_path}' already exists. File overwriting is disabled.") with open(file_path, "w") as stream: stream.write("# This file is automatically generated. Edit at your own risk.\n") @@ -3497,7 +3497,7 @@ def load_existing_plans_and_devices(path_to_file=None): logger.warning("%s File '%s' does not exist.", msg, path_to_file) return {}, {} - with open(path_to_file, "r") as stream: + with open(path_to_file) as stream: try: existing_plans_and_devices = yaml.load(stream, Loader=yaml.FullLoader) except Exception as ex: @@ -3748,7 +3748,7 @@ def load_user_group_permissions(path_to_file=None): Raises ------ - IOError + OSError Error while reading the YAML file. """ @@ -3757,9 +3757,9 @@ def load_user_group_permissions(path_to_file=None): try: if not os.path.isfile(path_to_file): - raise IOError(f"File '{path_to_file}' does not exist.") + raise OSError(f"File '{path_to_file}' does not exist.") - with open(path_to_file, "r") as stream: + with open(path_to_file) as stream: user_group_permissions = yaml.safe_load(stream) validate_user_group_permissions(user_group_permissions) @@ -3769,7 +3769,7 @@ def load_user_group_permissions(path_to_file=None): except Exception as ex: msg = f"Error while loading user group permissions from file '{path_to_file}': {str(ex)}" - raise IOError(msg) + raise OSError(msg) return user_group_permissions diff --git a/src/bluesky_queueserver/manager/profile_tools.py b/src/bluesky_queueserver/manager/profile_tools.py index aaff575a..aeb0159e 100644 --- a/src/bluesky_queueserver/manager/profile_tools.py +++ b/src/bluesky_queueserver/manager/profile_tools.py @@ -221,13 +221,12 @@ def load_devices_from_happi(device_names, *, namespace, **kwargs): # Verify that 'device_names' has correct type if not isinstance(device_names, (tuple, list)): raise TypeError( - "Parameter 'device_names' value must be a tuple or a list: " - f"type(device_names) = {type(device_names)}" + f"Parameter 'device_names' value must be a tuple or a list: type(device_names) = {type(device_names)}" ) for n, name in enumerate(device_names): if not isinstance(name, (str, tuple, list)): raise TypeError( - f"Parameter 'device_names': element #{n} must be str, tuple or list: " f"device_names[n] = {name}" + f"Parameter 'device_names': element #{n} must be str, tuple or list: device_names[n] = {name}" ) if isinstance(name, (tuple, list)): if len(name) != 2 or not isinstance(name[0], str) or not isinstance(name[1], str): @@ -259,8 +258,7 @@ def load_devices_from_happi(device_names, *, namespace, **kwargs): res = client.search(**search_params) if not res: raise RuntimeError( - f"No devices with name '{name_db}' were found in Happi database. " - f"Search parameters {search_params}" + f"No devices with name '{name_db}' were found in Happi database. Search parameters {search_params}" ) elif len(res) > 1: raise RuntimeError( @@ -282,9 +280,9 @@ def load_devices_from_happi(device_names, *, namespace, **kwargs): # is a good idea to change it as well for consistency. We don't touch `_id`. # The modified data is not expected to be saved to the database. if hasattr(r, "_item"): - setattr(r._item, "name", name_ns) + r._item.name = name_ns else: # Remove this after happi with versions older than v1.14.0 become obsolete - setattr(r._device, "name", name_ns) + r._device.name = name_ns r.metadata["name"] = name_ns # Instantiate the object results.append(r) diff --git a/src/bluesky_queueserver/manager/qserver_cli.py b/src/bluesky_queueserver/manager/qserver_cli.py index afdc7f79..14b078b0 100644 --- a/src/bluesky_queueserver/manager/qserver_cli.py +++ b/src/bluesky_queueserver/manager/qserver_cli.py @@ -989,7 +989,7 @@ def create_msg(params, *, lock_key): file_name = params[1] try: - with open(file_name, "r") as f: + with open(file_name) as f: permissions_yaml = f.read() permissions_dict = yaml.load(permissions_yaml, Loader=yaml.FullLoader) except Exception as ex: @@ -1011,7 +1011,7 @@ def create_msg(params, *, lock_key): # Parameter 1 (required) - file name, parameter 2 (optional) - 'background' file_name = params[1] try: - with open(file_name, "r") as f: + with open(file_name) as f: script = f.read() except Exception as ex: raise CommandParameterError( diff --git a/src/bluesky_queueserver/manager/start_manager.py b/src/bluesky_queueserver/manager/start_manager.py index ee2cb905..5498d923 100644 --- a/src/bluesky_queueserver/manager/start_manager.py +++ b/src/bluesky_queueserver/manager/start_manager.py @@ -767,16 +767,14 @@ def formatter(prog): if not settings.existing_plans_and_devices_path: logger.error( - "The path to the list of existing plans and devices (--existing-plans-and-devices) " - "is not specified." + "The path to the list of existing plans and devices (--existing-plans-and-devices) is not specified." ) ttime.sleep(0.01) return 1 if not settings.user_group_permissions_path: logger.error( - "The path to the file containing user group permissions (--user-group-permissions) " - "is not specified." + "The path to the file containing user group permissions (--user-group-permissions) is not specified." ) ttime.sleep(0.01) return 1 diff --git a/src/bluesky_queueserver/manager/tests/common.py b/src/bluesky_queueserver/manager/tests/common.py index 2038df1e..b4737347 100644 --- a/src/bluesky_queueserver/manager/tests/common.py +++ b/src/bluesky_queueserver/manager/tests/common.py @@ -97,7 +97,7 @@ def patch_first_startup_file(pc_path, additional_code): if not os.path.exists(fln_tmp): shutil.copy(fln, fln_tmp) - with open(fln, "r") as file_in: + with open(fln) as file_in: code = file_in.readlines() with open(fln, "w") as file_out: @@ -146,7 +146,7 @@ def append_code_to_last_startup_file(pc_path, additional_code): if not os.path.exists(fln_tmp): shutil.copy(fln, fln_tmp) - with open(fln, "r") as file_in: + with open(fln) as file_in: code = file_in.readlines() with open(fln, "w") as file_out: diff --git a/src/bluesky_queueserver/manager/tests/test_console_monitor_cli.py b/src/bluesky_queueserver/manager/tests/test_console_monitor_cli.py index 22aa53d4..4f9a257a 100644 --- a/src/bluesky_queueserver/manager/tests/test_console_monitor_cli.py +++ b/src/bluesky_queueserver/manager/tests/test_console_monitor_cli.py @@ -2,10 +2,10 @@ import pytest -from .common import re_manager_cmd # noqa: F401 from .common import ( condition_environment_closed, condition_environment_created, + re_manager_cmd, # noqa: F401 use_zmq_encoding_for_tests, wait_for_condition, zmq_request, diff --git a/src/bluesky_queueserver/manager/tests/test_conversions.py b/src/bluesky_queueserver/manager/tests/test_conversions.py index 93e2aedb..3e941532 100644 --- a/src/bluesky_queueserver/manager/tests/test_conversions.py +++ b/src/bluesky_queueserver/manager/tests/test_conversions.py @@ -183,15 +183,27 @@ def test_spreadsheet_to_plan_list_1(tmp_path, ext): # with mixed types). Also check if all possible types are handled correctly. extra_plans = [ {"name": "count", "args": [["det2"]], "kwargs": {"num": 2, "extra_param": 50}, "item_type": "plan"}, - {"name": "count", "args": [["det2"]], "kwargs": { - "num": 2, "extra_param": "some_str"}, "item_type": "plan"}, + { + "name": "count", + "args": [["det2"]], + "kwargs": {"num": 2, "extra_param": "some_str"}, + "item_type": "plan", + }, {"name": "count", "args": [["det2"]], "kwargs": {"num": 2, "extra_param": 50.256}, "item_type": "plan"}, {"name": "count", "args": [["det2"]], "kwargs": {"num": 2, "extra_param": None}, "item_type": "plan"}, {"name": "count", "args": [["det2"]], "kwargs": {"num": 2, "extra_param": ""}, "item_type": "plan"}, - {"name": "count", "args": [["det2"]], "kwargs": { - "num": 2, "extra_param": [10, 20, 30]}, "item_type": "plan"}, - {"name": "count", "args": [["det2"]], "kwargs": {"num": 2, "extra_param": { - "p1": 10, "p2": "10", "p3": 50}}, "item_type": "plan"}, + { + "name": "count", + "args": [["det2"]], + "kwargs": {"num": 2, "extra_param": [10, 20, 30]}, + "item_type": "plan", + }, + { + "name": "count", + "args": [["det2"]], + "kwargs": {"num": 2, "extra_param": {"p1": 10, "p2": "10", "p3": 50}}, + "item_type": "plan", + }, ] plan_list = copy.deepcopy(plan_list_sample) # We are going to change the plans diff --git a/src/bluesky_queueserver/manager/tests/test_info_streaming.py b/src/bluesky_queueserver/manager/tests/test_info_streaming.py index 763e6ab3..71f1a70b 100644 --- a/src/bluesky_queueserver/manager/tests/test_info_streaming.py +++ b/src/bluesky_queueserver/manager/tests/test_info_streaming.py @@ -5,10 +5,10 @@ from bluesky_queueserver.manager.output_streaming import ReceiveSystemInfo, _default_zmq_info_topic -from .common import re_manager_cmd # noqa: F401 from .common import ( condition_environment_closed, condition_environment_created, + re_manager_cmd, # noqa: F401 use_zmq_encoding_for_tests, wait_for_condition, zmq_request, diff --git a/src/bluesky_queueserver/manager/tests/test_ip_kernel_func.py b/src/bluesky_queueserver/manager/tests/test_ip_kernel_func.py index 2e074cc0..a952e953 100644 --- a/src/bluesky_queueserver/manager/tests/test_ip_kernel_func.py +++ b/src/bluesky_queueserver/manager/tests/test_ip_kernel_func.py @@ -3,10 +3,6 @@ import pytest -from .common import ip_kernel_simple_client # noqa: F401 -from .common import re_manager # noqa: F401 -from .common import re_manager_cmd # noqa: F401 -from .common import re_manager_factory # noqa: F401 from .common import ( _user, _user_group, @@ -21,6 +17,10 @@ condition_queue_processing_finished, copy_default_profile_collection, get_manager_status, + ip_kernel_simple_client, # noqa: F401 + re_manager, # noqa: F401 + re_manager_cmd, # noqa: F401 + re_manager_factory, # noqa: F401 use_ipykernel_for_tests, wait_for_condition, wait_for_task_result, diff --git a/src/bluesky_queueserver/manager/tests/test_manager_options.py b/src/bluesky_queueserver/manager/tests/test_manager_options.py index 152e3090..72d25f08 100644 --- a/src/bluesky_queueserver/manager/tests/test_manager_options.py +++ b/src/bluesky_queueserver/manager/tests/test_manager_options.py @@ -7,7 +7,6 @@ from bluesky_queueserver import gen_list_of_plans_and_devices -from .common import re_manager_cmd # noqa: F401 from .common import ( _user, _user_group, @@ -16,6 +15,7 @@ condition_environment_created, condition_queue_processing_finished, copy_default_profile_collection, + re_manager_cmd, # noqa: F401 wait_for_condition, zmq_request, ) diff --git a/src/bluesky_queueserver/manager/tests/test_profile_ops.py b/src/bluesky_queueserver/manager/tests/test_profile_ops.py index a25b1007..88ee6907 100644 --- a/src/bluesky_queueserver/manager/tests/test_profile_ops.py +++ b/src/bluesky_queueserver/manager/tests/test_profile_ops.py @@ -69,13 +69,13 @@ validate_plan, ) -from .common import reset_sys_modules # noqa: F401 from .common import ( _user_group, append_code_to_last_startup_file, copy_default_profile_collection, patch_first_startup_file, remove_run_engine_config_from_startup, + reset_sys_modules, # noqa: F401 ) python_version = sys.version_info # Can be compare to tuples (such as 'python_version >= (3, 9)') @@ -325,18 +325,18 @@ def test_load_profile_collection_04_fail(tmp_path): """ # Non-existing path pc_path = os.path.join(tmp_path, "abc") - with pytest.raises(IOError, match="Path .+ does not exist"): + with pytest.raises(OSError, match="Path .+ does not exist"): load_profile_collection(pc_path) # 'Empty' profile collection (no startup files) - with pytest.raises(IOError, match="The directory .+ contains no startup files"): + with pytest.raises(OSError, match="The directory .+ contains no startup files"): load_profile_collection(tmp_path) pc_path = os.path.join(tmp_path, "test.txt") # Create a file with open(pc_path, "w"): pass - with pytest.raises(IOError, match="Path .+ is not a directory"): + with pytest.raises(OSError, match="Path .+ is not a directory"): load_profile_collection(pc_path) @@ -6102,7 +6102,7 @@ def test_load_user_group_permissions_2_fail(tmp_path): os.makedirs(path_to_file, exist_ok=True) path_to_file = os.path.join(path_to_file, "user_permissions.yaml") - with pytest.raises(IOError, match=f"File '{path_to_file}' does not exist"): + with pytest.raises(OSError, match=f"File '{path_to_file}' does not exist"): load_user_group_permissions(path_to_file) @@ -6120,7 +6120,7 @@ def test_load_user_group_permissions_3_fail(tmp_path): with open(path_to_file, "w") as f: yaml.dump(ug_dict, f) - with pytest.raises(IOError, match="Additional properties are not allowed"): + with pytest.raises(OSError, match="Additional properties are not allowed"): load_user_group_permissions(path_to_file) @@ -6138,7 +6138,7 @@ def test_load_user_group_permissions_4_fail(tmp_path): with open(path_to_file, "w") as f: yaml.dump(ug_dict, f) - with pytest.raises(IOError, match="Additional properties are not allowed"): + with pytest.raises(OSError, match="Additional properties are not allowed"): load_user_group_permissions(path_to_file) @@ -6157,7 +6157,7 @@ def test_load_user_group_permissions_5_fail(tmp_path, group_to_delete): with open(path_to_file, "w") as f: yaml.dump(ug_dict, f) - with pytest.raises(IOError, match="Missing required user group"): + with pytest.raises(OSError, match="Missing required user group"): load_user_group_permissions(path_to_file) @@ -6175,7 +6175,7 @@ def test_load_user_group_permissions_6_fail(tmp_path): with open(path_to_file, "w") as f: yaml.dump(ug_dict, f) - with pytest.raises(IOError, match="is not of type 'string'"): + with pytest.raises(OSError, match="is not of type 'string'"): load_user_group_permissions(path_to_file) diff --git a/src/bluesky_queueserver/manager/tests/test_profile_tools.py b/src/bluesky_queueserver/manager/tests/test_profile_tools.py index cde26300..6e7c50a9 100644 --- a/src/bluesky_queueserver/manager/tests/test_profile_tools.py +++ b/src/bluesky_queueserver/manager/tests/test_profile_tools.py @@ -17,7 +17,6 @@ set_re_worker_active, ) -from .common import re_manager_cmd # noqa: F401 from .common import ( _user, _user_group, @@ -26,6 +25,7 @@ condition_manager_idle, copy_default_profile_collection, patch_first_startup_file, + re_manager_cmd, # noqa: F401 use_ipykernel_for_tests, wait_for_condition, zmq_request, diff --git a/src/bluesky_queueserver/manager/tests/test_qserver_cli.py b/src/bluesky_queueserver/manager/tests/test_qserver_cli.py index 366c7941..971df159 100644 --- a/src/bluesky_queueserver/manager/tests/test_qserver_cli.py +++ b/src/bluesky_queueserver/manager/tests/test_qserver_cli.py @@ -66,9 +66,9 @@ def test_qserver_cli_and_manager(re_manager): # noqa: F811 """ Long test runs a series of CLI commands. """ - assert wait_for_condition( - time=3, condition=condition_manager_idle - ), "Timeout while waiting for manager to initialize." + assert wait_for_condition(time=3, condition=condition_manager_idle), ( + "Timeout while waiting for manager to initialize." + ) # Clear queue assert sp_call(["qserver", "queue", "clear"]) == SUCCESS @@ -119,24 +119,24 @@ def test_qserver_cli_and_manager(re_manager): # noqa: F811 assert sp_call(["qserver", "queue", "start"]) == SUCCESS ttime.sleep(1) assert sp_call(["qserver", "re", "pause", "immediate"]) == SUCCESS - assert wait_for_condition( - time=60, condition=condition_manager_paused - ), "Timeout while waiting for manager to pause" + assert wait_for_condition(time=60, condition=condition_manager_paused), ( + "Timeout while waiting for manager to pause" + ) assert sp_call(["qserver", "re", "resume"]) == SUCCESS ttime.sleep(1) assert sp_call(["qserver", "re", "pause", "deferred"]) == SUCCESS - assert wait_for_condition( - time=60, condition=condition_manager_paused - ), "Timeout while waiting for manager to pause" + assert wait_for_condition(time=60, condition=condition_manager_paused), ( + "Timeout while waiting for manager to pause" + ) assert sp_call(["qserver", "re", "resume"]) == SUCCESS assert sp_call(["qserver", "re", "metadata"]) == SUCCESS - assert wait_for_condition( - time=60, condition=condition_queue_processing_finished - ), "Timeout while waiting for process to finish" + assert wait_for_condition(time=60, condition=condition_queue_processing_finished), ( + "Timeout while waiting for process to finish" + ) assert sp_call(["qserver", "queue", "add", "plan", plan_1]) == SUCCESS assert sp_call(["qserver", "queue", "add", "plan", plan_1]) == SUCCESS @@ -146,9 +146,9 @@ def test_qserver_cli_and_manager(re_manager): # noqa: F811 assert sp_call(["qserver", "queue", "start"]) == SUCCESS - assert wait_for_condition( - time=60, condition=condition_queue_processing_finished - ), "Timeout while waiting for process to finish" + assert wait_for_condition(time=60, condition=condition_queue_processing_finished), ( + "Timeout while waiting for process to finish" + ) # Test 'killing' the manager during running plan. Load long plan and two short ones. # The tests checks if execution of the queue is continued uninterrupted after @@ -163,23 +163,23 @@ def test_qserver_cli_and_manager(re_manager): # noqa: F811 ttime.sleep(1) assert sp_call(["qserver", "manager", "kill", "test"]) != SUCCESS ttime.sleep(6) # Don't request the condition to avoid timeout error TODO: wait for the server - assert wait_for_condition( - time=60, condition=condition_queue_processing_finished - ), "Timeout while waiting for process to finish" + assert wait_for_condition(time=60, condition=condition_queue_processing_finished), ( + "Timeout while waiting for process to finish" + ) assert sp_call(["qserver", "environment", "close"]) == SUCCESS - assert wait_for_condition( - time=5, condition=condition_environment_closed - ), "Timeout while waiting for environment to be closed" + assert wait_for_condition(time=5, condition=condition_environment_closed), ( + "Timeout while waiting for environment to be closed" + ) def test_qserver_environment_close(re_manager): # noqa: F811 """ Test for `environment_close` command """ - assert wait_for_condition( - time=3, condition=condition_manager_idle - ), "Timeout while waiting for manager to initialize." + assert wait_for_condition(time=3, condition=condition_manager_idle), ( + "Timeout while waiting for manager to initialize." + ) # Clear queue assert sp_call(["qserver", "queue", "clear"]) == SUCCESS @@ -203,9 +203,9 @@ def test_qserver_environment_close(re_manager): # noqa: F811 # Call is expected to fail, because a plan is currently running assert sp_call(["qserver", "environment", "close"]) != SUCCESS - assert wait_for_condition( - time=60, condition=condition_queue_processing_finished - ), "Timeout while waiting for process to finish" + assert wait_for_condition(time=60, condition=condition_queue_processing_finished), ( + "Timeout while waiting for process to finish" + ) n_plans, is_plan_running, n_history = get_queue_state() assert n_plans == 0, "Incorrect number of plans in the queue" @@ -214,18 +214,18 @@ def test_qserver_environment_close(re_manager): # noqa: F811 # Now we can close the environment because plan execution is complete assert sp_call(["qserver", "environment", "close"]) == SUCCESS - assert wait_for_condition( - time=5, condition=condition_environment_closed - ), "Timeout while waiting for environment to be closed" + assert wait_for_condition(time=5, condition=condition_environment_closed), ( + "Timeout while waiting for environment to be closed" + ) def test_qserver_environment_destroy(re_manager): # noqa: F811 """ Test for `environment_destroy` command """ - assert wait_for_condition( - time=3, condition=condition_manager_idle - ), "Timeout while waiting for manager to initialize." + assert wait_for_condition(time=3, condition=condition_manager_idle), ( + "Timeout while waiting for manager to initialize." + ) # Clear queue assert sp_call(["qserver", "queue", "clear"]) == SUCCESS @@ -247,9 +247,9 @@ def test_qserver_environment_destroy(re_manager): # noqa: F811 assert is_plan_running is True assert sp_call(["qserver", "environment", "destroy"]) == SUCCESS - assert wait_for_condition( - time=3, condition=condition_manager_idle - ), "Timeout while waiting for environment to be destroyed." + assert wait_for_condition(time=3, condition=condition_manager_idle), ( + "Timeout while waiting for environment to be destroyed." + ) n_plans, is_plan_running, _ = get_queue_state() assert n_plans == 1, "Incorrect number of plans in the queue" @@ -264,9 +264,9 @@ def test_qserver_environment_destroy(re_manager): # noqa: F811 assert n_plans == 0, "Incorrect number of plans in the queue" assert is_plan_running is True - assert wait_for_condition( - time=60, condition=condition_queue_processing_finished - ), "Timeout while waiting for process to finish" + assert wait_for_condition(time=60, condition=condition_queue_processing_finished), ( + "Timeout while waiting for process to finish" + ) n_plans, is_plan_running, n_history = get_queue_state() assert n_plans == 0, "Incorrect number of plans in the queue" @@ -274,9 +274,9 @@ def test_qserver_environment_destroy(re_manager): # noqa: F811 assert n_history == 2 assert sp_call(["qserver", "environment", "close"]) == SUCCESS - assert wait_for_condition( - time=5, condition=condition_environment_closed - ), "Timeout while waiting for environment to be closed" + assert wait_for_condition(time=5, condition=condition_environment_closed), ( + "Timeout while waiting for environment to be closed" + ) # fmt: off diff --git a/src/bluesky_queueserver/manager/tests/test_qserver_console.py b/src/bluesky_queueserver/manager/tests/test_qserver_console.py index 99439d87..a98b6c40 100644 --- a/src/bluesky_queueserver/manager/tests/test_qserver_console.py +++ b/src/bluesky_queueserver/manager/tests/test_qserver_console.py @@ -5,10 +5,10 @@ from bluesky_queueserver import generate_zmq_keys from ..qserver_cli import QServerExitCodes -from .common import re_manager_cmd # noqa: F401 from .common import ( condition_environment_closed, condition_environment_created, + re_manager_cmd, # noqa: F401 set_qserver_zmq_address, set_qserver_zmq_public_key, use_ipykernel_for_tests, diff --git a/src/bluesky_queueserver/manager/tests/test_start_re_manager_cli.py b/src/bluesky_queueserver/manager/tests/test_start_re_manager_cli.py index 7a3996c2..777d6200 100644 --- a/src/bluesky_queueserver/manager/tests/test_start_re_manager_cli.py +++ b/src/bluesky_queueserver/manager/tests/test_start_re_manager_cli.py @@ -11,7 +11,6 @@ from bluesky_queueserver import gen_list_of_plans_and_devices from bluesky_queueserver.manager.config import default_existing_pd_fln, default_user_group_pd_fln -from .common import re_manager_cmd # noqa: F401 from .common import ( _test_redis_name_prefix, _user, @@ -24,6 +23,7 @@ condition_queue_processing_finished, copy_default_profile_collection, get_manager_status, + re_manager_cmd, # noqa: F401 set_qserver_zmq_address, set_qserver_zmq_encoding, set_qserver_zmq_public_key, @@ -790,7 +790,7 @@ def test_manager_with_config_file_01( state = get_manager_status(encoding=zmq_encoding) assert state["manager_state"] == "idle" - with open(save_settings_path, "r") as f: + with open(save_settings_path) as f: current_settings = yaml.load(f, Loader=yaml.FullLoader) # Remove 'startup_dir' from the settings dictionaries and compare them diff --git a/src/bluesky_queueserver/manager/tests/test_zmq_api_base.py b/src/bluesky_queueserver/manager/tests/test_zmq_api_base.py index abb07093..a713e0fa 100644 --- a/src/bluesky_queueserver/manager/tests/test_zmq_api_base.py +++ b/src/bluesky_queueserver/manager/tests/test_zmq_api_base.py @@ -1864,8 +1864,10 @@ def test_zmq_api_queue_item_update_2_fail(re_manager, replace): # noqa F811 resp2, _ = zmq_request("queue_item_update", params) assert resp2["success"] is False - assert resp2["msg"] == "Failed to add an item: Failed to replace item: " \ - "Item with UID 'incorrect_uid' is not in the queue" + assert ( + resp2["msg"] == "Failed to add an item: Failed to replace item: " + "Item with UID 'incorrect_uid' is not in the queue" + ) resp3, _ = zmq_request("queue_get") assert resp3["items"] != [] @@ -1896,8 +1898,10 @@ def test_zmq_api_queue_item_update_3_fail(re_manager, replace): # noqa F811 resp2, _ = zmq_request("queue_item_update", params) assert resp2["success"] is False - assert resp2["msg"] == "Failed to add an item: Failed to replace item: " \ - "Item with UID 'incorrect_uid' is not in the queue" + assert ( + resp2["msg"] == "Failed to add an item: Failed to replace item: " + "Item with UID 'incorrect_uid' is not in the queue" + ) resp3, _ = zmq_request("queue_get") assert resp3["items"] == [] @@ -2516,7 +2520,7 @@ def test_zmq_api_script_upload_06(tmp_path, re_manager_cmd): # noqa: F811 default_files = glob.glob(os.path.join(default_pc_path, "*.py")) default_files.sort() for fn in default_files: - with open(fn, "r") as f: + with open(fn) as f: script = f.read() resp3, _ = zmq_request("script_upload", params={"script": script, "update_re": True}) assert resp3["success"] is True @@ -3031,7 +3035,7 @@ def test_zmq_api_task_status_1(re_manager): # noqa: F811 resp5, _ = zmq_request("task_status", params={"task_uid": task_uids}) assert resp5["success"] is True assert resp5["msg"] == "" - assert resp5["status"] == {_: "running" for _ in task_uids} + assert resp5["status"] == dict.fromkeys(task_uids, "running") result = wait_for_task_result(10, task_uids[-1]) assert result["success"] is True, pprint.pformat(result) diff --git a/src/bluesky_queueserver/manager/worker.py b/src/bluesky_queueserver/manager/worker.py index b223ca2d..6d549a83 100644 --- a/src/bluesky_queueserver/manager/worker.py +++ b/src/bluesky_queueserver/manager/worker.py @@ -1145,7 +1145,7 @@ def _command_pause_plan_handler(self, *, option): err_msg = str(ex) else: status = "rejected" - err_msg = "Run engine can be paused only in 'running' state. " f"Current state: '{self.re_state}'" + err_msg = f"Run engine can be paused only in 'running' state. Current state: '{self.re_state}'" msg_out = {"status": status, "err_msg": err_msg} return msg_out @@ -1786,7 +1786,7 @@ def find_kernel_ip(ip_str): # the file is corrupt. if os.path.isfile(abs_cf_name): try: - with open(abs_cf_name, "r") as f: + with open(abs_cf_name) as f: cn_info = json.load(f) def _check_value(value, key): From 921c37ce51743073929dad466ce26af60d92513e Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Tue, 14 Jul 2026 14:26:39 -0400 Subject: [PATCH 19/31] STY: rewrite unnecessary comprehensions --- src/bluesky_queueserver/manager/config.py | 2 +- src/bluesky_queueserver/manager/profile_ops.py | 4 ++-- src/bluesky_queueserver/manager/tests/common.py | 6 +++--- src/bluesky_queueserver/manager/tests/test_zmq_api_base.py | 6 +++--- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/bluesky_queueserver/manager/config.py b/src/bluesky_queueserver/manager/config.py index 5c9dcd04..0d9ade91 100644 --- a/src/bluesky_queueserver/manager/config.py +++ b/src/bluesky_queueserver/manager/config.py @@ -248,7 +248,7 @@ def _get_existing_cli_params(self): # ``--zmq-info-addr=tcp://*:60621`` sys_argsv = [_.split("=")[0] for _ in sys.argv[1:] if _.startswith("-")] for k, v in key_mapping.items(): - key_specified[k] = any([_ in sys_argsv for _ in v]) + key_specified[k] = any(_ in sys_argsv for _ in v) return key_specified diff --git a/src/bluesky_queueserver/manager/profile_ops.py b/src/bluesky_queueserver/manager/profile_ops.py index 7b8a45f1..c8df3c48 100644 --- a/src/bluesky_queueserver/manager/profile_ops.py +++ b/src/bluesky_queueserver/manager/profile_ops.py @@ -996,8 +996,8 @@ def process_parameter_value(value, pp, objects_in_nspace, group_plans, group_dev # Compare parameters in the signature and in the list of allowed plans. Make sure that the parameters # in the list of allowed plans are a subset of the existing parameters (otherwise the plan can not # be started). This not full validation. - existing_names = set([_.name for _ in signature.parameters.values()]) - allowed_names = set([_["name"] for _ in group_plans[plan_name]["parameters"]]) + existing_names = set(_.name for _ in signature.parameters.values()) + allowed_names = set(_["name"] for _ in group_plans[plan_name]["parameters"]) extra_names = allowed_names - existing_names if extra_names: raise RuntimeError(f"Plan description in the list of allowed plans has extra parameters {extra_names}") diff --git a/src/bluesky_queueserver/manager/tests/common.py b/src/bluesky_queueserver/manager/tests/common.py index b4737347..d099eb34 100644 --- a/src/bluesky_queueserver/manager/tests/common.py +++ b/src/bluesky_queueserver/manager/tests/common.py @@ -513,15 +513,15 @@ def start_manager( # Set logging level for RE Manager unless it is already set in parameters # Leads to excessive output and some tests may fail at tearup. Enable only when needed. logging_levels = ("--verbose", "--quiet", "--silent") - if not any([_ in params for _ in logging_levels]): + if not any(_ in params for _ in logging_levels): params.append("--verbose") # Start the manager with IPython kernel if the - if not any([_.startswith("--use-ipython-kernel") for _ in params]) and use_ipykernel_for_tests(): + if not any(_.startswith("--use-ipython-kernel") for _ in params) and use_ipykernel_for_tests(): params.append("--use-ipython-kernel=ON") # Set the encoding for 0MQ communication - if not any([_.startswith("--zmq-encoding") for _ in params]): + if not any(_.startswith("--zmq-encoding") for _ in params): params.append(f"--zmq-encoding={use_zmq_encoding_for_tests()}") # Remove --zmq-encoding=0 # Do not pass the parameter at all if "--zmq-encoding=0" in params: diff --git a/src/bluesky_queueserver/manager/tests/test_zmq_api_base.py b/src/bluesky_queueserver/manager/tests/test_zmq_api_base.py index a713e0fa..91b18cbb 100644 --- a/src/bluesky_queueserver/manager/tests/test_zmq_api_base.py +++ b/src/bluesky_queueserver/manager/tests/test_zmq_api_base.py @@ -3387,7 +3387,7 @@ def test_zmq_api_function_execute_5( resp4, msg_err = zmq_request("function_execute", params={"item": func_info, **params}) if not success_snd: # Communication error due to unserializable parameter type (not JSON serializable) - assert any([_ in msg_err for _ in msgs]) + assert any(_ in msg_err for _ in msgs) else: assert resp4["success"] is True, pprint.pformat(resp4) result = wait_for_task_result(10, resp4["task_uid"]) @@ -3397,9 +3397,9 @@ def test_zmq_api_function_execute_5( else: assert result["return_value"] is None assert isinstance(result["traceback"], str) - assert any([_ in result["msg"] for _ in msgs]) + assert any(_ in result["msg"] for _ in msgs) assert isinstance(result["traceback"], str) - assert any([_ in result["traceback"] for _ in msgs]) + assert any(_ in result["traceback"] for _ in msgs) assert result["traceback"].startswith("Traceback") resp6, _ = zmq_request("environment_close") From 46d0c396d9e20435933332580097e9263638c640 Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Tue, 14 Jul 2026 16:20:09 -0400 Subject: [PATCH 20/31] STY: linting changes --- src/bluesky_queueserver/__init__.py | 2 +- src/bluesky_queueserver/manager/comms.py | 16 ++++---- src/bluesky_queueserver/manager/config.py | 4 +- .../manager/conversions.py | 4 +- src/bluesky_queueserver/manager/gen_lists.py | 2 +- src/bluesky_queueserver/manager/manager.py | 4 +- .../manager/plan_queue_ops.py | 4 +- .../manager/profile_ops.py | 38 ++++++++++--------- .../manager/qserver_cli.py | 32 ++++++++-------- .../manager/tests/common.py | 4 +- .../tests/test_annotation_decorator.py | 14 ++----- .../manager/tests/test_comms.py | 10 ++--- .../manager/tests/test_ip_kernel_func.py | 2 +- .../manager/tests/test_plan_queue_ops.py | 2 +- .../manager/tests/test_profile_ops.py | 18 +++++---- .../manager/tests/test_qserver_cli.py | 4 +- .../manager/tests/test_start_manager.py | 2 +- .../manager/tests/test_zmq_api_base.py | 2 +- 18 files changed, 81 insertions(+), 83 deletions(-) diff --git a/src/bluesky_queueserver/__init__.py b/src/bluesky_queueserver/__init__.py index 5c588251..9294a94e 100644 --- a/src/bluesky_queueserver/__init__.py +++ b/src/bluesky_queueserver/__init__.py @@ -1,4 +1,4 @@ -from ._version import __version__ +from ._version import __version__ # noqa: F401 from .manager.annotation_decorator import parameter_annotation_decorator # noqa: E402, F401 from .manager.comms import ( # noqa: E402, F401 CommTimeoutError, diff --git a/src/bluesky_queueserver/manager/comms.py b/src/bluesky_queueserver/manager/comms.py index 357421b5..f6f97ea7 100644 --- a/src/bluesky_queueserver/manager/comms.py +++ b/src/bluesky_queueserver/manager/comms.py @@ -481,10 +481,10 @@ async def send_msg(self, method, params=None, *, notification=False, timeout=Non response = None return response - except asyncio.TimeoutError: - raise CommTimeoutError(f"Timeout while waiting for response to message: \n{ppfl(msg)}") - except queue.Full: - raise CommTimeoutError(f"The outgoing message buffer is full: \n{ppfl(msg)}") + except asyncio.TimeoutError as ex: + raise CommTimeoutError(f"Timeout while waiting for response to message: \n{ppfl(msg)}") from ex + except queue.Full as ex: + raise CommTimeoutError(f"The outgoing message buffer is full: \n{ppfl(msg)}") from ex finally: # Clear the 'send' buffer while not self._msg_send_buffer.empty(): @@ -609,8 +609,8 @@ def validate_zmq_key(key): """ try: generate_zmq_public_key(key) - except Exception: - raise ValueError(f"Invalid key '{key}': the key must be a 40 byte z85 encoded string") + except Exception as ex: + raise ValueError(f"Invalid key '{key}': the key must be a 40 byte z85 encoded string") from ex # ========================================================================================= @@ -986,7 +986,7 @@ def send_message(self, *, method, params=None, timeout=None, cb=None, raise_exce errmsg = f"ZMQ communication error: {str(ex)}" use_ex = raise_exceptions if (raise_exceptions is not None) else self._raise_exceptions if use_ex: - raise CommTimeoutError(errmsg) + raise CommTimeoutError(errmsg) from ex msg_in = {"success": False, "msg": errmsg} return msg_in @@ -1207,7 +1207,7 @@ async def send_message(self, *, method, params=None, timeout=None, raise_excepti errmsg = f"ZMQ communication error: {str(ex)}" use_ex = raise_exceptions if (raise_exceptions is not None) else self._raise_exceptions if use_ex: - raise CommTimeoutError(errmsg) + raise CommTimeoutError(errmsg) from ex msg_in = {"success": False, "msg": errmsg} return msg_in diff --git a/src/bluesky_queueserver/manager/config.py b/src/bluesky_queueserver/manager/config.py index 0d9ade91..0f58304c 100644 --- a/src/bluesky_queueserver/manager/config.py +++ b/src/bluesky_queueserver/manager/config.py @@ -474,9 +474,9 @@ def _check_port_value(port, port_name): if port is not None: try: port = int(port) - except ValueError: + except ValueError as ex: _ = port_name.upper() - raise ConfigError(f"Incorrect value for IPython {_} port: {port!r} (must be 'int')") + raise ConfigError(f"Incorrect value for IPython {_} port: {port!r} (must be 'int')") from ex return port self._settings["ipython_shell_port"] = _check_port_value(self._settings["ipython_shell_port"], "shell") diff --git a/src/bluesky_queueserver/manager/conversions.py b/src/bluesky_queueserver/manager/conversions.py index c575baa1..8dca33c6 100644 --- a/src/bluesky_queueserver/manager/conversions.py +++ b/src/bluesky_queueserver/manager/conversions.py @@ -288,7 +288,7 @@ def spreadsheet_to_plan_list(*, spreadsheet_file, file_name, **kwargs): # noqa: keys_kwargs = column_keys[2:] # This could be empty # Check that the columns for kwargs contain no duplicate names - if len(set([_.lower() for _ in keys_kwargs])) != len(keys_kwargs): + if len({[_.lower() for _ in keys_kwargs]}) != len(keys_kwargs): raise ValueError(f"Some plan kwarg names are identical: {keys_kwargs}") # The number of rows (rows are potentially plans, there could be empty rows though) @@ -351,6 +351,6 @@ def _format_row(df, nr): logger.exception("Exception: %s", ex) raise ValueError( f"Error occurred while interpreting plan parameters in row {nr + 1} ({_format_row(df, nr)}): {ex}" - ) + ) from ex return plan_list diff --git a/src/bluesky_queueserver/manager/gen_lists.py b/src/bluesky_queueserver/manager/gen_lists.py index 14512732..94d3f204 100644 --- a/src/bluesky_queueserver/manager/gen_lists.py +++ b/src/bluesky_queueserver/manager/gen_lists.py @@ -347,7 +347,7 @@ def gen_list_of_plans_and_devices( raise Exception(error) except Exception as ex: - raise RuntimeError(f"Failed to create the list of plans and devices:\n\n{str(ex)}") + raise RuntimeError(f"Failed to create the list of plans and devices:\n\n{str(ex)}") from ex def gen_list_of_plans_and_devices_cli(): diff --git a/src/bluesky_queueserver/manager/manager.py b/src/bluesky_queueserver/manager/manager.py index 91751fdb..8c9a6e4a 100644 --- a/src/bluesky_queueserver/manager/manager.py +++ b/src/bluesky_queueserver/manager/manager.py @@ -664,7 +664,7 @@ async def _kill_re_worker_task(self): # This should never fail unless there is a bug in the Manager or Watchdog, # since killing process can be done in any state of the Worker. # TODO: think about handling timeout errors. - for n in range(10): + for _ in range(10): await asyncio.sleep(1) if not await self._watchdog_is_worker_alive(): success = True @@ -1494,7 +1494,7 @@ def _update_allowed_plans_and_devices(self, restore_plans_devices=False): except Exception as ex: raise Exception( f"Error occurred while loading lists of allowed plans and devices from '{path_pd}': {str(ex)}" - ) + ) from ex async def _save_lock_info_to_redis(self): try: diff --git a/src/bluesky_queueserver/manager/plan_queue_ops.py b/src/bluesky_queueserver/manager/plan_queue_ops.py index 57fe8294..5e217b39 100644 --- a/src/bluesky_queueserver/manager/plan_queue_ops.py +++ b/src/bluesky_queueserver/manager/plan_queue_ops.py @@ -1216,7 +1216,7 @@ async def _move_item(self, *, pos=None, uid=None, pos_dest=None, before_uid=None src_by_index = True item_source = await self._get_item(pos=pos) except Exception as ex: - raise IndexError(f"Source plan ({src_txt}) was not found: {str(ex)}.") + raise IndexError(f"Source plan ({src_txt}) was not found: {str(ex)}.") from ex uid_source = item_source["item_uid"] @@ -1251,7 +1251,7 @@ async def _move_item(self, *, pos=None, uid=None, pos_dest=None, before_uid=None before = si > pi except Exception as ex: - raise IndexError(f"Destination plan ({dest_txt}) was not found: {str(ex)}.") + raise IndexError(f"Destination plan ({dest_txt}) was not found: {str(ex)}.") from ex # Copy destination UID from the plan (we need it for the case of if addressing is positional # so we convert it to UID, but we can do it for the case of UID addressing as well) diff --git a/src/bluesky_queueserver/manager/profile_ops.py b/src/bluesky_queueserver/manager/profile_ops.py index c8df3c48..1fa3f1bb 100644 --- a/src/bluesky_queueserver/manager/profile_ops.py +++ b/src/bluesky_queueserver/manager/profile_ops.py @@ -996,8 +996,8 @@ def process_parameter_value(value, pp, objects_in_nspace, group_plans, group_dev # Compare parameters in the signature and in the list of allowed plans. Make sure that the parameters # in the list of allowed plans are a subset of the existing parameters (otherwise the plan can not # be started). This not full validation. - existing_names = set(_.name for _ in signature.parameters.values()) - allowed_names = set(_["name"] for _ in group_plans[plan_name]["parameters"]) + existing_names = {_.name for _ in signature.parameters.values()} + allowed_names = {_["name"] for _ in group_plans[plan_name]["parameters"]} extra_names = allowed_names - existing_names if extra_names: raise RuntimeError(f"Plan description in the list of allowed plans has extra parameters {extra_names}") @@ -1295,8 +1295,10 @@ def _split_name_pattern(name_pattern): raise ValueError(f"Name pattern {name_pattern!r} contains empty components") try: re.compile(c) - except re.error: - raise ValueError(f"Name pattern {name_pattern!r} contains invalid regular expression {c!r}") + except re.error as ex: + raise ValueError( + f"Name pattern {name_pattern!r} contains invalid regular expression {c!r}" + ) from ex components = list(zip(components, components_include, components_full_re, components_depth)) @@ -1905,7 +1907,7 @@ def _convert_str_to_number(value_in): if int(value_out) == value_out: value_out = int(value_out) except Exception as ex: - raise ValueError(f"Failed to interpret the value {value_in!r} as integer or float number: {ex}") + raise ValueError(f"Failed to interpret the value {value_in!r} as integer or float number: {ex}") from ex return value_out @@ -2218,7 +2220,7 @@ def _process_annotation(encoded_annotation, *, ns=None): annotation_type = eval(annotation_type_str, ns, ns) except Exception as ex: - raise TypeError(f"Failed to process annotation '{annotation_type_str}': {ex}'") + raise TypeError(f"Failed to process annotation '{annotation_type_str}': {ex}'") from ex return annotation_type, convert_values, ns @@ -2245,7 +2247,7 @@ def _process_default_value(encoded_default_value): try: p_default = ast.literal_eval(encoded_default_value) except Exception as ex: - raise ValueError(f"Failed to decode the default value '{encoded_default_value}': {ex}") + raise ValueError(f"Failed to decode the default value '{encoded_default_value}': {ex}") from ex return p_default @@ -2340,7 +2342,7 @@ def construct_parameters(param_list, *, params_decoded=None): parameters.append(param) except Exception as ex: - raise ValueError(f"Failed to construct 'inspect.Parameters': {ex}") + raise ValueError(f"Failed to construct 'inspect.Parameters': {ex}") from ex return parameters @@ -2973,9 +2975,9 @@ def convert_annotation_to_string(annotation): else: # Replace each expression with a unique string in the form of '__CALLABLE__' n_patterns = 0 # Number of detected callables - for type_name, type_patterns in type_patterns.items(): + for type_name, type_pattern in type_patterns.items(): while True: - pattern = _get_full_type_name(type_patterns, a_str) + pattern = _get_full_type_name(type_pattern, a_str) if not pattern: break try: @@ -3026,13 +3028,13 @@ def convert_expression_to_string(value, expression_role=None): s_value = f"{value!r}" try: ast.literal_eval(s_value) - except Exception: + except Exception as ex: # If default value can not be accepted, then the plan is considered invalid. # Processing should be interrupted. raise ValueError( f"The expression ({s_value}) can not be evaluated with 'ast.literal_eval()': " f"unsupported type{role_str}." - ) + ) from ex return s_value def assemble_custom_annotation(parameter, *, existing_plans, existing_devices): @@ -3140,7 +3142,7 @@ def assemble_custom_annotation(parameter, *, existing_plans, existing_devices): step = convert_expression_to_string(_, expression_role="step value in decorator") except Exception as ex: - raise ValueError(f"Parameter '{p.name}': {ex}") + raise ValueError(f"Parameter '{p.name}': {ex}") from ex if not desc and use_docstring and (p.name in doc_annotation["parameters"]): desc = doc_annotation["parameters"][p.name].get("description", None) @@ -3162,7 +3164,7 @@ def assemble_custom_annotation(parameter, *, existing_plans, existing_devices): try: default = convert_expression_to_string(p.default, expression_role="default value") except Exception as ex: - raise ValueError(f"Parameter '{p.name}': {ex}") + raise ValueError(f"Parameter '{p.name}': {ex}") from ex if desc: working_dict["description"] = desc @@ -3195,19 +3197,19 @@ def assemble_custom_annotation(parameter, *, existing_plans, existing_devices): vmin = _convert_str_to_number(vmin) working_dict["min"] = f"{vmin}" # Save as a string except Exception as ex: - raise ValueError(f"Failed to process min. value: {ex}") + raise ValueError(f"Failed to process min. value: {ex}") from ex if vmax is not None: try: vmax = _convert_str_to_number(vmax) working_dict["max"] = f"{vmax}" except Exception as ex: - raise ValueError(f"Failed to process max. value: {ex}") + raise ValueError(f"Failed to process max. value: {ex}") from ex if step is not None: try: step = _convert_str_to_number(step) working_dict["step"] = f"{step}" except Exception as ex: - raise ValueError(f"Failed to process step value: {ex}") + raise ValueError(f"Failed to process step value: {ex}") from ex except Exception as ex: raise ValueError(f"Failed to create description of plan '{plan.__name__}': {ex}") from ex @@ -3769,7 +3771,7 @@ def load_user_group_permissions(path_to_file=None): except Exception as ex: msg = f"Error while loading user group permissions from file '{path_to_file}': {str(ex)}" - raise OSError(msg) + raise OSError(msg) from ex return user_group_permissions diff --git a/src/bluesky_queueserver/manager/qserver_cli.py b/src/bluesky_queueserver/manager/qserver_cli.py index 14b078b0..c89f1f79 100644 --- a/src/bluesky_queueserver/manager/qserver_cli.py +++ b/src/bluesky_queueserver/manager/qserver_cli.py @@ -450,8 +450,8 @@ def msg_queue_add_update(params, *, cmd_opt): try: # Convert quoted string to dictionary. plan = ast.literal_eval(p_item[0]) - except Exception: - raise CommandParameterError(f"Error occurred while parsing the plan '{p_item[0]}'") + except Exception as ex: + raise CommandParameterError(f"Error occurred while parsing the plan '{p_item[0]}'") from ex if update_uid: plan["item_uid"] = update_uid plan["item_type"] = "plan" @@ -469,8 +469,8 @@ def msg_queue_add_update(params, *, cmd_opt): # This indicates a bug in the program. raise ValueError(f"Unknown item type: {p_item_type}") - except IndexError: - raise CommandParameterError(f"The command '{params}' contains insufficient number of parameters") + except IndexError as ex: + raise CommandParameterError(f"The command '{params}' contains insufficient number of parameters") from ex option = params[0] if (params[0] != "replace") else "update" method = f"{command}_item_{option}" @@ -524,8 +524,8 @@ def msg_function_execute(params, *, cmd_opt): try: # Convert quoted string to dictionary. item = ast.literal_eval(item_str) - except Exception: - raise CommandParameterError(f"Error occurred while parsing the plan '{item_str}'") + except Exception as ex: + raise CommandParameterError(f"Error occurred while parsing the plan '{item_str}'") from ex item["item_type"] = "function" @@ -542,8 +542,8 @@ def msg_function_execute(params, *, cmd_opt): else: raise CommandParameterError(f"Option '{params[0]}' is not supported: '{command} {params[0]}'") - except IndexError: - raise CommandParameterError(f"The command '{params}' contains insufficient number of parameters") + except IndexError as ex: + raise CommandParameterError(f"The command '{params}' contains insufficient number of parameters") from ex method = f"{command}_{params[0]}" prms = call_params @@ -628,8 +628,8 @@ def msg_queue_item(params, *, lock_key): # This indicates a bug in the program. raise ValueError(f"Unknown item type: {p_item_type}") - except IndexError: - raise CommandParameterError(f"The command '{params}' contain insufficient number of parameters") + except IndexError as ex: + raise CommandParameterError(f"The command '{params}' contain insufficient number of parameters") from ex method = f"{command}_{params[0]}_{params[1]}" prms = addr_param @@ -693,8 +693,8 @@ def msg_queue_mode(params): # This indicates a bug in the program. raise ValueError(f"Unknown item type: {p_item_type}") - except IndexError: - raise CommandParameterError(f"The command '{params}' contain insufficient number of parameters") + except IndexError as ex: + raise CommandParameterError(f"The command '{params}' contain insufficient number of parameters") from ex method = f"{command}_{params[0]}_{params[1]}" prms = cmd_prms @@ -995,7 +995,7 @@ def create_msg(params, *, lock_key): except Exception as ex: raise CommandParameterError( f"Request '{command}': failed to read the user group permissions from file '{file_name}': {ex}" - ) + ) from ex prms["user_group_permissions"] = permissions_dict if lock_key: prms["lock_key"] = lock_key @@ -1016,7 +1016,7 @@ def create_msg(params, *, lock_key): except Exception as ex: raise CommandParameterError( f"Request '{command}': failed to read the script from file '{file_name}': {ex}" - ) + ) from ex run_in_background = False update_re = False @@ -1392,7 +1392,7 @@ def formatter(prog): try: validate_zmq_key(zmq_public_key) except Exception as ex: - raise CommandParameterError(f"ZMQ public key is improperly formatted: {ex}") + raise CommandParameterError(f"ZMQ public key is improperly formatted: {ex}") from ex method, params, monitoring_mode = create_msg(args.command, lock_key=lock_key) if monitoring_mode: @@ -1610,7 +1610,7 @@ def formatter(prog): try: validate_zmq_key(zmq_public_key) except Exception as ex: - raise CommandParameterError(f"ZMQ public key is improperly formatted: {ex}") + raise CommandParameterError(f"ZMQ public key is improperly formatted: {ex}") from ex # Request connection info msg, msg_err = zmq_single_request( diff --git a/src/bluesky_queueserver/manager/tests/common.py b/src/bluesky_queueserver/manager/tests/common.py index d099eb34..b47e3334 100644 --- a/src/bluesky_queueserver/manager/tests/common.py +++ b/src/bluesky_queueserver/manager/tests/common.py @@ -604,8 +604,8 @@ def stop_manager(self, timeout=10, cleanup=True): try: self._p.communicate(timeout=timeout) self._p = None - except subprocess.TimeoutExpired: - raise RuntimeError(f"Timeout occured while waiting for the manager to stop: {msg}") + except subprocess.TimeoutExpired as ex: + raise RuntimeError(f"Timeout occured while waiting for the manager to stop: {msg}") from ex # If at least one of the requests failed and there is an error message, then fail the test if msg: diff --git a/src/bluesky_queueserver/manager/tests/test_annotation_decorator.py b/src/bluesky_queueserver/manager/tests/test_annotation_decorator.py index 5a8396f8..4d3e9e37 100644 --- a/src/bluesky_queueserver/manager/tests/test_annotation_decorator.py +++ b/src/bluesky_queueserver/manager/tests/test_annotation_decorator.py @@ -223,8 +223,7 @@ def test_annotation_dectorator_04(custom_annotation): @parameter_annotation_decorator(custom_annotation) def func(val_arg, *, val_kwarg=10): n_elements = val_arg + val_kwarg - for n in range(n_elements): - yield n + yield from range(n_elements) assert func._custom_parameter_annotation_ == custom_annotation assert list(func(10, val_kwarg=20)) == list(range(30)) @@ -262,8 +261,7 @@ def test_annotation_dectorator_05(custom_annotation): def func(val_arg, *, val_kwarg) -> typing.Iterable[int]: # The following code has no purpose except to see if the generator is still working. added_strings = val_arg + val_kwarg - for n in range(len(added_strings)): - yield n + yield from range(len(added_strings)) assert func._custom_parameter_annotation_ == custom_annotation assert list(func("gridscan", val_kwarg="det2")) == list(range(len("gridscan") + len("det2"))) @@ -318,9 +316,7 @@ def func( val2: typing.Union[int, float] = 6, **kwargs: int, ) -> typing.Generator[str, None, None]: - str_list = ["str1", "str2", "str3"] - for s in str_list: - yield s + yield from ["str1", "str2", "str3"] assert func._custom_parameter_annotation_ == custom_annotation assert list(func("det1", ["det1", "det2"])) == ["str1", "str2", "str3"] @@ -348,9 +344,7 @@ def test_annotation_dectorator_07(custom_annotation): @parameter_annotation_decorator(custom_annotation) def func(): - str_list = ["str1", "str2", "str3"] - for s in str_list: - yield s + yield from ["str1", "str2", "str3"] assert func._custom_parameter_annotation_ == custom_annotation assert list(func()) == ["str1", "str2", "str3"] diff --git a/src/bluesky_queueserver/manager/tests/test_comms.py b/src/bluesky_queueserver/manager/tests/test_comms.py index 3b3a4708..60544e2f 100644 --- a/src/bluesky_queueserver/manager/tests/test_comms.py +++ b/src/bluesky_queueserver/manager/tests/test_comms.py @@ -173,7 +173,7 @@ def method_handler4(self, *, value=4): pc.add_method(some_class.method_handler4, "method4") pc.start() - for n in range(3): + for _ in range(3): value_nonlocal = None request = format_jsonrpc_msg(method, params, notification=notification) @@ -582,7 +582,7 @@ async def send_messages(): p_send = PipeJsonRpcSendAsync(conn=conn1, name="comm-client", use_json=use_json) p_send.start() - for n in range(3): + for _ in range(3): value_nonlocal = None response = await p_send.send_msg(method, params, notification=notification) @@ -628,7 +628,7 @@ async def send_messages(): # Submit multiple messages at once. Messages should stay at the event loop # and be processed one by one. futs = [] - for n in range(5): + for _ in range(5): futs.append(asyncio.ensure_future(p_send.send_msg("method1"))) for n, fut in enumerate(futs): @@ -1156,7 +1156,7 @@ def thread_request(): th_request.join() else: - for n in range(len(vals)): + for _ in range(len(vals)): zmq_comm.send_message(method=method, params=params, cb=cb) while n_done < 2: @@ -1432,7 +1432,7 @@ async def testing(): vals = (10, 20) tasks = [] - for n in range(len(vals)): + for _ in range(len(vals)): tsk = asyncio.ensure_future(zmq_comm.send_message(method=method, params=params)) tasks.append(tsk) diff --git a/src/bluesky_queueserver/manager/tests/test_ip_kernel_func.py b/src/bluesky_queueserver/manager/tests/test_ip_kernel_func.py index a952e953..1dcec70f 100644 --- a/src/bluesky_queueserver/manager/tests/test_ip_kernel_func.py +++ b/src/bluesky_queueserver/manager/tests/test_ip_kernel_func.py @@ -952,7 +952,7 @@ def check_status(ip_kernel_state, ip_kernel_captured): check_status("busy", False) s = check_status("busy", False) - s["manager_state"] == "paused" + assert s["manager_state"] == "paused" assert wait_for_condition(10, condition_ip_kernel_idle) diff --git a/src/bluesky_queueserver/manager/tests/test_plan_queue_ops.py b/src/bluesky_queueserver/manager/tests/test_plan_queue_ops.py index 4d92ecf1..b7837c56 100644 --- a/src/bluesky_queueserver/manager/tests/test_plan_queue_ops.py +++ b/src/bluesky_queueserver/manager/tests/test_plan_queue_ops.py @@ -1092,7 +1092,7 @@ async def testing(): async with PQ() as pq: plans = [{"name": "a", "result": {}}, {"name": "b"}, {"name": "c"}] - for n, plan in enumerate(plans): + for plan in plans: await pq.add_item_to_queue(plan, filter_parameters=False) assert pq.get_queue_size() == 3 diff --git a/src/bluesky_queueserver/manager/tests/test_profile_ops.py b/src/bluesky_queueserver/manager/tests/test_profile_ops.py index 88ee6907..494bc911 100644 --- a/src/bluesky_queueserver/manager/tests/test_profile_ops.py +++ b/src/bluesky_queueserver/manager/tests/test_profile_ops.py @@ -10,7 +10,7 @@ import time as ttime import typing from collections.abc import Callable -from typing import Dict, Optional +from typing import Dict, Optional # noqa: UP035 import bluesky.protocols import ophyd @@ -1933,8 +1933,8 @@ def _pf2f(val1: float = 10.5, val2: str = "some_str", val3: None = None): def _pf2g( val1: tuple[float | int] = (50,), val2: list[str] | str = "some_str", - val3: dict[str, int] = {"ab": 10, "cd": 50}, - val4: dict[str, int] = {"ab": 10, "cd": 50}, + val3: dict[str, int] = {"ab": 10, "cd": 50}, # noqa: B006 + val4: dict[str, int] = {"ab": 10, "cd": 50}, # noqa: B006 val5: float | None = None, ): yield from [val1, val2, val3, val4, val5] @@ -1980,8 +1980,8 @@ def _pf2g( def _pf2g2( val1: typing.Tuple[typing.Union[float, int]] = (50,), val2: typing.Union[typing.List[str], str] = "some_str", - val3: typing.Dict[str, int] = {"ab": 10, "cd": 50}, - val4: Dict[str, int] = {"ab": 10, "cd": 50}, # No module name 'typing' + val3: typing.Dict[str, int] = {"ab": 10, "cd": 50}, # noqa: B006 + val4: Dict[str, int] = {"ab": 10, "cd": 50}, # noqa: B006 No module name 'typing' val5: typing.Optional[float] = None, # typing.Optional[float] == typing.Union[float, NoneType] ): yield from [val1, val2, val3, val4, val5] @@ -2576,7 +2576,7 @@ class _Pf3f_val1: }, } ) -def _pf3f(val1=ophyd.Device(name="some_device")): # Default value has unsupported type +def _pf3f(val1=ophyd.Device(name="some_device")): # noqa: B008 Default value has unsupported type # This test case would fail because the default value has type that is not supported. # Replacing the default value in the signature by a different value in the decorator # allows to use the plan without change. @@ -3307,7 +3307,9 @@ def _pf5a_factory(): class SomeClass: ... - def f(val1, *, val2, val3=SomeClass()): + objSomeClass = SomeClass() + + def f(val1, *, val2, val3=objSomeClass): yield from [val1, val2, val3] return f @@ -3883,7 +3885,7 @@ def test_devices_from_nspace(): pc_path = get_default_startup_dir() nspace = load_profile_collection(pc_path) devices = devices_from_nspace(nspace) - for name, device in devices.items(): + for _, device in devices.items(): assert isinstance( device, (protocols.Readable, protocols.Flyable) ), f"The object '{device}' is not a device" diff --git a/src/bluesky_queueserver/manager/tests/test_qserver_cli.py b/src/bluesky_queueserver/manager/tests/test_qserver_cli.py index 971df159..a4d94f2a 100644 --- a/src/bluesky_queueserver/manager/tests/test_qserver_cli.py +++ b/src/bluesky_queueserver/manager/tests/test_qserver_cli.py @@ -905,7 +905,7 @@ def test_qserver_queue_item_update_1(re_manager, replace, item_type): # noqa F8 assert item_2["item_uid"] != item_1["item_uid"] else: assert item_2["item_uid"] == item_1["item_uid"] - item_2["item_type"] == item_type + assert item_2["item_type"] == item_type # fmt: on @@ -1085,7 +1085,7 @@ def test_qserver_history_clear_1(re_manager, params, n_expected, exit_code): # plan = "{'name': 'count', 'args': [['det1', 'det2']]}" # Add 4 plans to queue - for n in range(4): + for _ in range(4): assert sp_call(["qserver", "queue", "add", "plan", plan]) == SUCCESS assert sp_call(["qserver", "environment", "open"]) == SUCCESS diff --git a/src/bluesky_queueserver/manager/tests/test_start_manager.py b/src/bluesky_queueserver/manager/tests/test_start_manager.py index d0e97dd5..8a227d20 100644 --- a/src/bluesky_queueserver/manager/tests/test_start_manager.py +++ b/src/bluesky_queueserver/manager/tests/test_start_manager.py @@ -48,7 +48,7 @@ def _heartbeat(self): while True: # Since we are emulating 'kill' method, we want the function to # react to 'exit' quickly. - for n in range(n_wait): + for _ in range(n_wait): ttime.sleep(0.005) if self._exit: return diff --git a/src/bluesky_queueserver/manager/tests/test_zmq_api_base.py b/src/bluesky_queueserver/manager/tests/test_zmq_api_base.py index 91b18cbb..9d8f8241 100644 --- a/src/bluesky_queueserver/manager/tests/test_zmq_api_base.py +++ b/src/bluesky_queueserver/manager/tests/test_zmq_api_base.py @@ -484,7 +484,7 @@ def test_zmq_api_history_clear_1(re_manager, params, n_expected, success, err_ms Basic test for ``history_clear`` API. """ # Add 4 plans to queue - for n in range(4): + for _ in range(4): params1a = {"item": _plan1, "user": _user, "user_group": _user_group} resp1a, _ = zmq_request("queue_item_add", params1a) assert resp1a["success"] is True, f"resp={resp1a}" From 82040901323f2cb197ae493ebba5f52374b1ba0c Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Tue, 14 Jul 2026 16:29:29 -0400 Subject: [PATCH 21/31] CI: fix for pre-commit GH action --- .github/workflows/pre-commit.yml | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 67916c49..d2cb62f9 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -12,6 +12,8 @@ jobs: name: Check code style runs-on: ubuntu-latest + env: + python_env: py313 strategy: fail-fast: false defaults: @@ -19,15 +21,21 @@ jobs: shell: bash -l {0} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 + with: + # Need this to get version number from last tag + fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: prefix-dev/setup-pixi@v0.10.0 - name: Install dev dependencies run: | set -vxeuo pipefail - pip install -r requirements-dev.txt - python -m pip list + pixi install --environment=${{ env.python_env }} + pixi list --environment=${{ env.python_env }} + pixi run --environment=${{ env.python_env }} pip list + pixi run --environment=${{ env.python_env }} conda list - name: Run pre-commit - run: pre-commit run --all-files + run: | + pixi run --environment=${{ env.python_env }} pre-commit run --all-files From d19394c9c5c69589efe49c71b530e6886fbc9248 Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Tue, 14 Jul 2026 16:32:05 -0400 Subject: [PATCH 22/31] CI: remove separate black, flake8 and isort workflows --- .github/workflows/black.yml | 21 --------------------- .github/workflows/flake8.yml | 21 --------------------- .github/workflows/isort.yml | 21 --------------------- 3 files changed, 63 deletions(-) delete mode 100644 .github/workflows/black.yml delete mode 100644 .github/workflows/flake8.yml delete mode 100644 .github/workflows/isort.yml diff --git a/.github/workflows/black.yml b/.github/workflows/black.yml deleted file mode 100644 index 79a2faf3..00000000 --- a/.github/workflows/black.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: Check Code Style - BLACK - -on: [push, pull_request] - -jobs: - lint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 - - name: Install Dependencies - run: | - # These packages are installed in the base environment but may be older - # versions. Explicitly upgrade them because they often create - # installation problems if out of date. - python -m pip install --upgrade pip setuptools numpy - - pip install black!=25.11.0 - - name: Run black - run: | - black . --check diff --git a/.github/workflows/flake8.yml b/.github/workflows/flake8.yml deleted file mode 100644 index 7339cce8..00000000 --- a/.github/workflows/flake8.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: Check Code Style - FLAKE8 - -on: [push, pull_request] - -jobs: - lint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 - - name: Install Dependencies - run: | - # These packages are installed in the base environment but may be older - # versions. Explicitly upgrade them because they often create - # installation problems if out of date. - python -m pip install --upgrade pip setuptools numpy - - pip install flake8 - - name: Run flake8 - run: | - flake8 diff --git a/.github/workflows/isort.yml b/.github/workflows/isort.yml deleted file mode 100644 index 53589da7..00000000 --- a/.github/workflows/isort.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: Check Code Style - ISORT - -on: [push, pull_request] - -jobs: - lint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 - - name: Install Dependencies - run: | - # These packages are installed in the base environment but may be older - # versions. Explicitly upgrade them because they often create - # installation problems if out of date. - python -m pip install --upgrade pip setuptools numpy - - pip install isort - - name: Run ISort - run: | - isort . -c From df799b756330c9a85b45a5e8cbe84daad5cf72c3 Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Wed, 15 Jul 2026 09:30:06 -0400 Subject: [PATCH 23/31] CI: change doc building action to use pixi --- .github/workflows/docs.yml | 53 +++++++++++++++++--------------- .github/workflows/pre-commit.yml | 4 +++ 2 files changed, 32 insertions(+), 25 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 13fb7fbe..ed1963d5 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -5,33 +5,36 @@ on: [push, pull_request] jobs: build: + name: Test building docs + runs-on: ubuntu-latest + + env: + python_env: py313 + strategy: - matrix: - python-version: ['3.12'] fail-fast: false steps: - - uses: actions/checkout@v2 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python-version }} - - uses: shogo82148/actions-setup-redis@v1 - with: - redis-version: "7.x" - - name: Install dependencies - run: | - # sudo apt install redis - - # These packages are installed in the base environment but may be older - # versions. Explicitly upgrade them because they often create - # installation problems if out of date. - python -m pip install --upgrade pip setuptools numpy - - pip install . - pip install -r requirements-dev.txt - pip list - - name: Build Docs - run: | - make -C docs/ html + - uses: actions/checkout@v4 + with: + # Need this to get version number from last tag + fetch-depth: 0 + + - uses: shogo82148/actions-setup-redis@v1 + with: + redis-version: "7.x" + + - uses: prefix-dev/setup-pixi@v0.10.0 + + - name: Install dev dependencies + run: | + set -vxeuo pipefail + pixi install --environment=${{ env.python_env }} + pixi list --environment=${{ env.python_env }} + pixi run --environment=${{ env.python_env }} pip list + pixi run --environment=${{ env.python_env }} conda list + + - name: Run pre-commit + run: | + pixi run --environment=${{ env.python_env }} make -C docs/ html diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index d2cb62f9..0d92a4fb 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -11,11 +11,15 @@ jobs: if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.repository name: Check code style + runs-on: ubuntu-latest + env: python_env: py313 + strategy: fail-fast: false + defaults: run: shell: bash -l {0} From 9e39855990c3e63c5b45ed0b86155ec35219b864 Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Wed, 15 Jul 2026 10:15:55 -0400 Subject: [PATCH 24/31] CI: remove unnecessary comprehension --- src/bluesky_queueserver/manager/conversions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bluesky_queueserver/manager/conversions.py b/src/bluesky_queueserver/manager/conversions.py index 8dca33c6..c05ce4df 100644 --- a/src/bluesky_queueserver/manager/conversions.py +++ b/src/bluesky_queueserver/manager/conversions.py @@ -288,7 +288,7 @@ def spreadsheet_to_plan_list(*, spreadsheet_file, file_name, **kwargs): # noqa: keys_kwargs = column_keys[2:] # This could be empty # Check that the columns for kwargs contain no duplicate names - if len({[_.lower() for _ in keys_kwargs]}) != len(keys_kwargs): + if len({_.lower() for _ in keys_kwargs}) != len(keys_kwargs): raise ValueError(f"Some plan kwarg names are identical: {keys_kwargs}") # The number of rows (rows are potentially plans, there could be empty rows though) From 783d9b52e0d430f980ee70dd3c4576bca270dd42 Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Wed, 15 Jul 2026 11:48:37 -0400 Subject: [PATCH 25/31] CI: update path in .test_duration file --- .test_durations | 5774 +++++++++++++++++++++++------------------------ 1 file changed, 2887 insertions(+), 2887 deletions(-) diff --git a/.test_durations b/.test_durations index 843185c5..2d2c37b8 100644 --- a/.test_durations +++ b/.test_durations @@ -1,2889 +1,2889 @@ { - "bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_01[custom_annotation0]": 0.0015799129905644804, - "bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_01[custom_annotation1]": 0.00112624499888625, - "bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_01[custom_annotation2]": 0.0010568610086920671, - "bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_01[custom_annotation3]": 0.0017110979970311746, - "bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_01[custom_annotation4]": 0.0010748390050139278, - "bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_01[custom_annotation5]": 0.0011797890037996694, - "bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_01[custom_annotation6]": 0.001342344010481611, - "bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_01[custom_annotation7]": 0.0014517289964715019, - "bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_01[custom_annotation8]": 0.0012597530003404245, - "bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_01[custom_annotation9]": 0.001052118001098279, - "bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_02[custom_annotation0]": 0.0010919289998128079, - "bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_02[custom_annotation1]": 0.0010084159948746674, - "bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_03[custom_annotation0]": 0.0010284149975632317, - "bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_04[custom_annotation0]": 0.0011841829909826629, - "bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_05[custom_annotation0]": 0.0012543359989649616, - "bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_06[custom_annotation0]": 0.001432384000509046, - "bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_07[custom_annotation0]": 0.0013340309960767627, - "bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_08": 0.0013023669889662415, - "bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_09_fail[custom_annotation0-ValidationError-Additional properties are not allowed \\\\('descriptions' was unexpected\\\\)]": 0.0026082530021085404, - "bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_09_fail[custom_annotation1-ValueError-\\\\['no_such_parameter'] are not in the signature of function]": 0.0012922359965159558, - "bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_09_fail[custom_annotation2-ValidationError-Additional properties are not allowed \\\\('descriptions' was unexpected\\\\)]": 0.0013460410118568689, - "bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_09_fail[custom_annotation3-ValidationError-Additional properties are not allowed \\\\('some_devices' was unexpected\\\\)]": 0.0013291179930092767, - "bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_09_fail[custom_annotation4-ValidationError-\\\\(1, 2, 3\\\\) is not valid]": 0.0015128900049603544, - "bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_09_fail[custom_annotation5-ValidationError-'unsupported_list' is not valid]": 0.0012528549996204674, - "bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_09_fail[custom_annotation6-ValidationError-None is not valid under any of the given schemas]": 0.0013899090045015328, - "bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_09_fail[custom_annotation7-ValidationError-'Plans.' does not match any of the regexes]": 0.0015168370009632781, - "bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_09_fail[custom_annotation8-ValidationError-'abc' is not of type 'boolean']": 0.001246997002454009, - "bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_09_fail[custom_annotation9-ValidationError-10 is not of type 'boolean']": 0.0013889340043533593, - "bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_10": 0.001595806999830529, - "bluesky_queueserver/manager/tests/test_comms.py::test_CommJsonRpcError_1": 0.0004822330010938458, - "bluesky_queueserver/manager/tests/test_comms.py::test_CommJsonRpcError_2": 0.0004320540028857067, - "bluesky_queueserver/manager/tests/test_comms.py::test_CommJsonRpcError_3_fail": 0.0005670569953508675, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_1": 0.15366244499455206, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_1[False]": 0.15462954201211687, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_1[True]": 0.15525165000144625, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method1-params0-5-False-False]": 0.0068002670086571015, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method1-params0-5-False-True]": 0.00583720800204901, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method1-params1-5-True-False]": 1.5063235250054277, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method1-params1-5-True-True]": 1.5068912769929739, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method1-params2-5-False-False]": 0.002804531999572646, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method1-params2-5-False-True]": 0.0019158459908794612, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method1-params2-5-False]": 0.0033445149892941117, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method1-params3-5-True-False]": 1.506401835998986, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method1-params3-5-True-True]": 1.5091721990029328, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method2-params3-15-False]": 0.0035387889947742224, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method2-params4-15-False-False]": 0.0027637059974949807, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method2-params4-15-False-True]": 0.0019075659947702661, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method2-params4-15-False]": 0.003707394003868103, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method2-params5-12-False]": 0.0037921160110272467, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method2-params5-15-False-False]": 0.0017530939949210733, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method2-params5-15-False-True]": 0.002241169997432735, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method2-params6-12-False-False]": 0.0023749009997118264, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method2-params6-12-False-True]": 0.0024862190039129928, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method3-params6-20-False]": 0.003965423995396122, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method3-params7-18-False]": 0.00445795597624965, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method3-params7-20-False-False]": 0.002407707004749682, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method3-params7-20-False-True]": 0.0024751340024522506, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method3-params8-18-False-False]": 0.0024841269914759323, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method3-params8-18-False-True]": 0.002795707005134318, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method4-params10-19-False-False]": 0.002756856003543362, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method4-params10-19-False-True]": 0.0026035629998659715, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method4-params8-20-False]": 0.005946377001237124, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method4-params9-19-False]": 0.004287710995413363, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method4-params9-20-False-False]": 0.0024846320011420175, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method4-params9-20-False-True]": 0.002502174007531721, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method_handler1-params0-5-False]": 0.00898269601748325, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method_handler1-params1-5-True]": 1.5111031259875745, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_3": 0.002329146984266117, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_3[False]": 0.0017731000043568201, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_3[True]": 0.001821343001211062, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_4": 0.002386067993938923, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_4[False]": 0.001697924999461975, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_4[True]": 0.0017730860054143704, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_5[False-False]": 3.0139211950081517, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_5[False-True]": 3.015555748992483, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_5[False]": 3.029591085971333, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_5[True-False]": 4.0163499640111695, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_5[True-True]": 4.014592963001633, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_5[True]": 4.032606415974442, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_6_failing": 0.015415494999615476, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_6_failing[False]": 0.003913455999281723, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_6_failing[True]": 0.004000297994934954, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_7_failing": 0.0024201939813792706, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_7_failing[False]": 0.00282644900289597, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_7_failing[True]": 0.00316453400591854, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_8_failing": 0.5036630599934142, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_8_failing[False]": 0.5036364710031194, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_8_failing[True]": 0.5045884359933552, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_1": 0.1577032110071741, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_1[False]": 0.157216158004303, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_1[True]": 0.1556008820043644, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method1-params0-5-False-False]": 0.013336030999198556, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method1-params0-5-False-True]": 0.013829319999786094, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method1-params1-5-True-False]": 0.011349192005582154, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method1-params1-5-True-True]": 0.010376275000453461, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method1-params2-5-False-False]": 0.013144160999218002, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method1-params2-5-False-True]": 0.013355728995520622, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method1-params2-5-False]": 0.013303578016348183, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method1-params3-5-True-False]": 0.008667301997775212, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method1-params3-5-True-True]": 0.006767266997485422, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method2-params3-15-False]": 0.010199865006143227, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method2-params4-15-False-False]": 0.010131208997336216, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method2-params4-15-False-True]": 0.008551853999961168, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method2-params4-15-False]": 0.00865118094952777, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method2-params5-12-False]": 0.006299029977526516, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method2-params5-15-False-False]": 0.007943282995256595, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method2-params5-15-False-True]": 0.008720804995391518, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method2-params6-12-False-False]": 0.008650494994071778, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method2-params6-12-False-True]": 0.008486826009175275, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method3-params6-20-False]": 0.005908155988436192, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method3-params7-18-False]": 0.005673876032233238, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method3-params7-20-False-False]": 0.009031532994413283, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method3-params7-20-False-True]": 0.009959578994312324, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method3-params8-18-False-False]": 0.008745352002733853, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method3-params8-18-False-True]": 0.008745650004129857, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method4-params10-19-False-False]": 0.008149266999680549, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method4-params10-19-False-True]": 0.00858080800389871, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method4-params8-20-False]": 0.005317406001267955, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method4-params9-19-False]": 0.006375555007252842, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method4-params9-20-False-False]": 0.00827066299825674, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method4-params9-20-False-True]": 0.008170425004209392, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method_handler1-params0-5-False]": 0.01512863498646766, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method_handler1-params1-5-True]": 0.014804735983489081, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_3": 0.5194347169599496, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_3[False]": 0.5160944589952123, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_3[True]": 0.5137368650030112, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_4": 0.5082289070123807, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_4[False]": 0.5076041809952585, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_4[True]": 0.5073813249982777, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_5": 0.908460612030467, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_5[False]": 0.909588969007018, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_5[True]": 0.9097380819948739, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_6": 1.0112721700279508, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_6[False]": 1.0057825059993775, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_6[True]": 1.0102921739962767, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_7_fail": 0.004799662943696603, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_7_fail[False]": 0.008280614994873758, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_7_fail[True]": 0.0033219540055142716, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_8_fail": 0.004276772000594065, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_8_fail[False]": 0.0019442440025159158, - "bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_8_fail[True]": 0.0018329689992242493, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_1[False-json]": 0.002853399004379753, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_1[False-msgpack]": 0.0026741159963421524, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_1[False]": 0.00493315199855715, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_1[True-json]": 0.005048305996751878, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_1[True-msgpack]": 0.005299193995597307, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_1[True]": 0.009447447984712198, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_2[False-json]": 0.004258877001120709, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_2[False-msgpack]": 0.0043780189953395166, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_2[False]": 0.008160306024365127, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_2[True-json]": 0.007311711000511423, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_2[True-msgpack]": 0.006873105012346059, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_2[True]": 0.011948430008487776, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_3[False-json]": 0.11437600100180134, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_3[False-msgpack]": 0.11289445700094802, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_3[False]": 0.1096240869956091, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_3[True-json]": 0.11995824800396804, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_3[True-msgpack]": 0.11946917200111784, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_3[True]": 0.11602173297433183, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False0-False-json]": 3.0118979469989426, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False0-False-msgpack]": 3.011590491005336, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False0-False]": 3.009821865998674, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False0-True-json]": 3.0180821459944127, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False0-True-msgpack]": 3.01865431600163, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False0-True]": 3.0163954540039413, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False1-False-json]": 3.0120977029946516, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False1-False-msgpack]": 3.0116549369995482, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False1-False]": 3.012584300013259, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False1-True-json]": 3.018623115000082, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False1-True-msgpack]": 3.017970789995161, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False1-True]": 3.021654323034454, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False2-False-json]": 3.01178741100739, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False2-False-msgpack]": 3.011895068004378, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False2-False]": 3.0180362880055327, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False2-True-json]": 3.0177082770096604, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False2-True-msgpack]": 3.0086228439977276, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False2-True]": 3.013162191986339, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False3-False-json]": 3.011526323003636, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False3-False-msgpack]": 3.011721392009349, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False3-False]": 3.0122510039946064, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False3-True-json]": 3.017031347997545, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False3-True-msgpack]": 3.0065251710038865, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False3-True]": 3.0193297479709145, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-None-False-json]": 3.0117596710042562, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-None-False-msgpack]": 3.011770801000239, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-None-False]": 3.0155683619959746, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-None-True-json]": 3.019201327006158, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-None-True-msgpack]": 3.0136323220067425, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-None-True]": 3.019196473993361, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-True-False-json]": 3.0113518619909883, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-True-False-msgpack]": 3.011233326004003, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-True-False]": 3.016374664992327, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-True-True-json]": 3.0170446620031726, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-True-True-msgpack]": 3.018773839001369, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-True-True]": 3.014182097016601, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False0-False-json]": 4.019488677004119, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False0-False-msgpack]": 4.014451333998295, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False0-False]": 4.017625209031394, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False0-True-json]": 4.015928351000184, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False0-True-msgpack]": 4.021297790990502, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False0-True]": 4.017379216995323, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False1-False-json]": 4.028230840995093, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False1-False-msgpack]": 4.01758628499374, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False1-False]": 4.0184471019601915, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False1-True-json]": 4.019306344998768, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False1-True-msgpack]": 4.018749454000499, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False1-True]": 4.02089815097861, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False2-False-json]": 4.019647471999633, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False2-False-msgpack]": 4.018740184001217, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False2-False]": 4.014768458029721, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False2-True-json]": 4.016813173999253, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False2-True-msgpack]": 4.0149434539926006, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False2-True]": 4.020471175987041, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False3-False-json]": 4.030507530005707, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False3-False-msgpack]": 4.01766014900204, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False3-False]": 4.02103154399083, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False3-True-json]": 4.018850993998058, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False3-True-msgpack]": 4.0190455640040454, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False3-True]": 4.020539460994769, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-None-False-json]": 4.018692629011639, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-None-False-msgpack]": 4.015719446011644, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-None-False]": 4.021392594993813, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-None-True-json]": 4.017023453998263, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-None-True-msgpack]": 4.019228029996157, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-None-True]": 4.020538920012768, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-True-False-json]": 4.019200428992917, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-True-False-msgpack]": 4.01915560499765, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-True-False]": 4.0231996959482785, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-True-True-json]": 4.019960592995631, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-True-True-msgpack]": 4.019974062000983, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-True-True]": 4.012671511009103, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_5[2000-json]": 3.010863913994399, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_5[2000-msgpack]": 3.010661650005204, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_5[2000]": 3.0100643550395034, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_5[5000-json]": 3.0116577340013464, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_5[5000-msgpack]": 3.0081917169882217, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_5[5000]": 3.012798131967429, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_5[None-json]": 3.00801388900436, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_5[None-msgpack]": 3.0115115200023865, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_5[None]": 3.0070202950155362, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_6_fail": 0.004020145999675151, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_1[False-False-json]": 0.10315505499602295, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_1[False-False-msgpack]": 0.10755849000270246, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_1[False-False]": 0.10528543696273118, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_1[False-True-json]": 0.1081408169993665, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_1[False-True-msgpack]": 0.10769156100286637, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_1[False-True]": 0.10819039100897498, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_1[True-False-json]": 0.0022321469950838946, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_1[True-False-msgpack]": 0.002174651002860628, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_1[True-False]": 0.005178628984140232, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_1[True-True-json]": 0.003534549003234133, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_1[True-True-msgpack]": 0.0032711129897506908, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_1[True-True]": 0.006750562024535611, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_2[False-False-json]": 0.2091619770071702, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_2[False-False-msgpack]": 0.20869893300550757, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_2[False-False]": 0.20929728299961425, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_2[False-True-json]": 0.215820277997409, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_2[False-True-msgpack]": 0.20846258799429052, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_2[False-True]": 0.2094087919977028, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_2[True-False-json]": 0.010022652000770904, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_2[True-False-msgpack]": 0.010935914993751794, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_2[True-False]": 0.0103595299879089, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_2[True-True-json]": 0.01892557300743647, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_2[True-True-msgpack]": 0.01736034000350628, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_2[True-True]": 0.015687253966461867, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_3[False-False-json]": 0.2094800049890182, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_3[False-False-msgpack]": 0.21063690800656332, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_3[False-False]": 0.20909939901321195, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_3[False-True-json]": 0.2173229479958536, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_3[False-True-msgpack]": 0.2092617579983198, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_3[False-True]": 0.21739360599895008, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_3[True-False-json]": 0.11095996799849672, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_3[True-False-msgpack]": 0.11002513999846997, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_3[True-False]": 0.11202814997523092, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_3[True-True-json]": 0.11732139499508776, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_3[True-True-msgpack]": 0.11897039600444259, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_3[True-True]": 0.1152864929754287, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-False-False0-False-json]": 3.0213916190041346, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-False-False0-False-msgpack]": 3.0206303000013577, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-False-False0-False]": 3.0185789249953814, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-False-False0-True-json]": 3.0212068050022935, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-False-False0-True-msgpack]": 3.018457222991856, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-False-False0-True]": 3.118362884997623, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-False-False1-False-json]": 3.0189514020021306, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-False-False1-False-msgpack]": 3.01944613300293, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-False-False1-False]": 3.0164633590029553, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-False-False1-True-json]": 3.0203544489995693, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-False-False1-True-msgpack]": 3.020131263991061, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-False-False1-True]": 3.118463614024222, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-False0-False-json]": 3.006498669994471, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-False0-False-msgpack]": 3.0065142719977302, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-False0-False]": 3.0099229180195834, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-False0-True-json]": 3.0078201460055425, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-False0-True-msgpack]": 3.0081208129995503, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-False0-True]": 3.012101994972909, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-False1-False-json]": 3.007100489005097, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-False1-False-msgpack]": 3.008072004005953, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-False1-False]": 3.009998865047237, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-False1-True-json]": 3.014195515992469, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-False1-True-msgpack]": 3.007829898997443, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-False1-True]": 3.010350743017625, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-None-False-json]": 3.0060035429996788, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-None-False-msgpack]": 3.007130917001632, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-None-False]": 3.0129985850071535, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-None-True-json]": 3.0169205119964317, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-None-True-msgpack]": 3.0179231529982644, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-None-True]": 3.0186283189977985, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-True-False-json]": 3.012595391010109, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-True-False-msgpack]": 3.005264401996101, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-True-False]": 3.011999195005046, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-True-True-json]": 3.014482273996691, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-True-True-msgpack]": 3.015809154996532, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-True-True]": 3.013070633984171, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-False-False0-False-json]": 4.125469140002679, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-False-False0-False-msgpack]": 4.119130936007423, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-False-False0-False]": 4.11456782699679, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-False-False0-True-json]": 4.114891591008927, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-False-False0-True-msgpack]": 4.110111678994144, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-False-False0-True]": 4.114013454993255, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-False-False1-False-json]": 4.113894440997683, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-False-False1-False-msgpack]": 4.117611131005106, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-False-False1-False]": 4.115185909991851, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-False-False1-True-json]": 4.1134762020010385, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-False-False1-True-msgpack]": 4.114923862995056, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-False-False1-True]": 4.111875535018044, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-False0-False-json]": 4.0182708089996595, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-False0-False-msgpack]": 4.011012271999789, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-False0-False]": 4.015332847018726, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-False0-True-json]": 4.015546085000096, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-False0-True-msgpack]": 4.0161562120047165, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-False0-True]": 4.0191445750242565, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-False1-False-json]": 4.009630648004531, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-False1-False-msgpack]": 4.010111568997672, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-False1-False]": 4.016603724012384, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-False1-True-json]": 4.016697588987881, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-False1-True-msgpack]": 4.018724032001046, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-False1-True]": 4.0193982949713245, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-None-False-json]": 4.011450102996605, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-None-False-msgpack]": 4.009864306986856, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-None-False]": 4.016407289978815, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-None-True-json]": 4.019663933999254, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-None-True-msgpack]": 4.017569870004081, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-None-True]": 4.013242430984974, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-True-False-json]": 4.009412993000296, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-True-False-msgpack]": 4.0114887400050065, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-True-False]": 4.014935644023353, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-True-True-json]": 4.01203399500082, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-True-True-msgpack]": 4.029572865998489, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-True-True]": 4.011719375994289, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_5[2000-json]": 3.0068480339905364, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_5[2000-msgpack]": 3.0068700369884027, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_5[2000]": 3.0096338170114905, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_5[5000-json]": 3.009755421000591, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_5[5000-msgpack]": 3.0089279590029037, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_5[5000]": 3.0288285089773126, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_5[None-json]": 3.005746796996391, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_5[None-msgpack]": 3.0137569419966894, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_5[None]": 3.007385092001641, - "bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_6_fail": 0.002301740998518653, - "bluesky_queueserver/manager/tests/test_comms.py::test_generate_zmq_keys": 0.0008825529948808253, - "bluesky_queueserver/manager/tests/test_comms.py::test_process_zmq_encoding_name": 0.0004543559916783124, - "bluesky_queueserver/manager/tests/test_comms.py::test_validate_zmq_key[10]": 0.0005409519944805652, - "bluesky_queueserver/manager/tests/test_comms.py::test_validate_zmq_key[None]": 0.0006340859908959828, - "bluesky_queueserver/manager/tests/test_comms.py::test_validate_zmq_key[]": 0.0006055179983377457, - "bluesky_queueserver/manager/tests/test_comms.py::test_validate_zmq_key[abc]": 0.0005134460006956942, - "bluesky_queueserver/manager/tests/test_comms.py::test_validate_zmq_key[wt8[6a8eoXFRVL]": 7.282676503993571, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_06[:^a.*-':^a.*' Type=]": 7.238643764983863, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_06[a-'a' Type=]": 7.280843951011775, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_06[a-b-c-'a-b-c' Type=]": 7.329867177031701, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_06[abc-'abc' Type=]": 7.308477487997152, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_06[count-Type=]": 7.318189841986168, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_06[det-Type=]": 7.282827032002388, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_06[motor-Type=]": 7.3138399140152615, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_07": 1.0263050680223387, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_08": 0.9650699479971081, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_09[meta_param0-meta_saved0]": 8.625763677991927, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_09[meta_param1-meta_saved1]": 5.924097719980637, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_09[meta_param2-meta_saved2]": 5.945236747997114, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_10_fail": 1.0650767849874683, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params0----True-]": 1.138734730950091, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params1--567-567-True-]": 0.9901597259740811, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params10-1234-567-1234567-True-]": 1.0439091460139025, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params11-1234-567-5671234-True-]": 1.1713598940114025, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params12-1234-567-5671234-True-]": 1.0600155389984138, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params13-1234-567-1567234-True-]": 1.1871573230309878, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params14-1234-567-1256734-True-]": 1.0869601359881926, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params15-1234-567-1567234-True-]": 1.1640060489880852, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params16-1234-567-1256734-True-]": 1.0792283729824703, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params17-1234-567-1234567-True-]": 1.1324646629509516, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params18-1234-567-1234-False-msgs18]": 1.164998623979045, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params19-1234-567-1234-False-msgs19]": 1.09200265299296, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params2--567-567-True-]": 1.0476751329842955, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params20-1234-567-1234-False-msgs20]": 0.9528267020068597, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params21-1234-567-1234-False-msgs21]": 1.0844299850286916, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params3--567-567-True-]": 1.0383773199864663, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params4-1234-567-1234567-True-]": 1.0076910220377613, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params5-1234-567-5671234-True-]": 1.012778121017618, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params6-1234-567-1234567-True-]": 1.0032657670089975, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params7-1234-567-5671234-True-]": 1.2012079719861504, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params8-1234-567-1567234-True-]": 1.2072040239872877, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params9-1234-567-1234567-True-]": 1.2437744129856583, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_2": 1.175292331026867, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_3": 12.437117681984091, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_4_fail": 1.1240009810135234, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_execute_1": 12.742929794971133, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_execute_2": 11.098710835009115, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_execute_3": 11.113338508992456, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_execute_4_fail": 1.1129793920263182, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_1": 1.0634598420001566, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_2[-1-2-True]": 1.2043535640113987, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_2[-100-0-False]": 1.0730070759891532, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_2[-2-1-True]": 1.1522519430145621, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_2[-3-0-True]": 1.2003085280011874, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_2[-4-0-False]": 0.974721238046186, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_2[0-0-True]": 1.1415790699829813, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_2[1-1-True]": 1.158601544011617, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_2[100-None-False]": 1.0508232470310759, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_2[2-2-True]": 1.06944287699298, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_2[3-None-False]": 1.1759902719932143, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_2[None-2-True]": 1.1912428420037031, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_2[back-2-True]": 1.1882249389600474, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_2[front-0-True]": 1.1996870010334533, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_2[some-None-False]": 0.9409215189807583, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_3": 11.143244210979901, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_4_failing": 1.001214747026097, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_update_1[False]": 1.221905253973091, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_update_1[None]": 1.1454568409826607, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_update_1[True]": 1.0776140069938265, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_update_2_fail[False]": 1.1728301850089338, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_update_2_fail[None]": 1.0548191950365435, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_update_2_fail[True]": 1.137323294999078, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_update_3_fail[False]": 1.073536093957955, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_update_3_fail[None]": 1.0333752330043353, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_update_3_fail[True]": 1.0720399240090046, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_update_4_fail": 0.920154081977671, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_mode_set_1": 1.2785138490144163, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_mode_set_2_fail[mode1-Queue mode is passed using object of unsupported type '']": 1.093983656988712, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_mode_set_2_fail[mode2-Unsupported plan queue mode parameter 'unsupported_key']": 1.013083178026136, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_mode_set_2_fail[mode3-Unsupported type '' of the parameter 'loop']": 1.0867087949882261, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_mode_set_2_fail[mode4-Unsupported type '' of the parameter 'ignore_failures']": 1.1234452510252595, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_mode_set_2_fail[unknown_str-Queue mode is passed using object of unsupported type '']": 1.0897014100046363, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_mode_set_3_loop_mode": 10.389679617015645, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_mode_set_4_ignore_failures": 13.89085125096608, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_1[False-None-0]": 11.23057640902698, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_1[False-deferred-0]": 11.875960825011134, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_1[False-immediate-0]": 13.213596440997208, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_1[True-deferred-0]": 16.673104711982887, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_1[True-deferred-3.0]": 19.13147649797611, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_1[True-immediate-0]": 20.876736107020406, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_1[True-immediate-3.0]": 23.91146595097962, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_2[1-False-0]": 12.240637526992941, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_2[1-True-0]": 18.207886733027408, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_2[1-True-3.0]": 21.26618756199605, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_2[2-False-0]": 19.062923672026955, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_2[2-True-0]": 24.95966135596973, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_2[2-True-3.0]": 28.436991726979613, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_3[False-re_abort]": 11.622391206969041, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_3[False-re_halt]": 11.743934050027747, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_3[False-re_resume]": 18.922857940022368, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_3[False-re_stop]": 11.548001480026869, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_3[True-re_abort]": 11.497286946017994, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_3[True-re_halt]": 11.61302947299555, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_3[True-re_resume]": 12.653663225966739, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_3[True-re_stop]": 11.735043124994263, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_runs_1[False]": 22.7380453980295, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_runs_1[True]": 22.57539630003157, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_01[False-False]": 6.724697175988695, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_01[False-None]": 7.134129446989391, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_01[False-True]": 6.648559986992041, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_01[None-False]": 8.913014454010408, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_01[None-None]": 9.524325722974027, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_01[None-True]": 9.034558419021778, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_01[True-False]": 9.006208860024344, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_01[True-None]": 9.456871732953005, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_01[True-True]": 8.419825507007772, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_02[scripts0-updated_devs0-updated_plans0]": 5.730813141010003, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_02[scripts1-updated_devs1-updated_plans1]": 5.737672070972621, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_02[scripts2-updated_devs2-updated_plans2]": 6.668052388966316, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_03[False]": 7.347334020014387, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_03[True]": 7.27636051501031, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_04": 6.449970555986511, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_05[False]": 6.233527497010073, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_05[True]": 5.656035127991345, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_06": 8.466842197987717, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_07[ip-dir]": 5.708938636031235, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_07[module]": 5.614821519004181, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_07[profile]": 5.634695576009108, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_07[script]": 5.665458050032612, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_07[startup-dir]": 5.281517877010629, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[False-False-False-False]": 8.264756884978851, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[False-False-False-True]": 8.164218754012836, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[False-False-True-False]": 8.700651753024431, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[False-False-True-True]": 8.221194169018418, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[False-True-False-False]": 8.24445923397434, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[False-True-False-True]": 8.245755315001588, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[False-True-True-False]": 8.056176568003139, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[False-True-True-True]": 8.26918209399446, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[True-False-False-False]": 8.21190607798053, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[True-False-False-True]": 8.631757622002624, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[True-False-True-False]": 8.133470824017422, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[True-False-True-True]": 8.20176496799104, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[True-True-False-False]": 8.257303490012418, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[True-True-False-True]": 8.2321598919807, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[True-True-True-False]": 8.2580898499873, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[True-True-True-True]": 8.270492826035479, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_09": 9.168786376976641, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_10_fail": 1.0519044899847358, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_11_fail[False]": 9.59761848000926, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_11_fail[True]": 11.791831048991298, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_task_status_1": 7.1588229819899425, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_task_status_2": 1.002723198995227, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_task_status_3_fail[params0-Required 'task_uid' parameter is missing in the API call]": 1.0477568899805192, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_task_status_3_fail[params1-API request contains unsupported parameters: 'some_param']": 0.9836316730070394, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_task_status_3_fail[params2-'task_uid' must be a string or a list of strings]": 0.9774309849890415, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_task_status_3_fail[params3-API request contains unsupported parameters: 'some_param']": 0.9561252879793756, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_thread_based": 9.077404906973243, - "bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_unsupported_parameters": 1.2429159249877557, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_invalid_requests_1": 0.7804214929929003, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_manager_kill_1": 16.89220304600167, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_permissions_reload_1[False]": 1.2215295659916592, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_permissions_reload_1[True]": 1.2936581329995533, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_permissions_reload_2[False]": 0.8199286310045864, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_permissions_reload_2[None]": 0.8507879490061896, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_permissions_reload_2[True]": 0.8077889910055092, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_permissions_reload_3[False]": 5.463070302001142, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_permissions_reload_3[True]": 5.302768096000364, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_permissions_set_get_1[False]": 0.8447475770008168, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_permissions_set_get_1[True]": 8.77967591399647, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_permissions_set_get_2": 0.7405828640039545, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_permissions_set_get_3_fail[params0-API request contains unsupported parameters: 'unsupported_param']": 0.6645012429944472, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_permissions_set_get_3_fail[params1-Parameter 'user_group_permissions' is missing]": 0.7019874559991877, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_permissions_set_get_3_fail[params2-'user_groups' is a required property]": 0.6676050789974397, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_permissions_set_get_3_fail[params3-Missing required user group: 'root']": 0.7827136100022472, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_asyncio_based": 9.05896139399556, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_config_get_01": 3.751339110000117, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_environment_destroy_01[False-0.1]": 7.945759280002676, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_environment_destroy_01[False-0]": 7.896441101998789, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_environment_destroy_01[True-0]": 4.641100701010146, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_environment_destroy_02": 17.123606181994546, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_environment_destroy_03_fail": 0.695629777997965, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_environment_open_close_1": 4.357178168007522, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_environment_open_close_2": 4.411748268990777, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_environment_open_close_3": 10.43656071100122, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_environment_open_close_4[False]": 4.169473573994765, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_environment_open_close_4[True]": 17.31213386100717, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_environment_update_01[False]": 6.337221332993067, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_environment_update_01[True]": 6.323712064993742, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_environment_update_02": 10.430887292000989, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_1[False-False-False]": 6.451466063015687, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_1[False-False-True]": 6.2108409449938335, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_1[False-True-False]": 5.416407444005017, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_1[True-False-False]": 6.486025264988712, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_1[True-False-True]": 5.625370262008801, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_1[True-True-False]": 5.875591324002016, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_2[False-standalone]": 6.377461424992362, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_2[True-standalone]": 5.410809548004181, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_2[True-with_function]": 9.124756623001304, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_2[True-with_plan]": 10.143543446007243, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_3[False]": 6.7352330180074205, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_3[True]": 10.194982191002055, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_4": 6.35083846100315, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_5[\\ndef func_elements():\\n raise Exception(f\"-- Exception was raised!!! --\")\\n-args8-None-True-False-msgs8]": 5.94016312599706, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_5[\\ndef func_elements(val):\\n return val\\n-args0-10-True-True-msgs0]": 5.902725350002584, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_5[\\ndef func_elements(val):\\n return val\\n-args1-test-True-True-msgs1]": 5.451305416994728, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_5[\\ndef func_elements(val):\\n return val\\n-args2-return_value2-True-True-msgs2]": 5.871468860001187, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_5[\\ndef func_elements(val):\\n return val\\n-args3-return_value3-True-True-msgs3]": 5.430680318997474, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_5[\\ndef func_elements(val):\\n return val\\n-args4-return_value4-True-True-msgs4]": 5.874799110999447, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_5[\\ndef func_elements(val):\\n return val\\n-args5-None-True-True-msgs5]": 5.22089697499905, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_5[\\ndef func_elements(val):\\n return val\\n-args6-None-False-None-msgs6]": 5.391052777995355, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_5[\\nimport numpy as np\\n\\ndef func_elements():\\n return np.array([1,2,3])\\n-args7-None-True-False-msgs7]": 5.365324011007033, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_6": 4.284410401996865, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_7_fail[args_not_list-function-Parameter 'args' is not a tuple or a list]": 4.367190265002137, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_7_fail[kwargs_not_dict-function-Parameter 'kwargs' is not a dictionary]": 4.325356802997703, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_7_fail[missing_group-function-user group is not specified]": 4.384352126005979, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_7_fail[missing_name-function-Function name is not specified]": 4.78630610799155, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_7_fail[missing_user-function-user name is not specified]": 4.416034579997358, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_7_fail[not_allowed_name-function-Function 'not_allowed' is not allowed]": 4.451224636984989, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_7_fail[unknown_group-function-Unknown user group: 'unknown_group']": 4.377953210991109, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_7_fail[unsupported_type-instruction-unsupported 'item_type' value: 'instruction']": 3.7579368719962076, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_7_fail[unsupported_type-plan-unsupported 'item_type' value: 'plan']": 3.744533858996874, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_7_fail[unsupported_type-unsupported-unsupported 'item_type' value: 'unsupported']": 4.345972374998382, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_8_fail": 4.8962893909993, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params0-1-order0-True-]": 0.8858443770004669, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params1-1-order1-True-]": 1.0602486630014027, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params10-1-order10-True-]": 0.8756564739960595, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params11-1-order11-True-]": 0.8653645220038015, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params12-1-order12-True-]": 0.8828433230009978, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params13-0-order13-True-]": 0.9445635750016663, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params14-2-order14-True-]": 1.0121950749962707, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params15-0-order15-True-]": 0.8783586800054763, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params16-0-order16-True-]": 1.0780520909975166, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params17-2-order17-True-]": 1.0913049439986935, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params18-2-order18-True-]": 0.9324902279913658, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params19-0-order19-True-]": 1.0617405919983867, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params2-1-order2-True-]": 1.1073956490072305, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params20-0-order20-True-]": 0.918821391001984, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params21-2-order21-True-]": 1.058850226996583, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params22-2-order22-True-]": 1.029866231008782, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params23-2-order23-False-Source plan (position 50) was not found]": 1.0238762290027807, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params24-2-order24-False-Source plan (UID 'nonexistent') was not found]": 0.8902957350001088, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params25-2-order25-False-Destination plan (position 50) was not found]": 1.0030977670030552, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params26-2-order26-False-Destination plan (UID 'nonexistent') was not found]": 1.040153679998184, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params27-2-order27-False-Destination plan (UID 'nonexistent') was not found]": 0.9788776509958552, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params28-2-order28-False-Source position or UID is not specified]": 0.8741155059906305, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params29-2-order29-False-Destination position or UID is not specified]": 0.9749436630008859, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params3-0-order3-True-]": 1.100325007995707, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params30-2-order30-False-Ambiguous parameters]": 0.9330245739984093, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params31-2-order31-False-Ambiguous parameters]": 1.034478212997783, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params32-2-order32-False-Ambiguous parameters]": 0.9134244770029909, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params4-2-order4-True-]": 0.9435926710066269, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params5-0-order5-True-]": 1.0129572320001898, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params6-2-order6-True-]": 0.9611718199957977, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params7-1-order7-True-]": 0.9205287860022509, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params8-1-order8-True-]": 0.8924983809993137, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params9-1-order9-True-]": 1.0048996429977706, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params0-0123456-23-23-2301456-True-]": 1.0513350580076803, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params1-0123456-23-23-2301456-True-]": 1.0681061409923132, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params10-0123456-023-023-1450236-True-]": 1.060749334996217, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params11-0123456-203-023-1450236-True-]": 1.0278238669925486, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params12-0123456-302-023-1450236-True-]": 1.0059489560007933, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params13-0123456---0123456-True-]": 0.9345211090039811, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params14-----True-]": 0.8965345300020999, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params15-0123456-01-01-0123456-True-]": 1.0259999400004745, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params16-0123456-56-56-0123456-True-]": 1.100571281996963, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params17-0123456-10-10-1023456-True-]": 1.0559303690024535, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params18-0123456-65-65-0123465-True-]": 1.1584289980091853, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params19-0123456-23-23-0123456-False-Destination for the batch is not specified]": 1.0318290639988845, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params2-0123456-23-23-0145623-True-]": 1.051471147009579, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params20-0123456-23-23-0123456-False-more than one mutually exclusive parameter]": 0.9556444089976139, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params21-0123456-023-023-0123456-False-item with UID '.*' is in the batch]": 1.05433673299558, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params22-0123456-023-023-0123456-False-item with UID '.*' is in the batch]": 1.0022515629971167, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params23-0123456-093-093-0123456-False-The\\\\ queue\\\\ does\\\\ not\\\\ contain\\\\ items\\\\ with\\\\ the\\\\ following\\\\ UIDs:\\\\ \\\\['9'\\\\]]": 1.0138708759986912, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params24-0123456-07893-07893-0123456-False-The\\\\ queue\\\\ does\\\\ not\\\\ contain\\\\ items\\\\ with\\\\ the\\\\ following\\\\ UIDs:\\\\ \\\\['7',\\\\ '8',\\\\ '9'\\\\]]": 0.901575945004879, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params25-0123456-0223-0223-0123456-False-The\\\\ list\\\\ of\\\\ contains\\\\ repeated\\\\ UIDs\\\\ \\\\(1\\\\ UIDs\\\\)]": 1.1081623439968098, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params3-0123456-23-23-0145623-True-]": 0.9742724529933184, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params4-0123456-23-23-0142356-True-]": 1.1434609009884298, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params5-0123456-23-23-0145236-True-]": 1.1003574790011044, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params6-0123456-023-023-1450236-True-]": 0.9645131409924943, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params7-0123456-203-203-1452036-True-]": 1.0498006620036904, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params8-0123456-302-302-1453026-True-]": 0.9803982500015991, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params9-0123456-302-302-1453026-True-]": 1.035066740005277, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_2_fail": 0.662282878998667, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params0-0123456---0123456-True-]": 1.0505948329955572, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params1-0123456-23-23-01456-True-]": 0.887189840002975, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params10-0123456-283--0123456-False-The queue does not contain items with the following UIDs]": 0.8938493289970211, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params11-0123456-2883--0123456-False-The list of contains repeated UIDs]": 1.0522336220019497, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params12-0123456---0123456-True-]": 1.0668787690010504, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params13-----True-]": 0.6234375750063919, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params14--23---True-]": 0.6413061119965278, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params15-----True-]": 0.8377456340022036, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params16--23---False-The queue does not contain items with the following UIDs]": 0.8556958810004289, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params2-0123456-32-32-01456-True-]": 1.073857276009221, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params3-0123456-06-06-12345-True-]": 0.9006121749989688, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params4-0123456-283-23-01456-True-]": 1.0256537469977047, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params5-0123456-2893-23-01456-True-]": 1.012729105001199, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params6-0123456-2443-243-0156-True-]": 0.9620584000003873, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params7-0123456-2443-243-0156-True-]": 0.9865349079991574, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params8-0123456-283-23-01456-True-]": 0.8991613300022436, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params9-0123456-2443--0123456-False-The list of contains repeated UIDs]": 0.9998880369967083, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_2_fail": 0.836650509001629, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_1[False]": 0.9393304339973838, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_1[True]": 0.7523646199988434, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_2[False-False]": 0.842954251995252, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_2[False-True]": 0.8046444019928458, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_2[True-False]": 0.8092215520009631, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_2[True-True]": 0.7355345700052567, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_3[None-lock_options0]": 0.8185591929941438, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_3[None-lock_options1]": 0.6155484120026813, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_3[None-lock_options2]": 0.7842614490073174, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_3[kill-lock_options0]": 9.152287379001791, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_3[kill-lock_options1]": 9.10064264000539, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_3[kill-lock_options2]": 9.071298424998531, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_3[restart-lock_options0]": 1.2665374570060521, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_3[restart-lock_options1]": 1.2598712370017893, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_3[restart-lock_options2]": 1.5174072540030465, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_4_fail[params0-False-environment and/or queue must be selected]": 0.7664046959980624, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_4_fail[params1-False-environment and/or queue must be selected]": 0.6318282110005384, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_4_fail[params10-False-Note must be a string or None]": 0.7584418219994404, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_4_fail[params2-False-User name is not specified]": 0.6646544249961153, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_4_fail[params3-False-User name must be a non-empty string]": 0.8215885320023517, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_4_fail[params4-False-User name must be a non-empty string]": 0.8419389329937985, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_4_fail[params5-False-Lock key is not specified]": 0.750106434992631, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_4_fail[params6-False-Lock key must be a non-empty string]": 0.6555324889995973, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_4_fail[params7-False-Lock key must be a non-empty string]": 0.6628236339965952, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_4_fail[params8-True-]": 0.7604654490060057, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_4_fail[params9-True-]": 0.7918524349952349, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_5_fail[params0-False-Request contains no lock key]": 0.6629928389957058, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_5_fail[params1-False-Lock key must be a non-empty string]": 0.8205637700011721, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_5_fail[params2-True-]": 0.7951991660011117, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_6[lock_options0-False-False]": 0.9610007169976598, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_6[lock_options0-False-True]": 1.0980003049990046, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_6[lock_options1-False-False]": 0.9614761129996623, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_6[lock_options1-False-True]": 0.9556857989955461, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_6[lock_options2-True-False]": 0.9826414030030719, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_6[lock_options2-True-True]": 1.0242834419987048, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_6[lock_options3-True-False]": 1.0800594500033185, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_6[lock_options3-True-True]": 1.0786079359968426, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_7[lock_options0-False-False]": 33.058725256996695, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_7[lock_options0-False-True]": 33.12433074801811, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_7[lock_options1-False-False]": 32.69143233400246, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_7[lock_options1-False-True]": 32.13811138700112, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_7[lock_options2-True-False]": 11.161049749993253, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_7[lock_options2-True-True]": 32.64018116000807, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_7[lock_options3-True-False]": 11.115314816001046, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_7[lock_options3-True-True]": 32.720682886996656, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_ping_status_01[ping]": 0.8275907230054145, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_ping_status_01[status]": 0.7516270849882858, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_ping_status_02[ping]": 0.700910068997473, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_ping_status_02[status]": 0.6115705789998174, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_plans_allowed_and_devices_allowed_1": 0.8053933280098136, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_plans_allowed_and_devices_allowed_2": 1.0235557010091725, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_plans_allowed_and_devices_allowed_3_fail[params0-user group is not specified]": 0.6276907179999398, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_plans_allowed_and_devices_allowed_3_fail[params1-Unknown user group: 'no_such_group']": 0.7409411919943523, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_plans_existing_and_devices_existing_1": 0.8854672129964456, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_plans_existing_and_devices_existing_2_fail": 0.7830611189929186, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_01": 0.7486810080008581, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_02_fail": 0.8128468450013315, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_03[False-False-False]": 10.236655056003656, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_03[False-False-True]": 10.112557927997841, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_03[False-True-False]": 10.272746903996449, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_03[False-True-True]": 10.802772764007386, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_03[True-False-False]": 10.183929894999892, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_03[True-False-True]": 10.781290385995817, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_03[True-True-False]": 10.13632579499972, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_03[True-True-True]": 10.242159875997459, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_04": 15.675769635003235, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_05[False-abort]": 9.416529323003488, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_05[False-halt]": 9.397500912004034, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_05[False-resume]": 13.617823429995042, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_05[False-stop]": 10.48296343999391, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_05[True-abort]": 9.321804090002843, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_05[True-halt]": 9.348076271002355, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_05[True-resume]": 13.476366296003107, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_05[True-stop]": 10.56923035899672, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_06[abort]": 13.071373967010004, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_06[disable_autostart]": 13.751530621004349, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_06[failed_plan]": 9.601552467007423, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_06[halt]": 11.934619107007165, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_06[normal]": 20.416376082997886, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_06[resume]": 20.184038858002168, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_06[stop]": 11.979216439001902, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_06[stop_queue]": 13.697715741000138, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_06[stop_queue_2_plans]": 14.356673392998346, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_07[immediate_plan]": 23.1310420620066, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_07[script_function]": 18.17351690599753, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[1-False-complete_during_restart-False]": 23.107739465987834, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[1-False-complete_during_restart-True]": 23.184123699997144, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[1-False-restart_middle-False]": 17.180650848997175, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[1-False-restart_middle-True]": 18.09647276999749, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[1-True-complete_during_restart-False]": 22.616009509001742, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[1-True-complete_during_restart-True]": 22.614916581005673, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[1-True-restart_middle-False]": 17.20096534300683, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[1-True-restart_middle-True]": 17.285821953992127, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[2-False-complete_during_restart-False]": 22.700324752004235, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[2-False-complete_during_restart-True]": 23.505564415012486, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[2-False-restart_middle-False]": 17.18406121199223, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[2-False-restart_middle-True]": 19.1181380380076, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[2-True-complete_during_restart-False]": 22.775784754994675, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[2-True-complete_during_restart-True]": 22.7817249610016, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[2-True-restart_middle-False]": 17.80799752999883, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[2-True-restart_middle-True]": 17.848521970990987, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_09[False]": 7.539404152994393, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_09[True]": 6.624883787997533, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_10": 11.231935955001973, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_01": 1.068828288000077, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_02[-1-2-True]": 0.8875892510041012, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_02[-100-0-True]": 1.038728286002879, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_02[-2-1-True]": 0.9771240649934043, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_02[-3-0-True]": 0.9556032969994703, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_02[-4-0-True]": 0.8851876469998388, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_02[0-0-True]": 1.061920733001898, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_02[1-1-True]": 0.9997320800102898, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_02[100-2-True]": 0.8753136719969916, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_02[2-2-True]": 0.8703335889949813, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_02[3-2-True]": 0.9171662600056152, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_02[None-2-True]": 0.8787666399948648, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_02[back-2-True]": 1.03143973499391, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_02[front-0-True]": 0.968408527005522, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_02[some-None-False]": 0.9429414550031652, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_03": 1.0858340259947, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_04": 21.620274404005613, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_05[plan_to_add0-primary-True-True-]": 6.279676274003577, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_05[plan_to_add1-primary-True-True-]": 6.796337659005076, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_05[plan_to_add10-test_user-False-False-Failed to add an item: Plan validation failed]": 0.8744353659931221, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_05[plan_to_add11-test_user-False-False-Failed to add an item: Plan validation failed]": 0.9761080960015533, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_05[plan_to_add2-primary-True-True-]": 6.769585745991208, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_05[plan_to_add3-test_user-True-False-]": 5.231061020997004, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_05[plan_to_add4-test_user-True-False-]": 5.703747350999038, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_05[plan_to_add5-test_user-True-False-]": 5.747851176995027, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_05[plan_to_add6-primary-True-True-]": 6.300382738001645, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_05[plan_to_add7-primary-True-True-]": 6.233886914000323, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_05[plan_to_add8-test_user-True-True-]": 6.396272445992508, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_05[plan_to_add9-test_user-False-False-Failed to add an item: Plan validation failed]": 1.0355755800046609, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_06[50-50 Type=]": 5.970672095005284, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_06[:^a.*-':^a.*' Type=]": 6.543524791995878, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_06[a-'a' Type=]": 6.420055570997647, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_06[a-b-c-'a-b-c' Type=]": 6.5564050739994855, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_06[abc-'abc' Type=]": 5.916301297998871, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_06[count-Type=]": 6.528183312999317, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_06[det-Type=]": 6.557349991002411, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_06[motor-Type=]": 6.481748617996345, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_07": 0.9634879150034976, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_08": 0.9352618850025465, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_09[meta_param0-meta_saved0]": 7.485630344999663, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_09[meta_param1-meta_saved1]": 7.391541316996154, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_09[meta_param2-meta_saved2]": 7.835062801997992, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_10[custom_count2]": 12.513904601997638, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_10[custom_count]": 12.42312386699632, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_11_fail": 1.0404728400026215, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params0----True-]": 0.9055873699981021, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params1--567-567-True-]": 0.9732893300024443, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params10-1234-567-1234567-True-]": 1.1109506319990032, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params11-1234-567-5671234-True-]": 0.9006512210034998, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params12-1234-567-5671234-True-]": 0.888171760008845, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params13-1234-567-1567234-True-]": 0.9839344630017877, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params14-1234-567-1256734-True-]": 0.9480125859990949, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params15-1234-567-1567234-True-]": 0.8981523309994373, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params16-1234-567-1256734-True-]": 0.8928736980087706, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params17-1234-567-1234567-True-]": 1.0202044420002494, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params18-1234-567-1234-False-msgs18]": 0.9037543090016698, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params19-1234-567-1234-False-msgs19]": 0.9846976230037399, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params2--567-567-True-]": 0.8983833090023836, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params20-1234-567-1234-False-msgs20]": 1.0523346410045633, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params21-1234-567-1234-False-msgs21]": 1.0649044700039667, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params3--567-567-True-]": 0.8954753029975109, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params4-1234-567-1234567-True-]": 0.8974932530109072, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params5-1234-567-5671234-True-]": 1.001890553998237, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params6-1234-567-1234567-True-]": 0.9523849450051785, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params7-1234-567-5671234-True-]": 0.8870801230004872, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params8-1234-567-1567234-True-]": 0.9865676899935352, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params9-1234-567-1234567-True-]": 1.0252225789954537, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_2": 1.152941992993874, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_3": 11.69170825900801, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_4_fail": 0.9611505860011675, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_execute_1": 11.910085873001663, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_execute_2": 10.40355422400171, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_execute_3": 10.369342655001674, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_execute_4_fail": 0.8604273430028115, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_execute_5_fail": 4.056161894004617, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_1": 0.9653805099951569, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_2[-1-2-True]": 0.9751093240047339, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_2[-100-0-False]": 1.0472546389937634, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_2[-2-1-True]": 1.044242490992474, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_2[-3-0-True]": 1.0192911550038843, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_2[-4-0-False]": 1.0433507490015472, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_2[0-0-True]": 0.9752170270076022, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_2[1-1-True]": 0.9527962930005742, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_2[100-None-False]": 1.0605942259935546, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_2[2-2-True]": 1.0650146859989036, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_2[3-None-False]": 1.0488526169938268, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_2[None-2-True]": 1.0854617719960515, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_2[back-2-True]": 1.0336325370080885, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_2[front-0-True]": 1.0906827850049012, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_2[some-None-False]": 0.8903431900034775, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_3": 10.422504365007626, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_4_failing": 0.7929702809997252, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_update_1[False]": 0.8739552810075111, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_update_1[None]": 1.0133809679973638, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_update_1[True]": 0.8771253710001474, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_update_2_fail[False]": 1.0033661299967207, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_update_2_fail[None]": 0.9888855419994798, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_update_2_fail[True]": 0.9717966910029645, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_update_3_fail[False]": 1.0389868210040731, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_update_3_fail[None]": 0.8681444980029482, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_update_3_fail[True]": 1.0325632710009813, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_update_4_fail": 0.9836105679933098, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_mode_set_1": 0.8414700479988824, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_mode_set_2_fail[mode1-Queue mode is passed using object of unsupported type '']": 0.6194894729997031, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_mode_set_2_fail[mode2-Unsupported plan queue mode parameter 'unsupported_key']": 0.7888827709903126, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_mode_set_2_fail[mode3-Unsupported type '' of the parameter 'loop']": 0.6148101870057872, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_mode_set_2_fail[mode4-Unsupported type '' of the parameter 'ignore_failures']": 0.8191480369932833, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_mode_set_2_fail[unknown_str-Queue mode is passed using object of unsupported type '']": 0.7591376959971967, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_mode_set_3_loop_mode": 10.361345442004676, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_mode_set_4_ignore_failures": 13.253860020005959, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_1[False-None-0]": 11.497145157001796, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_1[False-deferred-0]": 11.537686573996325, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_1[False-immediate-0]": 13.760843771997315, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_1[True-deferred-0]": 16.987443737998547, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_1[True-deferred-3.0]": 19.510560938004346, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_1[True-immediate-0]": 20.639465655003733, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_1[True-immediate-3.0]": 23.67674386100407, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_2[1-False-0]": 12.535799268996925, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_2[1-True-0]": 18.551431863008474, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_2[1-True-3.0]": 21.180969721994188, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_2[2-False-0]": 18.728261008996924, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_2[2-True-0]": 24.756015856000886, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_2[2-True-3.0]": 27.788981311001407, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_3[False-re_abort]": 12.113959764006722, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_3[False-re_halt]": 12.698159195999324, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_3[False-re_resume]": 18.68293548499787, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_3[False-re_stop]": 11.534999312993023, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_3[True-re_abort]": 11.382086284000252, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_3[True-re_halt]": 11.49302731599164, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_3[True-re_resume]": 12.052039496004, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_3[True-re_stop]": 11.583661642005609, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_4_fail": 4.360556155996164, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_runs_1[False]": 22.06092553900089, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_runs_1[True]": 22.0650893359998, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_01[False-False]": 5.687677936999535, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_01[False-None]": 5.809690649002732, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_01[False-True]": 5.858007725008065, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_01[None-False]": 8.760624415997881, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_01[None-None]": 9.294939612002054, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_01[None-True]": 8.726653195997642, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_01[True-False]": 8.04515817300853, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_01[True-None]": 8.69826295600069, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_01[True-True]": 8.719337253001868, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_02[scripts0-updated_devs0-updated_plans0]": 5.39900062000379, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_02[scripts1-updated_devs1-updated_plans1]": 5.389425257992116, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_02[scripts2-updated_devs2-updated_plans2]": 6.399220706000051, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_03[False]": 7.429636800006847, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_03[True]": 6.57427804699546, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_04": 6.147938388006878, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_05[False]": 5.4286349910034915, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_05[True]": 5.312775328005955, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_06": 9.991147304004699, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_07[ip-dir]": 4.842269758992188, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_07[module]": 4.34403968200786, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_07[profile]": 4.771471324995218, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_07[script]": 4.779814445995726, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_07[startup-dir]": 4.84603720499581, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_08[False-False-False]": 7.389582553005312, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_08[False-False-True]": 7.368258884009265, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_08[False-True-False]": 7.454895028007741, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_08[False-True-True]": 7.270269530003134, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_08[True-False-False]": 7.361493883006915, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_08[True-False-True]": 6.81504235000466, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_08[True-True-False]": 7.371952604997205, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_08[True-True-True]": 7.4158109329946456, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_09": 9.484334142005537, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_10_fail": 0.7753234850024455, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_11_fail[False]": 9.300298191003094, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_11_fail[True]": 11.474189324006147, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_task_status_1": 6.833815040998161, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_task_status_2": 0.7974702190040261, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_task_status_3_fail[params0-Required 'task_uid' parameter is missing in the API call]": 0.7966434480040334, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_task_status_3_fail[params1-API request contains unsupported parameters: 'some_param']": 0.8244773219921626, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_task_status_3_fail[params2-'task_uid' must be a string or a list of strings]": 0.8248020400060341, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_task_status_3_fail[params3-API request contains unsupported parameters: 'some_param']": 0.6669300809953711, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_thread_based": 8.997533796005882, - "bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_unsupported_parameters": 1.004926064000756 + "src/bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_01[custom_annotation0]": 0.0015799129905644804, + "src/bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_01[custom_annotation1]": 0.00112624499888625, + "src/bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_01[custom_annotation2]": 0.0010568610086920671, + "src/bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_01[custom_annotation3]": 0.0017110979970311746, + "src/bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_01[custom_annotation4]": 0.0010748390050139278, + "src/bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_01[custom_annotation5]": 0.0011797890037996694, + "src/bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_01[custom_annotation6]": 0.001342344010481611, + "src/bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_01[custom_annotation7]": 0.0014517289964715019, + "src/bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_01[custom_annotation8]": 0.0012597530003404245, + "src/bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_01[custom_annotation9]": 0.001052118001098279, + "src/bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_02[custom_annotation0]": 0.0010919289998128079, + "src/bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_02[custom_annotation1]": 0.0010084159948746674, + "src/bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_03[custom_annotation0]": 0.0010284149975632317, + "src/bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_04[custom_annotation0]": 0.0011841829909826629, + "src/bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_05[custom_annotation0]": 0.0012543359989649616, + "src/bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_06[custom_annotation0]": 0.001432384000509046, + "src/bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_07[custom_annotation0]": 0.0013340309960767627, + "src/bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_08": 0.0013023669889662415, + "src/bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_09_fail[custom_annotation0-ValidationError-Additional properties are not allowed \\\\('descriptions' was unexpected\\\\)]": 0.0026082530021085404, + "src/bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_09_fail[custom_annotation1-ValueError-\\\\['no_such_parameter'] are not in the signature of function]": 0.0012922359965159558, + "src/bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_09_fail[custom_annotation2-ValidationError-Additional properties are not allowed \\\\('descriptions' was unexpected\\\\)]": 0.0013460410118568689, + "src/bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_09_fail[custom_annotation3-ValidationError-Additional properties are not allowed \\\\('some_devices' was unexpected\\\\)]": 0.0013291179930092767, + "src/bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_09_fail[custom_annotation4-ValidationError-\\\\(1, 2, 3\\\\) is not valid]": 0.0015128900049603544, + "src/bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_09_fail[custom_annotation5-ValidationError-'unsupported_list' is not valid]": 0.0012528549996204674, + "src/bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_09_fail[custom_annotation6-ValidationError-None is not valid under any of the given schemas]": 0.0013899090045015328, + "src/bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_09_fail[custom_annotation7-ValidationError-'Plans.' does not match any of the regexes]": 0.0015168370009632781, + "src/bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_09_fail[custom_annotation8-ValidationError-'abc' is not of type 'boolean']": 0.001246997002454009, + "src/bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_09_fail[custom_annotation9-ValidationError-10 is not of type 'boolean']": 0.0013889340043533593, + "src/bluesky_queueserver/manager/tests/test_annotation_decorator.py::test_annotation_dectorator_10": 0.001595806999830529, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_CommJsonRpcError_1": 0.0004822330010938458, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_CommJsonRpcError_2": 0.0004320540028857067, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_CommJsonRpcError_3_fail": 0.0005670569953508675, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_1": 0.15366244499455206, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_1[False]": 0.15462954201211687, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_1[True]": 0.15525165000144625, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method1-params0-5-False-False]": 0.0068002670086571015, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method1-params0-5-False-True]": 0.00583720800204901, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method1-params1-5-True-False]": 1.5063235250054277, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method1-params1-5-True-True]": 1.5068912769929739, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method1-params2-5-False-False]": 0.002804531999572646, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method1-params2-5-False-True]": 0.0019158459908794612, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method1-params2-5-False]": 0.0033445149892941117, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method1-params3-5-True-False]": 1.506401835998986, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method1-params3-5-True-True]": 1.5091721990029328, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method2-params3-15-False]": 0.0035387889947742224, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method2-params4-15-False-False]": 0.0027637059974949807, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method2-params4-15-False-True]": 0.0019075659947702661, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method2-params4-15-False]": 0.003707394003868103, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method2-params5-12-False]": 0.0037921160110272467, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method2-params5-15-False-False]": 0.0017530939949210733, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method2-params5-15-False-True]": 0.002241169997432735, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method2-params6-12-False-False]": 0.0023749009997118264, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method2-params6-12-False-True]": 0.0024862190039129928, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method3-params6-20-False]": 0.003965423995396122, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method3-params7-18-False]": 0.00445795597624965, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method3-params7-20-False-False]": 0.002407707004749682, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method3-params7-20-False-True]": 0.0024751340024522506, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method3-params8-18-False-False]": 0.0024841269914759323, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method3-params8-18-False-True]": 0.002795707005134318, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method4-params10-19-False-False]": 0.002756856003543362, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method4-params10-19-False-True]": 0.0026035629998659715, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method4-params8-20-False]": 0.005946377001237124, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method4-params9-19-False]": 0.004287710995413363, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method4-params9-20-False-False]": 0.0024846320011420175, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method4-params9-20-False-True]": 0.002502174007531721, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method_handler1-params0-5-False]": 0.00898269601748325, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_2[method_handler1-params1-5-True]": 1.5111031259875745, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_3": 0.002329146984266117, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_3[False]": 0.0017731000043568201, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_3[True]": 0.001821343001211062, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_4": 0.002386067993938923, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_4[False]": 0.001697924999461975, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_4[True]": 0.0017730860054143704, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_5[False-False]": 3.0139211950081517, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_5[False-True]": 3.015555748992483, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_5[False]": 3.029591085971333, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_5[True-False]": 4.0163499640111695, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_5[True-True]": 4.014592963001633, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_5[True]": 4.032606415974442, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_6_failing": 0.015415494999615476, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_6_failing[False]": 0.003913455999281723, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_6_failing[True]": 0.004000297994934954, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_7_failing": 0.0024201939813792706, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_7_failing[False]": 0.00282644900289597, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_7_failing[True]": 0.00316453400591854, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_8_failing": 0.5036630599934142, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_8_failing[False]": 0.5036364710031194, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcReceive_8_failing[True]": 0.5045884359933552, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_1": 0.1577032110071741, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_1[False]": 0.157216158004303, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_1[True]": 0.1556008820043644, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method1-params0-5-False-False]": 0.013336030999198556, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method1-params0-5-False-True]": 0.013829319999786094, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method1-params1-5-True-False]": 0.011349192005582154, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method1-params1-5-True-True]": 0.010376275000453461, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method1-params2-5-False-False]": 0.013144160999218002, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method1-params2-5-False-True]": 0.013355728995520622, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method1-params2-5-False]": 0.013303578016348183, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method1-params3-5-True-False]": 0.008667301997775212, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method1-params3-5-True-True]": 0.006767266997485422, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method2-params3-15-False]": 0.010199865006143227, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method2-params4-15-False-False]": 0.010131208997336216, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method2-params4-15-False-True]": 0.008551853999961168, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method2-params4-15-False]": 0.00865118094952777, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method2-params5-12-False]": 0.006299029977526516, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method2-params5-15-False-False]": 0.007943282995256595, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method2-params5-15-False-True]": 0.008720804995391518, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method2-params6-12-False-False]": 0.008650494994071778, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method2-params6-12-False-True]": 0.008486826009175275, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method3-params6-20-False]": 0.005908155988436192, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method3-params7-18-False]": 0.005673876032233238, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method3-params7-20-False-False]": 0.009031532994413283, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method3-params7-20-False-True]": 0.009959578994312324, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method3-params8-18-False-False]": 0.008745352002733853, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method3-params8-18-False-True]": 0.008745650004129857, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method4-params10-19-False-False]": 0.008149266999680549, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method4-params10-19-False-True]": 0.00858080800389871, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method4-params8-20-False]": 0.005317406001267955, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method4-params9-19-False]": 0.006375555007252842, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method4-params9-20-False-False]": 0.00827066299825674, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method4-params9-20-False-True]": 0.008170425004209392, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method_handler1-params0-5-False]": 0.01512863498646766, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_2[method_handler1-params1-5-True]": 0.014804735983489081, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_3": 0.5194347169599496, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_3[False]": 0.5160944589952123, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_3[True]": 0.5137368650030112, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_4": 0.5082289070123807, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_4[False]": 0.5076041809952585, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_4[True]": 0.5073813249982777, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_5": 0.908460612030467, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_5[False]": 0.909588969007018, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_5[True]": 0.9097380819948739, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_6": 1.0112721700279508, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_6[False]": 1.0057825059993775, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_6[True]": 1.0102921739962767, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_7_fail": 0.004799662943696603, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_7_fail[False]": 0.008280614994873758, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_7_fail[True]": 0.0033219540055142716, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_8_fail": 0.004276772000594065, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_8_fail[False]": 0.0019442440025159158, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_PipeJsonRpcSendAsync_8_fail[True]": 0.0018329689992242493, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_1[False-json]": 0.002853399004379753, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_1[False-msgpack]": 0.0026741159963421524, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_1[False]": 0.00493315199855715, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_1[True-json]": 0.005048305996751878, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_1[True-msgpack]": 0.005299193995597307, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_1[True]": 0.009447447984712198, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_2[False-json]": 0.004258877001120709, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_2[False-msgpack]": 0.0043780189953395166, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_2[False]": 0.008160306024365127, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_2[True-json]": 0.007311711000511423, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_2[True-msgpack]": 0.006873105012346059, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_2[True]": 0.011948430008487776, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_3[False-json]": 0.11437600100180134, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_3[False-msgpack]": 0.11289445700094802, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_3[False]": 0.1096240869956091, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_3[True-json]": 0.11995824800396804, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_3[True-msgpack]": 0.11946917200111784, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_3[True]": 0.11602173297433183, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False0-False-json]": 3.0118979469989426, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False0-False-msgpack]": 3.011590491005336, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False0-False]": 3.009821865998674, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False0-True-json]": 3.0180821459944127, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False0-True-msgpack]": 3.01865431600163, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False0-True]": 3.0163954540039413, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False1-False-json]": 3.0120977029946516, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False1-False-msgpack]": 3.0116549369995482, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False1-False]": 3.012584300013259, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False1-True-json]": 3.018623115000082, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False1-True-msgpack]": 3.017970789995161, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False1-True]": 3.021654323034454, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False2-False-json]": 3.01178741100739, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False2-False-msgpack]": 3.011895068004378, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False2-False]": 3.0180362880055327, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False2-True-json]": 3.0177082770096604, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False2-True-msgpack]": 3.0086228439977276, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False2-True]": 3.013162191986339, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False3-False-json]": 3.011526323003636, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False3-False-msgpack]": 3.011721392009349, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False3-False]": 3.0122510039946064, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False3-True-json]": 3.017031347997545, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False3-True-msgpack]": 3.0065251710038865, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-False3-True]": 3.0193297479709145, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-None-False-json]": 3.0117596710042562, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-None-False-msgpack]": 3.011770801000239, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-None-False]": 3.0155683619959746, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-None-True-json]": 3.019201327006158, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-None-True-msgpack]": 3.0136323220067425, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-None-True]": 3.019196473993361, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-True-False-json]": 3.0113518619909883, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-True-False-msgpack]": 3.011233326004003, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-True-False]": 3.016374664992327, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-True-True-json]": 3.0170446620031726, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-True-True-msgpack]": 3.018773839001369, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[0.1-True-True]": 3.014182097016601, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False0-False-json]": 4.019488677004119, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False0-False-msgpack]": 4.014451333998295, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False0-False]": 4.017625209031394, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False0-True-json]": 4.015928351000184, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False0-True-msgpack]": 4.021297790990502, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False0-True]": 4.017379216995323, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False1-False-json]": 4.028230840995093, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False1-False-msgpack]": 4.01758628499374, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False1-False]": 4.0184471019601915, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False1-True-json]": 4.019306344998768, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False1-True-msgpack]": 4.018749454000499, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False1-True]": 4.02089815097861, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False2-False-json]": 4.019647471999633, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False2-False-msgpack]": 4.018740184001217, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False2-False]": 4.014768458029721, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False2-True-json]": 4.016813173999253, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False2-True-msgpack]": 4.0149434539926006, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False2-True]": 4.020471175987041, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False3-False-json]": 4.030507530005707, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False3-False-msgpack]": 4.01766014900204, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False3-False]": 4.02103154399083, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False3-True-json]": 4.018850993998058, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False3-True-msgpack]": 4.0190455640040454, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-False3-True]": 4.020539460994769, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-None-False-json]": 4.018692629011639, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-None-False-msgpack]": 4.015719446011644, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-None-False]": 4.021392594993813, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-None-True-json]": 4.017023453998263, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-None-True-msgpack]": 4.019228029996157, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-None-True]": 4.020538920012768, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-True-False-json]": 4.019200428992917, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-True-False-msgpack]": 4.01915560499765, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-True-False]": 4.0231996959482785, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-True-True-json]": 4.019960592995631, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-True-True-msgpack]": 4.019974062000983, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_4[2-True-True]": 4.012671511009103, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_5[2000-json]": 3.010863913994399, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_5[2000-msgpack]": 3.010661650005204, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_5[2000]": 3.0100643550395034, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_5[5000-json]": 3.0116577340013464, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_5[5000-msgpack]": 3.0081917169882217, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_5[5000]": 3.012798131967429, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_5[None-json]": 3.00801388900436, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_5[None-msgpack]": 3.0115115200023865, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_5[None]": 3.0070202950155362, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendAsync_6_fail": 0.004020145999675151, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_1[False-False-json]": 0.10315505499602295, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_1[False-False-msgpack]": 0.10755849000270246, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_1[False-False]": 0.10528543696273118, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_1[False-True-json]": 0.1081408169993665, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_1[False-True-msgpack]": 0.10769156100286637, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_1[False-True]": 0.10819039100897498, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_1[True-False-json]": 0.0022321469950838946, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_1[True-False-msgpack]": 0.002174651002860628, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_1[True-False]": 0.005178628984140232, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_1[True-True-json]": 0.003534549003234133, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_1[True-True-msgpack]": 0.0032711129897506908, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_1[True-True]": 0.006750562024535611, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_2[False-False-json]": 0.2091619770071702, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_2[False-False-msgpack]": 0.20869893300550757, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_2[False-False]": 0.20929728299961425, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_2[False-True-json]": 0.215820277997409, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_2[False-True-msgpack]": 0.20846258799429052, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_2[False-True]": 0.2094087919977028, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_2[True-False-json]": 0.010022652000770904, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_2[True-False-msgpack]": 0.010935914993751794, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_2[True-False]": 0.0103595299879089, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_2[True-True-json]": 0.01892557300743647, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_2[True-True-msgpack]": 0.01736034000350628, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_2[True-True]": 0.015687253966461867, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_3[False-False-json]": 0.2094800049890182, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_3[False-False-msgpack]": 0.21063690800656332, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_3[False-False]": 0.20909939901321195, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_3[False-True-json]": 0.2173229479958536, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_3[False-True-msgpack]": 0.2092617579983198, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_3[False-True]": 0.21739360599895008, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_3[True-False-json]": 0.11095996799849672, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_3[True-False-msgpack]": 0.11002513999846997, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_3[True-False]": 0.11202814997523092, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_3[True-True-json]": 0.11732139499508776, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_3[True-True-msgpack]": 0.11897039600444259, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_3[True-True]": 0.1152864929754287, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-False-False0-False-json]": 3.0213916190041346, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-False-False0-False-msgpack]": 3.0206303000013577, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-False-False0-False]": 3.0185789249953814, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-False-False0-True-json]": 3.0212068050022935, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-False-False0-True-msgpack]": 3.018457222991856, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-False-False0-True]": 3.118362884997623, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-False-False1-False-json]": 3.0189514020021306, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-False-False1-False-msgpack]": 3.01944613300293, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-False-False1-False]": 3.0164633590029553, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-False-False1-True-json]": 3.0203544489995693, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-False-False1-True-msgpack]": 3.020131263991061, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-False-False1-True]": 3.118463614024222, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-False0-False-json]": 3.006498669994471, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-False0-False-msgpack]": 3.0065142719977302, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-False0-False]": 3.0099229180195834, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-False0-True-json]": 3.0078201460055425, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-False0-True-msgpack]": 3.0081208129995503, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-False0-True]": 3.012101994972909, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-False1-False-json]": 3.007100489005097, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-False1-False-msgpack]": 3.008072004005953, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-False1-False]": 3.009998865047237, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-False1-True-json]": 3.014195515992469, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-False1-True-msgpack]": 3.007829898997443, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-False1-True]": 3.010350743017625, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-None-False-json]": 3.0060035429996788, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-None-False-msgpack]": 3.007130917001632, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-None-False]": 3.0129985850071535, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-None-True-json]": 3.0169205119964317, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-None-True-msgpack]": 3.0179231529982644, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-None-True]": 3.0186283189977985, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-True-False-json]": 3.012595391010109, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-True-False-msgpack]": 3.005264401996101, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-True-False]": 3.011999195005046, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-True-True-json]": 3.014482273996691, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-True-True-msgpack]": 3.015809154996532, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[0.1-True-True-True]": 3.013070633984171, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-False-False0-False-json]": 4.125469140002679, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-False-False0-False-msgpack]": 4.119130936007423, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-False-False0-False]": 4.11456782699679, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-False-False0-True-json]": 4.114891591008927, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-False-False0-True-msgpack]": 4.110111678994144, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-False-False0-True]": 4.114013454993255, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-False-False1-False-json]": 4.113894440997683, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-False-False1-False-msgpack]": 4.117611131005106, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-False-False1-False]": 4.115185909991851, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-False-False1-True-json]": 4.1134762020010385, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-False-False1-True-msgpack]": 4.114923862995056, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-False-False1-True]": 4.111875535018044, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-False0-False-json]": 4.0182708089996595, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-False0-False-msgpack]": 4.011012271999789, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-False0-False]": 4.015332847018726, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-False0-True-json]": 4.015546085000096, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-False0-True-msgpack]": 4.0161562120047165, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-False0-True]": 4.0191445750242565, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-False1-False-json]": 4.009630648004531, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-False1-False-msgpack]": 4.010111568997672, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-False1-False]": 4.016603724012384, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-False1-True-json]": 4.016697588987881, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-False1-True-msgpack]": 4.018724032001046, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-False1-True]": 4.0193982949713245, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-None-False-json]": 4.011450102996605, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-None-False-msgpack]": 4.009864306986856, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-None-False]": 4.016407289978815, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-None-True-json]": 4.019663933999254, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-None-True-msgpack]": 4.017569870004081, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-None-True]": 4.013242430984974, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-True-False-json]": 4.009412993000296, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-True-False-msgpack]": 4.0114887400050065, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-True-False]": 4.014935644023353, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-True-True-json]": 4.01203399500082, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-True-True-msgpack]": 4.029572865998489, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_4[2-True-True-True]": 4.011719375994289, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_5[2000-json]": 3.0068480339905364, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_5[2000-msgpack]": 3.0068700369884027, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_5[2000]": 3.0096338170114905, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_5[5000-json]": 3.009755421000591, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_5[5000-msgpack]": 3.0089279590029037, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_5[5000]": 3.0288285089773126, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_5[None-json]": 3.005746796996391, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_5[None-msgpack]": 3.0137569419966894, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_5[None]": 3.007385092001641, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_ZMQCommSendThreads_6_fail": 0.002301740998518653, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_generate_zmq_keys": 0.0008825529948808253, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_process_zmq_encoding_name": 0.0004543559916783124, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_validate_zmq_key[10]": 0.0005409519944805652, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_validate_zmq_key[None]": 0.0006340859908959828, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_validate_zmq_key[]": 0.0006055179983377457, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_validate_zmq_key[abc]": 0.0005134460006956942, + "src/bluesky_queueserver/manager/tests/test_comms.py::test_validate_zmq_key[wt8[6a8eoXFRVL]": 7.282676503993571, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_06[:^a.*-':^a.*' Type=]": 7.238643764983863, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_06[a-'a' Type=]": 7.280843951011775, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_06[a-b-c-'a-b-c' Type=]": 7.329867177031701, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_06[abc-'abc' Type=]": 7.308477487997152, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_06[count-Type=]": 7.318189841986168, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_06[det-Type=]": 7.282827032002388, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_06[motor-Type=]": 7.3138399140152615, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_07": 1.0263050680223387, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_08": 0.9650699479971081, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_09[meta_param0-meta_saved0]": 8.625763677991927, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_09[meta_param1-meta_saved1]": 5.924097719980637, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_09[meta_param2-meta_saved2]": 5.945236747997114, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_10_fail": 1.0650767849874683, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params0----True-]": 1.138734730950091, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params1--567-567-True-]": 0.9901597259740811, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params10-1234-567-1234567-True-]": 1.0439091460139025, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params11-1234-567-5671234-True-]": 1.1713598940114025, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params12-1234-567-5671234-True-]": 1.0600155389984138, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params13-1234-567-1567234-True-]": 1.1871573230309878, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params14-1234-567-1256734-True-]": 1.0869601359881926, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params15-1234-567-1567234-True-]": 1.1640060489880852, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params16-1234-567-1256734-True-]": 1.0792283729824703, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params17-1234-567-1234567-True-]": 1.1324646629509516, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params18-1234-567-1234-False-msgs18]": 1.164998623979045, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params19-1234-567-1234-False-msgs19]": 1.09200265299296, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params2--567-567-True-]": 1.0476751329842955, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params20-1234-567-1234-False-msgs20]": 0.9528267020068597, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params21-1234-567-1234-False-msgs21]": 1.0844299850286916, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params3--567-567-True-]": 1.0383773199864663, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params4-1234-567-1234567-True-]": 1.0076910220377613, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params5-1234-567-5671234-True-]": 1.012778121017618, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params6-1234-567-1234567-True-]": 1.0032657670089975, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params7-1234-567-5671234-True-]": 1.2012079719861504, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params8-1234-567-1567234-True-]": 1.2072040239872877, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_1[batch_params9-1234-567-1234567-True-]": 1.2437744129856583, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_2": 1.175292331026867, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_3": 12.437117681984091, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_add_batch_4_fail": 1.1240009810135234, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_execute_1": 12.742929794971133, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_execute_2": 11.098710835009115, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_execute_3": 11.113338508992456, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_execute_4_fail": 1.1129793920263182, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_1": 1.0634598420001566, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_2[-1-2-True]": 1.2043535640113987, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_2[-100-0-False]": 1.0730070759891532, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_2[-2-1-True]": 1.1522519430145621, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_2[-3-0-True]": 1.2003085280011874, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_2[-4-0-False]": 0.974721238046186, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_2[0-0-True]": 1.1415790699829813, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_2[1-1-True]": 1.158601544011617, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_2[100-None-False]": 1.0508232470310759, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_2[2-2-True]": 1.06944287699298, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_2[3-None-False]": 1.1759902719932143, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_2[None-2-True]": 1.1912428420037031, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_2[back-2-True]": 1.1882249389600474, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_2[front-0-True]": 1.1996870010334533, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_2[some-None-False]": 0.9409215189807583, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_3": 11.143244210979901, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_get_remove_4_failing": 1.001214747026097, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_update_1[False]": 1.221905253973091, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_update_1[None]": 1.1454568409826607, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_update_1[True]": 1.0776140069938265, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_update_2_fail[False]": 1.1728301850089338, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_update_2_fail[None]": 1.0548191950365435, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_update_2_fail[True]": 1.137323294999078, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_update_3_fail[False]": 1.073536093957955, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_update_3_fail[None]": 1.0333752330043353, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_update_3_fail[True]": 1.0720399240090046, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_item_update_4_fail": 0.920154081977671, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_mode_set_1": 1.2785138490144163, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_mode_set_2_fail[mode1-Queue mode is passed using object of unsupported type '']": 1.093983656988712, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_mode_set_2_fail[mode2-Unsupported plan queue mode parameter 'unsupported_key']": 1.013083178026136, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_mode_set_2_fail[mode3-Unsupported type '' of the parameter 'loop']": 1.0867087949882261, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_mode_set_2_fail[mode4-Unsupported type '' of the parameter 'ignore_failures']": 1.1234452510252595, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_mode_set_2_fail[unknown_str-Queue mode is passed using object of unsupported type '']": 1.0897014100046363, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_mode_set_3_loop_mode": 10.389679617015645, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_queue_mode_set_4_ignore_failures": 13.89085125096608, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_1[False-None-0]": 11.23057640902698, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_1[False-deferred-0]": 11.875960825011134, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_1[False-immediate-0]": 13.213596440997208, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_1[True-deferred-0]": 16.673104711982887, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_1[True-deferred-3.0]": 19.13147649797611, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_1[True-immediate-0]": 20.876736107020406, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_1[True-immediate-3.0]": 23.91146595097962, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_2[1-False-0]": 12.240637526992941, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_2[1-True-0]": 18.207886733027408, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_2[1-True-3.0]": 21.26618756199605, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_2[2-False-0]": 19.062923672026955, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_2[2-True-0]": 24.95966135596973, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_2[2-True-3.0]": 28.436991726979613, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_3[False-re_abort]": 11.622391206969041, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_3[False-re_halt]": 11.743934050027747, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_3[False-re_resume]": 18.922857940022368, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_3[False-re_stop]": 11.548001480026869, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_3[True-re_abort]": 11.497286946017994, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_3[True-re_halt]": 11.61302947299555, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_3[True-re_resume]": 12.653663225966739, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_pause_3[True-re_stop]": 11.735043124994263, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_runs_1[False]": 22.7380453980295, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_re_runs_1[True]": 22.57539630003157, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_01[False-False]": 6.724697175988695, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_01[False-None]": 7.134129446989391, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_01[False-True]": 6.648559986992041, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_01[None-False]": 8.913014454010408, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_01[None-None]": 9.524325722974027, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_01[None-True]": 9.034558419021778, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_01[True-False]": 9.006208860024344, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_01[True-None]": 9.456871732953005, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_01[True-True]": 8.419825507007772, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_02[scripts0-updated_devs0-updated_plans0]": 5.730813141010003, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_02[scripts1-updated_devs1-updated_plans1]": 5.737672070972621, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_02[scripts2-updated_devs2-updated_plans2]": 6.668052388966316, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_03[False]": 7.347334020014387, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_03[True]": 7.27636051501031, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_04": 6.449970555986511, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_05[False]": 6.233527497010073, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_05[True]": 5.656035127991345, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_06": 8.466842197987717, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_07[ip-dir]": 5.708938636031235, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_07[module]": 5.614821519004181, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_07[profile]": 5.634695576009108, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_07[script]": 5.665458050032612, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_07[startup-dir]": 5.281517877010629, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[False-False-False-False]": 8.264756884978851, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[False-False-False-True]": 8.164218754012836, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[False-False-True-False]": 8.700651753024431, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[False-False-True-True]": 8.221194169018418, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[False-True-False-False]": 8.24445923397434, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[False-True-False-True]": 8.245755315001588, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[False-True-True-False]": 8.056176568003139, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[False-True-True-True]": 8.26918209399446, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[True-False-False-False]": 8.21190607798053, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[True-False-False-True]": 8.631757622002624, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[True-False-True-False]": 8.133470824017422, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[True-False-True-True]": 8.20176496799104, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[True-True-False-False]": 8.257303490012418, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[True-True-False-True]": 8.2321598919807, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[True-True-True-False]": 8.2580898499873, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_08[True-True-True-True]": 8.270492826035479, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_09": 9.168786376976641, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_10_fail": 1.0519044899847358, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_11_fail[False]": 9.59761848000926, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_script_upload_11_fail[True]": 11.791831048991298, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_task_status_1": 7.1588229819899425, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_task_status_2": 1.002723198995227, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_task_status_3_fail[params0-Required 'task_uid' parameter is missing in the API call]": 1.0477568899805192, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_task_status_3_fail[params1-API request contains unsupported parameters: 'some_param']": 0.9836316730070394, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_task_status_3_fail[params2-'task_uid' must be a string or a list of strings]": 0.9774309849890415, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_task_status_3_fail[params3-API request contains unsupported parameters: 'some_param']": 0.9561252879793756, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_thread_based": 9.077404906973243, + "src/bluesky_queueserver/manager/tests/test_zmq_api.py::test_zmq_api_unsupported_parameters": 1.2429159249877557, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_invalid_requests_1": 0.7804214929929003, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_manager_kill_1": 16.89220304600167, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_permissions_reload_1[False]": 1.2215295659916592, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_permissions_reload_1[True]": 1.2936581329995533, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_permissions_reload_2[False]": 0.8199286310045864, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_permissions_reload_2[None]": 0.8507879490061896, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_permissions_reload_2[True]": 0.8077889910055092, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_permissions_reload_3[False]": 5.463070302001142, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_permissions_reload_3[True]": 5.302768096000364, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_permissions_set_get_1[False]": 0.8447475770008168, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_permissions_set_get_1[True]": 8.77967591399647, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_permissions_set_get_2": 0.7405828640039545, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_permissions_set_get_3_fail[params0-API request contains unsupported parameters: 'unsupported_param']": 0.6645012429944472, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_permissions_set_get_3_fail[params1-Parameter 'user_group_permissions' is missing]": 0.7019874559991877, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_permissions_set_get_3_fail[params2-'user_groups' is a required property]": 0.6676050789974397, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_permissions_set_get_3_fail[params3-Missing required user group: 'root']": 0.7827136100022472, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_asyncio_based": 9.05896139399556, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_config_get_01": 3.751339110000117, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_environment_destroy_01[False-0.1]": 7.945759280002676, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_environment_destroy_01[False-0]": 7.896441101998789, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_environment_destroy_01[True-0]": 4.641100701010146, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_environment_destroy_02": 17.123606181994546, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_environment_destroy_03_fail": 0.695629777997965, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_environment_open_close_1": 4.357178168007522, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_environment_open_close_2": 4.411748268990777, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_environment_open_close_3": 10.43656071100122, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_environment_open_close_4[False]": 4.169473573994765, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_environment_open_close_4[True]": 17.31213386100717, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_environment_update_01[False]": 6.337221332993067, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_environment_update_01[True]": 6.323712064993742, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_environment_update_02": 10.430887292000989, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_1[False-False-False]": 6.451466063015687, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_1[False-False-True]": 6.2108409449938335, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_1[False-True-False]": 5.416407444005017, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_1[True-False-False]": 6.486025264988712, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_1[True-False-True]": 5.625370262008801, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_1[True-True-False]": 5.875591324002016, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_2[False-standalone]": 6.377461424992362, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_2[True-standalone]": 5.410809548004181, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_2[True-with_function]": 9.124756623001304, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_2[True-with_plan]": 10.143543446007243, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_3[False]": 6.7352330180074205, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_3[True]": 10.194982191002055, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_4": 6.35083846100315, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_5[\\ndef func_elements():\\n raise Exception(f\"-- Exception was raised!!! --\")\\n-args8-None-True-False-msgs8]": 5.94016312599706, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_5[\\ndef func_elements(val):\\n return val\\n-args0-10-True-True-msgs0]": 5.902725350002584, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_5[\\ndef func_elements(val):\\n return val\\n-args1-test-True-True-msgs1]": 5.451305416994728, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_5[\\ndef func_elements(val):\\n return val\\n-args2-return_value2-True-True-msgs2]": 5.871468860001187, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_5[\\ndef func_elements(val):\\n return val\\n-args3-return_value3-True-True-msgs3]": 5.430680318997474, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_5[\\ndef func_elements(val):\\n return val\\n-args4-return_value4-True-True-msgs4]": 5.874799110999447, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_5[\\ndef func_elements(val):\\n return val\\n-args5-None-True-True-msgs5]": 5.22089697499905, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_5[\\ndef func_elements(val):\\n return val\\n-args6-None-False-None-msgs6]": 5.391052777995355, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_5[\\nimport numpy as np\\n\\ndef func_elements():\\n return np.array([1,2,3])\\n-args7-None-True-False-msgs7]": 5.365324011007033, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_6": 4.284410401996865, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_7_fail[args_not_list-function-Parameter 'args' is not a tuple or a list]": 4.367190265002137, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_7_fail[kwargs_not_dict-function-Parameter 'kwargs' is not a dictionary]": 4.325356802997703, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_7_fail[missing_group-function-user group is not specified]": 4.384352126005979, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_7_fail[missing_name-function-Function name is not specified]": 4.78630610799155, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_7_fail[missing_user-function-user name is not specified]": 4.416034579997358, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_7_fail[not_allowed_name-function-Function 'not_allowed' is not allowed]": 4.451224636984989, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_7_fail[unknown_group-function-Unknown user group: 'unknown_group']": 4.377953210991109, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_7_fail[unsupported_type-instruction-unsupported 'item_type' value: 'instruction']": 3.7579368719962076, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_7_fail[unsupported_type-plan-unsupported 'item_type' value: 'plan']": 3.744533858996874, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_7_fail[unsupported_type-unsupported-unsupported 'item_type' value: 'unsupported']": 4.345972374998382, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_function_execute_8_fail": 4.8962893909993, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params0-1-order0-True-]": 0.8858443770004669, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params1-1-order1-True-]": 1.0602486630014027, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params10-1-order10-True-]": 0.8756564739960595, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params11-1-order11-True-]": 0.8653645220038015, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params12-1-order12-True-]": 0.8828433230009978, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params13-0-order13-True-]": 0.9445635750016663, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params14-2-order14-True-]": 1.0121950749962707, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params15-0-order15-True-]": 0.8783586800054763, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params16-0-order16-True-]": 1.0780520909975166, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params17-2-order17-True-]": 1.0913049439986935, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params18-2-order18-True-]": 0.9324902279913658, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params19-0-order19-True-]": 1.0617405919983867, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params2-1-order2-True-]": 1.1073956490072305, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params20-0-order20-True-]": 0.918821391001984, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params21-2-order21-True-]": 1.058850226996583, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params22-2-order22-True-]": 1.029866231008782, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params23-2-order23-False-Source plan (position 50) was not found]": 1.0238762290027807, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params24-2-order24-False-Source plan (UID 'nonexistent') was not found]": 0.8902957350001088, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params25-2-order25-False-Destination plan (position 50) was not found]": 1.0030977670030552, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params26-2-order26-False-Destination plan (UID 'nonexistent') was not found]": 1.040153679998184, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params27-2-order27-False-Destination plan (UID 'nonexistent') was not found]": 0.9788776509958552, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params28-2-order28-False-Source position or UID is not specified]": 0.8741155059906305, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params29-2-order29-False-Destination position or UID is not specified]": 0.9749436630008859, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params3-0-order3-True-]": 1.100325007995707, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params30-2-order30-False-Ambiguous parameters]": 0.9330245739984093, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params31-2-order31-False-Ambiguous parameters]": 1.034478212997783, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params32-2-order32-False-Ambiguous parameters]": 0.9134244770029909, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params4-2-order4-True-]": 0.9435926710066269, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params5-0-order5-True-]": 1.0129572320001898, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params6-2-order6-True-]": 0.9611718199957977, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params7-1-order7-True-]": 0.9205287860022509, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params8-1-order8-True-]": 0.8924983809993137, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_1[params9-1-order9-True-]": 1.0048996429977706, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params0-0123456-23-23-2301456-True-]": 1.0513350580076803, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params1-0123456-23-23-2301456-True-]": 1.0681061409923132, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params10-0123456-023-023-1450236-True-]": 1.060749334996217, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params11-0123456-203-023-1450236-True-]": 1.0278238669925486, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params12-0123456-302-023-1450236-True-]": 1.0059489560007933, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params13-0123456---0123456-True-]": 0.9345211090039811, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params14-----True-]": 0.8965345300020999, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params15-0123456-01-01-0123456-True-]": 1.0259999400004745, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params16-0123456-56-56-0123456-True-]": 1.100571281996963, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params17-0123456-10-10-1023456-True-]": 1.0559303690024535, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params18-0123456-65-65-0123465-True-]": 1.1584289980091853, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params19-0123456-23-23-0123456-False-Destination for the batch is not specified]": 1.0318290639988845, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params2-0123456-23-23-0145623-True-]": 1.051471147009579, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params20-0123456-23-23-0123456-False-more than one mutually exclusive parameter]": 0.9556444089976139, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params21-0123456-023-023-0123456-False-item with UID '.*' is in the batch]": 1.05433673299558, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params22-0123456-023-023-0123456-False-item with UID '.*' is in the batch]": 1.0022515629971167, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params23-0123456-093-093-0123456-False-The\\\\ queue\\\\ does\\\\ not\\\\ contain\\\\ items\\\\ with\\\\ the\\\\ following\\\\ UIDs:\\\\ \\\\['9'\\\\]]": 1.0138708759986912, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params24-0123456-07893-07893-0123456-False-The\\\\ queue\\\\ does\\\\ not\\\\ contain\\\\ items\\\\ with\\\\ the\\\\ following\\\\ UIDs:\\\\ \\\\['7',\\\\ '8',\\\\ '9'\\\\]]": 0.901575945004879, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params25-0123456-0223-0223-0123456-False-The\\\\ list\\\\ of\\\\ contains\\\\ repeated\\\\ UIDs\\\\ \\\\(1\\\\ UIDs\\\\)]": 1.1081623439968098, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params3-0123456-23-23-0145623-True-]": 0.9742724529933184, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params4-0123456-23-23-0142356-True-]": 1.1434609009884298, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params5-0123456-23-23-0145236-True-]": 1.1003574790011044, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params6-0123456-023-023-1450236-True-]": 0.9645131409924943, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params7-0123456-203-203-1452036-True-]": 1.0498006620036904, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params8-0123456-302-302-1453026-True-]": 0.9803982500015991, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_1[batch_params9-0123456-302-302-1453026-True-]": 1.035066740005277, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_move_batch_2_fail": 0.662282878998667, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params0-0123456---0123456-True-]": 1.0505948329955572, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params1-0123456-23-23-01456-True-]": 0.887189840002975, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params10-0123456-283--0123456-False-The queue does not contain items with the following UIDs]": 0.8938493289970211, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params11-0123456-2883--0123456-False-The list of contains repeated UIDs]": 1.0522336220019497, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params12-0123456---0123456-True-]": 1.0668787690010504, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params13-----True-]": 0.6234375750063919, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params14--23---True-]": 0.6413061119965278, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params15-----True-]": 0.8377456340022036, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params16--23---False-The queue does not contain items with the following UIDs]": 0.8556958810004289, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params2-0123456-32-32-01456-True-]": 1.073857276009221, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params3-0123456-06-06-12345-True-]": 0.9006121749989688, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params4-0123456-283-23-01456-True-]": 1.0256537469977047, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params5-0123456-2893-23-01456-True-]": 1.012729105001199, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params6-0123456-2443-243-0156-True-]": 0.9620584000003873, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params7-0123456-2443-243-0156-True-]": 0.9865349079991574, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params8-0123456-283-23-01456-True-]": 0.8991613300022436, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_1[batch_params9-0123456-2443--0123456-False-The list of contains repeated UIDs]": 0.9998880369967083, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_item_remove_batch_2_fail": 0.836650509001629, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_1[False]": 0.9393304339973838, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_1[True]": 0.7523646199988434, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_2[False-False]": 0.842954251995252, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_2[False-True]": 0.8046444019928458, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_2[True-False]": 0.8092215520009631, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_2[True-True]": 0.7355345700052567, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_3[None-lock_options0]": 0.8185591929941438, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_3[None-lock_options1]": 0.6155484120026813, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_3[None-lock_options2]": 0.7842614490073174, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_3[kill-lock_options0]": 9.152287379001791, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_3[kill-lock_options1]": 9.10064264000539, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_3[kill-lock_options2]": 9.071298424998531, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_3[restart-lock_options0]": 1.2665374570060521, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_3[restart-lock_options1]": 1.2598712370017893, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_3[restart-lock_options2]": 1.5174072540030465, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_4_fail[params0-False-environment and/or queue must be selected]": 0.7664046959980624, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_4_fail[params1-False-environment and/or queue must be selected]": 0.6318282110005384, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_4_fail[params10-False-Note must be a string or None]": 0.7584418219994404, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_4_fail[params2-False-User name is not specified]": 0.6646544249961153, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_4_fail[params3-False-User name must be a non-empty string]": 0.8215885320023517, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_4_fail[params4-False-User name must be a non-empty string]": 0.8419389329937985, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_4_fail[params5-False-Lock key is not specified]": 0.750106434992631, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_4_fail[params6-False-Lock key must be a non-empty string]": 0.6555324889995973, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_4_fail[params7-False-Lock key must be a non-empty string]": 0.6628236339965952, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_4_fail[params8-True-]": 0.7604654490060057, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_4_fail[params9-True-]": 0.7918524349952349, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_5_fail[params0-False-Request contains no lock key]": 0.6629928389957058, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_5_fail[params1-False-Lock key must be a non-empty string]": 0.8205637700011721, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_5_fail[params2-True-]": 0.7951991660011117, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_6[lock_options0-False-False]": 0.9610007169976598, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_6[lock_options0-False-True]": 1.0980003049990046, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_6[lock_options1-False-False]": 0.9614761129996623, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_6[lock_options1-False-True]": 0.9556857989955461, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_6[lock_options2-True-False]": 0.9826414030030719, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_6[lock_options2-True-True]": 1.0242834419987048, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_6[lock_options3-True-False]": 1.0800594500033185, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_6[lock_options3-True-True]": 1.0786079359968426, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_7[lock_options0-False-False]": 33.058725256996695, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_7[lock_options0-False-True]": 33.12433074801811, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_7[lock_options1-False-False]": 32.69143233400246, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_7[lock_options1-False-True]": 32.13811138700112, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_7[lock_options2-True-False]": 11.161049749993253, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_7[lock_options2-True-True]": 32.64018116000807, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_7[lock_options3-True-False]": 11.115314816001046, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_lock_7[lock_options3-True-True]": 32.720682886996656, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_ping_status_01[ping]": 0.8275907230054145, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_ping_status_01[status]": 0.7516270849882858, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_ping_status_02[ping]": 0.700910068997473, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_ping_status_02[status]": 0.6115705789998174, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_plans_allowed_and_devices_allowed_1": 0.8053933280098136, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_plans_allowed_and_devices_allowed_2": 1.0235557010091725, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_plans_allowed_and_devices_allowed_3_fail[params0-user group is not specified]": 0.6276907179999398, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_plans_allowed_and_devices_allowed_3_fail[params1-Unknown user group: 'no_such_group']": 0.7409411919943523, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_plans_existing_and_devices_existing_1": 0.8854672129964456, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_plans_existing_and_devices_existing_2_fail": 0.7830611189929186, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_01": 0.7486810080008581, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_02_fail": 0.8128468450013315, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_03[False-False-False]": 10.236655056003656, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_03[False-False-True]": 10.112557927997841, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_03[False-True-False]": 10.272746903996449, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_03[False-True-True]": 10.802772764007386, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_03[True-False-False]": 10.183929894999892, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_03[True-False-True]": 10.781290385995817, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_03[True-True-False]": 10.13632579499972, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_03[True-True-True]": 10.242159875997459, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_04": 15.675769635003235, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_05[False-abort]": 9.416529323003488, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_05[False-halt]": 9.397500912004034, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_05[False-resume]": 13.617823429995042, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_05[False-stop]": 10.48296343999391, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_05[True-abort]": 9.321804090002843, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_05[True-halt]": 9.348076271002355, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_05[True-resume]": 13.476366296003107, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_05[True-stop]": 10.56923035899672, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_06[abort]": 13.071373967010004, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_06[disable_autostart]": 13.751530621004349, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_06[failed_plan]": 9.601552467007423, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_06[halt]": 11.934619107007165, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_06[normal]": 20.416376082997886, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_06[resume]": 20.184038858002168, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_06[stop]": 11.979216439001902, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_06[stop_queue]": 13.697715741000138, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_06[stop_queue_2_plans]": 14.356673392998346, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_07[immediate_plan]": 23.1310420620066, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_07[script_function]": 18.17351690599753, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[1-False-complete_during_restart-False]": 23.107739465987834, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[1-False-complete_during_restart-True]": 23.184123699997144, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[1-False-restart_middle-False]": 17.180650848997175, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[1-False-restart_middle-True]": 18.09647276999749, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[1-True-complete_during_restart-False]": 22.616009509001742, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[1-True-complete_during_restart-True]": 22.614916581005673, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[1-True-restart_middle-False]": 17.20096534300683, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[1-True-restart_middle-True]": 17.285821953992127, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[2-False-complete_during_restart-False]": 22.700324752004235, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[2-False-complete_during_restart-True]": 23.505564415012486, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[2-False-restart_middle-False]": 17.18406121199223, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[2-False-restart_middle-True]": 19.1181380380076, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[2-True-complete_during_restart-False]": 22.775784754994675, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[2-True-complete_during_restart-True]": 22.7817249610016, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[2-True-restart_middle-False]": 17.80799752999883, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_08[2-True-restart_middle-True]": 17.848521970990987, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_09[False]": 7.539404152994393, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_09[True]": 6.624883787997533, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_autostart_10": 11.231935955001973, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_01": 1.068828288000077, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_02[-1-2-True]": 0.8875892510041012, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_02[-100-0-True]": 1.038728286002879, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_02[-2-1-True]": 0.9771240649934043, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_02[-3-0-True]": 0.9556032969994703, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_02[-4-0-True]": 0.8851876469998388, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_02[0-0-True]": 1.061920733001898, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_02[1-1-True]": 0.9997320800102898, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_02[100-2-True]": 0.8753136719969916, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_02[2-2-True]": 0.8703335889949813, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_02[3-2-True]": 0.9171662600056152, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_02[None-2-True]": 0.8787666399948648, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_02[back-2-True]": 1.03143973499391, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_02[front-0-True]": 0.968408527005522, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_02[some-None-False]": 0.9429414550031652, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_03": 1.0858340259947, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_04": 21.620274404005613, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_05[plan_to_add0-primary-True-True-]": 6.279676274003577, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_05[plan_to_add1-primary-True-True-]": 6.796337659005076, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_05[plan_to_add10-test_user-False-False-Failed to add an item: Plan validation failed]": 0.8744353659931221, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_05[plan_to_add11-test_user-False-False-Failed to add an item: Plan validation failed]": 0.9761080960015533, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_05[plan_to_add2-primary-True-True-]": 6.769585745991208, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_05[plan_to_add3-test_user-True-False-]": 5.231061020997004, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_05[plan_to_add4-test_user-True-False-]": 5.703747350999038, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_05[plan_to_add5-test_user-True-False-]": 5.747851176995027, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_05[plan_to_add6-primary-True-True-]": 6.300382738001645, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_05[plan_to_add7-primary-True-True-]": 6.233886914000323, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_05[plan_to_add8-test_user-True-True-]": 6.396272445992508, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_05[plan_to_add9-test_user-False-False-Failed to add an item: Plan validation failed]": 1.0355755800046609, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_06[50-50 Type=]": 5.970672095005284, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_06[:^a.*-':^a.*' Type=]": 6.543524791995878, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_06[a-'a' Type=]": 6.420055570997647, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_06[a-b-c-'a-b-c' Type=]": 6.5564050739994855, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_06[abc-'abc' Type=]": 5.916301297998871, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_06[count-Type=]": 6.528183312999317, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_06[det-Type=]": 6.557349991002411, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_06[motor-Type=]": 6.481748617996345, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_07": 0.9634879150034976, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_08": 0.9352618850025465, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_09[meta_param0-meta_saved0]": 7.485630344999663, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_09[meta_param1-meta_saved1]": 7.391541316996154, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_09[meta_param2-meta_saved2]": 7.835062801997992, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_10[custom_count2]": 12.513904601997638, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_10[custom_count]": 12.42312386699632, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_11_fail": 1.0404728400026215, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params0----True-]": 0.9055873699981021, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params1--567-567-True-]": 0.9732893300024443, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params10-1234-567-1234567-True-]": 1.1109506319990032, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params11-1234-567-5671234-True-]": 0.9006512210034998, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params12-1234-567-5671234-True-]": 0.888171760008845, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params13-1234-567-1567234-True-]": 0.9839344630017877, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params14-1234-567-1256734-True-]": 0.9480125859990949, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params15-1234-567-1567234-True-]": 0.8981523309994373, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params16-1234-567-1256734-True-]": 0.8928736980087706, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params17-1234-567-1234567-True-]": 1.0202044420002494, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params18-1234-567-1234-False-msgs18]": 0.9037543090016698, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params19-1234-567-1234-False-msgs19]": 0.9846976230037399, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params2--567-567-True-]": 0.8983833090023836, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params20-1234-567-1234-False-msgs20]": 1.0523346410045633, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params21-1234-567-1234-False-msgs21]": 1.0649044700039667, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params3--567-567-True-]": 0.8954753029975109, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params4-1234-567-1234567-True-]": 0.8974932530109072, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params5-1234-567-5671234-True-]": 1.001890553998237, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params6-1234-567-1234567-True-]": 0.9523849450051785, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params7-1234-567-5671234-True-]": 0.8870801230004872, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params8-1234-567-1567234-True-]": 0.9865676899935352, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_1[batch_params9-1234-567-1234567-True-]": 1.0252225789954537, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_2": 1.152941992993874, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_3": 11.69170825900801, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_add_batch_4_fail": 0.9611505860011675, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_execute_1": 11.910085873001663, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_execute_2": 10.40355422400171, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_execute_3": 10.369342655001674, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_execute_4_fail": 0.8604273430028115, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_execute_5_fail": 4.056161894004617, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_1": 0.9653805099951569, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_2[-1-2-True]": 0.9751093240047339, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_2[-100-0-False]": 1.0472546389937634, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_2[-2-1-True]": 1.044242490992474, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_2[-3-0-True]": 1.0192911550038843, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_2[-4-0-False]": 1.0433507490015472, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_2[0-0-True]": 0.9752170270076022, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_2[1-1-True]": 0.9527962930005742, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_2[100-None-False]": 1.0605942259935546, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_2[2-2-True]": 1.0650146859989036, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_2[3-None-False]": 1.0488526169938268, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_2[None-2-True]": 1.0854617719960515, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_2[back-2-True]": 1.0336325370080885, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_2[front-0-True]": 1.0906827850049012, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_2[some-None-False]": 0.8903431900034775, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_3": 10.422504365007626, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_get_remove_4_failing": 0.7929702809997252, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_update_1[False]": 0.8739552810075111, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_update_1[None]": 1.0133809679973638, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_update_1[True]": 0.8771253710001474, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_update_2_fail[False]": 1.0033661299967207, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_update_2_fail[None]": 0.9888855419994798, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_update_2_fail[True]": 0.9717966910029645, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_update_3_fail[False]": 1.0389868210040731, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_update_3_fail[None]": 0.8681444980029482, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_update_3_fail[True]": 1.0325632710009813, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_item_update_4_fail": 0.9836105679933098, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_mode_set_1": 0.8414700479988824, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_mode_set_2_fail[mode1-Queue mode is passed using object of unsupported type '']": 0.6194894729997031, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_mode_set_2_fail[mode2-Unsupported plan queue mode parameter 'unsupported_key']": 0.7888827709903126, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_mode_set_2_fail[mode3-Unsupported type '' of the parameter 'loop']": 0.6148101870057872, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_mode_set_2_fail[mode4-Unsupported type '' of the parameter 'ignore_failures']": 0.8191480369932833, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_mode_set_2_fail[unknown_str-Queue mode is passed using object of unsupported type '']": 0.7591376959971967, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_mode_set_3_loop_mode": 10.361345442004676, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_queue_mode_set_4_ignore_failures": 13.253860020005959, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_1[False-None-0]": 11.497145157001796, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_1[False-deferred-0]": 11.537686573996325, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_1[False-immediate-0]": 13.760843771997315, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_1[True-deferred-0]": 16.987443737998547, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_1[True-deferred-3.0]": 19.510560938004346, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_1[True-immediate-0]": 20.639465655003733, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_1[True-immediate-3.0]": 23.67674386100407, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_2[1-False-0]": 12.535799268996925, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_2[1-True-0]": 18.551431863008474, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_2[1-True-3.0]": 21.180969721994188, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_2[2-False-0]": 18.728261008996924, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_2[2-True-0]": 24.756015856000886, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_2[2-True-3.0]": 27.788981311001407, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_3[False-re_abort]": 12.113959764006722, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_3[False-re_halt]": 12.698159195999324, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_3[False-re_resume]": 18.68293548499787, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_3[False-re_stop]": 11.534999312993023, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_3[True-re_abort]": 11.382086284000252, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_3[True-re_halt]": 11.49302731599164, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_3[True-re_resume]": 12.052039496004, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_3[True-re_stop]": 11.583661642005609, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_pause_4_fail": 4.360556155996164, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_runs_1[False]": 22.06092553900089, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_re_runs_1[True]": 22.0650893359998, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_01[False-False]": 5.687677936999535, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_01[False-None]": 5.809690649002732, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_01[False-True]": 5.858007725008065, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_01[None-False]": 8.760624415997881, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_01[None-None]": 9.294939612002054, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_01[None-True]": 8.726653195997642, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_01[True-False]": 8.04515817300853, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_01[True-None]": 8.69826295600069, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_01[True-True]": 8.719337253001868, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_02[scripts0-updated_devs0-updated_plans0]": 5.39900062000379, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_02[scripts1-updated_devs1-updated_plans1]": 5.389425257992116, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_02[scripts2-updated_devs2-updated_plans2]": 6.399220706000051, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_03[False]": 7.429636800006847, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_03[True]": 6.57427804699546, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_04": 6.147938388006878, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_05[False]": 5.4286349910034915, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_05[True]": 5.312775328005955, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_06": 9.991147304004699, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_07[ip-dir]": 4.842269758992188, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_07[module]": 4.34403968200786, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_07[profile]": 4.771471324995218, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_07[script]": 4.779814445995726, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_07[startup-dir]": 4.84603720499581, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_08[False-False-False]": 7.389582553005312, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_08[False-False-True]": 7.368258884009265, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_08[False-True-False]": 7.454895028007741, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_08[False-True-True]": 7.270269530003134, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_08[True-False-False]": 7.361493883006915, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_08[True-False-True]": 6.81504235000466, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_08[True-True-False]": 7.371952604997205, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_08[True-True-True]": 7.4158109329946456, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_09": 9.484334142005537, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_10_fail": 0.7753234850024455, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_11_fail[False]": 9.300298191003094, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_script_upload_11_fail[True]": 11.474189324006147, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_task_status_1": 6.833815040998161, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_task_status_2": 0.7974702190040261, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_task_status_3_fail[params0-Required 'task_uid' parameter is missing in the API call]": 0.7966434480040334, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_task_status_3_fail[params1-API request contains unsupported parameters: 'some_param']": 0.8244773219921626, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_task_status_3_fail[params2-'task_uid' must be a string or a list of strings]": 0.8248020400060341, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_task_status_3_fail[params3-API request contains unsupported parameters: 'some_param']": 0.6669300809953711, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_thread_based": 8.997533796005882, + "src/bluesky_queueserver/manager/tests/test_zmq_api_base.py::test_zmq_api_unsupported_parameters": 1.004926064000756 } From b3863d453ae61cdaf399e56668630986c59a045b Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Wed, 15 Jul 2026 11:58:25 -0400 Subject: [PATCH 26/31] CI: update doc pubishing action --- .github/workflows/docs_publish.yml | 87 +++++++++++++++--------------- 1 file changed, 43 insertions(+), 44 deletions(-) diff --git a/.github/workflows/docs_publish.yml b/.github/workflows/docs_publish.yml index a82c8434..151aaf04 100644 --- a/.github/workflows/docs_publish.yml +++ b/.github/workflows/docs_publish.yml @@ -1,4 +1,4 @@ -name: Publish Docs +name: Documentation on: push: @@ -8,51 +8,50 @@ on: jobs: build: if: github.repository_owner == 'bluesky' + + name: Build and publish docs + runs-on: ubuntu-latest + + env: + python_env: py313 + strategy: - matrix: - python-version: ['3.12'] fail-fast: false steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 1000 # should be enough to reach the most recent tag - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python-version }} - - uses: shogo82148/actions-setup-redis@v1 - with: - redis-version: "7.x" - - name: Install dependencies - run: | - # sudo apt install redis - - # Versioneer uses the most recent git tag to generate __version__, which appears - # in the published documentation. - git fetch --tags - - # These packages are installed in the base environment but may be older - # versions. Explicitly upgrade them because they often create - # installation problems if out of date. - python -m pip install --upgrade pip setuptools numpy - - pip install . - pip install -r requirements-dev.txt - pip list - - name: Build Docs - run: | - make -C docs/ html - - name: Deploy documentation to blueskyproject.io - # We pin to the SHA, not the tag, for security reasons. - # https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/security-hardening-for-github-actions#using-third-party-actions - uses: peaceiris/actions-gh-pages@bbdfb200618d235585ad98e965f4aafc39b4c501 # v3.7.3 - with: - deploy_key: ${{ secrets.ACTIONS_DOCUMENTATION_DEPLOY_KEY }} - publish_branch: master - publish_dir: ./docs/build/html - external_repository: bluesky/bluesky.github.io - destination_dir: bluesky-queueserver - keep_files: true # Keep old files. - force_orphan: false # Keep git history. + - uses: actions/checkout@v4 + with: + # Need this to get version number from last tag + fetch-depth: 0 + + - uses: shogo82148/actions-setup-redis@v1 + with: + redis-version: "7.x" + + - uses: prefix-dev/setup-pixi@v0.10.0 + + - name: Install dev dependencies + run: | + set -vxeuo pipefail + pixi install --environment=${{ env.python_env }} + pixi list --environment=${{ env.python_env }} + pixi run --environment=${{ env.python_env }} pip list + pixi run --environment=${{ env.python_env }} conda list + + - name: Run pre-commit + run: | + pixi run --environment=${{ env.python_env }} make -C docs/ html + + - name: Deploy documentation to blueskyproject.io + # We pin to the SHA, not the tag, for security reasons. + # https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/security-hardening-for-github-actions#using-third-party-actions + uses: peaceiris/actions-gh-pages@bbdfb200618d235585ad98e965f4aafc39b4c501 # v3.7.3 + with: + deploy_key: ${{ secrets.ACTIONS_DOCUMENTATION_DEPLOY_KEY }} + publish_branch: master + publish_dir: ./docs/build/html + external_repository: bluesky/bluesky.github.io + destination_dir: bluesky-queueserver + keep_files: true # Keep old files. + force_orphan: false # Keep git history. From 2b830f00d9573acd68a0ad818192a6033169d4f1 Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Wed, 15 Jul 2026 13:14:18 -0400 Subject: [PATCH 27/31] CI: make UP linting errors reportable, but not automatically fixable --- pyproject.toml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 8fb677c3..680e13a9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -131,15 +131,16 @@ select = [ "I", # isort - https://docs.astral.sh/ruff/rules/#isort-i "UP", # pyupgrade - https://docs.astral.sh/ruff/rules/#pyupgrade-up ] -unfixable = ["F401"] +unfixable = [ + "F401", + "UP006", # ignore non-PEP 585 generic annotations (e.g. typing.List -> list) + "UP007", # e.g. typing.Union[int, float] -> int | float + "UP045", # e.g. typing.Optional[int] -> int | None +] ignore = [ "B905", # adding strict=False to every zip call is just noise "C408", # errors due to using dict() "B011", # do not use 'assert False' error - "UP006", # ignore non-PEP 585 generic annotations (e.g. typing.List -> list) - "UP007", # e.g. typing.Union[int, float] -> int | float - "UP045", # e.g. typing.Optional[int] -> int | None - # "PYI041", # e.g. typing.Union[int, float] -> int | float ] isort.required-imports = [ ] From 0657d35b8cbd975746dcae19bd2a10f947e52e1c Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Wed, 15 Jul 2026 14:16:27 -0400 Subject: [PATCH 28/31] STY: add noqa statements for UP006, UP007 and UP045 --- .../manager/profile_ops.py | 4 +- .../tests/test_annotation_decorator.py | 4 +- .../manager/tests/test_profile_ops.py | 119 ++++++++++-------- 3 files changed, 70 insertions(+), 57 deletions(-) diff --git a/src/bluesky_queueserver/manager/profile_ops.py b/src/bluesky_queueserver/manager/profile_ops.py index 1fa3f1bb..20c9a2c5 100644 --- a/src/bluesky_queueserver/manager/profile_ops.py +++ b/src/bluesky_queueserver/manager/profile_ops.py @@ -2374,9 +2374,9 @@ def pydantic_construct_model_class(parameters): default = ... if hasattr(p, "annotation"): if p.kind == p.VAR_POSITIONAL: - annotation = typing.List[p.annotation] + annotation = typing.List[p.annotation] # noqa:UP006 elif p.kind == p.VAR_KEYWORD: - annotation = typing.Dict[str, p.annotation] + annotation = typing.Dict[str, p.annotation] # noqa:UP006 else: annotation = p.annotation else: diff --git a/src/bluesky_queueserver/manager/tests/test_annotation_decorator.py b/src/bluesky_queueserver/manager/tests/test_annotation_decorator.py index 4d3e9e37..9aa5b684 100644 --- a/src/bluesky_queueserver/manager/tests/test_annotation_decorator.py +++ b/src/bluesky_queueserver/manager/tests/test_annotation_decorator.py @@ -309,11 +309,11 @@ def test_annotation_dectorator_06(custom_annotation): @parameter_annotation_decorator(custom_annotation) def func( detector: typing.Any, - detectors: typing.List[typing.Any], + detectors: typing.List[typing.Any], # noqa:UP006 val1: float = 10, *args: int, msg: str = "default_string", - val2: typing.Union[int, float] = 6, + val2: typing.Union[int, float] = 6, # noqa:UP007 **kwargs: int, ) -> typing.Generator[str, None, None]: yield from ["str1", "str2", "str3"] diff --git a/src/bluesky_queueserver/manager/tests/test_profile_ops.py b/src/bluesky_queueserver/manager/tests/test_profile_ops.py index 494bc911..a81542fd 100644 --- a/src/bluesky_queueserver/manager/tests/test_profile_ops.py +++ b/src/bluesky_queueserver/manager/tests/test_profile_ops.py @@ -1978,11 +1978,11 @@ def _pf2g( def _pf2g2( - val1: typing.Tuple[typing.Union[float, int]] = (50,), - val2: typing.Union[typing.List[str], str] = "some_str", - val3: typing.Dict[str, int] = {"ab": 10, "cd": 50}, # noqa: B006 - val4: Dict[str, int] = {"ab": 10, "cd": 50}, # noqa: B006 No module name 'typing' - val5: typing.Optional[float] = None, # typing.Optional[float] == typing.Union[float, NoneType] + val1: typing.Tuple[typing.Union[float, int]] = (50,), # noqa:UP006,UP007 + val2: typing.Union[typing.List[str], str] = "some_str", # noqa:UP006,UP007 + val3: typing.Dict[str, int] = {"ab": 10, "cd": 50}, # noqa:B006,UP006 + val4: Dict[str, int] = {"ab": 10, "cd": 50}, # noqa:B006,UP006 No module name 'typing' + val5: typing.Optional[float] = None, # noqa:UP045 typing.Optional[float] == typing.Union[float, NoneType] ): yield from [val1, val2, val3, val4, val5] @@ -2036,7 +2036,7 @@ def _pf2g2( def _pf2h( val1: bluesky.protocols.Readable, - val2: typing.List[bluesky.protocols.Readable], + val2: typing.List[bluesky.protocols.Readable], # noqa:UP006 val3: list[bluesky.protocols.Readable], ): yield from [val1, val2, val3] @@ -2116,8 +2116,8 @@ def _pf2j( val6: bluesky.protocols.Stoppable, val7: bluesky.protocols.Subscribable, val8: bluesky.protocols.Checkable, - val9: Optional[bluesky.protocols.Configurable], - val10: typing.Union[bluesky.protocols.Triggerable, list[bluesky.protocols.Locatable]], + val9: Optional[bluesky.protocols.Configurable], # noqa:UP045 + val10: typing.Union[bluesky.protocols.Triggerable, list[bluesky.protocols.Locatable]], # noqa:UP007 ): yield from [val1, val2, val3, val4, val5, val6, val7, val8] @@ -2200,15 +2200,16 @@ def _pf2j( def _pf2k( val1: typing.Callable, val2: typing.Callable[[int, float], str], - val3: typing.Union[ - typing.Callable[[int, float], typing.Tuple[str, str]], typing.List[typing.Callable[[int, float], str]] + val3: typing.Union[ # noqa:UP007 + typing.Callable[[int, float], typing.Tuple[str, str]], # noqa:UP006 + typing.List[typing.Callable[[int, float], str]] # noqa:UP006 ], val4: ( - collections.abc.Callable[[int, float], typing.Tuple[str, str]] + collections.abc.Callable[[int, float], typing.Tuple[str, str]] # noqa:UP006 | list[collections.abc.Callable[[int, float], str]] ), val5: ( - collections.abc.Callable[[int, typing.Callable[[int], int]], typing.Tuple[str, str]] + collections.abc.Callable[[int, typing.Callable[[int], int]], typing.Tuple[str, str]] # noqa:UP006 | list[collections.abc.Callable[[int, float], str]] ), ): @@ -3343,7 +3344,7 @@ def _pf5b(val1, val2: str = "some_str", val3: None = None): }, } ) -def _pf5c(detector: Optional[ophyd.Device]): +def _pf5c(detector: Optional[ophyd.Device]): # noqa:UP045 # Expected to fail: the default value is in the decorator, but not in the header yield from [detector] @@ -3484,33 +3485,36 @@ def _create_schema_for_testing(annotation_type): "encoded_annotation, type_expected, built_in_plans, built_in_devices, eval_expr, success, errmsg", [ ({"type": "int"}, int, False, False, False, True, ""), ({"type": "str"}, str, False, False, False, True, ""), - ({"type": "typing.List[int]"}, typing.List[int], False, False, False, True, ""), + ({"type": "typing.List[int]"}, typing.List[int], False, False, False, True, ""), # noqa:UP006 ({"type": "typing.List[typing.Union[int, float]]"}, - typing.List[typing.Union[int, float]], False, False, False, True, ""), - ({"type": "List[int]"}, typing.List[int], False, False, False, False, "name 'List' is not defined"), + typing.List[typing.Union[int, float]], False, False, False, True, ""), # noqa:UP006,UP007 + ({"type": "List[int]"}, typing.List[int], # noqa:UP006 + False, False, False, False, "name 'List' is not defined"), # Built-in types: allow any value to pass ({"type": "__PLAN__"}, str, True, False, False, True, ""), - ({"type": "typing.List[__PLAN__]"}, typing.List[str], True, False, False, True, ""), + ({"type": "typing.List[__PLAN__]"}, typing.List[str], True, False, False, True, ""), # noqa:UP006 ({"type": "__DEVICE__"}, str, False, True, False, True, ""), - ({"type": "typing.List[__DEVICE__]"}, typing.List[str], False, True, False, True, ""), + ({"type": "typing.List[__DEVICE__]"}, typing.List[str], False, True, False, True, ""), # noqa:UP006 ({"type": "__READABLE__"}, str, False, True, False, True, ""), - ({"type": "typing.List[__READABLE__]"}, typing.List[str], False, True, False, True, ""), + ({"type": "typing.List[__READABLE__]"}, typing.List[str], False, True, False, True, ""), # noqa:UP006 ({"type": "__MOVABLE__"}, str, False, True, False, True, ""), - ({"type": "typing.List[__MOVABLE__]"}, typing.List[str], False, True, False, True, ""), + ({"type": "typing.List[__MOVABLE__]"}, typing.List[str], False, True, False, True, ""), # noqa:UP006 ({"type": "__FLYABLE__"}, str, False, True, False, True, ""), - ({"type": "typing.List[__FLYABLE__]"}, typing.List[str], False, True, False, True, ""), + ({"type": "typing.List[__FLYABLE__]"}, typing.List[str], False, True, False, True, ""), # noqa:UP006 ({"type": "__PLAN_OR_DEVICE__"}, str, True, True, False, True, ""), - ({"type": "typing.List[__PLAN_OR_DEVICE__]"}, typing.List[str], True, True, False, True, ""), + ({"type": "typing.List[__PLAN_OR_DEVICE__]"}, typing.List[str], # noqa:UP006 + True, True, False, True, ""), ({"type": "typing.Union[typing.List[__PLAN__], __DEVICE__]"}, - typing.Union[typing.List[str], str], True, True, False, True, ""), + typing.Union[typing.List[str], str], True, True, False, True, ""), # noqa:UP006,UP007 ({"type": "__CALLABLE__"}, str, False, False, True, True, ""), - ({"type": "typing.List[__CALLABLE__]"}, typing.List[str], False, False, True, True, ""), + ({"type": "typing.List[__CALLABLE__]"}, typing.List[str], False, False, True, True, ""), #noqa:UP006 # Errors ({"type": "typing.Union[typing.List[Device1], Device2]", "devices": {"Device1": []}}, - typing.Union[typing.List[str], str], False, False, False, False, "name 'Device2' is not defined"), + typing.Union[typing.List[str], str], False, # noqa:UP006,UP007 + False, False, False, "name 'Device2' is not defined"), ({"type": "Enum1", "unknown": {"Enum1": []}}, str, False, False, False, False, r"Annotation contains unsupported keys: \['unknown'\]"), ({"type": "str", "devices": {"Device1": []}}, str, False, False, False, False, @@ -3557,48 +3561,52 @@ def test_process_annotation_1( @pytest.mark.parametrize("encoded_annotation, type_expected, success, errmsg", [ # Use custom type specifications ({"type": "pa2_Device1", "devices": {"pa2_Device1": ("dev1", "dev2", "dev3")}}, pa2_Device1, True, ""), - ({"type": "typing.List[pa2_Device1]", "devices": {"pa2_Device1": ("dev1", "dev2", "dev3")}}, - typing.List[pa2_Device1], True, ""), + ({"type": "typing.List[pa2_Device1]", "devices": {"pa2_Device1": ("dev1", "dev2", "dev3")}}, # noqa:UP006 + typing.List[pa2_Device1], True, ""), # noqa:UP006 ({"type": "typing.List[typing.Union[pa2_Device1, pa2_Device2]]", "devices": {"pa2_Device1": ("dev1", "dev2", "dev3"), - "pa2_Device2": ("dev4", "dev5")}}, typing.List[typing.Union[pa2_Device1, pa2_Device2]], True, ""), + "pa2_Device2": ("dev4", "dev5")}}, + typing.List[typing.Union[pa2_Device1, pa2_Device2]], True, ""), # noqa:UP006,UP007 ({"type": "typing.Union[typing.List[pa2_Device1], typing.List[pa2_Plan1]]", "devices": {"pa2_Device1": ("dev1", "dev2", "dev3"), "pa2_Plan1": ("plan1", "plan2")}}, - typing.Union[typing.List[pa2_Device1], typing.List[pa2_Plan1]], True, ""), + typing.Union[typing.List[pa2_Device1], typing.List[pa2_Plan1]], True, ""), # noqa:UP006,UP007 ({"type": "typing.Union[typing.List[pa2_Device1], typing.List[pa2_Enum1]]", "devices": {"pa2_Device1": ("dev1", "dev2", "dev3"), "pa2_Enum1": ("enum1", "enum2")}}, - typing.Union[typing.List[pa2_Device1], typing.List[pa2_Enum1]], True, ""), + typing.Union[typing.List[pa2_Device1], typing.List[pa2_Enum1]], True, ""), # noqa:UP006,UP007 # Use Tuple instead of List (produces different JSON schema) ({"type": "typing.Union[typing.Tuple[pa2_Device1], typing.List[pa2_Enum1]]", "devices": {"pa2_Device1": ("dev1", "dev2", "dev3"), "pa2_Enum1": ("enum1", "enum2")}}, - typing.Union[typing.Tuple[pa2_Device1], typing.List[pa2_Enum1]], True, ""), + typing.Union[typing.Tuple[pa2_Device1], typing.List[pa2_Enum1]], True, ""), # noqa:UP006,UP007 # Redefine built-in types. ({"type": "typing.Union[__PLAN__, __DEVICE__, __PLAN_OR_DEVICE__]", "devices": {"__DEVICE__": ("dev1", "dev2", "dev3"), "__PLAN_OR_DEVICE__": []}, "plans": {"__PLAN__": ("plan1", "plan2")}}, - typing.Union[pa2__PLAN__, pa2__DEVICE__, pa2__PLAN_OR_DEVICE__], True, ""), + typing.Union[pa2__PLAN__, pa2__DEVICE__, pa2__PLAN_OR_DEVICE__], True, ""), # noqa:UP007 # Failing case: unknown 'custom' type in the annotation ({"type": "typing.Union[typing.List[unknown_type], typing.List[pa2_Enum1]]", "devices": {"pa2_Enum1": ("enum1", "enum2")}}, - typing.Union[typing.List[pa2_Device1], typing.List[pa2_Enum1]], False, "name 'unknown_type' is not defined"), + typing.Union[typing.List[pa2_Device1], typing.List[pa2_Enum1]], False, # noqa:UP006,UP007 + "name 'unknown_type' is not defined"), # Name for custom type is not a valid Python name ({"type": "typing.Union[typing.List[unknown-type], typing.List[pa2_Enum1]]", "devices": {"pa2_Enum1": ("enum1", "enum2")}}, - typing.Union[typing.List[pa2_Device1], typing.List[pa2_Enum1]], False, "name 'unknown' is not defined"), + typing.Union[typing.List[pa2_Device1], typing.List[pa2_Enum1]], False, # noqa:UP006,UP007 + "name 'unknown' is not defined"), # Non-existing type 'typing.list' ({"type": "typing.Union[typing.list[pa2_Device1], typing.List[pa2_Enum1]]", "devices": {"pa2_Device1": ("dev1", "dev2", "dev3"), "pa2_Enum1": ("enum1", "enum2")}}, - typing.Union[typing.List[pa2_Device1], typing.List[pa2_Enum1]], False, + typing.Union[typing.List[pa2_Device1], typing.List[pa2_Enum1]], False, # noqa:UP006,UP007 "module 'typing' has no attribute 'list'"), # Non-existing type 'List' ({"type": "typing.Union[List[pa2_Device1], List[pa2_Enum1]]", "devices": {"pa2_Device1": ("dev1", "dev2", "dev3"), "pa2_Enum1": ("enum1", "enum2")}}, - typing.Union[typing.List[pa2_Device1], typing.List[pa2_Enum1]], False, "name 'List' is not defined'"), + typing.Union[typing.List[pa2_Device1], typing.List[pa2_Enum1]], # noqa:UP006,UP007 + False, "name 'List' is not defined'"), ]) # fmt: on def test_process_annotation_2(encoded_annotation, type_expected, success, errmsg): @@ -3625,17 +3633,17 @@ def test_process_annotation_2(encoded_annotation, type_expected, success, errmsg ({"type": "typing.Union[typing.List[pa2_Device1], typing.List[pa2_Enum1]]", "devices": {"pa2_Device1": ("dev1", "dev2"), "pa2_Enum1": ("enum1", "enum2")}}, - typing.Union[typing.List[pa2_Device1], typing.List[pa2_Enum1]], True, ""), + typing.Union[typing.List[pa2_Device1], typing.List[pa2_Enum1]], True, ""), # noqa:UP006,UP007 # Extra 'enum3' ({"type": "typing.Union[typing.List[pa2_Device1], typing.List[pa2_Enum1]]", "devices": {"pa2_Device1": ("dev1", "dev2", "dev3"), "pa2_Enum1": ("enum1", "enum2", "enum3")}}, - typing.Union[typing.List[pa2_Device1], typing.List[pa2_Enum1]], True, ""), + typing.Union[typing.List[pa2_Device1], typing.List[pa2_Enum1]], True, ""), # noqa:UP006,UP007 # Changed device name 'dev2x' ({"type": "typing.Union[typing.List[pa2_Device1], typing.List[pa2_Enum1]]", "devices": {"pa2_Device1": ("dev1", "dev2x", "dev3"), "pa2_Enum1": ("enum1", "enum2")}}, - typing.Union[typing.List[pa2_Device1], typing.List[pa2_Enum1]], True, ""), + typing.Union[typing.List[pa2_Device1], typing.List[pa2_Enum1]], True, ""), # noqa:UP006,UP007 ]) # fmt: on def test_process_annotation_3(encoded_annotation, type_expected, success, errmsg): @@ -3689,7 +3697,7 @@ def test_process_default_value_1(default_encoded, default_expected, success, err _ipt1_result = { "param1": {"type": int, "default": 10}, "param2": {"type": str, "default": "some-string"}, - "param3": {"type": typing.Union[typing.List[int], int, None], "default": 50}, + "param3": {"type": typing.Union[typing.List[int], int, None], "default": 50}, # noqa:UP006,UP007 } _ipt2 = [ @@ -3709,7 +3717,7 @@ def test_process_default_value_1(default_encoded, default_expected, success, err _ipt2_result = { "param1": {"type": _ipt2_Detectors1, "default": "det1"}, - "param2": {"type": typing.List[_ipt2_Detectors1], "default": "det2"}, + "param2": {"type": typing.List[_ipt2_Detectors1], "default": "det2"}, # noqa:UP006 } _ipt3 = [ @@ -4531,7 +4539,7 @@ def plan3(a: int = 5, b: float = 0.5, s: str = "abc"): } } ) - def plan4(detectors: typing.Optional[typing.List[ophyd.Device]] = None): + def plan4(detectors: typing.Optional[typing.List[ophyd.Device]] = None): # noqa:UP006,UP045 # Default for 'detectors' is None, which is converted to the default list of detectors detectors = detectors or [_pp_dev2, _pp_dev3] yield from detectors @@ -4549,7 +4557,7 @@ def plan4(detectors: typing.Optional[typing.List[ophyd.Device]] = None): } } ) - def plan4a(detectors: typing.Optional[typing.List[ophyd.Device]] = None): + def plan4a(detectors: typing.Optional[typing.List[ophyd.Device]] = None): # noqa:UP006,UP045 # Default for 'detectors' is None, which is converted to the default list of detectors detectors = detectors or [_pp_dev2, _pp_dev3] yield from detectors @@ -4566,7 +4574,7 @@ def plan4a(detectors: typing.Optional[typing.List[ophyd.Device]] = None): } } ) - def plan4b(detectors: typing.Optional[typing.List[ophyd.Device]] = None): + def plan4b(detectors: typing.Optional[typing.List[ophyd.Device]] = None): # noqa:UP006,UP045 # Default for 'detectors' is None, which is converted to the default list of detectors detectors = detectors or [_pp_dev2, _pp_dev3] yield from detectors @@ -4584,7 +4592,7 @@ def plan4b(detectors: typing.Optional[typing.List[ophyd.Device]] = None): } } ) - def plan4c(detectors: typing.Optional[typing.List[ophyd.Device]] = None): + def plan4c(detectors: typing.Optional[typing.List[ophyd.Device]] = None): # noqa:UP006,UP045 # Default for 'detectors' is None, which is converted to the default list of detectors detectors = detectors or [_pp_dev2, _pp_dev3] yield from detectors @@ -4601,7 +4609,7 @@ def plan4c(detectors: typing.Optional[typing.List[ophyd.Device]] = None): } } ) - def plan4d(detectors: typing.Optional[typing.List[ophyd.Device]] = None): + def plan4d(detectors: typing.Optional[typing.List[ophyd.Device]] = None): # noqa:UP006,UP045 # Default for 'detectors' is None, which is converted to the default list of detectors detectors = detectors or [_pp_dev2, _pp_dev3] yield from detectors @@ -4675,7 +4683,7 @@ def plan5d(plan_to_execute: typing.Callable = _pp_p2): } } ) - def plan6(strings: typing.Union[typing.List[str], typing.Tuple[str]] = ("one", "three")): + def plan6(strings: typing.Union[typing.List[str], typing.Tuple[str]] = ("one", "three")): # noqa:UP006,UP007 yield from strings def plan7(a, b: str): @@ -7204,17 +7212,22 @@ def test_validate_plan_2(allowed_plans, success): } ) def _vp3a( - motors: typing.List[typing.Any], # The actual type should be a list of 'ophyd.device.Device' - detectors: typing.List[typing.Any], # The actual type should be a list of 'ophyd.device.Device' - plans_to_run: typing.Union[typing.List[callable], callable], - positions: typing.Union[typing.List[float], float, None] = 10, # TYPE IS ACTUALLY USED FOR VALIDATION + # The actual type should be a list of 'ophyd.device.Device' + motors: typing.List[typing.Any], # noqa: UP006 + # The actual type should be a list of 'ophyd.device.Device' + detectors: typing.List[typing.Any], # noqa: UP006 + plans_to_run: typing.Union[typing.List[callable], callable], # noqa: UP006, UP007 + # TYPE IS ACTUALLY USED FOR VALIDATION + positions: typing.Union[typing.List[float], float, None] = 10, # noqa: UP006, UP007 ) -> typing.Generator[str, None, None]: # Type should be 'bluesky.utils.Msg', not 'str' yield from ["one", "two", "three"] def _vp3b( detectors: typing.Iterable[protocols.Readable], - motors: typing.Optional[typing.Union[protocols.Movable, typing.Iterable[protocols.Movable]]] = None, + motors: typing.Optional[ # noqa: UP045 + typing.Union[protocols.Movable, typing.Iterable[protocols.Movable]] # noqa: UP007 + ] = None, ): """ Test if type Iterable can be used for the detector (device) list. @@ -7391,7 +7404,7 @@ def test_validate_plan_3(plan_func, plan, allowed_devices, success, errmsg): }, } ) -def _vp4a(num_int: int, v_float: float, v_list: typing.List[typing.Any]): +def _vp4a(num_int: int, v_float: float, v_list: typing.List[typing.Any]): # noqa: UP006 yield from [num_int, v_float, v_list] From 89089626f0dc35f3046155014ac65df97e3e671b Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Wed, 15 Jul 2026 16:28:16 -0400 Subject: [PATCH 29/31] CI: use pixi environment to generate test durations --- store_test_durations.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/store_test_durations.sh b/store_test_durations.sh index 05222a2f..e9c65844 100755 --- a/store_test_durations.sh +++ b/store_test_durations.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash -USE_IPYKERNEL=true pytest -vvv --store-durations +USE_IPYKERNEL=true pixi run --environment=py313 pytest -vvv --store-durations From c2734f3f96e88eb092efe19b48d8f92455f4ff22 Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Thu, 16 Jul 2026 10:32:19 -0400 Subject: [PATCH 30/31] CI: create pypi.yml GH action --- .github/workflows/pypi.yml | 55 ++++++++++++++++++++++++++++ .github/workflows/python-publish.yml | 35 ------------------ pyproject.toml | 3 +- 3 files changed, 57 insertions(+), 36 deletions(-) create mode 100644 .github/workflows/pypi.yml delete mode 100644 .github/workflows/python-publish.yml diff --git a/.github/workflows/pypi.yml b/.github/workflows/pypi.yml new file mode 100644 index 00000000..a087b97b --- /dev/null +++ b/.github/workflows/pypi.yml @@ -0,0 +1,55 @@ +name: Publish the release to PyPI + +on: + release: + types: [created] + +jobs: + build: + + name: Upload to PyPI + + if: github.repository_owner == 'bluesky' + runs-on: ubuntu-latest + + env: + python_env: py313 + + strategy: + fail-fast: false + + steps: + - uses: actions/checkout@v4 + with: + # Need this to get version number from last tag + fetch-depth: 0 + + - uses: prefix-dev/setup-pixi@v0.10.0 + + - name: Install dev dependencies + run: | + set -vxeuo pipefail + pixi install --environment=${{ env.python_env }} + pixi list --environment=${{ env.python_env }} + pixi run --environment=${{ env.python_env }} pip list + pixi run --environment=${{ env.python_env }} conda list + + - name: Build sdist and wheel + run: > + export SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct) && + pixi run --environment=${{ env.python_env }} build + + - name: Check for packaging errors + run: pixi run --environment=${{ env.python_env }} twine check --strict dist/* + + - name: Install produced wheel + run: pixi run --environment=${{ env.python_env }} pip install dist/*.whl + + - name: Test module is importable using the installed wheel + # If more than one module in src/ replace with module name to test + run: pixi run --environment=${{ env.python_env }} python -c "import $(ls --hide='*.egg-info' src | head -1)" + + - name: Publish to PyPI using trusted publishing + uses: pypa/gh-action-pypi-publish@release/v1 + with: + attestations: false diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml deleted file mode 100644 index 43df6d76..00000000 --- a/.github/workflows/python-publish.yml +++ /dev/null @@ -1,35 +0,0 @@ -# This workflows will upload a Python Package using flit when a release is created -# For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries - -name: Upload Python Package - -on: - release: - types: [created] - branches: - - main - -jobs: - deploy: - if: github.repository_owner == 'bluesky' - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: '3.x' - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install wheel twine setuptools - - name: Build and publish - env: - TWINE_USERNAME: __token__ - # The PYPI_PASSWORD must be a pypi token with the "pypi-" prefix with sufficient permissions to upload this package - # https://pypi.org/help/#apitoken - TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} - run: | - python setup.py sdist bdist_wheel - twine upload dist/* diff --git a/pyproject.toml b/pyproject.toml index 680e13a9..505ad249 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -55,11 +55,12 @@ dev = [ "sphinx_rtd_theme", "pandas", "pyarrow", - "scikit-image", # Needed for BEC/other stuff to run, factor out # Dependencies of ophyd-async "h5py", "aioca", "ophyd-async", + "build", + "twine", ] [project.scripts] From 6f2e4a5b6b2950f4712423889238cb9f35943a1b Mon Sep 17 00:00:00 2001 From: Dmitri Gavrilov Date: Thu, 16 Jul 2026 10:40:12 -0400 Subject: [PATCH 31/31] CI: call 'build' in the module form --- .github/workflows/pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pypi.yml b/.github/workflows/pypi.yml index a087b97b..ac700a7d 100644 --- a/.github/workflows/pypi.yml +++ b/.github/workflows/pypi.yml @@ -37,7 +37,7 @@ jobs: - name: Build sdist and wheel run: > export SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct) && - pixi run --environment=${{ env.python_env }} build + pixi run --environment=${{ env.python_env }} python -m build - name: Check for packaging errors run: pixi run --environment=${{ env.python_env }} twine check --strict dist/*