Task #2045: API design and language bindings
Data flow topology in gmxapi 2020
This feature coordinates various tasks related to the gmxapi roadmap functional requirement 10 for GROMACS 2020.
Output from operations can be used as input for other operations when describing deferred work, such as through the scripting interface. Abstractions support deferred execution, serialization and deserialization of work and results across different execution contexts, and definition of fused operations or subgraphs, such as could be used by a "while_loop" helper to re-constitute a graph with updated inputs for iteration.
To decouple these tasks from design questions in #2993, changes are posted on Gerrit as candidates for submission with occasionally clumsy or seemingly complicated workarounds that can be improved as stronger API typing and compatibility guarantees can be incorporated.
Includes many work-arounds for an incomplete data model,
illustrating what will need to be addressed in gmxapi
self-describing type system, data shaping, and Futures
- Move several nested classes to the gmxapi.operation scope.
Introduced abstractions and refactoring to replace some
dynamic definitions in the function_wrapper closure with
composition or more tightly scoped closures. Provide
cleaner helpers for dynamically defined operation, input,
and output types.
- Introduce minimal NDArray class and ndarray factory.
- Replace ImmediateResult with a Future of a StaticResource
- Implement Future slicing with Futures of ProxyResource
- Define several Descriptor classes for generic attribute
accessors in standard interfaces, supporting similar
style of interaction with resources as in C++ extensions.
- Explicitly type collaborations in the preliminary data flow
- Introduce ensemble data.
- Rename append_list to join_arrays.
- Add a lot of static type hinting and run-time type checking.
Note that the execution dependency in FR2 has been superseded by the
data flow driven dependency in FR3. The syntax supported in FR2 is now
disabled to allow development towards FR4.
Add subgraph and while_loop operations.
Allow multiple operations to be added in a subcontext so that
the set of operations can be instantiated and executed
repeatedly in a looping construct.
Also adds logical_not transformation, which will be further
refined in later changes.