Automata#
Automata are a core concept of the JANI modeling formalism.
An automaton is defined by a set of locations connected via edges.
Creating an automaton requires a Context
.
We recommend constructing automata via the method create_automaton()
of the respective modeling context:
from momba import model
# creates a *Probabilistic Timed Automata* (PTA) modeling context
ctx = model.Context(model.ModelType.PTA)
# let's create an automaton named *environment*
environment = ctx.create_automaton(name="environment")
environment
<Automaton name='environment' at 0x7f10fcae3f70>
Warning
Automata in Momba support parameters. This feature, however, is not part of the official JANI specification. In case you want your model to work with a broad variety of tools do not add any parameters to your automata.
- class momba.model.Automaton(ctx, *, name=None)[source]#
Represents an automaton.
- name#
The optional name of the automaton.
- property locations#
The set of locations of the automaton.
- property initial_locations#
The set of initial locations of the automaton.
- property edges#
The set of edges of the automaton.
- property initial_restriction#
An optional restriction to be satisfied by initial states.
This property can be set only once per automaton. The expression has to be boolean.
Raises
ModelingError
when set twice or to a non-boolean expression.
- property parameters#
The sequence of parameters of the automaton.
- add_location(location, *, initial=False)[source]#
Adds a location to the automaton.
The flag initial specifies whether the location is an initial location.
Raises
ModelingError
when the location cannot be added to the automaton. See the methodLocation.validate()
for details.
- create_location(name=None, *, progress_invariant=None, transient_values=frozenset({}), initial=False)[source]#
Creates a location with the given name and adds it to the automaton.
The optional expression progress_invariant specifies the invariant subject to which the time may progress in the location. As per the JANI specification, the invariant is only allowed for models using real-valued clocks (see
ModelType
).The parameter transient_values should be a set of assignments for transient variables. These assignments define the values of the transient variables when in the location.
The flag initial specifies whether the location is an initial location.
Raises the same exceptions as
add_location()
.
- add_edge(edge)[source]#
Adds an edge to the automaton.
Raises
ModelingError
when the edge cannot be added to the automaton. See the methodEdge.validate()
for details.
- create_edge(source, destinations, *, action_pattern=None, guard=None, rate=None, annotation=None, observations=frozenset({}))[source]#
Creates an edge and adds it to the automaton.
The parameters are passed to
Edge
.Raises the same exceptions as
add_edge()
.
- declare_variable(name, typ, *, is_transient=None, initial_value=None)[source]#
Declares a variable in the local scope of the automaton.
Passes the parameters to
Scope.declare_variable()
.
- declare_parameter(name, typ, *, default_value=None)[source]#
Declarse a parameter of the automaton.
Passes the parameters to
Scope.declare_constant()
where value is default_value.
Locations#
- class momba.model.Location(name=None, progress_invariant=None, transient_values=frozenset({}))[source]#
Represents a location of an automaton.
- name#
The optional name of the location.
- progress_invariant#
An optional expression progress_invariant specifies the invariant subject to which the time may progress in the location. As per the JANI specification, the invariant is only allowed for models using real-valued clocks (see
ModelType
).
- transient_values#
A set of assignments for transient variables. These assignments define the values of the transient variables when in the location.
- validate(automaton)[source]#
Validates the location for the given automaton.
Raises
ModelingError
if the location is invalid to add to the automaton according to the JANI specification. For instance, if the location has a progress_invariant but the model type does not support clocks.
Edges#
- class momba.model.Edge(location, destinations, action_pattern=None, guard=None, rate=None, annotation=None, observation=frozenset({}))[source]#
Represents an edge of an automaton.
- location#
The source location of the edge.
- destinations#
The destinations of the edge.
- action_pattern#
The optional action pattern of the edge.
- guard#
The optional guard of the edge.
- rate#
The optional rate of the edge.
- annotation#
An optional annotation of the edge.
- create_edge_scope(parent)[source]#
Creates an edge scope with the given parent scope.
Warning
Used for value passing an experimental Momba feature. Value passing is not part of the official JANI specification.
- validate(automaton)[source]#
Validates the edge for the given automaton.
Raises
ModelingError
if the edge is invalid to add to the automaton according to the JANI specification. For instance, if source location is not a location of the automaton.
- class momba.model.Destination(location, probability=None, assignments=())[source]#
Represents a destination of an edge.
- location#
The target location of the destination.
- probability#
An optional expression for the probability of the destination.
- assignments#
A set of assignments to be executed when going to the destination.
- momba.model.create_destination(location, *, probability=None, assignments=())[source]#
Creates a destination with the given target location.
This is a convenience function for creating destinations where assignments can be provied as a mapping. We recommend using it instead of creating
Destination
objects directly.
- class momba.model.Assignment(target, value, index=0)[source]#
Represents an assignment.
- target#
The target of the assignment.
- value#
The value to assign.
- index#
The index of the assignment.
- validate(scope)[source]#
Validates the assignment in the given scope.
Raises
ModelingError
if the target is not assignable from the value type.
Instances#
- class momba.model.Instance(automaton, arguments=(), input_enable=frozenset({}), comment=None)[source]#
Represents an automaton instance.
- automaton#
The instaniated automaton.
- arguments#
The arguments passed to the parameters of the automaton.
- input_enabled#
The set of action types for which the instance is input enabled.
- comment#
An optional comment describing the instance.