easylink 0.1.7__tar.gz → 0.1.9__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.9}/CHANGELOG.rst +10 -0
  2. {easylink-0.1.7 → easylink-0.1.9}/PKG-INFO +1 -1
  3. {easylink-0.1.7 → easylink-0.1.9}/pyproject.toml +4 -0
  4. easylink-0.1.9/src/easylink/_version.py +1 -0
  5. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/graph_components.py +7 -3
  6. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/pipeline_schema.py +7 -7
  7. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/pipeline_schema_constants/__init__.py +11 -0
  8. easylink-0.1.9/src/easylink/pipeline_schema_constants/development.py +305 -0
  9. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/pipeline_schema_constants/testing.py +7 -3
  10. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/step.py +391 -353
  11. easylink-0.1.9/src/easylink/utilities/__init__.py +9 -0
  12. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/utilities/aggregator_utils.py +1 -0
  13. easylink-0.1.9/src/easylink/utilities/data_utils.py +154 -0
  14. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/utilities/general_utils.py +48 -10
  15. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/utilities/paths.py +9 -3
  16. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/utilities/splitter_utils.py +1 -0
  17. easylink-0.1.9/src/easylink/utilities/validation_utils.py +52 -0
  18. {easylink-0.1.7 → easylink-0.1.9}/src/easylink.egg-info/PKG-INFO +1 -1
  19. {easylink-0.1.7 → easylink-0.1.9}/src/easylink.egg-info/SOURCES.txt +0 -1
  20. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/unit/pipeline_type_config_mismatch.yaml +8 -6
  21. {easylink-0.1.7 → easylink-0.1.9}/tests/unit/test_step.py +278 -291
  22. {easylink-0.1.7 → easylink-0.1.9}/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.9}/.bandit +0 -0
  30. {easylink-0.1.7 → easylink-0.1.9}/.flake8 +0 -0
  31. {easylink-0.1.7 → easylink-0.1.9}/.github/CODEOWNERS +0 -0
  32. {easylink-0.1.7 → easylink-0.1.9}/.github/pull_request_template.md +0 -0
  33. {easylink-0.1.7 → easylink-0.1.9}/.github/workflows/deploy.yml +0 -0
  34. {easylink-0.1.7 → easylink-0.1.9}/.github/workflows/update_readme.yml +0 -0
  35. {easylink-0.1.7 → easylink-0.1.9}/.gitignore +0 -0
  36. {easylink-0.1.7 → easylink-0.1.9}/.readthedocs.yml +0 -0
  37. {easylink-0.1.7 → easylink-0.1.9}/Jenkinsfile +0 -0
  38. {easylink-0.1.7 → easylink-0.1.9}/Makefile +0 -0
  39. {easylink-0.1.7 → easylink-0.1.9}/README.rst +0 -0
  40. {easylink-0.1.7 → easylink-0.1.9}/docs/Makefile +0 -0
  41. {easylink-0.1.7 → easylink-0.1.9}/docs/nitpick-exceptions +0 -0
  42. {easylink-0.1.7 → easylink-0.1.9}/docs/source/_static/style.css +0 -0
  43. {easylink-0.1.7 → easylink-0.1.9}/docs/source/_templates/layout.html +0 -0
  44. {easylink-0.1.7 → easylink-0.1.9}/docs/source/api_reference/cli.rst +0 -0
  45. {easylink-0.1.7 → easylink-0.1.9}/docs/source/api_reference/configuration.rst +0 -0
  46. {easylink-0.1.7 → easylink-0.1.9}/docs/source/api_reference/graph_components.rst +0 -0
  47. {easylink-0.1.7 → easylink-0.1.9}/docs/source/api_reference/implementation.rst +0 -0
  48. {easylink-0.1.7 → easylink-0.1.9}/docs/source/api_reference/index.rst +0 -0
  49. {easylink-0.1.7 → easylink-0.1.9}/docs/source/api_reference/pipeline.rst +0 -0
  50. {easylink-0.1.7 → easylink-0.1.9}/docs/source/api_reference/pipeline_graph.rst +0 -0
  51. {easylink-0.1.7 → easylink-0.1.9}/docs/source/api_reference/pipeline_schema.rst +0 -0
  52. {easylink-0.1.7 → easylink-0.1.9}/docs/source/api_reference/pipeline_schema_constants/development.rst +0 -0
  53. {easylink-0.1.7 → easylink-0.1.9}/docs/source/api_reference/pipeline_schema_constants/index.rst +0 -0
  54. {easylink-0.1.7 → easylink-0.1.9}/docs/source/api_reference/pipeline_schema_constants/testing.rst +0 -0
  55. {easylink-0.1.7 → easylink-0.1.9}/docs/source/api_reference/rule.rst +0 -0
  56. {easylink-0.1.7 → easylink-0.1.9}/docs/source/api_reference/runner.rst +0 -0
  57. {easylink-0.1.7 → easylink-0.1.9}/docs/source/api_reference/step.rst +0 -0
  58. {easylink-0.1.7 → easylink-0.1.9}/docs/source/api_reference/utilities/aggregator_utils.rst +0 -0
  59. {easylink-0.1.7 → easylink-0.1.9}/docs/source/api_reference/utilities/data_utils.rst +0 -0
  60. {easylink-0.1.7 → easylink-0.1.9}/docs/source/api_reference/utilities/general_utils.rst +0 -0
  61. {easylink-0.1.7 → easylink-0.1.9}/docs/source/api_reference/utilities/index.rst +0 -0
  62. {easylink-0.1.7 → easylink-0.1.9}/docs/source/api_reference/utilities/paths.rst +0 -0
  63. {easylink-0.1.7 → easylink-0.1.9}/docs/source/api_reference/utilities/splitter_utils.rst +0 -0
  64. {easylink-0.1.7 → easylink-0.1.9}/docs/source/api_reference/utilities/validation_utils.rst +0 -0
  65. {easylink-0.1.7 → easylink-0.1.9}/docs/source/concepts/index.rst +0 -0
  66. {easylink-0.1.7 → easylink-0.1.9}/docs/source/conf.py +0 -0
  67. {easylink-0.1.7 → easylink-0.1.9}/docs/source/glossary.rst +0 -0
  68. {easylink-0.1.7 → easylink-0.1.9}/docs/source/index.rst +0 -0
  69. {easylink-0.1.7 → easylink-0.1.9}/docs/source/user_guide/cli.rst +0 -0
  70. {easylink-0.1.7 → easylink-0.1.9}/docs/source/user_guide/index.rst +0 -0
  71. {easylink-0.1.7 → easylink-0.1.9}/docs/source/user_guide/tutorials/getting_started.rst +0 -0
  72. {easylink-0.1.7 → easylink-0.1.9}/docs/source/user_guide/tutorials/index.rst +0 -0
  73. {easylink-0.1.7 → easylink-0.1.9}/python_versions.json +0 -0
  74. {easylink-0.1.7 → easylink-0.1.9}/pytype.cfg +0 -0
  75. {easylink-0.1.7 → easylink-0.1.9}/setup.cfg +0 -0
  76. {easylink-0.1.7 → easylink-0.1.9}/setup.py +0 -0
  77. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/__about__.py +0 -0
  78. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/__init__.py +0 -0
  79. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/cli.py +0 -0
  80. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/configuration.py +0 -0
  81. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/images/spark_cluster/Dockerfile +0 -0
  82. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/images/spark_cluster/README.md +0 -0
  83. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/implementation.py +0 -0
  84. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/implementation_metadata.yaml +0 -0
  85. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/pipeline.py +0 -0
  86. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/pipeline_graph.py +0 -0
  87. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/rule.py +0 -0
  88. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/runner.py +0 -0
  89. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/steps/dev/README.md +0 -0
  90. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/steps/dev/build-containers-local.sh +0 -0
  91. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/steps/dev/build-containers-remote.sh +0 -0
  92. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/steps/dev/input_data/create_input_files.ipynb +0 -0
  93. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/steps/dev/input_data/input_file_1.csv +0 -0
  94. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/steps/dev/input_data/input_file_1.parquet +0 -0
  95. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/steps/dev/input_data/input_file_2.csv +0 -0
  96. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/steps/dev/input_data/input_file_2.parquet +0 -0
  97. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/steps/dev/python_pandas/README.md +0 -0
  98. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/steps/dev/python_pandas/dummy_step.py +0 -0
  99. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/steps/dev/python_pandas/python_pandas.def +0 -0
  100. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/steps/dev/python_pyspark/README.md +0 -0
  101. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/steps/dev/python_pyspark/dummy_step.py +0 -0
  102. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/steps/dev/python_pyspark/python_pyspark.def +0 -0
  103. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/steps/dev/r/README.md +0 -0
  104. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/steps/dev/r/dummy_step.R +0 -0
  105. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/steps/dev/r/r-image.def +0 -0
  106. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/steps/dev/test.py +0 -0
  107. {easylink-0.1.7 → easylink-0.1.9}/src/easylink/utilities/spark.smk +0 -0
  108. {easylink-0.1.7 → easylink-0.1.9}/src/easylink.egg-info/dependency_links.txt +0 -0
  109. {easylink-0.1.7 → easylink-0.1.9}/src/easylink.egg-info/entry_points.txt +0 -0
  110. {easylink-0.1.7 → easylink-0.1.9}/src/easylink.egg-info/not-zip-safe +0 -0
  111. {easylink-0.1.7 → easylink-0.1.9}/src/easylink.egg-info/requires.txt +0 -0
  112. {easylink-0.1.7 → easylink-0.1.9}/src/easylink.egg-info/top_level.txt +0 -0
  113. {easylink-0.1.7 → easylink-0.1.9}/tests/__init__.py +0 -0
  114. {easylink-0.1.7 → easylink-0.1.9}/tests/conftest.py +0 -0
  115. {easylink-0.1.7 → easylink-0.1.9}/tests/e2e/test_easylink_run.py +0 -0
  116. {easylink-0.1.7 → easylink-0.1.9}/tests/e2e/test_step_types.py +0 -0
  117. {easylink-0.1.7 → easylink-0.1.9}/tests/integration/test_snakemake.py +0 -0
  118. {easylink-0.1.7 → easylink-0.1.9}/tests/integration/test_snakemake_slurm.py +0 -0
  119. {easylink-0.1.7 → easylink-0.1.9}/tests/integration/test_snakemake_spark.py +0 -0
  120. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/common/environment_local.yaml +0 -0
  121. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/common/input_data.yaml +0 -0
  122. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/common/pipeline.yaml +0 -0
  123. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/e2e/environment_slurm.yaml +0 -0
  124. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/e2e/pipeline.yaml +0 -0
  125. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/e2e/pipeline_expanded.yaml +0 -0
  126. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/integration/environment_spark_slurm.yaml +0 -0
  127. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/integration/pipeline.yaml +0 -0
  128. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/integration/pipeline_spark.yaml +0 -0
  129. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/unit/environment_minimum.yaml +0 -0
  130. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/unit/environment_spark_slurm.yaml +0 -0
  131. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/unit/pipeline.yaml +0 -0
  132. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/unit/pipeline_bad_combined_implementations.yaml +0 -0
  133. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/unit/pipeline_bad_implementation.yaml +0 -0
  134. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/unit/pipeline_bad_loop_formatting.yaml +0 -0
  135. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/unit/pipeline_bad_step.yaml +0 -0
  136. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/unit/pipeline_bad_type_key.yaml +0 -0
  137. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/unit/pipeline_combine_bad_implementation_names.yaml +0 -0
  138. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/unit/pipeline_combine_bad_topology.yaml +0 -0
  139. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/unit/pipeline_combine_two_steps.yaml +0 -0
  140. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/unit/pipeline_combine_with_extra_node.yaml +0 -0
  141. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/unit/pipeline_combine_with_iteration.yaml +0 -0
  142. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/unit/pipeline_combine_with_iteration_cycle.yaml +0 -0
  143. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/unit/pipeline_combine_with_missing_node.yaml +0 -0
  144. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/unit/pipeline_combine_with_parallel.yaml +0 -0
  145. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/unit/pipeline_missing_implementation_name.yaml +0 -0
  146. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/unit/pipeline_missing_implementations.yaml +0 -0
  147. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/unit/pipeline_missing_loop_nodes.yaml +0 -0
  148. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/unit/pipeline_missing_step.yaml +0 -0
  149. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/unit/pipeline_missing_substeps.yaml +0 -0
  150. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/unit/pipeline_missing_type_key.yaml +0 -0
  151. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/unit/pipeline_nested_templated_steps.yaml +0 -0
  152. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/unit/pipeline_out_of_order.yaml +0 -0
  153. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/unit/pipeline_spark.yaml +0 -0
  154. {easylink-0.1.7 → easylink-0.1.9}/tests/specifications/unit/pipeline_wrong_parallel_split_keys.yaml +0 -0
  155. {easylink-0.1.7 → easylink-0.1.9}/tests/unit/__init__.py +0 -0
  156. {easylink-0.1.7 → easylink-0.1.9}/tests/unit/conftest.py +0 -0
  157. {easylink-0.1.7 → easylink-0.1.9}/tests/unit/rule_strings/aggregation_rule.txt +0 -0
  158. {easylink-0.1.7 → easylink-0.1.9}/tests/unit/rule_strings/checkpoint_rule.txt +0 -0
  159. {easylink-0.1.7 → easylink-0.1.9}/tests/unit/rule_strings/embarrassingly_parallel_rule.txt +0 -0
  160. {easylink-0.1.7 → easylink-0.1.9}/tests/unit/rule_strings/implemented_rule_local.txt +0 -0
  161. {easylink-0.1.7 → easylink-0.1.9}/tests/unit/rule_strings/implemented_rule_slurm.txt +0 -0
  162. {easylink-0.1.7 → easylink-0.1.9}/tests/unit/rule_strings/pipeline_local.txt +0 -0
  163. {easylink-0.1.7 → easylink-0.1.9}/tests/unit/rule_strings/pipeline_slurm.txt +0 -0
  164. {easylink-0.1.7 → easylink-0.1.9}/tests/unit/rule_strings/target_rule.txt +0 -0
  165. {easylink-0.1.7 → easylink-0.1.9}/tests/unit/rule_strings/validation_rule.txt +0 -0
  166. {easylink-0.1.7 → easylink-0.1.9}/tests/unit/test_cli.py +0 -0
  167. {easylink-0.1.7 → easylink-0.1.9}/tests/unit/test_config.py +0 -0
  168. {easylink-0.1.7 → easylink-0.1.9}/tests/unit/test_data_utils.py +0 -0
  169. {easylink-0.1.7 → easylink-0.1.9}/tests/unit/test_general_utils.py +0 -0
  170. {easylink-0.1.7 → easylink-0.1.9}/tests/unit/test_graph_components.py +0 -0
  171. {easylink-0.1.7 → easylink-0.1.9}/tests/unit/test_implementation.py +0 -0
  172. {easylink-0.1.7 → easylink-0.1.9}/tests/unit/test_pipeline.py +0 -0
  173. {easylink-0.1.7 → easylink-0.1.9}/tests/unit/test_pipeline_graph.py +0 -0
  174. {easylink-0.1.7 → easylink-0.1.9}/tests/unit/test_pipeline_schema.py +0 -0
  175. {easylink-0.1.7 → easylink-0.1.9}/tests/unit/test_rule.py +0 -0
  176. {easylink-0.1.7 → easylink-0.1.9}/tests/unit/test_runner.py +0 -0
  177. {easylink-0.1.7 → easylink-0.1.9}/update_readme.py +0 -0
@@ -1,3 +1,13 @@
1
+ **0.1.9 - 3/14/25**
2
+
3
+ - Refactor EmbarrassinglyParallelStep to require a Step during construction
4
+
5
+ **0.1.8 - 3/13/25**
6
+
7
+ - Refactor subgraph logic from Step to HierarchicalStep
8
+ - Refactor ChoiceStep so that each choice requires a single Step instead of nodes/edges
9
+ - Standardize the passing around of configurations to be step config instead of parent config
10
+
1
11
  **0.1.7 - 2/26/25**
2
12
 
3
13
  - 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.9
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
@@ -29,12 +29,16 @@ exclude = [
29
29
  'src/easylink/pipeline_graph.py',
30
30
  'src/easylink/pipeline.py',
31
31
  'src/easylink/pipeline_schema.py',
32
+ 'src/easylink/pipeline_schema_constants/testing.py',
33
+ 'src/easylink/pipeline_schema_constants/development.py',
32
34
  'src/easylink/rule.py',
33
35
  'src/easylink/runner.py',
34
36
  'src/easylink/step.py',
35
37
  'src/easylink/steps/dev/python_pandas/dummy_step.py',
36
38
  'src/easylink/steps/dev/python_pyspark/dummy_step.py',
37
39
  'src/easylink/steps/dev/test.py',
40
+ 'src/easylink/utilities/aggregator_utils.py',
41
+ 'src/easylink/utilities/splitter_utils.py',
38
42
  'src/easylink/utilities/validation_utils.py',
39
43
  'tests/integration/test_snakemake_slurm.py',
40
44
  'tests/unit/test_graph_components.py',
@@ -0,0 +1 @@
1
+ __version__ = "0.1.9"
@@ -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,305 @@
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=Step(
63
+ step_name="step_3",
64
+ input_slots=[
65
+ InputSlot(
66
+ name="step_3_main_input",
67
+ env_var="DUMMY_CONTAINER_MAIN_INPUT_FILE_PATHS",
68
+ validator=validate_input_file_dummy,
69
+ splitter=split_data_by_size,
70
+ ),
71
+ ],
72
+ output_slots=[
73
+ OutputSlot(
74
+ name="step_3_main_output",
75
+ aggregator=concatenate_datasets,
76
+ ),
77
+ ],
78
+ ),
79
+ ),
80
+ self_edges=[
81
+ EdgeParams(
82
+ source_node="step_3",
83
+ target_node="step_3",
84
+ output_slot="step_3_main_output",
85
+ input_slot="step_3_main_input",
86
+ )
87
+ ],
88
+ ),
89
+ ChoiceStep(
90
+ step_name="choice_section",
91
+ input_slots=[
92
+ InputSlot(
93
+ name="choice_section_main_input",
94
+ env_var="DUMMY_CONTAINER_MAIN_INPUT_FILE_PATHS",
95
+ validator=validate_input_file_dummy,
96
+ ),
97
+ InputSlot(
98
+ name="choice_section_secondary_input",
99
+ env_var="DUMMY_CONTAINER_SECONDARY_INPUT_FILE_PATHS",
100
+ validator=validate_input_file_dummy,
101
+ ),
102
+ ],
103
+ output_slots=[OutputSlot("choice_section_main_output")],
104
+ choices={
105
+ "simple": {
106
+ "step": HierarchicalStep(
107
+ step_name="step_4",
108
+ input_slots=[
109
+ InputSlot(
110
+ name="step_4_main_input",
111
+ env_var="DUMMY_CONTAINER_MAIN_INPUT_FILE_PATHS",
112
+ validator=validate_input_file_dummy,
113
+ ),
114
+ InputSlot(
115
+ name="step_4_secondary_input",
116
+ env_var="DUMMY_CONTAINER_SECONDARY_INPUT_FILE_PATHS",
117
+ validator=validate_input_file_dummy,
118
+ ),
119
+ ],
120
+ output_slots=[OutputSlot("step_4_main_output")],
121
+ nodes=[
122
+ Step(
123
+ step_name="step_4a",
124
+ input_slots=[
125
+ InputSlot(
126
+ name="step_4a_main_input",
127
+ env_var="DUMMY_CONTAINER_MAIN_INPUT_FILE_PATHS",
128
+ validator=validate_input_file_dummy,
129
+ ),
130
+ InputSlot(
131
+ name="step_4a_secondary_input",
132
+ env_var="DUMMY_CONTAINER_SECONDARY_INPUT_FILE_PATHS",
133
+ validator=validate_input_file_dummy,
134
+ ),
135
+ ],
136
+ output_slots=[OutputSlot("step_4a_main_output")],
137
+ ),
138
+ Step(
139
+ step_name="step_4b",
140
+ input_slots=[
141
+ InputSlot(
142
+ name="step_4b_main_input",
143
+ env_var="DUMMY_CONTAINER_MAIN_INPUT_FILE_PATHS",
144
+ validator=validate_input_file_dummy,
145
+ ),
146
+ InputSlot(
147
+ name="step_4b_secondary_input",
148
+ env_var="DUMMY_CONTAINER_SECONDARY_INPUT_FILE_PATHS",
149
+ validator=validate_input_file_dummy,
150
+ ),
151
+ ],
152
+ output_slots=[OutputSlot("step_4b_main_output")],
153
+ ),
154
+ ],
155
+ edges=[
156
+ EdgeParams(
157
+ source_node="step_4a",
158
+ target_node="step_4b",
159
+ output_slot="step_4a_main_output",
160
+ input_slot="step_4b_main_input",
161
+ ),
162
+ ],
163
+ input_slot_mappings=[
164
+ InputSlotMapping(
165
+ parent_slot="step_4_main_input",
166
+ child_node="step_4a",
167
+ child_slot="step_4a_main_input",
168
+ ),
169
+ InputSlotMapping(
170
+ parent_slot="step_4_secondary_input",
171
+ child_node="step_4a",
172
+ child_slot="step_4a_secondary_input",
173
+ ),
174
+ InputSlotMapping(
175
+ parent_slot="step_4_secondary_input",
176
+ child_node="step_4b",
177
+ child_slot="step_4b_secondary_input",
178
+ ),
179
+ ],
180
+ output_slot_mappings=[
181
+ OutputSlotMapping(
182
+ parent_slot="step_4_main_output",
183
+ child_node="step_4b",
184
+ child_slot="step_4b_main_output",
185
+ ),
186
+ ],
187
+ ),
188
+ "input_slot_mappings": [
189
+ InputSlotMapping(
190
+ parent_slot="choice_section_main_input",
191
+ child_node="step_4",
192
+ child_slot="step_4_main_input",
193
+ ),
194
+ InputSlotMapping(
195
+ parent_slot="choice_section_secondary_input",
196
+ child_node="step_4",
197
+ child_slot="step_4_secondary_input",
198
+ ),
199
+ ],
200
+ "output_slot_mappings": [
201
+ OutputSlotMapping(
202
+ parent_slot="choice_section_main_output",
203
+ child_node="step_4",
204
+ child_slot="step_4_main_output",
205
+ ),
206
+ ],
207
+ },
208
+ "complex": {
209
+ "step": HierarchicalStep(
210
+ step_name="step_5_and_6",
211
+ nodes=[
212
+ Step(
213
+ step_name="step_5",
214
+ input_slots=[
215
+ InputSlot(
216
+ name="step_5_main_input",
217
+ env_var="DUMMY_CONTAINER_MAIN_INPUT_FILE_PATHS",
218
+ validator=validate_input_file_dummy,
219
+ ),
220
+ ],
221
+ output_slots=[OutputSlot("step_5_main_output")],
222
+ ),
223
+ Step(
224
+ step_name="step_6",
225
+ input_slots=[
226
+ InputSlot(
227
+ name="step_6_main_input",
228
+ env_var="DUMMY_CONTAINER_MAIN_INPUT_FILE_PATHS",
229
+ validator=validate_input_file_dummy,
230
+ ),
231
+ ],
232
+ output_slots=[OutputSlot("step_6_main_output")],
233
+ ),
234
+ ],
235
+ edges=[
236
+ EdgeParams(
237
+ source_node="step_5",
238
+ target_node="step_6",
239
+ output_slot="step_5_main_output",
240
+ input_slot="step_6_main_input",
241
+ ),
242
+ ],
243
+ ),
244
+ "input_slot_mappings": [
245
+ InputSlotMapping(
246
+ parent_slot="choice_section_main_input",
247
+ child_node="step_5",
248
+ child_slot="step_5_main_input",
249
+ ),
250
+ ],
251
+ "output_slot_mappings": [
252
+ OutputSlotMapping(
253
+ parent_slot="choice_section_main_output",
254
+ child_node="step_6",
255
+ child_slot="step_6_main_output",
256
+ ),
257
+ ],
258
+ },
259
+ },
260
+ ),
261
+ OutputStep(
262
+ input_slots=[
263
+ InputSlot(name="result", env_var=None, validator=validate_input_file_dummy)
264
+ ],
265
+ ),
266
+ ]
267
+ EDGES = [
268
+ EdgeParams(
269
+ source_node="input_data",
270
+ target_node="step_1",
271
+ output_slot="all",
272
+ input_slot="step_1_main_input",
273
+ ),
274
+ EdgeParams(
275
+ source_node="step_1",
276
+ target_node="step_2",
277
+ output_slot="step_1_main_output",
278
+ input_slot="step_2_main_input",
279
+ ),
280
+ EdgeParams(
281
+ source_node="step_2",
282
+ target_node="step_3",
283
+ output_slot="step_2_main_output",
284
+ input_slot="step_3_main_input",
285
+ ),
286
+ EdgeParams(
287
+ source_node="step_3",
288
+ target_node="choice_section",
289
+ output_slot="step_3_main_output",
290
+ input_slot="choice_section_main_input",
291
+ ),
292
+ EdgeParams(
293
+ source_node="choice_section",
294
+ target_node="results",
295
+ output_slot="choice_section_main_output",
296
+ input_slot="result",
297
+ ),
298
+ EdgeParams(
299
+ source_node="input_data",
300
+ target_node="choice_section",
301
+ output_slot="all",
302
+ input_slot="choice_section_secondary_input",
303
+ ),
304
+ ]
305
+ 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 (