You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
from . import rl from .core import do_one, exhaust, switch from .traverse import top_down
def subs(d, **kwargs): """ Full simultaneous exact substitution.
Examples ========
>>> from sympy.strategies.tools import subs >>> from sympy import Basic, S >>> mapping = {S(1): S(4), S(4): S(1), Basic(S(5)): Basic(S(6), S(7))} >>> expr = Basic(S(1), Basic(S(2), S(3)), Basic(S(4), Basic(S(5)))) >>> subs(mapping)(expr) Basic(4, Basic(2, 3), Basic(1, Basic(6, 7))) """
if d: return top_down(do_one(*map(rl.subs, *zip(*d.items()))), **kwargs) else: return lambda x: x
def canon(*rules, **kwargs): """ Strategy for canonicalization.
Explanation ===========
Apply each rule in a bottom_up fashion through the tree. Do each one in turn. Keep doing this until there is no change. """
return exhaust(top_down(exhaust(do_one(*rules)), **kwargs))
def typed(ruletypes): """ Apply rules based on the expression type
inputs: ruletypes -- a dict mapping {Type: rule}
Examples ========
>>> from sympy.strategies import rm_id, typed >>> from sympy import Add, Mul >>> rm_zeros = rm_id(lambda x: x==0) >>> rm_ones = rm_id(lambda x: x==1) >>> remove_idents = typed({Add: rm_zeros, Mul: rm_ones}) """
return switch(type, ruletypes)
|