File tree Expand file tree Collapse file tree 2 files changed +14
-2
lines changed Expand file tree Collapse file tree 2 files changed +14
-2
lines changed Original file line number Diff line number Diff line change @@ -1135,7 +1135,7 @@ def __contains__(self, expr):
1135
1135
if isinstance (expr , self .__class__ ):
1136
1136
return all (arg in self .args for arg in expr .args )
1137
1137
1138
- def simplify (self ):
1138
+ def simplify (self , sort = True ):
1139
1139
"""
1140
1140
Return a new simplified expression in canonical form from this
1141
1141
expression.
@@ -1254,7 +1254,8 @@ def simplify(self):
1254
1254
return args [0 ]
1255
1255
1256
1256
# Commutativity: A & B = B & A, A | B = B | A
1257
- args .sort ()
1257
+ if sort :
1258
+ args .sort ()
1258
1259
1259
1260
# Create new (now canonical) expression.
1260
1261
expr = self .__class__ (* args )
Original file line number Diff line number Diff line change @@ -705,6 +705,17 @@ def test_simplify(self):
705
705
# Elimination
706
706
self .assertEqual (a , ((a & ~ b ) | (a & b )).simplify ())
707
707
708
+ # Commutativity + Non-Commutativity
709
+ sorted_expression = (b & b & a ).simplify ()
710
+ unsorted_expression = (b & b & a ).simplify (sort = False )
711
+ self .assertEqual (sorted_expression , unsorted_expression )
712
+ self .assertNotEqual (sorted_expression .pretty (), unsorted_expression .pretty ())
713
+
714
+ sorted_expression = (b | b | a ).simplify ()
715
+ unsorted_expression = (b | b | a ).simplify (sort = False )
716
+ self .assertEqual (sorted_expression , unsorted_expression )
717
+ self .assertNotEqual (sorted_expression .pretty (), unsorted_expression .pretty ())
718
+
708
719
expected = algebra1 .parse ('(a&b)|(b&c)|(a&c)' )
709
720
result = algebra1 .parse ('(~a&b&c) | (a&~b&c) | (a&b&~c) | (a&b&c)' , simplify = True )
710
721
self .assertEqual (expected , result )
You can’t perform that action at this time.
0 commit comments