ó
¡¼™\c           @   sm  d  d l  m Z d  d l Z d  d l m Z d  d l m Z m Z m Z m	 Z	 m
 Z
 m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z d  d l m Z d  d l m Z m Z d  d l  m! Z! d  d l" m# Z# m$ Z$ d  d	 l% m& Z& d  d
 l' m( Z( m) Z) d  d l* m+ Z+ m, Z, m- Z- m. Z. m/ Z/ m0 Z0 d  d l1 m2 Z2 d  d l3 m4 Z4 e d ƒ \ Z5 Z6 Z7 Z8 e d ƒ \ Z9 Z: Z; Z< Z= Z> Z? Z@ ZA ZB ZC ZD ZE d „  ZF d „  ZG d „  ZH d „  ZI d „  ZJ d „  ZK d „  ZL d „  ZM d „  ZN d „  ZO d „  ZP e( d „  ƒ ZQ d „  ZR e( d „  ƒ ZS e( d „  ƒ ZT e( d „  ƒ ZU d  „  ZV d! „  ZW d" „  ZX d# „  ZY d$ „  ZZ d% „  Z[ d& „  Z\ d' „  Z] d( „  Z^ d) „  Z_ d* „  Z` d+ „  Za d, „  Zb d- „  Zc d. „  Zd d/ „  Ze d0 „  Zf d1 „  Zg d2 „  Zh d3 „  Zi e( d4 „  ƒ Zj d5 „  Zk d6 „  Zl d7 „  Zm d8 „  Zn d9 „  Zo d: „  Zp d; „  Zq d S(<   iÿÿÿÿ(   t   reduceN(   t   add(   t   Addt   Mult   Powt   Symbolt   expt   sqrtt   symbolst   sympifyt   cset   Matrixt   St   cost   sint   Eqt   Functiont   Tuplet   CRootOft   IndexedBaset   Idxt	   Piecewiset   O(   t	   count_ops(   t   sub_pret   sub_post(   t   meijerg(   t   cse_maint   cse_opts(   t   subsets(   t   XFAILt   raises(   t   eyet   SparseMatrixt   MutableDenseMatrixt   MutableSparseMatrixt   ImmutableDenseMatrixt   ImmutableSparseMatrix(   t   MatrixSymbol(   t   ranges   w,x,y,zs   x:13c          C   s  t  j d d ƒ }  t t j |  d d ƒ ƒ g  t d d ƒ D] } t d | ƒ ^ q: k s_ t ‚ t  j d d ƒ }  t t j |  d d ƒ ƒ g  t d d ƒ D] } t d | ƒ ^ q™ k s¾ t ‚ t  j ƒ  }  t t j |  d d ƒ ƒ g  t d d ƒ D] } t d | ƒ ^ qò k st ‚ d  S(   Nt   prefixt   yi    i
   s   y%si   s   x%s(   R   t   numbered_symbolst   listt	   itertoolst   isliceR'   R   t   AssertionError(   t   nst   i(    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_numbered_symbols   s    	D	D	c         C   s   |  t  S(   N(   R)   (   t   expr(    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   opt1)   s    c         C   s   |  t  S(   N(   t   z(   R2   (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   opt2-   s    c           C   sÚ   t  j t t d  f g ƒ t t k s+ t ‚ t  j t d  t f g ƒ t k sR t ‚ t  j t d g ƒ t k ss t ‚ t  j t t t f g ƒ t t k sž t ‚ t  j t t d  f t d  f g ƒ t t t k sÖ t ‚ d  S(   N(   NN(	   R   t   preprocess_for_cset   xR3   t   NoneR)   R.   R5   R4   (    (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_preprocess_for_cse1   s    +'!+c           C   sÚ   t  j t t d  f g ƒ t k s' t ‚ t  j t d  t f g ƒ t t k sR t ‚ t  j t d g ƒ t k ss t ‚ t  j t t t f g ƒ t t k sž t ‚ t  j t d  t f d  t f g ƒ t t t k sÖ t ‚ d  S(   N(   NN(	   R   t   postprocess_for_cseR7   R3   R8   R.   R)   R5   R4   (    (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_postprocess_for_cse:   s    '+!+c          C   sù   t  t t t d ƒ t t t ƒ ƒ }  t |  g ƒ \ } } | t t t f g k sZ t ‚ | t t ƒ t d g k s} t ‚ t d g ƒ \ } \ } t | ƒ d k r³ | d k s¹ t ‚ t d g ƒ \ } \ } t | ƒ d k rï | d k sõ t ‚ d  S(   Ni   i*   i    g      à?(	   R   R   R7   R)   R   R
   t   x0R.   t   len(   t   et   substst   reducedt   subst42t   red42t
   subst_halft   red_half(    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_cse_singleD   s    &#$c          C   s'  t  t t t d ƒ t t t ƒ ƒ }  t |  ƒ \ } } | t t t f g k sW t ‚ | t t ƒ t d g k sz t ‚ t t d g g ƒ ƒ \ } } t	 | d t ƒ s± t ‚ t d ƒ \ } \ } t
 | ƒ d k rä | d k sê t ‚ t d ƒ \ } \ } t
 | ƒ d k r| d k s#t ‚ d  S(   Ni   i   i    i*   g      à?(   R   R   R7   R)   R   R
   R<   R.   R   t
   isinstanceR=   (   R>   R?   R@   RA   RB   RC   RD   (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_cse_single2Q   s    &#$c          C   s®   t  t t ƒ }  t |  g ƒ \ } } | g  k s6 t ‚ | t t g k sO t ‚ t d t d f d g  t ƒ t d t d f d	 g  t ƒ } t | ƒ g  | g f k sª t ‚ d  S(
   Ni   i   i   i   i   (   i   i   (   i   (   i   i   (   i   (   R   R7   R)   R
   R.   R   (   R>   R?   R@   t   eq(    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_cse_not_possible_   s    c          C   s   t  t t t t d ƒ t t t t ƒ ƒ }  t |  g ƒ \ } } | t t t t f g k sf t ‚ | t t ƒ t d g k s‰ t ‚ d  S(   Ni   (	   R   R   t   wR7   R)   R   R
   R<   R.   (   R>   R?   R@   (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_nested_substitutionk   s    .#c          C   s›  t  t t t t t  t t t ƒ }  t |  g d t j t j f g ƒ\ } } | t t  t t t f g k sy t	 ‚ | t t t ƒ g k sš t	 ‚ t  t t t t t  t t t ƒ }  t |  g d t j t j f g ƒ\ } } | t t  t t t f g k st	 ‚ | t t t ƒ g k s4t	 ‚ d d t  } | t  | d d | t  }  t |  d t j t j f g ƒg  d g f k s—t	 ‚ d  S(   Nt   optimizationsiÿÿÿÿi   i   i    (
   R7   R)   R4   R   R
   R   R   R   R<   R.   (   R>   R?   R@   t   n(    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_subtraction_opts   s    (''!*''c          C   s˜  t  t t }  t  t t } t |  | g ƒ \ } } | t t  t f g k sS t ‚ | t t t t g k ss t ‚ t t  t t t t g } t | ƒ \ } } t t | ƒ ƒ \ } } | | k sË t ‚ | t t  t t g k së t ‚ t t  t t t  t t t t g } t | ƒ \ } } t t | ƒ ƒ \ } } | | k sNt ‚ | t t t t g k smt ‚ t  t t t t  t t t g } t | ƒ \ } } t t | ƒ ƒ \ } } | t t f t t  t f t	 t t f g k sðt ‚ | t t f t t t f t	 t  t f g k s&t ‚ | t t	 t t	 g k sEt ‚ t t t t  t t t t  t g } t | ƒ t t t f g t t  t t t t  t g f k s²t ‚ t t  t t  t t g ƒ t t  t f g t t t g f k sùt ‚ t t  t t  t g ƒ g  t  t t  t g f k s3t ‚ t t  t t t  t t  t t d g ƒ t t  t f g t t t d t t g f k s”t ‚ d  S(   Ni   (
   R7   R)   R4   RJ   R
   R<   R.   t   reversedt   x1t   x2(   t   e1t   e2R?   R@   t   lt   rsubstst   _(    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_multiple_expressions†   s6      '#66(EG:*c          C   s¢   t  d d t ƒ\ }  } } |  | | |  | g } t | ƒ g  | f k sQ t ‚ |  | | |  | g } t | ƒ t |  | f g t | t g f k sž t ‚ d  S(   Ns   A B Ct   commutative(   R   t   FalseR
   R.   R<   (   t   At   Bt   CRT   (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_non_commutative_cse¤   s
    c          C   sÁ   t  d d t ƒ\ }  } } |  | | |  | g } t | ƒ g  | f k sQ t ‚ |  | | |  | g } t | ƒ g  | f k s‡ t ‚ | | |  | | g } t | ƒ g  | f k s½ t ‚ d  S(   Ns   A B CRX   (   R   RY   R
   R.   (   RZ   R[   R\   RT   (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_bypass_non_commutatives®   s    c          C   s~   t  d d t ƒ\ }  } } t  d d t ƒ} | | |  | | g } t | ƒ | | | f g | |  | g f k sz t ‚ d  S(   Ns   A B CRX   R<   (   R   RY   R
   R.   (   RZ   R[   R\   R<   RT   (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_non_commutative_order¸   s    c    	      C   s  t  t t d t t g ƒ t t t f g t t t g f k sI t ‚ t  t t d t t g ƒ t t t f g t t t g f k s t ‚ t  t d t t t t t d f ƒ t t t f g t t t t t d g f k sï t ‚ t  t t t t t t t t ƒ t t t f g t t t t t t g f k sMt ‚ t d ƒ \ }  } } } } } } } | | d | | d |  | | | |  | | | d f } t  | ƒ t | | f t |  | f g | | | t d t t | | | t g f k st ‚ d  S(   Ni   i   s   a, b, c, d, f, g, j, mi   (	   R
   R7   R)   R<   R.   RJ   R4   R   RP   (	   t   at   bt   ct   dt   ft   gt   jt   mt   exprs(    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_issue_10228À   s    IG'8%9$?	c           C   sJ   t  t t d t t ƒ t t t f g t t t g f k sF t ‚ d  S(   Ni   (   R
   R7   R)   R<   R.   (    (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_powersÎ   s    c           C   sK   t  t t t t t t d d ƒg  t t t t g f k sG t ‚ d  S(   NRL   t   basic(   R
   RJ   R7   R)   R4   R.   (    (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_issue_4498Ó   s    #c           C   sh   t  t d t d t d t d d d ƒt t d f g t t d t t d g f k sd t ‚ d  S(   Ni   i   i   i   RL   Rk   i   (   R
   R7   R<   R.   (    (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_issue_4020Ø   s    +c           C   sN   t  t t t ƒ t t ƒ t t t f g t t ƒ t g f k sJ t ‚ d  S(   N(   R
   R   R7   R<   R.   (    (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_issue_4203Ý   s    c          C   sO   t  t t d t t d d ƒ }  t |  d d ƒg  t g f k sK t ‚ d  S(   Ni   i    RL   Rk   (   R   R7   R
   t   TrueR.   (   R>   (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_issue_6263á   s    $c          C   s³  d d l  m }  t d ƒ } t d ƒ } t |  | t t ƒ t t f d ƒ |  | t t ƒ t t f d ƒ ƒ \ } \ } | g  k s‰ t ‚ | |  | t t ƒ t t f d	 ƒ |  | t t ƒ t t f d
 ƒ k sÕ t ‚ t |  | t t ƒ t t f d t t f ƒ |  | t t ƒ t t f d t t f ƒ ƒ \ } \ } | t t t f g k sWt ‚ | |  | t t ƒ t t f d t f ƒ |  | t t ƒ t t f d t f ƒ k s¯t ‚ d  S(   Niÿÿÿÿ(   t   SubsRd   Re   i    i   (   i    i   (   i    i   (   i    i   (   i    i   (   t   sympyRq   R   R
   R7   R)   R.   R<   (   Rq   Rd   Re   t   name_valR2   (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_dont_cse_tuplesæ   s    .!+(8'c           C   s(  t  d t d t d ƒ t t d f g t d t g f k sF t ‚ t  t d d d t d t d ƒ t t d f t d t f g t t t d g f k s© t ‚ t  d t d d d t d t d ƒ t t d f t d t f g t t d t g f k st ‚ t  t d t d ƒ t d t d ƒ ƒ t t d f g t t ƒ t t ƒ g f k snt ‚ t  t t d ƒ t t d ƒ ƒ t t d f g t t ƒ t t ƒ g f k sÄt ‚ t  t d t d t t d t ƒ t t d f g t t d t t t g f k s"t ‚ t  t	 t d ƒ t d t d t d ƒ ƒ t t d f g t t d t ƒ t	 t ƒ g f k sŒt ‚ t  d d t d t d ƒ t t d f g t t d g f k sÖt ‚ t  t d t t d t ƒ t t d t f g t d t g f k s$t ‚ d  S(   Ni   i   iþÿÿÿ(
   R
   R7   R<   R.   RP   R   R   R)   R4   R   (    (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_pow_invpowü   s$    -%>)>)5!5%9-=-c          C   sÛ   t  d t t  d t d ƒ t t d ƒ }  t |  t t  t d ƒ t d t d t  d g d t j ƒt	 t d f t
 t d f t  t
 f t t  d f g t t t t	 ƒ t t	 ƒ t d t t
 g g k s× t ‚ d  S(   Ni   i   t   postprocess(   R7   R   R)   R   R
   R   R4   R   t   cse_separateR<   RQ   RP   R.   (   RH   (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_postprocess  s
    .2	3c          C   s¿  d d l  m }  m } t d ƒ } t d ƒ } t |  |  t d ƒ d d |  | d |  | d t t ƒ d d |  d | d |  | t t ƒ ƒ | | d t t ƒ ƒ | | ƒ | d |  | d ƒ t t ƒ t t ƒ d d |  d | | t t ƒ ƒ | d |  | t t ƒ ƒ | | ƒ | d |  | d ƒ t t ƒ t t ƒ d d |  d | | d t t ƒ ƒ | d |  | d t t ƒ ƒ | | ƒ | d |  | d ƒ t t ƒ d d |  d | | t t ƒ ƒ | d |  | d t t ƒ ƒ | | ƒ | d |  | d ƒ d d t d ƒ d t d | d d |  | d |  f Œ  } t | ƒ } t	 d |  f t
 | f t t	 t
 f t t d f t t t ƒ f t | | d t ƒ f t t	 f t t d t d | | ƒ | t ƒ f t t | t t ƒ f t | | t ƒ f t t | t t ƒ f g |  |  t d ƒ d t	 | t t t t t t t t t t t d d t d ƒ d t d t
 d | t t f g f } | | k s»t ‚ d  S(	   Niÿÿÿÿ(   R`   Ra   R[   t   Gi   i   iþÿÿÿi    (   t	   sympy.abcR`   Ra   R   R   R   R   R4   R
   R<   RP   RQ   t   x3t   x4t   x5t   x6t   x7t   x8t   x9t   x10R.   (   R`   Ra   R[   Ry   t   tRb   t   ans(    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_issue_4499  s"    -kqy˜CI>A7c          C   sˆ   t  t d d t d d d ƒ }  t |  ƒ g  |  g f k sD t ‚ t t t t t t t ƒ ƒ t t t t t k s„ t ‚ d  S(   Ni   i   i   i   i   (   R   R7   R
   R.   R   R   R)   R4   (   t   r(    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_issue_61691  s    #!c    	      C   sÔ   d }  t  d d |  f ƒ} t  d d |  f ƒ} t  d d |  d f ƒ} t d |  d ƒ } | | d | | | | d | | } d | | d | | } t | | g ƒ \ } } t | ƒ d k sÐ t ‚ d  S(	   Ni   R)   t   shapeR7   t   Dyi   R0   i    (   R   R   R
   R=   R.   (	   t   len_yR)   R7   R‰   R0   t   expr1t   expr2t   replacementst   reduced_exprs(    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_cse_Indexed9  s    *c          C   s|   t  d d d ƒ }  t |  ƒ g  |  g f k s3 t ‚ t d d t ƒ} t  d | | ƒ } t | ƒ g  | g f k sx t ‚ d  S(   NRZ   i   RM   t   integerR[   (   R&   R
   R.   R   Ro   (   RZ   RM   R[   (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_cse_MatrixSymbolF  s
    !c          C   sí   d d l  m }  |  d d d ƒ } |  d d d ƒ } | j | j | | } | j | | | } t | | g ƒ \ } } t | ƒ d k s‘ t ‚ t | | | g ƒ \ } } | s¹ t ‚ t | d | | d g ƒ \ } } | sé t ‚ d  S(	   Niÿÿÿÿ(   R&   RZ   i   R)   i   i    i   (   Rr   R&   t   Tt   IR
   R=   R.   (   R&   RZ   R)   R‹   RŒ   R   RŽ   (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_cse_MatrixExprO  s    $c          C   s¤   t  t t t t t d ƒ f t t t t f ƒ }  t |  ƒ } t t f t t t f g t  t t t t d ƒ f t t t f ƒ g f } | | k s  t	 ‚ d  S(   Ni    (
   R   R4   R7   R)   R   Ro   R
   R<   RP   R.   (   Rd   R„   t
   actual_ans(    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_Piecewise_  s
    62c          C   s‚   t  t ƒ j t d d ƒ t t t d ƒ d }  t |  ƒ g  t t d t ƒ t t d d t t d ƒ g f k s~ t ‚ d  S(   Ni    i   i   i   (   R   R7   t   seriesR   R)   R
   R   R.   (   RH   (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_ignore_order_termsg  s    1c          C   s…   t  t }  t t } t |  ƒ |  t | ƒ | t  t g } t | ƒ \ } } g  | D] } | j t | ƒ ƒ ^ qT | k s t ‚ d  S(   N(	   R<   R)   RQ   R{   R   R
   t   subsRO   R.   (   t   z1t   z2RT   R?   R@   R>   (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_name_conflictl  s
    

'c          C   sŽ   t  t }  t t } t |  ƒ |  t | ƒ | t  t g } t | t d ƒ ƒ \ } } g  | D] } | j t | ƒ ƒ ^ q] | k sŠ t	 ‚ d  S(   Ns   x:10(
   R<   R)   RQ   R{   R   R
   R   R™   RO   R.   (   Rš   R›   RT   R?   R@   R>   (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_name_conflict_cust_symbolst  s
    

'c          C   sl   t  t t ƒ t t t  t t ƒ t t t ƒ }  t t t g } t t ƒ  } t |  d | ƒWd  QXd  S(   NR   (	   R   R7   R)   RJ   R   R4   R   t
   ValueErrorR
   (   RT   t   symt   excinfo(    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_symbols_exhausted_error|  s    4c    	      C   s	  t  d ƒ }  t  d ƒ } |  j d | ƒ }  i  } d | d <d | d <|  j | ƒ } t |  ƒ \ } } x, | D]$ } | d j | ƒ | | d	 j <ql W| d	 j | ƒ } | | k s¹ t ‚ t  d
 ƒ } t | ƒ \ } } | d	 | k sí t ‚ t | ƒ d k  st ‚ d  S(   Nsi   Piecewise((C391 - 1.65, C390 < 0.5), (Piecewise((C391 - 1.65,         C391 > 2.35), (C392, True)), True))sG   Piecewise((2.05*C390**(-1.03), C390 < 0.5), (2.5*C390**(-0.625), True))t   C391g¹²gv­‚æ?t   C390g‘þÉ¥:ð?t   C392i   i    s  Piecewise((Symbol('ON'), Equality(Symbol('mode'), Symbol('ON'))),         (Piecewise((Piecewise((Symbol('OFF'), StrictLessThan(Symbol('x'),         Symbol('threshold'))), (Symbol('ON'), true)), Equality(Symbol('mode'),         Symbol('AUTO'))), (Symbol('OFF'), true)), true))(   R	   R™   R
   t   nameR.   R=   (	   t   C393R¢   t   subt	   ss_answert   substitutionst   new_eqnt   pairt
   cse_answerR2   (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_issue_7840ƒ  s&    		

"	c          C   s¿   x¸ t  t t t f D]¤ }  |  d d t t d d d g ƒ } t t t | g ƒ } t t t f g t |  t d g d d g g ƒ g f } | | k sš t ‚ t	 | d d |  ƒ s t ‚ q Wd  S(   Ni   i    i   iÿÿÿÿ(
   R"   R#   R$   R%   R7   R)   R
   R<   R.   RF   (   t   clsRg   t   resR„   (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_issue_8891¨  s    	"7c          C   sÉ  t  d ƒ \ }  } } } } } |  | | | | |  | | d | | | | d | g } t | ƒ \ } } t d „  | Dƒ ƒ sŒ t ‚ d d l m }	 d d l m }
 t  d ƒ } g  t d ƒ D]1 } t	 g  t d	 ƒ D] } |	 | ƒ ^ qÛ Œ  ^ qÅ } x¯ t
 | d
 ƒ D]ž } t | ƒ } t | ƒ \ } } t d „  | Dƒ ƒ sMt ‚ xH t | ƒ D]: } x1 t t | ƒ ƒ D] } | | j | Œ  | | <qsWqZW| | k st ‚ qWg  t d ƒ D]5 } t g  t d	 ƒ D] } |	 | d  ƒ ^ qÑŒ  ^ q»} xÌ t
 | d
 ƒ D]» } t | ƒ } t | ƒ } \ } } t d „  | Dƒ ƒ sKt ‚ xH t | ƒ D]: } x1 t t | ƒ ƒ D] } | | j | Œ  | | <qqWqXW| g  | D] } |
 | ƒ ^ q k st ‚ qWd  S(   Ns   a b f k l ii   c         s   s(   |  ] } | j  D] } | j Vq q d  S(   N(   t   argst   is_Mul(   t   .0R`   R0   (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pys	   <genexpr>·  s    iÿÿÿÿ(   t   choice(   t
   expand_muls   a:mi   i   i   c         s   s(   |  ] } | j  D] } | j Vq q d  S(   N(   R±   R²   (   R³   R`   R0   (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pys	   <genexpr>Â  s    c         s   s(   |  ] } | j  D] } | j Vq q d  S(   N(   R±   t   is_Add(   R³   R`   R0   (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pys	   <genexpr>Ì  s    (   R   R
   t   anyR.   t   randomR´   t   sympy.core.functionRµ   R'   R   R   R+   RO   R=   R™   R   (   R`   Ra   Rd   t   kRT   R0   t   pt   RR\   R´   Rµ   t   st   ext   rit   was(    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_issue_11230²  s2    ?DHc          C   sþ   d „  }  t  d t d t  d t t  d } t | ƒ t t  d f t t  t f g t  d t t t t t g f k s‚ t ‚ |  | ƒ t  d t d d t  t d } t | ƒ t t d f g t  d t d t  t g f k sð t ‚ |  | ƒ d  S(   Nc         S   se   t  |  ƒ \ } } |  j ƒ  t | ƒ t g  | D] } | d j ƒ  ^ q. ƒ t | ƒ k sa t ‚ d  S(   Ni   (   R
   R   R=   t   sumR.   (   RH   R†   Rb   R0   (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   checkÙ  s    	0i   i   i   i   (   R7   R)   R
   R<   RP   R.   (   RÃ   RH   (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_issue_11577×  s    	&	J
"	9c          C   s6   t  d t  d g }  t |  ƒ g  |  f k s2 t ‚ d  S(   Ni   i   (   R7   R
   R.   (   RH   (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_hollow_rejectioní  s    c          C   sä   t  t ƒ d t d t t d ƒ t  t ƒ d t d t t d ƒ g }  t |  ƒ \ } } t d „  | Dƒ ƒ s€ t d ƒ ‚ t |  d t f ƒ\ } } t d „  | Dƒ ƒ s¾ t d ƒ ‚ t d	 „  | Dƒ ƒ sà t d
 ƒ ‚ d  S(   Ni   i   i   c         s   s$   |  ] \ } } t  | j k Vq d  S(   N(   R)   t   free_symbols(   R³   RV   R§   (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pys	   <genexpr>õ  s    s&   cse failed to identify any term with yt   ignorec         s   s$   |  ] \ } } t  | j k Vq d  S(   N(   R)   RÆ   (   R³   RV   R§   (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pys	   <genexpr>ø  s    s,   Sub-expressions containing y must be ignoredc         s   s/   |  ]% \ } } | t  t d  ƒ d k Vq d S(   i   i    N(   R   R7   (   R³   RV   R§   (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pys	   <genexpr>ù  s    s4   cse failed to identify sqrt(x + 1) as sub-expression(   R   R)   R   R7   R
   R·   R.   (   Rh   t   subst1t   red1t   subst2t   red2(    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_cse_ignoreò  s    L"#c          C   s•   t  t t ƒ t t ƒ t t ƒ t t ƒ t t ƒ g }  t |  d t f ƒ\ } } g  | D] } | j t | ƒ ƒ ^ q^ } | |  k s‘ t ‚ d  S(   NRÇ   (	   RJ   R   R7   R4   R)   R
   R™   RO   R.   (   RT   R?   R@   R>   t   rl(    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_cse_ignore_issue_15002û  s
    $(c    
   
   C   s  d d  l  }  d \ } } t d | ƒ } g  t | ƒ D]> } t t g  t | ƒ D] } | | d | | ^ qN ƒ ^ q5 } | d | d j ƒ  d k s t ‚ t | ƒ \ } } t | ƒ d k sÍ t d ƒ ‚ xI t	 | ƒ D]; \ } }	 |	 j
 t | ƒ ƒ | | j ƒ  d k sÚ t ‚ qÚ Wd  S(	   Niÿÿÿÿi   i   s   x:%di    i   s!   exprs[0] == -exprs[2], i.e. a CSE(   i   i   (   t   timeR   R'   R    R   t   simplifyR.   R
   R=   t	   enumerateR™   RO   (
   RÏ   t   nexprst   ntermsR7   R0   Rf   Rh   t   substt   redR>   (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_cse__performance  s    N$c          C   s“   t  t d t  t t  t t d t  t t g }  t |  ƒ \ } } d t | ƒ t g  | D] \ } } | j ƒ  ^ qZ ƒ t | ƒ k s t ‚ d  S(   Ni   i   i   (   R7   R)   R4   R
   R=   RÂ   R   R.   (   Rh   RÔ   RÕ   Rº   t   v(    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_issue_12070  s    25c          C   sD   t  d t  d t d }  t |  ƒ d d } | |  k s@ t ‚ d  S(   Niüÿÿÿi   i   i    (   R7   R)   R
   R.   (   RH   t   cse_eq(    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_issue_13000  s    c          C   sS   t  t t t t d t ƒ}  t |  ƒ t t t f g t d g f k sO t ‚ d  S(   Nt   evaluatei   (   R   R7   R)   RY   R
   R<   R.   (   RH   (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   test_unevaluated_mul   s    (r   t	   functoolsR    R,   t   operatorR   Rr   R   R   R   R   R   R   R   R	   R
   R   R   R   R   R   R   R   R   R   R   R   R   R¹   R   t   sympy.simplify.cse_optsR   R   t   sympy.functions.special.hyperR   t   sympy.simplifyR   R   t   sympy.utilities.iterablesR   t   sympy.utilities.pytestR   R   t   sympy.matricesR    R!   R"   R#   R$   R%   t   sympy.matrices.expressionsR&   t   sympy.core.compatibilityR'   RJ   R7   R)   R4   R<   RP   RQ   R{   R|   R}   R~   R   R€   R   R‚   t   x11t   x12R1   R3   R5   R9   R;   RE   RG   RI   RK   RN   RW   R]   R^   R_   Ri   Rj   Rl   Rm   Rn   Rp   Rt   Ru   Rx   R…   R‡   R   R‘   R”   R–   R˜   Rœ   R   R¡   R­   R°   RÁ   RÄ   RÅ   RÌ   RÎ   RÖ   RØ   RÚ   RÜ   (    (    (    s<   lib/python2.7/site-packages/sympy/simplify/tests/test_cse.pyt   <module>   st   ˆ.3						
						
	
																			%	
	%								