easylink 0.1.7__tar.gz → 0.1.8__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 (177) hide show
  1. {easylink-0.1.7 → easylink-0.1.8}/CHANGELOG.rst +6 -0
  2. {easylink-0.1.7 → easylink-0.1.8}/PKG-INFO +1 -1
  3. {easylink-0.1.7 → easylink-0.1.8}/pyproject.toml +2 -0
  4. easylink-0.1.8/src/easylink/_version.py +1 -0
  5. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/graph_components.py +7 -3
  6. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/pipeline_schema.py +7 -7
  7. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/pipeline_schema_constants/__init__.py +11 -0
  8. easylink-0.1.8/src/easylink/pipeline_schema_constants/development.py +303 -0
  9. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/pipeline_schema_constants/testing.py +7 -3
  10. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/step.py +379 -347
  11. easylink-0.1.8/src/easylink/utilities/__init__.py +9 -0
  12. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/utilities/aggregator_utils.py +1 -0
  13. easylink-0.1.8/src/easylink/utilities/data_utils.py +154 -0
  14. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/utilities/general_utils.py +48 -10
  15. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/utilities/paths.py +9 -3
  16. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/utilities/splitter_utils.py +1 -0
  17. easylink-0.1.8/src/easylink/utilities/validation_utils.py +52 -0
  18. {easylink-0.1.7 → easylink-0.1.8}/src/easylink.egg-info/PKG-INFO +1 -1
  19. {easylink-0.1.7 → easylink-0.1.8}/src/easylink.egg-info/SOURCES.txt +0 -1
  20. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_type_config_mismatch.yaml +8 -6
  21. {easylink-0.1.7 → easylink-0.1.8}/tests/unit/test_step.py +261 -278
  22. {easylink-0.1.7 → easylink-0.1.8}/tests/unit/test_validations.py +1 -1
  23. easylink-0.1.7/.github/workflows/build.yml +0 -60
  24. easylink-0.1.7/src/easylink/_version.py +0 -1
  25. easylink-0.1.7/src/easylink/pipeline_schema_constants/development.py +0 -297
  26. easylink-0.1.7/src/easylink/utilities/__init__.py +0 -8
  27. easylink-0.1.7/src/easylink/utilities/data_utils.py +0 -61
  28. easylink-0.1.7/src/easylink/utilities/validation_utils.py +0 -23
  29. {easylink-0.1.7 → easylink-0.1.8}/.bandit +0 -0
  30. {easylink-0.1.7 → easylink-0.1.8}/.flake8 +0 -0
  31. {easylink-0.1.7 → easylink-0.1.8}/.github/CODEOWNERS +0 -0
  32. {easylink-0.1.7 → easylink-0.1.8}/.github/pull_request_template.md +0 -0
  33. {easylink-0.1.7 → easylink-0.1.8}/.github/workflows/deploy.yml +0 -0
  34. {easylink-0.1.7 → easylink-0.1.8}/.github/workflows/update_readme.yml +0 -0
  35. {easylink-0.1.7 → easylink-0.1.8}/.gitignore +0 -0
  36. {easylink-0.1.7 → easylink-0.1.8}/.readthedocs.yml +0 -0
  37. {easylink-0.1.7 → easylink-0.1.8}/Jenkinsfile +0 -0
  38. {easylink-0.1.7 → easylink-0.1.8}/Makefile +0 -0
  39. {easylink-0.1.7 → easylink-0.1.8}/README.rst +0 -0
  40. {easylink-0.1.7 → easylink-0.1.8}/docs/Makefile +0 -0
  41. {easylink-0.1.7 → easylink-0.1.8}/docs/nitpick-exceptions +0 -0
  42. {easylink-0.1.7 → easylink-0.1.8}/docs/source/_static/style.css +0 -0
  43. {easylink-0.1.7 → easylink-0.1.8}/docs/source/_templates/layout.html +0 -0
  44. {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/cli.rst +0 -0
  45. {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/configuration.rst +0 -0
  46. {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/graph_components.rst +0 -0
  47. {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/implementation.rst +0 -0
  48. {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/index.rst +0 -0
  49. {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/pipeline.rst +0 -0
  50. {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/pipeline_graph.rst +0 -0
  51. {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/pipeline_schema.rst +0 -0
  52. {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/pipeline_schema_constants/development.rst +0 -0
  53. {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/pipeline_schema_constants/index.rst +0 -0
  54. {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/pipeline_schema_constants/testing.rst +0 -0
  55. {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/rule.rst +0 -0
  56. {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/runner.rst +0 -0
  57. {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/step.rst +0 -0
  58. {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/utilities/aggregator_utils.rst +0 -0
  59. {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/utilities/data_utils.rst +0 -0
  60. {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/utilities/general_utils.rst +0 -0
  61. {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/utilities/index.rst +0 -0
  62. {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/utilities/paths.rst +0 -0
  63. {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/utilities/splitter_utils.rst +0 -0
  64. {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/utilities/validation_utils.rst +0 -0
  65. {easylink-0.1.7 → easylink-0.1.8}/docs/source/concepts/index.rst +0 -0
  66. {easylink-0.1.7 → easylink-0.1.8}/docs/source/conf.py +0 -0
  67. {easylink-0.1.7 → easylink-0.1.8}/docs/source/glossary.rst +0 -0
  68. {easylink-0.1.7 → easylink-0.1.8}/docs/source/index.rst +0 -0
  69. {easylink-0.1.7 → easylink-0.1.8}/docs/source/user_guide/cli.rst +0 -0
  70. {easylink-0.1.7 → easylink-0.1.8}/docs/source/user_guide/index.rst +0 -0
  71. {easylink-0.1.7 → easylink-0.1.8}/docs/source/user_guide/tutorials/getting_started.rst +0 -0
  72. {easylink-0.1.7 → easylink-0.1.8}/docs/source/user_guide/tutorials/index.rst +0 -0
  73. {easylink-0.1.7 → easylink-0.1.8}/python_versions.json +0 -0
  74. {easylink-0.1.7 → easylink-0.1.8}/pytype.cfg +0 -0
  75. {easylink-0.1.7 → easylink-0.1.8}/setup.cfg +0 -0
  76. {easylink-0.1.7 → easylink-0.1.8}/setup.py +0 -0
  77. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/__about__.py +0 -0
  78. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/__init__.py +0 -0
  79. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/cli.py +0 -0
  80. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/configuration.py +0 -0
  81. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/images/spark_cluster/Dockerfile +0 -0
  82. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/images/spark_cluster/README.md +0 -0
  83. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/implementation.py +0 -0
  84. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/implementation_metadata.yaml +0 -0
  85. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/pipeline.py +0 -0
  86. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/pipeline_graph.py +0 -0
  87. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/rule.py +0 -0
  88. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/runner.py +0 -0
  89. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/README.md +0 -0
  90. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/build-containers-local.sh +0 -0
  91. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/build-containers-remote.sh +0 -0
  92. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/input_data/create_input_files.ipynb +0 -0
  93. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/input_data/input_file_1.csv +0 -0
  94. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/input_data/input_file_1.parquet +0 -0
  95. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/input_data/input_file_2.csv +0 -0
  96. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/input_data/input_file_2.parquet +0 -0
  97. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/python_pandas/README.md +0 -0
  98. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/python_pandas/dummy_step.py +0 -0
  99. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/python_pandas/python_pandas.def +0 -0
  100. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/python_pyspark/README.md +0 -0
  101. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/python_pyspark/dummy_step.py +0 -0
  102. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/python_pyspark/python_pyspark.def +0 -0
  103. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/r/README.md +0 -0
  104. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/r/dummy_step.R +0 -0
  105. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/r/r-image.def +0 -0
  106. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/test.py +0 -0
  107. {easylink-0.1.7 → easylink-0.1.8}/src/easylink/utilities/spark.smk +0 -0
  108. {easylink-0.1.7 → easylink-0.1.8}/src/easylink.egg-info/dependency_links.txt +0 -0
  109. {easylink-0.1.7 → easylink-0.1.8}/src/easylink.egg-info/entry_points.txt +0 -0
  110. {easylink-0.1.7 → easylink-0.1.8}/src/easylink.egg-info/not-zip-safe +0 -0
  111. {easylink-0.1.7 → easylink-0.1.8}/src/easylink.egg-info/requires.txt +0 -0
  112. {easylink-0.1.7 → easylink-0.1.8}/src/easylink.egg-info/top_level.txt +0 -0
  113. {easylink-0.1.7 → easylink-0.1.8}/tests/__init__.py +0 -0
  114. {easylink-0.1.7 → easylink-0.1.8}/tests/conftest.py +0 -0
  115. {easylink-0.1.7 → easylink-0.1.8}/tests/e2e/test_easylink_run.py +0 -0
  116. {easylink-0.1.7 → easylink-0.1.8}/tests/e2e/test_step_types.py +0 -0
  117. {easylink-0.1.7 → easylink-0.1.8}/tests/integration/test_snakemake.py +0 -0
  118. {easylink-0.1.7 → easylink-0.1.8}/tests/integration/test_snakemake_slurm.py +0 -0
  119. {easylink-0.1.7 → easylink-0.1.8}/tests/integration/test_snakemake_spark.py +0 -0
  120. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/common/environment_local.yaml +0 -0
  121. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/common/input_data.yaml +0 -0
  122. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/common/pipeline.yaml +0 -0
  123. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/e2e/environment_slurm.yaml +0 -0
  124. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/e2e/pipeline.yaml +0 -0
  125. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/e2e/pipeline_expanded.yaml +0 -0
  126. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/integration/environment_spark_slurm.yaml +0 -0
  127. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/integration/pipeline.yaml +0 -0
  128. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/integration/pipeline_spark.yaml +0 -0
  129. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/environment_minimum.yaml +0 -0
  130. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/environment_spark_slurm.yaml +0 -0
  131. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline.yaml +0 -0
  132. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_bad_combined_implementations.yaml +0 -0
  133. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_bad_implementation.yaml +0 -0
  134. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_bad_loop_formatting.yaml +0 -0
  135. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_bad_step.yaml +0 -0
  136. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_bad_type_key.yaml +0 -0
  137. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_combine_bad_implementation_names.yaml +0 -0
  138. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_combine_bad_topology.yaml +0 -0
  139. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_combine_two_steps.yaml +0 -0
  140. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_combine_with_extra_node.yaml +0 -0
  141. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_combine_with_iteration.yaml +0 -0
  142. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_combine_with_iteration_cycle.yaml +0 -0
  143. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_combine_with_missing_node.yaml +0 -0
  144. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_combine_with_parallel.yaml +0 -0
  145. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_missing_implementation_name.yaml +0 -0
  146. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_missing_implementations.yaml +0 -0
  147. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_missing_loop_nodes.yaml +0 -0
  148. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_missing_step.yaml +0 -0
  149. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_missing_substeps.yaml +0 -0
  150. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_missing_type_key.yaml +0 -0
  151. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_nested_templated_steps.yaml +0 -0
  152. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_out_of_order.yaml +0 -0
  153. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_spark.yaml +0 -0
  154. {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_wrong_parallel_split_keys.yaml +0 -0
  155. {easylink-0.1.7 → easylink-0.1.8}/tests/unit/__init__.py +0 -0
  156. {easylink-0.1.7 → easylink-0.1.8}/tests/unit/conftest.py +0 -0
  157. {easylink-0.1.7 → easylink-0.1.8}/tests/unit/rule_strings/aggregation_rule.txt +0 -0
  158. {easylink-0.1.7 → easylink-0.1.8}/tests/unit/rule_strings/checkpoint_rule.txt +0 -0
  159. {easylink-0.1.7 → easylink-0.1.8}/tests/unit/rule_strings/embarrassingly_parallel_rule.txt +0 -0
  160. {easylink-0.1.7 → easylink-0.1.8}/tests/unit/rule_strings/implemented_rule_local.txt +0 -0
  161. {easylink-0.1.7 → easylink-0.1.8}/tests/unit/rule_strings/implemented_rule_slurm.txt +0 -0
  162. {easylink-0.1.7 → easylink-0.1.8}/tests/unit/rule_strings/pipeline_local.txt +0 -0
  163. {easylink-0.1.7 → easylink-0.1.8}/tests/unit/rule_strings/pipeline_slurm.txt +0 -0
  164. {easylink-0.1.7 → easylink-0.1.8}/tests/unit/rule_strings/target_rule.txt +0 -0
  165. {easylink-0.1.7 → easylink-0.1.8}/tests/unit/rule_strings/validation_rule.txt +0 -0
  166. {easylink-0.1.7 → easylink-0.1.8}/tests/unit/test_cli.py +0 -0
  167. {easylink-0.1.7 → easylink-0.1.8}/tests/unit/test_config.py +0 -0
  168. {easylink-0.1.7 → easylink-0.1.8}/tests/unit/test_data_utils.py +0 -0
  169. {easylink-0.1.7 → easylink-0.1.8}/tests/unit/test_general_utils.py +0 -0
  170. {easylink-0.1.7 → easylink-0.1.8}/tests/unit/test_graph_components.py +0 -0
  171. {easylink-0.1.7 → easylink-0.1.8}/tests/unit/test_implementation.py +0 -0
  172. {easylink-0.1.7 → easylink-0.1.8}/tests/unit/test_pipeline.py +0 -0
  173. {easylink-0.1.7 → easylink-0.1.8}/tests/unit/test_pipeline_graph.py +0 -0
  174. {easylink-0.1.7 → easylink-0.1.8}/tests/unit/test_pipeline_schema.py +0 -0
  175. {easylink-0.1.7 → easylink-0.1.8}/tests/unit/test_rule.py +0 -0
  176. {easylink-0.1.7 → easylink-0.1.8}/tests/unit/test_runner.py +0 -0
  177. {easylink-0.1.7 → easylink-0.1.8}/update_readme.py +0 -0
@@ -1,3 +1,9 @@
1
+ **0.1.8 - 3/13/25**
2
+
3
+ - Refactor subgraph logic from Step to HierarchicalStep
4
+ - Refactor ChoiceStep so that each choice requires a single Step instead of nodes/edges
5
+ - Standardize the passing around of configurations to be step config instead of parent config
6
+
1
7
  **0.1.7 - 2/26/25**
2
8
 
3
9
  - Implement initial embarrassingly/auto-parallel step support
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: easylink
3
- Version: 0.1.7
3
+ Version: 0.1.8
4
4
  Summary: Research repository for the EasyLink ER ecosystem project.
5
5
  Home-page: https://github.com/ihmeuw/easylink
6
6
  Author: The EasyLink developers
@@ -35,6 +35,8 @@ exclude = [
35
35
  'src/easylink/steps/dev/python_pandas/dummy_step.py',
36
36
  'src/easylink/steps/dev/python_pyspark/dummy_step.py',
37
37
  'src/easylink/steps/dev/test.py',
38
+ 'src/easylink/utilities/aggregator_utils.py',
39
+ 'src/easylink/utilities/splitter_utils.py',
38
40
  'src/easylink/utilities/validation_utils.py',
39
41
  'tests/integration/test_snakemake_slurm.py',
40
42
  'tests/unit/test_graph_components.py',
@@ -0,0 +1 @@
1
+ __version__ = "0.1.8"
@@ -259,9 +259,13 @@ class SlotMapping(ABC):
259
259
  """A mapping between a slot on a parent node and a slot on one of its child nodes.
260
260
 
261
261
  ``SlotMapping`` is an interface intended to be used by concrete :class:`InputSlotMapping`
262
- and :class:`OutputSlotMapping` classes. It represents a mapping between
263
- parent and child nodes at different levels of a potentially-nested
264
- :class:`~easylink.pipeline_schema.PipelineSchema`.
262
+ and :class:`OutputSlotMapping` classes to represent a mapping between parent
263
+ and child nodes at different levels of a potentially-nested graph. Specifically,
264
+ they are used to (1) remap edges between parent and child nodes in a
265
+ :class:`~easylink.pipeline_schema.PipelineSchema` and (2) map a leaf
266
+ :class:`Step's<easylink.step.Step>` slots to the corresponding
267
+ :class:`~easylink.implementation.Implementation` slots when building the
268
+ :class:`~easylink.graph_components.ImplementationGraph`.
265
269
 
266
270
  Notes
267
271
  -----
@@ -22,8 +22,8 @@ class PipelineSchema(HierarchicalStep):
22
22
  """All possible pipelines that are fully supported.
23
23
 
24
24
  A ``PipelineSchema`` is a :class:`~easylink.step.HierarchicalStep` whose
25
- :class:`~easylink.graph_components.StepGraph` determines all possible allowable pipelines.
26
- The fundamental purpose of this class is to validate that the user-requested
25
+ :class:`~easylink.graph_components.StepGraph` determines all possible allowable
26
+ pipelines. The fundamental purpose of this class is to validate that the user-requested
27
27
  pipeline to run conforms to a fully supported pipeline.
28
28
 
29
29
  See :class:`~easylink.step.HierarchicalStep` for inherited attributes.
@@ -80,9 +80,9 @@ class PipelineSchema(HierarchicalStep):
80
80
  the user-provided pipeline specification file.
81
81
  """
82
82
  return super().validate_step(
83
- step_config={"substeps": pipeline_config["steps"]},
84
- combined_implementations=pipeline_config["combined_implementations"],
85
- input_data_config=input_data_config,
83
+ LayeredConfigTree({"substeps": pipeline_config.steps.to_dict()}),
84
+ pipeline_config.combined_implementations,
85
+ input_data_config,
86
86
  )
87
87
 
88
88
  def validate_inputs(self, input_data: dict[str, Path]) -> dict[str, list[str]]:
@@ -133,8 +133,8 @@ class PipelineSchema(HierarchicalStep):
133
133
  """
134
134
  self._configuration_state = NonLeafConfigurationState(
135
135
  self,
136
- pipeline_config["steps"],
137
- combined_implementations=pipeline_config["combined_implementations"],
136
+ pipeline_config.steps,
137
+ combined_implementations=pipeline_config.combined_implementations,
138
138
  input_data_config=input_data_config,
139
139
  )
140
140
 
@@ -1,3 +1,14 @@
1
+ """
2
+ =========================
3
+ Pipeline Schema Constants
4
+ =========================
5
+
6
+ An EasyLink :class:`~easylink.pipeline_schema.PipelineSchema` is a collection of
7
+ :class:`Steps<easylink.step.Step>` that define a fully supported pipeline. This
8
+ package defines the nodes and edges required to instantiate such ``PipelineSchemas``.
9
+
10
+ """
11
+
1
12
  from easylink.pipeline_schema_constants import development, testing
2
13
 
3
14
  ALLOWED_SCHEMA_PARAMS = {
@@ -0,0 +1,303 @@
1
+ """
2
+ =====================================
3
+ Development Pipeline Schema Constants
4
+ =====================================
5
+
6
+ This module contains the parameters required to instantiate the
7
+ :class:`~easylink.pipeline_schema.PipelineSchema` for the so-called "development"
8
+ pipeline, i.e. the pipeline used strictly for development purposes as opposed to
9
+ real entity resolution since it relies on dummy steps, data, and containers.
10
+
11
+ """
12
+
13
+ from easylink.graph_components import (
14
+ EdgeParams,
15
+ InputSlot,
16
+ InputSlotMapping,
17
+ OutputSlot,
18
+ OutputSlotMapping,
19
+ )
20
+ from easylink.step import (
21
+ ChoiceStep,
22
+ EmbarrassinglyParallelStep,
23
+ HierarchicalStep,
24
+ InputStep,
25
+ LoopStep,
26
+ OutputStep,
27
+ ParallelStep,
28
+ Step,
29
+ )
30
+ from easylink.utilities.aggregator_utils import concatenate_datasets
31
+ from easylink.utilities.splitter_utils import split_data_by_size
32
+ from easylink.utilities.validation_utils import validate_input_file_dummy
33
+
34
+ NODES = [
35
+ InputStep(),
36
+ ParallelStep(
37
+ template_step=Step(
38
+ step_name="step_1",
39
+ input_slots=[
40
+ InputSlot(
41
+ name="step_1_main_input",
42
+ env_var="DUMMY_CONTAINER_MAIN_INPUT_FILE_PATHS",
43
+ validator=validate_input_file_dummy,
44
+ ),
45
+ ],
46
+ output_slots=[OutputSlot("step_1_main_output")],
47
+ ),
48
+ ),
49
+ Step(
50
+ step_name="step_2",
51
+ input_slots=[
52
+ InputSlot(
53
+ name="step_2_main_input",
54
+ env_var="DUMMY_CONTAINER_MAIN_INPUT_FILE_PATHS",
55
+ validator=validate_input_file_dummy,
56
+ )
57
+ ],
58
+ output_slots=[OutputSlot("step_2_main_output")],
59
+ ),
60
+ LoopStep(
61
+ template_step=EmbarrassinglyParallelStep(
62
+ step_name="step_3",
63
+ input_slots=[
64
+ InputSlot(
65
+ name="step_3_main_input",
66
+ env_var="DUMMY_CONTAINER_MAIN_INPUT_FILE_PATHS",
67
+ validator=validate_input_file_dummy,
68
+ splitter=split_data_by_size,
69
+ ),
70
+ ],
71
+ output_slots=[
72
+ OutputSlot(
73
+ name="step_3_main_output",
74
+ aggregator=concatenate_datasets,
75
+ ),
76
+ ],
77
+ ),
78
+ self_edges=[
79
+ EdgeParams(
80
+ source_node="step_3",
81
+ target_node="step_3",
82
+ output_slot="step_3_main_output",
83
+ input_slot="step_3_main_input",
84
+ )
85
+ ],
86
+ ),
87
+ ChoiceStep(
88
+ step_name="choice_section",
89
+ input_slots=[
90
+ InputSlot(
91
+ name="choice_section_main_input",
92
+ env_var="DUMMY_CONTAINER_MAIN_INPUT_FILE_PATHS",
93
+ validator=validate_input_file_dummy,
94
+ ),
95
+ InputSlot(
96
+ name="choice_section_secondary_input",
97
+ env_var="DUMMY_CONTAINER_SECONDARY_INPUT_FILE_PATHS",
98
+ validator=validate_input_file_dummy,
99
+ ),
100
+ ],
101
+ output_slots=[OutputSlot("choice_section_main_output")],
102
+ choices={
103
+ "simple": {
104
+ "step": HierarchicalStep(
105
+ step_name="step_4",
106
+ input_slots=[
107
+ InputSlot(
108
+ name="step_4_main_input",
109
+ env_var="DUMMY_CONTAINER_MAIN_INPUT_FILE_PATHS",
110
+ validator=validate_input_file_dummy,
111
+ ),
112
+ InputSlot(
113
+ name="step_4_secondary_input",
114
+ env_var="DUMMY_CONTAINER_SECONDARY_INPUT_FILE_PATHS",
115
+ validator=validate_input_file_dummy,
116
+ ),
117
+ ],
118
+ output_slots=[OutputSlot("step_4_main_output")],
119
+ nodes=[
120
+ Step(
121
+ step_name="step_4a",
122
+ input_slots=[
123
+ InputSlot(
124
+ name="step_4a_main_input",
125
+ env_var="DUMMY_CONTAINER_MAIN_INPUT_FILE_PATHS",
126
+ validator=validate_input_file_dummy,
127
+ ),
128
+ InputSlot(
129
+ name="step_4a_secondary_input",
130
+ env_var="DUMMY_CONTAINER_SECONDARY_INPUT_FILE_PATHS",
131
+ validator=validate_input_file_dummy,
132
+ ),
133
+ ],
134
+ output_slots=[OutputSlot("step_4a_main_output")],
135
+ ),
136
+ Step(
137
+ step_name="step_4b",
138
+ input_slots=[
139
+ InputSlot(
140
+ name="step_4b_main_input",
141
+ env_var="DUMMY_CONTAINER_MAIN_INPUT_FILE_PATHS",
142
+ validator=validate_input_file_dummy,
143
+ ),
144
+ InputSlot(
145
+ name="step_4b_secondary_input",
146
+ env_var="DUMMY_CONTAINER_SECONDARY_INPUT_FILE_PATHS",
147
+ validator=validate_input_file_dummy,
148
+ ),
149
+ ],
150
+ output_slots=[OutputSlot("step_4b_main_output")],
151
+ ),
152
+ ],
153
+ edges=[
154
+ EdgeParams(
155
+ source_node="step_4a",
156
+ target_node="step_4b",
157
+ output_slot="step_4a_main_output",
158
+ input_slot="step_4b_main_input",
159
+ ),
160
+ ],
161
+ input_slot_mappings=[
162
+ InputSlotMapping(
163
+ parent_slot="step_4_main_input",
164
+ child_node="step_4a",
165
+ child_slot="step_4a_main_input",
166
+ ),
167
+ InputSlotMapping(
168
+ parent_slot="step_4_secondary_input",
169
+ child_node="step_4a",
170
+ child_slot="step_4a_secondary_input",
171
+ ),
172
+ InputSlotMapping(
173
+ parent_slot="step_4_secondary_input",
174
+ child_node="step_4b",
175
+ child_slot="step_4b_secondary_input",
176
+ ),
177
+ ],
178
+ output_slot_mappings=[
179
+ OutputSlotMapping(
180
+ parent_slot="step_4_main_output",
181
+ child_node="step_4b",
182
+ child_slot="step_4b_main_output",
183
+ ),
184
+ ],
185
+ ),
186
+ "input_slot_mappings": [
187
+ InputSlotMapping(
188
+ parent_slot="choice_section_main_input",
189
+ child_node="step_4",
190
+ child_slot="step_4_main_input",
191
+ ),
192
+ InputSlotMapping(
193
+ parent_slot="choice_section_secondary_input",
194
+ child_node="step_4",
195
+ child_slot="step_4_secondary_input",
196
+ ),
197
+ ],
198
+ "output_slot_mappings": [
199
+ OutputSlotMapping(
200
+ parent_slot="choice_section_main_output",
201
+ child_node="step_4",
202
+ child_slot="step_4_main_output",
203
+ ),
204
+ ],
205
+ },
206
+ "complex": {
207
+ "step": HierarchicalStep(
208
+ step_name="step_5_and_6",
209
+ nodes=[
210
+ Step(
211
+ step_name="step_5",
212
+ input_slots=[
213
+ InputSlot(
214
+ name="step_5_main_input",
215
+ env_var="DUMMY_CONTAINER_MAIN_INPUT_FILE_PATHS",
216
+ validator=validate_input_file_dummy,
217
+ ),
218
+ ],
219
+ output_slots=[OutputSlot("step_5_main_output")],
220
+ ),
221
+ Step(
222
+ step_name="step_6",
223
+ input_slots=[
224
+ InputSlot(
225
+ name="step_6_main_input",
226
+ env_var="DUMMY_CONTAINER_MAIN_INPUT_FILE_PATHS",
227
+ validator=validate_input_file_dummy,
228
+ ),
229
+ ],
230
+ output_slots=[OutputSlot("step_6_main_output")],
231
+ ),
232
+ ],
233
+ edges=[
234
+ EdgeParams(
235
+ source_node="step_5",
236
+ target_node="step_6",
237
+ output_slot="step_5_main_output",
238
+ input_slot="step_6_main_input",
239
+ ),
240
+ ],
241
+ ),
242
+ "input_slot_mappings": [
243
+ InputSlotMapping(
244
+ parent_slot="choice_section_main_input",
245
+ child_node="step_5",
246
+ child_slot="step_5_main_input",
247
+ ),
248
+ ],
249
+ "output_slot_mappings": [
250
+ OutputSlotMapping(
251
+ parent_slot="choice_section_main_output",
252
+ child_node="step_6",
253
+ child_slot="step_6_main_output",
254
+ ),
255
+ ],
256
+ },
257
+ },
258
+ ),
259
+ OutputStep(
260
+ input_slots=[
261
+ InputSlot(name="result", env_var=None, validator=validate_input_file_dummy)
262
+ ],
263
+ ),
264
+ ]
265
+ EDGES = [
266
+ EdgeParams(
267
+ source_node="input_data",
268
+ target_node="step_1",
269
+ output_slot="all",
270
+ input_slot="step_1_main_input",
271
+ ),
272
+ EdgeParams(
273
+ source_node="step_1",
274
+ target_node="step_2",
275
+ output_slot="step_1_main_output",
276
+ input_slot="step_2_main_input",
277
+ ),
278
+ EdgeParams(
279
+ source_node="step_2",
280
+ target_node="step_3",
281
+ output_slot="step_2_main_output",
282
+ input_slot="step_3_main_input",
283
+ ),
284
+ EdgeParams(
285
+ source_node="step_3",
286
+ target_node="choice_section",
287
+ output_slot="step_3_main_output",
288
+ input_slot="choice_section_main_input",
289
+ ),
290
+ EdgeParams(
291
+ source_node="choice_section",
292
+ target_node="results",
293
+ output_slot="choice_section_main_output",
294
+ input_slot="result",
295
+ ),
296
+ EdgeParams(
297
+ source_node="input_data",
298
+ target_node="choice_section",
299
+ output_slot="all",
300
+ input_slot="choice_section_secondary_input",
301
+ ),
302
+ ]
303
+ SCHEMA_PARAMS = (NODES, EDGES)
@@ -1,7 +1,11 @@
1
1
  """
2
- =====================
3
- Test Pipeline Schemas
4
- =====================
2
+ =================================
3
+ Testing Pipeline Schema Constants
4
+ =================================
5
+
6
+ This module contains the parameters required to instantiate various
7
+ :class:`~easylink.pipeline_schema.PipelineSchema` used strictly for testing purposes.
8
+
5
9
  """
6
10
 
7
11
  from easylink.graph_components import (