
\c           @  sq   d  d l  m Z m Z d d l m Z d d l m Z m Z m Z d d l	 m
 Z
 d   Z d   Z d   Z d	 S(
   i(   t   print_functiont   divisioni   (   t   rl(   t   do_onet   exhaustt   switch(   t   top_downc         K  s<   |  r1 t  t t t j t |  j        |  Sd   Sd S(   sR   Full simultaneous exact substitution

    Examples
    ========

    >>> from sympy.strategies.tools import subs
    >>> from sympy import Basic
    >>> mapping = {1: 4, 4: 1, Basic(5): Basic(6, 7)}
    >>> expr = Basic(1, Basic(2, 3), Basic(4, Basic(5)))
    >>> subs(mapping)(expr)
    Basic(4, Basic(2, 3), Basic(1, Basic(6, 7)))
    c         S  s   |  S(   N(    (   t   x(    (    s5   lib/python2.7/site-packages/sympy/strategies/tools.pyt   <lambda>   t    N(   R   R   t   mapR   t   subst   zipt   items(   t   dt   kwargs(    (    s5   lib/python2.7/site-packages/sympy/strategies/tools.pyR      s    +c          O  s   t  t t  t |     |   S(   s    Strategy for canonicalization

    Apply each rule in a bottom_up fashion through the tree.
    Do each one in turn.
    Keep doing this until there is no change.
    (   R   R   R   (   t   rulesR   (    (    s5   lib/python2.7/site-packages/sympy/strategies/tools.pyt   canon   s    c         C  s   t  t |   S(   sQ   Apply rules based on the expression type

    inputs:
        ruletypes -- a dict mapping {Type: rule}

    >>> 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})
    (   R   t   type(   t	   ruletypes(    (    s5   lib/python2.7/site-packages/sympy/strategies/tools.pyt   typed"   s    N(   t
   __future__R    R   R	   R   t   coreR   R   R   t   traverseR   R   R   R   (    (    (    s5   lib/python2.7/site-packages/sympy/strategies/tools.pyt   <module>   s   			