lyra.abstract_domains.usage package¶
Submodules¶
Syntactic Usage Abstract Domain¶
Abstract domain to be used for input data usage analysis using syntactic variable dependencies. A program variable can have value U (used), S (scoped), W (written), and N (not used).
| Authors: | Caterina Urban and Simon Wehrli |
|---|
-
class
lyra.abstract_domains.usage.usage_domain.SimpleUsageState(variables: typing.Set[lyra.core.expressions.VariableIdentifier], precursory: lyra.abstract_domains.state.State = None)[source]¶ Bases:
lyra.abstract_domains.stack.Stack,lyra.abstract_domains.state.StateInput data usage analysis state. An element of the syntactic usage abstract domain.
Stack of maps from each program variable to its usage status. The stack contains a single map by default.
Note
Program variables storing lists are abstracted via summarization.
-
_assign(left: lyra.core.expressions.Expression, right: lyra.core.expressions.Expression)[source]¶ Assign an expression to another expression.
Warning
The current state could also be bottom or top.
Parameters: - left – expression to be assigned to
- right – expression to assign
Returns: current state modified by the assignment
-
_assume(condition: lyra.core.expressions.Expression) → lyra.abstract_domains.usage.usage_domain.SimpleUsageState[source]¶ Assume that some condition holds in the current state.
Warning
The current state could also be bottom or top.
Parameters: condition – expression representing the assumed condition Returns: current state modified to satisfy the assumption
-
_output(output: lyra.core.expressions.Expression) → lyra.abstract_domains.usage.usage_domain.SimpleUsageState[source]¶ Outputs something in the current state.
Warning
The current state could also be bottom or top.
Parameters: output – expression representing the output Returns: current state modified by the output
-
_substitute(left: lyra.core.expressions.Expression, right: lyra.core.expressions.Expression) → lyra.abstract_domains.usage.usage_domain.SimpleUsageState[source]¶ Substitute an expression to another expression.
Warning
The current state could also be bottom or top.
Parameters: - left – expression to be substituted
- right – expression to substitute
Returns: current state modified by the substitution
-
enter_if() → lyra.abstract_domains.usage.usage_domain.SimpleUsageState[source]¶ Enter a conditional if statement.
Warning
The current state could also be bottom or top.
Returns: current state modified to enter a conditional if statement
-
enter_loop() → lyra.abstract_domains.usage.usage_domain.SimpleUsageState[source]¶ Enter a loop.
Warning
The current state could also be bottom or top.
Returns: current state modified to enter a loop
-
exit_if() → lyra.abstract_domains.usage.usage_domain.SimpleUsageState[source]¶ Exit a conditional if statement.
Warning
The current state could also be bottom or top.
Returns: current state modified to enter a conditional if statement
-
-
class
lyra.abstract_domains.usage.usage_domain.SimpleUsageStore(variables: typing.Set[lyra.core.expressions.VariableIdentifier])[source]¶ Bases:
lyra.abstract_domains.usage.usage_domain.UsageStoreAn element of a store mapping each program variable to its usage status.
All program variables are not used by default.
Note
Program variables storing lists are abstracted via summarization.
-
_less_equal(other: lyra.abstract_domains.store.Store) → bool¶ Partial order between default lattice elements.
Parameters: other – other lattice element Returns: whether the current lattice element is less than or equal to the other element The comparison is performed point-wise for each variable.
-
_meet(other: lyra.abstract_domains.store.Store)¶ Greatest lower bound between default lattice elements.
Parameters: other – other lattice element Returns: current lattice element modified to be the greatest lower bound The meet is performed point-wise for each variable.
-
_join(other: lyra.abstract_domains.store.Store) → lyra.abstract_domains.store.Store¶ Least upper bound between default lattice elements.
Parameters: other – other lattice element Returns: current lattice element modified to be the least upper bound The join is performed point-wise for each variable.
-
-
class
lyra.abstract_domains.usage.usage_domain.UsageStore(variables, lattices: typing.Dict[lyra.core.types.LyraType, typing.Type[lyra.abstract_domains.lattice.Lattice]])[source]¶ Bases:
lyra.abstract_domains.store.StoreAn element of a store mapping each program variable to its usage status.
All program variables are not used by default.
-
_less_equal(other: lyra.abstract_domains.store.Store) → bool¶ Partial order between default lattice elements.
Parameters: other – other lattice element Returns: whether the current lattice element is less than or equal to the other element The comparison is performed point-wise for each variable.
-
_meet(other: lyra.abstract_domains.store.Store)¶ Greatest lower bound between default lattice elements.
Parameters: other – other lattice element Returns: current lattice element modified to be the greatest lower bound The meet is performed point-wise for each variable.
-
_join(other: lyra.abstract_domains.store.Store) → lyra.abstract_domains.store.Store¶ Least upper bound between default lattice elements.
Parameters: other – other lattice element Returns: current lattice element modified to be the least upper bound The join is performed point-wise for each variable.
-
decrease(other: lyra.abstract_domains.usage.usage_domain.UsageStore) → lyra.abstract_domains.usage.usage_domain.UsageStore[source]¶ Decrease the nesting level by combining lattice elements.
Parameters: other – other lattice element Returns: current lattice element modified to reflect a decreased nesting level The decrease is performed point-wise for each variable.
-
Usage Lattices¶
Lattices to be used for input data usage analysis.
| Authors: | Caterina Urban and Simon Wehrli |
|---|
-
class
lyra.abstract_domains.usage.usage_lattice.UsageLattice(usage: lyra.abstract_domains.usage.usage_lattice.UsageLattice.Status = <Status.N: 0>)[source]¶ Bases:
lyra.abstract_domains.lattice.LatticeUsage lattice:
U / \ S W \ / N
The default lattice element is
N(not used).-
_less_equal(other: lyra.abstract_domains.usage.usage_lattice.UsageLattice) → bool[source]¶ Partial order between lattice elements.
Parameters: other – other lattice element Returns: whether the current lattice element is less than or equal to the other element
-
_meet(other: lyra.abstract_domains.usage.usage_lattice.UsageLattice) → lyra.abstract_domains.usage.usage_lattice.UsageLattice[source]¶ Greatest lower bound between default lattice elements.
Parameters: other – other lattice element Returns: current lattice element modified to be the greatest lower bound
-
_join(other: lyra.abstract_domains.usage.usage_lattice.UsageLattice) → lyra.abstract_domains.usage.usage_lattice.UsageLattice[source]¶ Least upper bound between default lattice elements.
Parameters: other – other lattice element Returns: current lattice element modified to be the least upper bound
-
_widening(other: lyra.abstract_domains.usage.usage_lattice.UsageLattice) → lyra.abstract_domains.usage.usage_lattice.UsageLattice[source]¶ Widening between default lattice elements.
Parameters: other – other lattice element Returns: current lattice element modified to be the widening
-
class
Status[source]¶ Bases:
enum.FlagUsage status.
The current lattice element can be:
U(used): used at the current nesting levelS(scoped): used at a lower nesting levelW(written): used at a lower nesting level and modified at the current nesting levelN(not used): unused
-
N= 0¶
-
S= 2¶
-
U= 3¶
-
W= 1¶
-
bottom()[source]¶ Bottom lattice element.
Returns: current lattice element modified to be the bottom lattice element The bottom lattice element is
N(not used).
-
decrease(other: lyra.abstract_domains.usage.usage_lattice.UsageLattice) → lyra.abstract_domains.usage.usage_lattice.UsageLattice[source]¶ Decrease the nesting level by combining lattice elements.
… | self | other | -> | … | self.decrease(other) |Parameters: other – other lattice element, higher nesting level Returns: current lattice element modified to reflect a decreased nesting level
-
element¶ Current lattice element.
-
increase() → lyra.abstract_domains.usage.usage_lattice.UsageLattice[source]¶ Increase the nesting level.
… | self | -> | … | self | self.increase |Returns: current lattice element modified to reflect an increased nesting level
-
is_bottom()[source]¶ Test whether the lattice element is bottom.
Returns: whether the lattice element is bottom
-
is_scoped()[source]¶ Test whether the lattice element is
S(scoped).Returns: whether the lattice element is S(scoped)
-
is_top()[source]¶ Test whether the lattice element is top.
Returns: whether the lattice element is top
-
is_written()[source]¶ Test whether the lattice element is
W(written).Returns: whether the lattice element is W(written)
-
scoped()[source]¶ Scoped lattice element.
Returns: current lattice element modified to be the scoped lattice element The scoped lattice element is
S(scoped).
-