Skip to content

Commit fc3d0d0

Browse files
committed
fix transformer for parentheses
1 parent 6fd8dfb commit fc3d0d0

File tree

2 files changed

+53
-2
lines changed

2 files changed

+53
-2
lines changed

lf_toolkit/parse/set/transformer.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,12 @@
1111

1212
class SymPyTransformer(SetTransformer):
1313
def Group(self, expr):
14-
return (expr,)
14+
# TODO: sympy has no concept of parentheses for sets,
15+
# so we just return the child expression for now.
16+
# If we want to check correctness of parenthesis,
17+
# we probably need to check the syntax tree we're
18+
# building, not using sympy at all.
19+
return expr
1520

1621
def Complement(self, expr):
1722
return Complement(UniversalSet, expr)

tests/parse/set/transformer_test.py

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,53 @@ def sympy_transformer():
4949
Complement(Term("A")),
5050
SymComplement(SymUniversalSet, SymFiniteSet(SymSymbol("A"))),
5151
),
52-
(Group(Term("A")), (SymFiniteSet(SymSymbol("A")),)),
52+
(Group(Term("A")), SymFiniteSet(SymSymbol("A"))),
53+
# ((A \ B) n (C \ (A u B)))'
54+
(
55+
# \overline{(A \setminus B) \cap (C \setminus (A \cup B))}
56+
Complement(
57+
Intersection(
58+
Difference(Term("A"), Term("B")),
59+
Difference(Term("C"), Union(Term("A"), Term("B"))),
60+
)
61+
),
62+
SymComplement(
63+
SymUniversalSet,
64+
SymIntersection(
65+
SymComplement(
66+
SymFiniteSet(SymSymbol("A")), SymFiniteSet(SymSymbol("B"))
67+
),
68+
SymComplement(
69+
SymFiniteSet(SymSymbol("C")),
70+
SymUnion(
71+
SymFiniteSet(SymSymbol("A")), SymFiniteSet(SymSymbol("B"))
72+
),
73+
),
74+
),
75+
),
76+
),
77+
# A' u (B' n C') u (C n B)
78+
(
79+
Union(
80+
Complement(Term("A")),
81+
Union(
82+
Group(Intersection(Complement(Term("B")), Complement(Term("C")))),
83+
Group(Intersection(Term("C"), Term("B"))),
84+
),
85+
),
86+
SymUnion(
87+
SymComplement(SymUniversalSet, SymFiniteSet(SymSymbol("A"))),
88+
SymUnion(
89+
SymIntersection(
90+
SymComplement(SymUniversalSet, SymFiniteSet(SymSymbol("B"))),
91+
SymComplement(SymUniversalSet, SymFiniteSet(SymSymbol("C"))),
92+
),
93+
SymIntersection(
94+
SymFiniteSet(SymSymbol("C")), SymFiniteSet(SymSymbol("B"))
95+
),
96+
),
97+
),
98+
),
5399
],
54100
)
55101
def test_sympy_transformer(

0 commit comments

Comments
 (0)