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.
- {easylink-0.1.7 → easylink-0.1.8}/CHANGELOG.rst +6 -0
- {easylink-0.1.7 → easylink-0.1.8}/PKG-INFO +1 -1
- {easylink-0.1.7 → easylink-0.1.8}/pyproject.toml +2 -0
- easylink-0.1.8/src/easylink/_version.py +1 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/graph_components.py +7 -3
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/pipeline_schema.py +7 -7
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/pipeline_schema_constants/__init__.py +11 -0
- easylink-0.1.8/src/easylink/pipeline_schema_constants/development.py +303 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/pipeline_schema_constants/testing.py +7 -3
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/step.py +379 -347
- easylink-0.1.8/src/easylink/utilities/__init__.py +9 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/utilities/aggregator_utils.py +1 -0
- easylink-0.1.8/src/easylink/utilities/data_utils.py +154 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/utilities/general_utils.py +48 -10
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/utilities/paths.py +9 -3
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/utilities/splitter_utils.py +1 -0
- easylink-0.1.8/src/easylink/utilities/validation_utils.py +52 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink.egg-info/PKG-INFO +1 -1
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink.egg-info/SOURCES.txt +0 -1
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_type_config_mismatch.yaml +8 -6
- {easylink-0.1.7 → easylink-0.1.8}/tests/unit/test_step.py +261 -278
- {easylink-0.1.7 → easylink-0.1.8}/tests/unit/test_validations.py +1 -1
- easylink-0.1.7/.github/workflows/build.yml +0 -60
- easylink-0.1.7/src/easylink/_version.py +0 -1
- easylink-0.1.7/src/easylink/pipeline_schema_constants/development.py +0 -297
- easylink-0.1.7/src/easylink/utilities/__init__.py +0 -8
- easylink-0.1.7/src/easylink/utilities/data_utils.py +0 -61
- easylink-0.1.7/src/easylink/utilities/validation_utils.py +0 -23
- {easylink-0.1.7 → easylink-0.1.8}/.bandit +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/.flake8 +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/.github/CODEOWNERS +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/.github/pull_request_template.md +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/.github/workflows/deploy.yml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/.github/workflows/update_readme.yml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/.gitignore +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/.readthedocs.yml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/Jenkinsfile +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/Makefile +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/README.rst +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/Makefile +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/nitpick-exceptions +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/_static/style.css +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/_templates/layout.html +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/cli.rst +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/configuration.rst +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/graph_components.rst +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/implementation.rst +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/index.rst +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/pipeline.rst +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/pipeline_graph.rst +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/pipeline_schema.rst +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/pipeline_schema_constants/development.rst +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/pipeline_schema_constants/index.rst +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/pipeline_schema_constants/testing.rst +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/rule.rst +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/runner.rst +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/step.rst +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/utilities/aggregator_utils.rst +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/utilities/data_utils.rst +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/utilities/general_utils.rst +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/utilities/index.rst +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/utilities/paths.rst +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/utilities/splitter_utils.rst +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/api_reference/utilities/validation_utils.rst +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/concepts/index.rst +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/conf.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/glossary.rst +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/index.rst +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/user_guide/cli.rst +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/user_guide/index.rst +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/user_guide/tutorials/getting_started.rst +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/docs/source/user_guide/tutorials/index.rst +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/python_versions.json +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/pytype.cfg +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/setup.cfg +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/setup.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/__about__.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/__init__.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/cli.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/configuration.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/images/spark_cluster/Dockerfile +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/images/spark_cluster/README.md +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/implementation.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/implementation_metadata.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/pipeline.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/pipeline_graph.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/rule.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/runner.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/README.md +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/build-containers-local.sh +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/build-containers-remote.sh +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/input_data/create_input_files.ipynb +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/input_data/input_file_1.csv +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/input_data/input_file_1.parquet +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/input_data/input_file_2.csv +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/input_data/input_file_2.parquet +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/python_pandas/README.md +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/python_pandas/dummy_step.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/python_pandas/python_pandas.def +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/python_pyspark/README.md +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/python_pyspark/dummy_step.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/python_pyspark/python_pyspark.def +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/r/README.md +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/r/dummy_step.R +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/r/r-image.def +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/steps/dev/test.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink/utilities/spark.smk +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink.egg-info/dependency_links.txt +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink.egg-info/entry_points.txt +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink.egg-info/not-zip-safe +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink.egg-info/requires.txt +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/src/easylink.egg-info/top_level.txt +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/__init__.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/conftest.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/e2e/test_easylink_run.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/e2e/test_step_types.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/integration/test_snakemake.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/integration/test_snakemake_slurm.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/integration/test_snakemake_spark.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/common/environment_local.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/common/input_data.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/common/pipeline.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/e2e/environment_slurm.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/e2e/pipeline.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/e2e/pipeline_expanded.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/integration/environment_spark_slurm.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/integration/pipeline.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/integration/pipeline_spark.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/environment_minimum.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/environment_spark_slurm.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_bad_combined_implementations.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_bad_implementation.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_bad_loop_formatting.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_bad_step.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_bad_type_key.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_combine_bad_implementation_names.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_combine_bad_topology.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_combine_two_steps.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_combine_with_extra_node.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_combine_with_iteration.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_combine_with_iteration_cycle.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_combine_with_missing_node.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_combine_with_parallel.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_missing_implementation_name.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_missing_implementations.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_missing_loop_nodes.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_missing_step.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_missing_substeps.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_missing_type_key.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_nested_templated_steps.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_out_of_order.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_spark.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/specifications/unit/pipeline_wrong_parallel_split_keys.yaml +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/unit/__init__.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/unit/conftest.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/unit/rule_strings/aggregation_rule.txt +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/unit/rule_strings/checkpoint_rule.txt +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/unit/rule_strings/embarrassingly_parallel_rule.txt +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/unit/rule_strings/implemented_rule_local.txt +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/unit/rule_strings/implemented_rule_slurm.txt +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/unit/rule_strings/pipeline_local.txt +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/unit/rule_strings/pipeline_slurm.txt +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/unit/rule_strings/target_rule.txt +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/unit/rule_strings/validation_rule.txt +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/unit/test_cli.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/unit/test_config.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/unit/test_data_utils.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/unit/test_general_utils.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/unit/test_graph_components.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/unit/test_implementation.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/unit/test_pipeline.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/unit/test_pipeline_graph.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/unit/test_pipeline_schema.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/unit/test_rule.py +0 -0
- {easylink-0.1.7 → easylink-0.1.8}/tests/unit/test_runner.py +0 -0
- {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
|
@@ -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
|
263
|
-
|
264
|
-
|
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
|
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
|
-
|
84
|
-
|
85
|
-
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
|
137
|
-
combined_implementations=pipeline_config
|
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
|
-
|
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 (
|