hpcflow-new2 0.2.0a189__py3-none-any.whl → 0.2.0a199__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.
Files changed (176) hide show
  1. hpcflow/__pyinstaller/hook-hpcflow.py +9 -6
  2. hpcflow/_version.py +1 -1
  3. hpcflow/app.py +1 -0
  4. hpcflow/data/scripts/bad_script.py +2 -0
  5. hpcflow/data/scripts/do_nothing.py +2 -0
  6. hpcflow/data/scripts/env_specifier_test/input_file_generator_pass_env_spec.py +4 -0
  7. hpcflow/data/scripts/env_specifier_test/main_script_test_pass_env_spec.py +8 -0
  8. hpcflow/data/scripts/env_specifier_test/output_file_parser_pass_env_spec.py +4 -0
  9. hpcflow/data/scripts/env_specifier_test/v1/input_file_generator_basic.py +4 -0
  10. hpcflow/data/scripts/env_specifier_test/v1/main_script_test_direct_in_direct_out.py +7 -0
  11. hpcflow/data/scripts/env_specifier_test/v1/output_file_parser_basic.py +4 -0
  12. hpcflow/data/scripts/env_specifier_test/v2/main_script_test_direct_in_direct_out.py +7 -0
  13. hpcflow/data/scripts/input_file_generator_basic.py +3 -0
  14. hpcflow/data/scripts/input_file_generator_basic_FAIL.py +3 -0
  15. hpcflow/data/scripts/input_file_generator_test_stdout_stderr.py +8 -0
  16. hpcflow/data/scripts/main_script_test_direct_in.py +3 -0
  17. hpcflow/data/scripts/main_script_test_direct_in_direct_out_2.py +6 -0
  18. hpcflow/data/scripts/main_script_test_direct_in_direct_out_2_fail_allowed.py +6 -0
  19. hpcflow/data/scripts/main_script_test_direct_in_direct_out_2_fail_allowed_group.py +7 -0
  20. hpcflow/data/scripts/main_script_test_direct_in_direct_out_3.py +6 -0
  21. hpcflow/data/scripts/main_script_test_direct_in_group_direct_out_3.py +6 -0
  22. hpcflow/data/scripts/main_script_test_direct_in_group_one_fail_direct_out_3.py +6 -0
  23. hpcflow/data/scripts/main_script_test_hdf5_in_obj.py +1 -1
  24. hpcflow/data/scripts/main_script_test_hdf5_in_obj_2.py +12 -0
  25. hpcflow/data/scripts/main_script_test_hdf5_out_obj.py +1 -1
  26. hpcflow/data/scripts/main_script_test_json_out_FAIL.py +3 -0
  27. hpcflow/data/scripts/main_script_test_shell_env_vars.py +12 -0
  28. hpcflow/data/scripts/main_script_test_std_out_std_err.py +6 -0
  29. hpcflow/data/scripts/output_file_parser_basic.py +3 -0
  30. hpcflow/data/scripts/output_file_parser_basic_FAIL.py +7 -0
  31. hpcflow/data/scripts/output_file_parser_test_stdout_stderr.py +8 -0
  32. hpcflow/data/scripts/script_exit_test.py +5 -0
  33. hpcflow/data/template_components/environments.yaml +1 -1
  34. hpcflow/sdk/__init__.py +26 -15
  35. hpcflow/sdk/app.py +2192 -768
  36. hpcflow/sdk/cli.py +506 -296
  37. hpcflow/sdk/cli_common.py +105 -7
  38. hpcflow/sdk/config/__init__.py +1 -1
  39. hpcflow/sdk/config/callbacks.py +115 -43
  40. hpcflow/sdk/config/cli.py +126 -103
  41. hpcflow/sdk/config/config.py +674 -318
  42. hpcflow/sdk/config/config_file.py +131 -95
  43. hpcflow/sdk/config/errors.py +125 -84
  44. hpcflow/sdk/config/types.py +148 -0
  45. hpcflow/sdk/core/__init__.py +25 -1
  46. hpcflow/sdk/core/actions.py +1771 -1059
  47. hpcflow/sdk/core/app_aware.py +24 -0
  48. hpcflow/sdk/core/cache.py +139 -79
  49. hpcflow/sdk/core/command_files.py +263 -287
  50. hpcflow/sdk/core/commands.py +145 -112
  51. hpcflow/sdk/core/element.py +828 -535
  52. hpcflow/sdk/core/enums.py +192 -0
  53. hpcflow/sdk/core/environment.py +74 -93
  54. hpcflow/sdk/core/errors.py +455 -52
  55. hpcflow/sdk/core/execute.py +207 -0
  56. hpcflow/sdk/core/json_like.py +540 -272
  57. hpcflow/sdk/core/loop.py +751 -347
  58. hpcflow/sdk/core/loop_cache.py +164 -47
  59. hpcflow/sdk/core/object_list.py +370 -207
  60. hpcflow/sdk/core/parameters.py +1100 -627
  61. hpcflow/sdk/core/rule.py +59 -41
  62. hpcflow/sdk/core/run_dir_files.py +21 -37
  63. hpcflow/sdk/core/skip_reason.py +7 -0
  64. hpcflow/sdk/core/task.py +1649 -1339
  65. hpcflow/sdk/core/task_schema.py +308 -196
  66. hpcflow/sdk/core/test_utils.py +191 -114
  67. hpcflow/sdk/core/types.py +440 -0
  68. hpcflow/sdk/core/utils.py +485 -309
  69. hpcflow/sdk/core/validation.py +82 -9
  70. hpcflow/sdk/core/workflow.py +2544 -1178
  71. hpcflow/sdk/core/zarr_io.py +98 -137
  72. hpcflow/sdk/data/workflow_spec_schema.yaml +2 -0
  73. hpcflow/sdk/demo/cli.py +53 -33
  74. hpcflow/sdk/helper/cli.py +18 -15
  75. hpcflow/sdk/helper/helper.py +75 -63
  76. hpcflow/sdk/helper/watcher.py +61 -28
  77. hpcflow/sdk/log.py +122 -71
  78. hpcflow/sdk/persistence/__init__.py +8 -31
  79. hpcflow/sdk/persistence/base.py +1360 -606
  80. hpcflow/sdk/persistence/defaults.py +6 -0
  81. hpcflow/sdk/persistence/discovery.py +38 -0
  82. hpcflow/sdk/persistence/json.py +568 -188
  83. hpcflow/sdk/persistence/pending.py +382 -179
  84. hpcflow/sdk/persistence/store_resource.py +39 -23
  85. hpcflow/sdk/persistence/types.py +318 -0
  86. hpcflow/sdk/persistence/utils.py +14 -11
  87. hpcflow/sdk/persistence/zarr.py +1337 -433
  88. hpcflow/sdk/runtime.py +44 -41
  89. hpcflow/sdk/submission/{jobscript_info.py → enums.py} +39 -12
  90. hpcflow/sdk/submission/jobscript.py +1651 -692
  91. hpcflow/sdk/submission/schedulers/__init__.py +167 -39
  92. hpcflow/sdk/submission/schedulers/direct.py +121 -81
  93. hpcflow/sdk/submission/schedulers/sge.py +170 -129
  94. hpcflow/sdk/submission/schedulers/slurm.py +291 -268
  95. hpcflow/sdk/submission/schedulers/utils.py +12 -2
  96. hpcflow/sdk/submission/shells/__init__.py +14 -15
  97. hpcflow/sdk/submission/shells/base.py +150 -29
  98. hpcflow/sdk/submission/shells/bash.py +283 -173
  99. hpcflow/sdk/submission/shells/os_version.py +31 -30
  100. hpcflow/sdk/submission/shells/powershell.py +228 -170
  101. hpcflow/sdk/submission/submission.py +1014 -335
  102. hpcflow/sdk/submission/types.py +140 -0
  103. hpcflow/sdk/typing.py +182 -12
  104. hpcflow/sdk/utils/arrays.py +71 -0
  105. hpcflow/sdk/utils/deferred_file.py +55 -0
  106. hpcflow/sdk/utils/hashing.py +16 -0
  107. hpcflow/sdk/utils/patches.py +12 -0
  108. hpcflow/sdk/utils/strings.py +33 -0
  109. hpcflow/tests/api/test_api.py +32 -0
  110. hpcflow/tests/conftest.py +27 -6
  111. hpcflow/tests/data/multi_path_sequences.yaml +29 -0
  112. hpcflow/tests/data/workflow_test_run_abort.yaml +34 -35
  113. hpcflow/tests/schedulers/sge/test_sge_submission.py +36 -0
  114. hpcflow/tests/schedulers/slurm/test_slurm_submission.py +5 -2
  115. hpcflow/tests/scripts/test_input_file_generators.py +282 -0
  116. hpcflow/tests/scripts/test_main_scripts.py +866 -85
  117. hpcflow/tests/scripts/test_non_snippet_script.py +46 -0
  118. hpcflow/tests/scripts/test_ouput_file_parsers.py +353 -0
  119. hpcflow/tests/shells/wsl/test_wsl_submission.py +12 -4
  120. hpcflow/tests/unit/test_action.py +262 -75
  121. hpcflow/tests/unit/test_action_rule.py +9 -4
  122. hpcflow/tests/unit/test_app.py +33 -6
  123. hpcflow/tests/unit/test_cache.py +46 -0
  124. hpcflow/tests/unit/test_cli.py +134 -1
  125. hpcflow/tests/unit/test_command.py +71 -54
  126. hpcflow/tests/unit/test_config.py +142 -16
  127. hpcflow/tests/unit/test_config_file.py +21 -18
  128. hpcflow/tests/unit/test_element.py +58 -62
  129. hpcflow/tests/unit/test_element_iteration.py +50 -1
  130. hpcflow/tests/unit/test_element_set.py +29 -19
  131. hpcflow/tests/unit/test_group.py +4 -2
  132. hpcflow/tests/unit/test_input_source.py +116 -93
  133. hpcflow/tests/unit/test_input_value.py +29 -24
  134. hpcflow/tests/unit/test_jobscript_unit.py +757 -0
  135. hpcflow/tests/unit/test_json_like.py +44 -35
  136. hpcflow/tests/unit/test_loop.py +1396 -84
  137. hpcflow/tests/unit/test_meta_task.py +325 -0
  138. hpcflow/tests/unit/test_multi_path_sequences.py +229 -0
  139. hpcflow/tests/unit/test_object_list.py +17 -12
  140. hpcflow/tests/unit/test_parameter.py +29 -7
  141. hpcflow/tests/unit/test_persistence.py +237 -42
  142. hpcflow/tests/unit/test_resources.py +20 -18
  143. hpcflow/tests/unit/test_run.py +117 -6
  144. hpcflow/tests/unit/test_run_directories.py +29 -0
  145. hpcflow/tests/unit/test_runtime.py +2 -1
  146. hpcflow/tests/unit/test_schema_input.py +23 -15
  147. hpcflow/tests/unit/test_shell.py +23 -2
  148. hpcflow/tests/unit/test_slurm.py +8 -7
  149. hpcflow/tests/unit/test_submission.py +38 -89
  150. hpcflow/tests/unit/test_task.py +352 -247
  151. hpcflow/tests/unit/test_task_schema.py +33 -20
  152. hpcflow/tests/unit/test_utils.py +9 -11
  153. hpcflow/tests/unit/test_value_sequence.py +15 -12
  154. hpcflow/tests/unit/test_workflow.py +114 -83
  155. hpcflow/tests/unit/test_workflow_template.py +0 -1
  156. hpcflow/tests/unit/utils/test_arrays.py +40 -0
  157. hpcflow/tests/unit/utils/test_deferred_file_writer.py +34 -0
  158. hpcflow/tests/unit/utils/test_hashing.py +65 -0
  159. hpcflow/tests/unit/utils/test_patches.py +5 -0
  160. hpcflow/tests/unit/utils/test_redirect_std.py +50 -0
  161. hpcflow/tests/workflows/__init__.py +0 -0
  162. hpcflow/tests/workflows/test_directory_structure.py +31 -0
  163. hpcflow/tests/workflows/test_jobscript.py +334 -1
  164. hpcflow/tests/workflows/test_run_status.py +198 -0
  165. hpcflow/tests/workflows/test_skip_downstream.py +696 -0
  166. hpcflow/tests/workflows/test_submission.py +140 -0
  167. hpcflow/tests/workflows/test_workflows.py +160 -15
  168. hpcflow/tests/workflows/test_zip.py +18 -0
  169. hpcflow/viz_demo.ipynb +6587 -3
  170. {hpcflow_new2-0.2.0a189.dist-info → hpcflow_new2-0.2.0a199.dist-info}/METADATA +8 -4
  171. hpcflow_new2-0.2.0a199.dist-info/RECORD +221 -0
  172. hpcflow/sdk/core/parallel.py +0 -21
  173. hpcflow_new2-0.2.0a189.dist-info/RECORD +0 -158
  174. {hpcflow_new2-0.2.0a189.dist-info → hpcflow_new2-0.2.0a199.dist-info}/LICENSE +0 -0
  175. {hpcflow_new2-0.2.0a189.dist-info → hpcflow_new2-0.2.0a199.dist-info}/WHEEL +0 -0
  176. {hpcflow_new2-0.2.0a189.dist-info → hpcflow_new2-0.2.0a199.dist-info}/entry_points.txt +0 -0
@@ -1,3 +1,6 @@
1
+ from __future__ import annotations
2
+ from typing import TYPE_CHECKING
3
+ from typing_extensions import TypedDict
1
4
  import pytest
2
5
 
3
6
  from hpcflow.app import app as hf
@@ -7,61 +10,71 @@ from hpcflow.sdk.core.errors import (
7
10
  )
8
11
  from hpcflow.sdk.core.test_utils import make_actions, make_parameters
9
12
 
13
+ if TYPE_CHECKING:
14
+ from hpcflow.sdk.core.actions import Action, ActionEnvironment
15
+ from hpcflow.sdk.core.task import TaskObjective
16
+
10
17
 
11
18
  @pytest.fixture
12
- def act_env_1():
19
+ def act_env_1() -> ActionEnvironment:
13
20
  return hf.ActionEnvironment("env_1")
14
21
 
15
22
 
16
23
  @pytest.fixture
17
- def action_a1(act_env_1):
24
+ def action_a1(act_env_1: ActionEnvironment) -> Action:
18
25
  return hf.Action(commands=[hf.Command("ls")], environments=[act_env_1])
19
26
 
20
27
 
28
+ class SchemaKwargs(TypedDict):
29
+ objective: TaskObjective
30
+ actions: list[Action]
31
+
32
+
21
33
  @pytest.fixture
22
- def schema_s1_kwargs(action_a1):
34
+ def schema_s1_kwargs(action_a1: Action) -> SchemaKwargs:
23
35
  return {"objective": hf.TaskObjective("t1"), "actions": [action_a1]}
24
36
 
25
37
 
26
- def test_task_schema_equality():
38
+ def test_task_schema_equality() -> None:
27
39
  t1a = hf.TaskSchema("t1", actions=[])
28
40
  t1b = hf.TaskSchema("t1", actions=[])
29
41
  assert t1a == t1b
30
42
 
31
43
 
32
- def test_init_with_str_objective(action_a1):
44
+ def test_init_with_str_objective(action_a1: Action) -> None:
33
45
  obj_str = "t1"
34
46
  obj = hf.TaskObjective(obj_str)
35
- common = {"actions": [action_a1]}
36
- assert hf.TaskSchema(obj_str, **common) == hf.TaskSchema(obj, **common)
47
+ assert hf.TaskSchema(obj_str, actions=[action_a1]) == hf.TaskSchema(
48
+ obj, actions=[action_a1]
49
+ )
37
50
 
38
51
 
39
- def test_init_with_method_with_underscore(schema_s1_kwargs):
52
+ def test_init_with_method_with_underscore(schema_s1_kwargs) -> None:
40
53
  hf.TaskSchema(method="my_method", **schema_s1_kwargs)
41
54
 
42
55
 
43
- def test_raise_on_invalid_method_digit(schema_s1_kwargs):
56
+ def test_raise_on_invalid_method_digit(schema_s1_kwargs) -> None:
44
57
  with pytest.raises(InvalidIdentifier):
45
58
  hf.TaskSchema(method="9", **schema_s1_kwargs)
46
59
 
47
60
 
48
- def test_raise_on_invalid_method_space(schema_s1_kwargs):
61
+ def test_raise_on_invalid_method_space(schema_s1_kwargs) -> None:
49
62
  with pytest.raises(InvalidIdentifier):
50
63
  hf.TaskSchema(method="my method", **schema_s1_kwargs)
51
64
 
52
65
 
53
- def test_raise_on_invalid_method_non_alpha_numeric(schema_s1_kwargs):
66
+ def test_raise_on_invalid_method_non_alpha_numeric(schema_s1_kwargs) -> None:
54
67
  with pytest.raises(InvalidIdentifier):
55
68
  hf.TaskSchema(method="_mymethod", **schema_s1_kwargs)
56
69
 
57
70
 
58
- def test_schema_action_validate():
71
+ def test_schema_action_validate() -> None:
59
72
  p1, p2, p3, p4 = make_parameters(4)
60
73
  act_1, act_2, act_3 = make_actions([("p1", "p5"), (("p2", "p5"), "p3"), ("p3", "p4")])
61
74
  hf.TaskSchema("t1", actions=[act_1, act_2, act_3], inputs=[p1, p2], outputs=[p3, p4])
62
75
 
63
76
 
64
- def test_schema_action_validate_raise_on_extra_schema_input():
77
+ def test_schema_action_validate_raise_on_extra_schema_input() -> None:
65
78
  # assert raise ValueError
66
79
  p1, p2, p3, p4 = make_parameters(4)
67
80
  p7 = hf.Parameter("p7")
@@ -72,7 +85,7 @@ def test_schema_action_validate_raise_on_extra_schema_input():
72
85
  )
73
86
 
74
87
 
75
- def test_schema_action_validate_raise_on_extra_schema_output():
88
+ def test_schema_action_validate_raise_on_extra_schema_output() -> None:
76
89
  p7 = hf.Parameter("p7")
77
90
  p1, p2, p3, p4 = make_parameters(4)
78
91
  act_1, act_2, act_3 = make_actions([("p1", "p5"), (("p2", "p5"), "p3"), ("p3", "p4")])
@@ -82,7 +95,7 @@ def test_schema_action_validate_raise_on_extra_schema_output():
82
95
  )
83
96
 
84
97
 
85
- def test_schema_action_validate_raise_on_extra_action_input():
98
+ def test_schema_action_validate_raise_on_extra_action_input() -> None:
86
99
  p1, p2, p3, p4 = make_parameters(4)
87
100
  act_1, act_2, act_3 = make_actions(
88
101
  [(("p1", "p7"), "p5"), (("p2", "p5"), "p3"), ("p3", "p4")]
@@ -93,7 +106,7 @@ def test_schema_action_validate_raise_on_extra_action_input():
93
106
  )
94
107
 
95
108
 
96
- def test_schema_action_validate_raise_on_extra_action_output():
109
+ def test_schema_action_validate_raise_on_extra_action_output() -> None:
97
110
  p1, p2, p3, p4 = make_parameters(4)
98
111
  act_1, act_2, act_3 = make_actions(
99
112
  [("p1", "p5"), (("p2", "p5"), "p3"), ("p3", "p4", "p7")]
@@ -104,7 +117,7 @@ def test_schema_action_validate_raise_on_extra_action_output():
104
117
  )
105
118
 
106
119
 
107
- def test_dot_access_object_list_raise_on_bad_access_attr_name():
120
+ def test_dot_access_object_list_raise_on_bad_access_attr_name() -> None:
108
121
  """Check we can't name a DotAccessObjectList item with a name that collides with a
109
122
  method name."""
110
123
  ts = hf.TaskSchema("add_object", actions=[])
@@ -112,7 +125,7 @@ def test_dot_access_object_list_raise_on_bad_access_attr_name():
112
125
  hf.TaskSchemasList([ts])
113
126
 
114
127
 
115
- def test_env_preset():
128
+ def test_env_preset() -> None:
116
129
  p1, p2 = make_parameters(2)
117
130
  (act_1,) = make_actions([("p1", "p2")], env="env1")
118
131
  hf.TaskSchema(
@@ -124,7 +137,7 @@ def test_env_preset():
124
137
  )
125
138
 
126
139
 
127
- def test_env_preset_raise_bad_env():
140
+ def test_env_preset_raise_bad_env() -> None:
128
141
  p1, p2 = make_parameters(2)
129
142
  (act_1,) = make_actions([("p1", "p2")], env="env1")
130
143
  with pytest.raises(EnvironmentPresetUnknownEnvironmentError):
@@ -137,7 +150,7 @@ def test_env_preset_raise_bad_env():
137
150
  )
138
151
 
139
152
 
140
- def test_env_preset_raise_bad_env_no_actions():
153
+ def test_env_preset_raise_bad_env_no_actions() -> None:
141
154
  with pytest.raises(EnvironmentPresetUnknownEnvironmentError):
142
155
  hf.TaskSchema(
143
156
  "t1",
@@ -1,6 +1,6 @@
1
1
  from pathlib import Path
2
2
  import pytest
3
- import zarr
3
+ import zarr # type: ignore
4
4
  import numpy as np
5
5
  from numpy.typing import NDArray
6
6
  from hpcflow.sdk.core.errors import InvalidIdentifier, MissingVariableSubstitutionError
@@ -185,7 +185,7 @@ def zarr_column_array(tmp_path: Path):
185
185
  dtype=int,
186
186
  fill_value=fill_value,
187
187
  )
188
- arr[:] = np.arange(np.product(arr.shape)).reshape(arr.shape)
188
+ arr[:] = np.arange(np.prod(arr.shape)).reshape(arr.shape)
189
189
  return arr, headers, fill_value
190
190
 
191
191
 
@@ -497,18 +497,13 @@ def test_substitute_string_vars_repeated_var():
497
497
  )
498
498
 
499
499
 
500
- def test_substitute_string_vars_no_vars():
501
- assert (
502
- substitute_string_vars(
503
- "hello bob!",
504
- )
505
- == "hello bob!"
506
- )
500
+ def test_substitute_string_vars_empty_vars():
501
+ assert substitute_string_vars("hello bob!", variables={}) == "hello bob!"
507
502
 
508
503
 
509
504
  def test_substitute_string_vars_raise_no_vars():
510
505
  with pytest.raises(MissingVariableSubstitutionError):
511
- substitute_string_vars("hello <<var:my_name>>")
506
+ substitute_string_vars("hello <<var:my_name>>", variables={})
512
507
 
513
508
 
514
509
  def test_substitute_string_vars_raise_missing():
@@ -521,7 +516,10 @@ def test_substitute_string_vars_non_str():
521
516
 
522
517
 
523
518
  def test_substitute_string_vars_default_value():
524
- assert substitute_string_vars("hello <<var:my_name[default=bill]>>!") == "hello bill!"
519
+ assert (
520
+ substitute_string_vars("hello <<var:my_name[default=bill]>>!", variables={})
521
+ == "hello bill!"
522
+ )
525
523
 
526
524
 
527
525
  def test_substitute_string_vars_default_value_with_specified():
@@ -1,5 +1,6 @@
1
1
  import sys
2
2
  import numpy as np
3
+ from pathlib import Path
3
4
  import pytest
4
5
  import requests
5
6
 
@@ -8,7 +9,7 @@ from hpcflow.sdk.core.test_utils import P1_parameter_cls as P1
8
9
 
9
10
 
10
11
  @pytest.fixture
11
- def null_config(tmp_path):
12
+ def null_config(tmp_path: Path):
12
13
  if not hf.is_config_loaded:
13
14
  hf.load_config(config_dir=tmp_path)
14
15
 
@@ -124,7 +125,9 @@ def test_resources_value_sequence_path_attributes():
124
125
 
125
126
 
126
127
  @pytest.mark.parametrize("store", ["json", "zarr"])
127
- def test_value_sequence_object_values_during_workflow_init(null_config, tmp_path, store):
128
+ def test_value_sequence_object_values_during_workflow_init(
129
+ null_config, tmp_path: Path, store: str
130
+ ):
128
131
  p1 = hf.Parameter("p1c")
129
132
  s1 = hf.TaskSchema(objective="t1", inputs=[hf.SchemaInput(parameter=p1)])
130
133
  obj = P1(a=101)
@@ -156,7 +159,7 @@ def test_value_sequence_object_values_during_workflow_init(null_config, tmp_path
156
159
 
157
160
  @pytest.mark.parametrize("store", ["json", "zarr"])
158
161
  def test_value_sequence_object_values_class_method_during_workflow_init(
159
- null_config, tmp_path, store
162
+ null_config, tmp_path: Path, store: str
160
163
  ):
161
164
  p1 = hf.Parameter("p1c")
162
165
  s1 = hf.TaskSchema(objective="t1", inputs=[hf.SchemaInput(parameter=p1)])
@@ -189,7 +192,7 @@ def test_value_sequence_object_values_class_method_during_workflow_init(
189
192
 
190
193
  @pytest.mark.parametrize("store", ["json", "zarr"])
191
194
  def test_value_sequence_object_values_named_class_method_during_workflow_init(
192
- null_config, tmp_path, store
195
+ null_config, tmp_path: Path, store: str
193
196
  ):
194
197
  p1 = hf.Parameter("p1c")
195
198
  s1 = hf.TaskSchema(objective="t1", inputs=[hf.SchemaInput(parameter=p1)])
@@ -222,7 +225,7 @@ def test_value_sequence_object_values_named_class_method_during_workflow_init(
222
225
  assert wk.tasks[0].template.element_sets[0].sequences[0].values == values_exp
223
226
 
224
227
 
225
- def test_nesting_order_two_seqs_parallel(null_config, tmp_path):
228
+ def test_nesting_order_two_seqs_parallel(null_config, tmp_path: Path):
226
229
  ts = hf.TaskSchema(
227
230
  objective="test", inputs=[hf.SchemaInput("p1"), hf.SchemaInput("p2")]
228
231
  )
@@ -243,7 +246,7 @@ def test_nesting_order_two_seqs_parallel(null_config, tmp_path):
243
246
  assert wk.tasks.test.elements[1].get("inputs") == {"p1": "b", "p2": "d"}
244
247
 
245
248
 
246
- def test_nesting_order_two_seqs_parallel_decimal_equiv(null_config, tmp_path):
249
+ def test_nesting_order_two_seqs_parallel_decimal_equiv(null_config, tmp_path: Path):
247
250
  ts = hf.TaskSchema(
248
251
  objective="test", inputs=[hf.SchemaInput("p1"), hf.SchemaInput("p2")]
249
252
  )
@@ -266,7 +269,7 @@ def test_nesting_order_two_seqs_parallel_decimal_equiv(null_config, tmp_path):
266
269
 
267
270
  def test_nesting_order_two_seqs_nested(
268
271
  null_config,
269
- tmp_path,
272
+ tmp_path: Path,
270
273
  ):
271
274
  ts = hf.TaskSchema(
272
275
  objective="test", inputs=[hf.SchemaInput("p1"), hf.SchemaInput("p2")]
@@ -290,7 +293,7 @@ def test_nesting_order_two_seqs_nested(
290
293
  assert wk.tasks.test.elements[3].get("inputs") == {"p1": "b", "p2": "d"}
291
294
 
292
295
 
293
- def test_nesting_order_two_seqs_default_nesting_order(null_config, tmp_path):
296
+ def test_nesting_order_two_seqs_default_nesting_order(null_config, tmp_path: Path):
294
297
  ts = hf.TaskSchema(
295
298
  objective="test", inputs=[hf.SchemaInput("p1"), hf.SchemaInput("p2")]
296
299
  )
@@ -311,7 +314,7 @@ def test_nesting_order_two_seqs_default_nesting_order(null_config, tmp_path):
311
314
  assert wk.tasks.test.elements[1].get("inputs") == {"p1": "b", "p2": "d"}
312
315
 
313
316
 
314
- def test_raise_nesting_order_two_seqs_default_nesting_order(null_config, tmp_path):
317
+ def test_raise_nesting_order_two_seqs_default_nesting_order(null_config, tmp_path: Path):
315
318
  ts = hf.TaskSchema(
316
319
  objective="test", inputs=[hf.SchemaInput("p1"), hf.SchemaInput("p2")]
317
320
  )
@@ -331,7 +334,7 @@ def test_raise_nesting_order_two_seqs_default_nesting_order(null_config, tmp_pat
331
334
 
332
335
 
333
336
  def test_raise_nesting_order_two_seqs_default_nesting_order_decimal(
334
- null_config, tmp_path
337
+ null_config, tmp_path: Path
335
338
  ):
336
339
  ts = hf.TaskSchema(
337
340
  objective="test", inputs=[hf.SchemaInput("p1"), hf.SchemaInput("p2")]
@@ -351,7 +354,7 @@ def test_raise_nesting_order_two_seqs_default_nesting_order_decimal(
351
354
  )
352
355
 
353
356
 
354
- def test_nesting_order_three_seqs_decimal(null_config, tmp_path):
357
+ def test_nesting_order_three_seqs_decimal(null_config, tmp_path: Path):
355
358
  ts = hf.TaskSchema(
356
359
  objective="test",
357
360
  inputs=[hf.SchemaInput("p1"), hf.SchemaInput("p2"), hf.SchemaInput("p3")],
@@ -380,7 +383,7 @@ def test_nesting_order_three_seqs_decimal(null_config, tmp_path):
380
383
  assert wk.tasks.test.elements[5].get("inputs") == {"p1": "b", "p2": "e", "p3": "k"}
381
384
 
382
385
 
383
- def test_nesting_order_three_seqs_all_decimal(null_config, tmp_path):
386
+ def test_nesting_order_three_seqs_all_decimal(null_config, tmp_path: Path):
384
387
  ts = hf.TaskSchema(
385
388
  objective="test",
386
389
  inputs=[hf.SchemaInput("p1"), hf.SchemaInput("p2"), hf.SchemaInput("p3")],