loki.expression.mappers
Mappers for traversing and transforming the Expression tree.
Classes
  | 
A Pymbolic expression mapper (i.e., a visitor for the expression tree) that determines the scope of   | 
A Pymbolic expression mapper (i.e., a visitor for the expression tree) that rebuilds an expression unchanged but with the scope for every   | 
|
  | 
A visitor for expressions that returns the combined result of a specified callback function.  | 
A visitor for an expression that determines the dimensions of the expression.  | 
|
  | 
A mapper for the expression tree that looks for entries specified by a query.  | 
  | 
A visitor to traverse and transform an expression tree  | 
  | 
A class derived from the default   | 
  | 
A mapper that traverses the expression tree and calls   | 
  | 
A Pymbolic expression mapper (i.e., a visitor for the expression tree) that defines on-the-fly handlers from a given substitution map.  | 
- class LokiStringifyMapper(*args, **kwargs)
 Bases:
StringifyMapperA class derived from the default
StringifyMapperthat adds mappings for nodes of the expression tree that we added ourselves.This is the default pretty printer for nodes in the expression tree.
- rec_with_force_parens_around(expr, *args, **kwargs)
 
- map_logic_literal(expr, enclosing_prec, *args, **kwargs)
 
- map_float_literal(expr, enclosing_prec, *args, **kwargs)
 
- map_int_literal(expr, enclosing_prec, *args, **kwargs)
 
- map_string_literal(expr, enclosing_prec, *args, **kwargs)
 
- map_intrinsic_literal(expr, enclosing_prec, *args, **kwargs)
 
- map_variable_symbol(expr, enclosing_prec, *args, **kwargs)
 
- map_deferred_type_symbol(expr, enclosing_prec, *args, **kwargs)
 
- map_procedure_symbol(expr, enclosing_prec, *args, **kwargs)
 
- map_meta_symbol(expr, enclosing_prec, *args, **kwargs)
 
- map_scalar(expr, enclosing_prec, *args, **kwargs)
 
- map_array(expr, enclosing_prec, *args, **kwargs)
 
- map_inline_call(expr, enclosing_prec, *args, **kwargs)
 
- map_cast(expr, enclosing_prec, *args, **kwargs)
 
- map_range(expr, enclosing_prec, *args, **kwargs)
 
- map_range_index(expr, enclosing_prec, *args, **kwargs)
 
- map_loop_range(expr, enclosing_prec, *args, **kwargs)
 
- map_sum(expr, enclosing_prec, *args, **kwargs)
 Since substraction and unary minus are mapped to multiplication with (-1), we are here looking for such cases and determine the matching operator for the output.
- map_product(expr, enclosing_prec, *args, **kwargs)
 
- map_quotient(expr, enclosing_prec, *args, **kwargs)
 
- map_parenthesised_add(expr, enclosing_prec, *args, **kwargs)
 
- map_parenthesised_mul(expr, enclosing_prec, *args, **kwargs)
 
- map_parenthesised_div(expr, enclosing_prec, *args, **kwargs)
 
- map_parenthesised_pow(expr, enclosing_prec, *args, **kwargs)
 
- map_string_concat(expr, enclosing_prec, *args, **kwargs)
 
- map_literal_list(expr, enclosing_prec, *args, **kwargs)
 
- map_inline_do(expr, enclosing_prec, *args, **kwargs)
 
- map_array_subscript(expr, enclosing_prec, *args, **kwargs)
 
- map_string_subscript(expr, enclosing_prec, *args, **kwargs)
 
- map_c_reference(expr, enclosing_prec, *args, **kwargs)
 
- map_c_dereference(expr, enclosing_prec, *args, **kwargs)
 
- class ExpressionRetriever(query, recurse_query=None, **kwargs)
 Bases:
LokiWalkMapperA mapper for the expression tree that looks for entries specified by a query.
- Parameters:
 query – Function handle that is given each visited expression node and yields True or False depending on whether that expression should be included into the result.
recurse_query (optional) – Optional function handle to which each visited expression node is given and that should return True or False depending on whether that expression node and its children should be visited.
- post_visit(expr, *args, **kwargs)
 
- reset()
 
- retrieve(expr, *args, **kwargs)
 
- class ExpressionDimensionsMapper
 Bases:
MapperA visitor for an expression that determines the dimensions of the expression.
- map_algebraic_leaf(expr, *args, **kwargs)
 
- map_logic_literal(expr, *args, **kwargs)
 
- map_float_literal(expr, *args, **kwargs)
 
- map_int_literal(expr, *args, **kwargs)
 
- map_string_literal(expr, *args, **kwargs)
 
- map_intrinsic_literal(expr, *args, **kwargs)
 
- map_variable_symbol(expr, *args, **kwargs)
 
- map_scalar(expr, *args, **kwargs)
 
- map_deferred_type_symbol(expr, *args, **kwargs)
 
- map_array(expr, *args, **kwargs)
 
- map_array_subscript(expr, *args, **kwargs)
 
- map_string_subscript(expr, *args, **kwargs)
 
- map_range_index(expr, *args, **kwargs)
 
- map_sum(expr, *args, **kwargs)
 
- map_product(expr, *args, **kwargs)
 
- map_inline_do(expr, *args, **kwargs)
 
- class ExpressionCallbackMapper(callback, combine)
 Bases:
CombineMapperA visitor for expressions that returns the combined result of a specified callback function.
- retrieve(expr, *args, **kwargs)
 
- map_constant(expr, *args, **kwargs)
 
- map_logic_literal(expr, *args, **kwargs)
 
- map_string_literal(expr, *args, **kwargs)
 
- map_intrinsic_literal(expr, *args, **kwargs)
 
- map_int_literal(expr, *args, **kwargs)
 
- map_float_literal(expr, *args, **kwargs)
 
- map_variable_symbol(expr, *args, **kwargs)
 
- map_deferred_type_symbol(expr, *args, **kwargs)
 
- map_meta_symbol(expr, *args, **kwargs)
 
- map_scalar(expr, *args, **kwargs)
 
- map_array(expr, *args, **kwargs)
 
- map_array_subscript(expr, *args, **kwargs)
 
- map_string_subscript(expr, *args, **kwargs)
 
- map_inline_call(expr, *args, **kwargs)
 
- map_cast(expr, *args, **kwargs)
 
- map_range(expr, *args, **kwargs)
 
- map_range_index(expr, *args, **kwargs)
 
- map_loop_range(expr, *args, **kwargs)
 
- map_parenthesised_add(expr, *args, **kwargs)
 
- map_parenthesised_mul(expr, *args, **kwargs)
 
- map_parenthesised_div(expr, *args, **kwargs)
 
- map_parenthesised_pow(expr, *args, **kwargs)
 
- map_string_concat(expr, *args, **kwargs)
 
- map_literal_list(expr, *args, **kwargs)
 
- map_inline_do(expr, *args, **kwargs)
 
- map_procedure_symbol(expr, *args, **kwargs)
 
- class SubstituteExpressionsMapper(expr_map, invalidate_source=True)
 Bases:
LokiIdentityMapperA Pymbolic expression mapper (i.e., a visitor for the expression tree) that defines on-the-fly handlers from a given substitution map.
It returns a copy of the expression tree with expressions substituted according to the given
expr_map. If an expression node is encountered that is found inexpr_map, it is replaced with the corresponding expression from the map. For any other nodes, traversal is performed viaLokiIdentityMapper.Note
No recursion is performed on substituted expression nodes, they are taken as-is from the map. Otherwise substitutions that involve the original node would result in infinite recursion - for example a replacement that wraps a variable in an inline call:
my_var -> wrapped_in_call(my_var).When there is a need to recursively apply the mapping, the mapping needs to be applied to itself first. A potential use-case is renaming of variables, which may appear as the name of an array subscript as well as in the
dimensionsattribute of the same expression:SOME_ARR(SOME_ARR > SOME_VAL). The mapping can be applied to itself using the utility functionrecursive_expression_map_update.- Parameters:
 
- map_from_expr_map(expr, *args, **kwargs)
 Replace an expr with its substitution, if found in the
expr_map, otherwise continue tree traversal
- class LokiIdentityMapper(invalidate_source=True)
 Bases:
IdentityMapperA visitor to traverse and transform an expression tree
This can serve as basis for any transformation mappers that apply changes to the expression tree. Expression nodes that are unchanged are returned as is.
- Parameters:
 invalidate_source (bool, optional) – By default the
sourceproperty of nodes is discarded when rebuilding the node, setting this to False allows to retain that information
- rec(expr, *args, **kwargs)
 Dispatch expr to its corresponding mapper method. Pass on
*argsand**kwargsunmodified.This method is intended as the top-level dispatch entry point and may be overridden by subclasses to present a different/more convenient interface.
rec()on the other hand is intended as the recursive dispatch method to be used to recurse within mapper method implementations.
- map_algebraic_leaf(expr, *args, **kwargs)
 
- map_logic_literal(expr, *args, **kwargs)
 
- map_string_literal(expr, *args, **kwargs)
 
- map_intrinsic_literal(expr, *args, **kwargs)
 
- map_int_literal(expr, *args, **kwargs)
 
- map_float_literal(expr, *args, **kwargs)
 
- map_variable_symbol(expr, *args, **kwargs)
 
- map_deferred_type_symbol(expr, *args, **kwargs)
 
- map_procedure_symbol(expr, *args, **kwargs)
 
- map_meta_symbol(expr, *args, **kwargs)
 
- map_scalar(expr, *args, **kwargs)
 
- map_array(expr, *args, **kwargs)
 
- map_array_subscript(expr, *args, **kwargs)
 
- map_string_subscript(expr, *args, **kwargs)
 
- map_inline_call(expr, *args, **kwargs)
 
- map_cast(expr, *args, **kwargs)
 
- map_sum(expr, *args, **kwargs)
 
- map_quotient(expr, *args, **kwargs)
 
- map_parenthesised_add(expr, *args, **kwargs)
 
- map_product(expr, *args, **kwargs)
 
- map_parenthesised_mul(expr, *args, **kwargs)
 
- map_parenthesised_div(expr, *args, **kwargs)
 
- map_parenthesised_pow(expr, *args, **kwargs)
 
- map_string_concat(expr, *args, **kwargs)
 
- map_range(expr, *args, **kwargs)
 
- map_range_index(expr, *args, **kwargs)
 
- map_loop_range(expr, *args, **kwargs)
 
- map_literal_list(expr, *args, **kwargs)
 
- map_inline_do(expr, *args, **kwargs)
 
- map_c_reference(expr, *args, **kwargs)
 
- map_c_dereference(expr, *args, **kwargs)
 
- class AttachScopesMapper(fail=False)
 Bases:
LokiIdentityMapperA Pymbolic expression mapper (i.e., a visitor for the expression tree) that determines the scope of
TypedSymbolnodes and updates itsscopepointer accordingly.- Parameters:
 fail (bool, optional) – If True, the mapper raises
RuntimeErrorif the scope for a symbol can not be found.
- map_variable_symbol(expr, *args, **kwargs)
 Handler for
VariableSymbolThis updates the symbol’s scope via
_update_symbol_scope()and then calls the parent class handler routineNote: this may be a different handler as attaching the scope and therefore type may change a symbol’s type, e.g. from
DeferredTypeSymboltoScalar
- map_deferred_type_symbol(expr, *args, **kwargs)
 Handler for
VariableSymbolThis updates the symbol’s scope via
_update_symbol_scope()and then calls the parent class handler routineNote: this may be a different handler as attaching the scope and therefore type may change a symbol’s type, e.g. from
DeferredTypeSymboltoScalar
- map_procedure_symbol(expr, *args, **kwargs)
 Handler for
VariableSymbolThis updates the symbol’s scope via
_update_symbol_scope()and then calls the parent class handler routineNote: this may be a different handler as attaching the scope and therefore type may change a symbol’s type, e.g. from
DeferredTypeSymboltoScalar
- class DetachScopesMapper
 Bases:
LokiIdentityMapperA Pymbolic expression mapper (i.e., a visitor for the expression tree) that rebuilds an expression unchanged but with the scope for every
TypedSymboldetached.This will ensure that type information is stored locally on the object itself, which is useful when storing information for inter-procedural analysis passes.
- map_variable_symbol(expr, *args, **kwargs)
 
- map_deferred_type_symbol(expr, *args, **kwargs)
 
- map_procedure_symbol(expr, *args, **kwargs)