lyra.core package¶
Submodules¶
Control Flow Graph¶
Lyra’s internal representation of a Python program.
| Author: | Caterina Urban |
|---|
-
class
lyra.core.cfg.Basic(identifier: int, stmts: typing.List[lyra.core.statements.Statement] = None)[source]¶ Bases:
lyra.core.cfg.Node
-
class
lyra.core.cfg.Conditional(source: typing.Union[lyra.core.cfg.Node, NoneType], condition: lyra.core.statements.Statement, target: typing.Union[lyra.core.cfg.Node, NoneType], kind=<Kind.DEFAULT: 0>)[source]¶ Bases:
lyra.core.cfg.Edge-
condition¶
-
-
class
lyra.core.cfg.ControlFlowGraph(nodes: typing.Set[lyra.core.cfg.Node], in_node: lyra.core.cfg.Node, out_node: lyra.core.cfg.Node, edges: typing.Set[lyra.core.cfg.Edge])[source]¶ Bases:
object-
edges¶
-
in_edges(node: lyra.core.cfg.Node) → typing.Set[lyra.core.cfg.Edge][source]¶ Ingoing edges of a given node.
Parameters: node – given node Returns: set of ingoing edges of the node
-
in_node¶
-
nodes¶
-
out_edges(node: lyra.core.cfg.Node) → typing.Set[lyra.core.cfg.Edge][source]¶ Outgoing edges of a given node.
Parameters: node – given node Returns: set of outgoing edges of the node
-
out_node¶
-
-
class
lyra.core.cfg.Edge(source: lyra.core.cfg.Node, target: lyra.core.cfg.Node, kind: lyra.core.cfg.Edge.Kind = <Kind.DEFAULT: 0>)[source]¶ Bases:
object-
class
Kind[source]¶ Bases:
enum.EnumKind of an edge of a control flow graph.
-
DEFAULT= 0¶
-
IF_IN= 2¶
-
IF_OUT= -2¶
-
LOOP_IN= 1¶
-
LOOP_OUT= -1¶
-
-
kind¶
-
source¶
-
target¶
-
class
-
class
lyra.core.cfg.Loop(identifier: int, stmts: typing.List[lyra.core.statements.Statement] = None)[source]¶ Bases:
lyra.core.cfg.Node
-
class
lyra.core.cfg.Node(identifier: int, stmts: typing.List[lyra.core.statements.Statement])[source]¶ Bases:
object-
identifier¶
-
size()[source]¶ Number of statements stored in the node.
Returns: number of statements stored in the node
-
stmts¶
-
-
class
lyra.core.cfg.Unconditional(source: typing.Union[lyra.core.cfg.Node, NoneType], target: typing.Union[lyra.core.cfg.Node, NoneType], kind=<Kind.DEFAULT: 0>)[source]¶ Bases:
lyra.core.cfg.Edge
Expressions¶
Lyra’s internal representation of Python expressions.
| Authors: | Caterina Urban and Simon Wehrli |
|---|
-
class
lyra.core.expressions.AttributeReference(typ: lyra.core.types.LyraType, target: lyra.core.expressions.Expression, attribute: lyra.core.expressions.Identifier)[source]¶ Bases:
lyra.core.expressions.ExpressionAttribute reference representation.
https://docs.python.org/3.4/reference/expressions.html#attribute-references
-
attribute¶
-
target¶
-
-
class
lyra.core.expressions.BinaryArithmeticOperation(typ: lyra.core.types.LyraType, left: lyra.core.expressions.Expression, operator: lyra.core.expressions.BinaryArithmeticOperation.Operator, right: lyra.core.expressions.Expression)[source]¶ Bases:
lyra.core.expressions.BinaryOperationBinary arithmetic operation expression representation.
https://docs.python.org/3.4/reference/expressions.html#binary-arithmetic-operations
-
class
lyra.core.expressions.BinaryBooleanOperation(typ: lyra.core.types.LyraType, left: lyra.core.expressions.Expression, operator: lyra.core.expressions.BinaryBooleanOperation.Operator, right: lyra.core.expressions.Expression)[source]¶ Bases:
lyra.core.expressions.BinaryOperationBinary boolean operation expression representation.
https://docs.python.org/3.6/reference/expressions.html#boolean-operations
-
class
lyra.core.expressions.BinaryComparisonOperation(typ: lyra.core.types.LyraType, left: lyra.core.expressions.Expression, operator: lyra.core.expressions.BinaryComparisonOperation.Operator, right: lyra.core.expressions.Expression)[source]¶ Bases:
lyra.core.expressions.BinaryOperationBinary comparison operation expression representation.
https://docs.python.org/3.4/reference/expressions.html#comparisons
-
class
lyra.core.expressions.BinaryOperation(typ: lyra.core.types.LyraType, left: lyra.core.expressions.Expression, operator: lyra.core.expressions.BinaryOperation.Operator, right: lyra.core.expressions.Expression)[source]¶ Bases:
lyra.core.expressions.OperationBinary operation representation.
-
left¶
-
operator¶
-
right¶
-
-
class
lyra.core.expressions.BinarySequenceOperation(typ: lyra.core.types.LyraType, left: lyra.core.expressions.Expression, operator: lyra.core.expressions.BinarySequenceOperation.Operator, right: lyra.core.expressions.Expression)[source]¶ Bases:
lyra.core.expressions.BinaryOperationBinary sequence operation expression representation.
-
class
lyra.core.expressions.Call(typ: lyra.core.types.LyraType)[source]¶ Bases:
lyra.core.expressions.ExpressionCall representation.
https://docs.python.org/3.4/reference/expressions.html#calls
-
class
lyra.core.expressions.DictDisplay(typ: lyra.core.types.DictLyraType, keys: typing.List[lyra.core.expressions.Expression] = None, values: typing.List[lyra.core.expressions.Expression] = None)[source]¶ Bases:
lyra.core.expressions.ExpressionDictionary display representation.
https://docs.python.org/3/reference/expressions.html#dictionary-displays
-
keys¶
-
values¶
-
-
class
lyra.core.expressions.Expression(typ: lyra.core.types.LyraType)[source]¶ Bases:
objectExpression representation.
https://docs.python.org/3.4/reference/expressions.html
-
ids() → typing.Set[_ForwardRef(‘VariableIdentifier’)][source]¶ Identifiers that appear in the expression.
Returns: set of identifiers that appear in the expression
-
typ¶
-
-
class
lyra.core.expressions.ExpressionVisitor[source]¶ Bases:
objectAn expression visitor base class that walks the expression tree and calls a visitor function for every expression found. This function may return a value which is forwarded by the visit method.
Subclasses are meant to implement the visitor functions. The visitor function for an expression is
'visit_'+ class name of the expression. So a Literal expression visit function would be visit_Literal. If no visitor function exists for an expression a NotImplementedError is raised.Adapted from ast.py.
-
visit_AttributeReference(expr: lyra.core.expressions.AttributeReference)[source]¶ Visit of an attribute reference.
-
visit_BinaryArithmeticOperation(expr: lyra.core.expressions.BinaryArithmeticOperation)[source]¶ Visit of a binary arithmetic operation.
-
visit_BinaryBooleanOperation(expr: lyra.core.expressions.BinaryBooleanOperation)[source]¶ Visit of a binary boolean operation.
-
visit_BinaryComparisonOperation(expr: lyra.core.expressions.BinaryComparisonOperation)[source]¶ Visit of a binary comparison operation.
-
visit_BinarySequenceOperation(expr: lyra.core.expressions.BinarySequenceOperation)[source]¶ Visit of a binary sequence operation.
-
visit_LengthIdentifier(expr: lyra.core.expressions.LengthIdentifier)[source]¶ Visit of a sequence or collection length.
-
visit_Subscription(expr: lyra.core.expressions.Subscription)[source]¶ Visit of a subscription expression.
-
visit_UnaryArithmeticOperation(expr: lyra.core.expressions.UnaryArithmeticOperation)[source]¶ Visit of a unary arithmetic operation.
-
-
class
lyra.core.expressions.Identifier(typ: lyra.core.types.LyraType, name: str)[source]¶ Bases:
lyra.core.expressions.ExpressionIdentifier representation.
https://docs.python.org/3.4/reference/expressions.html#atom-identifiers
-
name¶
-
-
class
lyra.core.expressions.Input(typ: lyra.core.types.LyraType)[source]¶ Bases:
lyra.core.expressions.CallInput call representation.
-
class
lyra.core.expressions.Items(typ: lyra.core.types.LyraType, target_dict: lyra.core.expressions.Expression)[source]¶ Bases:
lyra.core.expressions.CallItems call representation
-
target_dict¶
-
-
class
lyra.core.expressions.Keys(typ: lyra.core.types.LyraType, target_dict: lyra.core.expressions.Expression)[source]¶ Bases:
lyra.core.expressions.CallKeys call representation
-
target_dict¶
-
-
class
lyra.core.expressions.LengthIdentifier(variable: lyra.core.expressions.VariableIdentifier)[source]¶ Bases:
lyra.core.expressions.IdentifierSequence or collection length representation.
-
variable¶
-
-
class
lyra.core.expressions.ListDisplay(typ: lyra.core.types.ListLyraType, items: typing.List[lyra.core.expressions.Expression] = None)[source]¶ Bases:
lyra.core.expressions.ExpressionList display representation.
https://docs.python.org/3/reference/expressions.html#list-displays
-
items¶
-
-
class
lyra.core.expressions.Literal(typ: lyra.core.types.LyraType, val: str)[source]¶ Bases:
lyra.core.expressions.ExpressionLiteral representation.
https://docs.python.org/3.4/reference/expressions.html#literals
-
val¶
-
-
class
lyra.core.expressions.NegationFreeNormalExpression[source]¶ Bases:
lyra.core.expressions.ExpressionVisitorAn expression visitor that:
- removes negations using De Morgan’s law, and
- puts all boolean comparison operations with
=,!=,<,<=,>, and>=in the normal formexpr <= 0.
-
visit_AttributeReference(expr: lyra.core.expressions.AttributeReference, invert=False)[source]¶ Visit of an attribute reference.
-
visit_BinaryArithmeticOperation(expr: lyra.core.expressions.BinaryArithmeticOperation, invert=False)[source]¶ Visit of a binary arithmetic operation.
-
visit_BinaryBooleanOperation(expr: lyra.core.expressions.BinaryBooleanOperation, invert=False)[source]¶ Visit of a binary boolean operation.
-
visit_BinaryComparisonOperation(expr: lyra.core.expressions.BinaryComparisonOperation, invert=False)[source]¶ Visit of a binary comparison operation.
-
visit_BinarySequenceOperation(expr: lyra.core.expressions.BinarySequenceOperation, invert=False)[source]¶ Visit of a binary sequence operation.
-
visit_DictDisplay(expr: lyra.core.expressions.DictDisplay, invert=False)[source]¶ Visit of dictionary display.
-
visit_Input(expr: lyra.core.expressions.Input, invert=False)[source]¶ Visit of an input call expression.
-
visit_LengthIdentifier(expr: lyra.core.expressions.LengthIdentifier, invert=False)[source]¶ Visit of a sequence or collection length.
-
visit_ListDisplay(expr: lyra.core.expressions.ListDisplay, invert=False)[source]¶ Visit of a list display.
-
visit_Literal(expr: lyra.core.expressions.Literal, invert=False)[source]¶ Visit of a literal expression.
-
visit_Range(expr: lyra.core.expressions.Range, invert=False)[source]¶ Visit of a range call expression.
-
visit_SetDisplay(expr: lyra.core.expressions.SetDisplay, invert=False)[source]¶ Visit of a set display.
-
visit_Slicing(expr: lyra.core.expressions.Slicing, invert=False)[source]¶ Visit of a slicing expression.
-
visit_Subscription(expr: lyra.core.expressions.Subscription, invert=False)[source]¶ Visit of a subscription expression.
-
visit_TupleDisplay(expr: lyra.core.expressions.TupleDisplay, invert=False)[source]¶ Visit of a tuple display.
-
visit_UnaryArithmeticOperation(expr: lyra.core.expressions.UnaryArithmeticOperation, invert=False)[source]¶ Visit of a unary arithmetic operation.
-
class
lyra.core.expressions.Operation(typ: lyra.core.types.LyraType)[source]¶ Bases:
lyra.core.expressions.ExpressionOperation representation.
-
class
lyra.core.expressions.Range(typ: lyra.core.types.LyraType, start: lyra.core.expressions.Expression, stop: lyra.core.expressions.Expression, step: lyra.core.expressions.Expression)[source]¶ Bases:
lyra.core.expressions.CallRange call representation.
-
start¶
-
step¶
-
stop¶
-
-
class
lyra.core.expressions.SetDisplay(typ: lyra.core.types.SetLyraType, items: typing.List[lyra.core.expressions.Expression] = None)[source]¶ Bases:
lyra.core.expressions.ExpressionSet display representation.
https://docs.python.org/3/reference/expressions.html#set-displays
-
items¶
-
-
class
lyra.core.expressions.Slicing(typ: lyra.core.types.LyraType, target: lyra.core.expressions.Expression, lower: lyra.core.expressions.Expression, upper: lyra.core.expressions.Expression, stride: lyra.core.expressions.Expression = None)[source]¶ Bases:
lyra.core.expressions.ExpressionSlicing representation.
https://docs.python.org/3.4/reference/expressions.html#slicings
-
lower¶
-
stride¶
-
target¶
-
upper¶
-
-
class
lyra.core.expressions.Subscription(typ: lyra.core.types.LyraType, target: lyra.core.expressions.Expression, key: lyra.core.expressions.Expression)[source]¶ Bases:
lyra.core.expressions.ExpressionSubscription representation.
https://docs.python.org/3.4/reference/expressions.html#subscriptions
-
key¶
-
target¶
-
-
class
lyra.core.expressions.TupleDisplay(typ: lyra.core.types.TupleLyraType, items: typing.List[lyra.core.expressions.Expression] = None)[source]¶ Bases:
lyra.core.expressions.ExpressionTuple display (= expression list with comma or ()) representation.
https://docs.python.org/3/reference/expressions.html#expression-lists
-
items¶
-
-
class
lyra.core.expressions.UnaryArithmeticOperation(typ: lyra.core.types.LyraType, operator: lyra.core.expressions.UnaryArithmeticOperation.Operator, expression: lyra.core.expressions.Expression)[source]¶ Bases:
lyra.core.expressions.UnaryOperationUnary arithmetic operation expression representation.
https://docs.python.org/3.4/reference/expressions.html#unary-arithmetic-and-bitwise-operations
-
class
lyra.core.expressions.UnaryBooleanOperation(typ: lyra.core.types.LyraType, operator: lyra.core.expressions.UnaryBooleanOperation.Operator, expression: lyra.core.expressions.Expression)[source]¶ Bases:
lyra.core.expressions.UnaryOperationUnary boolean operation expression representation.
https://docs.python.org/3.4/reference/expressions.html#boolean-operations
-
class
lyra.core.expressions.UnaryOperation(typ: lyra.core.types.LyraType, operator: lyra.core.expressions.UnaryOperation.Operator, expression: lyra.core.expressions.Expression)[source]¶ Bases:
lyra.core.expressions.OperationUnary operation representation.
-
expression¶
-
operator¶
-
-
class
lyra.core.expressions.Values(typ: lyra.core.types.LyraType, target_dict: lyra.core.expressions.Expression)[source]¶ Bases:
lyra.core.expressions.CallValues call representation
-
target_dict¶
-
-
class
lyra.core.expressions.VariableIdentifier(typ: lyra.core.types.LyraType, name: str)[source]¶ Bases:
lyra.core.expressions.IdentifierVariable identifier representation.
Statements¶
Lyra’s internal representation of Python statements.
| Authors: | Caterina Urban and Simon Wehrli |
|---|
-
class
lyra.core.statements.Assignment(pp: lyra.core.statements.ProgramPoint, left: lyra.core.statements.ExpressionAccess, right: lyra.core.statements.Statement)[source]¶ Bases:
lyra.core.statements.StatementAssignment Statements.
https://docs.python.org/3.4/reference/simple_stmts.html#assignment-statements
-
left¶
-
right¶
-
-
class
lyra.core.statements.Call(pp: lyra.core.statements.ProgramPoint, name: str, arguments: typing.List[lyra.core.statements.Statement], typ: lyra.core.types.LyraType)[source]¶ Bases:
lyra.core.statements.Statement-
arguments¶
-
name¶
-
typ¶
-
-
class
lyra.core.statements.DictDisplayAccess(pp: lyra.core.statements.ProgramPoint, typ: lyra.core.types.LyraType, keys: typing.List[lyra.core.statements.Statement], values: typing.List[lyra.core.statements.Statement])[source]¶ Bases:
lyra.core.statements.ExpressionAccessDictionary display access representation. ({k:v, …})
-
keys¶
-
values¶
-
-
class
lyra.core.statements.ExpressionAccess(pp: lyra.core.statements.ProgramPoint, typ: lyra.core.types.LyraType)[source]¶ Bases:
lyra.core.statements.StatementStatement representation for statements that can appear on the left-hand side of assignments.
-
typ¶
-
-
class
lyra.core.statements.ListDisplayAccess(pp: lyra.core.statements.ProgramPoint, typ: lyra.core.types.LyraType, items: typing.List[lyra.core.statements.Statement])[source]¶ Bases:
lyra.core.statements.ExpressionAccessList display access representation.
-
items¶
-
-
class
lyra.core.statements.LiteralEvaluation(pp: lyra.core.statements.ProgramPoint, literal: lyra.core.expressions.Expression)[source]¶ Bases:
lyra.core.statements.StatementLiteral evaluation expression.
-
literal¶
-
-
class
lyra.core.statements.ProgramPoint(line: int, column: int)[source]¶ Bases:
object-
column¶
-
line¶
-
-
class
lyra.core.statements.SetDisplayAccess(pp: lyra.core.statements.ProgramPoint, typ: lyra.core.types.LyraType, items: typing.List[lyra.core.statements.Statement])[source]¶ Bases:
lyra.core.statements.ExpressionAccessSet display access representation.
-
items¶
-
-
class
lyra.core.statements.SlicingAccess(pp: lyra.core.statements.ProgramPoint, typ: lyra.core.types.LyraType, target: lyra.core.statements.Statement, lower: lyra.core.statements.Statement, upper: lyra.core.statements.Statement, stride: lyra.core.statements.Statement = None)[source]¶ Bases:
lyra.core.statements.ExpressionAccessSlicing access representation.
-
lower¶
-
stride¶
-
target¶
-
upper¶
-
-
class
lyra.core.statements.Statement(pp: lyra.core.statements.ProgramPoint)[source]¶ Bases:
objectStatement representation.
https://docs.python.org/3.4/reference/simple_stmts.html
-
pp¶
-
-
class
lyra.core.statements.SubscriptionAccess(pp: lyra.core.statements.ProgramPoint, typ: lyra.core.types.LyraType, target: lyra.core.statements.Statement, key: lyra.core.statements.Statement)[source]¶ Bases:
lyra.core.statements.ExpressionAccessSubscription access representation.
-
key¶
-
target¶
-
-
class
lyra.core.statements.TupleDisplayAccess(pp: lyra.core.statements.ProgramPoint, typ: lyra.core.types.LyraType, items: typing.List[lyra.core.statements.Statement])[source]¶ Bases:
lyra.core.statements.ExpressionAccessTuple display (= expression list with comma, or ()) access representation.
-
items¶
-
-
class
lyra.core.statements.VariableAccess(pp: lyra.core.statements.ProgramPoint, typ: lyra.core.types.LyraType, variable: lyra.core.expressions.VariableIdentifier)[source]¶ Bases:
lyra.core.statements.ExpressionAccessVariable access representation.
-
variable¶
-
Types¶
Lyra’s internal representation of Python types.
| Author: | Caterina Urban |
|---|
-
class
lyra.core.types.BooleanLyraType[source]¶ Bases:
lyra.core.types.LyraTypeBoolean type representation.
-
class
lyra.core.types.ContainerLyraType[source]¶ Bases:
lyra.core.types.LyraTypeContainer type representation.
-
class
lyra.core.types.DictLyraType(key_typ: lyra.core.types.LyraType, val_typ: lyra.core.types.LyraType)[source]¶ Bases:
lyra.core.types.ContainerLyraTypeDictionary type representation.
-
key_typ¶ Type of the dictionary keys.
-
val_typ¶ Type of the dictionary values.
-
-
class
lyra.core.types.FloatLyraType[source]¶ Bases:
lyra.core.types.LyraTypeFloat type representation.
-
class
lyra.core.types.IntegerLyraType[source]¶ Bases:
lyra.core.types.LyraTypeInteger type representation.
-
class
lyra.core.types.ListLyraType(typ: lyra.core.types.LyraType)[source]¶ Bases:
lyra.core.types.SequenceLyraType,lyra.core.types.ContainerLyraTypeList type representation.
-
typ¶ Type of the list elements.
-
-
class
lyra.core.types.SequenceLyraType[source]¶ Bases:
lyra.core.types.LyraTypeSequence type representation.
-
class
lyra.core.types.SetLyraType(typ: lyra.core.types.LyraType)[source]¶ Bases:
lyra.core.types.ContainerLyraTypeSet type representation.
-
typ¶ Type of the set elements.
-
-
class
lyra.core.types.StringLyraType[source]¶ Bases:
lyra.core.types.SequenceLyraTypeString type representation.
-
class
lyra.core.types.TupleLyraType(typs: typing.List[lyra.core.types.LyraType])[source]¶ Bases:
lyra.core.types.SequenceLyraType,lyra.core.types.ContainerLyraTypeTuple type representation.
-
typs¶ Types of the tuple elements.
-