diff --git a/matchpy/expressions/functions.py b/matchpy/expressions/functions.py index 36b5385..8c7faad 100644 --- a/matchpy/expressions/functions.py +++ b/matchpy/expressions/functions.py @@ -13,6 +13,8 @@ def is_constant(expression): """Check if the given expression is constant, i.e. it does not contain Wildcards.""" + if isinstance(expression, Expression): + return expression.is_constant if isinstance(expression, Operation): return all(is_constant(o) for o in op_iter(expression)) return not isinstance(expression, Wildcard) @@ -23,6 +25,8 @@ def is_syntactic(expression): Check if the given expression is syntactic, i.e. it does not contain sequence wildcards or associative/commutative operations. """ + if isinstance(expression, Expression): + return expression.is_syntactic if isinstance(expression, (AssociativeOperation, CommutativeOperation)): return False if isinstance(expression, Operation): diff --git a/matchpy/expressions/substitution.py b/matchpy/expressions/substitution.py index f0a0800..7757909 100644 --- a/matchpy/expressions/substitution.py +++ b/matchpy/expressions/substitution.py @@ -23,7 +23,7 @@ VariableReplacement = Union[Tuple['expressions.Expression', ...], Multiset, 'expressions.Expression'] -class Substitution(Dict[str, VariableReplacement]): +class Substitution(dict): """Special :class:`dict` for substitutions with nicer formatting. The key is a variable's name and the value the replacement for it.