From a9ea4a470a7406252b4a87a87b3e0c9543f8514e Mon Sep 17 00:00:00 2001 From: Daniel Hollas Date: Mon, 18 Nov 2024 11:38:43 +0100 Subject: [PATCH] Bump ruff version --- .github/system_tests/test_daemon.py | 20 +- .molecule/default/files/polish/cli.py | 1 + .pre-commit-config.yaml | 8 +- .../scripts/performance_benchmark_base.py | 1 + .../source/internals/includes/snippets/api.py | 3 +- .../serialize/run_workchain_serialize.py | 3 +- .../snippets/expose_inputs/complex_parent.py | 3 +- .../snippets/expose_inputs/run_complex.py | 3 +- .../snippets/expose_inputs/run_simple.py | 3 +- .../snippets/expose_inputs/simple_parent.py | 3 +- import_storage.out | 596 ++++++++++++++++++ load_profile.out | Bin 0 -> 333985 bytes load_profile.py | 3 + pyproject.toml | 4 + src/aiida/cmdline/groups/dynamic.py | 2 +- .../engine/processes/workchains/workchain.py | 2 +- .../main_0002_recompute_hash_calc_job_node.py | 6 +- tests/benchmark/test_archive.py | 1 + tests/benchmark/test_engine.py | 1 + tests/benchmark/test_nodes.py | 1 + tests/brokers/test_rabbitmq.py | 5 +- tests/calculations/arithmetic/test_add.py | 1 + tests/calculations/test_templatereplacer.py | 1 + tests/calculations/test_transfer.py | 1 + tests/cmdline/commands/test_archive_create.py | 2 +- tests/cmdline/commands/test_archive_import.py | 2 +- tests/cmdline/commands/test_calcjob.py | 4 +- tests/cmdline/commands/test_code.py | 1 + tests/cmdline/commands/test_computer.py | 1 + tests/cmdline/commands/test_config.py | 1 + tests/cmdline/commands/test_daemon.py | 1 + tests/cmdline/commands/test_data.py | 2 +- tests/cmdline/commands/test_devel.py | 1 + tests/cmdline/commands/test_group.py | 1 + tests/cmdline/commands/test_group_ls.py | 3 +- tests/cmdline/commands/test_node.py | 1 + tests/cmdline/commands/test_plugin.py | 1 + tests/cmdline/commands/test_presto.py | 1 + tests/cmdline/commands/test_process.py | 2 +- tests/cmdline/commands/test_profile.py | 3 +- tests/cmdline/commands/test_rabbitmq.py | 3 +- tests/cmdline/commands/test_run.py | 1 + tests/cmdline/commands/test_setup.py | 3 +- tests/cmdline/commands/test_status.py | 1 + tests/cmdline/commands/test_storage.py | 1 + tests/cmdline/commands/test_user.py | 1 + tests/cmdline/commands/test_verdi.py | 1 + tests/cmdline/groups/test_dynamic.py | 3 +- tests/cmdline/params/options/test_callable.py | 3 +- .../params/options/test_conditional.py | 1 + tests/cmdline/params/options/test_config.py | 1 + .../params/options/test_interactive.py | 1 + .../cmdline/params/options/test_verbosity.py | 1 + .../cmdline/params/types/test_calculation.py | 1 + tests/cmdline/params/types/test_code.py | 1 + tests/cmdline/params/types/test_computer.py | 1 + tests/cmdline/params/types/test_data.py | 1 + tests/cmdline/params/types/test_group.py | 1 + tests/cmdline/params/types/test_identifier.py | 1 + tests/cmdline/params/types/test_node.py | 1 + tests/cmdline/params/types/test_path.py | 1 + tests/cmdline/params/types/test_plugin.py | 1 + tests/cmdline/utils/test_common.py | 1 + tests/cmdline/utils/test_decorators.py | 1 + tests/cmdline/utils/test_multiline.py | 1 + tests/cmdline/utils/test_repository.py | 1 + tests/common/test_escaping.py | 1 + tests/common/test_folders.py | 1 + tests/common/test_hashing.py | 1 + tests/common/test_links.py | 1 + tests/common/test_timezone.py | 1 + tests/conftest.py | 4 +- tests/engine/daemon/test_client.py | 1 + tests/engine/daemon/test_execmanager.py | 1 + tests/engine/daemon/test_worker.py | 1 + .../processes/calcjobs/test_calc_job.py | 1 + .../processes/calcjobs/test_monitors.py | 1 + tests/engine/processes/test_builder.py | 3 +- tests/engine/processes/test_control.py | 4 +- tests/engine/processes/test_exit_code.py | 1 + .../processes/workchains/test_restart.py | 1 + .../engine/processes/workchains/test_utils.py | 9 +- tests/engine/test_calcfunctions.py | 1 + tests/engine/test_class_loader.py | 3 +- tests/engine/test_daemon.py | 2 +- tests/engine/test_futures.py | 2 +- tests/engine/test_launch.py | 1 + tests/engine/test_manager.py | 1 + tests/engine/test_memory_leaks.py | 2 +- tests/engine/test_persistence.py | 2 +- tests/engine/test_ports.py | 1 + tests/engine/test_process.py | 4 +- tests/engine/test_process_function.py | 1 + tests/engine/test_process_spec.py | 1 + tests/engine/test_rmq.py | 2 +- tests/engine/test_run.py | 2 +- tests/engine/test_runners.py | 1 + tests/engine/test_transport.py | 1 + tests/engine/test_utils.py | 1 + tests/engine/test_work_chain.py | 1 + tests/engine/test_workfunctions.py | 1 + .../migrations/test_migrations.py | 1 + tests/manage/configuration/test_config.py | 1 + .../configuration/test_configuration.py | 3 +- tests/manage/configuration/test_options.py | 1 + tests/manage/external/test_postgres.py | 1 + tests/manage/test_caching_config.py | 1 + tests/manage/test_manager.py | 1 + tests/manage/test_profile_access.py | 1 + tests/manage/tests/test_pytest_fixtures.py | 1 + tests/orm/data/code/test_abstract.py | 1 + tests/orm/data/code/test_containerized.py | 1 + tests/orm/data/code/test_installed.py | 1 + tests/orm/data/code/test_portable.py | 1 + tests/orm/data/test_code.py | 1 + tests/orm/data/test_enum.py | 1 + tests/orm/implementation/test_backend.py | 1 + tests/orm/implementation/test_comments.py | 1 + tests/orm/implementation/test_logs.py | 1 + tests/orm/implementation/test_nodes.py | 1 + tests/orm/implementation/test_utils.py | 1 + tests/orm/nodes/data/test_array.py | 1 + tests/orm/nodes/data/test_array_bands.py | 1 + tests/orm/nodes/data/test_base.py | 3 +- tests/orm/nodes/data/test_cif.py | 1 + tests/orm/nodes/data/test_data.py | 2 +- tests/orm/nodes/data/test_dict.py | 1 + tests/orm/nodes/data/test_folder.py | 1 + tests/orm/nodes/data/test_jsonable.py | 3 +- tests/orm/nodes/data/test_kpoints.py | 1 + tests/orm/nodes/data/test_list.py | 1 + tests/orm/nodes/data/test_orbital.py | 1 + tests/orm/nodes/data/test_remote.py | 1 + tests/orm/nodes/data/test_remote_stash.py | 1 + tests/orm/nodes/data/test_singlefile.py | 1 + tests/orm/nodes/data/test_structure.py | 1 + tests/orm/nodes/data/test_to_aiida_type.py | 1 + tests/orm/nodes/data/test_trajectory.py | 1 + tests/orm/nodes/data/test_upf.py | 4 +- tests/orm/nodes/data/test_xy.py | 1 + tests/orm/nodes/process/test_process.py | 1 + tests/orm/nodes/test_calcjob.py | 1 + tests/orm/nodes/test_node.py | 1 + tests/orm/nodes/test_repository.py | 1 + tests/orm/test_authinfos.py | 1 + tests/orm/test_autogroups.py | 1 + tests/orm/test_comments.py | 1 + tests/orm/test_computers.py | 1 + tests/orm/test_entities.py | 1 + tests/orm/test_fields.py | 3 +- tests/orm/test_groups.py | 1 + tests/orm/test_logs.py | 1 + tests/orm/test_mixins.py | 1 + tests/orm/test_querybuilder.py | 1 + tests/orm/utils/test_calcjob.py | 1 + tests/orm/utils/test_loaders.py | 1 + tests/orm/utils/test_managers.py | 1 + tests/orm/utils/test_node.py | 1 + tests/orm/utils/test_serialize.py | 1 + tests/parsers/test_parser.py | 1 + tests/plugins/test_entry_point.py | 5 +- tests/plugins/test_factories.py | 1 + tests/plugins/test_utils.py | 1 + tests/repository/backend/test_abstract.py | 1 + .../backend/test_disk_object_store.py | 1 + tests/repository/backend/test_sandbox.py | 1 + tests/repository/test_common.py | 1 + tests/repository/test_repository.py | 1 + tests/restapi/conftest.py | 3 +- tests/restapi/test_config.py | 1 + tests/restapi/test_identifiers.py | 1 + tests/restapi/test_routes.py | 3 +- tests/schedulers/test_all.py | 1 + tests/schedulers/test_datastructures.py | 1 + tests/schedulers/test_direct.py | 4 +- tests/schedulers/test_lsf.py | 1 + tests/schedulers/test_slurm.py | 1 + tests/storage/psql_dos/migrations/conftest.py | 5 +- .../django_branch/test_0026_0027_traj_data.py | 1 + ...st_0037_attributes_extras_settings_json.py | 3 +- .../migrations/django_branch/test_legacy.py | 1 + .../sqlalchemy_branch/test_4_dblog_update.py | 3 +- .../test_6_trajectory_data.py | 1 + .../psql_dos/migrations/test_all_schema.py | 1 + tests/storage/psql_dos/test_alembic_cli.py | 3 +- tests/storage/psql_dos/test_backend.py | 1 + tests/storage/psql_dos/test_nodes.py | 1 + tests/storage/psql_dos/test_query.py | 1 + tests/storage/psql_dos/test_schema.py | 3 +- tests/storage/psql_dos/test_session.py | 3 +- tests/storage/sqlite/test_orm.py | 1 + .../storage/sqlite_dos/migrations/conftest.py | 3 +- .../sqlite_dos/migrations/test_all_schema.py | 1 + tests/storage/sqlite_dos/test_backend.py | 2 +- tests/storage/sqlite_zip/test_backend.py | 3 +- tests/test_calculation_node.py | 1 + tests/test_conftest.py | 3 +- tests/test_dataclasses.py | 1 + tests/test_generic.py | 1 + tests/test_nodes.py | 1 + tests/tools/archive/conftest.py | 1 + tests/tools/archive/migration/conftest.py | 2 +- .../archive/migration/test_legacy_funcs.py | 2 +- .../migration/test_legacy_migrations.py | 2 +- .../archive/migration/test_legacy_to_main.py | 2 +- .../archive/migration/test_prov_redesign.py | 2 +- .../archive/migration/test_v05_to_v06.py | 1 - .../archive/migration/test_v06_to_v07.py | 1 + tests/tools/archive/orm/test_authinfo.py | 1 + tests/tools/archive/orm/test_calculations.py | 1 + tests/tools/archive/orm/test_codes.py | 1 - tests/tools/archive/orm/test_comments.py | 1 + tests/tools/archive/orm/test_computers.py | 2 +- tests/tools/archive/orm/test_extras.py | 1 + tests/tools/archive/orm/test_groups.py | 1 + tests/tools/archive/orm/test_links.py | 1 - tests/tools/archive/test_abstract.py | 1 + tests/tools/archive/test_backend.py | 2 +- tests/tools/archive/test_complex.py | 1 + tests/tools/archive/test_schema.py | 8 +- tests/tools/archive/test_simple.py | 3 +- tests/tools/archive/test_specific_import.py | 1 + tests/tools/archive/test_utils.py | 3 +- tests/tools/data/orbital/test_orbitals.py | 1 + tests/tools/dbimporters/test_icsd.py | 1 + .../dbimporters/test_materialsproject.py | 1 + tests/tools/dumping/test_processes.py | 2 + tests/tools/graph/test_age.py | 1 + tests/tools/graph/test_graph_traversers.py | 1 + tests/tools/groups/test_paths.py | 1 + tests/tools/ipython/test_ipython_magics.py | 3 +- tests/tools/visualization/test_graph.py | 1 + tests/transports/test_all_plugins.py | 1 + tests/transports/test_local.py | 1 + tests/transports/test_ssh.py | 1 + tests/utils/processes.py | 1 + .../workflows/arithmetic/test_add_multiply.py | 1 + utils/validate_consistency.py | 3 +- 238 files changed, 900 insertions(+), 99 deletions(-) create mode 100644 import_storage.out create mode 100644 load_profile.out create mode 100644 load_profile.py diff --git a/.github/system_tests/test_daemon.py b/.github/system_tests/test_daemon.py index 7f652f8d69..c49cb1f750 100644 --- a/.github/system_tests/test_daemon.py +++ b/.github/system_tests/test_daemon.py @@ -16,16 +16,6 @@ import tempfile import time -from aiida.common import StashMode, exceptions -from aiida.engine import run, submit -from aiida.engine.daemon.client import get_daemon_client -from aiida.engine.persistence import ObjectLoader -from aiida.engine.processes import CalcJob, Process -from aiida.manage.caching import enable_caching -from aiida.orm import CalcJobNode, Dict, Int, List, Str, load_code, load_node -from aiida.orm.nodes.caching import NodeCaching -from aiida.plugins import CalculationFactory, WorkflowFactory -from aiida.workflows.arithmetic.add_multiply import add, add_multiply from workchains import ( ArithmeticAddBaseWorkChain, CalcFunctionRunnerWorkChain, @@ -39,6 +29,16 @@ WorkFunctionRunnerWorkChain, ) +from aiida.common import StashMode, exceptions +from aiida.engine import run, submit +from aiida.engine.daemon.client import get_daemon_client +from aiida.engine.persistence import ObjectLoader +from aiida.engine.processes import CalcJob, Process +from aiida.manage.caching import enable_caching +from aiida.orm import CalcJobNode, Dict, Int, List, Str, load_code, load_node +from aiida.orm.nodes.caching import NodeCaching +from aiida.plugins import CalculationFactory, WorkflowFactory +from aiida.workflows.arithmetic.add_multiply import add, add_multiply from tests.utils.memory import get_instances CODENAME_ADD = 'add@localhost' diff --git a/.molecule/default/files/polish/cli.py b/.molecule/default/files/polish/cli.py index e162fc97d8..4ef0485b00 100755 --- a/.molecule/default/files/polish/cli.py +++ b/.molecule/default/files/polish/cli.py @@ -14,6 +14,7 @@ import time import click + from aiida.cmdline.params import options, types from aiida.cmdline.utils import decorators diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 32305828b4..9dd65e8d71 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -37,16 +37,10 @@ repos: args: [--line-length=120, --fail-on-change] - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.5.0 + rev: v0.7.3 hooks: - id: ruff-format - exclude: &exclude_ruff > - (?x)^( - docs/source/topics/processes/include/snippets/functions/parse_docstring_expose_ipython.py| - docs/source/topics/processes/include/snippets/functions/signature_plain_python_call_illegal.py| - )$ - id: ruff - exclude: *exclude_ruff args: [--fix, --exit-non-zero-on-fix, --show-fixes] - repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks diff --git a/docs/source/howto/include/scripts/performance_benchmark_base.py b/docs/source/howto/include/scripts/performance_benchmark_base.py index 7fda09f54b..ad59f6b370 100755 --- a/docs/source/howto/include/scripts/performance_benchmark_base.py +++ b/docs/source/howto/include/scripts/performance_benchmark_base.py @@ -2,6 +2,7 @@ """Script to benchmark the performance of the AiiDA workflow engine on a given installation.""" import click + from aiida.cmdline.params import options from aiida.cmdline.utils import decorators, echo diff --git a/docs/source/internals/includes/snippets/api.py b/docs/source/internals/includes/snippets/api.py index 3a034508c4..5de6967751 100755 --- a/docs/source/internals/includes/snippets/api.py +++ b/docs/source/internals/includes/snippets/api.py @@ -1,10 +1,11 @@ #!/usr/bin/env python import click +from flask_restful import Resource + from aiida import load_profile from aiida.restapi import common from aiida.restapi.api import AiidaApi, App from aiida.restapi.run_api import run_api -from flask_restful import Resource class NewResource(Resource): diff --git a/docs/source/topics/processes/include/snippets/serialize/run_workchain_serialize.py b/docs/source/topics/processes/include/snippets/serialize/run_workchain_serialize.py index e16f9e03fe..3ffb35770c 100644 --- a/docs/source/topics/processes/include/snippets/serialize/run_workchain_serialize.py +++ b/docs/source/topics/processes/include/snippets/serialize/run_workchain_serialize.py @@ -1,7 +1,8 @@ #!/usr/bin/env runaiida -from aiida.engine import run from serialize_workchain import SerializeWorkChain +from aiida.engine import run + if __name__ == '__main__': print(run(SerializeWorkChain, a=1, b=1.2, c=True)) # Result: {'a': 1, 'b': 1.2, 'c': True} diff --git a/docs/source/topics/workflows/include/snippets/expose_inputs/complex_parent.py b/docs/source/topics/workflows/include/snippets/expose_inputs/complex_parent.py index 887d2c702b..4c0e150f50 100644 --- a/docs/source/topics/workflows/include/snippets/expose_inputs/complex_parent.py +++ b/docs/source/topics/workflows/include/snippets/expose_inputs/complex_parent.py @@ -1,6 +1,7 @@ -from aiida.engine import ToContext, WorkChain from child import ChildWorkChain +from aiida.engine import ToContext, WorkChain + class ComplexParentWorkChain(WorkChain): @classmethod diff --git a/docs/source/topics/workflows/include/snippets/expose_inputs/run_complex.py b/docs/source/topics/workflows/include/snippets/expose_inputs/run_complex.py index 2e5fa33cba..ace2e52c61 100755 --- a/docs/source/topics/workflows/include/snippets/expose_inputs/run_complex.py +++ b/docs/source/topics/workflows/include/snippets/expose_inputs/run_complex.py @@ -1,8 +1,9 @@ #!/usr/bin/env runaiida +from complex_parent import ComplexParentWorkChain + from aiida.engine import run from aiida.orm import Bool, Float, Int -from complex_parent import ComplexParentWorkChain if __name__ == '__main__': result = run( diff --git a/docs/source/topics/workflows/include/snippets/expose_inputs/run_simple.py b/docs/source/topics/workflows/include/snippets/expose_inputs/run_simple.py index 638b2aa574..81b028a681 100755 --- a/docs/source/topics/workflows/include/snippets/expose_inputs/run_simple.py +++ b/docs/source/topics/workflows/include/snippets/expose_inputs/run_simple.py @@ -1,8 +1,9 @@ #!/usr/bin/env runaiida +from simple_parent import SimpleParentWorkChain + from aiida.engine import run from aiida.orm import Bool, Float, Int -from simple_parent import SimpleParentWorkChain if __name__ == '__main__': result = run(SimpleParentWorkChain, a=Int(1), b=Float(1.2), c=Bool(True)) diff --git a/docs/source/topics/workflows/include/snippets/expose_inputs/simple_parent.py b/docs/source/topics/workflows/include/snippets/expose_inputs/simple_parent.py index 7eadb8c406..70c054e522 100644 --- a/docs/source/topics/workflows/include/snippets/expose_inputs/simple_parent.py +++ b/docs/source/topics/workflows/include/snippets/expose_inputs/simple_parent.py @@ -1,6 +1,7 @@ -from aiida.engine import ToContext, WorkChain from child import ChildWorkChain +from aiida.engine import ToContext, WorkChain + class SimpleParentWorkChain(WorkChain): @classmethod diff --git a/import_storage.out b/import_storage.out new file mode 100644 index 0000000000..e2deb54ed6 --- /dev/null +++ b/import_storage.out @@ -0,0 +1,596 @@ +import time: self [us] | cumulative | imported package +import time: 169 | 169 | _io +import time: 22 | 22 | marshal +import time: 180 | 180 | posix +import time: 211 | 581 | _frozen_importlib_external +import time: 63 | 63 | time +import time: 60 | 123 | zipimport +import time: 25 | 25 | _codecs +import time: 183 | 208 | codecs +import time: 290 | 290 | encodings.aliases +import time: 319 | 816 | encodings +import time: 118 | 118 | encodings.utf_8 +import time: 62 | 62 | _signal +import time: 17 | 17 | _abc +import time: 72 | 88 | abc +import time: 90 | 178 | io +import time: 25 | 25 | _stat +import time: 34 | 58 | stat +import time: 662 | 662 | _collections_abc +import time: 29 | 29 | genericpath +import time: 61 | 89 | posixpath +import time: 258 | 1066 | os +import time: 95 | 95 | _sitebuiltins +import time: 190 | 190 | encodings.utf_8_sig +import time: 119 | 119 | __future__ +import time: 361 | 479 | _virtualenv +import time: 195 | 195 | _distutils_hack +import time: 915 | 915 | types +import time: 836 | 836 | warnings +import time: 794 | 1629 | importlib +import time: 121 | 121 | importlib._abc +import time: 124 | 124 | itertools +import time: 82 | 82 | keyword +import time: 51 | 51 | _operator +import time: 192 | 243 | operator +import time: 115 | 115 | reprlib +import time: 45 | 45 | _collections +import time: 631 | 1236 | collections +import time: 35 | 35 | _functools +import time: 383 | 1653 | functools +import time: 136 | 136 | _weakrefset +import time: 483 | 2271 | threading +import time: 146 | 4166 | importlib.util +import time: 40 | 40 | importlib.machinery +import time: 125 | 125 | sitecustomize +import time: 1843 | 9110 | site +import time: 963 | 963 | enum +import time: 117 | 117 | collections.abc +import time: 105 | 105 | copyreg +import time: 358 | 358 | contextlib +import time: 50 | 50 | _sre +import time: 173 | 173 | re._constants +import time: 312 | 484 | re._parser +import time: 76 | 76 | re._casefix +import time: 243 | 852 | re._compiler +import time: 328 | 1179 | re +import time: 26 | 26 | _typing +import time: 2450 | 4233 | typing +import time: 557 | 557 | aiida.common.exceptions +import time: 204 | 760 | aiida.common.extendeddicts +import time: 584 | 6539 | aiida.common.datastructures +import time: 320 | 320 | aiida.common.lang +import time: 786 | 1105 | aiida.common.links +import time: 137 | 137 | token +import time: 36 | 36 | _tokenize +import time: 893 | 1065 | tokenize +import time: 141 | 1205 | linecache +import time: 1099 | 1099 | textwrap +import time: 994 | 3298 | traceback +import time: 426 | 426 | weakref +import time: 27 | 27 | _string +import time: 397 | 424 | string +import time: 32 | 32 | atexit +import time: 1915 | 6092 | logging +import time: 452 | 6544 | aiida.common.log +import time: 276 | 276 | aiida.common.progress_reporter +import time: 263 | 14724 | aiida.common +import time: 24 | 14748 | aiida.common.log +import time: 414 | 414 | aiida.manage.configuration.migrations.migrations +import time: 134 | 548 | aiida.manage.configuration.migrations +import time: 268 | 268 | aiida.manage.configuration.options +import time: 116 | 116 | fnmatch +import time: 77 | 77 | _winapi +import time: 57 | 57 | nt +import time: 48 | 48 | nt +import time: 45 | 45 | nt +import time: 44 | 44 | nt +import time: 42 | 42 | nt +import time: 43 | 43 | nt +import time: 103 | 456 | ntpath +import time: 40 | 40 | errno +import time: 84 | 84 | urllib +import time: 250 | 250 | math +import time: 993 | 993 | ipaddress +import time: 721 | 2047 | urllib.parse +import time: 647 | 3303 | pathlib +import time: 147 | 147 | copy +import time: 174 | 3622 | aiida.manage.configuration.profile +import time: 110 | 110 | aiida.common.warnings +import time: 169 | 4715 | aiida.manage.configuration +import time: 133 | 133 | aiida.plugins.factories +import time: 305 | 438 | aiida.plugins.entry_point +import time: 102 | 102 | aiida.plugins.utils +import time: 112 | 651 | aiida.plugins +import time: 19 | 669 | aiida.plugins.entry_point +import time: 267 | 5651 | aiida.manage.caching +import time: 77 | 77 | aiida.manage.external +import time: 226 | 226 | aiida.manage.manager +import time: 138 | 6090 | aiida.manage +import time: 28 | 6118 | aiida.manage.configuration +import time: 202 | 21066 | aiida +import time: 84 | 84 | concurrent +import time: 369 | 369 | concurrent.futures._base +import time: 119 | 571 | concurrent.futures +import time: 114 | 114 | _heapq +import time: 149 | 263 | heapq +import time: 276 | 276 | _socket +import time: 151 | 151 | select +import time: 428 | 579 | selectors +import time: 381 | 381 | array +import time: 1309 | 2543 | socket +import time: 64 | 64 | _locale +import time: 610 | 673 | locale +import time: 400 | 400 | signal +import time: 144 | 144 | fcntl +import time: 65 | 65 | msvcrt +import time: 115 | 115 | _posixsubprocess +import time: 1355 | 2750 | subprocess +import time: 1877 | 1877 | _ssl +import time: 163 | 163 | _struct +import time: 88 | 251 | struct +import time: 139 | 139 | binascii +import time: 283 | 672 | base64 +import time: 1587 | 4135 | ssl +import time: 159 | 159 | asyncio.constants +import time: 827 | 827 | _ast +import time: 888 | 1715 | ast +import time: 108 | 108 | _opcode +import time: 328 | 435 | opcode +import time: 627 | 1061 | dis +import time: 1531 | 4307 | inspect +import time: 96 | 4402 | asyncio.coroutines +import time: 105 | 105 | _contextvars +import time: 87 | 192 | contextvars +import time: 92 | 92 | asyncio.format_helpers +import time: 93 | 93 | asyncio.base_futures +import time: 142 | 142 | asyncio.exceptions +import time: 83 | 83 | asyncio.base_tasks +import time: 243 | 558 | _asyncio +import time: 386 | 1227 | asyncio.events +import time: 218 | 218 | asyncio.futures +import time: 125 | 125 | asyncio.protocols +import time: 173 | 173 | asyncio.transports +import time: 63 | 63 | asyncio.log +import time: 444 | 679 | asyncio.sslproto +import time: 70 | 70 | asyncio.mixins +import time: 353 | 422 | asyncio.locks +import time: 220 | 220 | asyncio.timeouts +import time: 321 | 541 | asyncio.tasks +import time: 199 | 1161 | asyncio.staggered +import time: 99 | 99 | asyncio.trsock +import time: 867 | 19194 | asyncio.base_events +import time: 203 | 203 | asyncio.runners +import time: 229 | 229 | asyncio.queues +import time: 269 | 269 | asyncio.streams +import time: 150 | 150 | asyncio.subprocess +import time: 110 | 110 | asyncio.taskgroups +import time: 61 | 61 | asyncio.threads +import time: 217 | 217 | asyncio.base_subprocess +import time: 406 | 406 | asyncio.selector_events +import time: 539 | 1161 | asyncio.unix_events +import time: 180 | 21552 | asyncio +import time: 108 | 108 | kiwipy.communicate +import time: 934 | 934 | _hashlib +import time: 523 | 523 | _blake2 +import time: 211 | 734 | hashlib +import time: 150 | 1817 | hmac +import time: 108 | 108 | _bisect +import time: 98 | 205 | bisect +import time: 106 | 106 | _random +import time: 126 | 126 | _sha2 +import time: 339 | 775 | random +import time: 97 | 2688 | secrets +import time: 69 | 69 | _wmi +import time: 396 | 465 | platform +import time: 209 | 209 | _uuid +import time: 401 | 1073 | uuid +import time: 775 | 4535 | shortuuid.main +import time: 111 | 4645 | shortuuid +import time: 184 | 184 | kiwipy.exceptions +import time: 96 | 96 | kiwipy.futures +import time: 250 | 5173 | kiwipy.communications +import time: 113 | 113 | kiwipy.filters +import time: 91 | 91 | kiwipy.local +import time: 105 | 105 | kiwipy.utils +import time: 223 | 5811 | kiwipy +import time: 238 | 238 | plumpy.futures +import time: 125 | 125 | plumpy.lang +import time: 62 | 62 | plumpy.settings +import time: 298 | 484 | plumpy.utils +import time: 260 | 28342 | plumpy.communications +import time: 195 | 195 | plumpy.events +import time: 126 | 126 | plumpy.exceptions +import time: 135 | 135 | plumpy.loaders +import time: 209 | 209 | _compat_pickle +import time: 225 | 225 | _pickle +import time: 823 | 1256 | pickle +import time: 184 | 184 | yaml.error +import time: 304 | 304 | yaml.tokens +import time: 218 | 218 | yaml.events +import time: 126 | 126 | yaml.nodes +import time: 4865 | 4865 | yaml.reader +import time: 319 | 319 | yaml.scanner +import time: 239 | 239 | yaml.parser +import time: 122 | 122 | yaml.composer +import time: 216 | 216 | _datetime +import time: 96 | 312 | datetime +import time: 743 | 1054 | yaml.constructor +import time: 1541 | 1541 | yaml.resolver +import time: 248 | 8386 | yaml.loader +import time: 284 | 284 | yaml.emitter +import time: 129 | 129 | yaml.serializer +import time: 257 | 257 | yaml.representer +import time: 192 | 861 | yaml.dumper +import time: 39 | 39 | yaml.yaml +import time: 408 | 447 | yaml._yaml +import time: 250 | 696 | yaml.cyaml +import time: 303 | 11073 | yaml +import time: 74 | 74 | plumpy.base.utils +import time: 790 | 863 | plumpy.base.state_machine +import time: 105 | 967 | plumpy.base +import time: 17 | 984 | plumpy.base.utils +import time: 769 | 14081 | plumpy.persistence +import time: 132 | 14213 | plumpy.mixins +import time: 143 | 143 | _json +import time: 268 | 411 | json.scanner +import time: 313 | 723 | json.decoder +import time: 298 | 298 | json.encoder +import time: 156 | 1176 | json +import time: 597 | 1773 | plumpy.ports +import time: 438 | 438 | plumpy.process_comms +import time: 203 | 203 | plumpy.process_listener +import time: 77 | 77 | tblib +import time: 621 | 697 | plumpy.process_states +import time: 78 | 78 | aiocontextvars +import time: 126 | 126 | plumpy.event_helper +import time: 252 | 252 | plumpy.process_spec +import time: 1072 | 1526 | plumpy.processes +import time: 827 | 827 | plumpy.workchains +import time: 265 | 48734 | plumpy +import time: 12 | 48745 | plumpy.base +import time: 14 | 48759 | plumpy.base.utils +import time: 555 | 555 | dataclasses +import time: 764 | 1319 | pprint +import time: 561 | 1879 | aiida.orm.fields +import time: 536 | 51173 | aiida.orm.entities +import time: 378 | 378 | aiida.orm.users +import time: 331 | 51882 | aiida.orm.authinfos +import time: 294 | 294 | aiida.orm.comments +import time: 567 | 567 | aiida.orm.computers +import time: 207 | 207 | aiida.orm.extras +import time: 231 | 231 | aiida.orm.implementation.entities +import time: 258 | 488 | aiida.orm.implementation.authinfos +import time: 186 | 186 | aiida.orm.implementation.comments +import time: 211 | 211 | aiida.orm.implementation.computers +import time: 345 | 345 | aiida.orm.implementation.nodes +import time: 277 | 621 | aiida.orm.implementation.groups +import time: 155 | 155 | aiida.orm.implementation.logs +import time: 452 | 452 | aiida.orm.implementation.querybuilder +import time: 319 | 319 | aiida.orm.implementation.storage_backend +import time: 157 | 157 | aiida.orm.implementation.users +import time: 278 | 278 | numbers +import time: 774 | 774 | _decimal +import time: 100 | 873 | decimal +import time: 192 | 192 | aiida.common.constants +import time: 103 | 1445 | aiida.orm.implementation.utils +import time: 169 | 4198 | aiida.orm.implementation +import time: 172 | 4370 | aiida.orm.convert +import time: 638 | 5007 | aiida.orm.groups +import time: 114 | 114 | aiida.common.timezone +import time: 367 | 481 | aiida.orm.logs +import time: 170 | 170 | aiida.orm.nodes.attributes +import time: 91 | 91 | numpy._utils._convertions +import time: 83 | 173 | numpy._utils +import time: 259 | 431 | numpy._globals +import time: 191 | 191 | numpy.exceptions +import time: 70 | 70 | numpy.version +import time: 22 | 22 | numpy._distributor_init_local +import time: 79 | 100 | numpy._distributor_init +import time: 108 | 108 | numpy._utils._inspect +import time: 409 | 409 | numpy.core._exceptions +import time: 176 | 176 | numpy.dtypes +import time: 6477 | 7061 | numpy.core._multiarray_umath +import time: 270 | 7438 | numpy.core.overrides +import time: 592 | 8030 | numpy.core.multiarray +import time: 194 | 194 | numpy.core.umath +import time: 145 | 145 | numpy.core._string_helpers +import time: 113 | 113 | pickle5 +import time: 223 | 336 | numpy.compat.py3k +import time: 151 | 487 | numpy.compat +import time: 186 | 186 | numpy.core._dtype +import time: 364 | 1036 | numpy.core._type_aliases +import time: 385 | 1566 | numpy.core.numerictypes +import time: 221 | 221 | numpy.core._ufunc_config +import time: 245 | 465 | numpy.core._methods +import time: 1142 | 1607 | numpy.core.fromnumeric +import time: 423 | 2029 | numpy.core.shape_base +import time: 1519 | 1519 | numpy.core.arrayprint +import time: 147 | 147 | numpy.core._asarray +import time: 990 | 4684 | numpy.core.numeric +import time: 973 | 973 | numpy.core.defchararray +import time: 380 | 380 | numpy.core.records +import time: 177 | 177 | numpy.core.memmap +import time: 248 | 248 | numpy.core.function_base +import time: 161 | 161 | numpy.core._machar +import time: 292 | 292 | numpy.core.getlimits +import time: 319 | 319 | numpy.core.einsumfunc +import time: 362 | 362 | numpy.core._multiarray_tests +import time: 1292 | 1654 | numpy.core._add_newdocs +import time: 401 | 401 | numpy.core._add_newdocs_scalars +import time: 180 | 180 | numpy.core._dtype_ctypes +import time: 456 | 456 | _ctypes +import time: 310 | 310 | ctypes._endian +import time: 1023 | 1787 | ctypes +import time: 737 | 2524 | numpy.core._internal +import time: 156 | 156 | numpy._pytesttester +import time: 606 | 22537 | numpy.core +import time: 25 | 22562 | numpy.core._multiarray_umath +import time: 307 | 22868 | numpy.__config__ +import time: 283 | 283 | numpy.lib.mixins +import time: 130 | 130 | numpy.lib.ufunclike +import time: 313 | 442 | numpy.lib.type_check +import time: 288 | 730 | numpy.lib.scimath +import time: 229 | 229 | numpy.lib.stride_tricks +import time: 347 | 576 | numpy.lib.twodim_base +import time: 487 | 487 | numpy.linalg._umath_linalg +import time: 281 | 281 | numpy._typing._nested_sequence +import time: 102 | 102 | numpy._typing._nbit +import time: 921 | 921 | numpy._typing._char_codes +import time: 332 | 332 | numpy._typing._scalars +import time: 129 | 129 | numpy._typing._shape +import time: 1517 | 1517 | numpy._typing._dtype_like +import time: 2140 | 2140 | numpy._typing._array_like +import time: 466 | 5883 | numpy._typing +import time: 1567 | 8511 | numpy.linalg.linalg +import time: 146 | 8656 | numpy.linalg +import time: 318 | 8974 | numpy.matrixlib.defmatrix +import time: 148 | 9121 | numpy.matrixlib +import time: 302 | 302 | numpy.lib.histograms +import time: 1341 | 1643 | numpy.lib.function_base +import time: 553 | 11316 | numpy.lib.index_tricks +import time: 449 | 449 | numpy.lib.nanfunctions +import time: 391 | 391 | numpy.lib.shape_base +import time: 655 | 655 | numpy.lib.polynomial +import time: 800 | 800 | numpy.lib.utils +import time: 316 | 316 | numpy.lib.arraysetops +import time: 227 | 227 | numpy.lib.format +import time: 325 | 325 | numpy.lib._datasource +import time: 378 | 378 | numpy.lib._iotools +import time: 629 | 1558 | numpy.lib.npyio +import time: 150 | 150 | numpy.lib.arrayterator +import time: 227 | 227 | numpy.lib.arraypad +import time: 134 | 134 | numpy.lib._version +import time: 553 | 17556 | numpy.lib +import time: 168 | 168 | numpy.fft._pocketfft_internal +import time: 469 | 637 | numpy.fft._pocketfft +import time: 148 | 148 | numpy.fft.helper +import time: 180 | 963 | numpy.fft +import time: 253 | 253 | numpy.polynomial.polyutils +import time: 426 | 426 | numpy.polynomial._polybase +import time: 512 | 1190 | numpy.polynomial.polynomial +import time: 950 | 950 | numpy.polynomial.chebyshev +import time: 325 | 325 | numpy.polynomial.legendre +import time: 311 | 311 | numpy.polynomial.hermite +import time: 321 | 321 | numpy.polynomial.hermite_e +import time: 299 | 299 | numpy.polynomial.laguerre +import time: 186 | 3579 | numpy.polynomial +import time: 124 | 124 | backports_abc +import time: 685 | 808 | numpy.random._common +import time: 530 | 1338 | numpy.random.bit_generator +import time: 321 | 321 | numpy.random._bounded_integers +import time: 234 | 234 | numpy.random._mt19937 +import time: 1022 | 2914 | numpy.random.mtrand +import time: 261 | 261 | numpy.random._philox +import time: 241 | 241 | numpy.random._pcg64 +import time: 198 | 198 | numpy.random._sfc64 +import time: 770 | 770 | numpy.random._generator +import time: 204 | 4585 | numpy.random._pickle +import time: 207 | 4791 | numpy.random +import time: 561 | 561 | numpy.ctypeslib +import time: 3421 | 3421 | numpy.ma.core +import time: 1167 | 1167 | numpy.ma.extras +import time: 250 | 4836 | numpy.ma +import time: 1822 | 57764 | numpy +import time: 204 | 204 | aiida.orm.utils.calcjob +import time: 860 | 860 | aiida.orm.utils.links +import time: 987 | 987 | aiida.orm.querybuilder +import time: 548 | 1535 | aiida.orm.utils.loaders +import time: 212 | 212 | aiida.orm.utils.managers +import time: 215 | 215 | filecmp +import time: 353 | 567 | aiida.common.utils +import time: 168 | 735 | aiida.orm.utils.node +import time: 200 | 3743 | aiida.orm.utils +import time: 21 | 3764 | aiida.orm.utils.node +import time: 277 | 277 | zlib +import time: 214 | 214 | _compression +import time: 281 | 281 | _bz2 +import time: 255 | 749 | bz2 +import time: 352 | 352 | _lzma +import time: 314 | 666 | lzma +import time: 778 | 2469 | shutil +import time: 527 | 527 | tempfile +import time: 349 | 3344 | aiida.common.folders +import time: 352 | 3695 | aiida.common.hashing +import time: 201 | 3896 | aiida.orm.nodes.caching +import time: 149 | 149 | aiida.orm.nodes.comments +import time: 192 | 192 | aiida.common.escaping +import time: 184 | 375 | aiida.orm.nodes.links +import time: 815 | 8997 | aiida.orm.nodes.node +import time: 409 | 9405 | aiida.orm.nodes.data.data +import time: 249 | 9653 | aiida.orm.nodes.data.base +import time: 345 | 67761 | aiida.orm.nodes.data.array.array +import time: 379 | 379 | aiida.orm.nodes.data.array.kpoints +import time: 681 | 1059 | aiida.orm.nodes.data.array.bands +import time: 192 | 192 | aiida.orm.nodes.data.orbital +import time: 293 | 484 | aiida.orm.nodes.data.array.projection +import time: 542 | 542 | aiida.orm.nodes.data.array.trajectory +import time: 245 | 245 | aiida.orm.nodes.data.array.xy +import time: 164 | 70254 | aiida.orm.nodes.data.array +import time: 202 | 202 | aiida.orm.nodes.data.bool +import time: 307 | 307 | aiida.orm.nodes.data.singlefile +import time: 397 | 704 | aiida.orm.nodes.data.cif +import time: 196 | 196 | pydantic.version +import time: 295 | 491 | pydantic._migration +import time: 1885 | 1885 | typing_extensions +import time: 359 | 2243 | pydantic.errors +import time: 303 | 3037 | pydantic +import time: 1014 | 1014 | pydantic_core._pydantic_core +import time: 7303 | 7303 | pydantic_core.core_schema +import time: 425 | 8741 | pydantic_core +import time: 114 | 114 | pydantic._internal +import time: 62 | 62 | pydantic._internal._internal_dataclass +import time: 873 | 934 | pydantic.aliases +import time: 570 | 570 | pydantic.config +import time: 156 | 156 | pydantic.warnings +import time: 297 | 1956 | pydantic._internal._config +import time: 196 | 196 | pydantic._internal._typing_extra +import time: 132 | 328 | pydantic._internal._repr +import time: 373 | 700 | pydantic._internal._core_utils +import time: 2598 | 3298 | pydantic._internal._decorators +import time: 120 | 120 | pydantic._internal._docs_extraction +import time: 176 | 296 | pydantic._internal._fields +import time: 333 | 333 | pydantic._internal._forward_ref +import time: 607 | 607 | pydantic._internal._utils +import time: 368 | 974 | pydantic._internal._generics +import time: 150 | 150 | pydantic._internal._mock_val_ser +import time: 371 | 371 | pydantic.plugin +import time: 206 | 576 | pydantic.plugin._schema_validator +import time: 120 | 120 | pydantic.annotated_handlers +import time: 185 | 185 | pydantic._internal._core_metadata +import time: 119 | 119 | pydantic._internal._schema_generation_shared +import time: 1678 | 1982 | pydantic.json_schema +import time: 187 | 187 | pydantic._internal._discriminated_union +import time: 179 | 179 | pydantic._internal._known_annotated_metadata +import time: 1143 | 3608 | pydantic._internal._generate_schema +import time: 111 | 111 | pydantic._internal._signature +import time: 101 | 101 | pydantic._internal._validate_call +import time: 318 | 4713 | pydantic._internal._model_construction +import time: 592 | 592 | gettext +import time: 617 | 617 | click._compat +import time: 119 | 119 | click.globals +import time: 303 | 421 | click.utils +import time: 346 | 767 | click.exceptions +import time: 678 | 2061 | click.types +import time: 306 | 306 | click.parser +import time: 224 | 530 | click.formatting +import time: 439 | 439 | click.termui +import time: 2375 | 5995 | click.core +import time: 439 | 439 | click.decorators +import time: 190 | 6623 | click +import time: 121 | 121 | aiida.cmdline.utils.ascii_vis +import time: 256 | 256 | aiida.cmdline.utils.echo +import time: 207 | 463 | aiida.cmdline.utils.common +import time: 192 | 192 | click_spinner._version +import time: 172 | 363 | click_spinner +import time: 424 | 424 | wrapt.wrappers +import time: 247 | 247 | wrapt._wrappers +import time: 195 | 864 | wrapt.__wrapt__ +import time: 158 | 158 | wrapt.patches +import time: 131 | 131 | wrapt.weakrefs +import time: 122 | 122 | wrapt.arguments +import time: 274 | 395 | wrapt.decorators +import time: 182 | 182 | wrapt.importer +import time: 148 | 1875 | wrapt +import time: 161 | 2398 | aiida.cmdline.utils.decorators +import time: 168 | 3149 | aiida.cmdline.utils +import time: 12 | 3161 | aiida.cmdline.utils.decorators +import time: 129 | 3290 | aiida.cmdline.params.types.identifier +import time: 118 | 3407 | aiida.cmdline.params.types.calculation +import time: 96 | 96 | aiida.cmdline.params.types.choice +import time: 101 | 101 | aiida.cmdline.params.types.code +import time: 389 | 389 | click.shell_completion +import time: 141 | 529 | aiida.cmdline.params.types.computer +import time: 86 | 86 | aiida.cmdline.params.types.config +import time: 75 | 75 | aiida.cmdline.params.types.data +import time: 123 | 123 | aiida.cmdline.params.types.group +import time: 84 | 84 | aiida.cmdline.params.types.multiple +import time: 72 | 72 | aiida.cmdline.params.types.node +import time: 133 | 133 | aiida.cmdline.params.types.path +import time: 307 | 307 | aiida.cmdline.params.types.strings +import time: 152 | 459 | aiida.cmdline.params.types.plugin +import time: 88 | 88 | aiida.cmdline.params.types.process +import time: 96 | 96 | aiida.cmdline.params.types.profile +import time: 102 | 102 | aiida.cmdline.params.types.user +import time: 79 | 79 | aiida.cmdline.params.types.workflow +import time: 229 | 5749 | aiida.cmdline.params.types +import time: 103 | 5852 | aiida.cmdline.params +import time: 114 | 114 | aiida.cmdline.params.options.callable +import time: 128 | 128 | aiida.cmdline.params.options.overridable +import time: 112 | 240 | aiida.cmdline.params.options.config +import time: 108 | 108 | aiida.brokers.broker +import time: 87 | 195 | aiida.brokers +import time: 148 | 148 | aiida.brokers.rabbitmq.defaults +import time: 89 | 237 | aiida.brokers.rabbitmq.utils +import time: 149 | 386 | aiida.brokers.rabbitmq.broker +import time: 76 | 656 | aiida.brokers.rabbitmq +import time: 15 | 671 | aiida.brokers.rabbitmq.defaults +import time: 46 | 46 | pwd +import time: 1560 | 1605 | pgsu +import time: 192 | 1797 | aiida.manage.external.postgres +import time: 113 | 113 | aiida.cmdline.utils.defaults +import time: 108 | 108 | aiida.cmdline.params.options.multivalue +import time: 504 | 3191 | aiida.cmdline.params.options.main +import time: 150 | 3694 | aiida.cmdline.params.options +import time: 91 | 91 | aiida.cmdline.params.options.conditional +import time: 169 | 260 | aiida.cmdline.params.options.interactive +import time: 519 | 519 | difflib +import time: 378 | 378 | gzip +import time: 177 | 1073 | aiida.cmdline.groups.verdi +import time: 193 | 17693 | aiida.cmdline.groups.dynamic +import time: 112 | 17805 | aiida.cmdline.groups +import time: 116 | 17920 | aiida.cmdline +import time: 18 | 17938 | aiida.cmdline.params +import time: 12 | 17949 | aiida.cmdline.params.options +import time: 16 | 17964 | aiida.cmdline.params.options.interactive +import time: 5313 | 5313 | annotated_types +import time: 153 | 153 | pydantic._internal._validators +import time: 5405 | 5405 | pydantic.types +import time: 1252 | 12122 | aiida.common.pydantic +import time: 3791 | 57482 | aiida.orm.nodes.data.code.abstract +import time: 334 | 334 | aiida.orm.nodes.data.code.legacy +import time: 711 | 1045 | aiida.orm.nodes.data.code.installed +import time: 702 | 1747 | aiida.orm.nodes.data.code.containerized +import time: 604 | 604 | aiida.orm.nodes.data.code.portable +import time: 158 | 59990 | aiida.orm.nodes.data.code +import time: 176 | 176 | aiida.orm.nodes.data.dict +import time: 167 | 167 | aiida.orm.nodes.data.enum +import time: 143 | 143 | aiida.orm.nodes.data.numeric +import time: 137 | 279 | aiida.orm.nodes.data.float +import time: 203 | 203 | aiida.orm.nodes.data.folder +import time: 124 | 124 | aiida.orm.nodes.data.int +import time: 262 | 262 | aiida.orm.nodes.data.jsonable +import time: 182 | 182 | aiida.orm.nodes.data.list +import time: 240 | 240 | aiida.orm.nodes.data.remote.base +import time: 154 | 154 | aiida.orm.nodes.data.remote.stash.base +import time: 166 | 166 | aiida.orm.nodes.data.remote.stash.folder +import time: 102 | 421 | aiida.orm.nodes.data.remote.stash +import time: 108 | 767 | aiida.orm.nodes.data.remote +import time: 126 | 126 | aiida.orm.nodes.data.str +import time: 726 | 726 | aiida.orm.nodes.data.structure +import time: 94 | 94 | upf_to_json.upf1_to_json +import time: 90 | 90 | xml +import time: 98 | 187 | xml.etree +import time: 317 | 317 | xml.etree.ElementPath +import time: 301 | 301 | pyexpat +import time: 252 | 552 | _elementtree +import time: 649 | 1703 | xml.etree.ElementTree +import time: 117 | 1820 | upf_to_json.upf2_to_json +import time: 123 | 2036 | upf_to_json.upf_to_json +import time: 123 | 2158 | upf_to_json +import time: 436 | 2594 | aiida.orm.nodes.data.upf +import time: 237 | 136985 | aiida.orm.nodes.data +import time: 221 | 221 | aiida.orm.utils.mixins +import time: 436 | 436 | aiida.orm.nodes.process.process +import time: 147 | 147 | aiida.orm.nodes.process.calculation.calculation +import time: 188 | 991 | aiida.orm.nodes.process.calculation.calcfunction +import time: 475 | 475 | aiida.orm.nodes.process.calculation.calcjob +import time: 127 | 1592 | aiida.orm.nodes.process.calculation +import time: 147 | 147 | aiida.orm.nodes.process.workflow.workflow +import time: 161 | 307 | aiida.orm.nodes.process.workflow.workchain +import time: 142 | 142 | aiida.orm.nodes.process.workflow.workfunction +import time: 106 | 554 | aiida.orm.nodes.process.workflow +import time: 116 | 2261 | aiida.orm.nodes.process +import time: 227 | 227 | aiida.orm.nodes.repository +import time: 147 | 139788 | aiida.orm.nodes +import time: 207 | 219495 | aiida.orm diff --git a/load_profile.out b/load_profile.out new file mode 100644 index 0000000000000000000000000000000000000000..8ff2a6211d121110215f6ef2f1c2ffcd343f9088 GIT binary patch literal 333985 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%0Djj*6TW zBh^<8-%kAt+{Mg^iW;w=(58-YIV&SJt*GdkY5t+^pt+?&(=znjwR!|bSya@Cds=Ks z!E%L9STs@5mopi~NeX_HYs~S3Ul0gHRA}s3SJ^{*2G_32$MLI>d2Li^hi8^r>JfxQ z5TYVGY{W&oe1B51ErAdWMMd;xGUO>66WI!j2qvQEvb`S90Y0*SQG|0$@acIS|E}fbo*OsX03AE1L zoFXsJ%$V}c4@cn`E-JFkEHG^Ww3+3V3b!GVrsD$03}vC-?jyd2L|}+2yRFe<6C9Jsyp?Q=fY}gfcu)&yN=3!w*cG273}I%>auP91U-6a) zo@rPU@k@S=Haq8SyolRD=BRhM*RP`UfIp?N&)kAfA%qaXhg+iOvEP%0|E*8OU6X$CBtpqDwHeP ziz&p*mMC4OBt6(5%rw2!{EJ$Uy9?raJZ55r(97-Vo}wJd3Ji6P9m(vd^T3$7oH6!W z(~HGD!e$p0*_&Ee7yS4XpCk<7q#3qdq+LcAD`}7l0yp@$YNOPVcz zo{pvKj^h$(D32xG4V zVgkQmjl_*}9C;gj=sk-H?avzPYs6iL4RE~o!)Lk1dY~DOTUP;UDixa7>99J(4$ZZ!`|Sc>d^NY_sij9r@v_T4BKq~o`x0NPbOjf{S?+Xi`8lOsRQTP+TF2@5NgO} z7b&Ud?z<7#TlVVe2f?k0U zU9iOxKT8uRxIi0AJ#m3PtpBJjB$5*L+LkaOrzc<%OL9JvL|P&7Nk5pN=mZw>))oHRR|sf z@ejj>wV(dgBKEc6U=mP0U*WA45KzAM&P&g~OoFAOb9{>T7)q@|V~@j?mjTP(*6Z_4 zO_#)~CYoH=Ea-W=nh;mUq`$nW{ivK)eJYbh7-Qnx>5-*Jo#r`kHMAXiGW-KNYsiHEllp<`qW8I!qFVC3BOp@usGv>Ay!hF>1t zJajmQE8C}P?M>jTj zF9B~)!vmn|_s6_Z6NK1mo!Ya_|% zj<-(I?D5paQ_fsSR;UR=sECS5YC7>r!bqI!sQo_9VFq26P`dJk9(Ia>OGLTN*Z&MJ zYU(Vmzz}kF!C>|u4f)PAo+`(^3mU%SSbeLuY2=^%W>h1ke`o9?EOkR@jw`osUAkqd zU~hJ~ed)1nGLg!Fp`>8N`X;t{oMIK%y%XA@&EK$KtMFvw))E&3j7u6>x#`pSVxZs! zOoG+&&Z{0hyF6~j`&Xpj`1~h|D#)*oP6Dn1L*1%J>#079ghHy?A~>o~2|ZN9{TBu- zA#i1Y)xQP9X-I7Mto{WX|Bka)ROm)Nl$wYZ!h)CW_{88{+fY(w)`^aUi7F|;d2$`d zF`?wWTY@T1S$3ScgA!<^zrGM$#)Ug5Fs}6Ts$&4tr$LqpY-b}2m!A#ou++4j;Sqa*R48c2F|S4WeV)_|y~8*ojuY?~M@;-@Jgpfu zg?Z4rv-Dv+hnS3K-)Oi?)hQJYz-J+C*u;Q2-${9>ilu7f7&|> zEMOT;*4>IdAy@r}6@=zz|N_3ASO(largX zt1jHamOp3t^PF>DIus(Le7P3@t<|t$bj>0?GiR*m@{1M2?wizM{38F5HoT z(-svK(~Ws%LZ&9`N3LCJI``H}ub*HA{&VbMTkFd8F&hE+9Zv2C_>UFZ`R$uV{GJIa zvEB{;o3>+LwW@#1`?b*F2k+QDx6H}~}mA2jDr#eTqSyGhG7 zf-f=BVKYUxmb~n=a^?3xX*q9Jt=j{3^+KnV+x?`#HeCmFN^8|7{&r*5wvnZ*>MbD8 zi44sf6{>F49#r)|oveGLA)NOlK6Z=-!EqMW0&T6>;~p8N9*3o!f8~oC4tzkq50?;e zbO@?2G+k^5-k|A93!O`!P-ut2ZOGw`B68b2L5&sKgN-jH%&H8-nni1u{?)t!MdarD z(Md;sCP%9pYYtyZc2C~YQRbZ%NgwwVH<7D@uvof+5C2qr*8Qh>qhYY8^G;o7q zRa>moqQ|i_l7dUv^3!;*pK-G~7tX8vjHt1rwKY}{q+fEVay-Yo(363BL{?&XCSRtd z2bDLiRHJty&v^$MoZPb(e62H-CzPv4BwaZ3Ej50PSebxz3g`ojrH)opF@5n6KlD-*KQHKz4 z_|K#lU-bA2Cap-43Jf7;yWSHLmY$4lIH$W(iNCX??3x-LXvG^|IO!g_#MtM?eM*5L zoOjS|{U#b~&x|z#6SF`~kBsR>D@SHMvZbdPrb2sFC8A0~J-kw!zj)vK$UWHH#d91s z8$Rm~Xb|0W=HWwy)+Dr2)n$jkG)qUknpo_j!894)rb3&ZW@+VSf8x2K!P&=eE9K-l zCi9_1Hg90Frw?&h+=CIIO;J%n8d(<^x=gpWdoMn14RxoeP?Knp+G5K;Oq#vzL&j=i(<1G2ydvh934fjOgZ$a>E=XT`yS)B^4&#R8df6Reh z-2b`9CQIH`aildttiTZB7}`*D@35z0 z!H}rwN^p+n>2vg`GG!I=?>H(Z*u^IaL)h6(fRYf{bGrucs^`cJ3j-(<>D{)n{)OF_ zmqQ=xsF=_bpCpW=R}oCw?p=$b9GT#5vg+;Ed}WtfG*L0ZEj~#Yi93eYj#p!-nM_a% zRj-rISCPIH7>T+LO+w0+p=OwW3+~vYcj+aNs~r`SMvG4pMq=(ym{Zr&BjZ9N%<(I( zDkk_97>R!)!!IM?n2d~~%QC^Qz)1W#z0m%&jf46&)9FDY*ldK(?W}sW^=&K}Q8A$) zK1mo!VLDOprM1so`uWdj-GBzzR?o}Mv$@j(2QgV1Puf+4HT13HmD$iZw`}2MR7^%qe3CE{dvC&?CeR^R zG=^P|A{23ploi5iWrf*zDKL_Nq3CwDjC>UkxoE`E$H>9i?0A}y3&ot*5K^Hj zFcRlivT<`**Q_9TD&UqgsN;kBP$b;^DQ()e|B$XMln=9^rTTkQ!%W%l!)3V5=poyG z@VjKuyK@j@!xq|;@p-ubBna6Rn>}J~9=zFxe=Df}F>_tMzlTn;Xd>3S-h*Q?=JQ>X zidTOby#OYyb*GoS8oSg)+`r_JyT|_HQ;j(BdIZN}EJHqTvyIb%hJeXF3jk_Q1>J+K zC#=0yJt#MJ*Z|X&`gPjZJdF^bVt@_o;**4t*dGygAO6U1f}C@8@H9~|K`uT?7>WEj z?I2$$S=nor3HtLtPTH8Q1<;F%33~BK!btRo=*Ueik6aV{KX=%g^Vw8bNr{RHe(_1d zNc>gl%uQ>Yxn@VB^6URff!tpoO`s+1(8V0ej8lLLE&go#yO+~+vdW4)NGcLM6%Om4 zo5BnTF&AdACG`lQNt5X3Jpkf<{6>#u!2l5zp-?t1)Ll>3IdbSQtYbw*JR=w;d#UtV zx9*3z!e!)n;svTtk!@QNd=EYJGhc!{~JK&)xN|+JoQWXeTPPgxE6`dsIsW0U{Eq<+<0b z%i(c%!{F^xcfy$S)V1XWyS(~?g|qP?JrQFtj%P!I*(mUW5?7%n@2N)uzrh79KOUMf z;zwj@Jw0XT?5{~F1eW7LED;#O$rSn&NP=9QyN3q%knT@VQuhU$WQCTy!m0{uG-!a* z#t#oq=8=wRSomWAoq+B6*e3!nX^~C49!~Ji8lnOxhZYW42JgW|sjGe{(GW@0;~i}y zM_RoZp9y0@EAWJ$&73E-r{lNyD|!Bre1Cc5nz}jdx5usjE`ifYvA9!U2q$}WIR|uh zFIY;&gp!|+t4jE)|6*I#nt1mR6%)=NK1motEj?xQ5Z+vakEgV5$(gVlA^Km>%(bxk zguZBQW47(NtU-X90wZyfS*c!#<0Ka=9wPC4u!o0l>>G;~c6^lksp0RjL^vyP@>*12 z2q)8wQ;bACGskIgga=#ZtvNRlZ>%YQk1Dg}&*Et3P=awb%28m%u-Zxhr`7(xE*Zk;!5Fg8pi!Z9elz^Tg{W6>dwPi;J;fY0egxs!0;8bX@4m_)sA}K81 z)>{iMyZ!!}MgM^}J&r)A(2iW3R5Fbp*wxSxj|7ojyIBKmN%1IKCV>}u|_ zHDJ?@qc~75ryca^V%2qHG zoOv2&fKm$4?O<<+@UEJ$eQ?g{P$TG;XWy6b%Bw%;bHBq6pjR!%dv=j}Muiqp?bX+| zS763FGksjHcA>W{swgz`V3(uME5k=jgsP^s;D;aE$dF7Q#+Ne0&Llb&+Lmhx;rmwO z{JT3i+0>#zWv~_;X6?q9D+v~a^G_i{Lxpzs;gIcd8VtfkMVz#p?LlrtX++zTB7 zTX9h_;j7}4gdz0bc=0&fK5Pgpa<8-<$7IH+s&CTdhSyJg@`Q%}s$h@OgG&b4U~yOy z9{yOgWJQlH5QF%{xR#dWPoT`W<~??nKA+Z>v-6NbmYT_getI#0z6}@JplEXiCl@^D z2+?+q*(fV868~_*pSD$`L-03Mp>h=_ZY`o>GSK3agpm|x5(QswykUx-2fv>s0_4v! z>wp3y(R*RX@F@50PEqbJMAd1&E)G^$*ABLiZ{8^rwt&MJz=(vez(|}dB8|h4#|VWV zajn$AOLm9|jc>g9_+$_HJ2-GA0wZx!ynH=5XDY@PkruUFBf6IzU@R}f1OVw4et;zc zFYz03_1&Egr)p_VY)Enhz6Ns-41V}}CPi)AiUD&uz!VsXvpXFFY5gOD>-KFK+S`2j z{WG=YsY0irS`ihK#UVaP7)ikh?~h|03x$XG&lmbA|VBVkAu z!AC0O-uoC*)q&i@w|7l{$D#*wklw^f*`1R9(ANouIFK|>$dL}+e7}+z*M4-Fz`8EtkOZAvrta4`f%y4&fdJ$U3 zo1F*@;bbf^mgd95p}28jwaN>XNm~^diT51gP01KJY0z9SEBSX!Fe@+;^Da^;Cr2nf z7o0qk>1L7A)JYeMv2Z9B6&S)voLj$7g+mo&z%OrIxzpjvS6~o%e_`m@zT97vnWB(k ziQUs-5gv-ApU97h2z$n2nFM{9*0K(s3~ew1bUxaauJnv8_jv<+fE*Q*Q4yac43H<} zF*m=IhQ5gh&~H<+??0C^pSNg7e>+?B%$8Ev7>e0}0z-XbtDd~A?0(;5*Gc^KtWSY% z^}}l+t&FIc^izD2Fp?mp!Lq0EkMfU*iVi|X1QW%KlKa(!fC3{4c+kQHftC&{HxmNN zONt2r1x6BRK?J-gNtg+0<(0_>*+*far#92@tQTQKBy7HnkY zc~^mvI42NSrTFr~4js6S^W#F$ulal~9fEU;Wz~`^AOB(=GOR6Mh;uru-4cP94ZCNs~}Aa4f!4gagUc5dJ_r?jHGa%bo}&0!86&YZ|g&o6b@Z78Y@RsOwfx@5=Npg zLR&VyM2|;yvquDO$B7K2qGCcre3CGd#v#f^ma?^O_Bix%$GD9zMDZz+ok!bng#HfC@LnyAU;VL!pyYg#fifRO*^yP=b_M|sO3~>h4T-tH0RW3WIZk2 z^H%iBe;9kG-#(g%&+J%`zjI?h`Ofb|Z*27Rr!S#vq4N@UgY;G3NIs`ssfBAp;eDK9h)(!Sk zlJC(C_8V^V?3UQ?h-Bq|SwS+m;hR-qBYnc(pf8HttiTZBAvEm0sThg^FCIc*6P?6giv94U1md8dak^FKucmM`z9^5f3Uv}mGYved*U2}9jt8n9@Z z_7jlqFfWGYwDgxIEf40nfcyNkc{84Ei$}K((b8~MS1B-rldc#nkhnb)W1hHFvn)_d zq*BZPE8X8c`_fPteu#=m)5RwVBguSayQHP9C&Cn(U)~i-&jh~$Bk$P%G*CcVuDghYz+sB-g*? zQ)}FayF|VIT74w6;>E6SSU6zob|;+)wUV?NXk~q>Q=t`EKE6!Vo$oE$l&P1l3>)l= z<>F9^B?2RR-U{gKIeGlv|8ff&z35EZF;^zTHO)~m8E5fH!bobHh+2-CVQ}mHFT{9A z5uAcV zrN3U5=Fiy(iAxi>EQpF&9>3ERv#c)82|?Tny;$nj2q;B`n!p@9>5N?b|wNtI8PC}Ur^XR$y+Z77ZV^3M;}?CJ&X;XI&M2&J+^J|IC}m%BJalYAKBpt!0+x=2DI#k-KSK~a#uruj3vfa4f|HR3*pJTYewg2(cuZ7rEg%xenP9e9FOb2)3qNQ}*q zh^So4gPvm^X`InXgPH*=Vr-pw_uNIhK76>RRMgS}^Sz6Dw66wrv?Y`GNHy zF&K%n6j&k8y6b%IPhYj~MaA8S_1tRN-HTO9Hw8}alOd0_h{;ure{h?Dj#0 zwtmpSbt8fi7w5!Id+u)CD9U|q-go1HEytM_d($*U=+icDuPnHjp@j@6VkMM&2&J1- z6Y3OSHUD#8m?hoF`swQr70R=T$%iSkY1rfTH0)V2fX7ItFjFpjYVPo6r`GJGJXiG47+=$H>x62FtZEk(7)jtJhR2>tUiRt2@6!Ci>0S=mI}i>eqGB>E;**3S?CfMsLtKNL zn}PFhP-2Ca;q9EK>HootU%taX^{;l!ou(ciF_#AWlIEo+T3sH0D|DYleabB3bA9#Q zQ?D)Bh0+tdUEktn9O#>9AEu(&KpZii_s6AEik{x2Qwogi6h&M_?!t(ECMP=2c!*1y zsF+|DpCpXL{D3ffHARwe6V$>MSsEpqpjKcc>SWk+cCT8Ik!JcLZrwdYSb)y}A5s+5 z3XDYk5vWBtC`xh6bBb>tnDW!%_7JqPTnM*ySyGa{H?YTU%DSRg=bP7<@V+ySXULOo zpGCViHRbz(B~Fo@kRMis&4@PTrcWbMRA?OlC3PAe}DCY@DaWM|9M8LIajM)WvPN>8thI;@QK2a?66Y4u-=>qkQS7Ze6zj=_ zi72`jlV&S0lEeg3-+CEQ+FVfYN_l*0p+bw{qTr~QpcbDbj705E`rEWn{FCJ|bCgl9 z2V5$JtWN(u~7T1R`G_``P;#jQP~cmGlz z_KYc$HcNlUkL*U2yM_WIyHJHTTF$1Cq^tTb8{pL5WU={2j>C1sQ8DR;_#|N@wc122 zH@(OFS9*$rk_kNpM$+2`dU{F}SXM1)!Be3fns~kY+Ft)ywD(gY7Tv8%ad{N`pwf9Z zEVLI&uxO!&hP2zY#=|Puuo0lo*_^l8?k#@J^1-^(zskCNi>lo=G)P&A!Q|ls{9oU_ z*Ol;yeR+MVMH3a1PK!?xMs}L+2ljkokpC-9ZW#*BCMqU0#U}|PX_f(J6Y}z25_YK2 z#;zE6Wo|}9Q^~Pr+Jp~F-h%sdFcN1bsDgDbK6%$^6HuY$nw0Hqy^**OUDz{b zUzGz$$fjS#-yt+50wZxYBAnh_vr>o_1Qpt>+Q&|}Zh}Y*j|#r;l=t~lgG(j?BXRa3 zJ(M?Z=Nald6BTP#}e*1x~b`EZ1ko$O6v z1vMss8s_|#P_OF#_dS+8v1rz7wJWDsl#GdsQ)ql^0N(Dyl2O<09%&0^dFKtuM0v(F zSs@AxjS^F8c#$}g^;@MzXh=&N_+^<=E_{FYI?L5-ITpdy&rvarqv7N+(S5L9u3O18_g)_$MB*lY1UO3Zoq5 zZfq`aR4j3wvYhKhSu<>ul#3PGpt3(bIsUXD{8}c(+cvL+I;J|?G&V}!%L?tct;K99 zTO%IKsRB=H#1tvYb^*2Y(GH@jSlVrR@qWPCP`D~RY!{KV#X6iBj$Ov@YCG^twAk1z z3cMVN2x{_CVuS9si)gv6b877K%3XT81;4|?+PNEtSI#RmNaDBE#$f2}7=GItYJXAu zK^uJiRF7Ou(8W^cBGz@@-GfvDY@l}nMBl}mQ;xbqg;qY`<)BpYFdNTsJ7?aoYn=$3 z3r8^Gu<7ikR?&`=qNQ=<2 z*s9T4Cij%!EHF(rzDk;*%Q_WWmVL9LyEjIF{)C1z%4X?T#;Vul(__3d#?IM#{7pvq zx-IalQ!{mn)^Y~PV4tVnE12!cmMxPpgGE;CT6+3H2T7DE&*+f_es2cG$BoXd%1|8` zJ@PHvzi?)A0nQTB=-s~s?^HWwsV%)Q0>eG89o=@Pg;n?cwvBZMCEs}`9Y7|B{S$O& zwSh4s+GtPL9WjZJo;w7lwvH46SRmbKMk>;bq;EgEeAHl^ja711A9br9&sD?N_G$b) zA!Ri!Gy;K*5LwFI){Z(&g~sI!n0SjyfBg$BCAY+2Xz8(cc9!3WC)0M?*u$64TGM_o ztR#N?eE4oMkI(XLoiFFZd@UK9T!AP2WN)fd96tST6fQhA=f^flx|Vv0P=b|qJ&c`x z5F2~}UlM4!!|+vsA)GApS0F8$PaLPAIw}3`z=~}(Ki~z<(=Bp%3NrCd%G;R;4B^}f zOpoG0*Y2Z-Qs}g9dSs7pZZrcI4%_0r4pENY6llKv(d0&KFVYY7XY5YRe+V-)^4M|N z^~x`aBpKG*Qq#|eQWM>6!KkxB`(w)HCfib#gpbruHO?2P?9V7MLwr(r>63Yv3~#kE zX?>$#_<#?JO1vYJEQ=1v{UvRk2t5_rkdAjJ4Bc14s{Iss>|U0F{*1|8r_b5wIC1aU zBg96RIm1h7*tEETng%DQ37s~DXZb55#?_5CA`uulS9YLAzz8Io4zu;;@g5y@9`g~T zb`tlaLYuwgNvLl}EQ_<-L*F;9`;IL;Hs!w%V_{S7#%`$mn#wOnmn_<#N1b{us0g25 z(&b?IX*=;f)iVFw@Lh|rrwWaV_&K4)QznHoluHQZKWHABPzC?-;EXSqXIS+46#Rj{ zrfxfbS#sp}!+0|I6x2*Uo{7Oz&%4riro#5n85?zeN0GW5QR%NA<163TP2!U#Duk1A zI#(YWF6>o|@Sy*uwfXW04SD4aou&63{o2Zyj5}zcDpk$kY?%30l z(1Mo?TE96mHbP(B=XG;&7NYMn;k1=L>lmbmJEWgPHfFV6qul(l zZK{LUSVZE4>i>7AHRl}g)W+{bl}?9RVOW5pgbYBj5}Hj6gl7gb-Z#C2Zi2D(xxj@-=IaeFtW3l8^ zaBgf2>~Zgg7ijm%0KZ`hp5$@1=Zh<#?L`OAPczWHuk7kl90V%%RlE1j?)eanc~iXP zypjcZB1pzn=b`a--zwN`-haHH=E3=yIPNBs4QxdS_o)rQe@ zg8G@@R$vG>fhjITXE#aLlQx$mG_ALb8 z1zQgI*AcU%Li4P4qtdH9#jRTB(X}7=cj(Ga1U8C$0B`pS3=E5cjL{v(zguEIBQi`{ z&Pco|U0_r%8zX2VlqG ziWa4~=BKk2@784wjvY}knJe*0!l080h0XmJWAt!jk}LTiB?xXc87C|&h=B)LJg$Dp76czrAKNs1W>m1LI%!Io$S>}KaRZ8j!(!l$i9&On#2>5LuQ71j?fPVA6K4K0nQXG8;MCdz-v*R3T^g{ zYop#B-2)>|M}?Y13`_3j38+9pw;ISNap~a!zp5@%PexcU))MW#RR$dBw-|SQnl&9IB$T{Fh-1X&-G&O zAIOn)yh^prMIP5>#{nq`ZIr%1Z%^<@u0wSyv}G-?#m=sbs8PMblg=3WQymgH8F#1K zogT_%cjH#)pVK>9I|IGSnR{!__CA`zP!iP!HoF_vKTWm~S2N(zMekZCF&niGzKXnh z8aDcZKr8w|3YJ9KHGPb{agJ*jJhJTL$E3e!O$uYbpyZWML^+4MX@A52!qVZ0jrXDC z;C91za8=G2S`oj{lxGYC0|<`{ZV?(Kf<+>jhs#tbjua+Sp}^2oFeSHzeIy^=smzr|Lb|#VC9$387rQ`y>(k~-R^;P%x>HY z4E3M!zt^-+-5hC14aW1L_u|V8!}JWkIXY$feMVIz+9lR1^zci-!*G!{Wk+(%_k}*oe`fT zj38wjK%Gg&l0HX;YAiN1w$eIMP*9;YI(jx{_zW1{`TM=DTC81dLx?uGxSJCf@0e}> z%F8tXpDV82^cHDr)B6)+flG-{I)}C#35b!wq8DPn5d+11IXpM-eCko>^(uI*Tpb-B zX4`s;X|~zVNo3b!Xbn4y_-nsTUs2l!Nhmwk8tk^_Z;1FHSC7!uN0E?C&3$K!ED_l& zG=dVD7)ME#`kl)A#K5k7uG{5ewa0g*qr||HL&1VTkG8%g=)@pA#*tBdRlt;!x3HIU zpS7!YBccV{0<)WJVA(zw}*Yt{T_bWzRRMe_8)kq(FvBm%s`auJBavohA^d| zA)vw$R~aFE#D!SSd>+~+sR9u8*!(&v^_QYzvaZA@MjirW7?u1`G5{ucE{!lbKt`MSP zLP30zFoFVm@TN@8VTgps$+(&)6WogBnh9VAH@$l^V@5eB>aZ&<`#-h53sFepG&28d0`%-@PvbN^ zDgni_(4+?n42=;}kv?Es3kF46cxV&;&hkwTuJPRtWcKd{*HKY1!7n~Z7{bq3?K8sf zMqCmTYcRXbx%8APbT|6B+43`y@ zBS)0QnjG)aqGHl|@kzn}`Tyxz#Gyfm4bmepkSu&3@k^%*sI$^;?B%zEj$OdTkGtok zFcZ=g7}?*>oL6zZQ4|85h6XaFw(*Al>!@iZt2~0wOI1eV?L8=AZ2yj5t6*dtKEmzj45C7_R%-gXO+1{e9&V4Cbgg(Y zk_p1-D|=;W00J=VFk(bUH}Ah8VRjL#*6wXDw{ue~(rL`X(B{XG=wwTTaWUMy3U6Ng zORL^@5N_xCrKY+Kc<=#%J`!lcuPctTgdS!pM>7L(}RL z_`SRYpS?#^T3r{mvQx(F>9D*8S%oSO6$%U?XM#QJUt3J9%hu?+I#a};A(t&$iTMSW zm9<_o!>Pa!PPXqFVTI!oM*FUft9>9(Rdv;(iHb>E#U}|P@rKb^naV$)PX&Y%3f04c zf?eO)vrSpHe1Gf_i&p&n@w5@uOc$U6L)e+FB#~|TaLtaKe`JEV=oPl3v;QI*Vnx@e zzz|}lv)N3H+M8Y#p+{skF3wy2Wd2ushNgtQ`HFn|x6L@s969-xqy}-}N`WEV=}7&M zNTa!n0=xj@<{m0@{Bj2~UZTJdV#aHSlVqNY8scsX#DA>Nc6BRx)qPJPt2W_tm`Bq2 z+`xwEPAK#T*R?ncystJF`Bvsw+`ZN-ZDkI^?h+esypaXp-<-*PU9*u%xl!!?a8ttq4%7aDJk+)VHy}V#Z8ET zWd!Ro<{~hPKLWWdf1ch2ItWqeueat@j7Eu15{8D3E&r43g#*j99F!`tkvgSaF@BdJ zVEOWp6x%J@q28qK({3h=J zmV@I$sK7{^q=eH)ah%31`o(uX`Y9M3eM72sNj6m=7h8wzMj|kTGdG=RZD~-v^q^Qc z@&+RdlS^~Y)UR3j?vY$1kpQUj8#Q8caAmvYp5<69yQ=vy7Qm}`Avs8SK zEr{Qm8_Y8G%Vh756*N0)RFcy2UKWR@=q=@ zlYE3!!08ZEiZ{Jz#}4 z@kT_u%I-iJu;cO2B3>O0IG9wBbRK)%gk*n{ClV zMgM~@IfL%`-T?vc|HdnssL0M&W}OeD=$;_V?AEBz0{jN`9dPWqMOGx?LbT|p&}_r* zj#_yFN?B1+2_KlyOa%Xw%elr#t9i5{(fZGgMK#<+xq@_Y|KbjHFYUn2*DCz!;%U11^qloD?G@D*g4; z=(h__@kzoEPCA~L%{bc5ZwcJMDJUG~bnF2TZLdK*s{}a9ln&dorX3ur z;~hsFy-@3Y__QPfPc+%VOPXH24Z%B)O~(Uy3hP<%fc#6#B5qkv!!TIDM*`mN8xw)p zj!@s3SOzOUB~o3{Xd9)l&?$EzNExp(@lowld457fDpBdLF9bA(ED;znWVQtWg-(&% za@b(ENRRS(kOc|D0QW_yz1gC_Al8|v$h%cVOgOiwUEwyN%-CeOB8iILi4S5e0--{y z(D_xeP9I<@CMwhl$^P{Nd=QP3E93EDmp*RBwdDBqVV>L&4dJIG2_Z^;|n!LY= z8Da&75HnBhgQQ-5Xn$i=m4~<-#5;l^u#MG+kD0N_K0m)Ts`nL` z1kV{?HgIQ^ohJFbJR8hf<5?L(fZ$Zr1m<%<;pg{^avjL+Y;UHttKpr%1t>@>hS}?L}SM5Bv@sH=5G4974 z5=fb-`|uTFq_H_UY4VEL&E8fmqg%1MX z*YN$Wn=8TWMWw&qkw(ec9{x}jx7hAW5lvTARD1X*?H?y=|0}$HM1=;4iToRY&F)P% zQ!|l2U}o{#DXd5wCMqUpjrb&C2sh)M#0&Kkd{T|&nWb;Rhriv&xso(4-JY+v!8`Te zFcvOnfC3}iYr%xzhRz0!jFPw0P*b4=Jnj2W+;XrJQITdv-ULI1mbrP}l|9_-7FiKy zMMh-C45=5yXPAW16cr-cmIp}@!? zGVHjVttk3-e0Sr@B?Q!oe?59}Xe8{u)FF!Vo3m!#JXl7r*yuAO3btYT&~F!p?R~c* zh239*85QvRGqUDCOz*?4ClhJ$WpEg9h+`_y@knZLU#`%YE0i8{A&%|kL=u6azA++w z*;F~Qe_+fED-phlaFY}jlgC%Z#aQj%xfz$nTQ5Qi6%`^)2M#wrO5Lz!v!>*R8De63 zq=X7KnKlK6@E4<1keV*ao-KpILR+`?uj8^F=BBCDzGDGACy9y)V)04B5Ms6+#}Z;v z6qPeq6mh#p%=()8Dts z>Cd>p?I<$l+1mS9%khqOMd6p+ZN@Dzcu-2H`hT!e>lGe@I9E|6W1^8_;9t({{69^8 zaqTK(F7G)h9{l{(RF$Q`P}dnR%1YD5wL(stcU7^}(YJ3yWa&NNUg2wxpj8&|q*dms zFP_tej8cqEul$baF z9-cc>#v3~3HsP}p?o@1U)uVvVWfY`=NYwp7RhuqHnyE^hkkJw8l0Io^y-W+wBmL;W zZ?XK?cHWwy{@BF}?)Dj2ef~v@zLK4yk6u!9$@50*S!3qh_OnXCN4JAt@l-#pVsZm> za-9cK_8fscCsY&*>%r9UfzgqHND8 z2Q|xpCbK`E352I-r#w4fSt;3FL$+RQ69LKvs~@s!+jdPXYt<}U3wN&BGeA1h8Xzs> z<`!7?5g;coU)(qTSu^QKOBYY>NV}?Q)h#3NnxKVjyqs#|jFwit$+v_~P8|JtXnOc) zk6*MTZ?!s2ta?)p(o?qOYM$NomL{(R2j*<8Gv$l}A&0}PAqN(2uy)F=jKJd7zr5!j z|0c$KlGz`mB8SUtRH*Lon57E~<-=oz)@NJ#i1+nVTealR7aVGPjq(Syr(ttT42Fhz zHlWy+_>TTz$3HKVd2hgrL_)K}pYm=g4aAE6L4gtTXUj+p450CF)O9bm zKCo!^>3w7V3ZW2?j>fVV45m*}UF}qh_ z2q)tSl;2LjMw`qT=bV#OI(e`E)1vJ?H13SO_an2TMS&4GZ8OnMdn(6;mq`+?_K-44 zq{w4S9FU0#q-WLluvO&5VHJ3y#Ljk4qU3Fy?XJdt@@69{CI_VWq=^dQX59Og#9cRn z{uRNFSY;eMR=-~d2l?uNuMN`$*gDu zmU1F6gmVMtkBLAMW z;+MMBhmY`CUU=hhg$CBfX1iB`q2Aua>eJVvTlS0rOd@e)Z-j|_AKSO9Kwhs!#bgzT zPnxI@6()zU*XrAxM;HR}Z!>}p>uqsAv#mS*^Iw}0p*`Nou}`=0-BF81p9)7@LA&~c<4N$dZ{WYrh>pJ|=mu>%GLPODuT$W0U3H~iV97Gceu6?(s zR>j+9+h2j9ZZVu^XmQ{87H7%m!8_|uf_SxaXPq(N?x_MCzS4;@z@;URdYMU|T3JYhmj zfsxcsVQB0*1U3H%_7(;=^zQ^|<9-y#WGE^o#Kb2FL&O-fVG>Yn^bf1D0Ig6ev;%j3 z9h%(^_9!a-^#snqjI_4(|GL|tKpi~uiAub)O<``u6p(~P7}iFW=pGc+-PNk_)`12W zHmn1O7ZusOfwaJ%^LD-Qaht`S&<4n;U{&XPF}J0v?7kbc_sqSOFO^py9}NwDkhUA zK1mp&u!eZ%YNC+2CguM8m*~`rm7fV61xC`TPUmtaMyGB>wB9cu5=t|(AlUg&U-NEJ zXP8A36%#VzlZ26E*b$J1ks)7BGXmV3XNd6l8DhqF6c`ZrKRItX(x}n}U5^L~|F4Gf zJTOLI5tFhn+NMaa3Ji6=9<8qWC=!ZPMiOV_0A;>O_n($Yv77~Km`#T356`Sn2gm87x;j7D6eN#AUvLVIfuXgh5P z?wL8XRKNRwMg%I+s?W6L*|pm_6m|J@qhsEAowsN!)8`(uX6s#x$f85Gw>lNt>qVO$ z#@2=%$YNmrcOpRb?lglulQk&IZbPhZPpOq$nP7{h zR#Ksjsj%qpRmB=xwZp%?eVOZcG{hX8jxsl%s)ebwYX*)i(5JZ<$TsQT`fX(dz8Z#~ z0>m)I-g3Ie$M~tRvZ+*bUBKthsptWlQN2oyXH=baJ+I<(#;)oI_5P?DXOj3Js4bDH^ZMVw`r-WR?XC@FxN@fN|Q0dChn{A-o z>CV@O5e6)%c!BP@d*WOjY0c-`tqhiBeJ*37&knn&Qt)bDdN&GE&e>WD72J2Lf4XBgW4wc9H?)0iVtM`RFM)_>pZ z)UkLFNVUXg>aiwv{i!dr4`YVgQIkeqs&sX@@i}@eaBk~{uT|^TXS&Z zDlno$?nXZp!_36p$u#0(hOE?8YP*eXOS+PwtHv(g=Y42K`FwaD-gC41&z)N3lHijl z5GON_bmoZN&yU}DrwiT&uMGCT(9(j714WZ|89eR@1G6>}-VY7v0M_y zjq06&$7jfnti_gQwCco>fzjBbM}FQ`{bpc#&watriNMQX{)yFYjOab}3ItgawL>zrFC+4-!0#z+Zd|E_3+tN8WwZ z82M(bpW%DVXiT1Vn-=api%VLONjt084M}R%f8m3N_B)o(mSbs3FK7pGP(<}bdq)#( zVh8qAEZG^KS5Rn|qQbNOw6_kdWnS9)UEe!`skNDfKg0Q)<2RzBb=oxW z(};gy$T0kd=KU&7I;-G~#(v@24uB;4y6f*;)rwd}ATFboGL512bD!O5d%d^lA>R@@ z9Dkzu-MM&2afU$*Vp zZdtU?Ns1Rf8CJ|H9zP7CqstDfl<5{&`Jr@^brCCHaM;1zxsIGLvL)(l;6sKw@S}gS8x^H(!1Bb zHl|(s^UOOCc=Y;IG~gHwA!cfojHP?5hjsOw2Wx9rxt@;NTaO@F1N=F-F<=jy`u46? z5kf@0<{kSFZH-Oq#T#&dxA=AXP8;1-+>F&2xBveF@R$<#x#r9CEt2a zp@y4W^=<*`(ZF2{9*a?@ZVEdb#LAPcCfL>f(GeV z-)Y_fjHTwned&9g$zj!fI7mfmBNbXy&HsOG=X?JNp*v?XnM@|hWHK}U z^P&w1zP907yCq8_(@Qa7ZYbpR3$|+t?@Y;#%_fY(@~8&%t-WCnBB-Uc$N1Gfw|nRY z=pnaMlgg}lQVlmY9HbRBN`;c}aBZg6$G;hrOrC!a`Qu%~sHWo}?0GpAO8O2S6@rJu z3{yIwPT!T2G7(*j8FS%!p?2VOY4ay_^sj+^rek}_6R4k~v1Te^8}Y6q2iImK*V|xq zRJ98ovki9>y;jXcV<-Dwd!;|<8TJ6t)IrWVqL*rjbQmp+P25X z89rEtt=l3^dMb7DO zI7W@9{Ms1j(HCEC&Hr=;$~uOtEo~MiJ34J+r&dtbug`b+Yf5h{DE+XHNHnjXu3k`V zbZr>5+Fe~%sl&D3q*~cai9Vz&hue2Umx)3(af}(L8&oLMy8awEU?1kSi10~SQK(UE zDh<8eFze`Hkm?qD9@gkv3u&e@aQ2evN2Nlkn=@12j@QB7c`2W(9=NB}-zEQc^J@?t z4ARR)$43^J{*y>&JIzDHufv>lO{jR(1PuGOrEWjk3fm8TzH3J9N#+Sb*#*Ro-fV~t!mZrkn9$fcQ7_>8RhOw?ac#|Uo_vAha z+TSi&cxrc-U)0rw#4F~e)QN+m!&YTo{Mk(J31zU;oY$f1lcbZ}Nj4ccOHdPTkDWhh zSt8!HERoom9*VLD-<-?X@ybj1iHVA!oiT412iF$HH)q;jOgjh*&1Uzuxi`)BHmVCi zIpjfO9`|*`3jFtyn_lmZB{QlSxjblHT7S#fF)|vST6=swOE)v#l&eLwD|#J^A`wPi z9G+rUg+tyE>MRbfVV`;3>$!XBr8tFHD*$Ip!E$2q91gCDxV*0npS%C`)9frw1e>X~ z2z-$}F*^PNJAs>v6Zm3#V)#>6967~dQqbOuXkTg%uDd`Gv{T3=^)GwyT+f4#*1Wsi zpcH!_y?^eSO~gpnRVJt_Ik?uNM=sY;b4h0?EMHz4CevuFdRLIcnTl zS!}z(8rL={=`glRZvdoN7qs>2$fPS%ucd`Gpv%~)$pW$^BXEX&2Z8V8*flxf+9y`z z%83=Un;FJk_TaH^wk`R3d(!50w;q}B1Jp!c$!bGr(*&5R_ep>Eo~UzuL6iqgKPHSy6o+O zGp|SpYJ(@ht}#-E;1?BuGrlujXtfMz!z5;|?G&zsu9;bM_y!!iCIoW-Eh@lHn?LhA z>S`knt__ne76~lkscP_G&<5V$@AwcM(98xkT{}0+_wunpX=|w3AUrpgs!Uu3XjJgc z4Qv&n0xF1T_NrDL$f?lAM@(hgIZbDO?l!W3gKHd2Wodk6x&cR}>n+1>^}3pkMxX76 z$?Hg6WRG2^zy`AfP7L_<|x8Rby%O0FR^4n@q zjvrZ&D@(6`NP#mmM@s7NZhLSUw{^jhq0j%B<4#>=oVgB2^#%t=$z@Zy?zg^RnwwZn zLeg9{6yNoO1f5~0pquJVd+@kPT~4Qp#Y(8QSk!c9KoY{vP6}6PtR8dlc*0JF@+Mc3 zgobIcWo@~4ig)hD2MBxGl-9OY57ZJVc7DeWArKXSvyJCp^i3-cu8r!rYd0rMOp1%{ z{;i+*q}DT_#`4A;YyFw=Ei>ucUER2Vq4i6gz+KA zsLeFtIj*>Up0W6h+gIvdcR-r2LA=#&_A7UhmM1bFY>TUv(;b%-`#Uw0Lc0ghwx=>_ z-x8HLs|{VVCnIef8sYY2za0zTf0zXOdC#oF&onLDn)U_EW2>S5fo7;DPGln?2im zQ5sP{&Q6W=h+S1o#qz@>x3$cl=--xa(vGB^UdkpLoby75c!TnEUyo1G*>E_s8elXj z{uF*7$K?=EHf>C3ZKB=g@)_;t*TgO|=f z>F-dFh+1uMc$hpYI{aSlJTza~QP-a&lqIpS-8jlTnU%c#J(E=bAx)TOwoDEu{<_+T zYpUagF6OC>3zfpJo(->@;Kyu?Y|N6|%m7Wib@0-LNyiJ->cPO=jj2%b92?cYG^G|8 zaJTB&CgT!d7hTK8SknlW-_`DHX$^n)JBNI)EZ=gFlr!$9+jnL4h7Q_updGx;TP3NQcjc^$8ZXI##*&@P!I2?h6jnKax!v|dysAiKdY2~>RtDwztBCNq!pP?V>!b# zNA-E-i~ZHB9J+U>Z0X@IGbU(+-6X=&6JZpM1N4}J&Ao{p?esA#X`?H@Z@~~X;MkOp zO=n(VPT!24TBH_7^TwRO%Ml+6cz7tGv4F@B<|k%8ks6Ae3S~!owf(A1jg3mNJ!9Tp zS=dp#3Dhp1UD&-dzkL3^H#k1{YF?w#JX`dcp8u34IcHRDr&bV)A8-HtkffJ1rnwj9 z9V-;igGYB~-%;PFJ67iGg+`%76WDPf)eY?55ya+A!q5?T{$N2 zHAvK%e{DbT52K;YP??HQ1i%*J%eL=SD4wSWC679eDOBothO*O2!!%NrtA!v!dl^kD zMQ)6{=0EteK{0J<=AL#vyVGHv^Ck&rj~;CovHoYS#1^Q64FkW^*&-!;Ct;*Q*}Uad z+qpsS4N6nrIhETCfQ`5sZ?rIJ8!D9ByM|=zzT_9)hXi@tnG%>$V@+o{uUu`Obnh#g zBuDu#2)8Vvoyn=HDN-Gb6o&8Au66pea~2iK!@EtUZ}x#f?{U+tA*HL^On)Dmj#OCp zEjY@T7_sVUi4E}v!9Q)vugqM|6qOqmaUP-OjzRRc2w|Z@i62?@PG}`un+-Zwm;3DvAc7Y#FnzX>;qr2c0&jXeI-~9#*{tWe;lFNr? zu}qukrO%zp?+}Y<%^uPI+@ho4f$!t`4}NsQ1%cI?{*j2MLK(Qb z)zBIPVP71RWqkAgF7=G6Hy=$jXSHDP&?vA7l>1~px^3AlvFB9J63AJNCMwaW4UcSX_}ilqGD?Bta(j z5*2t0LNF5%!ETFJlVIvP}G|LS6q;?e@jKmpFIQjDtmX(;NCSJU|Qq=sEu1KL@XJuj`TU1Q-DjaSd6 zN758&2qLWc#pqxp&i5KW&6~0OutF(6t3$;{Yl|9XMbha6M&is%8xiXmX&aG;RoXR6 z-ef%tUBUb2%?R4XJTcj-0q0cCTPH9QXCWJ$m1z!A zp%gThj6ZI;Y*4&+9vSj-cPed*oQL48d~gCU@fWed|BUccp#)wJo^kIFRN9zH^&Yu= zC3&dF=d2SLiBsDn!&2eh_>h+u+#c%Ax z7UKQ9PNm{^eKLrxjkbILK6Cbr;BiPYJN?`A^2V>YmauNMACji%3eGBna!g7#=OEV6 zc6VD}Jya*Fw##U#_13Hclod*@0WI(Jd7A@HhSo}q*zIe(5*Kwlafb>eW6z;scbnim zEh?%jS3Xqno*>*=R zz$CoH-+=D+tU^fc;wlx&y7BKa))h!YrzQ}aKxeVdxJbhpj* zx}%Q=KChm3_m&R^RCg@U!AP8W(||Uv+-y!7b8Don5WVgy!XOkW`Pau_dh^iA{>+=y zV{r9dwQ+L(=~L>jc%O?hnu4|yDARjE$*P`5app}^;;%omuCl$ubQ&FIJDr6Z);(>> z&vvEEGWU0A_Qc;Ee!Y(>%1#Chp8WJ!a#Tvk27Tz{8|vDAYU3ITiwA<9^8|6NBcj>) z3*%rl*74VwWKqAKFTA2>18`3FR6++M(a#1AmXr-y4$H(IKN&;17B}C3;ERd_yy7Pb zBk^WV3Hpe3utr;&fBuu9n7%Ep^BCCLCD=-jw1Ul>ikOvwE<)tAlj+5@a>ull)c#X zWDUz#eN|dunac&LG0{tf((-T}*P zO*u;E4WB|^|0ur90hNLG#kLv8*x<-;a?#g5;7JZ}&uw1a;QIbsD>b4nFrrjE{y;d? zL`0pcSo6-@KU;7H9rR}SxCuM4Znm}8($a1uuDaEB_8{`gkq_A4TGK(=S;U6aNrvvH z%e9BG`089GAVUobUAP`JChCq3hD44rpgAeVJj5?sWn1m8#r?D!+~Tq z6`*sU29-)Sg9qws4&p=KP@xoF+xDDWcicv-*gXH++ab*L>?Mfhi3$D&|G*Y)UFGf{ z*u~5$996nr-jqzqjs+q!IXYR=w2pugw{>KnK7MNA#C3A96%_~5T>PYn3h{)6psEXir zq$N#$iXUG2A+{3zR|L1oMW0cj49&CV%Z-^ZXoyOTz{*ZvMY%q30#8)1)1WU#5ji_R zKx80Gm`A2(6K=O?zoeNmdJY)*ZCX2YRa9cs`g}@gTglve3O~=*0W(WftebtCOCy&f zLvBxg1uKiFNIG0WGJ;_sVrFO*qWk&x4yMds{JM?th@RwYZ9UmEbmxpc(4?_*dyO1n zx~Uy+8vzl2+G6{xLQq?YpaL9ql4`PUTy7+?`xnIE~e~PWEjfHV~hxMyA z!5oxy;MvTjYrq^7XT`K19kHbLR|64*wkdsPJ0!Z#Bmrblv83@0RQ-{fN`EHsKKo+0 z=`dFB3tf&cf~PNfr#lnqU zQE||O_({T06E{FQJNjBuwF&GK7L1N3Lfn49{RsxwO9n+$93U1yNf<($ix6KW*|yM@ z!S+sQPNo5QIs{@;UGFlebJ7J*8UGnP+e+&4mWd#s*4WQ~8}!ksLTCTjwfgaWSdW^G z&oXZI6SlfBeNhgFX2h|ia9aWFy3Eu^4K-n$R5MFViV?TkyybfgQITDB0z+N>K`5AS z?oWHct{EQZHS-CMgPD(Bsv0;E5%2UvuY)0+jP{;sf!O*yQ`MBa7cWNdo}h!FCYTAgBh)Q_HuZuIXJb7iUZ=sPZCCAzQN|OPh?O~po-A1+<3s3ENxu5 zYXv+5Ma4lA;wK3soA4slm8w2o+Xt$4p;UAOLf5FTlYs5rna zev&W}cUo-Y^xMQbUpE%4a|RZ(qR&?+Z#VllR+x_V+gTlq#F+^=Eh*sb7U)MZt*QOW znNmdkN(E0RQHc?|WG65ZZAwDxVQL+Lt7p{_C$cs;?AdN2+;T<50Vl*y5=Nr$O6XGt zn8W>$QZdm~oY6m~`tauSaAE2Gec;mSaqI@2$*Z=>wmoC$;AI) z=ob|S^oyS)4B@^_)AI#pI}&A6a016GlrDjp1N1r=iJmUEL3(IJz5cYuha`@?Q*C0I zN3qeP5Ff`{ae!O=Bw-}(p+tIi8{G29uaEKZ>{gP5m-Eq*s5odz{3KyyOCLzVWU^@q znXC0}=)7zlw4sBMZLnyGnVTUGk{P}sEqbu{0s2OC>~PSC4n{U|ij+;}R)KwxKd}W~ zL$Yue`bKz+iJ>AR)lf`i-Nr`;BO4*Bza=Ab!P0o!FfGySxV1f^_L!PzLR1_yA%2oD zvI%DGaj%c4?12G#@^zsl9N^Z$NZhxH{0x*l92y_w*QS#~VB%Fpm-Ns<3pyCtf{_F_ zYcoU>4>J3+A^4YObVNF6Mh7FCp@6Rz4+@c~sOAU<0;~Ji;r`SCgr(o^MmY6J*2AsgDLfk8yPF(!mgC+4@7LB{hgvX4_@f|IOUs>z{AJ z@OG;FpJpfEgcE0lUqbM-$x3vr(!opoU1{f$7MCqp$sMg&+(`;&6H#%%Q1O$5A?$2J zS(B7;YGyrP=XG=f^jXgWGL&Y$jNXqLcOj$OZpaY`cLGDG*;$}9EwriXAf}xz#}jua zoPnox%&%~UBb6wAk}!mroycjkXyce`Yg^;4)9^=l|73}}J%KJAbVq0%j9|5zkBkaw zU`b&1wB|T0fgPGhl!)D@R6kew{=K({*_fuMb)RitGw?BW0xuhCfe$Qc5GUNWA#D#V zo!49J-M2nv!j3oLn4UIKLk9HHyJzp_1TNED9e1{J*+{9UDrY|whIy0TXOZ+Qo6jNgq zwP~r@^2ena`tA7dJ9sUg@%UDcWADJ1=a@B^J5FFEYRZ(Y68#Xsk;Et}l>T}1uAQ|Q zm)u|SFZ>XX$Qusi;`E8P$qKu|f!6JXrNq{cFAQoyd(jb2s7i@|2)}&y-y77<_8>Ao z$%KA6+^g()V^HUU01&SU6gR}#F zM&;zGPNyDC3<1v3G(l|BZ|PtNCyS6xPZdRqwh9;!jR*WyAueo0#esZ^pCpVNWKG^& zZ9D`<`>gd(_=V6VV{2yF_1BstpjCJ7tGoW_>?gM|$bKXKbPTNe+@QYVyw}cf6+L&? zOxghR(zL7iu{l*fGh5IX5+z3dP<#DQ{dKQ^m-}!HJ~Fn$_6uEyI%2yHhPuMiZLmRQ zQ^%G)eBQ(BKvZJX$DHjN3&l?ohH$dCDdo{6n0U#QFVh^F`bHu<7R>7^8J1(HJ5(rX zPuDp%?l}Cr#@_9`!&HaTHc%oq46qXzYH1o&zS#&+ODev%V=k8(d0qkT6`nMJwpbf` z^Gv#l_Z+D=9Sk96OCaI-7crj|ci;Wl>IVj;{P}g$7k+E!h~GLGLd=$JM&JalA2ecX zMYnywG7r3(HY~pT*RK_Y9O2Z#5Y8jOq?V$oQ<~(+b`1L{aVggRfSK}@NABrytKm7K zKfUN+2)N{lI9Sq@QL-vPcDv3Q#{t$dCUj0?cbZFTEL`&6k zK?fsoGS7qL_Be;TrTMhU1(q1E$=^z*EKPpex^tlphH$biMZ?E5r!$Xm^zYAsi+aVuxFcRk-hjc!8KY8=@ z3V-3YsgG%wAky|7M&g`E%0h>eTa|%x z?Cv9*3jK75QwJk)-gk&oUfCCFTvh3sf`ZZO>VhetQlWI4c_M0f zDZG#p73>GNtZEDBu8{MaTBd)6%oNs2oE0UDp~}`e+l;p&GoVZnD7&?Su77l_5_U{w zZU-6b~ zr|u%e;-#Gc&yBbi(%d-uLj@@f$uE)WwkbLxZAKeJQtT<+y&oXQq z%hef`E${h94n{c3pC1E@^_y-`dc9BE_tm>a26ct~s1__Rw&J9#tFa5(>36zc#Abu~ zm;Fe}`yKvnco{8SBt@z`nEnRkclxLw6#0}cYdS~WU9oGwGQ2KJP1twCMSL9|1~_@$RKOt?Kw+jj}3 zo0$W$_0Xr;OI|L&7Q15sw4$iQs8cvjComG{SIiYlCRjVMITfxLdS4O|Xh0Da2Wm_F zBw=J5O=v;3(yjGVW+|TL)i!;tgLtE>KX>b32q&{imLZnvaQ3}?AVHF>1(BT54x6(jwCvly>73TnooX5 z`#*9P3!K$mo0H@@sCMF{XaXZM4RGPQKwjqi(UzI+Wz`6K%H?zrj+gpPlyuuHwW-(9 z_GNb()cG8X_L@^>C#_s&jaTJx{)m*dN~%g-P4Kpsb)NF}nn5X2`DptChv~_gZttdp z5j-_()^}T+WoLN%bm|7}-uFqnhQ~Xk$2jTSJPYj0{mQEi9G%lYFr9vw?u%rO<~eF> z9^)Z!4kGI3w4ClGroNKk+HJor_~mbf;{%5yM99|XeJ(8>|4VaB)wY|iJRB{tPHEr~ zle0mdAJA4lH@y}Orc9<*jiyDjsg;oHcDhSg*W$+KOTPUU3xmWMt4#n~5^5}YpKP}o zil5(|pJpUb=u`765;}i=*3@(dw=^OSaK8_o&-KbhPg!&sfx`N}zifI(PZ>jM_0P@$Ad$EJou-pynWwh4GvOO^>vi_Of2t1+c%JPW9za z!~pKY#^7_1#CGKPoxl@*X5-t(cD~j;b)o(|O&xO?r$V`VxZI9UC-EXmq;@9H&H6Ow z8=y$YrOWt0(G5&Jq9X!Xd;=$lBn2sm;ymapqTnaWqwo39GgnU&{nIGvq;{Nix=8D!|znK5)Q)N8hUFt>H)>*mTf)qH2Y zWk`6wtvCPG*dZ21nJKd~}M?=un|FKXHC(DgOlM*P6fXSW?itnOpcfa5{k@ zoXlH<><1Q4;iT}tacRoi84FfevNlC}=>OqvR(HwnU?_DkvO8_SB1;Zy&K9jVWXRFq zHn05D^7+f(cv~kb4w@1_Nf_A_c~n}`Tbq)u7m0?O$FCcYtD}v3=Y6~}-jP^}pCpWE z;KeMAB79kqwUSt-s&*cB|J_}AK8O)AZo-v-Qf=t5>#n~Y@J0tCNLR}eZ!+l<2*VTvx0nCb zmNpWzvNz+d5&x?#(OYCo_C!rs(~9Z2r%MRyV1RTmQUF*I%(QhVVM_ox_uyJM(d_&0 zCJ2R^wPb7?0+$E>p5zMXs0kkJX`%@GG||xn*TKjRgkZHLWrg>3cpzd%8+G9f+yl>! zc#5k;z0tW&IpCEJMl|)}3>$yjrmWp@&=NP}j1-O$BOP^02P0Zi$I-O$s1vHHkzw$_ z*AI(MYdGkL4o0G{Oj9PS;8QcR@^2n*|JCGwVIh8Hv6AnkmH$r0;+TrDw&H^)1(9L; zN%CKHgvE)rc+~BI2}#a-di1)HbTAw`7&#ntQ)S8AC?qU0!kH%iuh{hB9W|1vKAwU^ zs)6KK*AH%jI`7=>CwJ%G^?JBL5fuj=5kE;7*%6ASV@YRiqb_&;P3$4~U-dz4!G^l2 z8Shfqa_;c$$bZ*F1JYQTDT7zI=6$Fia9tiS2Yk}O2tJud8xkHFMw$MgdBXzz z@qXj~cRQ)rJjYv`kZ@|JjbHe`ytmPj`X6;C4KcK%1IvCjmxouc7Q4^s5U)$i}Unh$=u#+7vN;(*7!xt0V>_%;*f)__rPwcd?u4)c) zRs9#9?Nja%E@hrqJYZVNpFpvXs^BB_AU?-YDjxsvM|TlJ-v8Ow6faQ4hjG?6A_)9A z2iH!f+~~Cv>1eX{IDKNzA!g8E=s(ePO$8gcqJ~C>C0gsbSstd>524Gvrp>*;+{4&M zPw`BB~Gy;2%kUpg0Cf?8o??$&#lxDy|`8&dsY(jor{Q_^br) zN$@T_Y7>2=hnM&%IyHjy^$rXS!vjonKjJMr`ck2oJ2YP8GB>GF8Rl}Q#Hy1NwCe#k zy*Ys)+@;Z~xeF+=WHE)Cl@O-+Dd3d|GB>+9)`0!gWr8@3D>k3^(eki zbO6@DP%G?ZR}t!QUub9G)TDx&DB#@m)$i-itpm;ir!_{A6Byu3sPrGiRrtSk4Q^Zd z(du)E?X~aLi@_txPXQM*@)6R+tcg90>>q_uRBJHsC0;00|8)#a&(k$P_nbg&sU;Q zWV)lNI~&#He5^HdaYCEo+b;h^IK(xntN&bBgZtt!x!y&S!7a$#-xL(=r;uM&E0R_! zlp{M2j{o-0M?4PR*gGO=ZMt{c#mCnPjO@P_tI3rmm*5#DHZ2-l=Z#lpqw+fH%Z1Hq zL-gMoo>a?1p@We)wdjqmX39Lm3gz69luZWiL5N8&!@1$x48Px|QhA!s(fMkWzI{fwK&lIfiaJ7ocqt8f2XQfgb z`AeZ4n!WgftB&La3|*d-z04F0^CJ2VCc*dFFW6t_`^-a(!cRt29B6FulZ2t}?8#iZQ`2Ye*5+*jf-y1WK@b~aT}DgC{h5bo45ctfgzlkL8o~+x^78jqTIBmpb(6| z2l0#wrS+acom)MI)FkV9JNdW-j1~CGJ|Y)zB*A1KL6Ks{JNZgBH3Cf~%J2Qc2ny8K zAXaG}SgppzA#i+rx%I&5TklAhEM|kke*PC2iFqB!g~qZz#5aeS*sEteU}XNv#i&PA zD5k0Pmlgbx&8WEug4~EUH%IAX?zGKi4{)i>m(#YnZhnNx2W@VsVpCSV4%^ zfsyr1#eY|a)p&KCr%m#|@5+X4IyN+NsMR?wT90^67lcd|74WDV%yFFS-BAPAH6C%&aaVk6KvccO{VOqxJDXhW zj_4Ji&3crPR4=!q87{v|I7{PrP zPKiC!CAR&kPXp2bMS_=1)*Bw#gQx0M155iN@&as`Hi>#|g-eH$XebUrH+M!MvQa~w zSns4$%gN&(ka32O#?B1YS;&T^JxfTYE>DLPLTPXXM2b zYUc;(o2A>X?aw*@*JGj*qrT%xlQ}q2p@jN>Hm=$SFKST{%Hjc`p+dQua(m6ul@Mt~ zR3wX^Qu8UW^Tk_xFu6ELW`#0l#)1XG$Kj_dD%8VEi8*5Hnl8X3ylmo8YT%p#1qA$T zH${cgaZOocjW=%%vO@UTsGo5MJiBCaQRy8fE0m!tmc}(1i7Qo6Q7KefB3b3fV^t)f zRt;($d=8Kz#0V-BejSXL+oGZ#w4bcHLpCIV(UkzYY}W-BwJzbMLTNC!&x+5K zzk&T4h)4jVh>Ga7HqJ6xm#FBeUt9ish65wuW+W;Yp`M_|oRXwB8y5>7qKgVeCZ-h? zA!t5yfbg_AK=cSjymAvy^$oh|EW{5)$Ga&<2XDm9x2Q;dr9=cpOKO(tcOy}W5iHRpQhK+Diazt^#e>PB3XK_LP((#9`rNz_Dc)5_8q_v?c(k>F z`?StQ$gFe2c8-}kSI!Piu@=pJXx@HrxY3A;ektSEQ3J%4)d2E_V!TgI%*w)fUz~VP zg%!~qH5a)eqd`h4WV0ZS1TqKqxT@1gwF>NL!@+p4wWRwsA$ zO=naNJ+4|R)u0*JJAUArMH}bT8AEDctNI3xg691bJ2gbQ5`{~PCYD~?wsp;W6OSH7 z)vNV*Mx#KZ`jKPNwg#D(`d(Z-3(@Esu9 z83kR-yyqP|qJP6ePocDfij-PjBGSS3NzHV^GrYuRgW|E>{eFk*wPm1mP0p&OF7W(q zEF9yyPntP>L+=0w+o!^n8n)Yc6yAo}Jvzr$@8x~~vECDOShM*YrlI)Rb1p(t=#QkuhAyckGDS(=knD1Ec!{}FK-juTVW3w^^f ze`os@wyKfSw@QzT60MVR-`jBYub){eA2e9co-CsyPwP0rC-c-wGqL0i8koQ5=jDhu zdKud_V9{pPs#&!a3x!<9Ppe$M1AWsOw|{(DPS38a zPk=R&J2d{f_rYrDk)h9$jbAwD1Bn1xr1=pe3u=kDCL)z7zAtXL`&_thP;+qccQ6h& znwwpo$6E{{U#$iryp?aZTq=nzo)fN8SyU(Yp zu)fV*B0Ug2Grz%>QSF6VBGP5hF6rR}jX)sUwrlSB{heGkLmOP5(`HKjYly6Ul1~|p z^cv-s6{{C|6fse)iIg!K`GCjFEU(J|n5fato&QcXZjHN9snPpp@0OQ5NF6co`!uar z*@Me;j0JjRDto=jRgz%_PM%BZYI|@Q1ZQse)+JlwuCPf+o$m*V)MEBCr25q_1NThc z2UF9>wv$F*yDPD8BEXVt7^MP@7dKj!`z4!1Obz^@ zLqcs5A6FjGizV9)sh%!Z%Hs%Ln5TjAp?(^kT!z8BQZOwyX)6X3Sr{zGHt7G=z?>w(Pz13Xqw?{8B9JN z0No}gV)9*in+yoYGvzfOk7o|`U@2>v3L=9eLNlre3)2q~x+25E$*zh6atMecS1eX2 zPX^p-(rG_D3a?#xvaQW^9)p;4gL(ucz_Lcs*$~Fhg!sc0R+tsanrbVWWaw80Vb@b0 zU*5v47bt5^17+*_pL0aA0XMo_HYnp7wl9^Y3La+rau6SqEGiWFVl{Tymj!LgzBPz& zwc5aOELei(j*hPNrhfsWb=PZVE`d}ipZ2&^e6gySQK>n$pnsheicxLH8|r|6R4SB< zW6oB{Ryes)>0henry)6Wvo)HrX((o=2pX*kW%S{9e=_aIZgfU?lkljF6vn--y?W8X z(6BN=Oott-TAygJ4T5<${nG4rSHNttAb-i3gZgI#&vd(B9gNV_D%+QGw@jOHct0-e z!{MMRM&t$Ws9{j##^MRC|9BNz9Y z@vU_#qw2@86d`G#LMc&nVaeNn9meCQ#OufGF7oc@!hfRbNj+Y zj7t7GnHGkQtw0tTMmaukO^~VHeg|hTprNupCVNfbmx6ArV1MrTB z=XJ3$3-XibB&58nTs&}GrCFL{rfW`1YIAr{WC+uLkQcgWV1<&yuXM8M+hInSGI3#z zr4Om~qxcb{a)e;0P!<&3UTb`7JUSmU_EFKc8=o4~a-7ZDy#E#Uet3rC&>m&;Z(3q0 zV$oVpflgT5%;Api0n=>C_i95dZcX_R@R-qTPSQ=H`iReAP2_a&at@OvNc}_buIf7? zoC;;h^s{Y}dEkQMRQ*nFe%-P_h zIZu-NbGps^<-mea|74wZuY)mPe(&12(4|gUqcF{A%Nb8;j*)rVxZUbUBl9~r&B;AT z=BDrORrDx`gprU`h(J7Xk_shj@4|t>vyqDKk$?KO!wMrUqt0p|!kjCG>TKNOTOt`# z+H5dgfQ_Dj^+cp!9_1GtEkn4eP&TG&T>oYT=$cWM%5|Pzg{H-nW*?TohpIPVK#LQ2 z8Zo8<%p~caV&OzWJuHQO!Q`Ir*N5yt2k|>Al-u#yle=8^K<>|Lqx)X%niHd_TdQ?2 zvYih!F;j49({NsHd3E==vIq(vzxHn2v~G=ob1k1IPGBU?J*2)^h8kC!iSN_R>u|N~ z1&m6=G+XCqt=CDzsVN5?jKtX%T1hAzO*;3wotsgl2o!hdpl?4{`JUDkjuRNd$;QN; z2D7j!yr*9Pg=90atOxAfLR6q%Z#6K8#fTNj6`|m)=V%#WMpWo61jCqzFnT1$hyi!< zsU+qjW~W%XHIXm0wQ84a7MLEm8RQi@Xf-=KfsssmjE2=oG;p>y+;t6N%e@STdD!&+ zQrRmNpRh=h+A2|5t`a5+I|9EL6RtWC)7xZSFxcNplUI8?KQ+B4>Du8IU9Yg;@wQr^W z=LD`zGFIzi&VQPYZux-BT%NFe;uy6dPg?Hb*b7Zzr)c$ScF8^m&KiW>Qv(rs29y^U zbM?NH|CB-8&m|>{R4Aofw?8;D2iD%3hT}JWp1xub_j4M^&2^bK^*x4DgIm%TnI7lE zYsXxC)zKO%l_qlV>Z-Sq8su5@53}j6Jl<*}$MdovZ^oAARqkIpirhQ-?XlF4f9C3S z0|t=#m8N<7DSHiSS`MON$=S4X+Jz<NUq&+yje>Gy`d9#ZMB3(6Y=qUrDW7Un<=o?oy#V=)a-;s_mFy z;X8U2&RlpCX6|rIad2J3IXuS~@2l-`-B+=S>-ZX>lZ^Vv-9w-F%?>z(q+hr4wJF;1 z?HcWzl$N+Yn#SFgW!~cHw^m#mS+7`wKgh*kt%z068H`jI$DyZ13awC522?0_#>WMj zx8s47sK^vrPGBU?pM=vICSQ}!6fFl;_uK-jOxAlLnRBIjkC9vrK(NON4B?cysnmw{ z68Ff(_e#>jSoJLL|8g015T-G}v*hP_iC65bW~;Dt@RH^PjFEbjhRfFfOxSM}_tuey z!W%7GvR*Bvm#yW=fBVNj^S?pEg=K7#HMrD8nuBZ;L&*_TKQ6f1dZq0bhqdulliQrO z?$R2#98#5Nf(^@a|M{xUxKOw`uk7cs?%t5F1{^1PYh99cFw{jh!6*ld+McselgNFy zo*X-M`Yz&@RWCoJ%^g}-brVbnLpWsybG4E^&ZF-ZyhyeK&Y4d_vvqLu@B*E>cYrz= z!g-IB%WM?tV9CSsMkVR}A7g!Ki!R`ckl0c_8iLf~eTvkWGtTYKlYA?=&gslQkt;tLUA-~o`j@zsXTx@! zFm>jiJ^KSw9sL;H~;+ZFmV2(*|v}{kG6}6FumtT6?n19^c{hGdSKuM#b zmf5_ZN?jiZ=AV>1Ynz8$M!v2!8-Mw(E}D<2HP*kKG{$VI+S)v(ooU?e-40x(h>8Q7 z$AlMi*6sMP#-NCb-sW+zz43cs6hiliir(fS-F8Jqa-I!oHhx&ttTFvlu05jkeF?5w zD-I~rg{9Y1HZ`u_y)_xYR#DMYChn@O@dB4=R);|lcZ-X^UpPYBn2VAfg$kw6#_P*^ zPQz7!sK~1VZNlsCuyu07tqpj4Eh_2+zL)DuYK96$>_cQl%}d(KcCFLr# zbpk`e!&E-=HudDfquF}LJeWOr^HYGlHKfWdGABXOpqm2Voysrgj2Y34or?sFs;JDzvIjXyPJWDty)9P;PK^n1rcJTW~xnZ#m3iN#X6w5-Kl~-DdKU?2X9lXR(w^eE( z8e~^BekX+t-=eNGQyMyL#)GrtFPyE9Q<=~zK-+XTi8;)KPnZVB`sueit9S9>8O1E)oU3zEzgzQWS zUJXw_Pa?sW(>E0vxVb(MvqE`3^J9^0Rf^+UOZE2JwWP99ozFq&RBEO|>D2Defu2*5 z**I(QDf?WGRWPczc%$^}Q>8))y;LWAuAKH+hHWuxSx{(wNT zLb)6`%`#5GjmqN3KL`1B%579r^Vv%IYWKSjvp=D z5Y{u_MX47|JDnYk9Onb`n6wTRO7{4lhX%LD*(CU0dcWTlvm4df90W|T?mw#~HFSKC zdB2eR!;Gag8qDl$@rVqApK_onO7#n)YY|tK#l)imhv<9zRt_$2RQxTIzNYVAhv^6U z)SQpT9U?`X)|z^FI%PzxFYK2#H^)p&$iB@}sr*aXN7U0W?jQpGdS~tCNqcd#om3mieS})=| z*+SSlFo-0H59C{mM1TU^GQy1)mrXVf;MscI`uMy_exp+C!?~}Qdz6v0gBkHN z1yE`qxHrPMCGQek)E?9?DwI`6lUB-h38&imI}dzX_Ph|a%*NzCN{d^t8Yu&SG2vwb zD}t3P3#a+E{*msI6asTs;$S-<#>i{%`&&-;Zc}rfO)@z0TTVP4Iv5CeLVoYaaMe55 z+@n$j@382Io}nS-OP4L@9p$Hnphqk{D*4(Xkf9m5yaMsSAJ*eUO|Ra)d}XOju=3RN zzA|;>@rPuz;2KUNPX|MDi!q@YA@?K=gJ`N|GMt9v4Y_|$u4-IujP34Cw=Zev0khRv zbxOvkm0)XBcK`*3DxP>vg`$I@c1GbB^C@C>DjHl042V^)4F13hrD)q((UUtCLhgC5 zv41Z-OIL7Zm~c9SA;iqPjVWC>BEQe(>0Iw4m z;7usuSiwM>;5jt(j<@aWLAv_2q~*Vv`h*5V(j!+hMWr^=O03NLy}J0MlQ^>%nOWjl zlVudks3oYw29+(;1gM9h-u0w0>4d_P0=|5HEF3c0vM#yn=HF`G?KV_P$$OiY4BXCB zY2E-bewMk38ak?}voEoRTetqeU36mlg|Aawy-Z70T9P;B9`3;?vH|B&|CS*SR;AV# zuaDcolsV&fP5S5z@zM67VBZW^vhG=qO+wS+okn~8V@5Aq6O4<^V?rH_6qQt<6Z3^a zy;Fc{^2VW#vqI?`85&#wg6JgXV}vsgiGpo(tv6Ly#0`&v z=!gnw0A?kl_jYOm7adL1r00dG0K7jzwxWJgWGr-1GjQ@yf2$3OsHh{L2>_xABTwA5 z2yQ;73J31Hw}?!pu|#kaBA8s-5`pVXB7)u^K&sp9!F6G41o%YIq29Fzm+?47h1kay zU@~V5_GzkUcY!v(`S;>Yf)U?U-jU z#HcA$cp@(Ia}hT2mG75(yX0*xqdK0@*p8cwG2Z1)-DJ&L=AwNe<$vHqn~zI^CO9(8 zxmWDz-C;?K5O_feUWkKhg2U4t{B2NXdfl8lw7oZhe*y{SlGvN6xq&wkG2Ev0mqGb< zK6~K)WZp)#AsCbhM7q((H{4J$EOQ~FI^DiY!na51n5AyZZsp7Y5QoqLGfAhZJGdBSKwvmE0UdyM>P49*JC z`>R%oKbC{QFVf^^1YEM8(lTIp&A_)~jvT8*-P=#yyGGq>#EAiStZOMhWx%A|uU&kh z$*v6~_*Mc}>}eNXu?4jBMvcPwCaCfVb|v$g7o{H*H;%h2OpK&W%woaB*xw zA5)=-pJat5HZ5K1KI*Pjmun+4E6Pf(K#-A|WmzYWvcT9F&s;)I_H`ID?joC_e!aIWGTS$O|Ol2>#Q`j84GW#ogg zrS`*LTU27yqWC)|o`(FNB`Lms`3LWCL`5yZLD)2*LXl}bM1|U?4TxG9-BGKcK(pFY z@}n2_s{Q8VFe>}|*4kFxw<_Cxu?*t z<{{LSbsjNG5f#dV?tT1n&-iVSl^8Vz0Kq9IFrruHfe$KfSWp;~< zx4Ua2u6d;U4%Wq4_qwA=M$;3kZFeI&c-deXOk9j7Z;=|&6l9A>*+K$KL#{+cGSCT( zL|lUq<2=d_f#FOmvO7~MlnPt#oeVDV)*vem|qWGBv(Wh z8%1;X{i}Xl@>TbsO++O|4dC3?ChhM{Ux)Zr$6Iz$0aff!afKviJqM4+Kin3S^Mh~e zrtPr<5*2Y^)jTkg)u^34{wRE$MTH1vi%(gg#B+0sXhcR{3Zlpg<)=@nzv6u$+Ep@k z95rwkg#xmk%_vQ-N`(^ks7C{jOSm#^RK9Tk8GfJW#Kf@DC4$8*G%PTL$4YWh?-9?b zP!48}^QyZL-eO)KCQb{;@IyN!R>RMhR0w&=0=a`4t)+qIW-aa>0&kc(FLVA#@r2SI zMRPu|;{+87-)CYl-`Bq1Feoe1&*=`6o@*9Pe7OqVD#qy@*00+1oVCp;4hIH0;{^wX zkf@o--HjDW&Pg+WOnm?wP@8%su75g}7mVmb`p$N1#&<@e4GND8Hq{{3Xp#pWley^A z?4?JRgLjwfg^=1&CvO|n-Mj;uwJB?8cq6aIiKD|gzjFyfe5-D*kF#{I9_ z(bX3$+h9;4Qa>IWuxT5ehw4*%4NxTH`FE2H`UrE3nQjMJp&Y1KX>v<<*gT3oZJw{q zw{+UxL~GeqEu9j$sZd6Jt#f@wdg!PX)s@M$T2dTwYiFFmkjSwm;2cRYk5gf$n=V!; zQx}=LWNwTlLsUc{7iTbpvkrB6D+(O9O(B6%p*?yrW#LYLr$RZ}Fx&ZIoxUL8av-nZYD)KFFzAblRCHQQi06~D zgiKrqFG5iP32YNVar0DWR&`+;DZZPEFF$#6g_ZEf5EV(nb#P2v>}sOZ&gVnAa~E%)7_W6xKqPX5YC`ldIkEjfrbaZ9#O`*Tcx zSVwoP^}X@>UV0{4Oqr4M4h-T7G8f}kA<)EJQT@V92&l>;zG;F!uJ)YC-m|gLKVITD ze%UgL8DEQ!nG+ad7)>5Ci!iK2#?e`Ge zG5{Y3ksJa;$1r~)WqHpYe1DP`uG!aPKiBK*nu6D!>}EQKwlQij6@7?uS2G!6SfM0e zdauoUU!<8VJY(yk-)UN~y%HOjP0+Dw4FD$6HJ@h}==nSvo?{bpt_fK`T;8p{%)iqL}L1i0PqrL-Tw(AzB8J&n)9j z@{EZLxd=xbQIRv$35>vLre)VQ&WNkcy|A!!DzT%z0!@APL4dAu4roUy9gM_Wfw(l3 z=8UcPL)poHqFWR=iPtpNilkOE--(|jjF5Mx3e|0#tJ{ggR46YuPEK}V3+zuHuLreB z*hvn7R+a4pM&hhac(~p(rzFXsLMi9@s#MGzL<GZo%FZV|9J8+xSuJ4$YxzPCwXcs}17-m$lo9^sy~FlZGb%Zfe_rz;8aX9} zP8vkxeu9&rnT)s}J(jvJ-#PpW|H#$zwD z^txRWeb;SzWg>)|Df9L|d~Sx^^lD*x`0)~34!82hcVv9@*kC=HnBQTPSfM;jIdNW_ zTac5BUm6ZA*c8@QtI*TpVP-2x=SNGbANk{jH=onH_=i4V>l52T#L`$dit_vx5)hx%W^Q|53EqOCDg8rA61;vCMu+~#+Oth>IB4A?S=1Hd{=}PlC-%?;CJc=NzxT#8jJOFADXn}vOda#!;dMjKa6JN+aV6zm~R^8O{-q2y>dR5j}k7S zmu7UQC)PTvgbqf^Ewc|>x6Rtzd6=j5lw><`C>0es7o5NlPKpG;9^S+7MY(7r{LFaO zpV;`&v(DWK9Xi7JAS&=m0PdXUF$##=Juq}cA4}XRUhDG>=kbj6;f!d-%$}osAVr=X z%d#lfu%d zsfh+#qvnsKUaM!G!~3Oti+@#p`idSRROC2|;2&=I)WHx=x^GiAK*?G1;=N&LWN-l1 zEo+eWNC=8vME0KR)Zocan|d- zD%6GiIBf!)j4iBCS|3iC(zG9Y9#IkGv7H7)FES(y=>-HWT08G&77w%x+NLGDauDl4 z2Sdm+qbKGWAi(0vLOz0{52%M!C>sj5x!HL;Y#e2x<0A`9rwvj?-a{>@=&3AI+HHP~ z2)s=yTcTT$RV1dRaQLmO`cY+=kCzMnu^L`GiQl=t~DV>{V-jr`J4|B_i_?zJQ z%E%TxzUrm=`gZua)esa>p+h=@ry#BB8$NlpRZ@USc-hHKHux`7oeE{nk{<(amc|=; zQHfEfap86XBXM@2rNBxv<`KU_k{NAfMc6F(4HE&%pJYYi>`p2;qlx9X42&|7_BQv3 zq^Ke`r^7sl%Ve&e9vXb5`m$p3L5LY)-Gn%UkxgWw6J#_EjjK5|nq!4Bed)nN<&MH9 zx$yLq>j&*K0%s18nn*y+CkAvrz4`~{?bdgNepke@yot%Mc?LMa3Z+)-rezy-MMQ^% zH-au6%3Og2VkKB@W)3B+RogHE-P*PAb;*s}pFF zCc$()GU96gU2ouXPq$8BzQ&%(@9s?>k{Kt$ew$8t)*RlPv4?4!P|yYoJ_}LJre<_~v{wxoxbU0|4hXjn96eP|!EKSIo2re9}6 zVwG#g6}!InevcfT)`|?mPe1<)3^l;^^9xB+S%;z(;iN+Ob^LTh`)N<{@Wonj5RzT| zBw+;37fEP%BY+2Uq6YZG3T4`u(8xn348@k_zBzZzp!ng|Q}uajmkMQad*3ZRM__{P zU({yFo>O=lZr$DQAT>gTvZ3$%hR=Ru?b#7Ip?UJJJlYSlud(yIOGIEWq79qFK?5t4 zIR#&KToeJH&t}UP)!XY&7jxEjwKKq%ON)1vKvX@&u->cx&B1tyW^I>F>g>3#ROse% z!^?zC+=iwT+9E#_N}N?uRI+jlP*85l$N2)e*c zIv9zQa@L7J(3*~~)wM+JM&BSE1HGOlACVj8RB;;Clun0tuaiw#g1w3H<^3rk=iH6L zSBfr$+0C$W>~p3=bxQ!v%_6sQtn1!P)1QZ^S>`F}Y7>xliy_k`rQOEfUgrHFeK znXM<3&|O8l9NzXlNeTDw1D96Eok9Jd8-85bmJF|DhmW|9qcc6I%Q;2&oetZun` zOnFAaC_tIn94`UnP)ypT?%$yv5w+UjiLIyIkPn>0k!xdPt5EfsW z=4m2mKDe4;bMv>`?)&b;2e4PvOVT4l;}6BQy~Kd%ZeJvRgR_+LB96LLKF})4<}rgtbN5PaUrRm1C5(-iF+)jjCR78Vv>kmJ1f$)zi&GcnU{A3U zO#fpVm(u+LL;BGJ5ZmV;;qa6wMJFxfA`JJYM;Q^3&}!jW|NVO>^4Mn2A3CC=kk(Gb zJ}Q(Ghr`y!eMLC3K7-qvcAiIK9KPC9Oj zZQBFtEES4-^LqVqgyR$@D$>kNCwX-$r`ZWS@F(Q?7bS*ZMC{oU^ZBsu7`5xL7nue( zDP76csMMZ0Y>D?DH+08p@^k_tL_i%1>T$M(0nKd9SSurcY1HP;e0{%i2qv zTS3de?!k%K-Mvs~(*va~X^RypT#CE9ySux)Q=qu?0>$0odnP$K>F#p*-apd^ zc1|)$CN`N&=+2M4_;Ykn%DNTf+srA3ID>cN@~QUbx1rE4e4v!a-;V?V=v8wXut2X#z~XXoz(|uI)|B0 zUX8|>nEd4PhnpWDw)Hj1q8Ho41B279^2d69|Ij8oV-ziJmC!gr!|W>JkN!ydhYiyk zr&|eQz|8B{Z#{fV73-3%^hw5SdVWmk_e@<8*vZAFzpCue8;1|!@H}v4ikn`i~}>nW}!|48Z={gr}2>q`{4)ez^5DZ2ff)!c)uaaUz& z)8db~s>WP+sFI7|XK|O0Cz7L+o-k%Uh}A#eQp8$pu;u3X66;9qv&x413lF6!jO}*H z*JXdtm-V&%Dh88UzERsI79T^wBiqWZq`O9&A@lQRS`NRL6PX*n?|S9QAL2)6oU&~B z;Xcr>RL?7R_!TCvR#Udmeo(e4WKndIG8iGky>9X@5LrCp7_v<%i}Dv9RTM+4$<3nZ zWyY3+5;DL;n{V=U4zzaDK94~Ht`SE4OO&e2yvPDT^@P9xf z+~_Vd&9tvcBZ;sOTlOmXvcSrvKnO1`Gu9m{=eqv;E0(`#V+!yR&gESea%gt4KAYfH zXaZhRvJ{}qiLfqR3O;n7f@)KMmy#^HgnP=Q?$ux|PJ$KSr6r5LB-Q0bmL3;A!;qi= zFC$seGrdiaI!KSD3VCZ>Qj z*!_h^)v-aLM-b8(&p(sJMi=XCy7C_VeK6TSZIrZErLwP}Fv-B`Fu?5Y+P-10;#+L& z@R!iODT?1BSH>?Sv(Tx`&g@NQ7JeAlz6LQ-FQ41GW&V9(%nSp+u@3d%=qy4_FWR5= zNSAU`h0CZs1uT24+ znj97FK~+hFeG2_J;mtodOexUj<=u5x5Xz#UWYL}1y316)>Zum_$KIs2_=rk0F3^0l zSJCot(YtII}u>|NJ4+3m+9^WkWIbwi+#Ys(M!zah^4baN zH?Q>YIi-%$#Sr?-H#)OhftIHXpD=k&oPUL?iP?j!n!KA-2;KcEwf8BO=r9h{xA-*5 z7URGl-4wNW)Z0KZ=6kYxMVm z|F`6F7*t+e+txYf$NR9hJkIod((5SURC=1UR6J021_;%oTiu19s=Nd>J9(w^_;L}T zZ@*WcxPVQYTHelHRZFz{(#QZ5m5vgT=3jWMG+$6pF(1j%^*=G?wAZOG!mIRl-Ni-* z1b(FLL@mf5U52y$x63faiXhj5zobQZ3$;9iqVt>(0QE&qo`SFsSAW;~G^;iu$mDLg z!sqQMl;@6YI<30@_PN~q`UMl%Iv*7`6w2PgC@9d*||vE zx)QmHK>WicyH4@G_w-e-%D^l)F|_{LUvs?eysIq!eh1L04R{T@G?$79zj^U>u}Iy-bu&Iy6w3&vB#E$~rcWE@zt+IcPObO( zHNIP*D3(x9dg)b#bKjT>{6tvh4sIWO=T);a+y49g9|uv?C-XpTCGikpNAl#X(_#{M z9!Fd?c#o!b6~Ia_IpuBNoi_Gy>+y6s9?KXoB3n1oVB!21eJZ~)dFAm^bMSydimTi! z_sdksb`47F(9>LatlHFP@ow_s65U>6x9_$5H+?JES+~VK6gc7+Iro^6p0u_>$!hL_Lb z-K4V%R&CFA)26~WH6|7!Y)6~Hds^(lMyJiPn0<LLKsC`#S* zQqX7Y51TK{P%$ko(Vu$uu}9J!IZ20F6Q>C2^sn>GDl6$Io*UV--o3$%^I~{M>q!2H zq(OKc&lmUZ5!(V|uES`$G00Y_{zP2NXcnV>3qZU?<7e|FEE>u<2kj!fO5aQ^EL5L_2! z1&dw+P0qPBOT1?ru+bO#u=NkCq}jE49vz3J-F=CTmHT)9>>K|q zxA85agGU>$Hx!B2=gr-z2q#}Bpz5B;nKr)FnWfgDVLOwZjh>3j4q;xK_#Z}8#GR9P zF|MSzony0&Z*xv1Z27FUZ9`|_WkS;tm2a0UdM@mp+q1TBwRN}|oa^&%)?|~7?{H>O z70kLMIGizo=Ru)M$*FBa(QXkbDe8l-KVwiNIPn1GFdYgTt@RONep8JVnqCA-M2Rnqq#+ z4P7ED4_*M45$Tb(_D@Y$;&qPBrD1JTz?vQZ!b53?kMOrX3}*Aoj77CPeR*Ay8M!bAbeA0wCakmU428?x1N@yEuK4vfi< zyG=zBW}35nHW^>;%XQaZcqmQL%570k@LMLwfnLE~eEqugq!!76Oax&SCxq1+S{`#v z(OAXCb{c`ehWwdKT`zH(4-0>VpocbgvgZBxVHw5#KqO8MLwt&CG<|vNW1g8O+|Rh% z*_EG*DsI1)OU&Grz{R~W{6pnn0fi&AOE@d*DZmETE8VWM^Qstf#dqSWM`e*uv@Yes zPlXoUg%mC#scs=!`6$gx=QeSdt-S_2b?0#;tSSn4N>$1yM0 zn~VW{x)s3$5YPvj=9pcJ{a!iK8BK5uZvvdh$^NCYQ$JZej@h~Hf;`|W8&ssZN8RQ% z>NcbN^m1)r(ktUbSIxtlizW!+qvW#aFFgNye$8sub}XNKyJ?t>DFB84mRh}XCJyY4 zu81q=V-wvkA}-$jF>swO`p!*#YNg>I5ARNkMz?5BDSI9)aPkq(vslY|je>rL;b04S zCRTaUV`}oI6_)(eGis2Y5n(PLI%M=Mmx~V3%WOr6AbcIeQLGpCoNi(mmt*<#YMJg1 z8U@d&-9M&hOOO()e{{8*G)4%|pO#VpJ@&isI|#tZQ55NKq^>^=eT^;Zv8~F}qnP1) zHU1nY#t%HnE=H3%O{TFxQ+=yMo+IIL>!ga+Ds|%hjRntqEwFCS8+}gQVoq6ir6whM7+R#ZD^?vxTCu7oVN@N8~ds zo)vJEJg;jvG1UYf|NiujBX$y9dr; zCWnq6L9vffRcZ7Sec!kqtELfR%7 z-S8+Rl}w4 z^pyf3{1W7FXjAnQQ@}C5Kg?fLye@%V4FjGJVn;)T)GL9G1q*wn=mq00Y~BgT4O=}zIahg%=o%CT9n>1d;M;# zuN3%0jj5k39>+}opBjsnZDuMe5tcZ(?slUk%!~?HK|no;hX~8r`%2T8l`i2_)�L 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 literal 0 HcmV?d00001 diff --git a/load_profile.py b/load_profile.py new file mode 100644 index 0000000000..cca9588993 --- /dev/null +++ b/load_profile.py @@ -0,0 +1,3 @@ +from aiida.manage.manager import get_manager + +get_manager().load_profile() diff --git a/pyproject.toml b/pyproject.toml index 3768fcb05c..652975c811 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -388,6 +388,10 @@ xfail_strict = true [tool.ruff] line-length = 120 +exclude = [ + 'docs/source/topics/processes/include/snippets/functions/parse_docstring_expose_ipython.py', + 'docs/source/topics/processes/include/snippets/functions/signature_plain_python_call_illegal.py' +] [tool.ruff.format] quote-style = 'single' diff --git a/src/aiida/cmdline/groups/dynamic.py b/src/aiida/cmdline/groups/dynamic.py index f87787460b..4a1e0eb600 100644 --- a/src/aiida/cmdline/groups/dynamic.py +++ b/src/aiida/cmdline/groups/dynamic.py @@ -177,7 +177,7 @@ def list_options(self, entry_point: str) -> list: # ``typing.Union[str, None].__args__`` will return the tuple ``(str, NoneType)``. So to get the real type, # we simply remove all ``NoneType`` and the remaining type should be the type of the option. if hasattr(field_info.annotation, '__args__'): - args = list(filter(lambda e: e != type(None), field_info.annotation.__args__)) + args = list(filter(lambda e: e is not type(None), field_info.annotation.__args__)) # Click parameters only support specifying a single type, so we default to the first one even if the # pydantic model defines multiple. field_type = args[0] diff --git a/src/aiida/engine/processes/workchains/workchain.py b/src/aiida/engine/processes/workchains/workchain.py index 1107204ab0..6a82a703e0 100644 --- a/src/aiida/engine/processes/workchains/workchain.py +++ b/src/aiida/engine/processes/workchains/workchain.py @@ -208,7 +208,7 @@ def _resolve_nested_context(self, key: str) -> tuple[AttributeDict, str]: # (subclasses of AttributeDict) but after resolution of an Awaitable this will be the value itself # * assumption: a resolved value is never a plain AttributeDict, on the other hand if a resolved Awaitable # would be an AttributeDict we can append things to it since the order of tasks is maintained. - if type(ctx) != AttributeDict: + if type(ctx) is not AttributeDict: raise ValueError( f'Can not update the context for key `{key}`:' f' found instance of `{type(ctx)}` at `{".".join(ctx_path[:index+1])}`, expected AttributeDict' diff --git a/src/aiida/storage/sqlite_dos/migrations/versions/main_0002_recompute_hash_calc_job_node.py b/src/aiida/storage/sqlite_dos/migrations/versions/main_0002_recompute_hash_calc_job_node.py index ae70c45c4c..fae7cb056e 100644 --- a/src/aiida/storage/sqlite_dos/migrations/versions/main_0002_recompute_hash_calc_job_node.py +++ b/src/aiida/storage/sqlite_dos/migrations/versions/main_0002_recompute_hash_calc_job_node.py @@ -18,9 +18,10 @@ from __future__ import annotations -from aiida.common.log import AIIDA_LOGGER from alembic import op +from aiida.common.log import AIIDA_LOGGER + LOGGER = AIIDA_LOGGER.getChild(__file__) revision = 'main_0002' @@ -39,9 +40,10 @@ def drop_hashes(conn, hash_extra_key: str, entry_point_string: str | None = None value should be a complete entry point string, e.g., ``aiida.node:process.calculation.calcjob`` to drop the hash of all ``CalcJobNode`` rows. """ + from sqlalchemy.sql import text + from aiida.orm.utils.node import get_type_string_from_class from aiida.plugins import load_entry_point_from_string - from sqlalchemy.sql import text if entry_point_string is not None: entry_point = load_entry_point_from_string(entry_point_string) diff --git a/tests/benchmark/test_archive.py b/tests/benchmark/test_archive.py index 2a01818ac1..4b1a091183 100644 --- a/tests/benchmark/test_archive.py +++ b/tests/benchmark/test_archive.py @@ -15,6 +15,7 @@ from io import StringIO import pytest + from aiida.common.links import LinkType from aiida.engine import ProcessState from aiida.orm import CalcFunctionNode, Dict, load_node diff --git a/tests/benchmark/test_engine.py b/tests/benchmark/test_engine.py index dad34848a7..e0b7f1db4a 100644 --- a/tests/benchmark/test_engine.py +++ b/tests/benchmark/test_engine.py @@ -13,6 +13,7 @@ """ import pytest + from aiida.engine import WorkChain, run_get_node, while_ from aiida.orm import InstalledCode, Int from aiida.plugins.factories import CalculationFactory diff --git a/tests/benchmark/test_nodes.py b/tests/benchmark/test_nodes.py index 133ddae1f0..cb619b6f8e 100644 --- a/tests/benchmark/test_nodes.py +++ b/tests/benchmark/test_nodes.py @@ -15,6 +15,7 @@ from io import StringIO import pytest + from aiida.common import NotExistent from aiida.orm import Data, load_node diff --git a/tests/brokers/test_rabbitmq.py b/tests/brokers/test_rabbitmq.py index 00ee662338..2417d27748 100644 --- a/tests/brokers/test_rabbitmq.py +++ b/tests/brokers/test_rabbitmq.py @@ -13,11 +13,12 @@ import pytest import requests +from kiwipy.rmq import RmqThreadCommunicator +from packaging.version import parse + from aiida.brokers.rabbitmq import client, utils from aiida.engine.processes import ProcessState, control from aiida.orm import Int -from kiwipy.rmq import RmqThreadCommunicator -from packaging.version import parse pytestmark = pytest.mark.requires_rmq diff --git a/tests/calculations/arithmetic/test_add.py b/tests/calculations/arithmetic/test_add.py index 90dd8d6265..925467eb0e 100644 --- a/tests/calculations/arithmetic/test_add.py +++ b/tests/calculations/arithmetic/test_add.py @@ -9,6 +9,7 @@ """Tests for the `ArithmeticAddCalculation` plugin.""" import pytest + from aiida import orm from aiida.calculations.arithmetic.add import ArithmeticAddCalculation from aiida.common import datastructures diff --git a/tests/calculations/test_templatereplacer.py b/tests/calculations/test_templatereplacer.py index 15f5bb4318..cad048debc 100644 --- a/tests/calculations/test_templatereplacer.py +++ b/tests/calculations/test_templatereplacer.py @@ -11,6 +11,7 @@ import io import pytest + from aiida import orm from aiida.common import datastructures diff --git a/tests/calculations/test_transfer.py b/tests/calculations/test_transfer.py index 367eba5630..3fc43649b8 100644 --- a/tests/calculations/test_transfer.py +++ b/tests/calculations/test_transfer.py @@ -11,6 +11,7 @@ import os import pytest + from aiida import orm from aiida.common import datastructures diff --git a/tests/cmdline/commands/test_archive_create.py b/tests/cmdline/commands/test_archive_create.py index 4a9f4133d3..5fea646714 100644 --- a/tests/cmdline/commands/test_archive_create.py +++ b/tests/cmdline/commands/test_archive_create.py @@ -13,11 +13,11 @@ import zipfile import pytest + from aiida.cmdline.commands import cmd_archive from aiida.orm import Computer, Dict, Group, InstalledCode from aiida.storage.sqlite_zip.migrator import list_versions from aiida.tools.archive import ArchiveFormatSqlZip - from tests.utils.archives import get_archive_file pytest.mark.usefixtures('chdir_tmp_path') diff --git a/tests/cmdline/commands/test_archive_import.py b/tests/cmdline/commands/test_archive_import.py index 90c524781a..64ea7a7043 100644 --- a/tests/cmdline/commands/test_archive_import.py +++ b/tests/cmdline/commands/test_archive_import.py @@ -9,11 +9,11 @@ """Tests for `verdi archive import`.""" import pytest + from aiida.cmdline.commands import cmd_archive from aiida.orm import Group from aiida.storage.sqlite_zip.migrator import list_versions from aiida.tools.archive import ArchiveFormatSqlZip - from tests.utils.archives import get_archive_file ARCHIVE_PATH = 'export/migrate' diff --git a/tests/cmdline/commands/test_calcjob.py b/tests/cmdline/commands/test_calcjob.py index a9ca84a991..2241674c1a 100644 --- a/tests/cmdline/commands/test_calcjob.py +++ b/tests/cmdline/commands/test_calcjob.py @@ -11,6 +11,8 @@ import io import pytest +from click.testing import CliRunner + from aiida import orm from aiida.cmdline.commands import cmd_calcjob as command from aiida.common.datastructures import CalcJobState @@ -19,8 +21,6 @@ from aiida.orm.nodes.data.remote.base import RemoteData from aiida.plugins import CalculationFactory from aiida.plugins.entry_point import get_entry_point_string_from_class -from click.testing import CliRunner - from tests.utils.archives import import_test_archive diff --git a/tests/cmdline/commands/test_code.py b/tests/cmdline/commands/test_code.py index d2f09c0f24..e84fcd1e14 100644 --- a/tests/cmdline/commands/test_code.py +++ b/tests/cmdline/commands/test_code.py @@ -17,6 +17,7 @@ import click import pytest + from aiida.cmdline.commands import cmd_code from aiida.cmdline.params.options.commands.code import validate_label_uniqueness from aiida.common.exceptions import MultipleObjectsError, NotExistent diff --git a/tests/cmdline/commands/test_computer.py b/tests/cmdline/commands/test_computer.py index 422a155214..cf8fb01df9 100644 --- a/tests/cmdline/commands/test_computer.py +++ b/tests/cmdline/commands/test_computer.py @@ -16,6 +16,7 @@ import pytest import yaml + from aiida import orm from aiida.cmdline.commands.cmd_computer import ( computer_configure, diff --git a/tests/cmdline/commands/test_config.py b/tests/cmdline/commands/test_config.py index 744d14d4a6..ffa744beee 100644 --- a/tests/cmdline/commands/test_config.py +++ b/tests/cmdline/commands/test_config.py @@ -9,6 +9,7 @@ """Tests for ``verdi config``.""" import pytest + from aiida import get_profile from aiida.cmdline.commands import cmd_verdi diff --git a/tests/cmdline/commands/test_daemon.py b/tests/cmdline/commands/test_daemon.py index 8bf5a9cbff..f4013e84b1 100644 --- a/tests/cmdline/commands/test_daemon.py +++ b/tests/cmdline/commands/test_daemon.py @@ -12,6 +12,7 @@ from unittest.mock import patch import pytest + from aiida import get_profile from aiida.cmdline.commands import cmd_daemon from aiida.engine.daemon.client import DaemonClient diff --git a/tests/cmdline/commands/test_data.py b/tests/cmdline/commands/test_data.py index d2b00c9c7c..28f33c40a5 100644 --- a/tests/cmdline/commands/test_data.py +++ b/tests/cmdline/commands/test_data.py @@ -16,6 +16,7 @@ import numpy as np import pytest + from aiida import orm from aiida.cmdline.commands import cmd_group from aiida.cmdline.commands.cmd_data import ( @@ -33,7 +34,6 @@ from aiida.engine import calcfunction from aiida.orm import ArrayData, BandsData, CifData, Dict, Group, KpointsData, RemoteData, StructureData, TrajectoryData from aiida.orm.nodes.data.cif import has_pycifrw - from tests.static import STATIC_DIR diff --git a/tests/cmdline/commands/test_devel.py b/tests/cmdline/commands/test_devel.py index 856073f524..6c30f4cdc3 100644 --- a/tests/cmdline/commands/test_devel.py +++ b/tests/cmdline/commands/test_devel.py @@ -11,6 +11,7 @@ import re import pytest + from aiida.cmdline.commands import cmd_devel from aiida.orm import Node, ProcessNode, QueryBuilder, WorkChainNode diff --git a/tests/cmdline/commands/test_group.py b/tests/cmdline/commands/test_group.py index fa319276f1..49b8018ab5 100644 --- a/tests/cmdline/commands/test_group.py +++ b/tests/cmdline/commands/test_group.py @@ -9,6 +9,7 @@ """Tests for the `verdi group` command.""" import pytest + from aiida import orm from aiida.cmdline.commands import cmd_group from aiida.cmdline.utils.echo import ExitCode diff --git a/tests/cmdline/commands/test_group_ls.py b/tests/cmdline/commands/test_group_ls.py index 4caf2ea995..f16d348579 100644 --- a/tests/cmdline/commands/test_group_ls.py +++ b/tests/cmdline/commands/test_group_ls.py @@ -11,9 +11,10 @@ from textwrap import dedent import pytest +from click.testing import CliRunner + from aiida import orm from aiida.cmdline.commands.cmd_group import group_path_ls -from click.testing import CliRunner @pytest.fixture diff --git a/tests/cmdline/commands/test_node.py b/tests/cmdline/commands/test_node.py index 66ca83b686..0e52708051 100644 --- a/tests/cmdline/commands/test_node.py +++ b/tests/cmdline/commands/test_node.py @@ -16,6 +16,7 @@ import warnings import pytest + from aiida import orm from aiida.cmdline.commands import cmd_node from aiida.cmdline.utils.echo import ExitCode diff --git a/tests/cmdline/commands/test_plugin.py b/tests/cmdline/commands/test_plugin.py index 9960db7acd..b0b0d9453c 100644 --- a/tests/cmdline/commands/test_plugin.py +++ b/tests/cmdline/commands/test_plugin.py @@ -9,6 +9,7 @@ """Tests for the `verdi plugin list` command.""" import pytest + from aiida.cmdline.commands import cmd_plugin from aiida.parsers import Parser from aiida.plugins import BaseFactory diff --git a/tests/cmdline/commands/test_presto.py b/tests/cmdline/commands/test_presto.py index 80c61eaa4b..366babcb38 100644 --- a/tests/cmdline/commands/test_presto.py +++ b/tests/cmdline/commands/test_presto.py @@ -3,6 +3,7 @@ import textwrap import pytest + from aiida.cmdline.commands.cmd_presto import get_default_presto_profile_name, verdi_presto from aiida.manage.configuration import profile_context from aiida.manage.configuration.config import Config diff --git a/tests/cmdline/commands/test_process.py b/tests/cmdline/commands/test_process.py index b70991aa4d..15ff8911eb 100644 --- a/tests/cmdline/commands/test_process.py +++ b/tests/cmdline/commands/test_process.py @@ -15,6 +15,7 @@ import uuid import pytest + from aiida import get_profile from aiida.cmdline.commands import cmd_process from aiida.cmdline.utils.echo import ExitCode @@ -23,7 +24,6 @@ from aiida.engine import Process, ProcessState from aiida.engine.processes import control as process_control from aiida.orm import CalcJobNode, Group, WorkChainNode, WorkflowNode, WorkFunctionNode - from tests.utils.processes import WaitProcess diff --git a/tests/cmdline/commands/test_profile.py b/tests/cmdline/commands/test_profile.py index 07b45c2818..f04ffbd1e3 100644 --- a/tests/cmdline/commands/test_profile.py +++ b/tests/cmdline/commands/test_profile.py @@ -9,11 +9,12 @@ """Tests for ``verdi profile``.""" import pytest +from pgtest.pgtest import PGTest + from aiida.cmdline.commands import cmd_profile, cmd_verdi from aiida.manage import configuration from aiida.plugins import StorageFactory from aiida.tools.archive.create import create_archive -from pgtest.pgtest import PGTest # NOTE: Most of these tests would work with sqlite_dos, # but would require generalizing a bunch of fixtures ('profile_factory' et al) in tests/conftest.py diff --git a/tests/cmdline/commands/test_rabbitmq.py b/tests/cmdline/commands/test_rabbitmq.py index 990fb50767..8bb443cfe2 100644 --- a/tests/cmdline/commands/test_rabbitmq.py +++ b/tests/cmdline/commands/test_rabbitmq.py @@ -9,11 +9,12 @@ """Tests for ``verdi devel rabbitmq``.""" import pytest +from plumpy.process_comms import RemoteProcessThreadController + from aiida.cmdline.commands import cmd_rabbitmq from aiida.engine import ProcessState, submit from aiida.engine.processes import control from aiida.orm import Int -from plumpy.process_comms import RemoteProcessThreadController @pytest.mark.requires_rmq diff --git a/tests/cmdline/commands/test_run.py b/tests/cmdline/commands/test_run.py index 32084c9937..4ad0111d75 100644 --- a/tests/cmdline/commands/test_run.py +++ b/tests/cmdline/commands/test_run.py @@ -12,6 +12,7 @@ import textwrap import pytest + from aiida.cmdline.commands import cmd_run from aiida.common.log import override_log_level diff --git a/tests/cmdline/commands/test_setup.py b/tests/cmdline/commands/test_setup.py index 6c7a668542..9e7be9809b 100644 --- a/tests/cmdline/commands/test_setup.py +++ b/tests/cmdline/commands/test_setup.py @@ -13,11 +13,12 @@ import uuid import pytest +from pgtest.pgtest import PGTest + from aiida import orm from aiida.cmdline.commands import cmd_setup from aiida.manage import configuration from aiida.manage.external.postgres import Postgres -from pgtest.pgtest import PGTest pytestmark = pytest.mark.requires_psql diff --git a/tests/cmdline/commands/test_status.py b/tests/cmdline/commands/test_status.py index a4b81dbfc6..babbeb8446 100644 --- a/tests/cmdline/commands/test_status.py +++ b/tests/cmdline/commands/test_status.py @@ -9,6 +9,7 @@ """Tests for `verdi status`.""" import pytest + from aiida import __version__, get_profile from aiida.cmdline.commands import cmd_status from aiida.cmdline.utils.echo import ExitCode diff --git a/tests/cmdline/commands/test_storage.py b/tests/cmdline/commands/test_storage.py index 59698343e6..9bbf6dfee8 100644 --- a/tests/cmdline/commands/test_storage.py +++ b/tests/cmdline/commands/test_storage.py @@ -11,6 +11,7 @@ import json import pytest + from aiida import get_profile from aiida.cmdline.commands import cmd_storage from aiida.common import exceptions diff --git a/tests/cmdline/commands/test_user.py b/tests/cmdline/commands/test_user.py index 0e6fc90137..d5aecae911 100644 --- a/tests/cmdline/commands/test_user.py +++ b/tests/cmdline/commands/test_user.py @@ -12,6 +12,7 @@ import secrets import pytest + from aiida import orm from aiida.cmdline.commands import cmd_user diff --git a/tests/cmdline/commands/test_verdi.py b/tests/cmdline/commands/test_verdi.py index 559d975515..9ceaa6a5cb 100644 --- a/tests/cmdline/commands/test_verdi.py +++ b/tests/cmdline/commands/test_verdi.py @@ -10,6 +10,7 @@ import click import pytest + from aiida import get_version from aiida.cmdline.commands import cmd_verdi diff --git a/tests/cmdline/groups/test_dynamic.py b/tests/cmdline/groups/test_dynamic.py index 3c741b8fe2..0019d3bb88 100644 --- a/tests/cmdline/groups/test_dynamic.py +++ b/tests/cmdline/groups/test_dynamic.py @@ -2,10 +2,11 @@ import typing as t -from aiida.cmdline.groups.dynamic import DynamicEntryPointCommandGroup from pydantic import BaseModel, Field from pydantic_core import PydanticUndefined +from aiida.cmdline.groups.dynamic import DynamicEntryPointCommandGroup + class CustomClass: """Test plugin class.""" diff --git a/tests/cmdline/params/options/test_callable.py b/tests/cmdline/params/options/test_callable.py index 59382639a9..2e5e1c8c8b 100644 --- a/tests/cmdline/params/options/test_callable.py +++ b/tests/cmdline/params/options/test_callable.py @@ -11,9 +11,10 @@ import sys import pytest -from aiida.cmdline.commands.cmd_verdi import verdi from click.shell_completion import ShellComplete +from aiida.cmdline.commands.cmd_verdi import verdi + SLOW_IMPORTS = ['pydantic'] diff --git a/tests/cmdline/params/options/test_conditional.py b/tests/cmdline/params/options/test_conditional.py index abbf2bc7af..9aa08b3c4a 100644 --- a/tests/cmdline/params/options/test_conditional.py +++ b/tests/cmdline/params/options/test_conditional.py @@ -12,6 +12,7 @@ import click import pytest + from aiida.cmdline.params.options.conditional import ConditionalOption diff --git a/tests/cmdline/params/options/test_config.py b/tests/cmdline/params/options/test_config.py index 10e026716f..81260a650f 100644 --- a/tests/cmdline/params/options/test_config.py +++ b/tests/cmdline/params/options/test_config.py @@ -13,6 +13,7 @@ import click import pytest + from aiida.cmdline.params.options import CONFIG_FILE diff --git a/tests/cmdline/params/options/test_interactive.py b/tests/cmdline/params/options/test_interactive.py index 05df89dd4b..cb5d76ee2d 100644 --- a/tests/cmdline/params/options/test_interactive.py +++ b/tests/cmdline/params/options/test_interactive.py @@ -12,6 +12,7 @@ import click import pytest + from aiida.cmdline.params.options import NON_INTERACTIVE from aiida.cmdline.params.options.interactive import InteractiveOption from aiida.cmdline.params.types.plugin import PluginParamType diff --git a/tests/cmdline/params/options/test_verbosity.py b/tests/cmdline/params/options/test_verbosity.py index 3573edd54f..dc8a3fe0fd 100644 --- a/tests/cmdline/params/options/test_verbosity.py +++ b/tests/cmdline/params/options/test_verbosity.py @@ -12,6 +12,7 @@ import logging import pytest + from aiida.cmdline.commands.cmd_verdi import verdi from aiida.cmdline.utils import echo from aiida.common import log diff --git a/tests/cmdline/params/types/test_calculation.py b/tests/cmdline/params/types/test_calculation.py index 5328b69bf7..974a9ff7ac 100644 --- a/tests/cmdline/params/types/test_calculation.py +++ b/tests/cmdline/params/types/test_calculation.py @@ -11,6 +11,7 @@ import uuid import pytest + from aiida.cmdline.params.types import CalculationParamType from aiida.orm import CalculationNode from aiida.orm.utils.loaders import OrmEntityLoader diff --git a/tests/cmdline/params/types/test_code.py b/tests/cmdline/params/types/test_code.py index 6b86949e3a..cf1f457f8e 100644 --- a/tests/cmdline/params/types/test_code.py +++ b/tests/cmdline/params/types/test_code.py @@ -12,6 +12,7 @@ import click import pytest + from aiida.cmdline.params.types import CodeParamType from aiida.orm import InstalledCode from aiida.orm.utils.loaders import OrmEntityLoader diff --git a/tests/cmdline/params/types/test_computer.py b/tests/cmdline/params/types/test_computer.py index c889d321c1..289ce12321 100644 --- a/tests/cmdline/params/types/test_computer.py +++ b/tests/cmdline/params/types/test_computer.py @@ -11,6 +11,7 @@ import uuid import pytest + from aiida import orm from aiida.cmdline.params.types import ComputerParamType from aiida.orm.utils.loaders import OrmEntityLoader diff --git a/tests/cmdline/params/types/test_data.py b/tests/cmdline/params/types/test_data.py index d17f2857ce..2dff371325 100644 --- a/tests/cmdline/params/types/test_data.py +++ b/tests/cmdline/params/types/test_data.py @@ -11,6 +11,7 @@ import uuid import pytest + from aiida.cmdline.params.types import DataParamType from aiida.orm import Data from aiida.orm.utils.loaders import OrmEntityLoader diff --git a/tests/cmdline/params/types/test_group.py b/tests/cmdline/params/types/test_group.py index eabd47e134..6913008894 100644 --- a/tests/cmdline/params/types/test_group.py +++ b/tests/cmdline/params/types/test_group.py @@ -12,6 +12,7 @@ import click import pytest + from aiida.cmdline.params.types import GroupParamType from aiida.orm import AutoGroup, Group, ImportGroup from aiida.orm.utils.loaders import OrmEntityLoader diff --git a/tests/cmdline/params/types/test_identifier.py b/tests/cmdline/params/types/test_identifier.py index b2e71af071..f80809bcbe 100644 --- a/tests/cmdline/params/types/test_identifier.py +++ b/tests/cmdline/params/types/test_identifier.py @@ -10,6 +10,7 @@ import click import pytest + from aiida.cmdline.params.types import IdentifierParamType, NodeParamType from aiida.orm import Bool, Float, Int diff --git a/tests/cmdline/params/types/test_node.py b/tests/cmdline/params/types/test_node.py index be6cac18dc..376c942809 100644 --- a/tests/cmdline/params/types/test_node.py +++ b/tests/cmdline/params/types/test_node.py @@ -11,6 +11,7 @@ import uuid import pytest + from aiida.cmdline.params.types import NodeParamType from aiida.orm import Data from aiida.orm.utils.loaders import OrmEntityLoader diff --git a/tests/cmdline/params/types/test_path.py b/tests/cmdline/params/types/test_path.py index d9fbb1fb07..8130828998 100644 --- a/tests/cmdline/params/types/test_path.py +++ b/tests/cmdline/params/types/test_path.py @@ -10,6 +10,7 @@ import click import pytest + from aiida.cmdline.params.types.path import PathOrUrl, check_timeout_seconds diff --git a/tests/cmdline/params/types/test_plugin.py b/tests/cmdline/params/types/test_plugin.py index 8ceb5e3443..f05660325a 100644 --- a/tests/cmdline/params/types/test_plugin.py +++ b/tests/cmdline/params/types/test_plugin.py @@ -10,6 +10,7 @@ import click import pytest + from aiida.cmdline.params.types.plugin import PluginParamType from aiida.plugins.entry_point import get_entry_point_from_string diff --git a/tests/cmdline/utils/test_common.py b/tests/cmdline/utils/test_common.py index 7b012dcc0f..926660d47d 100644 --- a/tests/cmdline/utils/test_common.py +++ b/tests/cmdline/utils/test_common.py @@ -11,6 +11,7 @@ from pathlib import Path import pytest + from aiida.cmdline.utils import common from aiida.cmdline.utils.common import validate_output_filename from aiida.common import LinkType diff --git a/tests/cmdline/utils/test_decorators.py b/tests/cmdline/utils/test_decorators.py index b2798c6ba3..baf6536105 100644 --- a/tests/cmdline/utils/test_decorators.py +++ b/tests/cmdline/utils/test_decorators.py @@ -11,6 +11,7 @@ from unittest import mock import pytest + from aiida.cmdline.utils.decorators import load_backend_if_not_loaded from aiida.common.exceptions import InvalidOperation from aiida.manage import get_manager diff --git a/tests/cmdline/utils/test_multiline.py b/tests/cmdline/utils/test_multiline.py index c84cd0242b..0dabeedf61 100644 --- a/tests/cmdline/utils/test_multiline.py +++ b/tests/cmdline/utils/test_multiline.py @@ -10,6 +10,7 @@ import click import pytest + from aiida.cmdline.utils.multi_line_input import edit_comment, edit_multiline_template COMMAND = 'sleep 1 ; vim -c "g!/^#=/s/$/Test" -cwq' # Appends `Test` to every line NOT starting with `#=` diff --git a/tests/cmdline/utils/test_repository.py b/tests/cmdline/utils/test_repository.py index e9bba6e53c..c5fcce0905 100644 --- a/tests/cmdline/utils/test_repository.py +++ b/tests/cmdline/utils/test_repository.py @@ -11,6 +11,7 @@ import io import pytest + from aiida.cmdline.utils.repository import list_repository_contents from aiida.orm import FolderData diff --git a/tests/common/test_escaping.py b/tests/common/test_escaping.py index aa5d21f57f..591345cbce 100644 --- a/tests/common/test_escaping.py +++ b/tests/common/test_escaping.py @@ -9,6 +9,7 @@ """Tests for the :mod:`aiida.common.escaping`.""" import pytest + from aiida.common.escaping import escape_for_bash diff --git a/tests/common/test_folders.py b/tests/common/test_folders.py index 2fc8cb902c..0d95023b94 100644 --- a/tests/common/test_folders.py +++ b/tests/common/test_folders.py @@ -14,6 +14,7 @@ import tempfile import pytest + from aiida.common.folders import Folder, SandboxFolder diff --git a/tests/common/test_hashing.py b/tests/common/test_hashing.py index d51c543195..70d928140e 100644 --- a/tests/common/test_hashing.py +++ b/tests/common/test_hashing.py @@ -17,6 +17,7 @@ import numpy as np import pytest + from aiida.common.exceptions import HashingError from aiida.common.folders import SandboxFolder from aiida.common.hashing import chunked_file_hash, float_to_text, make_hash diff --git a/tests/common/test_links.py b/tests/common/test_links.py index 1e2836226e..3fe7a3cca3 100644 --- a/tests/common/test_links.py +++ b/tests/common/test_links.py @@ -9,6 +9,7 @@ """Tests for the links utilities.""" import pytest + from aiida.common.links import validate_link_label diff --git a/tests/common/test_timezone.py b/tests/common/test_timezone.py index 8115007de7..273a86dcf2 100644 --- a/tests/common/test_timezone.py +++ b/tests/common/test_timezone.py @@ -12,6 +12,7 @@ from time import time import pytest + from aiida.common.timezone import delta, localtime, make_aware, now, timezone_from_name diff --git a/tests/conftest.py b/tests/conftest.py index 2166cc06c0..84969deed7 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -26,6 +26,7 @@ import click import pytest + from aiida import get_profile from aiida.common.folders import Folder from aiida.common.links import LinkType @@ -738,9 +739,10 @@ def run_cli_command_subprocess(command, parameters, user_input, profile_name, su def run_cli_command_runner(command, parameters, user_input, initialize_ctx_obj, kwargs): """Run CLI command through ``click.testing.CliRunner``.""" + from click.testing import CliRunner + from aiida.cmdline.commands.cmd_verdi import VerdiCommandGroup from aiida.cmdline.groups.verdi import LazyVerdiObjAttributeDict - from click.testing import CliRunner if initialize_ctx_obj: config = get_config() diff --git a/tests/engine/daemon/test_client.py b/tests/engine/daemon/test_client.py index 80a66a8632..f10d0b0c2e 100644 --- a/tests/engine/daemon/test_client.py +++ b/tests/engine/daemon/test_client.py @@ -12,6 +12,7 @@ import pytest import zmq + from aiida.engine.daemon.client import ( DaemonClient, DaemonNotRunningException, diff --git a/tests/engine/daemon/test_execmanager.py b/tests/engine/daemon/test_execmanager.py index 79692b689b..b0b4e4f1bd 100644 --- a/tests/engine/daemon/test_execmanager.py +++ b/tests/engine/daemon/test_execmanager.py @@ -12,6 +12,7 @@ import pathlib import pytest + from aiida.common.datastructures import CalcInfo, CodeInfo, FileCopyOperation from aiida.common.folders import SandboxFolder from aiida.engine.daemon import execmanager diff --git a/tests/engine/daemon/test_worker.py b/tests/engine/daemon/test_worker.py index f8807fccab..4debe28e3b 100644 --- a/tests/engine/daemon/test_worker.py +++ b/tests/engine/daemon/test_worker.py @@ -9,6 +9,7 @@ """Unit tests for the :mod:`aiida.engine.daemon.worker` module.""" import pytest + from aiida.engine.daemon.worker import shutdown_worker from aiida.orm import Log from aiida.workflows.arithmetic.multiply_add import MultiplyAddWorkChain diff --git a/tests/engine/processes/calcjobs/test_calc_job.py b/tests/engine/processes/calcjobs/test_calc_job.py index 4e679d5cdf..9a2078fec6 100644 --- a/tests/engine/processes/calcjobs/test_calc_job.py +++ b/tests/engine/processes/calcjobs/test_calc_job.py @@ -19,6 +19,7 @@ from unittest.mock import patch import pytest + from aiida import orm from aiida.common import CalcJobState, LinkType, StashMode, exceptions from aiida.common.datastructures import FileCopyOperation diff --git a/tests/engine/processes/calcjobs/test_monitors.py b/tests/engine/processes/calcjobs/test_monitors.py index cd1d4f51ce..7f6678917b 100644 --- a/tests/engine/processes/calcjobs/test_monitors.py +++ b/tests/engine/processes/calcjobs/test_monitors.py @@ -5,6 +5,7 @@ import time import pytest + from aiida.calculations.arithmetic.add import ArithmeticAddCalculation from aiida.calculations.monitors import base from aiida.common.exceptions import EntryPointError diff --git a/tests/engine/processes/test_builder.py b/tests/engine/processes/test_builder.py index 9a57362248..20f4d7c58c 100644 --- a/tests/engine/processes/test_builder.py +++ b/tests/engine/processes/test_builder.py @@ -12,12 +12,13 @@ from collections.abc import Mapping, MutableMapping import pytest +from IPython.lib.pretty import pretty + from aiida import orm from aiida.common import LinkType from aiida.engine import Process, WorkChain, run_get_node from aiida.engine.processes.builder import ProcessBuilderNamespace from aiida.plugins import CalculationFactory -from IPython.lib.pretty import pretty DEFAULT_INT = 256 diff --git a/tests/engine/processes/test_control.py b/tests/engine/processes/test_control.py index 51222c653c..5bb9b8b7a6 100644 --- a/tests/engine/processes/test_control.py +++ b/tests/engine/processes/test_control.py @@ -1,12 +1,12 @@ """Tests for the :mod:`aiida.engine.processes.control` module.""" import pytest +from plumpy.process_comms import RemoteProcessThreadController + from aiida.engine import ProcessState from aiida.engine.launch import submit from aiida.engine.processes import control from aiida.orm import Int -from plumpy.process_comms import RemoteProcessThreadController - from tests.utils.processes import WaitProcess diff --git a/tests/engine/processes/test_exit_code.py b/tests/engine/processes/test_exit_code.py index b44f29df2a..d8cce0a281 100644 --- a/tests/engine/processes/test_exit_code.py +++ b/tests/engine/processes/test_exit_code.py @@ -9,6 +9,7 @@ """Tests for `aiida.engine.processes.exit_code.ExitCode`.""" import pytest + from aiida.engine import ExitCode diff --git a/tests/engine/processes/workchains/test_restart.py b/tests/engine/processes/workchains/test_restart.py index d468b744c3..bf870292d7 100644 --- a/tests/engine/processes/workchains/test_restart.py +++ b/tests/engine/processes/workchains/test_restart.py @@ -11,6 +11,7 @@ import warnings import pytest + from aiida import engine, orm from aiida.engine.processes.workchains.awaitable import Awaitable diff --git a/tests/engine/processes/workchains/test_utils.py b/tests/engine/processes/workchains/test_utils.py index a4593e8f04..4397c50828 100644 --- a/tests/engine/processes/workchains/test_utils.py +++ b/tests/engine/processes/workchains/test_utils.py @@ -9,6 +9,7 @@ """Tests for `aiida.engine.processes.workchains.utils` module.""" import pytest + from aiida.engine import ExitCode, ProcessState from aiida.engine.processes.workchains.restart import BaseRestartWorkChain from aiida.engine.processes.workchains.utils import ProcessHandlerReport, process_handler @@ -31,7 +32,7 @@ class SomeWorkChain(BaseRestartWorkChain): def _(self, node): pass - class SomeWorkChain(BaseRestartWorkChain): # noqa: F811 + class SomeWorkChain(BaseRestartWorkChain): @process_handler(priority=400) def _(self, node): pass @@ -110,7 +111,7 @@ class SomeWorkChain(BaseRestartWorkChain): def _(self, node): pass - class SomeWorkChain(BaseRestartWorkChain): # noqa: F811 + class SomeWorkChain(BaseRestartWorkChain): @process_handler(exit_codes=ExitCode()) def _(self, node): pass @@ -132,7 +133,7 @@ class SomeWorkChain(BaseRestartWorkChain): def _(self, node): pass - class SomeWorkChain(BaseRestartWorkChain): # noqa: F811 + class SomeWorkChain(BaseRestartWorkChain): @process_handler(exit_codes=ExitCode(400, 'Some exit code')) def _(self, node): pass @@ -183,7 +184,7 @@ class SomeWorkChain(BaseRestartWorkChain): def _(self, node): pass - class SomeWorkChain(BaseRestartWorkChain): # noqa: F811 + class SomeWorkChain(BaseRestartWorkChain): @process_handler(enabled=False) def _(self, node): pass diff --git a/tests/engine/test_calcfunctions.py b/tests/engine/test_calcfunctions.py index e5ccfac01a..98c53aefa4 100644 --- a/tests/engine/test_calcfunctions.py +++ b/tests/engine/test_calcfunctions.py @@ -9,6 +9,7 @@ """Tests for the calcfunction decorator and CalcFunctionNode.""" import pytest + from aiida.common import exceptions from aiida.common.links import LinkType from aiida.engine import Process, calcfunction diff --git a/tests/engine/test_class_loader.py b/tests/engine/test_class_loader.py index 688e35cf08..f396d35a39 100644 --- a/tests/engine/test_class_loader.py +++ b/tests/engine/test_class_loader.py @@ -8,8 +8,9 @@ ########################################################################### """A module to test class loader factories.""" -import aiida import pytest + +import aiida from aiida.engine import Process from aiida.plugins import CalculationFactory diff --git a/tests/engine/test_daemon.py b/tests/engine/test_daemon.py index f556b55ade..c9a8570e32 100644 --- a/tests/engine/test_daemon.py +++ b/tests/engine/test_daemon.py @@ -11,9 +11,9 @@ import asyncio import pytest -from aiida.manage import get_manager from plumpy.process_states import ProcessState +from aiida.manage import get_manager from tests.utils import processes as test_processes diff --git a/tests/engine/test_futures.py b/tests/engine/test_futures.py index 9f9a752f62..b8ba78aa8f 100644 --- a/tests/engine/test_futures.py +++ b/tests/engine/test_futures.py @@ -11,9 +11,9 @@ import asyncio import pytest + from aiida.engine import processes, run from aiida.manage import get_manager - from tests.utils import processes as test_processes diff --git a/tests/engine/test_launch.py b/tests/engine/test_launch.py index 92fba4bd6b..6aba82cdcc 100644 --- a/tests/engine/test_launch.py +++ b/tests/engine/test_launch.py @@ -12,6 +12,7 @@ import shutil import pytest + from aiida import orm from aiida.common import exceptions from aiida.engine import CalcJob, Process, WorkChain, calcfunction, launch diff --git a/tests/engine/test_manager.py b/tests/engine/test_manager.py index 1df0348a64..97ac97c11a 100644 --- a/tests/engine/test_manager.py +++ b/tests/engine/test_manager.py @@ -12,6 +12,7 @@ import time import pytest + from aiida.engine.processes.calcjobs.manager import JobManager, JobsList from aiida.engine.transports import TransportQueue from aiida.orm import User diff --git a/tests/engine/test_memory_leaks.py b/tests/engine/test_memory_leaks.py index 4eece939f3..e59ff98366 100644 --- a/tests/engine/test_memory_leaks.py +++ b/tests/engine/test_memory_leaks.py @@ -11,10 +11,10 @@ import sys import pytest + from aiida import orm from aiida.engine import processes, run_get_node from aiida.plugins import CalculationFactory - from tests.utils import processes as test_processes from tests.utils.memory import get_instances diff --git a/tests/engine/test_persistence.py b/tests/engine/test_persistence.py index 870597557f..7ca9908376 100644 --- a/tests/engine/test_persistence.py +++ b/tests/engine/test_persistence.py @@ -10,9 +10,9 @@ import plumpy import pytest + from aiida.engine import Process, run from aiida.engine.persistence import AiiDAPersister - from tests.utils.processes import DummyProcess diff --git a/tests/engine/test_ports.py b/tests/engine/test_ports.py index 147717f8a4..5b3c6ae59b 100644 --- a/tests/engine/test_ports.py +++ b/tests/engine/test_ports.py @@ -9,6 +9,7 @@ """Tests for process spec ports.""" import pytest + from aiida.engine.processes.ports import InputPort, PortNamespace from aiida.orm import Dict, Int, to_aiida_type diff --git a/tests/engine/test_process.py b/tests/engine/test_process.py index 9b1f230041..1d7008478b 100644 --- a/tests/engine/test_process.py +++ b/tests/engine/test_process.py @@ -12,6 +12,8 @@ import plumpy import pytest +from plumpy.utils import AttributesFrozendict + from aiida import orm from aiida.common.lang import override from aiida.engine import ExitCode, ExitCodesNamespace, Process, run, run_get_node, run_get_pk @@ -20,8 +22,6 @@ from aiida.orm import to_aiida_type from aiida.orm.nodes.caching import NodeCaching from aiida.plugins import CalculationFactory -from plumpy.utils import AttributesFrozendict - from tests.utils import processes as test_processes diff --git a/tests/engine/test_process_function.py b/tests/engine/test_process_function.py index 9f1cfadbc8..33581868aa 100644 --- a/tests/engine/test_process_function.py +++ b/tests/engine/test_process_function.py @@ -24,6 +24,7 @@ import typing as t import pytest + from aiida import orm from aiida.engine import ExitCode, calcfunction, run, run_get_node, submit, workfunction from aiida.orm.nodes.data.bool import get_true_node diff --git a/tests/engine/test_process_spec.py b/tests/engine/test_process_spec.py index 56b6b8ca3f..22fbae4f25 100644 --- a/tests/engine/test_process_spec.py +++ b/tests/engine/test_process_spec.py @@ -9,6 +9,7 @@ """Tests for the `ProcessSpec` class.""" import pytest + from aiida.engine import Process from aiida.orm import Data, Node diff --git a/tests/engine/test_rmq.py b/tests/engine/test_rmq.py index 1fbf821aff..a2edc2fa41 100644 --- a/tests/engine/test_rmq.py +++ b/tests/engine/test_rmq.py @@ -12,10 +12,10 @@ import plumpy import pytest + from aiida.engine import ProcessState from aiida.manage import get_manager from aiida.orm import Int - from tests.utils import processes as test_processes diff --git a/tests/engine/test_run.py b/tests/engine/test_run.py index d15036cd5d..fd4fd5ddfa 100644 --- a/tests/engine/test_run.py +++ b/tests/engine/test_run.py @@ -9,9 +9,9 @@ """Tests for the `run` functions.""" import pytest + from aiida.engine import run, run_get_node from aiida.orm import Int, ProcessNode, Str - from tests.utils.processes import DummyProcess diff --git a/tests/engine/test_runners.py b/tests/engine/test_runners.py index 4f746e5d34..db6e0e7493 100644 --- a/tests/engine/test_runners.py +++ b/tests/engine/test_runners.py @@ -13,6 +13,7 @@ import plumpy import pytest + from aiida.calculations.arithmetic.add import ArithmeticAddCalculation from aiida.engine import Process, launch from aiida.manage import get_manager diff --git a/tests/engine/test_transport.py b/tests/engine/test_transport.py index f4749e9820..02d6cee928 100644 --- a/tests/engine/test_transport.py +++ b/tests/engine/test_transport.py @@ -11,6 +11,7 @@ import asyncio import pytest + from aiida import orm from aiida.engine.transports import TransportQueue diff --git a/tests/engine/test_utils.py b/tests/engine/test_utils.py index cca5866343..fe18020445 100644 --- a/tests/engine/test_utils.py +++ b/tests/engine/test_utils.py @@ -12,6 +12,7 @@ import contextlib import pytest + from aiida import orm from aiida.engine import calcfunction, workfunction from aiida.engine.utils import ( diff --git a/tests/engine/test_work_chain.py b/tests/engine/test_work_chain.py index 1fbb578b2a..4fb8c70667 100644 --- a/tests/engine/test_work_chain.py +++ b/tests/engine/test_work_chain.py @@ -14,6 +14,7 @@ import plumpy import pytest + from aiida import orm from aiida.common import exceptions from aiida.common.links import LinkType diff --git a/tests/engine/test_workfunctions.py b/tests/engine/test_workfunctions.py index c8595aadbc..b84438ac6a 100644 --- a/tests/engine/test_workfunctions.py +++ b/tests/engine/test_workfunctions.py @@ -9,6 +9,7 @@ """Tests for the workfunction decorator and WorkFunctionNode.""" import pytest + from aiida.common.links import LinkType from aiida.engine import Process, calcfunction, workfunction from aiida.manage.caching import enable_caching diff --git a/tests/manage/configuration/migrations/test_migrations.py b/tests/manage/configuration/migrations/test_migrations.py index 2d3612ed72..9c6f243347 100644 --- a/tests/manage/configuration/migrations/test_migrations.py +++ b/tests/manage/configuration/migrations/test_migrations.py @@ -14,6 +14,7 @@ import uuid import pytest + from aiida.common.exceptions import ConfigurationError from aiida.manage.configuration.migrations import check_and_migrate_config from aiida.manage.configuration.migrations.migrations import MIGRATIONS, Initial, downgrade_config, upgrade_config diff --git a/tests/manage/configuration/test_config.py b/tests/manage/configuration/test_config.py index b1decb09a7..5f24a5690a 100644 --- a/tests/manage/configuration/test_config.py +++ b/tests/manage/configuration/test_config.py @@ -14,6 +14,7 @@ import uuid import pytest + from aiida.common import exceptions from aiida.manage.configuration import Profile, settings from aiida.manage.configuration.config import Config diff --git a/tests/manage/configuration/test_configuration.py b/tests/manage/configuration/test_configuration.py index 4f6e38cd5f..1226fe2db3 100644 --- a/tests/manage/configuration/test_configuration.py +++ b/tests/manage/configuration/test_configuration.py @@ -1,7 +1,8 @@ """Tests for the :mod:`aiida.manage.configuration` module.""" -import aiida import pytest + +import aiida from aiida.manage.configuration import Profile, create_profile, get_profile, profile_context from aiida.manage.manager import get_manager diff --git a/tests/manage/configuration/test_options.py b/tests/manage/configuration/test_options.py index 7a76ceeec5..788281b72e 100644 --- a/tests/manage/configuration/test_options.py +++ b/tests/manage/configuration/test_options.py @@ -9,6 +9,7 @@ """Tests for the configuration options.""" import pytest + from aiida import get_profile from aiida.common.exceptions import ConfigurationError from aiida.manage.configuration import get_config, get_config_option diff --git a/tests/manage/external/test_postgres.py b/tests/manage/external/test_postgres.py index be829ae4c9..ce3c7ef348 100644 --- a/tests/manage/external/test_postgres.py +++ b/tests/manage/external/test_postgres.py @@ -11,6 +11,7 @@ from unittest import TestCase import pytest + from aiida.manage.external.postgres import Postgres diff --git a/tests/manage/test_caching_config.py b/tests/manage/test_caching_config.py index 50a2e4ac48..5521ea8288 100644 --- a/tests/manage/test_caching_config.py +++ b/tests/manage/test_caching_config.py @@ -14,6 +14,7 @@ import pytest import yaml + from aiida.common import exceptions from aiida.manage.caching import _validate_identifier_pattern, disable_caching, enable_caching, get_use_cache diff --git a/tests/manage/test_manager.py b/tests/manage/test_manager.py index 4359a2ab48..3a8f4949cf 100644 --- a/tests/manage/test_manager.py +++ b/tests/manage/test_manager.py @@ -1,6 +1,7 @@ """Tests for :mod:`aiida.manage.manager`.""" import pytest + from aiida import engine, orm diff --git a/tests/manage/test_profile_access.py b/tests/manage/test_profile_access.py index 0700333838..e8f34908fb 100644 --- a/tests/manage/test_profile_access.py +++ b/tests/manage/test_profile_access.py @@ -14,6 +14,7 @@ import psutil import pytest + from aiida.common.exceptions import LockedProfileError, LockingProfileError from aiida.manage.profile_access import ProfileAccessManager diff --git a/tests/manage/tests/test_pytest_fixtures.py b/tests/manage/tests/test_pytest_fixtures.py index ab2e9d82b6..93ea7c1b80 100644 --- a/tests/manage/tests/test_pytest_fixtures.py +++ b/tests/manage/tests/test_pytest_fixtures.py @@ -3,6 +3,7 @@ import uuid import pytest + from aiida.manage.configuration import get_config from aiida.manage.configuration.config import Config from aiida.orm import Computer diff --git a/tests/orm/data/code/test_abstract.py b/tests/orm/data/code/test_abstract.py index 7b4dd745ee..0985f90f40 100644 --- a/tests/orm/data/code/test_abstract.py +++ b/tests/orm/data/code/test_abstract.py @@ -11,6 +11,7 @@ import pathlib import pytest + from aiida.orm.nodes.data.code.abstract import AbstractCode diff --git a/tests/orm/data/code/test_containerized.py b/tests/orm/data/code/test_containerized.py index 9eae096cde..68ae32b76d 100644 --- a/tests/orm/data/code/test_containerized.py +++ b/tests/orm/data/code/test_containerized.py @@ -11,6 +11,7 @@ import pathlib import pytest + from aiida.orm.nodes.data.code.containerized import ContainerizedCode diff --git a/tests/orm/data/code/test_installed.py b/tests/orm/data/code/test_installed.py index 15c297f43e..c2c60f6154 100644 --- a/tests/orm/data/code/test_installed.py +++ b/tests/orm/data/code/test_installed.py @@ -11,6 +11,7 @@ import pathlib import pytest + from aiida.common.exceptions import ModificationNotAllowed, ValidationError from aiida.common.warnings import AiidaDeprecationWarning from aiida.orm import Computer diff --git a/tests/orm/data/code/test_portable.py b/tests/orm/data/code/test_portable.py index 4bffa04515..a63bb2b111 100644 --- a/tests/orm/data/code/test_portable.py +++ b/tests/orm/data/code/test_portable.py @@ -12,6 +12,7 @@ import pathlib import pytest + from aiida.common.exceptions import ModificationNotAllowed, ValidationError from aiida.common.warnings import AiidaDeprecationWarning from aiida.orm.nodes.data.code.portable import PortableCode diff --git a/tests/orm/data/test_code.py b/tests/orm/data/test_code.py index 0041cd6957..a45bf8d4ec 100644 --- a/tests/orm/data/test_code.py +++ b/tests/orm/data/test_code.py @@ -11,6 +11,7 @@ import uuid import pytest + from aiida.common.exceptions import ValidationError from aiida.orm import Code, Computer diff --git a/tests/orm/data/test_enum.py b/tests/orm/data/test_enum.py index 99a6824386..fcfa3275a1 100644 --- a/tests/orm/data/test_enum.py +++ b/tests/orm/data/test_enum.py @@ -3,6 +3,7 @@ import enum import pytest + from aiida.common import links from aiida.orm import load_node from aiida.orm.nodes.data.enum import EnumData diff --git a/tests/orm/implementation/test_backend.py b/tests/orm/implementation/test_backend.py index 001564f057..a98d090254 100644 --- a/tests/orm/implementation/test_backend.py +++ b/tests/orm/implementation/test_backend.py @@ -15,6 +15,7 @@ import uuid import pytest + from aiida import orm from aiida.common import exceptions from aiida.common.links import LinkType diff --git a/tests/orm/implementation/test_comments.py b/tests/orm/implementation/test_comments.py index 4d3db03bcc..aaba91d0da 100644 --- a/tests/orm/implementation/test_comments.py +++ b/tests/orm/implementation/test_comments.py @@ -12,6 +12,7 @@ from uuid import UUID, uuid4 import pytest + from aiida import orm from aiida.common import exceptions, timezone diff --git a/tests/orm/implementation/test_logs.py b/tests/orm/implementation/test_logs.py index 1281493e58..5d1a61f74e 100644 --- a/tests/orm/implementation/test_logs.py +++ b/tests/orm/implementation/test_logs.py @@ -13,6 +13,7 @@ from uuid import UUID, uuid4 import pytest + from aiida import orm from aiida.common import exceptions, timezone from aiida.common.log import LOG_LEVEL_REPORT diff --git a/tests/orm/implementation/test_nodes.py b/tests/orm/implementation/test_nodes.py index 7437b4dc09..92b71dbe1f 100644 --- a/tests/orm/implementation/test_nodes.py +++ b/tests/orm/implementation/test_nodes.py @@ -13,6 +13,7 @@ from uuid import UUID, uuid4 import pytest + from aiida.common import exceptions, timezone from aiida.orm.implementation.nodes import BackendNode diff --git a/tests/orm/implementation/test_utils.py b/tests/orm/implementation/test_utils.py index 22841009f4..315637dbe0 100644 --- a/tests/orm/implementation/test_utils.py +++ b/tests/orm/implementation/test_utils.py @@ -11,6 +11,7 @@ import math import pytest + from aiida.common import exceptions from aiida.orm.implementation.utils import FIELD_SEPARATOR, clean_value, validate_attribute_extra_key diff --git a/tests/orm/nodes/data/test_array.py b/tests/orm/nodes/data/test_array.py index 4f934d5c1f..2294518425 100644 --- a/tests/orm/nodes/data/test_array.py +++ b/tests/orm/nodes/data/test_array.py @@ -10,6 +10,7 @@ import numpy import pytest + from aiida.orm import ArrayData, load_node diff --git a/tests/orm/nodes/data/test_array_bands.py b/tests/orm/nodes/data/test_array_bands.py index e609ffeaa8..3f8f6e343e 100644 --- a/tests/orm/nodes/data/test_array_bands.py +++ b/tests/orm/nodes/data/test_array_bands.py @@ -12,6 +12,7 @@ from argparse import Namespace import pytest + from aiida.common.exceptions import NotExistent from aiida.orm import BandsData, Group, User from aiida.orm.nodes.data.array.bands import get_bands_and_parents_structure diff --git a/tests/orm/nodes/data/test_base.py b/tests/orm/nodes/data/test_base.py index 29a6701d61..154847fabe 100644 --- a/tests/orm/nodes/data/test_base.py +++ b/tests/orm/nodes/data/test_base.py @@ -11,6 +11,7 @@ import operator import pytest + from aiida.orm import Bool, Float, Int, NumericType, Str, load_node @@ -214,7 +215,7 @@ def test_operator(opera): for node_x, node_y in [(node_a, node_b), (node_b, node_a)]: res = opera(node_x, node_y) c_val = opera(node_x.value, node_y.value) - assert res._type == type(c_val) + assert res._type is type(c_val) assert res == opera(node_x.value, node_y.value) diff --git a/tests/orm/nodes/data/test_cif.py b/tests/orm/nodes/data/test_cif.py index b7a34084f1..cfe01728c9 100644 --- a/tests/orm/nodes/data/test_cif.py +++ b/tests/orm/nodes/data/test_cif.py @@ -9,6 +9,7 @@ """Tests for cif related functions.""" import pytest + from aiida.orm.nodes.data.cif import parse_formula diff --git a/tests/orm/nodes/data/test_data.py b/tests/orm/nodes/data/test_data.py index 44101df4b1..313b3f38e4 100644 --- a/tests/orm/nodes/data/test_data.py +++ b/tests/orm/nodes/data/test_data.py @@ -12,8 +12,8 @@ import numpy import pytest -from aiida import orm, plugins +from aiida import orm, plugins from tests.static import STATIC_DIR diff --git a/tests/orm/nodes/data/test_dict.py b/tests/orm/nodes/data/test_dict.py index 05a60f6e2d..7c565daffe 100644 --- a/tests/orm/nodes/data/test_dict.py +++ b/tests/orm/nodes/data/test_dict.py @@ -9,6 +9,7 @@ """Tests for :class:`aiida.orm.nodes.data.dict.Dict` class.""" import pytest + from aiida.orm import Dict diff --git a/tests/orm/nodes/data/test_folder.py b/tests/orm/nodes/data/test_folder.py index 991a35d028..a8dd40d2ef 100644 --- a/tests/orm/nodes/data/test_folder.py +++ b/tests/orm/nodes/data/test_folder.py @@ -9,6 +9,7 @@ """Tests for the `FolderData` class.""" import pytest + from aiida.orm import FolderData diff --git a/tests/orm/nodes/data/test_jsonable.py b/tests/orm/nodes/data/test_jsonable.py index bacedac73a..0b113cce48 100644 --- a/tests/orm/nodes/data/test_jsonable.py +++ b/tests/orm/nodes/data/test_jsonable.py @@ -4,9 +4,10 @@ import math import pytest +from pymatgen.core.structure import Molecule + from aiida.orm import load_node from aiida.orm.nodes.data.jsonable import JsonableData -from pymatgen.core.structure import Molecule class JsonableClass: diff --git a/tests/orm/nodes/data/test_kpoints.py b/tests/orm/nodes/data/test_kpoints.py index 112a46859e..73d25f82ea 100644 --- a/tests/orm/nodes/data/test_kpoints.py +++ b/tests/orm/nodes/data/test_kpoints.py @@ -10,6 +10,7 @@ import numpy as np import pytest + from aiida.orm import KpointsData, StructureData, load_node diff --git a/tests/orm/nodes/data/test_list.py b/tests/orm/nodes/data/test_list.py index 657b77f127..d5dfa1c85a 100644 --- a/tests/orm/nodes/data/test_list.py +++ b/tests/orm/nodes/data/test_list.py @@ -9,6 +9,7 @@ """Tests for :class:`aiida.orm.nodes.data.list.List` class.""" import pytest + from aiida.common.exceptions import ModificationNotAllowed from aiida.orm import List, load_node diff --git a/tests/orm/nodes/data/test_orbital.py b/tests/orm/nodes/data/test_orbital.py index 62f20cc4bf..710a583a5e 100644 --- a/tests/orm/nodes/data/test_orbital.py +++ b/tests/orm/nodes/data/test_orbital.py @@ -11,6 +11,7 @@ import copy import pytest + from aiida.common import ValidationError from aiida.orm import OrbitalData from aiida.plugins import OrbitalFactory diff --git a/tests/orm/nodes/data/test_remote.py b/tests/orm/nodes/data/test_remote.py index 8f08fee37b..333e59c547 100644 --- a/tests/orm/nodes/data/test_remote.py +++ b/tests/orm/nodes/data/test_remote.py @@ -9,6 +9,7 @@ """Tests for the :mod:`aiida.orm.nodes.data.remote.base.RemoteData` module.""" import pytest + from aiida.orm import RemoteData diff --git a/tests/orm/nodes/data/test_remote_stash.py b/tests/orm/nodes/data/test_remote_stash.py index bc2c49e452..0cb555f0e4 100644 --- a/tests/orm/nodes/data/test_remote_stash.py +++ b/tests/orm/nodes/data/test_remote_stash.py @@ -9,6 +9,7 @@ """Tests for the :mod:`aiida.orm.nodes.data.remote.stash` module.""" import pytest + from aiida.common.datastructures import StashMode from aiida.common.exceptions import StoringNotAllowed from aiida.orm import RemoteStashData, RemoteStashFolderData diff --git a/tests/orm/nodes/data/test_singlefile.py b/tests/orm/nodes/data/test_singlefile.py index 373b91eabb..304050648a 100644 --- a/tests/orm/nodes/data/test_singlefile.py +++ b/tests/orm/nodes/data/test_singlefile.py @@ -14,6 +14,7 @@ import tempfile import pytest + from aiida.orm import SinglefileData, load_node diff --git a/tests/orm/nodes/data/test_structure.py b/tests/orm/nodes/data/test_structure.py index 45df92dff6..47cfbec4e9 100644 --- a/tests/orm/nodes/data/test_structure.py +++ b/tests/orm/nodes/data/test_structure.py @@ -9,6 +9,7 @@ """Tests for StructureData-related functions.""" import pytest + from aiida.orm.nodes.data.structure import StructureData, get_formula diff --git a/tests/orm/nodes/data/test_to_aiida_type.py b/tests/orm/nodes/data/test_to_aiida_type.py index f063a83943..7f1afd93ee 100644 --- a/tests/orm/nodes/data/test_to_aiida_type.py +++ b/tests/orm/nodes/data/test_to_aiida_type.py @@ -10,6 +10,7 @@ import numpy import pytest + from aiida import orm from aiida.common.links import LinkType diff --git a/tests/orm/nodes/data/test_trajectory.py b/tests/orm/nodes/data/test_trajectory.py index 0594677fa0..eb0a78384a 100644 --- a/tests/orm/nodes/data/test_trajectory.py +++ b/tests/orm/nodes/data/test_trajectory.py @@ -2,6 +2,7 @@ import numpy as np import pytest + from aiida.orm import StructureData, TrajectoryData, load_node diff --git a/tests/orm/nodes/data/test_upf.py b/tests/orm/nodes/data/test_upf.py index 94e550ddad..fb0ed01abd 100644 --- a/tests/orm/nodes/data/test_upf.py +++ b/tests/orm/nodes/data/test_upf.py @@ -14,11 +14,11 @@ import numpy import pytest +from numpy import array, isclose + from aiida import orm from aiida.common.exceptions import ParsingError from aiida.orm.nodes.data.upf import parse_upf -from numpy import array, isclose - from tests.static import STATIC_DIR diff --git a/tests/orm/nodes/data/test_xy.py b/tests/orm/nodes/data/test_xy.py index c2d1a12ed9..3842157b78 100644 --- a/tests/orm/nodes/data/test_xy.py +++ b/tests/orm/nodes/data/test_xy.py @@ -10,6 +10,7 @@ import numpy import pytest + from aiida.common.exceptions import NotExistent from aiida.orm import XyData, load_node diff --git a/tests/orm/nodes/process/test_process.py b/tests/orm/nodes/process/test_process.py index 7fe3f30703..ada60bbadc 100644 --- a/tests/orm/nodes/process/test_process.py +++ b/tests/orm/nodes/process/test_process.py @@ -1,6 +1,7 @@ """Tests for :mod:`aiida.orm.nodes.process.process`.""" import pytest + from aiida.engine import ExitCode, ProcessState, launch from aiida.orm import Int from aiida.orm.nodes.caching import NodeCaching diff --git a/tests/orm/nodes/test_calcjob.py b/tests/orm/nodes/test_calcjob.py index 6d5006996e..5321368d6d 100644 --- a/tests/orm/nodes/test_calcjob.py +++ b/tests/orm/nodes/test_calcjob.py @@ -11,6 +11,7 @@ import io import pytest + from aiida.common import CalcJobState, LinkType from aiida.orm import CalcJobNode, FolderData diff --git a/tests/orm/nodes/test_node.py b/tests/orm/nodes/test_node.py index ddcc586b84..6b52875c78 100644 --- a/tests/orm/nodes/test_node.py +++ b/tests/orm/nodes/test_node.py @@ -14,6 +14,7 @@ from io import BytesIO import pytest + from aiida.common import LinkType, exceptions, timezone from aiida.manage import get_manager from aiida.orm import CalculationNode, Computer, Data, Int, Log, Node, User, WorkflowNode, load_node diff --git a/tests/orm/nodes/test_repository.py b/tests/orm/nodes/test_repository.py index 08d1eb6268..062fa6ad9f 100644 --- a/tests/orm/nodes/test_repository.py +++ b/tests/orm/nodes/test_repository.py @@ -3,6 +3,7 @@ import pathlib import pytest + from aiida.common import exceptions from aiida.common.warnings import AiidaDeprecationWarning from aiida.engine import ProcessState diff --git a/tests/orm/test_authinfos.py b/tests/orm/test_authinfos.py index ef0bfaacc3..c64274c720 100644 --- a/tests/orm/test_authinfos.py +++ b/tests/orm/test_authinfos.py @@ -9,6 +9,7 @@ """Unit tests for the AuthInfo ORM class.""" import pytest + from aiida.common import exceptions from aiida.orm import authinfos, computers diff --git a/tests/orm/test_autogroups.py b/tests/orm/test_autogroups.py index 8d4b310f7c..484c49ab7e 100644 --- a/tests/orm/test_autogroups.py +++ b/tests/orm/test_autogroups.py @@ -9,6 +9,7 @@ """Tests for the Autogroup functionality.""" import pytest + from aiida.orm import AutoGroup, QueryBuilder from aiida.orm.autogroup import AutogroupManager diff --git a/tests/orm/test_comments.py b/tests/orm/test_comments.py index 23bad1423c..de9db9c30b 100644 --- a/tests/orm/test_comments.py +++ b/tests/orm/test_comments.py @@ -9,6 +9,7 @@ """Unit tests for the Comment ORM class.""" import pytest + from aiida import orm from aiida.common import exceptions from aiida.orm.comments import Comment diff --git a/tests/orm/test_computers.py b/tests/orm/test_computers.py index adb1cbaae8..cd26797f1c 100644 --- a/tests/orm/test_computers.py +++ b/tests/orm/test_computers.py @@ -11,6 +11,7 @@ import uuid import pytest + from aiida.common import exceptions from aiida.orm import AuthInfo, Computer, User from aiida.plugins import TransportFactory diff --git a/tests/orm/test_entities.py b/tests/orm/test_entities.py index aa6e5705cb..00fee47612 100644 --- a/tests/orm/test_entities.py +++ b/tests/orm/test_entities.py @@ -11,6 +11,7 @@ import pickle import pytest + from aiida import orm from aiida.common.exceptions import InvalidOperation diff --git a/tests/orm/test_fields.py b/tests/orm/test_fields.py index 46d69d20a7..c0881a7b3e 100644 --- a/tests/orm/test_fields.py +++ b/tests/orm/test_fields.py @@ -9,9 +9,10 @@ """Test for entity fields""" import pytest +from importlib_metadata import entry_points + from aiida import orm from aiida.orm.fields import add_field -from importlib_metadata import entry_points EPS = entry_points() diff --git a/tests/orm/test_groups.py b/tests/orm/test_groups.py index b70758b08e..c62f903400 100644 --- a/tests/orm/test_groups.py +++ b/tests/orm/test_groups.py @@ -11,6 +11,7 @@ import uuid import pytest + from aiida import orm from aiida.common import exceptions from aiida.tools.graph.deletions import delete_nodes diff --git a/tests/orm/test_logs.py b/tests/orm/test_logs.py index 7767510639..cbb3863b04 100644 --- a/tests/orm/test_logs.py +++ b/tests/orm/test_logs.py @@ -12,6 +12,7 @@ import logging import pytest + from aiida import orm from aiida.common import exceptions from aiida.common.log import LOG_LEVEL_REPORT diff --git a/tests/orm/test_mixins.py b/tests/orm/test_mixins.py index b72b87cf23..7c6cce79c0 100644 --- a/tests/orm/test_mixins.py +++ b/tests/orm/test_mixins.py @@ -9,6 +9,7 @@ """Tests for the ORM mixin classes.""" import pytest + from aiida.common import exceptions from aiida.common.links import LinkType from aiida.orm import CalculationNode, Int diff --git a/tests/orm/test_querybuilder.py b/tests/orm/test_querybuilder.py index 862474bc76..76585a9ab3 100644 --- a/tests/orm/test_querybuilder.py +++ b/tests/orm/test_querybuilder.py @@ -16,6 +16,7 @@ from itertools import chain import pytest + from aiida import orm, plugins from aiida.common.links import LinkType from aiida.orm.querybuilder import _get_ormclass diff --git a/tests/orm/utils/test_calcjob.py b/tests/orm/utils/test_calcjob.py index 10f1a0a7bf..46c68bc9f2 100644 --- a/tests/orm/utils/test_calcjob.py +++ b/tests/orm/utils/test_calcjob.py @@ -9,6 +9,7 @@ """Tests for the `CalcJob` utils.""" import pytest + from aiida.common.links import LinkType from aiida.orm import Dict from aiida.orm.utils.calcjob import CalcJobResultManager diff --git a/tests/orm/utils/test_loaders.py b/tests/orm/utils/test_loaders.py index 7429e92034..63ca1afa4d 100644 --- a/tests/orm/utils/test_loaders.py +++ b/tests/orm/utils/test_loaders.py @@ -9,6 +9,7 @@ """Module to test orm utilities to load nodes, codes etc.""" import pytest + from aiida.common.exceptions import NotExistent from aiida.orm import Data, Group, Node from aiida.orm.utils import load_code, load_computer, load_entity, load_group, load_node diff --git a/tests/orm/utils/test_managers.py b/tests/orm/utils/test_managers.py index ea9806093b..74975aec02 100644 --- a/tests/orm/utils/test_managers.py +++ b/tests/orm/utils/test_managers.py @@ -11,6 +11,7 @@ import warnings import pytest + from aiida import orm from aiida.common import AttributeDict, LinkType from aiida.common.exceptions import NotExistent, NotExistentAttributeError, NotExistentKeyError diff --git a/tests/orm/utils/test_node.py b/tests/orm/utils/test_node.py index c2f0f608a2..780aa155f0 100644 --- a/tests/orm/utils/test_node.py +++ b/tests/orm/utils/test_node.py @@ -9,6 +9,7 @@ """Tests for the `Node` utils.""" import pytest + from aiida.orm import Data from aiida.orm.utils.node import load_node_class diff --git a/tests/orm/utils/test_serialize.py b/tests/orm/utils/test_serialize.py index 231a25d1bb..3375a9e3c6 100644 --- a/tests/orm/utils/test_serialize.py +++ b/tests/orm/utils/test_serialize.py @@ -14,6 +14,7 @@ import numpy as np import pytest + from aiida import orm from aiida.common.links import LinkType from aiida.orm.utils import serialize diff --git a/tests/parsers/test_parser.py b/tests/parsers/test_parser.py index f298acfe85..e4b6af5be9 100644 --- a/tests/parsers/test_parser.py +++ b/tests/parsers/test_parser.py @@ -11,6 +11,7 @@ import io import pytest + from aiida import orm from aiida.common import LinkType from aiida.engine import CalcJob diff --git a/tests/plugins/test_entry_point.py b/tests/plugins/test_entry_point.py index 2570194ff3..ebab1b138c 100644 --- a/tests/plugins/test_entry_point.py +++ b/tests/plugins/test_entry_point.py @@ -9,12 +9,13 @@ """Tests for the :mod:`~aiida.plugins.entry_point` module.""" import pytest +from importlib_metadata import EntryPoint as EP # noqa: N817 +from importlib_metadata import EntryPoints + from aiida.common.exceptions import MissingEntryPointError, MultipleEntryPointError from aiida.common.warnings import AiidaDeprecationWarning from aiida.plugins import entry_point from aiida.plugins.entry_point import get_entry_point, validate_registered_entry_points -from importlib_metadata import EntryPoint as EP # noqa: N817 -from importlib_metadata import EntryPoints def test_validate_registered_entry_points(): diff --git a/tests/plugins/test_factories.py b/tests/plugins/test_factories.py index 5ad4a83c13..49f3140fbe 100644 --- a/tests/plugins/test_factories.py +++ b/tests/plugins/test_factories.py @@ -9,6 +9,7 @@ """Tests for the :py:mod:`~aiida.plugins.factories` module.""" import pytest + from aiida.common.exceptions import InvalidEntryPointTypeError from aiida.engine import CalcJob, CalcJobImporter, WorkChain, calcfunction, workfunction from aiida.orm import CalcFunctionNode, Data, Node, WorkFunctionNode diff --git a/tests/plugins/test_utils.py b/tests/plugins/test_utils.py index 485291e8d6..5c1d248a26 100644 --- a/tests/plugins/test_utils.py +++ b/tests/plugins/test_utils.py @@ -9,6 +9,7 @@ """Tests for utilities dealing with plugins and entry points.""" import pytest + from aiida import __version__ as version_core from aiida.common.exceptions import EntryPointError from aiida.engine import WorkChain, calcfunction diff --git a/tests/repository/backend/test_abstract.py b/tests/repository/backend/test_abstract.py index a7ae0bff5d..aca48217cb 100644 --- a/tests/repository/backend/test_abstract.py +++ b/tests/repository/backend/test_abstract.py @@ -5,6 +5,7 @@ from typing import BinaryIO, Iterable, List, Optional import pytest + from aiida.repository.backend import AbstractRepositoryBackend diff --git a/tests/repository/backend/test_disk_object_store.py b/tests/repository/backend/test_disk_object_store.py index 61654fbd6f..071cbe747d 100644 --- a/tests/repository/backend/test_disk_object_store.py +++ b/tests/repository/backend/test_disk_object_store.py @@ -4,6 +4,7 @@ import pathlib import pytest + from aiida.repository.backend.disk_object_store import DiskObjectStoreRepositoryBackend diff --git a/tests/repository/backend/test_sandbox.py b/tests/repository/backend/test_sandbox.py index 3409cf4a77..360a6dc613 100644 --- a/tests/repository/backend/test_sandbox.py +++ b/tests/repository/backend/test_sandbox.py @@ -4,6 +4,7 @@ import pathlib import pytest + from aiida.repository.backend.sandbox import SandboxRepositoryBackend diff --git a/tests/repository/test_common.py b/tests/repository/test_common.py index 061c5d7406..cc97014f4a 100644 --- a/tests/repository/test_common.py +++ b/tests/repository/test_common.py @@ -1,6 +1,7 @@ """Tests for the :mod:`aiida.repository.common` module.""" import pytest + from aiida.repository import File, FileType diff --git a/tests/repository/test_repository.py b/tests/repository/test_repository.py index 2f829f42de..f86b2456a8 100644 --- a/tests/repository/test_repository.py +++ b/tests/repository/test_repository.py @@ -6,6 +6,7 @@ import typing as t import pytest + from aiida.repository import File, FileType, Repository from aiida.repository.backend import DiskObjectStoreRepositoryBackend, SandboxRepositoryBackend diff --git a/tests/restapi/conftest.py b/tests/restapi/conftest.py index 8c8b69fa3b..8abe8f9296 100644 --- a/tests/restapi/conftest.py +++ b/tests/restapi/conftest.py @@ -14,9 +14,10 @@ @pytest.fixture(scope='function') def restapi_server(): """Make REST API server""" + from werkzeug.serving import make_server + from aiida.restapi.common.config import CLI_DEFAULTS from aiida.restapi.run_api import configure_api - from werkzeug.serving import make_server def _restapi_server(restapi=None): if restapi is None: diff --git a/tests/restapi/test_config.py b/tests/restapi/test_config.py index a0a81c95dd..cf5ef4fac9 100644 --- a/tests/restapi/test_config.py +++ b/tests/restapi/test_config.py @@ -9,6 +9,7 @@ """Tests for the configuration options from `aiida.restapi.common.config` when running the REST API.""" import pytest + from aiida import orm from aiida.manage import get_manager diff --git a/tests/restapi/test_identifiers.py b/tests/restapi/test_identifiers.py index 21a65b8a00..8e3f245f6b 100644 --- a/tests/restapi/test_identifiers.py +++ b/tests/restapi/test_identifiers.py @@ -12,6 +12,7 @@ import pytest import requests + from aiida import orm from aiida.restapi.common.identifiers import FULL_TYPE_CONCATENATOR, LIKE_OPERATOR_CHARACTER, get_full_type_filters diff --git a/tests/restapi/test_routes.py b/tests/restapi/test_routes.py index 9b8649961f..50f4d2f2c8 100644 --- a/tests/restapi/test_routes.py +++ b/tests/restapi/test_routes.py @@ -14,12 +14,13 @@ import numpy as np import pytest +from flask_cors.core import ACL_ORIGIN + from aiida import orm from aiida.common.links import LinkType from aiida.manage import get_manager from aiida.orm.nodes.data.array.array import clean_array from aiida.restapi.run_api import configure_api -from flask_cors.core import ACL_ORIGIN class TestRestApi: diff --git a/tests/schedulers/test_all.py b/tests/schedulers/test_all.py index 2259b65725..702c212bf3 100644 --- a/tests/schedulers/test_all.py +++ b/tests/schedulers/test_all.py @@ -11,6 +11,7 @@ from __future__ import annotations import pytest + from aiida.common.datastructures import CodeRunMode from aiida.plugins import SchedulerFactory, entry_point from aiida.schedulers import Scheduler diff --git a/tests/schedulers/test_datastructures.py b/tests/schedulers/test_datastructures.py index afe0c23d3d..81d69c7190 100644 --- a/tests/schedulers/test_datastructures.py +++ b/tests/schedulers/test_datastructures.py @@ -9,6 +9,7 @@ """Tests for the :mod:`aiida.schedulers.test_datastructures` module.""" import pytest + from aiida.schedulers.datastructures import NodeNumberJobResource, ParEnvJobResource diff --git a/tests/schedulers/test_direct.py b/tests/schedulers/test_direct.py index 175f5ede48..2a01883f8a 100644 --- a/tests/schedulers/test_direct.py +++ b/tests/schedulers/test_direct.py @@ -9,6 +9,7 @@ """Tests for the ``DirectScheduler`` plugin.""" import pytest + from aiida.common.datastructures import CodeRunMode from aiida.schedulers import SchedulerError from aiida.schedulers.datastructures import JobTemplate, JobTemplateCodeInfo @@ -85,9 +86,10 @@ def test_kill_job(scheduler, tmpdir): import multiprocessing import time - from aiida.transports.plugins.local import LocalTransport from psutil import Process + from aiida.transports.plugins.local import LocalTransport + def run_sleep_100(): import subprocess diff --git a/tests/schedulers/test_lsf.py b/tests/schedulers/test_lsf.py index 013298f8ac..af7b8274bc 100644 --- a/tests/schedulers/test_lsf.py +++ b/tests/schedulers/test_lsf.py @@ -12,6 +12,7 @@ import uuid import pytest + from aiida.common.exceptions import ConfigurationError from aiida.schedulers.datastructures import JobState from aiida.schedulers.plugins.lsf import LsfScheduler diff --git a/tests/schedulers/test_slurm.py b/tests/schedulers/test_slurm.py index 1ba991a5d3..4da51c331c 100644 --- a/tests/schedulers/test_slurm.py +++ b/tests/schedulers/test_slurm.py @@ -15,6 +15,7 @@ import uuid import pytest + from aiida.engine import CalcJob from aiida.schedulers import JobState, SchedulerError from aiida.schedulers.plugins.slurm import SlurmJobResource, SlurmScheduler diff --git a/tests/storage/psql_dos/migrations/conftest.py b/tests/storage/psql_dos/migrations/conftest.py index 5ca772dc5f..9b3f38e287 100644 --- a/tests/storage/psql_dos/migrations/conftest.py +++ b/tests/storage/psql_dos/migrations/conftest.py @@ -11,11 +11,12 @@ from uuid import uuid4 import pytest +from pgtest.pgtest import PGTest +from sqlalchemy import text + from aiida.manage.configuration import Profile from aiida.storage.psql_dos.migrator import PsqlDosMigrator from aiida.storage.psql_dos.utils import create_sqlalchemy_engine -from pgtest.pgtest import PGTest -from sqlalchemy import text @pytest.fixture(scope='session') diff --git a/tests/storage/psql_dos/migrations/django_branch/test_0026_0027_traj_data.py b/tests/storage/psql_dos/migrations/django_branch/test_0026_0027_traj_data.py index 0f3cdf5e9f..dbe200d0be 100644 --- a/tests/storage/psql_dos/migrations/django_branch/test_0026_0027_traj_data.py +++ b/tests/storage/psql_dos/migrations/django_branch/test_0026_0027_traj_data.py @@ -10,6 +10,7 @@ import numpy import pytest + from aiida.common import timezone from aiida.common.utils import get_new_uuid from aiida.storage.psql_dos.backend import get_filepath_container diff --git a/tests/storage/psql_dos/migrations/django_branch/test_0037_attributes_extras_settings_json.py b/tests/storage/psql_dos/migrations/django_branch/test_0037_attributes_extras_settings_json.py index b81681a892..a8edbc8557 100644 --- a/tests/storage/psql_dos/migrations/django_branch/test_0037_attributes_extras_settings_json.py +++ b/tests/storage/psql_dos/migrations/django_branch/test_0037_attributes_extras_settings_json.py @@ -10,9 +10,10 @@ from datetime import datetime +from sqlalchemy import select + from aiida.common import timezone from aiida.storage.psql_dos.migrator import PsqlDosMigrator -from sqlalchemy import select def test_attr_extra_migration(perform_migrations: PsqlDosMigrator): diff --git a/tests/storage/psql_dos/migrations/django_branch/test_legacy.py b/tests/storage/psql_dos/migrations/django_branch/test_legacy.py index ce30a70f15..504f6360e9 100644 --- a/tests/storage/psql_dos/migrations/django_branch/test_legacy.py +++ b/tests/storage/psql_dos/migrations/django_branch/test_legacy.py @@ -19,6 +19,7 @@ """ import sqlalchemy as sa + from aiida.storage.psql_dos.migrator import PsqlDosMigrator diff --git a/tests/storage/psql_dos/migrations/sqlalchemy_branch/test_4_dblog_update.py b/tests/storage/psql_dos/migrations/sqlalchemy_branch/test_4_dblog_update.py index 91f6121ea0..0a2e6f5e16 100644 --- a/tests/storage/psql_dos/migrations/sqlalchemy_branch/test_4_dblog_update.py +++ b/tests/storage/psql_dos/migrations/sqlalchemy_branch/test_4_dblog_update.py @@ -12,9 +12,10 @@ import json import pytest +from sqlalchemy import column + from aiida.storage.psql_dos.migrations.utils import dblog_update from aiida.storage.psql_dos.migrator import PsqlDosMigrator -from sqlalchemy import column # The values that will be exported for the log records that will be deleted values_to_export = ('id', 'time', 'loggername', 'levelname', 'objpk', 'objname', 'message', 'metadata') diff --git a/tests/storage/psql_dos/migrations/sqlalchemy_branch/test_6_trajectory_data.py b/tests/storage/psql_dos/migrations/sqlalchemy_branch/test_6_trajectory_data.py index 0f1ccd3288..d83987c185 100644 --- a/tests/storage/psql_dos/migrations/sqlalchemy_branch/test_6_trajectory_data.py +++ b/tests/storage/psql_dos/migrations/sqlalchemy_branch/test_6_trajectory_data.py @@ -12,6 +12,7 @@ import numpy as np import pytest + from aiida.storage.psql_dos.backend import get_filepath_container from aiida.storage.psql_dos.migrations.utils import utils from aiida.storage.psql_dos.migrator import PsqlDosMigrator diff --git a/tests/storage/psql_dos/migrations/test_all_schema.py b/tests/storage/psql_dos/migrations/test_all_schema.py index 7af6174cdc..36f6096496 100644 --- a/tests/storage/psql_dos/migrations/test_all_schema.py +++ b/tests/storage/psql_dos/migrations/test_all_schema.py @@ -9,6 +9,7 @@ """Basic tests for all migrations""" import pytest + from aiida.storage.psql_dos.migrator import PsqlDosMigrator diff --git a/tests/storage/psql_dos/test_alembic_cli.py b/tests/storage/psql_dos/test_alembic_cli.py index 709c10bfbf..a31e90ca76 100644 --- a/tests/storage/psql_dos/test_alembic_cli.py +++ b/tests/storage/psql_dos/test_alembic_cli.py @@ -8,9 +8,10 @@ ########################################################################### """Basic tests for the alembic_cli module.""" -from aiida.storage.psql_dos.alembic_cli import alembic_cli from click.testing import CliRunner +from aiida.storage.psql_dos.alembic_cli import alembic_cli + def test_history(): """Test the 'history' command.""" diff --git a/tests/storage/psql_dos/test_backend.py b/tests/storage/psql_dos/test_backend.py index 6fe35ac747..8b50fa8fe2 100644 --- a/tests/storage/psql_dos/test_backend.py +++ b/tests/storage/psql_dos/test_backend.py @@ -9,6 +9,7 @@ """Testing the general methods of the psql_dos backend.""" import pytest + from aiida.manage import get_manager from aiida.orm import User diff --git a/tests/storage/psql_dos/test_nodes.py b/tests/storage/psql_dos/test_nodes.py index 1bbed60601..6a7090d971 100644 --- a/tests/storage/psql_dos/test_nodes.py +++ b/tests/storage/psql_dos/test_nodes.py @@ -9,6 +9,7 @@ """Tests for nodes, attributes and links.""" import pytest + from aiida import orm from aiida.orm import Data, load_node diff --git a/tests/storage/psql_dos/test_query.py b/tests/storage/psql_dos/test_query.py index 935b55636d..4a0390a9d0 100644 --- a/tests/storage/psql_dos/test_query.py +++ b/tests/storage/psql_dos/test_query.py @@ -9,6 +9,7 @@ """Tests for generic queries.""" import pytest + from aiida.orm import Computer, Data, Group, Node, ProcessNode, QueryBuilder, User diff --git a/tests/storage/psql_dos/test_schema.py b/tests/storage/psql_dos/test_schema.py index ef73855b27..9a2c23e365 100644 --- a/tests/storage/psql_dos/test_schema.py +++ b/tests/storage/psql_dos/test_schema.py @@ -10,13 +10,14 @@ import warnings +from sqlalchemy import exc as sa_exc + from aiida.common.links import LinkType from aiida.common.utils import get_new_uuid from aiida.manage import get_manager from aiida.orm import CalculationNode, Data from aiida.storage.psql_dos.models.node import DbNode from aiida.storage.psql_dos.models.user import DbUser -from sqlalchemy import exc as sa_exc class TestRelationshipsSQLA: diff --git a/tests/storage/psql_dos/test_session.py b/tests/storage/psql_dos/test_session.py index cd237a86ec..8092d18962 100644 --- a/tests/storage/psql_dos/test_session.py +++ b/tests/storage/psql_dos/test_session.py @@ -11,9 +11,10 @@ import uuid import pytest -from aiida.storage.psql_dos.utils import create_scoped_session_factory from sqlalchemy.orm import sessionmaker +from aiida.storage.psql_dos.utils import create_scoped_session_factory + class TestSessionSqla: """The following tests check that the session works as expected in some diff --git a/tests/storage/sqlite/test_orm.py b/tests/storage/sqlite/test_orm.py index 21c75f1302..4ee4331ae7 100644 --- a/tests/storage/sqlite/test_orm.py +++ b/tests/storage/sqlite/test_orm.py @@ -11,6 +11,7 @@ import json import pytest + from aiida.orm import Dict, QueryBuilder from aiida.storage.sqlite_temp import SqliteTempBackend diff --git a/tests/storage/sqlite_dos/migrations/conftest.py b/tests/storage/sqlite_dos/migrations/conftest.py index bba974705f..5cc74616e2 100644 --- a/tests/storage/sqlite_dos/migrations/conftest.py +++ b/tests/storage/sqlite_dos/migrations/conftest.py @@ -12,9 +12,10 @@ import pathlib import pytest +from sqlalchemy import text + from aiida.manage.configuration import Profile from aiida.storage.sqlite_zip.utils import create_sqla_engine -from sqlalchemy import text @pytest.fixture diff --git a/tests/storage/sqlite_dos/migrations/test_all_schema.py b/tests/storage/sqlite_dos/migrations/test_all_schema.py index 51351f918e..fab3221fbd 100644 --- a/tests/storage/sqlite_dos/migrations/test_all_schema.py +++ b/tests/storage/sqlite_dos/migrations/test_all_schema.py @@ -9,6 +9,7 @@ """Basic tests for all migrations""" import pytest + from aiida.storage.sqlite_dos.backend import SqliteDosMigrator diff --git a/tests/storage/sqlite_dos/test_backend.py b/tests/storage/sqlite_dos/test_backend.py index 61988db1e9..cabf692bf6 100644 --- a/tests/storage/sqlite_dos/test_backend.py +++ b/tests/storage/sqlite_dos/test_backend.py @@ -3,6 +3,7 @@ import pathlib import pytest + from aiida.storage.sqlite_dos.backend import FILENAME_CONTAINER, FILENAME_DATABASE, SqliteDosStorage @@ -18,7 +19,6 @@ def test_archive_import(aiida_config, aiida_profile_factory): """Test that archives can be imported.""" from aiida.orm import Node, QueryBuilder from aiida.tools.archive.imports import import_archive - from tests.utils.archives import get_archive_file with aiida_profile_factory(aiida_config, storage_backend='core.sqlite_dos'): diff --git a/tests/storage/sqlite_zip/test_backend.py b/tests/storage/sqlite_zip/test_backend.py index 7b42f8455c..64fca2844f 100644 --- a/tests/storage/sqlite_zip/test_backend.py +++ b/tests/storage/sqlite_zip/test_backend.py @@ -3,9 +3,10 @@ import pathlib import pytest +from pydantic_core import ValidationError + from aiida.storage.sqlite_zip.backend import SqliteZipBackend from aiida.storage.sqlite_zip.migrator import validate_storage -from pydantic_core import ValidationError def test_initialise(tmp_path, caplog): diff --git a/tests/test_calculation_node.py b/tests/test_calculation_node.py index d1120499f8..2bd1bd3e32 100644 --- a/tests/test_calculation_node.py +++ b/tests/test_calculation_node.py @@ -9,6 +9,7 @@ """Tests for the CalculationNode and CalcJobNode class.""" import pytest + from aiida.common.datastructures import CalcJobState from aiida.common.exceptions import ModificationNotAllowed from aiida.orm import CalcJobNode, CalculationNode diff --git a/tests/test_conftest.py b/tests/test_conftest.py index 22d990d323..59d56a5708 100644 --- a/tests/test_conftest.py +++ b/tests/test_conftest.py @@ -1,9 +1,10 @@ """Tests for fixtures in the ``conftest.py``.""" import pytest +from importlib_metadata import EntryPoint + from aiida.common.exceptions import MissingEntryPointError from aiida.plugins.entry_point import get_entry_point, load_entry_point -from importlib_metadata import EntryPoint ENTRY_POINT_GROUP = 'aiida.calculations.importers' diff --git a/tests/test_dataclasses.py b/tests/test_dataclasses.py index 799b6454d7..b4e9ef402c 100644 --- a/tests/test_dataclasses.py +++ b/tests/test_dataclasses.py @@ -14,6 +14,7 @@ import numpy as np import pytest + from aiida.common.exceptions import ModificationNotAllowed from aiida.common.utils import Capturing from aiida.orm import ArrayData, BandsData, CifData, Dict, KpointsData, StructureData, TrajectoryData, load_node diff --git a/tests/test_generic.py b/tests/test_generic.py index 8f434130bb..6ccac8770c 100644 --- a/tests/test_generic.py +++ b/tests/test_generic.py @@ -9,6 +9,7 @@ """Generic tests that need the use of the DB.""" import pytest + from aiida import orm diff --git a/tests/test_nodes.py b/tests/test_nodes.py index bd971d37db..72d02bf04a 100644 --- a/tests/test_nodes.py +++ b/tests/test_nodes.py @@ -11,6 +11,7 @@ import tempfile import pytest + from aiida import get_profile, orm from aiida.common.exceptions import InvalidOperation, ModificationNotAllowed, StoringNotAllowed, ValidationError from aiida.common.links import LinkType diff --git a/tests/tools/archive/conftest.py b/tests/tools/archive/conftest.py index b65970fa23..108b768bc7 100644 --- a/tests/tools/archive/conftest.py +++ b/tests/tools/archive/conftest.py @@ -11,6 +11,7 @@ import logging import pytest + from aiida.tools.archive import EXPORT_LOGGER, IMPORT_LOGGER diff --git a/tests/tools/archive/migration/conftest.py b/tests/tools/archive/migration/conftest.py index a324ff512a..2e599d7bdd 100644 --- a/tests/tools/archive/migration/conftest.py +++ b/tests/tools/archive/migration/conftest.py @@ -9,8 +9,8 @@ """Module with tests for export archive migrations.""" import pytest -from aiida.storage.sqlite_zip.migrations.utils import verify_metadata_version +from aiida.storage.sqlite_zip.migrations.utils import verify_metadata_version from tests.utils.archives import get_archive_file, read_json_files diff --git a/tests/tools/archive/migration/test_legacy_funcs.py b/tests/tools/archive/migration/test_legacy_funcs.py index a3167a1ba8..d91e562fc5 100644 --- a/tests/tools/archive/migration/test_legacy_funcs.py +++ b/tests/tools/archive/migration/test_legacy_funcs.py @@ -9,10 +9,10 @@ """Test migrating all export archives included in `tests/static/export/migrate`.""" import pytest + from aiida import get_version from aiida.storage.sqlite_zip.migrations.legacy import LEGACY_MIGRATE_FUNCTIONS from aiida.storage.sqlite_zip.migrations.utils import verify_metadata_version - from tests.utils.archives import get_archive_file, read_json_files diff --git a/tests/tools/archive/migration/test_legacy_migrations.py b/tests/tools/archive/migration/test_legacy_migrations.py index fb4a95d235..70d686f001 100644 --- a/tests/tools/archive/migration/test_legacy_migrations.py +++ b/tests/tools/archive/migration/test_legacy_migrations.py @@ -9,10 +9,10 @@ """Test archive file migration from old export versions to the newest""" import pytest + from aiida import orm from aiida.common.exceptions import StorageMigrationError from aiida.tools.archive import ArchiveFormatSqlZip - from tests.utils.archives import get_archive_file # archives to test migration against diff --git a/tests/tools/archive/migration/test_legacy_to_main.py b/tests/tools/archive/migration/test_legacy_to_main.py index a0b51134a4..617abd1f78 100644 --- a/tests/tools/archive/migration/test_legacy_to_main.py +++ b/tests/tools/archive/migration/test_legacy_to_main.py @@ -9,9 +9,9 @@ """Test archive file migration from legacy format (JSON) to main format (SQLite).""" import pytest + from aiida.common.exceptions import StorageMigrationError from aiida.storage.sqlite_zip.migrator import migrate - from tests.utils.archives import get_archive_file diff --git a/tests/tools/archive/migration/test_prov_redesign.py b/tests/tools/archive/migration/test_prov_redesign.py index 6beb0de2e4..357a0b1b39 100644 --- a/tests/tools/archive/migration/test_prov_redesign.py +++ b/tests/tools/archive/migration/test_prov_redesign.py @@ -17,6 +17,7 @@ """ import pytest + from aiida import orm from aiida.tools.archive import create_archive, import_archive @@ -85,7 +86,6 @@ def test_base_data_type_change(tmp_path, aiida_profile): def test_node_process_type(aiida_profile, tmp_path): """Column `process_type` added to `Node` entity DB table""" from aiida.engine import run_get_node - from tests.utils.processes import AddProcess aiida_profile.reset_storage() diff --git a/tests/tools/archive/migration/test_v05_to_v06.py b/tests/tools/archive/migration/test_v05_to_v06.py index a7e72a62d6..11f7b5d351 100644 --- a/tests/tools/archive/migration/test_v05_to_v06.py +++ b/tests/tools/archive/migration/test_v05_to_v06.py @@ -11,7 +11,6 @@ from aiida.storage.psql_dos.migrations.utils.calc_state import STATE_MAPPING from aiida.storage.sqlite_zip.migrations.legacy import migrate_v5_to_v6 # type: ignore[attr-defined] from aiida.storage.sqlite_zip.migrations.utils import verify_metadata_version - from tests.utils.archives import get_archive_file, read_json_files diff --git a/tests/tools/archive/migration/test_v06_to_v07.py b/tests/tools/archive/migration/test_v06_to_v07.py index d617e2126e..687817137f 100644 --- a/tests/tools/archive/migration/test_v06_to_v07.py +++ b/tests/tools/archive/migration/test_v06_to_v07.py @@ -9,6 +9,7 @@ """Test archive file migration from export version 0.6 to 0.7""" import pytest + from aiida.common.exceptions import CorruptStorage from aiida.storage.sqlite_zip.migrations.legacy.v06_to_v07 import ( data_migration_legacy_process_attributes, diff --git a/tests/tools/archive/orm/test_authinfo.py b/tests/tools/archive/orm/test_authinfo.py index e20c51270a..650724a514 100644 --- a/tests/tools/archive/orm/test_authinfo.py +++ b/tests/tools/archive/orm/test_authinfo.py @@ -9,6 +9,7 @@ """orm.AuthInfo tests for the export and import routines""" import pytest + from aiida import orm from aiida.tools.archive import create_archive, import_archive from aiida.tools.archive.abstract import get_format diff --git a/tests/tools/archive/orm/test_calculations.py b/tests/tools/archive/orm/test_calculations.py index de7b9058fe..0f1c3bc63a 100644 --- a/tests/tools/archive/orm/test_calculations.py +++ b/tests/tools/archive/orm/test_calculations.py @@ -9,6 +9,7 @@ """orm.CalcNode tests for the export and import routines""" import pytest + from aiida import orm from aiida.common.exceptions import NotExistent from aiida.common.links import LinkType diff --git a/tests/tools/archive/orm/test_codes.py b/tests/tools/archive/orm/test_codes.py index 4ac55584d2..27ae5f7882 100644 --- a/tests/tools/archive/orm/test_codes.py +++ b/tests/tools/archive/orm/test_codes.py @@ -13,7 +13,6 @@ from aiida import orm from aiida.common.links import LinkType from aiida.tools.archive import create_archive, import_archive - from tests.tools.archive.utils import get_all_node_links diff --git a/tests/tools/archive/orm/test_comments.py b/tests/tools/archive/orm/test_comments.py index 61935827d2..eb55b21f6e 100644 --- a/tests/tools/archive/orm/test_comments.py +++ b/tests/tools/archive/orm/test_comments.py @@ -9,6 +9,7 @@ """orm.Comment tests for the export and import routines""" import pytest + from aiida import orm from aiida.tools.archive import create_archive, import_archive diff --git a/tests/tools/archive/orm/test_computers.py b/tests/tools/archive/orm/test_computers.py index e3807c9a48..928275d173 100644 --- a/tests/tools/archive/orm/test_computers.py +++ b/tests/tools/archive/orm/test_computers.py @@ -9,10 +9,10 @@ """orm.Computer tests for the export and import routines""" import pytest + from aiida import orm from aiida.tools.archive import create_archive, import_archive from aiida.tools.archive.imports import DUPLICATE_LABEL_TEMPLATE - from tests.utils.archives import import_test_archive diff --git a/tests/tools/archive/orm/test_extras.py b/tests/tools/archive/orm/test_extras.py index 8435e44e32..e36e49fde6 100644 --- a/tests/tools/archive/orm/test_extras.py +++ b/tests/tools/archive/orm/test_extras.py @@ -9,6 +9,7 @@ """Extras tests for the export and import routines""" import pytest + from aiida import orm from aiida.tools.archive import create_archive, import_archive diff --git a/tests/tools/archive/orm/test_groups.py b/tests/tools/archive/orm/test_groups.py index f4651248b6..e40e1ba4be 100644 --- a/tests/tools/archive/orm/test_groups.py +++ b/tests/tools/archive/orm/test_groups.py @@ -11,6 +11,7 @@ import uuid import pytest + from aiida import orm from aiida.common.links import LinkType from aiida.orm import load_group diff --git a/tests/tools/archive/orm/test_links.py b/tests/tools/archive/orm/test_links.py index 83203def2a..75e7ada226 100644 --- a/tests/tools/archive/orm/test_links.py +++ b/tests/tools/archive/orm/test_links.py @@ -12,7 +12,6 @@ from aiida.common.links import LinkType from aiida.orm.entities import EntityTypes from aiida.tools.archive import ArchiveFormatSqlZip, create_archive, import_archive - from tests.tools.archive.utils import get_all_node_links diff --git a/tests/tools/archive/test_abstract.py b/tests/tools/archive/test_abstract.py index e913e65141..943b55ce0c 100644 --- a/tests/tools/archive/test_abstract.py +++ b/tests/tools/archive/test_abstract.py @@ -14,6 +14,7 @@ from io import BytesIO import pytest + from aiida import orm from aiida.common.exceptions import IntegrityError from aiida.orm.entities import EntityTypes diff --git a/tests/tools/archive/test_backend.py b/tests/tools/archive/test_backend.py index 88bddb8ccd..1cf39d1fcf 100644 --- a/tests/tools/archive/test_backend.py +++ b/tests/tools/archive/test_backend.py @@ -9,11 +9,11 @@ """Test using the archive backend directly.""" import pytest + from aiida import orm from aiida.common.exceptions import NotExistent from aiida.orm.implementation import StorageBackend from aiida.tools.archive import ArchiveFormatSqlZip, ArchiveReaderAbstract - from tests.utils.archives import get_archive_file diff --git a/tests/tools/archive/test_complex.py b/tests/tools/archive/test_complex.py index 3bb132c308..c6206953b9 100644 --- a/tests/tools/archive/test_complex.py +++ b/tests/tools/archive/test_complex.py @@ -13,6 +13,7 @@ from datetime import datetime import numpy as np + from aiida import orm from aiida.common.exceptions import NotExistent from aiida.common.hashing import make_hash diff --git a/tests/tools/archive/test_schema.py b/tests/tools/archive/test_schema.py index b117a9553a..bd667a72a6 100644 --- a/tests/tools/archive/test_schema.py +++ b/tests/tools/archive/test_schema.py @@ -12,15 +12,15 @@ import pytest import yaml -from aiida import get_profile -from aiida.storage.psql_dos.utils import create_sqlalchemy_engine -from aiida.storage.sqlite_zip import models, utils -from aiida.storage.sqlite_zip.migrator import get_schema_version_head, migrate from archive_path import extract_file_in_zip from sqlalchemy import String, inspect from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.engine import Inspector +from aiida import get_profile +from aiida.storage.psql_dos.utils import create_sqlalchemy_engine +from aiida.storage.sqlite_zip import models, utils +from aiida.storage.sqlite_zip.migrator import get_schema_version_head, migrate from tests.utils.archives import get_archive_file diff --git a/tests/tools/archive/test_simple.py b/tests/tools/archive/test_simple.py index 0e97ad9409..2f7377eb22 100644 --- a/tests/tools/archive/test_simple.py +++ b/tests/tools/archive/test_simple.py @@ -12,11 +12,12 @@ import json import pytest +from archive_path import ZipPath + from aiida import orm from aiida.common.exceptions import IncompatibleStorageSchema, LicensingException from aiida.common.links import LinkType from aiida.tools.archive import create_archive, import_archive -from archive_path import ZipPath @pytest.mark.parametrize('entities', ['all', 'specific']) diff --git a/tests/tools/archive/test_specific_import.py b/tests/tools/archive/test_specific_import.py index c7fed34a8e..61abef951b 100644 --- a/tests/tools/archive/test_specific_import.py +++ b/tests/tools/archive/test_specific_import.py @@ -9,6 +9,7 @@ """Tests for the export and import routines""" import numpy as np + from aiida import orm from aiida.tools.archive import create_archive, import_archive diff --git a/tests/tools/archive/test_utils.py b/tests/tools/archive/test_utils.py index ee494c74fa..8a931b0a1a 100644 --- a/tests/tools/archive/test_utils.py +++ b/tests/tools/archive/test_utils.py @@ -8,9 +8,10 @@ ########################################################################### """Test utility functions.""" -from aiida.storage.sqlite_zip.migrations.utils import copy_tar_to_zip, copy_zip_to_zip from archive_path import TarPath, ZipPath +from aiida.storage.sqlite_zip.migrations.utils import copy_tar_to_zip, copy_zip_to_zip + def test_copy_zip_to_zip(tmp_path): """Test copying a zipfile to a new zipfile""" diff --git a/tests/tools/data/orbital/test_orbitals.py b/tests/tools/data/orbital/test_orbitals.py index 02e992c4c6..8dc239e5d0 100644 --- a/tests/tools/data/orbital/test_orbitals.py +++ b/tests/tools/data/orbital/test_orbitals.py @@ -10,6 +10,7 @@ """Test for the `Orbital` class and subclasses.""" import pytest + from aiida.common.exceptions import ValidationError from aiida.plugins import OrbitalFactory from aiida.tools.data.orbital import Orbital diff --git a/tests/tools/dbimporters/test_icsd.py b/tests/tools/dbimporters/test_icsd.py index ec6245f418..6c7f08fbae 100644 --- a/tests/tools/dbimporters/test_icsd.py +++ b/tests/tools/dbimporters/test_icsd.py @@ -11,6 +11,7 @@ import urllib.request import pytest + from aiida import get_profile from aiida.tools.dbimporters.plugins import icsd diff --git a/tests/tools/dbimporters/test_materialsproject.py b/tests/tools/dbimporters/test_materialsproject.py index cfef6c599b..dee9a1f1cc 100644 --- a/tests/tools/dbimporters/test_materialsproject.py +++ b/tests/tools/dbimporters/test_materialsproject.py @@ -9,6 +9,7 @@ """Module that contains the class definitions necessary to offer support for queries to Materials Project.""" import pytest + from aiida.plugins import DbImporterFactory diff --git a/tests/tools/dumping/test_processes.py b/tests/tools/dumping/test_processes.py index be05d50441..accfbd17d2 100644 --- a/tests/tools/dumping/test_processes.py +++ b/tests/tools/dumping/test_processes.py @@ -15,6 +15,7 @@ from pathlib import Path import pytest + from aiida.common.links import LinkType from aiida.tools.dumping.processes import ProcessDumper @@ -42,6 +43,7 @@ def generate_calculation_node_io(generate_calculation_node, tmp_path): def _generate_calculation_node_io(entry_point: str | None = None, attach_outputs: bool = True): import numpy as np + from aiida.orm import ArrayData, FolderData, SinglefileData singlefiledata_input = SinglefileData.from_string(content=filecontent, filename=filename) diff --git a/tests/tools/graph/test_age.py b/tests/tools/graph/test_age.py index 460c72c582..a025d16107 100644 --- a/tests/tools/graph/test_age.py +++ b/tests/tools/graph/test_age.py @@ -10,6 +10,7 @@ import numpy as np import pytest + from aiida import orm from aiida.common.links import LinkType from aiida.tools.graph.age_entities import AiidaEntitySet, Basket, DirectedEdgeSet, GroupNodeEdge diff --git a/tests/tools/graph/test_graph_traversers.py b/tests/tools/graph/test_graph_traversers.py index dd87ac1f94..615fe023f6 100644 --- a/tests/tools/graph/test_graph_traversers.py +++ b/tests/tools/graph/test_graph_traversers.py @@ -9,6 +9,7 @@ """Tests for aiida.tools.graph.graph_traversers""" import pytest + from aiida.common.links import LinkType from aiida.tools.graph.graph_traversers import get_nodes_delete, traverse_graph diff --git a/tests/tools/groups/test_paths.py b/tests/tools/groups/test_paths.py index 9879fb2910..1cad363d46 100644 --- a/tests/tools/groups/test_paths.py +++ b/tests/tools/groups/test_paths.py @@ -9,6 +9,7 @@ """Tests for GroupPath""" import pytest + from aiida import orm from aiida.tools.groups.paths import GroupAttr, GroupNotFoundError, GroupPath, InvalidPath, NoGroupsInPathError diff --git a/tests/tools/ipython/test_ipython_magics.py b/tests/tools/ipython/test_ipython_magics.py index 022e739fff..56232679cb 100644 --- a/tests/tools/ipython/test_ipython_magics.py +++ b/tests/tools/ipython/test_ipython_magics.py @@ -2,9 +2,10 @@ import textwrap -from aiida.tools.ipython.ipython_magics import register_ipython_extension from IPython.testing.globalipapp import get_ipython +from aiida.tools.ipython.ipython_magics import register_ipython_extension + def test_ipython_magics(): """Test that the ``%aiida`` magic can be loaded and imports the ``QueryBuilder`` and ``Node`` classes.""" diff --git a/tests/tools/visualization/test_graph.py b/tests/tools/visualization/test_graph.py index ba47b335b2..db082017a9 100644 --- a/tests/tools/visualization/test_graph.py +++ b/tests/tools/visualization/test_graph.py @@ -11,6 +11,7 @@ import re import pytest + from aiida import orm from aiida.common import AttributeDict from aiida.common.links import LinkType diff --git a/tests/transports/test_all_plugins.py b/tests/transports/test_all_plugins.py index 0a25add0a7..918f4a051c 100644 --- a/tests/transports/test_all_plugins.py +++ b/tests/transports/test_all_plugins.py @@ -24,6 +24,7 @@ import psutil import pytest + from aiida.plugins import SchedulerFactory, TransportFactory, entry_point from aiida.transports import Transport diff --git a/tests/transports/test_local.py b/tests/transports/test_local.py index 97e821e749..0765302dfb 100644 --- a/tests/transports/test_local.py +++ b/tests/transports/test_local.py @@ -11,6 +11,7 @@ import getpass import pytest + from aiida.transports.plugins.local import LocalTransport from aiida.transports.transport import TransportInternalError diff --git a/tests/transports/test_ssh.py b/tests/transports/test_ssh.py index 27698dfa54..68205900d3 100644 --- a/tests/transports/test_ssh.py +++ b/tests/transports/test_ssh.py @@ -12,6 +12,7 @@ import paramiko import pytest + from aiida.transports.plugins.ssh import SshTransport from aiida.transports.transport import TransportInternalError diff --git a/tests/utils/processes.py b/tests/utils/processes.py index 43582eea45..7471560d5d 100644 --- a/tests/utils/processes.py +++ b/tests/utils/processes.py @@ -9,6 +9,7 @@ """Utilities for testing components from the workflow engine""" import plumpy + from aiida.engine import Process from aiida.orm import Bool, CalcJobNode, Data, WorkflowNode diff --git a/tests/workflows/arithmetic/test_add_multiply.py b/tests/workflows/arithmetic/test_add_multiply.py index 4000617856..1de06ff369 100644 --- a/tests/workflows/arithmetic/test_add_multiply.py +++ b/tests/workflows/arithmetic/test_add_multiply.py @@ -9,6 +9,7 @@ """Tests for the `aiida.workflows.arithmetic.add_multiply` work function.""" import pytest + from aiida.orm import Int from aiida.plugins import WorkflowFactory from aiida.workflows.arithmetic.add_multiply import add_multiply diff --git a/utils/validate_consistency.py b/utils/validate_consistency.py index 297dfccab8..71fd64a98f 100644 --- a/utils/validate_consistency.py +++ b/utils/validate_consistency.py @@ -98,9 +98,10 @@ def cli(): @cli.command('verdi-autodocs') def validate_verdi_documentation(): """Auto-generate the documentation for `verdi` through `click`.""" - from aiida.cmdline.commands.cmd_verdi import verdi from click import Context + from aiida.cmdline.commands.cmd_verdi import verdi + width = 90 # The maximum width of the formatted help strings in characters # Set the `verdi data` command to isolated mode such that external plugin commands are not discovered