Flowgraphs [Experimental]#
Primary APIs#
- pystencils.flow.operator(func=None, /, preds=None, name=None, ispace=None, config=None, **kwargs)#
- Overloads:
preds (Iterable[FlowgraphNode] | None), name (str | None), ispace (PatchSliceSpec | PatchSlice | None), config (CreateKernelConfig | None), kwargs → Callable[[FlowgraphNode | _SingleBlockOperatorFunc | _ComplexGraphOperatorFunc], Operator]
func (_SingleBlockOperatorFunc | _ComplexGraphOperatorFunc) → Operator
- Parameters:
func (Callable[[EquationsBlockBuilder], None] | Callable[[], FlowgraphNode | tuple[FlowgraphNode, ...]] | None)
preds (Iterable[FlowgraphNode] | None)
name (str | None)
ispace (PatchSliceSpec | PatchSlice | None)
config (CreateKernelConfig | None)
- pystencils.flow.block(func=None, /, preds=None, name=None)#
Define a flowgraph block using
letsyntax.- Overloads:
preds (Iterable[FlowgraphNode] | None), name (str | None) → Callable[[Callable[[EquationsBlockBuilder], None]], EquationsBlock]
func (Callable[[EquationsBlockBuilder], None]) → EquationsBlock
- Parameters:
func (Callable[[EquationsBlockBuilder], None] | None)
preds (Iterable[FlowgraphNode] | None)
name (str | None)
blockis a decorator used to define flowgraph blocks using Python function syntax.- Parameters:
preds (
Optional[Iterable[FlowgraphNode]]) – Predecessor nodes to this blockname (
str|None) – Name of this block. If none is given, the function’s name will be usedfunc (Callable[[EquationsBlockBuilder], None] | None)
- pystencils.flow.guarded_block(cond, *, preds=None, name=None)#
Define a guarded block that is protected by a condition.
- Return type:
Callable[[Callable[[EquationsBlockBuilder],None]],EquationsBlock|Cases]- Parameters:
cond (Basic)
preds (Iterable[FlowgraphNode] | None)
name (str | None)
- pystencils.flow.cases(func=None, /, preds=None, name=None)#
Define a flowgraph cases block.
- Overloads:
preds (Iterable[FlowgraphNode] | None), name (str | None) → Callable[[Callable[[CasesBuilder], None]], Cases]
func (Callable[[CasesBuilder], None]) → Cases
- Parameters:
func (Callable[[CasesBuilder], None] | None)
preds (Iterable[FlowgraphNode] | None)
name (str | None)
casesis a decorator used to define flowgraph case blocks using Python function syntax.
- pystencils.flow.tie(*nodes, name=None)#
Tie multiple nodes together into a flowgraph
- Return type:
- Parameters:
nodes (FlowgraphNode)
name (str | None)
- pystencils.flow.subgraph(*args, preds=(), name=None)#
- Overloads:
graph (Flowgraph), preds (Sequence[FlowgraphNode]) → Subgraph
nodes (FlowgraphNode), preds (Sequence[FlowgraphNode]), name (str | None) → Subgraph
- Parameters:
args (Flowgraph | FlowgraphNode)
preds (Sequence[FlowgraphNode])
name (str | None)
- Return type:
- pystencils.flow.guarded_subgraph(cond, *, preds=None, name=None)#
Create a guarded subgraph.
guarded_subgraphis a function decorator; the decorated function should constuct and return the output nodes of the guarded graph.Example:
@ps.flow.guarded_subgraph(condition) def mygraph(): # ... define subgraph # return output nodes return block1, block2
- Parameters:
cond (Basic)
preds (Iterable[FlowgraphNode] | None)
name (str | None)
Flowgraph Nodes#
Inheritance Diagram#

Classes#
- pystencils.flow.flowgraph.SymbolicMemoryLoc = pystencils.field.Field.Access | pystencils.sympyextensions.pointers.mem_acc | pystencils.grids.protocols.IFieldAccess#
Expression types that are valid memory locations and can be used on the LHS of
Store.
A closed flowgraph in canonical form. |
|
Base class for assignments. |
|
|
|
|
|
|
|
|
|
Base class for data-flow graph nodes in pystencils.flow. |
|
A flowgraph's top node. |
|
A flowgraph's bottom node. |
|
A block of symbol assignments in static single-assignment form. |
|
Another flowgraph embedded as a subgraph. |
|
Case distinction. |
Builders#
Builder for equation blocks. |
|
Canonicalization#
Check a flowgraph for consistency and transform it into canonical form. |
|
Result of the flowgraph canonicalizer |
|
Indicates that a flowgraph violates a canonicality condition. |