ó
¡¼™\c           @  s‚   d  Z  d d l m Z m Z d d l m Z d d l m Z m Z e d „ Z	 e d „ Z
 e d „ Z e d „ Z e d	 „ Z d
 S(   s   Strategies to Traverse a Tree.iÿÿÿÿ(   t   print_functiont   division(   t	   basic_fns(   t   chaint   do_onec           s   t  ˆ ‡  ‡ f d †  ƒ S(   s;   Apply a rule down a tree running it on the top nodes first.c           s   t  t ˆ ˆ  ƒ ˆ  ƒ |  ƒ S(   N(   t   sallt   top_down(   t   expr(   t   fnst   rule(    s8   lib/python2.7/site-packages/sympy/strategies/traverse.pyt   <lambda>
   t    (   R   (   R	   R   (    (   R   R	   s8   lib/python2.7/site-packages/sympy/strategies/traverse.pyR      s    c           s   t  ‡  ‡ f d †  ˆ ƒ S(   s>   Apply a rule down a tree running it on the bottom nodes first.c           s   t  t ˆ ˆ  ƒ ˆ  ƒ |  ƒ S(   N(   R   t	   bottom_up(   R   (   R   R	   (    s8   lib/python2.7/site-packages/sympy/strategies/traverse.pyR
      R   (   R   (   R	   R   (    (   R   R	   s8   lib/python2.7/site-packages/sympy/strategies/traverse.pyR      s    c           s   t  ˆ ‡  ‡ f d †  ƒ S(   s+   Apply a rule down a tree - stop on success.c           s   t  t ˆ ˆ  ƒ ˆ  ƒ |  ƒ S(   N(   R   R   (   R   (   R   R	   (    s8   lib/python2.7/site-packages/sympy/strategies/traverse.pyR
      R   (   R   (   R	   R   (    (   R   R	   s8   lib/python2.7/site-packages/sympy/strategies/traverse.pyt   top_down_once   s    c           s   t  ‡  ‡ f d †  ˆ ƒ S(   s)   Apply a rule up a tree - stop on success.c           s   t  t ˆ ˆ  ƒ ˆ  ƒ |  ƒ S(   N(   R   R   (   R   (   R   R	   (    s8   lib/python2.7/site-packages/sympy/strategies/traverse.pyR
      R   (   R   (   R	   R   (    (   R   R	   s8   lib/python2.7/site-packages/sympy/strategies/traverse.pyt   bottom_up_once   s    c           s=   t  | j d ƒ \ ‰ ‰ ‰  ‰ ‡  ‡ ‡ ‡ ‡ f d †  } | S(   s#   Strategic all - apply rule to args.t   opt   newt   childrent   leafc           s<   ˆ |  ƒ r |  St  ˆ ˆ  |  ƒ ƒ } ˆ ˆ |  ƒ | Œ Sd  S(   N(   t   map(   R   t   args(   R   R   R   R   R	   (    s8   lib/python2.7/site-packages/sympy/strategies/traverse.pyt   all_rl    s    (   R   R   R   R   (   R   t   get(   R	   R   R   (    (   R   R   R   R   R	   s8   lib/python2.7/site-packages/sympy/strategies/traverse.pyR      s    N(   t   __doc__t
   __future__R    R   t   sympy.strategies.utilR   t   sympy.strategies.coreR   R   R   R   R   R   R   (    (    (    s8   lib/python2.7/site-packages/sympy/strategies/traverse.pyt   <module>   s   