-
Notifications
You must be signed in to change notification settings - Fork 16
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Minor documentation update * Minor documentation update * Minor documentation update * 'when' tag support in Python API * Minor refactor (#242) * minor correction to docstring * copy & paste cwl-docker-extract code from main.py * update userguide with python API docs * fix step_key evaluation in get_workflow_outputs * add user docs (#232) Co-authored-by: Brandon Duane Walker <walkerbd@UPDATEME.HOSTNAME.COM> * add required files for rest api (core) (#247) * add required files for rest api (core) * add a single node/step workflow test rest api * add orjson as dep and pytest fix gha --------- Co-authored-by: Vasu Jaganath <vasu.jaganath@axleinfo.com> * Update pyproject.toml for release --------- Co-authored-by: Vasu Jaganath <vasu.jaganath@axleinfo.com> Co-authored-by: Jake Fennick <jake.fennick@axleinfo.com> Co-authored-by: Brandon Walker <43654521+misterbrandonwalker@users.noreply.github.com> Co-authored-by: Brandon Duane Walker <walkerbd@UPDATEME.HOSTNAME.COM> Co-authored-by: VasuJ <145879890+vjaganat90@users.noreply.github.com>
- Loading branch information
1 parent
4b7b733
commit b630451
Showing
22 changed files
with
820 additions
and
38 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,54 +1,43 @@ | ||
# Workflow Inference Compiler | ||
# Sophios | ||
|
||
[![doc-buid-status](https://readthedocs.org/projects/workflow-inference-compiler/badge/?version=latest)](https://workflow-inference-compiler.readthedocs.io/en/latest/) | ||
|
||
Scientific computing can be difficult in practice due to various complex software issues. In particular, chaining together software packages into a computational pipeline can be very error prone. Using the [Common Workflow Language](https://www.commonwl.org) (CWL) greatly helps, but like many other workflow languages users still need to explicitly specify how to connect inputs & outputs. The Workflow Inference Compiler allows users to specify computational protocols at a very high level of abstraction, it automatically infers almost all connections between inputs & outputs, and it compiles to CWL for execution. | ||
Scientific computing can be difficult in practice due to various complex software issues. In particular, chaining together software packages into a computational pipeline can be very error prone. Using the [Common Workflow Language](https://www.commonwl.org) (CWL) greatly helps, but like many other workflow languages users still need to explicitly specify how to connect inputs & outputs. Sophios allows users to specify computational protocols at a very high level of abstraction, it automatically infers almost all connections between inputs & outputs, and it compiles to CWL for execution. | ||
|
||
## Documentation | ||
The documentation is available on [readthedocs](https://workflow-inference-compiler.readthedocs.io/en/latest/). | ||
## Example Workflows | ||
The following repositories contain example workflows: | ||
|
||
[Molecular Modeling Workflows](https://github.com/PolusAI/mm-workflows) | ||
|
||
[Image Workflows](https://github.com/PolusAI/image-workflows) | ||
|
||
Like CWL, the compiler is general purpose and is not limited to any specific domain. | ||
You do not need to install these to use wic. They are completely optional. | ||
|
||
(But obviously if you're just getting started and you don't have any workflows of your own, you probably want to install at least one of them.) | ||
## Quick Start | ||
See the [installation guide](docs/installguide.md) for more details, but: | ||
|
||
For pip users: | ||
|
||
`pip install wic` # Please read the next sentence | ||
`pip install sophios` | ||
|
||
Unlike conda, **pip cannot install the binary system dependencies needed to actually run most workflows!** | ||
In order to execute the CWL workflows that are generated by `sophios`, `cwltool` and all of its underlying dependencies need to be present in the system. Unfortunately | ||
`pip` has no capability to resolve and install these dependencies. PLease refer to the `cwltool` [installation guide](https://cwltool.readthedocs.io/en/latest/#install) to prepare the system to run CWL workflows. | ||
|
||
If you want to actually run workflows, you (or your sysadmin) will have to manually install and configure additional software! | ||
|
||
For conda users / developers: | ||
|
||
See the [installation guide for developers](docs/dev/installguide.md) | ||
|
||
``` | ||
wic --yaml ../workflow-inference-compiler/docs/tutorials/helloworld.wic --graphviz --run_local --quiet | ||
sophios --yaml ../workflow-inference-compiler/docs/tutorials/helloworld.wic --graphviz --run_local --quiet | ||
``` | ||
|
||
The Workflow Inference Compiler is a [Domain Specific Language](https://en.wikipedia.org/wiki/Domain-specific_language) (DSL) based on the [Common Workflow Language](https://www.commonwl.org). CWL is fantastic, but explicitly constructing the Directed Acyclic Graph (DAG) associated with a non-trivial workflow is not so simple. Instead of writing raw CWL, you can write your workflows in a much simpler yml DSL. For technical reasons edge inference is far from unique, so ***`users should always check that edge inference actually produces the intended DAG`***. | ||
Sophios is a [Domain Specific Language](https://en.wikipedia.org/wiki/Domain-specific_language) (DSL) based on the [Common Workflow Language](https://www.commonwl.org). CWL is fantastic, but explicitly constructing the Directed Acyclic Graph (DAG) associated with a non-trivial workflow is not so simple. Instead of writing raw CWL, users can write workflows in a much simpler yml DSL. For technical reasons edge inference is far from unique, so ***`users should always check that edge inference actually produces the intended DAG`***. | ||
|
||
## Edge Inference | ||
|
||
The key feature is that in most cases, you do not need to specify any of the edges! They will be automatically inferred for you based on types, file formats, and naming conventions. For more information, see the [user guide](docs/userguide.md#edge-inference-algorithm) If for some reason edge inference fails, there is a syntax for creating [explicit edges](docs/userguide.md#explicit-edges). | ||
The key feature is that in most cases, users do not need to specify any of the edges! They will be automatically inferred for users based on types, file formats, and naming conventions. For more information, see the [user guide](docs/userguide.md#edge-inference-algorithm) If for some reason edge inference fails, there is a syntax for creating [explicit edges](docs/userguide.md#explicit-edges). | ||
|
||
## Subworkflows | ||
|
||
Subworkflows are very useful for creating reusable, composable building blocks. As shown above, recursive subworkflows are fully supported, and the edge inference algorithm has been very carefully constructed to work across subworkflow boundaries. | ||
|
||
## Explicit CWL | ||
|
||
Since the yml DSL files are automatically compiled to CWL, users should not have to know any CWL. However, the yml DSL is secretly CWL that is simply missing almost all of the tags! In other words, the compiler merely adds missing information to the files, and so if you know CWL you are free to explicitly add the information yourself. Thus, the yml DSL is intentionally a [leaky abstraction](https://en.wikipedia.org/wiki/Leaky_abstraction). | ||
Since the yml DSL files are automatically compiled to CWL, users should not have to know any CWL. However, the yml DSL is secretly CWL that is simply missing almost all of the tags! In other words, the compiler merely adds missing information to the files, and so if the users know CWL, they are free to explicitly add the information themselves. Thus, the yml DSL is intentionally a [leaky abstraction](https://en.wikipedia.org/wiki/Leaky_abstraction). | ||
|
||
## Python API | ||
In addition to the underlying declarative yaml syntax, there is an API for writing WIC workflows in python. The python API is philosophically the exact opposite: users should not have to know any CWL, and in fact all CWL features are hidden unless explicitly exposed. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
steps: | ||
toString: | ||
in: | ||
input: !ii 27 | ||
out: | ||
- output: !& string_int | ||
echo: | ||
when: '$(inputs.message < "27")' | ||
in: | ||
message: !* string_int |
Oops, something went wrong.