ó
¡¼™\c           @  s~   d  Z  d d l m Z m Z d d l m Z m Z m Z d d l m	 Z	 d d l
 m Z d d l m Z d „  Z d „  Z d	 S(
   sS    Optimizations of the expression tree representation for better CSE
opportunities.
iÿÿÿÿ(   t   print_functiont   division(   t   Addt   Basict   Mul(   t   preorder_traversal(   t   S(   t   default_sort_keyc         C  sì   g  |  j  t ƒ D] } | j ƒ  r | ^ q } | j d t ƒ |  j t d „  | Dƒ ƒ ƒ }  t |  t ƒ rè i  } xa t	 |  j  t ƒ d t ƒD]D } | | k s¬ | j ƒ  rŽ t
 j t j t j | g ƒ | | <qŽ qŽ W|  j | ƒ }  n  |  S(   sD    Replace y - x with -(x - y) if -1 can be extracted from y - x.
    t   keyc         s  s.   |  ]$ } | t  j t j | g ƒ f Vq d  S(   N(   R   t
   _from_argsR   t   NegativeOne(   t   .0t   a(    (    s6   lib/python2.7/site-packages/sympy/simplify/cse_opts.pys	   <genexpr>   s    (   t   atomsR   t   could_extract_minus_signt   sortR   t   xreplacet   dictt
   isinstanceR   t   sortedR   R	   R   t   OneR
   (   t   eR   t   repst   negs(    (    s6   lib/python2.7/site-packages/sympy/simplify/cse_opts.pyt   sub_pre   s    ."*c         C  s°   g  } xv t  |  ƒ D]h } t | t ƒ r | j d t j k r | j d t j k r | j | t j | j d ƒ f ƒ q q Wx* | D]" \ } } |  j	 i | | 6ƒ }  q† W|  S(   s    Replace 1*-1*x with -x.
    i    i   i   (
   R   R   R   t   argsR   R   R
   t   appendR	   R   (   R   t   replacementst   nodet   replacement(    (    s6   lib/python2.7/site-packages/sympy/simplify/cse_opts.pyt   sub_post    s    ,+N(   t   __doc__t
   __future__R    R   t
   sympy.coreR   R   R   t   sympy.core.basicR   t   sympy.core.singletonR   t   sympy.utilities.iterablesR   R   R   (    (    (    s6   lib/python2.7/site-packages/sympy/simplify/cse_opts.pyt   <module>   s   	