loki.ir.nodes
Control flow node classes for Control flow tree
Classes
  | 
Internal representation of a variable allocation.  | 
  | 
Internal representation of a variable assignment.  | 
  | 
Internal representation of a code region in which names are associated with expressions or variables.  | 
  | 
Internal representation of a subroutine call.  | 
  | 
Internal representation of a single comment.  | 
  | 
Internal representation of a block comment that is formed from multiple single-line comments.  | 
  | 
Internal representation of a conditional branching construct.  | 
  | 
Internal representation of an inline conditional assignment using a ternary operator.  | 
  | 
Internal representation of a   | 
  | 
Internal representation of a variable deallocation.  | 
  | 
Internal representation of an   | 
  | 
Internal representation of a FORALL statement or construct.  | 
  | 
Internal representation of an import.  | 
  | 
Internal representation of a Fortran interface block.  | 
  | 
Internal representation of a control flow node that has a traversable body property.  | 
  | 
Catch-all generic node for corner-cases.  | 
  | 
Internal representation of a control flow node without a body.  | 
  | 
Internal representation of a loop with induction variable and range.  | 
  | 
Internal representation of a masked array assignment (  | 
  | 
Internal representation of a multi-value conditional (eg.  | 
  | 
Base class for all node types in Loki's internal representation.  | 
  | 
Internal representation of a pointer nullification.  | 
  | 
Internal representation of a pragma.  | 
  | 
Internal representation of a block of code defined by two matching pragmas.  | 
  | 
Internal representation of a preprocessor directive.  | 
  | 
Internal representation of a procedure declaration.  | 
  | 
Generic node for unparsed source code sections  | 
  | 
Mix-in to attache a scope to an IR   | 
  | 
Internal representation of a single code region.  | 
  | 
Internal representation of Fortran statement function statements  | 
  | 
Internal representation of a derived type definition.  | 
  | 
Internal representation of a variable declaration.  | 
  | 
Internal representation of a while loop in source code.  | 
- class Node(source: Source | str | None = None, label: str | None = None)
 Bases:
objectBase class for all node types in Loki’s internal representation.
Provides the common functionality shared by all node types; specifically, this comprises functionality to update or rebuild a node, and source metadata.
- traversable
 The traversable fields of the Node; that is, fields walked over by a
Visitor. All arguments in__init__()whose name appear in this list are treated as traversable fields.
- Parameters:
 
- property children
 The traversable children of the node.
- clone(*args, **kwargs)
 Rebuild the node.
Constructs an identical copy of the node from when it was first created. Optionally, some or all of the arguments for it can be overwritten.
- Parameters:
 *args (optional) – The traversable arguments used to create the node. By default,
argsare used.**kwargs (optional) – The non-traversable arguments used to create the node, By default,
args_frozenare used.
- property args
 Arguments used to construct the Node.
- property args_frozen
 Arguments used to construct the Node that cannot be traversed.
- view()
 Pretty-print the node hierachy under this node.
- ir_graph(show_comments=False, show_expressions=False, linewidth=40, symgen=<class 'str'>)
 Get the IR graph to visualize the node hierachy under this node.
- property live_symbols
 Yield the list of live symbols at this node, i.e., variables that have been defined (potentially) prior to this point in the control flow graph.
This property is attached to the Node by
loki.analyse.analyse_dataflow.attach_dataflow_analysis()or when using theloki.analyse.analyse_dataflow.dataflow_analysis_attached()context manager.
- property defines_symbols
 Yield the list of symbols (potentially) defined by this node.
This property is attached to the Node by
loki.analyse.analyse_dataflow.attach_dataflow_analysis()or when using theloki.analyse.analyse_dataflow.dataflow_analysis_attached()context manager.
- property uses_symbols
 Yield the list of symbols used by this node before defining it.
This property is attached to the Node by
loki.analyse.analyse_dataflow.attach_dataflow_analysis()or when using theloki.analyse.analyse_dataflow.dataflow_analysis_attached()context manager.
- class InternalNode(body: Tuple[Node | Scope, ...] = (), source: Source | str | None = None, label: str | None = None)
 Bases:
Node,_InternalNodeInternal representation of a control flow node that has a traversable body property.
- Parameters:
 body (tuple) – The nodes that make up the body.
- classmethod pre_init(values)
 Ensure non-nested tuples for body.
- class LeafNode(source: Source | str | None = None, label: str | None = None)
 Bases:
NodeInternal representation of a control flow node without a body.
- class ScopedNode(parent: dataclasses.InitVar[object] | None = None)
 Bases:
ScopeMix-in to attache a scope to an IR
NodeAdditionally, this specializes the node’s
_update()and_rebuild()methods to make sure that an existing symbol table is carried over correctly.- property args
 Arguments used to construct the
ScopedNode, excluding the symbol table.
- class Section(body: Tuple[Node | Scope, ...] = (), source: Source | str | None = None, label: str | None = None)
 Bases:
InternalNode,_SectionBaseInternal representation of a single code region.
- append(node)
 Append the given node(s) to the section’s body.
- insert(pos, node)
 Insert the given node(s) into the section’s body at a specific position.
- class Associate(associations: Tuple[Tuple[Expression, Expression], ...], body: Tuple[Node | Scope, ...] = (), source: Source | str | None = None, label: str | None = None, parent: dataclasses.InitVar[object] = None)
 Bases:
ScopedNode,Section,_AssociateBaseInternal representation of a code region in which names are associated with expressions or variables.
- Parameters:
 body (tuple) – The associate’s body.
associations (dict or collections.OrderedDict) – The mapping of names to expressions or variables valid inside the associate’s body.
parent (
Scope, optional) – The parent scope in which the associate appearssymbol_attrs (
SymbolTable, optional) – An existing symbol table to use**kwargs (optional) – Other parameters that are passed on to the parent class constructor.
- property association_map
 An
collections.OrderedDictof associated expressions.
- property variables
 
- class Loop(variable: Expression, bounds: Expression, body: Tuple[Node | Scope, ...] = (), pragma: Tuple[Node, ...] | None = None, pragma_post: Tuple[Node, ...] | None = None, loop_label: Any | None = None, name: str | None = None, has_end_do: bool | None = True, source: Source | str | None = None, label: str | None = None)
 Bases:
InternalNode,_LoopBaseInternal representation of a loop with induction variable and range.
- Parameters:
 variable (
Scalar) – The induction variable of the loop.bounds (
LoopRange) – The range of the loop, defining the iteration space.body (tuple) – The loop body.
pragma (tuple of
Pragma, optional) – Pragma(s) that appear in front of the loop. By defaultPragmanodes appear as standalone nodes in the IR before theLoopnode. Only a bespoke context created bypragmas_attached()attaches them for convenience.pragma_post (tuple of
Pragma, optional) – Pragma(s) that appear after the loop. The same applies as for pragma.loop_label (str, optional) – The Fortran label for that loop. Importantly, this is an intrinsic Fortran feature and different from the statement label that can be attached to other nodes.
name (str, optional) – The Fortran construct name for that loop.
has_end_do (bool, optional) – In Fortran, loop blocks can be closed off by a
CONTINUEstatement (which we retain as anIntrinsicnode) and thereforeEND DOcan be omitted. For string reproducibility this parameter can be set False to indicate that this loop did not have anEND DOstatement in the original source.**kwargs (optional) – Other parameters that are passed on to the parent class constructor.
- class WhileLoop(condition: Expression | None, body: Tuple[Node | Scope, ...] = (), pragma: Node | None = None, pragma_post: Node | None = None, loop_label: Any | None = None, name: str | None = None, has_end_do: bool | None = True, source: Source | str | None = None, label: str | None = None)
 Bases:
InternalNode,_WhileLoopBaseInternal representation of a while loop in source code.
Importantly, this is different from a
DO(Fortran) orfor(C) loop, as we do not have a specified induction variable with explicit iteration range.- Parameters:
 condition (
pymbolic.primitives.Expression) – The condition evaluated before executing the loop body.body (tuple) – The loop body.
pragma (tuple of
Pragma, optional) – Pragma(s) that appear in front of the loop. By defaultPragmanodes appear as standalone nodes in the IR before theLoopnode. Only a bespoke context created bypragmas_attached()attaches them for convenience.pragma_post (tuple of
Pragma, optional) – Pragma(s) that appear after the loop. The same applies as for pragma.loop_label (str, optional) – The Fortran label for that loop. Importantly, this is an intrinsic Fortran feature and different from the statement label that can be attached to other nodes.
name (str, optional) – The Fortran construct name for that loop.
has_end_do (bool, optional) – In Fortran, loop blocks can be closed off by a
CONTINUEstatement (which we retain as anIntrinsicnode) and thereforeEND DOcan be omitted. For string reproducibility this parameter can be set False to indicate that this loop did not have anEND DOstatement in the original source.**kwargs (optional) – Other parameters that are passed on to the parent class constructor.
- class Conditional(condition: Expression, body: Tuple[Node | Scope, ...] = (), else_body: Tuple[Node, ...] | None = (), inline: bool = False, has_elseif: bool = False, name: str | None = None, source: Source | str | None = None, label: str | None = None)
 Bases:
InternalNode,_ConditionalBaseInternal representation of a conditional branching construct.
- Parameters:
 condition (
pymbolic.primitives.Expression) – The condition evaluated before executing the body.body (tuple) – The conditional’s body.
else_body (tuple) – The body of the else branch. Can be empty.
inline (bool, optional) – Flag that marks this conditional as inline, i.e., it s body consists only of a single statement that appeared immediately after the
IFstatement and it does not have anelse_body.has_elseif (bool, optional) – Flag that indicates that this conditional has an
ELSE IFbranch in the original source. In Loki’s IR these are represented as a chain ofConditionalbut for string reproducibility this flag can be provided to enable backends to reproduce the original appearance.name (str, optional) – The Fortran construct name for that conditional.
**kwargs (optional) – Other parameters that are passed on to the parent class constructor.
- classmethod pre_init(values)
 Ensure non-nested tuples for body.
- class PragmaRegion(body: Tuple[Node | Scope, ...] = (), pragma: Node = None, pragma_post: Node = None, source: Source | str | None = None, label: str | None = None)
 Bases:
InternalNode,_PragmaRegionBaseInternal representation of a block of code defined by two matching pragmas.
Generally, the pair of pragmas are assumed to be of the form
!$<keyword> <marker>and!$<keyword> end <marker>.This node type is injected into the IR within a context created by
pragma_regions_attached().- Parameters:
 
- append(node)
 
- insert(pos, node)
 Insert at given position
- prepend(node)
 
- class Interface(body: Tuple[Node | Scope, ...] = (), abstract: bool = False, spec: Expression | str | None = None, source: Source | str | None = None, label: str | None = None)
 Bases:
InternalNode,_InterfaceBaseInternal representation of a Fortran interface block.
- Parameters:
 body (tuple) – The body of the interface block, containing function and subroutine specifications or procedure statements
abstract (bool, optional) – Flag to indicate that this is an abstract interface
spec (str, optional) – A generic name, operator, assignment, or I/O specification
**kwargs (optional) – Other parameters that are passed on to the parent class constructor.
- property symbols
 The list of symbol names declared by this interface
- property symbol_map
 Map symbol name to symbol declared by this interface
- class Assignment(lhs: Expression, rhs: Expression, ptr: bool = False, comment: Node | None = None, source: Source | str | None = None, label: str | None = None)
 Bases:
LeafNode,_AssignmentBaseInternal representation of a variable assignment.
- Parameters:
 lhs (
pymbolic.primitives.Expression) – The left-hand side of the assignment.rhs (
pymbolic.primitives.Expression) – The right-hand side expression of the assignment.ptr (bool, optional) – Flag to indicate pointer assignment (
=>). Defaults toFalse.comment (
Comment, optional) – Inline comment that appears in-line after the right-hand side in the original source.**kwargs (optional) – Other parameters that are passed on to the parent class constructor.
- class ConditionalAssignment(lhs: Expression | None = None, condition: Expression | None = None, rhs: Expression | None = None, else_rhs: Expression | None = None, source: Source | str | None = None, label: str | None = None)
 Bases:
LeafNode,_ConditionalAssignmentBaseInternal representation of an inline conditional assignment using a ternary operator.
There is no Fortran-equivalent to this. In C, this takes the following form:
lhs = condition ? rhs : else_rhs;
- Parameters:
 lhs (
pymbolic.primitives.Expression) – The left-hand side of the assignment.condition (
pymbolic.primitives.Expression) – The condition of the ternary operator.rhs (
pymbolic.primitives.Expression) – The right-hand side expression of the assignment that is assigned when the condition applies.else_rhs (
pymbolic.primitives.Expression) – The right-hand side expression of the assignment that is assigned when the condition does not apply.**kwargs (optional) – Other parameters that are passed on to the parent class constructor.
- class CallStatement(name: Expression, arguments: Tuple[Expression, ...] | None = None, kwarguments: Tuple[Tuple[str, Expression], ...] | None = None, pragma: Tuple[Node, ...] | None = None, not_active: bool | None = None, chevron: Tuple[Expression, ...] | None = None, source: Source | str | None = None, label: str | None = None)
 Bases:
LeafNode,_CallStatementBaseInternal representation of a subroutine call.
- Parameters:
 name (
pymbolic.primitives.Expression) – The name of the subroutine to call.arguments (tuple of
pymbolic.primitives.Expression) – The list of positional arguments.kwarguments (tuple of tuple) – The list of keyword arguments, provided as pairs of (name, value).
pragma (tuple of
Pragma, optional) – Pragma(s) that appear in front of the statement. By defaultPragmanodes appear as standalone nodes in the IR before. Only a bespoke context created bypragmas_attached()attaches them for convenience.not_active (bool, optional) – Flag to indicate that this call has explicitly been marked as inactive for the purpose of processing call trees (Default: None)
chevron (tuple of
pymbolic.primitives.Expression) – Launch configuration for CUDA Fortran Kernels. See [CUDA Fortran programming guide](https://docs.nvidia.com/hpc-sdk/compilers/cuda-fortran-prog-guide/).**kwargs (optional) – Other parameters that are passed on to the parent class constructor.
- property procedure_type
 The
ProcedureTypeof theSubroutineobject of the called routineFor a
CallStatementnode calledcall, this is shorthand forcall.name.type.dtype.If the procedure type object has been linked up with the corresponding
Subroutineobject, then it is available viacall.procedure_type.procedure.- Returns:
 The type of the called procedure. If the symbol type of the called routine has not been identified correctly, this may yield
BasicType.DEFERRED.- Return type:
 
- property routine
 The
Subroutineobject of the called routineShorthand for
call.name.type.dtype.procedure- Returns:
 If the
ProcedureTypeobject of theProcedureSymbolinnameis linked up to the target routine, this returns the correspondingSubroutineobject, otherwise None.- Return type:
 
- arg_iter()
 Iterator that maps argument definitions in the target
Subroutineto arguments and keyword arguments in the call.- Returns:
 An iterator that traverses the mapping
(arg name, call arg)for all positional and then keyword arguments.- Return type:
 iterator
- property arg_map
 A full map of all qualified argument matches from arguments and keyword arguments.
- check_kwarguments_order()
 Check whether kwarguments are correctly ordered in respect to the arguments (
self.routine.arguments).
- sort_kwarguments()
 Sort and update the kwarguments according to the order of the arguments (
self.routine.arguments).
- convert_kwargs_to_args()
 Convert all kwarguments to arguments and update the call accordingly.
- class Allocation(variables: Tuple[Expression, ...], data_source: Expression | None = None, status_var: Expression | None = None, source: Source | str | None = None, label: str | None = None)
 Bases:
LeafNode,_AllocationBaseInternal representation of a variable allocation.
- Parameters:
 variables (tuple of
pymbolic.primitives.Expression) – The list of variables that are allocated.data_source (
pymbolic.primitives.Expressionor str) – Fortran’sSOURCEallocation option.status_var (
pymbolic.primitives.Expression) – Fortran’sSTATallocation option.**kwargs (optional) – Other parameters that are passed on to the parent class constructor.
- class Deallocation(variables: Tuple[Expression, ...], status_var: Expression | None = None, source: Source | str | None = None, label: str | None = None)
 Bases:
LeafNode,_DeallocationBaseInternal representation of a variable deallocation.
- Parameters:
 variables (tuple of
pymbolic.primitives.Expression) – The list of variables that are deallocated.status_var (
pymbolic.primitives.Expression) – Fortran’sSTATdeallocation option.**kwargs (optional) – Other parameters that are passed on to the parent class constructor.
- class Nullify(variables: Tuple[Expression, ...], source: Source | str | None = None, label: str | None = None)
 Bases:
LeafNode,_NullifyBaseInternal representation of a pointer nullification.
- Parameters:
 variables (tuple of
pymbolic.primitives.Expression) – The list of pointer variables that are nullified.**kwargs (optional) – Other parameters that are passed on to the parent class constructor.
- class Comment(text: str, source: Source | str | None = None, label: str | None = None)
 Bases:
LeafNode,_CommentBaseInternal representation of a single comment.
- Parameters:
 text (str, optional) – The content of the comment. Can be empty to represent empty lines in the original source.
**kwargs (optional) – Other parameters that are passed on to the parent class constructor.
- class CommentBlock(comments: Tuple[Node, ...], source: Source | str | None = None, label: str | None = None)
 Bases:
LeafNode,_CommentBlockBaseInternal representation of a block comment that is formed from multiple single-line comments.
- Parameters:
 comments (tuple of
Comment) – The individual (subsequent) comments that make up the block.**kwargs (optional) – Other parameters that are passed on to the parent class constructor.
- property text
 The combined string of all comments in this block
- class Pragma(keyword: str, content: str | None = None, source: Source | str | None = None, label: str | None = None)
 Bases:
LeafNode,_PragmaBaseInternal representation of a pragma.
Pragmas are assumed to appear in Fortran source code in the form of !$<keyword> <content>.
- class PreprocessorDirective(text: str = None, source: Source | str | None = None, label: str | None = None)
 Bases:
LeafNode,_PreprocessorDirectiveBaseInternal representation of a preprocessor directive.
Preprocessor directives are typically assumed to start at the beginning of a line with the letter
#in the original source.- Parameters:
 text (str, optional) – The content of the directive.
**kwargs (optional) – Other parameters that are passed on to the parent class constructor.
- class Import(module: str | None, symbols: Tuple[Expression, ...] = (), nature: str | None = None, c_import: bool = False, f_include: bool = False, f_import: bool = False, rename_list: Tuple[Any, ...] | None = None, source: Source | str | None = None, label: str | None = None)
 Bases:
LeafNode,_ImportBaseInternal representation of an import.
- Parameters:
 module (str) – The name of the module or header file to import from.
symbols (tuple of
ExpressionorDataType, optional) – The list of names imported. Can be empty when importing all.nature (str, optional) – The module nature (
INTRINSICorNON_INTRINSIC)c_import (bool, optional) – Flag to indicate that this is a C-style include. Defaults to False.
f_include (bool, optional) – Flag to indicate that this is a preprocessor-style include in Fortran source code.
f_import (bool, optional) – Flag to indicate that this is a Fortran
IMPORT.rename_list (tuple of tuples (str,
Expression), optional) – Rename list with pairs of (use name, local name) entries**kwargs (optional) – Other parameters that are passed on to the parent class constructor.
- class VariableDeclaration(symbols: Tuple[Expression, ...], dimensions: Tuple[Expression, ...] | None = None, comment: Node | None = None, pragma: Node | None = None, source: Source | str | None = None, label: str | None = None)
 Bases:
LeafNode,_VariableDeclarationBaseInternal representation of a variable declaration.
- Parameters:
 symbols (tuple of
pymbolic.primitives.Expression) – The list of variables declared by this declaration.dimensions (tuple of
pymbolic.primitives.Expression, optional) – The declared allocation size if given as part of the declaration attributes.comment (
Comment, optional) – Inline comment that appears in-line after the declaration in the original source.pragma (tuple of
Pragma, optional) – Pragma(s) that appear before the declaration. By defaultPragmanodes appear as standalone nodes in the IR. Only a bespoke context created bypragmas_attached()attaches them for convenience.**kwargs (optional) – Other parameters that are passed on to the parent class constructor.
- class ProcedureDeclaration(symbols: Tuple[Expression, ...], interface: Expression | DataType | None = None, external: bool = False, module: bool = False, generic: bool = False, final: bool = False, comment: Node | None = None, pragma: Tuple[Node, ...] | None = None, source: Source | str | None = None, label: str | None = None)
 Bases:
LeafNode,_ProcedureDeclarationBaseInternal representation of a procedure declaration.
- Parameters:
 symbols (tuple of
pymbolic.primitives.Expression) – The list of procedure symbols declared by this declaration.interface (
pymbolic.primitives.ExpressionorDataType, optional) – The procedure interface of the declared procedure entity names.external (bool, optional) – This is a Fortran
EXTERNALdeclaration.module (bool, optional) – This is a Fortran
MODULE PROCEDUREdeclaration in an interface (i.e. includes the keywordMODULE)generic (bool, optional) – This is a generic binding procedure statement in a derived type.
final (bool, optional) – This is a declaration to mark a subroutine for clean-up of a derived type.
comment (
Comment, optional) – Inline comment that appears in-line after the declaration in the original source.pragma (tuple of
Pragma, optional) – Pragma(s) that appear before the declaration. By defaultPragmanodes appear as standalone nodes in the IR. Only a bespoke context created bypragmas_attached()attaches them for convenience.**kwargs (optional) – Other parameters that are passed on to the parent class constructor.
- class DataDeclaration(variable: Any, values: Tuple[Expression, ...], source: Source | str | None = None, label: str | None = None)
 Bases:
LeafNode,_DataDeclarationBaseInternal representation of a
DATAdeclaration for explicit array value lists.- Parameters:
 variable (
pymbolic.primitives.Expression) – The left-hand side of the data declaration.values (tuple of
pymbolic.primitives.Expression) – The right-hand side of the data declaration.**kwargs (optional) – Other parameters that are passed on to the parent class constructor.
- class StatementFunction(variable: Expression, arguments: Tuple[Expression, ...], rhs: Expression, return_type: SymbolAttributes, source: Source | str | None = None, label: str | None = None)
 Bases:
LeafNode,_StatementFunctionBaseInternal representation of Fortran statement function statements
- Parameters:
 variable (
pymbolic.primitives.Expression) – The name of the statement functionarguments (tuple of
pymbolic.primitives.Expression) – The list of dummy argumentsrhs (
pymbolic.primitives.Expression) – The expression defining the statement functionreturn_type (
SymbolAttributes) – The return type of the statement function
- property name
 
- property is_function
 
- class TypeDef(name: str | None = None, body: Tuple[Node | Scope, ...] = (), abstract: bool = False, extends: str | None = None, bind_c: bool = False, private: bool = False, public: bool = False, source: Source | str | None = None, label: str | None = None, parent: dataclasses.InitVar[object] = None)
 Bases:
ScopedNode,InternalNode,_TypeDefBaseInternal representation of a derived type definition.
Similar to
Sourcefile,Module, andSubroutine, it forms its own scope for symbols and types. This is required to instantiateTypedSymbolinstances in declarations, imports etc. without having them show up in the enclosing scope.- Parameters:
 name (str) – The name of the type.
body (tuple) – The body of the type definition.
abstract (bool, optional) – Flag to indicate that this is an abstract type definition.
extends (str, optional) – The parent type name
bind_c (bool, optional) – Flag to indicate that this contains a
BIND(C)attribute.private (bool, optional) – Flag to indicate that this has been declared explicitly as
PRIVATEpublic (bool, optional) – Flag to indicate that this has been declared explicitly as
PUBLICparent (
Scope, optional) – The parent scope in which the type definition appearssymbol_attrs (
SymbolTable, optional) – An existing symbol table to use**kwargs (optional) – Other parameters that are passed on to the parent class constructor.
- property ir
 
- property parent_type
 
- property declarations
 
- property comments
 
- property variables
 
- property variable_map
 
- property imported_symbols
 Return the symbols imported in this typedef
- property imported_symbol_map
 Map of imported symbol names to objects
- property interface_symbols
 Return the list of symbols declared via interfaces in this unit
This returns always an empty tuple since there are no interface declarations allowed in typedefs.
- property dtype
 Return the
DerivedTyperepresenting this type
- clone(**kwargs)
 Create a copy of the scope object with the option to override individual parameters
Note that this will also create a copy of the symbol table via
SymbolTable.cloneand force rescoping of variables, unlesssymbol_attrsandrescope_symbolsare explicitly specified.- Parameters:
 **kwargs (Any parameter from the constructor)
- Returns:
 The cloned scope object
- Return type:
 type(self)
- class MultiConditional(expr: Expression, values: Tuple[Any, ...], bodies: Tuple[Any, ...], else_body: Tuple[Node, ...], name: str | None = None, source: Source | str | None = None, label: str | None = None)
 Bases:
LeafNode,_MultiConditionalBaseInternal representation of a multi-value conditional (eg.
SELECT).- Parameters:
 expr (
pymbolic.primitives.Expression) – The expression that is evaluated to choose the appropriate case.values (tuple of tuple of
pymbolic.primitives.Expression) – The list of values, a tuple for each case.bodies (tuple of tuple) – The corresponding bodies for each case.
else_body (tuple) – The body for the
DEFAULTcase.name (str, optional) – The construct-name of the multi conditional in the original source.
**kwargs (optional) – Other parameters that are passed on to the parent class constructor.
- class Forall(named_bounds: Tuple[Tuple[Expression, Expression], ...], body: Tuple[Node | Scope, ...] = (), mask: Expression | None = None, name: str | None = None, inline: bool = False, source: Source | str | None = None, label: str | None = None)
 Bases:
InternalNode,_ForallBaseInternal representation of a FORALL statement or construct.
- Parameters:
 named_bounds (tuple of pairs (<variable>, <range>) of type
pymbolic.primitives.Expression) – The collection of named variables with bounds (ranges).body (tuple of
Node) – The collection of assignment statements, nested FORALLs, and/or comments.mask (
pymbolic.primitives.Expression, optional) – The condition that define the mask.name (str, optional) – The name of the multi-line FORALL construct in the original source.
inline (bool, optional) – Flag to indicate a single-line FORALL statement.
**kwargs (optional) – Other parameters that are passed on to the parent class constructor.
- class MaskedStatement(conditions: Tuple[Expression, ...], bodies: Tuple[Tuple[Node, ...], ...], default: Tuple[Node, ...] | None = None, inline: bool = False, source: Source | str | None = None, label: str | None = None)
 Bases:
LeafNode,_MaskedStatementBaseInternal representation of a masked array assignment (
WHEREclause).- Parameters:
 conditions (tuple of
pymbolic.primitives.Expression) – The conditions that define the maskbodies (tuple of tuple of
Node) – The conditional assignment statements corresponding to each condition.default (tuple of
Node, optional) – The assignment statements to be executed for array entries not captured by the mask (ELSEWHEREstatement).inline (bool, optional) – Flag to indicate this is a one-line where-stmt
**kwargs (optional) – Other parameters that are passed on to the parent class constructor.
- class Intrinsic(text: str, source: Source | str | None = None, label: str | None = None)
 Bases:
LeafNode,_IntrinsicBaseCatch-all generic node for corner-cases.
This is provided as a fallback for any statements that do not have an appropriate representation in the IR. These can either be language features for which support was not yet added, or statements that are not relevant in Loki’s scope of applications. This node retains the text of the statement in the original source as-is.
- Parameters:
 text (str) – The statement as a string.
**kwargs (optional) – Other parameters that are passed on to the parent class constructor.
- class Enumeration(symbols: Tuple[Expression, ...], source: Source | str | None = None, label: str | None = None)
 Bases:
LeafNode,_EnumerationBaseInternal representation of an
ENUMThe constants declared by this are represented as
Variableobjects with their value (if specified explicitly) stored as theinitialproperty in the symbol’s type.- Parameters:
 symbols (list of
Expression) – The named constants declared in this enum**kwargs (optional) – Other parameters that are passed on to the parent class constructor.
- class RawSource(text: str, source: Source | str | None = None, label: str | None = None)
 Bases:
LeafNode,_RawSourceBaseGeneric node for unparsed source code sections
This is used by the
REGEXfrontend to store unparsed code sections in the IR. Currently, they don’t serve any other purpose than making sure the entire string content of the original Fortran source is retained.- Parameters:
 text (str) – The source code as a string.
**kwargs (optional) – Other parameters that are passed on to the parent class constructor.