loki.batch.item
Functions
|
Map of imported symbol names to objects in |
Classes
|
Item class representing an external dependency that cannot be resolved |
|
Item class representing a |
|
Item class representing a |
|
Base class of a work item in the |
|
Item class representing a |
|
Item class representing a Fortran procedure binding |
|
Item class representing a |
|
Item class representing a |
- get_all_import_map(scope)
Map of imported symbol names to objects in
scopeand any parent scopesFor imports that shadow imports in a parent scope, the innermost import takes precedence.
- Parameters:
scope (
Scope) – The scope for which the import map is built- Returns:
Mapping of symbol name to symbol object
- Return type:
- class Item(name, source, config=None)
Bases:
ItemConfigBase class of a work item in the
Schedulergraph, to which aTransformationcan be applied.The
Schedulerbuilds a dependency graph consisting ofIteminstances as nodes.The
nameof aItemrefers to the corresponding routine’s, interface’s or type’s name using a fully-qualified name in the format<scope_name>#<local_name>. The<scope_name>corresponds to a Fortran module that, e.g., a subroutine is declared in, or can be empty if the subroutine is not enclosed in a module (i.e. exists in the global scope). This is to enable use of routines with the same name that are declared in different modules. The corresponding parts of the name can be accessed viascope_nameandlocal_name.For type-bound procedures, the
local_nameshould take the format<type_name>%<binding_name>. This may also span across multiple derived types, e.g., to allow calls to type bound procedures of a derived type variable that in turn is a member of another derived type, e.g.,<type_name>%<member_name>%<binding_name>. SeeProcedureBindingItem`for more details.Relation to Loki IR
Every
Itemcorresponds to a specific node in Loki’s internal representation.For most cases these IR nodes are scopes:
FileItem: corresponding toSourcefileModuleItem: corresponding toModuleProcedureItem: corresponding toSubroutine
The remaining cases are items corresponding to IR nodes that constitute some form of intermediate dependency, which are required to resolve the indirection to the scope node:
InterfaceItem: corresponding toInterfaceTypeDefItem: corresponding toTypeDefProcedureBindingItem: corresponding to theProcedureSymbolthat is declared in aProcedureDeclarationin a derived type.
The IR node corresponding to an item can be obtain via the
irproperty.Definitions and dependencies of items
Each item exhibits two key properties:
definitions: A list of all IR nodes that constitute symbols/names
that are made available by an item. For a
FileItem, this typically consists of all modules and procedures in that sourcefile, and for aModuleItemit comprises of procedures, interfaces, global variables and derived type definitions. *dependencies: A list of all IR nodes that introduce a dependency on other items, e.g.,CallStatementorImport.Item config
Every item has a bespoke configuration derived from the default values in
SchedulerConfig. The schema and accessible attributes are defined in the base classItemConfig.- _parser_class
The parser classes that need to be active during a parse with the
REGEXfrontend to create the IR nodes corresponding to the item type. This class attribute is specified by every class implementing a specific item type.- Type:
tuple of
RegexParserClassor None
- _defines_items
The types of items that definitions of the item may create. This class attribute is specified by every class implementing a specific item type.
- Type:
tuple of subclasses of
Item
- _depends_class
The parser classes that need to be active during a parse with the
REGEXfrontend to create the IR nodes that constitute dependencies in this item type. This class attribute is specified by every class implementing a specific item type.- Type:
tuple of
RegexParserClassor None
- source
The sourcefile object in which the IR node corresponding to this item is defined. The
irproperty will look-up and yield the IR node in this source file.- Type:
- trafo_data
Container object for analysis passes to store analysis data. This can be used in subsequent transformation passes.
- Type:
any:dict
- plan_data
Container object for plan dry-run passes to store information about additional and removed dependencies.
- Type:
any:dict
- param name:
Name to identify items in the schedulers graph
- type name:
str
- param source:
The underlying source file that contains the associated item
- type source:
- param config:
Dict of item-specific config options, see
ItemConfig- type config:
dict
- property definitions
Return a tuple of the IR nodes this item defines
By default, this returns an empty tuple and is overwritten by derived classes.
- property dependencies
Return a tuple of IR nodes that constitute dependencies for this item
This calls
concretize_dependencies()to trigger a further parse with theREGEXfrontend, including the_depends_classof the item. The list of actual dependencies is defined via_dependencies(), which is overwritten by derived classes.
- property scope_ir
Return the nearest
ScopeIR node that this item either defines or is embedded into.
- property transformation_ir
Return the nearest
ScopeIR node that corresponds to a suitable transformation entry point, i.e., is aProgramUnitorSourcefile.For most but not all item types this is equivalent to
scope_ir.
- concretize_definitions()
Trigger a re-parse of the source file corresponding to the current item’s scope
This uses
_parser_classes_from_item_type_names()to determine allRegexParserClassthat the item’s definitions require to be parsed. An item’s definition classes are listed in_defines_items.
- concretize_dependencies()
Trigger a re-parse of the source file corresponding to the current item’s scope
This uses
_depends_classto determine allRegexParserClassthat the are require to be parsed to find the item’s dependencies.
- create_definition_items(item_factory, config=None, only=None)
Create the
Itemnodes corresponding to the definitions in the current item- Parameters:
item_factory (
ItemFactory) – TheItemFactoryto use when creating the itemsconfig (
SchedulerConfig, optional) – The scheduler config to use when instantiating new itemsonly (list of
Itemclasses) – Filter the generated items to include only those provided in the list
- Returns:
The list of
Itemnodes- Return type:
- create_dependency_items(item_factory, config=None, only=None)
Create the
Itemnodes corresponding to the dependencies of the current item- Parameters:
item_factory (
ItemFactory) – TheItemFactoryto use when creating the itemsconfig (
SchedulerConfig, optional) – The scheduler config to use when instantiating new itemsonly (list of
Itemclasses) – Filter the generated items to include only those provided in the list
- Returns:
The list of
Itemnodes- Return type:
- property scope_name
The name of this item’s scope
- property local_name
The item name without the scope
- property scope
IR object that is the enclosing scope of this
ItemNote that this property is cached, so that updating the name of an associated
Module(eg. via theDependencyTransformation) may not break the association with thisItem.- Return type:
Moduleor NoneType
- property calls
Return a tuple of local names of subroutines that are called
This will replace the object name by the type name for calls to typebound procedures, but not resolve potential renaming via imports.
- property targets
Set of “active” child dependencies that are part of the transformation traversal.
This includes all child dependencies of an item that will be traversed when applying a
Transformation, after tree pruning rules are applied but without taking item filters into account.This means, all items excluded via
blockordisablelists in theSchedulerConfigare not listed here. However, this will include items in theignorelist, which are not processed but are treated as if they were.
- property targets_and_blocked_targets
Set of all child dependencies, including those that are not part of the traversal, but ignoring
disableddependencies.This includes all child dependencies that are returned by
Item.targetsas well as any that are excluded via theItemConfig.blocklist.This means, only items excluded via
disablelists in theSchedulerConfigare not listed here. However, it will include items in theignoreandblocklist.
- property path
The filepath of the associated source file
- class FileItem(name, source, config=None)
Bases:
ItemItem class representing a
SourcefileThe name of this item is typically the file path.
A
FileItemdoes not have any direct dependencies. A dependency filegraph can be generated by theSGraphclass using dependencies of items defined by nodes inside the file.A
FileItemdefinesModuleItemandProcedureItemnodes.- property definitions
Return the list of definitions in this source file
- property ir
Return the
Sourcefileassociated with this item
- create_definition_items(item_factory, config=None, only=None)
Create the
Itemnodes corresponding to the definitions in the fileThis overwrites the corresponding method in the base class to enable instantiating the top-level scopes in the file item without them being available in the
ItemFactory.item_cache, yet.- Parameters:
item_factory (
ItemFactory) – TheItemFactoryto use when creating the itemsconfig (
SchedulerConfig, optional) – The scheduler config to use when instantiating new itemsonly (list of
Itemclasses) – Filter the generated items to include only those provided in the list
- Returns:
The list of
Itemnodes- Return type:
- class ModuleItem(name, source, config=None)
Bases:
ItemItem class representing a
ModuleThe name of this item is the module’s name, meaning scope name, local name and name are all equivalent.
A
ModuleItemdefinesProcedureItem,InterfaceItemandTypeDefItem. Note that global variable imports, which are the fourth kind of symbols that can be imported from a module into other scopes are not represented by bespoke items.A
ModuleItemcan only have a dependency on anotherModuleItemvia aImportstatement.- property definitions
Return the list of definitions in this module, filtering out global variables.
- property local_name
Return the module’s name
- class ProcedureItem(name, source, config=None)
Bases:
ItemItem class representing a
SubroutineThe name of this item is comprised of the scope’s name in which the procedure is declared, i.e., the enclosing module, and the procedure name:
<scope_name>#<procedure_name>. For procedures that are not declared inside a module, the<scope_name>is an empty string, i.e., the item name becomes#<procedure_name>.A
ProcedureItemdoes not define any child items.Dependencies of a
ProcedureItemcan be introduced byimports, i.e., a dependency on
ModuleItem,the use of derived types, i.e., a dependency on
TypeDefItem,calls to other procedures, i.e., a dependency on
ProcedureItemor, as an indirection, onInterfaceItemorProcedureBindingItem.
- class TypeDefItem(name, source, config=None)
Bases:
ItemItem class representing a
TypeDefThe name of this item is comprised of the scope’s name in which the derived type is declared, i.e., the enclosing module, and the type name:
<scope_name>#<type_name>.A
TypeDefItemdefinesProcedureBindingItem.Dependencies of a
TypeDefItemare introduced viathe use of derived types in declarations of members, i.e., a dependency on
TypeDefItem,imports of derived types, i.e., a dependency on
ModuleItem.
- property definitions
Return the list of
ProcedureDeclarationnodes that define procedure bindings in this item.
- property transformation_ir
The transformation entry point for TypeDefItem is the scope in which the typedef is declared.
- class InterfaceItem(name, source, config=None)
Bases:
ItemItem class representing a
Interfacedeclared in a moduleThe name of this item is comprised of the scope’s name in which the interface is declared, i.e., the enclosing module, and the interface name:
<scope_name>#<intf_name>.A
InterfaceItemdoes not define any child items.The dependency of an
InterfaceItemis the procedure it declares, i.e., aProcedureItemor anotherInterfaceItem.This does not constitute a work item when applying transformations across the call tree in the
Schedulerand is skipped by most transformations during the processing phase. However, it is necessary to provide the dependency link from calls to procedures declared via an interface to their implementation in a Fortran routine.
- class ProcedureBindingItem(name, source, config=None)
Bases:
ItemItem class representing a Fortran procedure binding
The name of this item is comprised of three parts: the scope’s name in which the derived type with this procedure binding is declared, the name of the derived type, and the name of the procedure binding:
<scope_name>#<type_name>%<bind_name>.For nested derived types, the
<bind_name>may consist of multiple parts, e.g.,<scope_name>#<type1_name>%<type1_var>%<type2_var>%<bind_name>.A
ProcedureBindingItemdoes not define any child items.The dependency of a
ProcedureBindingItemis the procedure it binds to, i.e., aProcedureItem, anInterfaceItem, or anotherProcedureBindingItemto resolve generic bindings or calls to bindings in nested derived types.A
ProcedureBindingItemdoes not constitute a work item when applying transformations across the dependency tree in theSchedulerand is skipped during the processing phase by most transformations. However, it is necessary to provide the dependency link from calls to type bound procedures to their implementation in a Fortran routine.- property ir
Return the
ProcedureSymbolthis binding corresponds to.
- property transformation_ir
The transformation entry point is the scope in which the typedef is declared to which this procedure binding is attached.
- class ExternalItem(name, source, config=None, origin_cls=None, is_generated=False)
Bases:
ItemItem class representing an external dependency that cannot be resolved
The name of this item may be a fully qualified name containing scope and local name, or only a local name.
It does not define any child items or depend on other items.
It does not constitute a work item when applying transformations across the call tree in the
Scheduler.- Parameters:
- property ir
This raises a
RuntimeError
- property scope
This raises a
RuntimeError
- property path
This raises a
RuntimeError