hpcflow-new2 0.2.0a221__tar.gz → 0.2.0a223__tar.gz

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.
Files changed (226) hide show
  1. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/PKG-INFO +1 -1
  2. hpcflow_new2-0.2.0a223/hpcflow/_version.py +1 -0
  3. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/persistence/zarr.py +14 -1
  4. hpcflow_new2-0.2.0a223/hpcflow/sdk/utils/patches.py +31 -0
  5. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_persistence.py +40 -1
  6. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/pyproject.toml +2 -2
  7. hpcflow_new2-0.2.0a221/hpcflow/_version.py +0 -1
  8. hpcflow_new2-0.2.0a221/hpcflow/sdk/utils/patches.py +0 -12
  9. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/LICENSE +0 -0
  10. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/README.md +0 -0
  11. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/__init__.py +0 -0
  12. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/__pyinstaller/__init__.py +0 -0
  13. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/__pyinstaller/hook-hpcflow.py +0 -0
  14. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/app.py +0 -0
  15. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/cli.py +0 -0
  16. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/demo_data_manifest/__init__.py +0 -0
  17. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/demo_data_manifest/demo_data_manifest.json +0 -0
  18. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/__init__.py +0 -0
  19. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/bad_script.py +0 -0
  20. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/demo_task_1_generate_t1_infile_1.py +0 -0
  21. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/demo_task_1_generate_t1_infile_2.py +0 -0
  22. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/demo_task_1_parse_p3.py +0 -0
  23. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/do_nothing.py +0 -0
  24. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/env_specifier_test/input_file_generator_pass_env_spec.py +0 -0
  25. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/env_specifier_test/main_script_test_pass_env_spec.py +0 -0
  26. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/env_specifier_test/output_file_parser_pass_env_spec.py +0 -0
  27. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/env_specifier_test/v1/input_file_generator_basic.py +0 -0
  28. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/env_specifier_test/v1/main_script_test_direct_in_direct_out.py +0 -0
  29. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/env_specifier_test/v1/output_file_parser_basic.py +0 -0
  30. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/env_specifier_test/v2/main_script_test_direct_in_direct_out.py +0 -0
  31. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/generate_t1_file_01.py +0 -0
  32. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/import_future_script.py +0 -0
  33. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/input_file_generator_basic.py +0 -0
  34. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/input_file_generator_basic_FAIL.py +0 -0
  35. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/input_file_generator_test_stdout_stderr.py +0 -0
  36. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/main_script_test_direct_in.py +0 -0
  37. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/main_script_test_direct_in_direct_out.py +0 -0
  38. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/main_script_test_direct_in_direct_out_2.py +0 -0
  39. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/main_script_test_direct_in_direct_out_2_fail_allowed.py +0 -0
  40. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/main_script_test_direct_in_direct_out_2_fail_allowed_group.py +0 -0
  41. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/main_script_test_direct_in_direct_out_3.py +0 -0
  42. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/main_script_test_direct_in_direct_out_all_iters_test.py +0 -0
  43. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/main_script_test_direct_in_direct_out_env_spec.py +0 -0
  44. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/main_script_test_direct_in_direct_out_labels.py +0 -0
  45. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/main_script_test_direct_in_group_direct_out_3.py +0 -0
  46. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/main_script_test_direct_in_group_one_fail_direct_out_3.py +0 -0
  47. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/main_script_test_direct_sub_param_in_direct_out.py +0 -0
  48. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/main_script_test_hdf5_in_obj.py +0 -0
  49. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/main_script_test_hdf5_in_obj_2.py +0 -0
  50. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/main_script_test_hdf5_in_obj_group.py +0 -0
  51. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/main_script_test_hdf5_out_obj.py +0 -0
  52. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/main_script_test_json_and_direct_in_json_out.py +0 -0
  53. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/main_script_test_json_in_json_and_direct_out.py +0 -0
  54. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/main_script_test_json_in_json_out.py +0 -0
  55. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/main_script_test_json_in_json_out_labels.py +0 -0
  56. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/main_script_test_json_in_obj.py +0 -0
  57. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/main_script_test_json_out_FAIL.py +0 -0
  58. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/main_script_test_json_out_obj.py +0 -0
  59. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/main_script_test_json_sub_param_in_json_out_labels.py +0 -0
  60. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/main_script_test_shell_env_vars.py +0 -0
  61. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/main_script_test_std_out_std_err.py +0 -0
  62. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/output_file_parser_basic.py +0 -0
  63. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/output_file_parser_basic_FAIL.py +0 -0
  64. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/output_file_parser_test_stdout_stderr.py +0 -0
  65. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/parse_t1_file_01.py +0 -0
  66. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/scripts/script_exit_test.py +0 -0
  67. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/template_components/__init__.py +0 -0
  68. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/template_components/command_files.yaml +0 -0
  69. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/template_components/environments.yaml +0 -0
  70. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/template_components/parameters.yaml +0 -0
  71. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/template_components/task_schemas.yaml +0 -0
  72. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/workflows/__init__.py +0 -0
  73. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/data/workflows/workflow_1.yaml +0 -0
  74. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/examples.ipynb +0 -0
  75. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/__init__.py +0 -0
  76. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/app.py +0 -0
  77. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/cli.py +0 -0
  78. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/cli_common.py +0 -0
  79. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/config/__init__.py +0 -0
  80. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/config/callbacks.py +0 -0
  81. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/config/cli.py +0 -0
  82. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/config/config.py +0 -0
  83. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/config/config_file.py +0 -0
  84. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/config/errors.py +0 -0
  85. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/config/types.py +0 -0
  86. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/core/__init__.py +0 -0
  87. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/core/actions.py +0 -0
  88. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/core/app_aware.py +0 -0
  89. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/core/cache.py +0 -0
  90. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/core/command_files.py +0 -0
  91. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/core/commands.py +0 -0
  92. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/core/element.py +0 -0
  93. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/core/enums.py +0 -0
  94. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/core/environment.py +0 -0
  95. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/core/errors.py +0 -0
  96. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/core/execute.py +0 -0
  97. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/core/json_like.py +0 -0
  98. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/core/loop.py +0 -0
  99. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/core/loop_cache.py +0 -0
  100. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/core/object_list.py +0 -0
  101. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/core/parameters.py +0 -0
  102. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/core/rule.py +0 -0
  103. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/core/run_dir_files.py +0 -0
  104. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/core/skip_reason.py +0 -0
  105. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/core/task.py +0 -0
  106. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/core/task_schema.py +0 -0
  107. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/core/test_utils.py +0 -0
  108. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/core/types.py +0 -0
  109. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/core/utils.py +0 -0
  110. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/core/validation.py +0 -0
  111. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/core/workflow.py +0 -0
  112. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/core/zarr_io.py +0 -0
  113. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/data/__init__.py +0 -0
  114. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/data/config_file_schema.yaml +0 -0
  115. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/data/config_schema.yaml +0 -0
  116. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/data/environments_spec_schema.yaml +0 -0
  117. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/data/files_spec_schema.yaml +0 -0
  118. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/data/parameters_spec_schema.yaml +0 -0
  119. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/data/task_schema_spec_schema.yaml +0 -0
  120. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/data/workflow_spec_schema.yaml +0 -0
  121. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/demo/__init__.py +0 -0
  122. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/demo/cli.py +0 -0
  123. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/helper/__init__.py +0 -0
  124. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/helper/cli.py +0 -0
  125. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/helper/helper.py +0 -0
  126. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/helper/watcher.py +0 -0
  127. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/log.py +0 -0
  128. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/persistence/__init__.py +0 -0
  129. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/persistence/base.py +0 -0
  130. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/persistence/defaults.py +0 -0
  131. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/persistence/discovery.py +0 -0
  132. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/persistence/json.py +0 -0
  133. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/persistence/pending.py +0 -0
  134. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/persistence/store_resource.py +0 -0
  135. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/persistence/types.py +0 -0
  136. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/persistence/utils.py +0 -0
  137. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/runtime.py +0 -0
  138. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/submission/__init__.py +0 -0
  139. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/submission/enums.py +0 -0
  140. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/submission/jobscript.py +0 -0
  141. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/submission/schedulers/__init__.py +0 -0
  142. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/submission/schedulers/direct.py +0 -0
  143. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/submission/schedulers/sge.py +0 -0
  144. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/submission/schedulers/slurm.py +0 -0
  145. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/submission/schedulers/utils.py +0 -0
  146. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/submission/shells/__init__.py +0 -0
  147. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/submission/shells/base.py +0 -0
  148. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/submission/shells/bash.py +0 -0
  149. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/submission/shells/os_version.py +0 -0
  150. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/submission/shells/powershell.py +0 -0
  151. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/submission/submission.py +0 -0
  152. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/submission/types.py +0 -0
  153. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/typing.py +0 -0
  154. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/utils/arrays.py +0 -0
  155. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/utils/deferred_file.py +0 -0
  156. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/utils/hashing.py +0 -0
  157. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/sdk/utils/strings.py +0 -0
  158. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/api/test_api.py +0 -0
  159. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/conftest.py +0 -0
  160. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/data/__init__.py +0 -0
  161. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/data/benchmark_N_elements.yaml +0 -0
  162. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/data/benchmark_script_runner.yaml +0 -0
  163. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/data/multi_path_sequences.yaml +0 -0
  164. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/data/workflow_1.json +0 -0
  165. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/data/workflow_1.yaml +0 -0
  166. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/data/workflow_1_slurm.yaml +0 -0
  167. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/data/workflow_1_wsl.yaml +0 -0
  168. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/data/workflow_test_run_abort.yaml +0 -0
  169. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/schedulers/direct_linux/test_direct_linux_submission.py +0 -0
  170. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/schedulers/sge/test_sge_submission.py +0 -0
  171. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/schedulers/slurm/test_slurm_submission.py +0 -0
  172. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/scripts/test_input_file_generators.py +0 -0
  173. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/scripts/test_main_scripts.py +0 -0
  174. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/scripts/test_non_snippet_script.py +0 -0
  175. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/scripts/test_ouput_file_parsers.py +0 -0
  176. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/shells/wsl/test_wsl_submission.py +0 -0
  177. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_action.py +0 -0
  178. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_action_rule.py +0 -0
  179. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_app.py +0 -0
  180. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_cache.py +0 -0
  181. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_cli.py +0 -0
  182. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_command.py +0 -0
  183. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_config.py +0 -0
  184. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_config_file.py +0 -0
  185. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_element.py +0 -0
  186. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_element_iteration.py +0 -0
  187. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_element_set.py +0 -0
  188. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_group.py +0 -0
  189. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_input_source.py +0 -0
  190. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_input_value.py +0 -0
  191. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_jobscript_unit.py +0 -0
  192. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_json_like.py +0 -0
  193. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_loop.py +0 -0
  194. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_meta_task.py +0 -0
  195. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_multi_path_sequences.py +0 -0
  196. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_object_list.py +0 -0
  197. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_parameter.py +0 -0
  198. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_resources.py +0 -0
  199. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_run.py +0 -0
  200. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_run_directories.py +0 -0
  201. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_runtime.py +0 -0
  202. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_schema_input.py +0 -0
  203. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_shell.py +0 -0
  204. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_slurm.py +0 -0
  205. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_submission.py +0 -0
  206. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_task.py +0 -0
  207. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_task_schema.py +0 -0
  208. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_utils.py +0 -0
  209. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_value_sequence.py +0 -0
  210. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_workflow.py +0 -0
  211. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/test_workflow_template.py +0 -0
  212. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/utils/test_arrays.py +0 -0
  213. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/utils/test_deferred_file_writer.py +0 -0
  214. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/utils/test_hashing.py +0 -0
  215. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/utils/test_patches.py +0 -0
  216. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/utils/test_redirect_std.py +0 -0
  217. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/unit/utils/test_strings.py +0 -0
  218. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/workflows/__init__.py +0 -0
  219. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/workflows/test_directory_structure.py +0 -0
  220. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/workflows/test_jobscript.py +0 -0
  221. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/workflows/test_run_status.py +0 -0
  222. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/workflows/test_skip_downstream.py +0 -0
  223. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/workflows/test_submission.py +0 -0
  224. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/workflows/test_workflows.py +0 -0
  225. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/tests/workflows/test_zip.py +0 -0
  226. {hpcflow_new2-0.2.0a221 → hpcflow_new2-0.2.0a223}/hpcflow/viz_demo.ipynb +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: hpcflow-new2
3
- Version: 0.2.0a221
3
+ Version: 0.2.0a223
4
4
  Summary: Computational workflow management
5
5
  License: MPL-2.0
6
6
  Author: aplowman
@@ -0,0 +1 @@
1
+ __version__ = "0.2.0a223"
@@ -18,6 +18,7 @@ from numpy.ma.core import MaskedArray
18
18
  import zarr # type: ignore
19
19
  from zarr.errors import BoundsCheckError # type: ignore
20
20
  from zarr.storage import DirectoryStore, FSStore # type: ignore
21
+ from zarr.util import guess_chunks # type: ignore
21
22
  from fsspec.implementations.zip import ZipFileSystem # type: ignore
22
23
  from rich.console import Console
23
24
  from numcodecs import MsgPack, VLenArray, blosc, Blosc, Zstd # type: ignore
@@ -59,6 +60,7 @@ from hpcflow.sdk.submission.submission import (
59
60
  SUBMISSION_SUBMIT_TIME_KEYS,
60
61
  )
61
62
  from hpcflow.sdk.utils.arrays import get_2D_idx, split_arr
63
+ from hpcflow.sdk.utils.patches import override_module_attrs
62
64
  from hpcflow.sdk.utils.strings import shorten_list_str
63
65
 
64
66
  if TYPE_CHECKING:
@@ -89,6 +91,11 @@ if TYPE_CHECKING:
89
91
  ListAny: TypeAlias = "list[Any]"
90
92
  #: Zarr attribute mapping context.
91
93
  ZarrAttrs: TypeAlias = "dict[str, Any]"
94
+ #: Soft lower limit for the number of bytes in an array chunk
95
+ _ARRAY_CHUNK_MIN: int = 500 * 1024 * 1024 # 500 MiB
96
+ #: Hard upper limit for the number of bytes in an array chunk. Should be lower than the
97
+ #: maximum buffer size of the blosc encoder, if we're using it (2 GiB)
98
+ _ARRAY_CHUNK_MAX: int = 1024 * 1024 * 1024 # 1 GiB
92
99
  _JS: TypeAlias = "dict[str, list[dict[str, dict]]]"
93
100
 
94
101
 
@@ -124,7 +131,13 @@ def _encode_numpy_array(
124
131
  new_idx = (
125
132
  max((int(i.removeprefix("arr_")) for i in param_arr_group.keys()), default=-1) + 1
126
133
  )
127
- param_arr_group.create_dataset(name=f"arr_{new_idx}", data=obj, chunks=obj.shape)
134
+ with override_module_attrs(
135
+ "zarr.util", {"CHUNK_MIN": _ARRAY_CHUNK_MIN, "CHUNK_MAX": _ARRAY_CHUNK_MAX}
136
+ ):
137
+ # `guess_chunks` also ensures chunk shape is at least 1 in each dimension:
138
+ chunk_shape = guess_chunks(obj.shape, obj.dtype.itemsize)
139
+
140
+ param_arr_group.create_dataset(name=f"arr_{new_idx}", data=obj, chunks=chunk_shape)
128
141
  type_lookup["arrays"].append([path, new_idx])
129
142
 
130
143
  return len(type_lookup["arrays"]) - 1
@@ -0,0 +1,31 @@
1
+ from contextlib import contextmanager
2
+ from pathlib import Path
3
+ import sys
4
+ from typing import Any
5
+
6
+
7
+ def resolve_path(path):
8
+ """On Windows Python 3.8, 3.9, and 3.10, `Pathlib.resolve` does
9
+ not return an absolute path for non-existant paths, when it should.
10
+
11
+ See: https://github.com/python/cpython/issues/82852
12
+
13
+ """
14
+ # TODO: this only seems to be used in a test; remove?
15
+ return Path.cwd() / Path(path).resolve() # cwd is ignored if already absolute
16
+
17
+
18
+ @contextmanager
19
+ def override_module_attrs(module_name: str, overrides: dict[str, Any]):
20
+ """Context manager to temporarily override module-level attributes. The module must be
21
+ imported (i.e. within `sys.modules`)."""
22
+
23
+ module = sys.modules[module_name]
24
+ original_values = {k: getattr(module, k) for k in overrides}
25
+ try:
26
+ for k, v in overrides.items():
27
+ setattr(module, k, v)
28
+ yield
29
+ finally:
30
+ for k, v in original_values.items():
31
+ setattr(module, k, v)
@@ -6,7 +6,11 @@ from typing import cast, TYPE_CHECKING
6
6
  import numpy as np
7
7
  import zarr # type: ignore
8
8
  import pytest
9
- from hpcflow.sdk.core.test_utils import make_test_data_YAML_workflow, make_workflow
9
+ from hpcflow.sdk.core.test_utils import (
10
+ make_schemas,
11
+ make_test_data_YAML_workflow,
12
+ make_workflow,
13
+ )
10
14
  from hpcflow.sdk.persistence.json import (
11
15
  JSONPersistentStore,
12
16
  JsonStoreElement,
@@ -551,3 +555,38 @@ def test_zarr_encode_decode_jobscript_block_dependencies_large_one_to_one():
551
555
  arr = ZarrPersistentStore._encode_jobscript_block_dependencies(deps_t)
552
556
  deps_rt = ZarrPersistentStore._decode_jobscript_block_dependencies(arr)
553
557
  assert deps_rt == deps
558
+
559
+
560
+ @pytest.mark.parametrize(
561
+ "array",
562
+ (
563
+ np.array([]),
564
+ np.empty(0),
565
+ np.empty((0, 1, 2)),
566
+ np.array([1, 2, 3]),
567
+ np.array([[1, 2, 3], [4, 5, 6]]),
568
+ ),
569
+ )
570
+ def test_zarr_save_persistent_array_shape(null_config, tmp_path, array):
571
+ s1 = make_schemas(({"p1": None}, ()))
572
+ t1 = hf.Task(schema=s1, inputs={"p1": array})
573
+ wk = hf.Workflow.from_template_data(
574
+ template_name="test_save_empty_array",
575
+ tasks=[t1],
576
+ path=tmp_path,
577
+ )
578
+ assert array.shape == wk.tasks[0].elements[0].get("inputs.p1")[:].shape
579
+
580
+
581
+ def test_zarr_single_chunk_threshold(null_config, tmp_path):
582
+ # test very large arrays (> ~1 GB) are saved using multiple chunks
583
+ array = np.zeros(
584
+ 268_435_456
585
+ ) # ~ 2.147483647 GB; greater than blosc's max buffer size
586
+ s1 = make_schemas(({"p1": None}, ()))
587
+ t1 = hf.Task(schema=s1, inputs={"p1": array})
588
+ wk = hf.Workflow.from_template_data(
589
+ template_name="test_large_array",
590
+ tasks=[t1],
591
+ path=tmp_path,
592
+ )
@@ -1,7 +1,7 @@
1
1
 
2
2
  [tool.poetry]
3
3
  name = "hpcflow-new2"
4
- version = "0.2.0a221"
4
+ version = "0.2.0a223"
5
5
 
6
6
  description = "Computational workflow management"
7
7
  authors = ["aplowman <adam.plowman@manchester.ac.uk>"]
@@ -100,7 +100,7 @@ hook-dirs = "hpcflow.__pyinstaller:get_hook_dirs"
100
100
 
101
101
  [tool.commitizen]
102
102
  name = "cz_conventional_commits"
103
- version = "0.2.0a221"
103
+ version = "0.2.0a223"
104
104
  tag_format = "v$version"
105
105
  version_files = [
106
106
  "pyproject.toml:version",
@@ -1 +0,0 @@
1
- __version__ = "0.2.0a221"
@@ -1,12 +0,0 @@
1
- from pathlib import Path
2
-
3
-
4
- def resolve_path(path):
5
- """On Windows Python 3.8, 3.9, and 3.10, `Pathlib.resolve` does
6
- not return an absolute path for non-existant paths, when it should.
7
-
8
- See: https://github.com/python/cpython/issues/82852
9
-
10
- """
11
- # TODO: this only seems to be used in a test; remove?
12
- return Path.cwd() / Path(path).resolve() # cwd is ignored if already absolute