Peano
Loading...
Searching...
No Matches
peano4.api.output.ActionSet.ActionSet Class Reference

Code generator for one action set. More...

Inheritance diagram for peano4.api.output.ActionSet.ActionSet:
Collaboration diagram for peano4.api.output.ActionSet.ActionSet:

Public Member Functions

 __init__ (self, classname, namespace, subdirectory, implementation=None)
 implementation Should be of type peano4.api.solversteps.ActionSet or None.
 
 add_operation (self, name, signature)
 signature is a long tuple.
 
 get_cpp_file_name (self)
 
 generate (self, overwrite, directory)
 

Data Fields

 classname
 
 namespace
 
 subdirectory
 
 operations
 
 include_files
 
 typedefs
 
 implementation
 

Private Member Functions

 __generate_includes (self, outputfile)
 
 __get_operation_arguments (self, operation)
 
 __generate_operation (self, outputfile, operation)
 outputfile points to file, operation to an operation object as added by the solver step
 
 __get_full_qualified_class_name (self)
 
 __generate_header (self, overwrite, directory)
 
 __generate_implementation (self, overwrite, directory)
 

Private Attributes

 __class__
 

Detailed Description

Code generator for one action set.

Do not confuse this with peano4.api.solversteps.ActionSet.ActionSet, which is the interface you actually implement (you subclass it and override get_guard_of_operation(), get_body_of_operation(), get_attributes(), get_includes(), ... to say what the action set does). Users typically never interact with this class. They work against the ActionSet in solversteps.

This class here is the corresponding writer: given one such solversteps.ActionSet instance (held as self.implementation), it emits the actual C++ .h/.cpp pair - the include guard, the class declaration inside the right namespace, a static tarch::logging::Log log, the constructor/destructor, createGridControlEventsForNextTraversal(), prepareTraversal()/unprepareTraversal(), and one method per grid event (touchCellFirstTime, createPersistentVertex, ...) - calling back into the get_implementation_of*() routines - which combine your get_guard_of_operation() and get_body_of_*() overrides - to fill in each method body. peano4.api.solversteps.ActionSet.ActionSet is the data model, this class is the writer.

Where is is used

The class is instantiated in exactly one place: construct_output() of peano4.api.solversteps.StepToActionSets.StepToActionSets, which is called once per action set attached to a peano4.api.solversteps.Step.Step, from Step.construct_output(), as it loops over self.action_sets. That call site decides two things this class here itself does not know about:

  • Which operations to generate.
  • What the total number of vertices, cells, ... is and what they are called.
  • Where the file goes and what it is called - if action_set.user_should_modify_template() is True, it is named after the action set itself and placed under actions/ (meant for you to hand-edit, regenerated only if missing); if False, it is placed under observers/ and named "{step.name}2{action_set.get_action_set_name()}{index}" - regenerated unconditionally every run.

In short

  • This is the generator which takes one peano4.api.solversteps.StepToActionSets.StepToActionSets and maps it onto a header/implementation file pair.
  • The outcome either ends up in actions/ (if user_should_modify_template() is True) or in observers/ (if False).
  • The outcome typically is named Observer2ActionSetName.

Important links

Definition at line 12 of file ActionSet.py.

Constructor & Destructor Documentation

◆ __init__()

peano4.api.output.ActionSet.ActionSet.__init__ (   self,
  classname,
  namespace,
  subdirectory,
  implementation = None 
)

implementation Should be of type peano4.api.solversteps.ActionSet or None.

If it is None, then the generated stuff will be a sole interface.

Definition at line 66 of file ActionSet.py.

Member Function Documentation

◆ __generate_header()

peano4.api.output.ActionSet.ActionSet.__generate_header (   self,
  overwrite,
  directory 
)
private

Definition at line 135 of file ActionSet.py.

References peano4.api.output.ActionSet.ActionSet.classname, peano4.api.output.Jinja2TemplatedHeaderFile.Jinja2TemplatedHeaderFile.classname, peano4.api.output.Jinja2TemplatedHeaderImplementationFilePair.Jinja2TemplatedHeaderImplementationFilePair.classname, peano4.api.output.Jinja2TemplateStringHeaderImplementationFilePair.Jinja2TemplateStringHeaderImplementationFilePair.classname, peano4.api.output.Observer.Observer.classname, peano4.api.output.TemplatedHeaderFile.TemplatedHeaderFile.classname, peano4.api.output.TemplatedHeaderImplementationFilePair.TemplatedHeaderImplementationFilePair.classname, exahype2.api.PDETerm.PDETerm.implementation, peano4.api.output.ActionSet.ActionSet.implementation, exahype2.api.Project.Project.subdirectory(), api.Project.Project.subdirectory(), peano4.api.datamodel.DoF.DoF.subdirectory, peano4.api.datamodel.Model.Model.subdirectory, peano4.api.datamodel.Model.Model.subdirectory(), peano4.api.output.ActionSet.ActionSet.subdirectory, peano4.api.output.InvokeExternalTool.InvokeExternalTool.subdirectory, peano4.api.output.Jinja2TemplatedHeaderFile.Jinja2TemplatedHeaderFile.subdirectory, peano4.api.output.Jinja2TemplatedHeaderImplementationFilePair.Jinja2TemplatedHeaderImplementationFilePair.subdirectory, peano4.api.output.Jinja2TemplateStringHeaderImplementationFilePair.Jinja2TemplateStringHeaderImplementationFilePair.subdirectory, peano4.api.output.Observer.Observer.subdirectory, peano4.api.output.TemplatedHeaderFile.TemplatedHeaderFile.subdirectory, peano4.api.output.TemplatedHeaderImplementationFilePair.TemplatedHeaderImplementationFilePair.subdirectory, peano4.api.Project.Project.subdirectory, peano4.api.Project.Project.subdirectory(), and peano4.api.solversteps.Step.Step.subdirectory.

Referenced by peano4.api.output.ActionSet.ActionSet.generate(), and peano4.api.output.Observer.Observer.generate().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ __generate_implementation()

peano4.api.output.ActionSet.ActionSet.__generate_implementation (   self,
  overwrite,
  directory 
)
private

◆ __generate_includes()

peano4.api.output.ActionSet.ActionSet.__generate_includes (   self,
  outputfile 
)
private

Definition at line 94 of file ActionSet.py.

References peano4.api.output.ActionSet.ActionSet.include_files.

◆ __generate_operation()

peano4.api.output.ActionSet.ActionSet.__generate_operation (   self,
  outputfile,
  operation 
)
private

outputfile points to file, operation to an operation object as added by the solver step

Definition at line 111 of file ActionSet.py.

References peano4.api.output.ActionSet.ActionSet.__get_operation_arguments(), exahype2.api.PDETerm.PDETerm.implementation, and peano4.api.output.ActionSet.ActionSet.implementation.

Here is the call graph for this function:

◆ __get_full_qualified_class_name()

peano4.api.output.ActionSet.ActionSet.__get_full_qualified_class_name (   self)
private

Definition at line 127 of file ActionSet.py.

References peano4.api.output.ActionSet.ActionSet.classname, peano4.api.output.Jinja2TemplatedHeaderFile.Jinja2TemplatedHeaderFile.classname, peano4.api.output.Jinja2TemplatedHeaderImplementationFilePair.Jinja2TemplatedHeaderImplementationFilePair.classname, peano4.api.output.Jinja2TemplateStringHeaderImplementationFilePair.Jinja2TemplateStringHeaderImplementationFilePair.classname, peano4.api.output.Observer.Observer.classname, peano4.api.output.TemplatedHeaderFile.TemplatedHeaderFile.classname, peano4.api.output.TemplatedHeaderImplementationFilePair.TemplatedHeaderImplementationFilePair.classname, peano4.api.datamodel.DoF.DoF.namespace, peano4.api.datamodel.Model.Model.namespace, peano4.api.output.ActionSet.ActionSet.namespace, peano4.api.output.Jinja2TemplatedHeaderFile.Jinja2TemplatedHeaderFile.namespace, peano4.api.output.Jinja2TemplatedHeaderImplementationFilePair.Jinja2TemplatedHeaderImplementationFilePair.namespace, peano4.api.output.Jinja2TemplateStringHeaderImplementationFilePair.Jinja2TemplateStringHeaderImplementationFilePair.namespace, peano4.api.output.Observer.Observer.namespace, peano4.api.output.TemplatedHeaderFile.TemplatedHeaderFile.namespace, peano4.api.output.TemplatedHeaderImplementationFilePair.TemplatedHeaderImplementationFilePair.namespace, peano4.api.Project.Project.namespace, and peano4.api.solversteps.Step.Step.namespace.

Referenced by peano4.api.output.ActionSet.ActionSet.__generate_implementation().

Here is the caller graph for this function:

◆ __get_operation_arguments()

peano4.api.output.ActionSet.ActionSet.__get_operation_arguments (   self,
  operation 
)
private

Definition at line 97 of file ActionSet.py.

Referenced by peano4.api.output.ActionSet.ActionSet.__generate_implementation(), and peano4.api.output.ActionSet.ActionSet.__generate_operation().

Here is the caller graph for this function:

◆ add_operation()

peano4.api.output.ActionSet.ActionSet.add_operation (   self,
  name,
  signature 
)

signature is a long tuple.

The first entry is the name of the routine, the second entry is the result type. From thereon, one entry gives the name of an attribute, the second one the type.

Definition at line 86 of file ActionSet.py.

References peano4.api.output.ActionSet.ActionSet.operations.

◆ generate()

peano4.api.output.ActionSet.ActionSet.generate (   self,
  overwrite,
  directory 
)

◆ get_cpp_file_name()

peano4.api.output.ActionSet.ActionSet.get_cpp_file_name (   self)

Definition at line 209 of file ActionSet.py.

References peano4.api.output.ActionSet.ActionSet.classname, peano4.api.output.Jinja2TemplatedHeaderFile.Jinja2TemplatedHeaderFile.classname, peano4.api.output.Jinja2TemplatedHeaderImplementationFilePair.Jinja2TemplatedHeaderImplementationFilePair.classname, peano4.api.output.Jinja2TemplateStringHeaderImplementationFilePair.Jinja2TemplateStringHeaderImplementationFilePair.classname, peano4.api.output.Observer.Observer.classname, peano4.api.output.TemplatedHeaderFile.TemplatedHeaderFile.classname, peano4.api.output.TemplatedHeaderImplementationFilePair.TemplatedHeaderImplementationFilePair.classname, exahype2.api.Project.Project.subdirectory(), api.Project.Project.subdirectory(), peano4.api.datamodel.DoF.DoF.subdirectory, peano4.api.datamodel.Model.Model.subdirectory, peano4.api.datamodel.Model.Model.subdirectory(), peano4.api.output.ActionSet.ActionSet.subdirectory, peano4.api.output.InvokeExternalTool.InvokeExternalTool.subdirectory, peano4.api.output.Jinja2TemplatedHeaderFile.Jinja2TemplatedHeaderFile.subdirectory, peano4.api.output.Jinja2TemplatedHeaderImplementationFilePair.Jinja2TemplatedHeaderImplementationFilePair.subdirectory, peano4.api.output.Jinja2TemplateStringHeaderImplementationFilePair.Jinja2TemplateStringHeaderImplementationFilePair.subdirectory, peano4.api.output.Observer.Observer.subdirectory, peano4.api.output.TemplatedHeaderFile.TemplatedHeaderFile.subdirectory, peano4.api.output.TemplatedHeaderImplementationFilePair.TemplatedHeaderImplementationFilePair.subdirectory, peano4.api.Project.Project.subdirectory, peano4.api.Project.Project.subdirectory(), and peano4.api.solversteps.Step.Step.subdirectory.

Referenced by peano4.api.output.ActionSet.ActionSet.__generate_implementation(), and peano4.api.output.Observer.Observer.generate().

Here is the call graph for this function:
Here is the caller graph for this function:

Field Documentation

◆ __class__

◆ classname

◆ implementation

◆ include_files

peano4.api.output.ActionSet.ActionSet.include_files

◆ namespace

◆ operations

peano4.api.output.ActionSet.ActionSet.operations

◆ subdirectory

◆ typedefs

peano4.api.output.ActionSet.ActionSet.typedefs

Definition at line 83 of file ActionSet.py.


The documentation for this class was generated from the following file: