# Context¶

At the heart of every model is a modeling context of a specific model type. Every modeling context can hold several automata and automata networks comprised of these automata.

A modeling context is created as follows proving a model type:

from momba import model

# creates a *Probabilistic Timed Automata* (PTA) modeling context
ctx = model.Context(model.ModelType.PTA)
ctx

<Context model_type=ModelType.PTA at 0x7f37f0e194c0>

class momba.model.Context(model_type)[source]

Represents a modeling context.

model_type

The ModelType of the modeling context.

global_scope

The global Scope of the modeling context.

property automata

The set of automata defined on the modeling context.

property networks

The set of networks defined on the modeling context.

property action_types

The action types defined on the modeling context.

property properties

The properties defined on the modeling context.

get_automaton_by_name(name)[source]

Retrieves an automaton by its name.

Raises NotFoundError if no such automaton exists.

get_network_by_name(name)[source]

Retrives a network by its name.

Raises NotFoundError if no such network exists.

get_property_definition_by_name(name)[source]

Retrieves a property definition by its name.

Raises NotFoundError if no such property definition exists.

get_action_type_by_name(name)[source]

Retrives an action type by its name.

Raises NotFoundError if no such action type exists.

create_action_type(name, *, parameters=())[source]

Creates a new action type with the given name and parameters.

Raises ModelingError if an identically named action type already exists.

create_automaton(*, name=None)[source]

Creates an automaton with the given optional name and returns it.

create_network(*, name=None)[source]

Creates a network with the given optional name and returns it.

define_property(name, expression)[source]

Defines a property on the modeling context.

The different model types are represented by an enum:

class momba.model.ModelType(value)[source]

An enum representing different model types.

full_name

The full human-readable name of the model type.

CTMC = 'Continuous-Time Markov Chain'

Continuous-Time Markov Chain

CTMDP = 'Continuous-Time Markov Decision Process'

Continuous-Time Markov Decision Process

DTMC = 'Discrete-Time Markov Chain'

Discrete-Time Markov Chain

HA = 'Hybrid Automaton'

Hybrid Automaton

LTS = 'Labeled Transition System'

Labeled Transition System

MA = 'Markov Automaton'

Markov Automaton

MDP = 'Markov Decision Process'

Markov Decision Process

PHA = 'Probabilistic Hybrid Automaton'

Probabilistic Hybrid Automaton

PTA = 'Probabilistic Timed Automaton'

Probabilistic Timed Automaton

SHA = 'Stochastic Hybrid Automaton'

Stochastic Hybrid Automaton

STA = 'Stochastic Timed Automaton'

Stochastic Timed Automaton

TA = 'Timed Automaton'

Timed Automaton

property is_untimed

Returns True if and only if the model type is not timed.

Untimed model types are LTS, DTMC, and MDP.

property uses_clocks

Returns True if and only if the respective models use real-value clocks.

## Scope¶

Variables and constants are declared in a scope. There is one global scope associated with each modeling context (see attribute global_scope). In addition, each automaton has its own local scope. Scopes can be nested enabling access to identifies declared in a parent scope within a child scope. For instance, the local scopes of automata defined on a modeling context are children of the global scope of the respective context enabling access to both local and global variables and constants.

class momba.model.Scope(ctx, parent=None)[source]

Represents a scope.

ctx

The modeling context associated with the scope.

parent

The parent scope if it exists (None if there is no parent).

property declarations

Variable and constant declarations of the scope.

property variable_declarations

Variable declarations of the scope.

property constant_declarations

Constant declarations of the scope.

property clock_declarations

Variable declarations of clock variables of the scope.

create_child_scope()[source]

Creates a child scope.

get_type(expr)[source]

Returns the (inferred) type of the given expression in the scope.

get_function(name)[source]

Retrieves a FunctionDefinition by its name.

Raises NotFoundError if no such definition exists.

is_local(identifier)[source]

Checks whether the identifier is locally declared in the scope.

is_declared(identifier)[source]

Checks whether the identifier is declared in the scope.

get_scope(identifier)[source]

Retrieves the scope in which the given identifier is declared.

Raises NotFoundError if no such identifier is declared.

lookup(identifier)[source]

Retrieves the declaration for the given identifier.

Raises NotFoundError if no such identifier is declared.

Adds an identifier declaration to the scope.

The flag validate specifies whether the declaration should be validated within the scope before adding it. In case validation fails, a ModelingError is raised.

Raises ModelingError in case the identifier has already been declared.

declare_variable(identifier, typ, *, is_transient=None, initial_value=None, comment=None)[source]

Declares a variable within the scope.

The parameters are passed to VariableDeclaration with the exception of initial_value. When provided with a value which is not an expressions, this function implicitly converts the provided value into an expression using ensure_expr().

Raises ModelingError in case the identifier has already been declared.

declare_constant(identifier, typ, *, value=None, comment=None)[source]

Declares a constant within the scope.

The parameters are passed to ConstantDeclaration with the exception of value. When provided with a value which is not an expressions, this function implicitly converts the provided value into an expression using ensure_expr().

Raises ModelingError in case the identifier has already been declared.

define_function(name, parameters, returns, body)[source]

Defines a function within the scope.

The parameters are passed to FunctionDefinition.

Raises ModelingError in case an identically named function already exists.

## Declarations¶

There are two kinds of identifier declarations, variable declarations and constant declarations. Every identifier declaration declares a particular identifier with a specified Type.

class momba.model.IdentifierDeclaration(identifier, typ, comment=None)[source]

Represents a declaration of an identifier.

identifier

The declared identifier.

typ

The type of the identifier.

comment

An additional optional comment for the declaration.

validate(scope)[source]

Validates that the declaration is valid in the given scope.

Raises ModelingError if the declaration is invalid.

class momba.model.VariableDeclaration(identifier, typ, comment=None, is_transient=None, initial_value=None)[source]

Represents a variable declaration.

is_transient

Optional boolean flag indicating whether the variable is transient.

initial_value

Optional Expression providing an initial value for the variable.

validate(scope)[source]

Validates that the declaration is valid in the given scope.

Raises ModelingError if the declaration is invalid.

class momba.model.ConstantDeclaration(identifier, typ, comment=None, value=None)[source]

Represents a constant declaration.

value

Optional Expression specifying the value of the constant.

property is_parameter

Returns True if and only if the constant is a parameter.

Parameters are constants without a value.

validate(scope)[source]

Validates that the declaration is valid in the given scope.

Raises ModelingError if the declaration is invalid.

## Properties¶

Every modeling context may have several property definitions attached to it.

class momba.model.PropertyDefinition(name, expression, comment=None)[source]

Represents a property definition.

name

The name of the property.

expression

An Expression defining the property.

comment

An optional comment describing the property.