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
predecessors(node: lyra.core.cfg.Node) → typing.Set[lyra.core.cfg.Node][source]

Predecessors of a given node.

Parameters:node – given node
Returns:set of predecessors of the node
successors(node: lyra.core.cfg.Node) → typing.Set[lyra.core.cfg.Node][source]

Successors of a given node.

Parameters:node – given node
Returns:set of successors of the 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.Enum

Kind 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 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.Expression

Attribute 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.BinaryOperation

Binary arithmetic operation expression representation.

https://docs.python.org/3.4/reference/expressions.html#binary-arithmetic-operations

class Operator[source]

Bases: lyra.core.expressions.Operator

Binary arithmetic operator representation.

Add = 1
Div = 4
Mult = 3
Sub = 2
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.BinaryOperation

Binary boolean operation expression representation.

https://docs.python.org/3.6/reference/expressions.html#boolean-operations

class Operator[source]

Bases: lyra.core.expressions.Operator

Binary arithmetic operator representation.

And = 1
Or = 2
reverse_operator()[source]

Returns the reverse operator of this operator.

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.BinaryOperation

Binary comparison operation expression representation.

https://docs.python.org/3.4/reference/expressions.html#comparisons

class Operator[source]

Bases: lyra.core.expressions.Operator

Binary comparison operator representation

Eq = 1
Gt = 5
GtE = 6
In = 9
Is = 7
IsNot = 8
Lt = 3
LtE = 4
NotEq = 2
NotIn = 10
reverse_operator()[source]

Returns the reverse operator of this operator.

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.Operation

Binary operation representation.

class Operator[source]

Bases: enum.IntEnum

Binary operator 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.BinaryOperation

Binary sequence operation expression representation.

class Operator[source]

Bases: lyra.core.expressions.Operator

Binary sequence operator representation.

Concat = 1
class lyra.core.expressions.Call(typ: lyra.core.types.LyraType)[source]

Bases: lyra.core.expressions.Expression

Call 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.Expression

Dictionary 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: object

Expression 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: object

An 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.

generic_visit(expr, *args, **kwargs)[source]
visit(expr, *args, **kwargs)[source]

Visit of an expression.

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_DictDisplay(expr: lyra.core.expressions.DictDisplay)[source]

Visit of dictionary display.

visit_Input(expr: lyra.core.expressions.Input)[source]

Visit of an input call expression.

visit_LengthIdentifier(expr: lyra.core.expressions.LengthIdentifier)[source]

Visit of a sequence or collection length.

visit_ListDisplay(expr: lyra.core.expressions.ListDisplay)[source]

Visit of a list display.

visit_Literal(expr: lyra.core.expressions.Literal)[source]

Visit of a literal expression.

visit_Range(expr: lyra.core.expressions.Range)[source]

Visit of a range call expression.

visit_SetDisplay(expr: lyra.core.expressions.SetDisplay)[source]

Visit of a set display.

visit_Slicing(expr: lyra.core.expressions.Slicing)[source]

Visit of a slicing expression.

visit_Subscription(expr: lyra.core.expressions.Subscription)[source]

Visit of a subscription expression.

visit_TupleDisplay(expr: lyra.core.expressions.TupleDisplay)[source]

Visit of a tuple display.

visit_UnaryArithmeticOperation(expr: lyra.core.expressions.UnaryArithmeticOperation)[source]

Visit of a unary arithmetic operation.

visit_UnaryBooleanOperation(expr: lyra.core.expressions.UnaryBooleanOperation)[source]

Visit of a unary boolean operation.

visit_VariableIdentifier(expr: lyra.core.expressions.VariableIdentifier)[source]

Visit of a variable identifier.

class lyra.core.expressions.Identifier(typ: lyra.core.types.LyraType, name: str)[source]

Bases: lyra.core.expressions.Expression

Identifier 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.Call

Input call representation.

class lyra.core.expressions.Items(typ: lyra.core.types.LyraType, target_dict: lyra.core.expressions.Expression)[source]

Bases: lyra.core.expressions.Call

Items 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.Call

Keys call representation

target_dict
class lyra.core.expressions.LengthIdentifier(variable: lyra.core.expressions.VariableIdentifier)[source]

Bases: lyra.core.expressions.Identifier

Sequence 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.Expression

List 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.Expression

Literal representation.

https://docs.python.org/3.4/reference/expressions.html#literals

val
class lyra.core.expressions.NegationFreeNormalExpression[source]

Bases: lyra.core.expressions.ExpressionVisitor

An expression visitor that:

  1. removes negations using De Morgan’s law, and
  2. puts all boolean comparison operations with =, !=, <, <=, >, and >= in the normal form expr <= 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.

visit_UnaryBooleanOperation(expr: lyra.core.expressions.UnaryBooleanOperation, invert=False)[source]

Visit of a unary boolean operation.

visit_VariableIdentifier(expr: lyra.core.expressions.VariableIdentifier, invert=False)[source]

Visit of a variable identifier.

class lyra.core.expressions.Operation(typ: lyra.core.types.LyraType)[source]

Bases: lyra.core.expressions.Expression

Operation 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.Call

Range 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.Expression

Set 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.Expression

Slicing 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.Expression

Subscription 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.Expression

Tuple 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.UnaryOperation

Unary arithmetic operation expression representation.

https://docs.python.org/3.4/reference/expressions.html#unary-arithmetic-and-bitwise-operations

class Operator[source]

Bases: lyra.core.expressions.Operator

Unary arithmetic operator representation.

Add = 1
Sub = -1
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.UnaryOperation

Unary boolean operation expression representation.

https://docs.python.org/3.4/reference/expressions.html#boolean-operations

class Operator[source]

Bases: lyra.core.expressions.Operator

Unary boolean operator representation.

Neg = 1
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.Operation

Unary operation representation.

class Operator[source]

Bases: enum.IntEnum

Unary operator representation.

expression
operator
class lyra.core.expressions.Values(typ: lyra.core.types.LyraType, target_dict: lyra.core.expressions.Expression)[source]

Bases: lyra.core.expressions.Call

Values call representation

target_dict
class lyra.core.expressions.VariableIdentifier(typ: lyra.core.types.LyraType, name: str)[source]

Bases: lyra.core.expressions.Identifier

Variable 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.Statement

Assignment 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.ExpressionAccess

Dictionary 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.Statement

Statement 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.ExpressionAccess

List display access representation.

items
class lyra.core.statements.LiteralEvaluation(pp: lyra.core.statements.ProgramPoint, literal: lyra.core.expressions.Expression)[source]

Bases: lyra.core.statements.Statement

Literal evaluation expression.

literal
class lyra.core.statements.ProgramPoint(line: int, column: int)[source]

Bases: object

column
line
class lyra.core.statements.Raise(pp: lyra.core.statements.ProgramPoint)[source]

Bases: lyra.core.statements.Statement

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.ExpressionAccess

Set 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.ExpressionAccess

Slicing access representation.

lower
stride
target
upper
class lyra.core.statements.Statement(pp: lyra.core.statements.ProgramPoint)[source]

Bases: object

Statement 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.ExpressionAccess

Subscription 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.ExpressionAccess

Tuple 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.ExpressionAccess

Variable access representation.

variable

Types

Lyra’s internal representation of Python types.

Author:Caterina Urban
class lyra.core.types.BooleanLyraType[source]

Bases: lyra.core.types.LyraType

Boolean type representation.

class lyra.core.types.ContainerLyraType[source]

Bases: lyra.core.types.LyraType

Container type representation.

class lyra.core.types.DictLyraType(key_typ: lyra.core.types.LyraType, val_typ: lyra.core.types.LyraType)[source]

Bases: lyra.core.types.ContainerLyraType

Dictionary 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.LyraType

Float type representation.

class lyra.core.types.IntegerLyraType[source]

Bases: lyra.core.types.LyraType

Integer type representation.

class lyra.core.types.ListLyraType(typ: lyra.core.types.LyraType)[source]

Bases: lyra.core.types.SequenceLyraType, lyra.core.types.ContainerLyraType

List type representation.

typ

Type of the list elements.

class lyra.core.types.LyraType[source]

Bases: object

Type representation.

class lyra.core.types.SequenceLyraType[source]

Bases: lyra.core.types.LyraType

Sequence type representation.

class lyra.core.types.SetLyraType(typ: lyra.core.types.LyraType)[source]

Bases: lyra.core.types.ContainerLyraType

Set type representation.

typ

Type of the set elements.

class lyra.core.types.StringLyraType[source]

Bases: lyra.core.types.SequenceLyraType

String type representation.

class lyra.core.types.TupleLyraType(typs: typing.List[lyra.core.types.LyraType])[source]

Bases: lyra.core.types.SequenceLyraType, lyra.core.types.ContainerLyraType

Tuple type representation.

typs

Types of the tuple elements.

lyra.core.types.resolve_type_annotation(annotation)[source]

Type annotation resolution.

lyra.core.utils.copy_docstring(fromfunc)[source]

Decorator to copy the docstring of fromfunc.

It appends an existing docstring to it.