Coverage for src/SymbSyntDec/ground.py: 60%
40 statements
« prev ^ index » next coverage.py v7.5.4, created at 2024-08-11 18:00 +0200
« prev ^ index » next coverage.py v7.5.4, created at 2024-08-11 18:00 +0200
2from functools import singledispatch
4from pylogics_modalities.syntax.base import (
5 And as PLTLAnd,
6 Or as PLTLOr,
7 Formula,
8 Not as PLTLNot,
9 _UnaryOp
10)
11from pylogics_modalities.syntax.pltl import (
12 Atomic as PLTLAtomic,
13 Before,
14 WeakBefore,
15 PropositionalFalse,
16 PropositionalTrue
17)
20State_var = {}
23def ground(formula: object, state_var: dict) -> Formula:
24 global State_var
25 State_var = state_var
26 return ground_operands(formula)
29def ground_operands_unaryop(formula: _UnaryOp):
30 return ground_operands(formula.argument)
33@ singledispatch
34def ground_operands(formula: object) -> Formula:
35 raise NotImplementedError(
36 f"Ground not implemented for object of type {type(formula)}"
37 )
40@ground_operands.register
41def ground_operands_prop_true(formula: PropositionalTrue) -> Formula:
42 return formula
45@ground_operands.register
46def ground_operands_prop_false(formula: PropositionalFalse) -> Formula:
47 return formula
50@ground_operands.register
51def ground_operands_atomic(formula: PLTLAtomic) -> Formula:
52 return formula
55@ground_operands.register
56def ground_operands_and(formula: PLTLAnd) -> Formula:
57 sub = [ground_operands(f) for f in formula.operands]
58 return PLTLAnd(*sub)
61@ground_operands.register
62def ground_operands_or(formula: PLTLOr) -> Formula:
63 sub = [ground_operands(f) for f in formula.operands]
64 return PLTLOr(*sub)
67@ground_operands.register
68def ground_operands_not(formula: PLTLNot) -> Formula:
69 return PLTLNot(ground_operands_unaryop(formula))
72@ground_operands.register
73def ground_operands_yesterday(formula: Before) -> Formula:
74 var = PLTLAtomic(State_var.get(formula))
75 return var
78@ground_operands.register
79def ground_operands_weak_yesterday(formula: WeakBefore) -> Formula:
80 var = PLTLAtomic(State_var.get(formula))
81 return var