simstack 2.0.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- simstack/__init__.py +0 -0
- simstack/_version.py +24 -0
- simstack/core/__init__.py +0 -0
- simstack/core/artifacts.py +406 -0
- simstack/core/asnyc_helper.py +14 -0
- simstack/core/config_file.py +60 -0
- simstack/core/context.py +283 -0
- simstack/core/definitions.py +22 -0
- simstack/core/engine.py +115 -0
- simstack/core/find_simstack_modules.py +41 -0
- simstack/core/hash.py +179 -0
- simstack/core/node.py +1137 -0
- simstack/core/node_claim.py +31 -0
- simstack/core/node_runner.py +362 -0
- simstack/core/process_results.py +102 -0
- simstack/core/recompute_artifacts.py +117 -0
- simstack/core/reset_db.py +12 -0
- simstack/core/resource_assignment.py +222 -0
- simstack/core/resources.py +90 -0
- simstack/core/route_table.py +24 -0
- simstack/core/run_docker.py +109 -0
- simstack/core/run_node.py +71 -0
- simstack/core/runner.py +169 -0
- simstack/core/services/__init__.py +11 -0
- simstack/core/services/base_service.py +191 -0
- simstack/core/services/file_transfer_service.py +117 -0
- simstack/core/services/git_restart_service.py +12 -0
- simstack/core/services/git_uv_update_service.py +105 -0
- simstack/core/services/node_execution_service.py +182 -0
- simstack/core/services/resource_branch_monitor_service.py +71 -0
- simstack/core/services/runner_cleanup_service.py +149 -0
- simstack/core/services/runner_manager.py +163 -0
- simstack/core/services/runner_status_service.py +10 -0
- simstack/core/services/slurm_status_service.py +67 -0
- simstack/core/services/stop_check_service.py +27 -0
- simstack/core/services/timeout_restart_service.py +26 -0
- simstack/core/simstack_result.py +39 -0
- simstack/core/submit_node.py +217 -0
- simstack/core/task_id.py +22 -0
- simstack/methods/__init__.py +0 -0
- simstack/methods/archive_files.py +292 -0
- simstack/methods/fire_and_forget_runner.py +113 -0
- simstack/methods/generate_test.py +125 -0
- simstack/methods/get_file.py +26 -0
- simstack/methods/mass_runner.py +154 -0
- simstack/methods/multiple_executor.py +307 -0
- simstack/methods/switch_git.py +16 -0
- simstack/methods/upload_helpers.py +81 -0
- simstack/models/__init__.py +74 -0
- simstack/models/array_list.py +21 -0
- simstack/models/array_storage.py +83 -0
- simstack/models/artifact_models.py +127 -0
- simstack/models/base_lists.py +51 -0
- simstack/models/base_types.py +209 -0
- simstack/models/charts_artifact.py +690 -0
- simstack/models/dataset.py +451 -0
- simstack/models/dataset_metadata.py +390 -0
- simstack/models/datasettuple.py +587 -0
- simstack/models/file_instance.py +150 -0
- simstack/models/file_list.py +45 -0
- simstack/models/files.py +424 -0
- simstack/models/fire_and_forget_result.py +19 -0
- simstack/models/images2d.py +113 -0
- simstack/models/log_entry_model.py +37 -0
- simstack/models/models.py +52 -0
- simstack/models/named_data_reference.py +36 -0
- simstack/models/node_registry.py +96 -0
- simstack/models/pandas_model.py +239 -0
- simstack/models/parameters.py +402 -0
- simstack/models/pickle_models.py +300 -0
- simstack/models/project.py +13 -0
- simstack/models/resource_assignment.py +170 -0
- simstack/models/resource_definition.py +125 -0
- simstack/models/runner_model.py +39 -0
- simstack/models/simple_table.py +79 -0
- simstack/models/simstack_model.py +97 -0
- simstack/models/slurm_info.py +17 -0
- simstack/models/table_artifact.py +87 -0
- simstack/models/tag.py +12 -0
- simstack/models/unused_test_file.py +5 -0
- simstack/simstack_marker.com +1 -0
- simstack/static/docs/.buildinfo +4 -0
- simstack/static/docs/_images/GUI Concept.webp +0 -0
- simstack/static/docs/_modules/index.html +434 -0
- simstack/static/docs/_modules/simstack/core/artifacts.html +743 -0
- simstack/static/docs/_modules/simstack/core/asnyc_helper.html +330 -0
- simstack/static/docs/_modules/simstack/core/config_file.html +379 -0
- simstack/static/docs/_modules/simstack/core/definitions.html +341 -0
- simstack/static/docs/_modules/simstack/core/engine.html +437 -0
- simstack/static/docs/_modules/simstack/core/find_simstack_modules.html +360 -0
- simstack/static/docs/_modules/simstack/core/hash.html +528 -0
- simstack/static/docs/_modules/simstack/core/node.html +1392 -0
- simstack/static/docs/_modules/simstack/core/node_claim.html +347 -0
- simstack/static/docs/_modules/simstack/core/node_runner.html +711 -0
- simstack/static/docs/_modules/simstack/core/process_results.html +418 -0
- simstack/static/docs/_modules/simstack/core/recompute_artifacts.html +433 -0
- simstack/static/docs/_modules/simstack/core/reset_db.html +328 -0
- simstack/static/docs/_modules/simstack/core/resource_assignment.html +553 -0
- simstack/static/docs/_modules/simstack/core/resources.html +424 -0
- simstack/static/docs/_modules/simstack/core/route_table.html +349 -0
- simstack/static/docs/_modules/simstack/core/run_docker.html +425 -0
- simstack/static/docs/_modules/simstack/core/run_node.html +390 -0
- simstack/static/docs/_modules/simstack/core/runner.html +491 -0
- simstack/static/docs/_modules/simstack/core/services/base_service.html +522 -0
- simstack/static/docs/_modules/simstack/core/services/file_transfer_service.html +436 -0
- simstack/static/docs/_modules/simstack/core/services/git_restart_service.html +331 -0
- simstack/static/docs/_modules/simstack/core/services/git_uv_update_service.html +427 -0
- simstack/static/docs/_modules/simstack/core/services/node_execution_service.html +507 -0
- simstack/static/docs/_modules/simstack/core/services/resource_branch_monitor_service.html +390 -0
- simstack/static/docs/_modules/simstack/core/services/runner_cleanup_service.html +468 -0
- simstack/static/docs/_modules/simstack/core/services/runner_manager.html +485 -0
- simstack/static/docs/_modules/simstack/core/services/runner_status_service.html +329 -0
- simstack/static/docs/_modules/simstack/core/services/slurm_status_service.html +386 -0
- simstack/static/docs/_modules/simstack/core/services/stop_check_service.html +346 -0
- simstack/static/docs/_modules/simstack/core/services/timeout_restart_service.html +345 -0
- simstack/static/docs/_modules/simstack/core/simstack_result.html +355 -0
- simstack/static/docs/_modules/simstack/core/submit_node.html +536 -0
- simstack/static/docs/_modules/simstack/core/task_id.html +344 -0
- simstack/static/docs/_modules/simstack/methods/archive_files.html +598 -0
- simstack/static/docs/_modules/simstack/methods/fire_and_forget_runner.html +432 -0
- simstack/static/docs/_modules/simstack/methods/generate_test.html +443 -0
- simstack/static/docs/_modules/simstack/methods/get_file.html +342 -0
- simstack/static/docs/_modules/simstack/methods/mass_runner.html +476 -0
- simstack/static/docs/_modules/simstack/methods/multiple_executor.html +674 -0
- simstack/static/docs/_modules/simstack/methods/switch_git.html +332 -0
- simstack/static/docs/_modules/simstack/methods/upload_helpers.html +403 -0
- simstack/static/docs/_modules/simstack/models/array_list.html +337 -0
- simstack/static/docs/_modules/simstack/models/array_storage.html +417 -0
- simstack/static/docs/_modules/simstack/models/base_lists.html +374 -0
- simstack/static/docs/_modules/simstack/models/base_types.html +588 -0
- simstack/static/docs/_modules/simstack/models/charts_artifact.html +1035 -0
- simstack/static/docs/_modules/simstack/models/dataset.html +866 -0
- simstack/static/docs/_modules/simstack/models/dataset_metadata.html +711 -0
- simstack/static/docs/_modules/simstack/models/datasettuple.html +1005 -0
- simstack/static/docs/_modules/simstack/models/file_instance.html +472 -0
- simstack/static/docs/_modules/simstack/models/file_list.html +367 -0
- simstack/static/docs/_modules/simstack/models/files.html +773 -0
- simstack/static/docs/_modules/simstack/models/fire_and_forget_result.html +335 -0
- simstack/static/docs/_modules/simstack/models/images2d.html +447 -0
- simstack/static/docs/_modules/simstack/models/log_entry_model.html +356 -0
- simstack/static/docs/_modules/simstack/models/models.html +374 -0
- simstack/static/docs/_modules/simstack/models/named_data_reference.html +355 -0
- simstack/static/docs/_modules/simstack/models/node_registry.html +415 -0
- simstack/static/docs/_modules/simstack/models/pandas_model.html +570 -0
- simstack/static/docs/_modules/simstack/models/parameters.html +739 -0
- simstack/static/docs/_modules/simstack/models/pickle_models.html +631 -0
- simstack/static/docs/_modules/simstack/models/project.html +329 -0
- simstack/static/docs/_modules/simstack/models/resource_assignment.html +501 -0
- simstack/static/docs/_modules/simstack/models/resource_definition.html +477 -0
- simstack/static/docs/_modules/simstack/models/runner_model.html +361 -0
- simstack/static/docs/_modules/simstack/models/simple_table.html +413 -0
- simstack/static/docs/_modules/simstack/models/simstack_model.html +416 -0
- simstack/static/docs/_modules/simstack/models/slurm_info.html +333 -0
- simstack/static/docs/_modules/simstack/models/table_artifact.html +406 -0
- simstack/static/docs/_modules/simstack/models/tag.html +328 -0
- simstack/static/docs/_modules/simstack/tables/model_table.html +519 -0
- simstack/static/docs/_modules/simstack/tables/node_children.html +538 -0
- simstack/static/docs/_modules/simstack/tables/node_table.html +854 -0
- simstack/static/docs/_modules/simstack/tables/table_builder.html +642 -0
- simstack/static/docs/_modules/simstack/util/async_zip_utils.html +337 -0
- simstack/static/docs/_modules/simstack/util/b64mixin.html +339 -0
- simstack/static/docs/_modules/simstack/util/cleaned_json_schema.html +336 -0
- simstack/static/docs/_modules/simstack/util/config_reader.html +498 -0
- simstack/static/docs/_modules/simstack/util/custom_model_dump.html +391 -0
- simstack/static/docs/_modules/simstack/util/database_information.html +488 -0
- simstack/static/docs/_modules/simstack/util/db.html +1392 -0
- simstack/static/docs/_modules/simstack/util/db_logger.html +448 -0
- simstack/static/docs/_modules/simstack/util/default_from_dict.html +376 -0
- simstack/static/docs/_modules/simstack/util/directory_iterator.html +553 -0
- simstack/static/docs/_modules/simstack/util/docstring_parser.html +526 -0
- simstack/static/docs/_modules/simstack/util/file_hashing.html +394 -0
- simstack/static/docs/_modules/simstack/util/file_transfer_client.html +791 -0
- simstack/static/docs/_modules/simstack/util/files.html +733 -0
- simstack/static/docs/_modules/simstack/util/find_python_files.html +349 -0
- simstack/static/docs/_modules/simstack/util/generate_ui_schema.html +396 -0
- simstack/static/docs/_modules/simstack/util/generic_list_mixin.html +487 -0
- simstack/static/docs/_modules/simstack/util/get_module_path.html +336 -0
- simstack/static/docs/_modules/simstack/util/git_pull.html +381 -0
- simstack/static/docs/_modules/simstack/util/git_repository_status.html +411 -0
- simstack/static/docs/_modules/simstack/util/import_module.html +377 -0
- simstack/static/docs/_modules/simstack/util/importer.html +637 -0
- simstack/static/docs/_modules/simstack/util/init_data_source.html +357 -0
- simstack/static/docs/_modules/simstack/util/make_graph.html +423 -0
- simstack/static/docs/_modules/simstack/util/make_table.html +1171 -0
- simstack/static/docs/_modules/simstack/util/mappings.html +378 -0
- simstack/static/docs/_modules/simstack/util/minimal_route_finder.html +388 -0
- simstack/static/docs/_modules/simstack/util/mock_db.html +472 -0
- simstack/static/docs/_modules/simstack/util/module_path_checker.html +354 -0
- simstack/static/docs/_modules/simstack/util/object_list_mixin.html +649 -0
- simstack/static/docs/_modules/simstack/util/path_manager.html +566 -0
- simstack/static/docs/_modules/simstack/util/project_root_finder.html +357 -0
- simstack/static/docs/_modules/simstack/util/queue_watcher.html +593 -0
- simstack/static/docs/_modules/simstack/util/resource_config.html +532 -0
- simstack/static/docs/_modules/simstack/util/route_finder.html +390 -0
- simstack/static/docs/_modules/simstack/util/runner_util.html +487 -0
- simstack/static/docs/_modules/simstack/util/runner_utils.html +468 -0
- simstack/static/docs/_modules/simstack/util/safe_code_executor.html +510 -0
- simstack/static/docs/_modules/simstack/util/sample_config.html +414 -0
- simstack/static/docs/_modules/simstack/util/sensitive_content_filter.html +364 -0
- simstack/static/docs/_modules/simstack/util/setup_logging.html +365 -0
- simstack/static/docs/_modules/simstack/util/submit_to_watchdog.html +425 -0
- simstack/static/docs/_modules/simstack/util/toml_reader.html +482 -0
- simstack/static/docs/_modules/simstack/util/transform_file_name.html +357 -0
- simstack/static/docs/_modules/simstack/util/ui_tools.html +541 -0
- simstack/static/docs/_sources/architecture.rst.txt +25 -0
- simstack/static/docs/_sources/array_lists.rst.txt +60 -0
- simstack/static/docs/_sources/ci_pipeline.rst.txt +34 -0
- simstack/static/docs/_sources/data.rst.txt +175 -0
- simstack/static/docs/_sources/database_migrations.rst.txt +310 -0
- simstack/static/docs/_sources/datasets.rst.txt +93 -0
- simstack/static/docs/_sources/developer_guide.rst.txt +25 -0
- simstack/static/docs/_sources/docker_nodes.rst.txt +149 -0
- simstack/static/docs/_sources/files.rst.txt +159 -0
- simstack/static/docs/_sources/fire_and_forget_runner.rst.txt +67 -0
- simstack/static/docs/_sources/index.rst.txt +25 -0
- simstack/static/docs/_sources/installation.rst.txt +213 -0
- simstack/static/docs/_sources/lists.rst.txt +111 -0
- simstack/static/docs/_sources/mass_runner.rst.txt +91 -0
- simstack/static/docs/_sources/misc.rst.txt +106 -0
- simstack/static/docs/_sources/overview.rst.txt +91 -0
- simstack/static/docs/_sources/recovery.rst.txt +38 -0
- simstack/static/docs/_sources/resource_config.rst.txt +141 -0
- simstack/static/docs/_sources/simstack/modules/modules.rst.txt +7 -0
- simstack/static/docs/_sources/simstack/modules/simstack.core.rst.txt +205 -0
- simstack/static/docs/_sources/simstack/modules/simstack.core.services.rst.txt +109 -0
- simstack/static/docs/_sources/simstack/modules/simstack.methods.rst.txt +77 -0
- simstack/static/docs/_sources/simstack/modules/simstack.models.rst.txt +261 -0
- simstack/static/docs/_sources/simstack/modules/simstack.rst.txt +22 -0
- simstack/static/docs/_sources/simstack/modules/simstack.tables.rst.txt +45 -0
- simstack/static/docs/_sources/simstack/modules/simstack.util.rst.txt +381 -0
- simstack/static/docs/_sources/submit.rst.txt +141 -0
- simstack/static/docs/_sources/tables.rst.txt +50 -0
- simstack/static/docs/_sources/testing_complex_nodes.rst.txt +92 -0
- simstack/static/docs/_sources/ui_documentation.rst.txt +272 -0
- simstack/static/docs/_sources/workflows.rst.txt +446 -0
- simstack/static/docs/_static/base-stemmer.js +476 -0
- simstack/static/docs/_static/basic.css +906 -0
- simstack/static/docs/_static/cobalt2-theme.css +1 -0
- simstack/static/docs/_static/debug.css +69 -0
- simstack/static/docs/_static/docs-build-badge.css +51 -0
- simstack/static/docs/_static/docs-build-badge.js +51 -0
- simstack/static/docs/_static/doctools.js +150 -0
- simstack/static/docs/_static/documentation_options.js +13 -0
- simstack/static/docs/_static/english-stemmer.js +1066 -0
- simstack/static/docs/_static/file.png +0 -0
- simstack/static/docs/_static/language_data.js +13 -0
- simstack/static/docs/_static/minus.png +0 -0
- simstack/static/docs/_static/plus.png +0 -0
- simstack/static/docs/_static/pygments.css +250 -0
- simstack/static/docs/_static/scripts/furo-extensions.js +0 -0
- simstack/static/docs/_static/scripts/furo.js +3 -0
- simstack/static/docs/_static/scripts/furo.js.LICENSE.txt +7 -0
- simstack/static/docs/_static/scripts/furo.js.map +1 -0
- simstack/static/docs/_static/searchtools.js +693 -0
- simstack/static/docs/_static/skeleton.css +296 -0
- simstack/static/docs/_static/sphinx_highlight.js +159 -0
- simstack/static/docs/_static/styles/furo-extensions.css +2 -0
- simstack/static/docs/_static/styles/furo-extensions.css.map +1 -0
- simstack/static/docs/_static/styles/furo.css +2 -0
- simstack/static/docs/_static/styles/furo.css.map +1 -0
- simstack/static/docs/architecture.html +340 -0
- simstack/static/docs/array_lists.html +678 -0
- simstack/static/docs/ci_pipeline.html +385 -0
- simstack/static/docs/data.html +545 -0
- simstack/static/docs/database_migrations.html +652 -0
- simstack/static/docs/datasets.html +1268 -0
- simstack/static/docs/developer_guide.html +359 -0
- simstack/static/docs/docker_nodes.html +503 -0
- simstack/static/docs/files.html +718 -0
- simstack/static/docs/fire_and_forget_runner.html +641 -0
- simstack/static/docs/genindex.html +6390 -0
- simstack/static/docs/index.html +516 -0
- simstack/static/docs/installation.html +553 -0
- simstack/static/docs/lists.html +478 -0
- simstack/static/docs/mass_runner.html +481 -0
- simstack/static/docs/misc.html +454 -0
- simstack/static/docs/objects.inv +0 -0
- simstack/static/docs/overview.html +469 -0
- simstack/static/docs/py-modindex.html +1111 -0
- simstack/static/docs/recovery.html +371 -0
- simstack/static/docs/resource_config.html +590 -0
- simstack/static/docs/search.html +327 -0
- simstack/static/docs/searchindex.js +1 -0
- simstack/static/docs/simstack/modules/modules.html +489 -0
- simstack/static/docs/simstack/modules/simstack.core.html +1883 -0
- simstack/static/docs/simstack/modules/simstack.core.services.html +698 -0
- simstack/static/docs/simstack/modules/simstack.html +3060 -0
- simstack/static/docs/simstack/modules/simstack.methods.html +1150 -0
- simstack/static/docs/simstack/modules/simstack.models.html +13113 -0
- simstack/static/docs/simstack/modules/simstack.tables.html +635 -0
- simstack/static/docs/simstack/modules/simstack.util.html +3320 -0
- simstack/static/docs/submit.html +487 -0
- simstack/static/docs/tables.html +539 -0
- simstack/static/docs/testing_complex_nodes.html +458 -0
- simstack/static/docs/ui_documentation.html +788 -0
- simstack/static/docs/workflows.html +766 -0
- simstack/tables/__init__.py +0 -0
- simstack/tables/model_table.py +191 -0
- simstack/tables/node_children.py +219 -0
- simstack/tables/node_table.py +517 -0
- simstack/tables/table_builder.py +314 -0
- simstack/util/__init__.py +0 -0
- simstack/util/async_zip_utils.py +18 -0
- simstack/util/b64mixin.py +23 -0
- simstack/util/cleaned_json_schema.py +20 -0
- simstack/util/config_reader.py +179 -0
- simstack/util/custom_model_dump.py +75 -0
- simstack/util/database_information.py +160 -0
- simstack/util/db.py +1013 -0
- simstack/util/db_logger.py +117 -0
- simstack/util/default_from_dict.py +57 -0
- simstack/util/directory_iterator.py +216 -0
- simstack/util/docstring_parser.py +186 -0
- simstack/util/file_hashing.py +72 -0
- simstack/util/file_transfer_client.py +427 -0
- simstack/util/files.py +396 -0
- simstack/util/find_python_files.py +33 -0
- simstack/util/generate_ui_schema.py +80 -0
- simstack/util/generic_list_mixin.py +120 -0
- simstack/util/geometry_utils.py +118 -0
- simstack/util/get_module_path.py +20 -0
- simstack/util/git_pull.py +65 -0
- simstack/util/git_repository_status.py +95 -0
- simstack/util/import_module.py +63 -0
- simstack/util/importer.py +312 -0
- simstack/util/init_data_source.py +41 -0
- simstack/util/make_graph.py +107 -0
- simstack/util/make_table.py +837 -0
- simstack/util/mappings.py +41 -0
- simstack/util/minimal_route_finder.py +72 -0
- simstack/util/mock_db.py +144 -0
- simstack/util/module_path_checker.py +38 -0
- simstack/util/object_list_mixin.py +282 -0
- simstack/util/path_manager.py +223 -0
- simstack/util/project_root_finder.py +41 -0
- simstack/util/queue_watcher.py +262 -0
- simstack/util/resource_config.py +198 -0
- simstack/util/route_finder.py +74 -0
- simstack/util/runner_util.py +166 -0
- simstack/util/runner_utils.py +143 -0
- simstack/util/safe_code_executor.py +194 -0
- simstack/util/sample_config.py +98 -0
- simstack/util/sensitive_content_filter.py +48 -0
- simstack/util/setup_logging.py +49 -0
- simstack/util/submit_to_watchdog.py +106 -0
- simstack/util/toml_reader.py +142 -0
- simstack/util/transform_file_name.py +41 -0
- simstack/util/ui_tools.py +213 -0
- simstack-2.0.1.dist-info/METADATA +454 -0
- simstack-2.0.1.dist-info/RECORD +354 -0
- simstack-2.0.1.dist-info/WHEEL +5 -0
- simstack-2.0.1.dist-info/entry_points.txt +12 -0
- simstack-2.0.1.dist-info/licenses/LICENSE +21 -0
- simstack-2.0.1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
simstack.util package
|
|
2
|
+
=====================
|
|
3
|
+
|
|
4
|
+
Submodules
|
|
5
|
+
----------
|
|
6
|
+
|
|
7
|
+
simstack.util.async\_zip\_utils module
|
|
8
|
+
--------------------------------------
|
|
9
|
+
|
|
10
|
+
.. automodule:: simstack.util.async_zip_utils
|
|
11
|
+
:members:
|
|
12
|
+
:show-inheritance:
|
|
13
|
+
:undoc-members:
|
|
14
|
+
|
|
15
|
+
simstack.util.b64mixin module
|
|
16
|
+
-----------------------------
|
|
17
|
+
|
|
18
|
+
.. automodule:: simstack.util.b64mixin
|
|
19
|
+
:members:
|
|
20
|
+
:show-inheritance:
|
|
21
|
+
:undoc-members:
|
|
22
|
+
|
|
23
|
+
simstack.util.cleaned\_json\_schema module
|
|
24
|
+
------------------------------------------
|
|
25
|
+
|
|
26
|
+
.. automodule:: simstack.util.cleaned_json_schema
|
|
27
|
+
:members:
|
|
28
|
+
:show-inheritance:
|
|
29
|
+
:undoc-members:
|
|
30
|
+
|
|
31
|
+
simstack.util.config\_reader module
|
|
32
|
+
-----------------------------------
|
|
33
|
+
|
|
34
|
+
.. automodule:: simstack.util.config_reader
|
|
35
|
+
:members:
|
|
36
|
+
:show-inheritance:
|
|
37
|
+
:undoc-members:
|
|
38
|
+
|
|
39
|
+
simstack.util.custom\_model\_dump module
|
|
40
|
+
----------------------------------------
|
|
41
|
+
|
|
42
|
+
.. automodule:: simstack.util.custom_model_dump
|
|
43
|
+
:members:
|
|
44
|
+
:show-inheritance:
|
|
45
|
+
:undoc-members:
|
|
46
|
+
|
|
47
|
+
simstack.util.database\_information module
|
|
48
|
+
------------------------------------------
|
|
49
|
+
|
|
50
|
+
.. automodule:: simstack.util.database_information
|
|
51
|
+
:members:
|
|
52
|
+
:show-inheritance:
|
|
53
|
+
:undoc-members:
|
|
54
|
+
|
|
55
|
+
simstack.util.db module
|
|
56
|
+
-----------------------
|
|
57
|
+
|
|
58
|
+
.. automodule:: simstack.util.db
|
|
59
|
+
:members:
|
|
60
|
+
:show-inheritance:
|
|
61
|
+
:undoc-members:
|
|
62
|
+
|
|
63
|
+
simstack.util.db\_logger module
|
|
64
|
+
-------------------------------
|
|
65
|
+
|
|
66
|
+
.. automodule:: simstack.util.db_logger
|
|
67
|
+
:members:
|
|
68
|
+
:show-inheritance:
|
|
69
|
+
:undoc-members:
|
|
70
|
+
|
|
71
|
+
simstack.util.default\_from\_dict module
|
|
72
|
+
----------------------------------------
|
|
73
|
+
|
|
74
|
+
.. automodule:: simstack.util.default_from_dict
|
|
75
|
+
:members:
|
|
76
|
+
:show-inheritance:
|
|
77
|
+
:undoc-members:
|
|
78
|
+
|
|
79
|
+
simstack.util.directory\_iterator module
|
|
80
|
+
----------------------------------------
|
|
81
|
+
|
|
82
|
+
.. automodule:: simstack.util.directory_iterator
|
|
83
|
+
:members:
|
|
84
|
+
:show-inheritance:
|
|
85
|
+
:undoc-members:
|
|
86
|
+
|
|
87
|
+
simstack.util.docstring\_parser module
|
|
88
|
+
--------------------------------------
|
|
89
|
+
|
|
90
|
+
.. automodule:: simstack.util.docstring_parser
|
|
91
|
+
:members:
|
|
92
|
+
:show-inheritance:
|
|
93
|
+
:undoc-members:
|
|
94
|
+
|
|
95
|
+
simstack.util.file\_hashing module
|
|
96
|
+
----------------------------------
|
|
97
|
+
|
|
98
|
+
.. automodule:: simstack.util.file_hashing
|
|
99
|
+
:members:
|
|
100
|
+
:show-inheritance:
|
|
101
|
+
:undoc-members:
|
|
102
|
+
|
|
103
|
+
simstack.util.file\_transfer\_client module
|
|
104
|
+
-------------------------------------------
|
|
105
|
+
|
|
106
|
+
.. automodule:: simstack.util.file_transfer_client
|
|
107
|
+
:members:
|
|
108
|
+
:show-inheritance:
|
|
109
|
+
:undoc-members:
|
|
110
|
+
|
|
111
|
+
simstack.util.files module
|
|
112
|
+
--------------------------
|
|
113
|
+
|
|
114
|
+
.. automodule:: simstack.util.files
|
|
115
|
+
:members:
|
|
116
|
+
:show-inheritance:
|
|
117
|
+
:undoc-members:
|
|
118
|
+
|
|
119
|
+
simstack.util.find\_python\_files module
|
|
120
|
+
----------------------------------------
|
|
121
|
+
|
|
122
|
+
.. automodule:: simstack.util.find_python_files
|
|
123
|
+
:members:
|
|
124
|
+
:show-inheritance:
|
|
125
|
+
:undoc-members:
|
|
126
|
+
|
|
127
|
+
simstack.util.generate\_ui\_schema module
|
|
128
|
+
-----------------------------------------
|
|
129
|
+
|
|
130
|
+
.. automodule:: simstack.util.generate_ui_schema
|
|
131
|
+
:members:
|
|
132
|
+
:show-inheritance:
|
|
133
|
+
:undoc-members:
|
|
134
|
+
|
|
135
|
+
simstack.util.generic\_list\_mixin module
|
|
136
|
+
-----------------------------------------
|
|
137
|
+
|
|
138
|
+
.. automodule:: simstack.util.generic_list_mixin
|
|
139
|
+
:members:
|
|
140
|
+
:show-inheritance:
|
|
141
|
+
:undoc-members:
|
|
142
|
+
|
|
143
|
+
simstack.util.geometry\_utils module
|
|
144
|
+
------------------------------------
|
|
145
|
+
|
|
146
|
+
.. automodule:: simstack.util.geometry_utils
|
|
147
|
+
:members:
|
|
148
|
+
:show-inheritance:
|
|
149
|
+
:undoc-members:
|
|
150
|
+
|
|
151
|
+
simstack.util.get\_module\_path module
|
|
152
|
+
--------------------------------------
|
|
153
|
+
|
|
154
|
+
.. automodule:: simstack.util.get_module_path
|
|
155
|
+
:members:
|
|
156
|
+
:show-inheritance:
|
|
157
|
+
:undoc-members:
|
|
158
|
+
|
|
159
|
+
simstack.util.git\_pull module
|
|
160
|
+
------------------------------
|
|
161
|
+
|
|
162
|
+
.. automodule:: simstack.util.git_pull
|
|
163
|
+
:members:
|
|
164
|
+
:show-inheritance:
|
|
165
|
+
:undoc-members:
|
|
166
|
+
|
|
167
|
+
simstack.util.git\_repository\_status module
|
|
168
|
+
--------------------------------------------
|
|
169
|
+
|
|
170
|
+
.. automodule:: simstack.util.git_repository_status
|
|
171
|
+
:members:
|
|
172
|
+
:show-inheritance:
|
|
173
|
+
:undoc-members:
|
|
174
|
+
|
|
175
|
+
simstack.util.import\_module module
|
|
176
|
+
-----------------------------------
|
|
177
|
+
|
|
178
|
+
.. automodule:: simstack.util.import_module
|
|
179
|
+
:members:
|
|
180
|
+
:show-inheritance:
|
|
181
|
+
:undoc-members:
|
|
182
|
+
|
|
183
|
+
simstack.util.importer module
|
|
184
|
+
-----------------------------
|
|
185
|
+
|
|
186
|
+
.. automodule:: simstack.util.importer
|
|
187
|
+
:members:
|
|
188
|
+
:show-inheritance:
|
|
189
|
+
:undoc-members:
|
|
190
|
+
|
|
191
|
+
simstack.util.init\_data\_source module
|
|
192
|
+
---------------------------------------
|
|
193
|
+
|
|
194
|
+
.. automodule:: simstack.util.init_data_source
|
|
195
|
+
:members:
|
|
196
|
+
:show-inheritance:
|
|
197
|
+
:undoc-members:
|
|
198
|
+
|
|
199
|
+
simstack.util.make\_graph module
|
|
200
|
+
--------------------------------
|
|
201
|
+
|
|
202
|
+
.. automodule:: simstack.util.make_graph
|
|
203
|
+
:members:
|
|
204
|
+
:show-inheritance:
|
|
205
|
+
:undoc-members:
|
|
206
|
+
|
|
207
|
+
simstack.util.make\_table module
|
|
208
|
+
--------------------------------
|
|
209
|
+
|
|
210
|
+
.. automodule:: simstack.util.make_table
|
|
211
|
+
:members:
|
|
212
|
+
:show-inheritance:
|
|
213
|
+
:undoc-members:
|
|
214
|
+
|
|
215
|
+
simstack.util.mappings module
|
|
216
|
+
-----------------------------
|
|
217
|
+
|
|
218
|
+
.. automodule:: simstack.util.mappings
|
|
219
|
+
:members:
|
|
220
|
+
:show-inheritance:
|
|
221
|
+
:undoc-members:
|
|
222
|
+
|
|
223
|
+
simstack.util.minimal\_route\_finder module
|
|
224
|
+
-------------------------------------------
|
|
225
|
+
|
|
226
|
+
.. automodule:: simstack.util.minimal_route_finder
|
|
227
|
+
:members:
|
|
228
|
+
:show-inheritance:
|
|
229
|
+
:undoc-members:
|
|
230
|
+
|
|
231
|
+
simstack.util.mock\_db module
|
|
232
|
+
-----------------------------
|
|
233
|
+
|
|
234
|
+
.. automodule:: simstack.util.mock_db
|
|
235
|
+
:members:
|
|
236
|
+
:show-inheritance:
|
|
237
|
+
:undoc-members:
|
|
238
|
+
|
|
239
|
+
simstack.util.module\_path\_checker module
|
|
240
|
+
------------------------------------------
|
|
241
|
+
|
|
242
|
+
.. automodule:: simstack.util.module_path_checker
|
|
243
|
+
:members:
|
|
244
|
+
:show-inheritance:
|
|
245
|
+
:undoc-members:
|
|
246
|
+
|
|
247
|
+
simstack.util.object\_list\_mixin module
|
|
248
|
+
----------------------------------------
|
|
249
|
+
|
|
250
|
+
.. automodule:: simstack.util.object_list_mixin
|
|
251
|
+
:members:
|
|
252
|
+
:show-inheritance:
|
|
253
|
+
:undoc-members:
|
|
254
|
+
|
|
255
|
+
simstack.util.path\_manager module
|
|
256
|
+
----------------------------------
|
|
257
|
+
|
|
258
|
+
.. automodule:: simstack.util.path_manager
|
|
259
|
+
:members:
|
|
260
|
+
:show-inheritance:
|
|
261
|
+
:undoc-members:
|
|
262
|
+
|
|
263
|
+
simstack.util.project\_root\_finder module
|
|
264
|
+
------------------------------------------
|
|
265
|
+
|
|
266
|
+
.. automodule:: simstack.util.project_root_finder
|
|
267
|
+
:members:
|
|
268
|
+
:show-inheritance:
|
|
269
|
+
:undoc-members:
|
|
270
|
+
|
|
271
|
+
simstack.util.queue\_watcher module
|
|
272
|
+
-----------------------------------
|
|
273
|
+
|
|
274
|
+
.. automodule:: simstack.util.queue_watcher
|
|
275
|
+
:members:
|
|
276
|
+
:show-inheritance:
|
|
277
|
+
:undoc-members:
|
|
278
|
+
|
|
279
|
+
simstack.util.resource\_config module
|
|
280
|
+
-------------------------------------
|
|
281
|
+
|
|
282
|
+
.. automodule:: simstack.util.resource_config
|
|
283
|
+
:members:
|
|
284
|
+
:show-inheritance:
|
|
285
|
+
:undoc-members:
|
|
286
|
+
|
|
287
|
+
simstack.util.route\_finder module
|
|
288
|
+
----------------------------------
|
|
289
|
+
|
|
290
|
+
.. automodule:: simstack.util.route_finder
|
|
291
|
+
:members:
|
|
292
|
+
:show-inheritance:
|
|
293
|
+
:undoc-members:
|
|
294
|
+
|
|
295
|
+
simstack.util.runner\_util module
|
|
296
|
+
---------------------------------
|
|
297
|
+
|
|
298
|
+
.. automodule:: simstack.util.runner_util
|
|
299
|
+
:members:
|
|
300
|
+
:show-inheritance:
|
|
301
|
+
:undoc-members:
|
|
302
|
+
|
|
303
|
+
simstack.util.runner\_utils module
|
|
304
|
+
----------------------------------
|
|
305
|
+
|
|
306
|
+
.. automodule:: simstack.util.runner_utils
|
|
307
|
+
:members:
|
|
308
|
+
:show-inheritance:
|
|
309
|
+
:undoc-members:
|
|
310
|
+
|
|
311
|
+
simstack.util.safe\_code\_executor module
|
|
312
|
+
-----------------------------------------
|
|
313
|
+
|
|
314
|
+
.. automodule:: simstack.util.safe_code_executor
|
|
315
|
+
:members:
|
|
316
|
+
:show-inheritance:
|
|
317
|
+
:undoc-members:
|
|
318
|
+
|
|
319
|
+
simstack.util.sample\_config module
|
|
320
|
+
-----------------------------------
|
|
321
|
+
|
|
322
|
+
.. automodule:: simstack.util.sample_config
|
|
323
|
+
:members:
|
|
324
|
+
:show-inheritance:
|
|
325
|
+
:undoc-members:
|
|
326
|
+
|
|
327
|
+
simstack.util.sensitive\_content\_filter module
|
|
328
|
+
-----------------------------------------------
|
|
329
|
+
|
|
330
|
+
.. automodule:: simstack.util.sensitive_content_filter
|
|
331
|
+
:members:
|
|
332
|
+
:show-inheritance:
|
|
333
|
+
:undoc-members:
|
|
334
|
+
|
|
335
|
+
simstack.util.setup\_logging module
|
|
336
|
+
-----------------------------------
|
|
337
|
+
|
|
338
|
+
.. automodule:: simstack.util.setup_logging
|
|
339
|
+
:members:
|
|
340
|
+
:show-inheritance:
|
|
341
|
+
:undoc-members:
|
|
342
|
+
|
|
343
|
+
simstack.util.submit\_to\_watchdog module
|
|
344
|
+
-----------------------------------------
|
|
345
|
+
|
|
346
|
+
.. automodule:: simstack.util.submit_to_watchdog
|
|
347
|
+
:members:
|
|
348
|
+
:show-inheritance:
|
|
349
|
+
:undoc-members:
|
|
350
|
+
|
|
351
|
+
simstack.util.toml\_reader module
|
|
352
|
+
---------------------------------
|
|
353
|
+
|
|
354
|
+
.. automodule:: simstack.util.toml_reader
|
|
355
|
+
:members:
|
|
356
|
+
:show-inheritance:
|
|
357
|
+
:undoc-members:
|
|
358
|
+
|
|
359
|
+
simstack.util.transform\_file\_name module
|
|
360
|
+
------------------------------------------
|
|
361
|
+
|
|
362
|
+
.. automodule:: simstack.util.transform_file_name
|
|
363
|
+
:members:
|
|
364
|
+
:show-inheritance:
|
|
365
|
+
:undoc-members:
|
|
366
|
+
|
|
367
|
+
simstack.util.ui\_tools module
|
|
368
|
+
------------------------------
|
|
369
|
+
|
|
370
|
+
.. automodule:: simstack.util.ui_tools
|
|
371
|
+
:members:
|
|
372
|
+
:show-inheritance:
|
|
373
|
+
:undoc-members:
|
|
374
|
+
|
|
375
|
+
Module contents
|
|
376
|
+
---------------
|
|
377
|
+
|
|
378
|
+
.. automodule:: simstack.util
|
|
379
|
+
:members:
|
|
380
|
+
:show-inheritance:
|
|
381
|
+
:undoc-members:
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
|
|
2
|
+
Submitting New Workflows
|
|
3
|
+
------------------------
|
|
4
|
+
|
|
5
|
+
The Submit Panel is the main interface for creating and submitting computational jobs in the system. It provides a comprehensive workflow that guides users through model selection, parameter configuration, and input data specification.
|
|
6
|
+
To submit a new workflow:
|
|
7
|
+
|
|
8
|
+
1. Navigate to the submission page
|
|
9
|
+
2. Select the workflow type from the available options
|
|
10
|
+
3. Fill in the required parameters in the form
|
|
11
|
+
- Forms are dynamically generated based on the workflow type
|
|
12
|
+
- Required fields are marked with an asterisk (*)
|
|
13
|
+
- Help text provides guidance for each parameter
|
|
14
|
+
4. Click "Submit" to start the workflow
|
|
15
|
+
5. You'll be redirected to the dashboard where you can monitor the task's progress
|
|
16
|
+
|
|
17
|
+
The submission forms use React JSON Schema Form, which provides:
|
|
18
|
+
|
|
19
|
+
* **Validation**: Immediate feedback on invalid inputs
|
|
20
|
+
* **Conditional Fields**: Fields that appear based on other selections
|
|
21
|
+
* **File Uploads**: For workflows that require input files
|
|
22
|
+
* **Advanced Controls**: Sliders, dropdowns, and other interactive elements
|
|
23
|
+
* **Special Fields**: for complex objects, e.g. molecular data
|
|
24
|
+
|
|
25
|
+
The Submit Panel consists of several key sections organized in a logical workflow:
|
|
26
|
+
|
|
27
|
+
1. **Model Selection** (CascadingNodeSelector)
|
|
28
|
+
2. **Job Configuration** (Custom Name & Category)
|
|
29
|
+
3. **Parameter Settings** (ParametersAccordion)
|
|
30
|
+
4. **Input Data Configuration** (Input Mappings)
|
|
31
|
+
5. **Template Management** (TemplateSelector)
|
|
32
|
+
6. **Job Submission**
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
Node Selector
|
|
36
|
+
~~~~~~~~~~~~~
|
|
37
|
+
|
|
38
|
+
The CascadingNodeSelector is the primary interface for browsing and selecting computational models from the available node registry.
|
|
39
|
+
|
|
40
|
+
.. figure:: resources/node_selector.png
|
|
41
|
+
:alt: Node Selector Interface
|
|
42
|
+
:align: center
|
|
43
|
+
:width: 700px
|
|
44
|
+
|
|
45
|
+
*Hierarchical model browser with favorites and tree structure*
|
|
46
|
+
|
|
47
|
+
**Hierarchical Model Organization**
|
|
48
|
+
Models are organized in a tree structure based on their function mapping, making it easy to navigate through different categories and modules.
|
|
49
|
+
|
|
50
|
+
.. figure:: resources/model-tree-structure.png
|
|
51
|
+
:alt: Model Tree Structure
|
|
52
|
+
:align: center
|
|
53
|
+
:width: 500px
|
|
54
|
+
|
|
55
|
+
*Example of hierarchical model organization which mirrors the directory structure of your project*
|
|
56
|
+
|
|
57
|
+
**Favorites System**
|
|
58
|
+
Users can mark frequently used models as favorites for quick access:
|
|
59
|
+
|
|
60
|
+
- Star icon checkbox for marking/unmarking favorites
|
|
61
|
+
- Dedicated "Favorites" section at the top of the tree
|
|
62
|
+
- Persistent favorite status across sessions
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
Once a model is selected, the ParametersAccordion and Input sections dynamically update to reflect the chosen model's requirements.
|
|
66
|
+
|
|
67
|
+
Parameter Settings
|
|
68
|
+
~~~~~~~~~~~~~~~~~~
|
|
69
|
+
|
|
70
|
+
The ParametersAccordion section provides comprehensive job parameter configuration options.
|
|
71
|
+
|
|
72
|
+
.. figure:: resources/job-parameters.png
|
|
73
|
+
:alt: Parameters Accordion
|
|
74
|
+
:align: center
|
|
75
|
+
:width: 700px
|
|
76
|
+
|
|
77
|
+
*Complete parameters configuration interface (for a slurm-queue job)*
|
|
78
|
+
|
|
79
|
+
**Resource Selection**
|
|
80
|
+
Configure computational resources for job execution:
|
|
81
|
+
|
|
82
|
+
- Dropdown selection from allowed resources
|
|
83
|
+
- Default option available if no specific resource needed
|
|
84
|
+
- Dynamic loading of available resources from the system
|
|
85
|
+
|
|
86
|
+
**Queue Configuration**
|
|
87
|
+
Specify execution queue for job scheduling:
|
|
88
|
+
|
|
89
|
+
- Selection from allowed queues list
|
|
90
|
+
- When the SLURM queue is selected, additional SLURM parameters become available
|
|
91
|
+
|
|
92
|
+
**SLURM Parameters** (when using "slurm-queue")
|
|
93
|
+
Additional SLURM-specific configuration options become available when the SLURM queue is selected, including:
|
|
94
|
+
|
|
95
|
+
- Job allocation parameters
|
|
96
|
+
- Resource requirements
|
|
97
|
+
- Time limits
|
|
98
|
+
- Node specifications
|
|
99
|
+
|
|
100
|
+
**Execution Options**
|
|
101
|
+
Control job execution behavior:
|
|
102
|
+
|
|
103
|
+
- **Force Rerun**: Force execution even if cached results exist
|
|
104
|
+
- **Recompute Artifacts**: Regenerate all output artifacts regardless of cache status
|
|
105
|
+
|
|
106
|
+
**Custom Name & Category Editor**
|
|
107
|
+
Provides job identification and organization:
|
|
108
|
+
|
|
109
|
+
**Custom Name Field**
|
|
110
|
+
- User-defined name for the job
|
|
111
|
+
- Defaults to "submitted-job"
|
|
112
|
+
- Automatically saved to localStorage per operation
|
|
113
|
+
|
|
114
|
+
**Category Field**
|
|
115
|
+
- Organizational category for the job
|
|
116
|
+
- Defaults to "submission"
|
|
117
|
+
- Persistent storage with operation-specific recall
|
|
118
|
+
|
|
119
|
+
Model Input Section
|
|
120
|
+
~~~~~~~~~~~~~~~~~~~
|
|
121
|
+
|
|
122
|
+
The Input section handles data configuration for each input mapping required by the selected model.
|
|
123
|
+
For each input mapping defined by the selected model:
|
|
124
|
+
|
|
125
|
+
.. figure:: resources/sample-input.png
|
|
126
|
+
:alt: Input Mapping Card
|
|
127
|
+
:align: center
|
|
128
|
+
:width: 650px
|
|
129
|
+
|
|
130
|
+
*Individual input mapping configuration card*
|
|
131
|
+
|
|
132
|
+
**Dynamic Form Generation**
|
|
133
|
+
- Automatically generated forms based on input mapping schema
|
|
134
|
+
- Real-time validation and data binding
|
|
135
|
+
- Memoized form components for optimal performance
|
|
136
|
+
|
|
137
|
+
**Template Management**
|
|
138
|
+
- Load existing input templates
|
|
139
|
+
- Save current configuration as template
|
|
140
|
+
- Update existing templates on submission
|
|
141
|
+
- Template-specific parameter inheritance
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
.. _tables:
|
|
2
|
+
|
|
3
|
+
Tables
|
|
4
|
+
======
|
|
5
|
+
|
|
6
|
+
SimStack II provides a ``SimpleTable`` model to handle and display tabular data, especially for UI representation in ag-grid.
|
|
7
|
+
|
|
8
|
+
SimpleTable
|
|
9
|
+
-----------
|
|
10
|
+
|
|
11
|
+
The ``SimpleTable`` model allows you to define a table with headings, data types for columns, and rows of data.
|
|
12
|
+
|
|
13
|
+
**Key Features:**
|
|
14
|
+
|
|
15
|
+
* **UI Ready**: Designed to be used with a specialized UI field (``SimpleTableField``) that renders the data in an ag-grid component.
|
|
16
|
+
* **Flexible Rows**: Rows are stored as dictionaries, making it easy to map data to column headers.
|
|
17
|
+
* **Type Information**: Allows specifying the type of each column for better UI rendering or validation.
|
|
18
|
+
|
|
19
|
+
**Usage:**
|
|
20
|
+
|
|
21
|
+
.. code-block:: python
|
|
22
|
+
|
|
23
|
+
from simstack.models.simple_table import SimpleTable
|
|
24
|
+
|
|
25
|
+
table = SimpleTable(name="Experimental Results")
|
|
26
|
+
|
|
27
|
+
# Add columns with their types
|
|
28
|
+
table.add_column("Material", "string")
|
|
29
|
+
table.add_column("Temperature", "number")
|
|
30
|
+
table.add_column("Pressure", "number")
|
|
31
|
+
|
|
32
|
+
# Add rows as dictionaries
|
|
33
|
+
table.add_row({
|
|
34
|
+
"Material": "Silicon",
|
|
35
|
+
"Temperature": 300,
|
|
36
|
+
"Pressure": 1.0
|
|
37
|
+
})
|
|
38
|
+
table.add_row({
|
|
39
|
+
"Material": "Germanium",
|
|
40
|
+
"Temperature": 350,
|
|
41
|
+
"Pressure": 1.2
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
API Reference
|
|
45
|
+
-------------
|
|
46
|
+
|
|
47
|
+
.. autoclass:: simstack.models.simple_table.SimpleTable
|
|
48
|
+
:members:
|
|
49
|
+
:undoc-members:
|
|
50
|
+
:show-inheritance:
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
Testing Complex Nodes
|
|
2
|
+
=====================
|
|
3
|
+
|
|
4
|
+
This document explains the testing strategy for complex nodes in SimStack, focusing on the test generation and re-execution mechanism.
|
|
5
|
+
|
|
6
|
+
Overview
|
|
7
|
+
--------
|
|
8
|
+
|
|
9
|
+
In SimStack, some nodes perform complex tasks that might be difficult to reproduce in a standard unit test environment due to external dependencies, large data volumes, or non-deterministic behavior. To address this, we use a strategy of capturing the state of a successful node execution and using it to generate a repeatable test case.
|
|
10
|
+
|
|
11
|
+
The two main components of this strategy are:
|
|
12
|
+
1. `simstack/src/simstack/methods/generate_test.py`: A tool to extract node data from the database and work directory.
|
|
13
|
+
2. `examples/testing/testing_test_generation.py`: An example script demonstrating how to use generated tests and patch complex executions.
|
|
14
|
+
|
|
15
|
+
Test Generation (`generate_test.py`)
|
|
16
|
+
------------------------------------
|
|
17
|
+
|
|
18
|
+
The `generate_test` method (and its CLI wrapper) allows developers to create a test case from an existing `NodeRegistry` entry.
|
|
19
|
+
|
|
20
|
+
Workflow:
|
|
21
|
+
1. **Identify Node**: The user provides a `node_id` (ObjectId of a `NodeRegistry` entry).
|
|
22
|
+
2. **Setup Target**: A target directory is created, organized by node name and argument hash: `target_base / node_name / arg_hash`.
|
|
23
|
+
3. **Capture Files**: All files from the node's work directory (`workdir / node_name / node_id`) are copied to the target directory.
|
|
24
|
+
4. **Serialize Data**:
|
|
25
|
+
- Input models are loaded from the database based on `input_references` and serialized to `inputs.json`.
|
|
26
|
+
- Output models (results) are loaded based on `results_references` and serialized to `outputs.json`.
|
|
27
|
+
- This is for convenience and not really needed for the test
|
|
28
|
+
|
|
29
|
+
This results in a self-contained directory containing everything needed to verify the node's behavior for a specific set of inputs.
|
|
30
|
+
|
|
31
|
+
Testing with Patches (`testing_test_generation.py`)
|
|
32
|
+
--------------------------------------------------
|
|
33
|
+
|
|
34
|
+
Once a test case is generated, it can be used to verify that changes to the node's logic don't break existing functionality, or to debug complex failures.
|
|
35
|
+
|
|
36
|
+
The example script `testing_test_generation.py` demonstrates a pattern for testing nodes that call external functions or have complex side effects.
|
|
37
|
+
|
|
38
|
+
### The Problem: Complex Side Effects
|
|
39
|
+
Some nodes call functions that perform operations (like submitting a job to a cluster) which cannot be easily duplicated in testing.
|
|
40
|
+
The idea is to store all of the resulting inout and output files and also serialized versions of all costly intermediate results.
|
|
41
|
+
During a test run, we don't want to actually submit a new job; instead, we want to simulate the previous execution and
|
|
42
|
+
return the *original* `task_id` so that SimStack can find the associated files and results.
|
|
43
|
+
|
|
44
|
+
### The Solution: Patching and Re-execution
|
|
45
|
+
The strategy involves patching the "inner" execution function during the test run.
|
|
46
|
+
|
|
47
|
+
1. **Setup**: The node is first executed normally (or a previous execution is identified). All of the complex and costly computations are performed
|
|
48
|
+
in a function like `complex_task_execution` which **must** have the signature *args, **kwargs.
|
|
49
|
+
- The *args are used during normal execution to generate the costly data and serialize it.
|
|
50
|
+
- The function returns data needed to locally construct the output models. Generating the input files or arsing the output files of a job, which is
|
|
51
|
+
part of a test, should be outside `complex_task_execution`
|
|
52
|
+
- The goal is: Do all the stuff that can be locally and that needs to be testes outside of `complex_task_execution
|
|
53
|
+
2. **Generation**: `generate_test` is called to create the test data.
|
|
54
|
+
3. **Patching**: Using `unittest.mock.patch`, the function responsible for the side effect (e.g., `complex_task_execution`) is replaced with
|
|
55
|
+
a `patched_complex_task_execution`. This function also gets the *args and **kwargs. It needs the latter to automatically find
|
|
56
|
+
the test directory with respect to a test-directory root.
|
|
57
|
+
4. **Mock Logic**: The patched function:
|
|
58
|
+
- Identifies the correct test directory using `arg_hash` and node name (provided in `kwargs`).
|
|
59
|
+
- The file can compare the input files generated in the test run with the input files in the test directory
|
|
60
|
+
- Restores the necessary files (e.g., `test.txt`) from the test directory to the current execution environment.
|
|
61
|
+
- Deserialize all important information to locally build the outputs of the nodes. In the test this is only the original `task_id`.
|
|
62
|
+
|
|
63
|
+
5. **Re-execution**: The node is called again with `force_rerun=True`.
|
|
64
|
+
6. **Verification**: The results of the re-execution are compared against the original results to ensure consistency.
|
|
65
|
+
|
|
66
|
+
Example Patch Implementation
|
|
67
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
68
|
+
|
|
69
|
+
.. code-block:: python
|
|
70
|
+
|
|
71
|
+
def patched_complex_task_execution(arg_patched, **kwargs_patched):
|
|
72
|
+
# Locate the test directory
|
|
73
|
+
test_dir = local_target_base / node_name / kwargs_patched["arg_hash"]
|
|
74
|
+
|
|
75
|
+
# Restore state
|
|
76
|
+
shutil.copy2(test_dir / "test.txt", Path.cwd() / "test.txt")
|
|
77
|
+
|
|
78
|
+
# Retrieve original ID
|
|
79
|
+
with open("test.txt", "r") as f:
|
|
80
|
+
original_task_id = f.readlines()[1].strip()
|
|
81
|
+
|
|
82
|
+
return original_task_id
|
|
83
|
+
|
|
84
|
+
with patch("__main__.complex_task_execution", side_effect=patched_complex_task_execution):
|
|
85
|
+
test_result = complex_task_for_testing(arg, parameters=Parameters(force_rerun=True))
|
|
86
|
+
# Assertions...
|
|
87
|
+
|
|
88
|
+
Benefits
|
|
89
|
+
--------
|
|
90
|
+
- **Reproducibility**: Easily reproduce complex node executions in a local environment.
|
|
91
|
+
- **Isolation**: Test node logic without triggering expensive or external side effects.
|
|
92
|
+
- **Verification**: Ensure that data processing remains consistent over time.
|