matchpy
matchpy copied to clipboard
FreeQ equivalent in MatchPy?
Mathematica has FreeQ to test whether an expression contains a symbol. This is very useful in pattern matching for equations as you can specify that, for example, in a * x + b == 0
the variables a
and b
should not contain the variable x
.
In SymPy we are currently using things like CustomConstraint(lambda a, x: not a.has(x))
, where a.has(x)
is a SymPy expression that tells you if x
is contained in the expression tree of a
.
Would it make sense to add an optimized FreeQ
-like tester that checks whether the variable is contained in the expression during the matching iteration of MatchPy?
I think that such a constraint is perhaps too application specific, so I wouldn't add it unless we get more request for it.
To improve this constraint in SymPy and avoid the lambda function, you could implement a subclass of the Constraint class. Is that an acceptable solution for you?