openpectus.lang.exec.pinterpreter

Attributes

logger

term_uod

FFW_TICK_LIMIT

Classes

CallStack

InterpreterContext

Defines the context of program interpretation

Interrupt

PInterpreter

Module Contents

openpectus.lang.exec.pinterpreter.logger
openpectus.lang.exec.pinterpreter.term_uod = 'Unit Operation Definition file.'
openpectus.lang.exec.pinterpreter.FFW_TICK_LIMIT = 1000
class openpectus.lang.exec.pinterpreter.CallStack
_records: list[openpectus.lang.model.ast.BlockNode | openpectus.lang.model.ast.ProgramNode] = []
push(node)
Parameters:

node (openpectus.lang.model.ast.BlockNode | openpectus.lang.model.ast.ProgramNode)

pop()
Return type:

openpectus.lang.model.ast.BlockNode

peek()
Return type:

openpectus.lang.model.ast.BlockNode | openpectus.lang.model.ast.ProgramNode

__str__()
__repr__()
with_edited_program(program)
Parameters:

program (openpectus.lang.model.ast.ProgramNode)

Return type:

CallStack

class openpectus.lang.exec.pinterpreter.InterpreterContext

Defines the context of program interpretation

property tags: openpectus.lang.exec.tags.TagCollection
Abstractmethod:

Return type:

openpectus.lang.exec.tags.TagCollection

abstract schedule_execution(name, arguments='', exec_id=None)
Parameters:
  • name (str)

  • arguments (str)

  • exec_id (uuid.UUID | None)

property emitter: openpectus.lang.exec.events.EventEmitter
Abstractmethod:

Return type:

openpectus.lang.exec.events.EventEmitter

property base_unit_provider: openpectus.lang.exec.base_unit.BaseUnitProvider
Abstractmethod:

Return type:

openpectus.lang.exec.base_unit.BaseUnitProvider

class openpectus.lang.exec.pinterpreter.Interrupt(node, actions)
Parameters:
node
actions
class openpectus.lang.exec.pinterpreter.PInterpreter(program, context)

Bases: openpectus.lang.exec.visitor.NodeVisitor

Parameters:
_program
context
stack: CallStack
_interrupts_map: dict[str, Interrupt]
start_time: float = 0
_tick_time: float = 0
_tick_number: int = -1
_generator: openpectus.lang.exec.visitor.NodeGenerator | None = None
_ffw = False
_in_interrupt = False
runtimeinfo: openpectus.lang.exec.runlog.RuntimeInfo
ffw_tick_limit = 1000

instructions pending following a ffw run

with_edited_program(new_program)

Returns a new interpreter instance with program modified and in the state it would have been in if the updated program had been run from the beginning for the same number of ticks.

Either succeeds and returns the updated interpreter instance or fails with EditError. The source interpreter and its entire state is unmodified, so the method edit is transactional.

Parameters:

new_program (openpectus.lang.model.ast.ProgramNode)

Return type:

PInterpreter

_run_ffw(target_node_id)

Fast-forward iteration over both the main generator and any interrupt generators without executing the nodes’ functionality, until the actions produced are no longer present in the nodes’ history.

The purpose is to prepare all the generators to the state just after the last action in their respective nodes’ history.

Notes: - active_node: The node that is currently being visited, both during normal and ffw processing - target_node: The node in the new program with the same id as active_node in the old program at the time

ffw starts. When ffw is complete, this should be the same as active_node in the new program (or possibly the following node, in case active node is completed)

Parameters:

target_node_id (str)

get_marks()
Return type:

list[str]

inject_node(program)

Inject the child nodes of program into the running program in the current scope to be executed as the next instruction.

Parameters:

program (openpectus.lang.model.ast.ProgramNode)

_register_interrupt(node)
Parameters:

node (openpectus.lang.model.ast.NodeWithChildren)

_create_interrupt_handler(node)
Parameters:

node (openpectus.lang.model.ast.Node)

Return type:

openpectus.lang.exec.visitor.NodeGenerator

_unregister_interrupt(node)
Parameters:

node (openpectus.lang.model.ast.Node)

tick(tick_time, tick_number)
Parameters:
  • tick_time (float)

  • tick_number (int)

stop()
_is_awaiting_threshold(node)
Parameters:

node (openpectus.lang.model.ast.Node)

_evaluate_condition(node)
Parameters:

node (openpectus.lang.model.ast.NodeWithCondition)

Return type:

bool

_visit_children(node)
Parameters:

node (openpectus.lang.model.ast.NodeWithChildren)

Return type:

openpectus.lang.exec.visitor.NodeGenerator

visit(node)
Parameters:

node (openpectus.lang.model.ast.Node)

Return type:

openpectus.lang.exec.visitor.NodeGenerator

visit_ProgramNode(node)
Parameters:

node (openpectus.lang.model.ast.ProgramNode)

Return type:

openpectus.lang.exec.visitor.NodeGenerator

visit_BlankNode(node)
Parameters:

node (openpectus.lang.model.ast.BlankNode)

Return type:

openpectus.lang.exec.visitor.NodeGenerator

visit_MarkNode(node)
Parameters:

node (openpectus.lang.model.ast.MarkNode)

Return type:

openpectus.lang.exec.visitor.NodeGenerator

visit_BatchNode(node)
Parameters:

node (openpectus.lang.model.ast.BatchNode)

Return type:

openpectus.lang.exec.visitor.NodeGenerator

visit_MacroNode(node)
Parameters:

node (openpectus.lang.model.ast.MacroNode)

Return type:

openpectus.lang.exec.visitor.NodeGenerator

visit_CallMacroNode(node)
Parameters:

node (openpectus.lang.model.ast.CallMacroNode)

Return type:

openpectus.lang.exec.visitor.NodeGenerator

visit_BlockNode(node)
Parameters:

node (openpectus.lang.model.ast.BlockNode)

Return type:

openpectus.lang.exec.visitor.NodeGenerator

visit_EndBlockNode(node)
Parameters:

node (openpectus.lang.model.ast.EndBlockNode)

Return type:

openpectus.lang.exec.visitor.NodeGenerator

visit_EndBlocksNode(node)
Parameters:

node (openpectus.lang.model.ast.EndBlocksNode)

Return type:

openpectus.lang.exec.visitor.NodeGenerator

visit_InterpreterCommandNode(node)
Parameters:

node (openpectus.lang.model.ast.InterpreterCommandNode)

Return type:

openpectus.lang.exec.visitor.NodeGenerator

visit_NotifyNode(node)
Parameters:

node (openpectus.lang.model.ast.NotifyNode)

visit_EngineCommandNode(node)
Parameters:

node (openpectus.lang.model.ast.EngineCommandNode)

Return type:

openpectus.lang.exec.visitor.NodeGenerator

visit_SimulateNode(node)
Parameters:

node (openpectus.lang.model.ast.SimulateNode)

Return type:

openpectus.lang.exec.visitor.NodeGenerator

visit_SimulateOffNode(node)
Parameters:

node (openpectus.lang.model.ast.SimulateOffNode)

Return type:

openpectus.lang.exec.visitor.NodeGenerator

visit_UodCommandNode(node)
Parameters:

node (openpectus.lang.model.ast.UodCommandNode)

Return type:

openpectus.lang.exec.visitor.NodeGenerator

visit_WatchNode(node)
Parameters:

node (openpectus.lang.model.ast.WatchNode)

Return type:

openpectus.lang.exec.visitor.NodeGenerator

visit_AlarmNode(node)
Parameters:

node (openpectus.lang.model.ast.AlarmNode)

Return type:

openpectus.lang.exec.visitor.NodeGenerator

visit_WatchOrAlarm(node)
Parameters:

node (openpectus.lang.model.ast.WatchNode | openpectus.lang.model.ast.AlarmNode)

Return type:

openpectus.lang.exec.visitor.NodeGenerator

visit_InjectedNode(node)
Parameters:

node (openpectus.lang.model.ast.InjectedNode)

Return type:

openpectus.lang.exec.visitor.NodeGenerator

visit_CommentNode(node)
Parameters:

node (openpectus.lang.model.ast.CommentNode)

Return type:

openpectus.lang.exec.visitor.NodeGenerator

visit_ErrorInstructionNode(node)
Parameters:

node (openpectus.lang.model.ast.ErrorInstructionNode)

Return type:

openpectus.lang.exec.visitor.NodeGenerator

_try_activate_node(node)
Parameters:

node (openpectus.lang.model.ast.NodeWithCondition)

_abort_block_interrupts(block)
Parameters:

block (openpectus.lang.model.ast.BlockNode)

_add_record_state_awaiting_condition(node)
Parameters:

node (openpectus.lang.model.ast.Node)

_add_record_state_awaiting_threshold(node)
Parameters:

node (openpectus.lang.model.ast.Node)

_add_record_state_started(node)
_add_record_state_failed(node)
_add_record_state_complete(node)
_add_record_state_cancelled(node)
_add_record_state_forced(node)