
    sgc                        d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZmZ d dlmZ d dlmZ d dl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)m*Z*m+Z+ d dl,m-Z- d dl.m/Z/ d dl0m1Z1 d dl2m3Z3 d dl4m5Z5m6Z6 d dlm7Z7 d dl8m9Z9m:Z: d dl;m<Z< d dl=m>Z>m?Z? d dl@mAZA d dlBmCZCmDZD d d lEmFZFmGZGmHZHmIZI d d!l'mJZJ  ed"      \  ZKZLZMZN ed#      \  ZOZPZQZRZSZTZUZVZWZXZYZZZ[d$ Z\d% Z]d& Z^d' Z_d( Z`d) Zad* Zbd+ Zcd, Zdd- Zed. ZfeCd/        Zgd0 ZheCd1        ZieCd2        ZjeCd3        Zkd4 Zld5 Zmd6 Znd7 Zod8 Zpd9 Zqd: Zrd; Zsd< Ztd= Zud> Zvd? Zwd@ ZxdA ZydB ZzdC Z{dD Z|dE Z}dF Z~dG ZdH ZeCdI        ZdJ ZdK ZdL ZdM ZdN ZdO ZdP ZdQ ZdR ZdS ZdT ZdU ZdV ZdW ZdX ZdY ZdZ ZeCd[        Zd\ ZeCd]        Zd^ ZeCd_        Zd` Zda Zdb Zy)c    )reduceN)add)MatrixSolve)Add)Tuple)UnevaluatedExpr)Function)Mul)Pow)Eq)S)Symbolsymbols)sympify)exp)sqrt)	Piecewise)cossin)Matrix)InverseMatAddMatMul	Transpose)CRootOf)Ocse)signsimp)IdxIndexedBase	count_ops)sub_presub_post)meijerg)cse_maincse_opts)subsets)XFAILraises)MutableDenseMatrixMutableSparseMatrixImmutableDenseMatrixImmutableSparseMatrix)MatrixSymbolzw,x,y,zzx:13c                  X   t        j                  d      } t        t        j                  | dd            t        dd      D cg c]  }t        d|z         c}k(  sJ t        j                  d      } t        t        j                  | dd            t        dd      D cg c]  }t        d|z         c}k(  sJ t        j                         } t        t        j                  | dd            t        dd      D cg c]  }t        d|z         c}k(  sJ y c c}w c c}w c c}w )Ny)prefixr   
   zy%s   zx%s)r'   numbered_symbolslist	itertoolsisliceranger   )nsis     P/var/www/html/venv/lib/python3.12/site-packages/sympy/simplify/tests/test_cse.pytest_numbered_symbolsr>   +   s#   		"	"#	.B	  
Ar 38B<@auqy)@A A A		"	"#	.B	  
B 49"bMBq	*BC C C		"	"	$B	  
Ar 38B<@auqy)@A A A A C As   D#D" D'c                     | t         z   S N)r2   exprs    r=   opt1rC   9   s    !8O    c                     | t         z  S r@   )zrA   s    r=   opt2rG   =   s    6MrD   c                     t        j                  t        t        d fg      t        t        z   k(  sJ t        j                  t        d t        fg      t        k(  sJ t        j                  t        dg      t        k(  sJ t        j                  t        t        t
        fg      t        t        z   k(  sJ t        j                  t        t        d ft
        d fg      t        t        z   t        z  k(  sJ y N)NN)r'   preprocess_for_csexrC   r2   rG   rF    rD   r=   test_preprocess_for_cserM   A   s    &&qD$<.9QUBBB&&qD$<.9Q>>>&&q<.9Q>>>&&qD$<.9QUBBB&&	T4L4,')-.UAI6 6 6rD   c                     t        j                  t        t        d fg      t        k(  sJ t        j                  t        d t        fg      t        t        z   k(  sJ t        j                  t        dg      t        k(  sJ t        j                  t        t        t
        fg      t        t        z  k(  sJ t        j                  t        d t        fd t
        fg      t        t        z  t        z   k(  sJ y rI   )r'   postprocess_for_cserK   rC   r2   rG   rF   rL   rD   r=   test_postprocess_for_cserP   J   s    ''T4L>:a???''T4L>:a!eCCC''L>:a???''T4L>:acAAA''	T4L4,'),-aC!G4 4 4rD   c                     t        t        t        t        z   d      t	        t        t        z               } t        | g      \  }}|t        t        t        z   fgk(  sJ |t	        t              t        dz  z   gk(  sJ t        dg      \  }\  }t        |      dk(  r|dk(  sJ t        dg      \  }\  }t        |      dk(  r|dk(  sJ y )N   *   r         ?)r   r   rK   r2   r   r   x0lenesubstsreducedsubst42red42
subst_halfred_halfs          r=   test_cse_singler_   T   s    CAqM4A;'A1#hOFGr1q5k]"""tBx"a%'((((RD	GXew<1",,!3%jJz?aHO33OrD   c                     t        t        t        t        z   d      t	        t        t        z               } t        |       \  }}|t        t        t        z   fgk(  sJ |t	        t              t        dz  z   gk(  sJ t        t        dgg            \  }}t        |d   t              sJ t        d      \  }\  }t        |      dk(  r|dk(  sJ t        d      \  }\  }t        |      dk(  r|dk(  sJ y )NrR      r   rS   rT   )
r   r   rK   r2   r   r   rU   r   
isinstancerV   rW   s          r=   test_cse_single2rc   a   s    CAqM4A;'A!fOFGr1q5k]"""tBx"a%'((((&1#-(OFGgaj&)))BGXew<1",,!#hJz?aHO33OrD   c                  
   t        t        t              } t        | g      \  }}|g k(  sJ |t        t        z   gk(  sJ t	        dt        dfdg t              t	        dt        dfdg t              z   }t        |      g |gfk(  sJ y )N)ra   rR      )   )ra      )r   rK   r2   r   r&   )rX   rY   rZ   eqs       r=   test_cse_not_possibleri   p   s    Aq	A1#hOFGR<<q1ug
&1a&$A
.
&1a&$A
./Br7rB4j   rD   c                  &   t        t        t        t        z  t        z   d      t        t        t        z  t        z               } t        | g      \  }}|t        t        t        z  t        z   fgk(  sJ |t        t              t        dz  z   gk(  sJ y NrR   )r   r   wrK   r2   r   r   rU   )rX   rY   rZ   s      r=   test_nested_substitutionrm   |   sq    C!aOT!A#']+A1#hOFGr1Q37m_$$$tBx"a%'((((rD   c                     t         t        z
  t        t        z
  z  t        t         t        z
  t        t        z
  z        z   } t	        | gt
        j                  t
        j                  fg      \  }}|t        t         t        z
  t        t        z
  z  fgk(  sJ |t         t        t               z   gk(  sJ t         t        z
   t        t        z
  z  t        t         t        z
   t        t        z
  z        z   } t	        | gt
        j                  t
        j                  fg      \  }}|t        t         t        z
  t        t        z
  z  fgk(  sJ |t        t        t              z   gk(  sJ ddt         z  z   }|t         z  | dz  z  d|z  t         z  z
  } t	        | t
        j                  t
        j                  fg      g dgfk(  sJ t	        t        t         z   t        z   t        z   t        t        z
  t        z
  z  t        t         z   dz  z        t        t        t         z   ft        t        t        z   fgt        t        z
  t        t        z   z  t        dz  z  gfk(  sJ y )Noptimizationsra   rR   r   rg   )rK   r2   rF   r   r   r(   r$   r%   rU   rl   x1)rX   rY   rZ   ns       r=   test_subtraction_optrt      s   	
QQ#q1uq1uo..A	
X--x/@/@ABDOFGrAEAE?+,,,,sS"X~&&&&
a%!a%3QxQ/00A	
X--x/@/@ABDOFGrAEAE?+,,,,rCG|n$$$
QqSA	!aR!Gac!eAq("2"2H4E4E!F GH	aS	  QQQ+a!eaZ78q1u+AE{	#q2vR&8Q&>%?@A A ArD   c                     t         t        z   t        z  } t         t        z   t        z  }t	        | |g      \  }}|t
        t         t        z   fgk(  sJ |t
        t        z  t
        t        z  gk(  sJ t        t         z  t        z  t        z   t        t        z  g}t	        |      \  }}t	        t        |            \  }}||k(  sJ |t        t         t
        z  z   t
        gk(  sJ t        t         z  t        z  t        t         z  t        z  t        z   t        t        z  g}t	        |      \  }}t	        t        |            \  }}||k(  sJ |t        t        t        z   t
        gk(  sJ t         t        z
  t        t        z
  z  t         t        z
  t        t        z
  g}t	        |      \  }}t	        t        |            \  }}|t
        t         ft        t         t
        z   ft        t
        t        z   fgk(  sJ |t
        t         ft        t
        t        z   ft        t         t
        z   fgk(  sJ |t        t        z  t        t        gk(  sJ t        t        z  t        z   t         z   t        z   t        z   t        t         z  t        z  g}t	        |      t
        t        t        z  fgt        t         z   t
        z   t        z   t        z   t         t
        z  gfk(  sJ t	        t         t        z   t         t        z   t        z   g      t
        t         t        z   fgt
        t        t
        z   gfk(  sJ t	        t         t        z   t         t        z   g      g t         t        z   t         t        z   gfk(  sJ t	        t         t        z  t        t         t        z  z   t         t        z  t        z  dz   g      t
        t         t        z  fgt
        t        t
        z   dt
        t        z  z   gfk(  sJ y )Nrg   )	rK   r2   rF   rl   r   rU   reversedrr   x2)e1e2rY   rZ   lrsubsts_s          r=   test_multiple_expressionsr}      s   
a%B
a%B2r(mOFGr1q5k]"""r!tRTl"""	
1QAaCA!fOFGXa[!JGQWq1R4xn$$$	
1Q!A	1Q3A!fOFGXa[!JGQWr262&&&&
a%!a%!a%Q'A!fOFGXa[!JGQrA2hQVr26l;;;;QBx"b1fAF|<<<<r"ub"o%%%	
1q1q1	ac!e$Aq6AaCykAEBJNQ$6"#=>>>>Aq1uqy!"QU}r1r6l&CCCCAq1u~2Aq1u~"6666!Q1Wac!eai()qs)r1r61r!t8,-. . .rD   c                      t        dd      \  } }}| |z  |z  | |z  g}t        |      g |fk(  sJ | |z  |z  | |z  g}t        |      t        | |z  fgt        |z  t        gfk(  sJ y NA B CFcommutative)r   r   rU   ABCrz   s       r=   test_non_commutative_cser      s}    g51GAq!	
1Q!Aq6b!W	
1Q!Aq6AaCykBqD":....rD   c                      t        dd      \  } }}| |z  |z  | |z  g}t        |      g |fk(  sJ | |z  |z  | |z  g}t        |      g |fk(  sJ ||z  | |z  |z  g}t        |      g |fk(  sJ y r   r   r   r   s       r=   test_bypass_non_commutativesr      s    g51GAq!	
1Q!Aq6b!W	
1Q!Aq6b!W	
1ac!eAq6b!WrD   c                      t        dd      \  } }}t        dd      }||z   | ||z   z  g}t        |      |||z   fg|| |z  gfk(  sJ y )Nr   Fr   rU   r   )r   r   r   rU   rz   s        r=   test_non_commutative_orderr      s^    g51GAq!	5	)B	
1a1gAq6AaCykB":....rD   c                  N   t        t        t        dz  z  t        t        z  z   g      t        t        t        z  fgt        t        z  t        z   gfk(  sJ t        t        t        z   dt        z  t        z   g      t        t        t        z   fgt        t        t        z   gfk(  sJ t        t        dt        z  z   t        z   t
        z   t        t        z   dz   f      t        t        t        z   fgt        t        z   t        z   t
        z   t        dz   gfk(  sJ t        t        t        z   t        z   t
        z   t        t        z
  z  t        t        z   z        t        t        t        z   fgt        t        z   t
        z   t        t        z
  z  t        z  gfk(  sJ t        d      \  } }}}}}}}||dz  z  |z  |z  d| z  |z  |z  |z  | |z  |z  |dz  z  f}t        |      t        ||z  ft        | |z  fg||z  |z  t        z  dt        z  t        z  ||z  |z  t        z  gfk(  sJ y )NrR   ra   za, b, c, d, f, g, j, mre   )r   rK   r2   rU   rl   rF   r   rr   )	abcdfgjmexprss	            r=   test_issue_10228r      s   !Q$1~R1I;A"<<<<AqsQw r1q5k]RRL$AAAAAaC!aQ+,
a!eQ
QQ/11 1 1 1QQQ'!a%01
a!ea!a!e,R/062 2 2 2$%=>Aq!Q1aq!tVAXaZ1QqAaCE!Q$J/Eu:
acR1I1Qr1R47AaCE"H =   rD   c                      t        t        t        dz  z  t        t        z  z         t        t        t        z  fgt        t        z  t        z   gfk(  sJ y rk   )r   rK   r2   rU   rL   rD   r=   test_powersr      s>    qAv!|2qs)r!tbyk ::::rD   c                      t        t        t        t        z
  z  t        t        t        z
  z  z   d      g t        t        z
  t        t        z
  z  gfk(  sJ y )Nbasicro   )r   rl   rK   r2   rF   rL   rD   r=   test_issue_4498r      sG    q!a%y1a!e9$G<	q1uq1uo     rD   c                      t        t        dz  t        dz  z   t        dz  z   t        dz  z   d      t        t        dz  fgt        t        dz  t        z   t        z   dz   z  gfk(  sJ y )Nrf   re   rg   rR   r   ro   ra   )r   rK   rU   rL   rD   r=   test_issue_4020r      sd    q!tad{QT!AqD(@!Q$ZL2q!tax"}q01234 4 4rD   c                      t        t        t        t        z        t        t        z  z        t        t        t        z  fgt        t              t        z  gfk(  sJ y r@   )r   r   rK   rU   rL   rD   r=   test_issue_4203r      s>    s1a4yA~RAJ<#b'"*">>>>rD   c                      t        t        t         dz   z  t        t        dz
  z  z   d      } t        | d      g dgfk(  sJ y )Nra   r   r   ro   T)r   rK   r   )rX   s    r=   test_issue_6263r      s@    
1qb1f:1q5	!1%Aq(R$L888rD   c                     t        d      } t        dd      }t        | |dz  z  | |dz  |dz  z
  z  z         d   d   }|j                  }t        |      t        |D ch c]  }|j                   c}      k(  sJ y c c}w )Nr   rU   T)realrR   re   rq   )r   r   free_symbolsrV   name)r   rK   cse_exprfreer<   s        r=   test_issue_25043r      s|    A4 A1QT6Aq!tad{O+,R04H  Dt9T2QVV233332s   A=
c            
      L   ddl m}  t        d      }t        d      }t         |  |t        t
              t        t
        fd       |  |t        t
              t        t
        fd      z         \  }\  }|g k(  sJ | |  |t        t
              t        t
        fd       |  |t        t
              t        t
        fd      z   k(  sJ t         |  |t        t
              t        t
        fdt        t
        z   f       |  |t        t
              t        t
        fdt        t
        z   f      z         \  }\  }|t        t        t
        z   fgk(  sJ | |  |t        t
              t        t
        fdt        f       |  |t        t
              t        t
        fdt        f      z   k(  sJ y )Nr   )Subsr   r   r   ra   )sympy.core.functionr   r	   r   rK   r2   rU   )r   r   r   name_valrB   s        r=   test_dont_cse_tuplesr     sa   (AAQq!Wq!ff%
qAwA
'	()Hgt r>>D1a1a&&11Q7QFF+, - - - Qq!Wq!fq!a%j)
qAwAAE

+	,-Hgt QU}$$$4!Q!Q!R1Qq!Wq!fq"g&' ' ' 'rD   c            	         t        dt        dz  z  t        dz  z         t        t        dz  fgt        dt        z  z   gfk(  sJ t        t        dz  ddt        dz  z  z   t        dz  z  z         t        t        dz  ft        dt        z  fgt        t        t        dz   z  z   gfk(  sJ t        dt        dz  z  ddt        dz  z  z   t        dz  z  z         t        t        dz  ft        dt        z  fgt        t        dz   z  t        z   gfk(  sJ t        t	        dt        dz  z        t        dt        dz  z        z         t        t        dz  fgt        t              t	        t              z   gfk(  sJ t        t	        t        dz        t        t        dz        z         t        t        dz  fgt        t              t	        t              z   gfk(  sJ t        t        dt        dz  z   z  t        t        dz  z  t        z  z         t        t        dz  fgt        t        dz   z  t        t        t        z  z  z   gfk(  sJ t        t        t        dz        t        dz  t	        dt        dz  z        z  z         t        t        dz  fgt        t	        dt        z        z  t        t              z   gfk(  sJ t        ddt        dz  z  z   t        dz  z        t        t        dz  fgt        t        dz   z  gfk(  sJ t        t        dt        z  z  t        dt        z  z  z         t        t        dt        z  z  fgt        dt        z  z   gfk(  sJ y )Nra   rR   )	r   rK   rU   rr   r   r   r2   rF   r   rL   rD   r=   test_pow_invpowr     s   qAv1}q!t*QrT	{#$ $ $q!tq1QT6z1a4''(q!t*r1R4j	!BR!V$4#567 7 7qAvQq!tVQT))*q!t*r1R4j	!BQK"$4#567 7 7s1QT6{S1a4[()q2w-3r7SW,-./ / /s1a4y3q!t9$%q!t*B#b')*+, , ,q!ad(|a1fQh&'q!t*26
Q1X-./0 0 0s1a4y1a4AadF++,q!t*3qt9s2w./01 1 1AadF
AqD !q2w-2rAv;-() ) )q1Q3x!bd)#$q1Q3x.	B2I;'( ( (rD   c                     t         dz   t        t         dz   t        dz   z        z   t        t        dz         z   } t	        | t        t         t        dz         t        dz
  t        dz   t         dz   z  gt        j                        t        t        dz   ft        t        dz   ft         t        ft        t         dz   fgt        t        t        t        z        z   t        t              z   t        dz
  t        t        z  ggk(  sJ y )Nra   rR   postprocess)rK   r   r2   r   r   r   rF   r'   cse_separaterU   rw   rr   rh   s    r=   test_postprocessr   ,  s    
a%#q1uq1uo&
&QU
3BBq!a%L!a%!a%!a%9))+q1u+AE{QGb!a%[	9	c"R%j3r7	"AE2b51	33 3 3rD   c                  l   ddl m} m} t        d      }t        d      }t	        | | t
        j                  z   d| z  |d| z  |z
  dz   t        t              dz  d| z  dz   z   |d| z  |z
  t        t                    z   ||dz
  t        t                    z   ||      z   |d| z  |z
  dz         z  t        t              t        t              dz  d| z  dz   z  z   ||t        t                    z   |d| z  |z
  t        t                    z   ||      z   |d| z  |z
  dz         z  t        t              t        t              dz  d| z  dz   z  z   ||dz
  t        t                    z   |d| z  |z
  dz   t        t                    z   ||      z   |d| z  |z
  dz         z  t        t              dz  d| z  dz   z   ||t        t                    z   |d| z  |z
  dz   t        t                    z   ||      z   |d| z  |z
  dz         z  ddt
        j                  t        dz  | dz   d| z  |z   d| z  f }t        |      }t        d| z  ft        | t        z   ft        t        dz   ft        |dz
  ft        t        t              ft         |t        t              ft         t        dz  dt        z
  z   ||      z   |t              z  ft"        t          |t        t              z  ft$         ||t              ft&        t          |t        t              z  fg
| | t
        j                  z   t        |t        t        t"        z  t        t"        z  t$        z  t        t        z  t&        z  t$        t&        z  ddt
        j                  t        dz  t         t         t         fgf}||k(  sJ y )Nr   )r   r   r   GrR   ra   r   )	sympy.abcr   r   r	   r   r   Halfr   rF   r   rU   rr   rw   x3x4x5x6x7x8x9)r   r   r   r   tr   anss          r=   test_issue_4499r   4  sZ   AA	
AJ!Q!a!d1gai2a4!8-DQqs	H
7F .a!eT!W%.&&'d.++,QqS1Wq[>.:QabdQh''!T!W5a!aQ7 	1	!a!n	%&*1gtAwqyBqD1H.E&EaAQG '1Q37Q;Q('))*1'../!a!n'=	abdQh!T!W-a!a!Q/ 	1	!a!n	%&'AFFAaC!aA
1		A 	AA
acR!bMBQ<"a!er47m
aBi21B/!4QrU:;b"Qr2Y,=O
a2h"b2rl+	- QZQBrE2b58RU2Xr"u
Q!bS2#s
, 	-	.C !8O8rD   c                  &   t        t        dz  dt        dz  z  z
  dz
  d      } t        |       g | gfk(  sJ t        t	        t         t
        z
  t        z  t        z
  t
        z
              t         t        t
        z   z  t        z
  t
        z
  k(  sJ y )N   re   rf   rR   ra   )r   rK   r   r%   r$   r2   rF   )rs    r=   test_issue_6169r   L  s{    1qAv!1%Aq6b1#Y GaR!VQJNQ./0QBAJNQ4FFFFrD   c                      d} t        d| f      }t        d| f      }t        d| dz
        }||dz      ||   z
  ||dz      ||   z
  z  }d||dz      ||   z
  z  }t        ||g      \  }}t        |      dkD  sJ y )Nrf   r2   )shaperK   r<   ra   r   )r!   r    r   rV   )len_yr2   rK   r<   expr1expr2replacementsreduced_exprss           r=   test_cse_Indexedr   T  s    ECx(ACx(ACqAqsVAaD[1QqS6!A$;'Eq1vad{OE"%uen"5L-|q   rD   c                     t        ddd      } t        |       g | gfk(  sJ t        dd      }t        d||      }t        |      g |gfk(  sJ t        | d   | d   z        g | d   | d   z  gfk(  sJ t        | d   | d	   z  | d   | d	   z  | d
   z  z         t        | d   | d	   z  fgt        | d
   z  t        z   gfk(  sJ y )Nr   rg   rs   T)integerr   r   )r   r   r   )r   rR   )r0   r   r   rU   )r   rs   r   s      r=   test_cse_MatrixSymbolr   `  s    S!QAq6b1#YT"AS!QAq6b1#Yqtad{QqT!A$YK0000qvaf}qvaf}QsV3342qwqw:O9PSUVWX\V]S]`bSbRc8ddddrD   c                  H   t        ddd      } t        ddd      }| j                  | z  j                  | z  |z  }| j                  | z  | z  |z  }t        ||g      \  }}t	        |      dkD  sJ t        ||z   |g      \  }}|sJ t        | dz  | | dz  z   g      \  }}|sJ y )Nr   rg   r2   ra   r   rR   )r0   TIr   rV   )r   r2   r   r   r   r   s         r=   test_cse_MatrixExprr   m  s    S!QAS!QASSUIIMAESSUaK!OE"%uen"5L-|q   "%uu}e&<"=L-<"%q!tQAX&6"7L-<rD   c                  D   t        t         t        t        z  z   t	        t        d      ft         t        t        z  z
  df      } t        |       }t        t        t        z  fgt        t        t        z
  t	        t        d      ft         t        z
  df      gf}||k(  sJ y )Nr   T)r   rF   rK   r2   r   r   rU   )r   r   
actual_anss      r=   test_Piecewiser   }  s    A2!8R1X&!ac4(89A
a&C!9+	BFBq!H%R	78:J*rD   c                  (   t        t              j                  t        dd      t        t        t        dz  z         z   dz
  } t        |       g t        t        dz  t        z         t        z   t        dz  dz  z   t        t        dz        z   gfk(  sJ y )Nr   rg   ra   rR   )r   rK   seriesr   r2   r   r   r   s    r=   test_ignore_order_termsr     ss    	Qq1	AadF	+a	/Br7rC1qMA-1Q61a4@ABBBBrD   c                     t         t        z   } t        t        z   }t	        |       | z   t	        |      |z   t         t        z   g}t        |      \  }}|D cg c]  }|j                  t        |             c}|k(  sJ y c c}w r@   )rU   r2   rw   r   r   r   subsrv   z1z2rz   rY   rZ   rX   s         r=   test_name_conflictr     sk    	aB	bB	R2s2w|R"W-A!fOFG.56AFF8F#$6!;;;6s   !A?c                     t         t        z   } t        t        z   }t	        |       | z   t	        |      |z   t         t        z   g}t        |t        d            \  }}|D cg c]  }|j                  t        |             c}|k(  sJ y c c}w )Nzx:10)	rU   r2   rw   r   r   r   r   r   rv   r   s         r=   test_name_conflict_cust_symbolsr     sr    	aB	bB	R2s2w|R"W-A!WV_-OFG.56AFF8F#$6!;;;6s   !B	c                  ,   t        t        t        z         t        z   t        z   t        t        t        z         z   t	        t        t        z         z   } t        t        t
        g}t        t              5  t        | |       d d d        y # 1 sw Y   y xY w)N)r   )	r   rK   r2   rl   r   rF   r+   
ValueErrorr   )rz   syms     r=   test_symbols_exhausted_errorr     sc    AaC
1S1Xc!A#h&Aa)C	
	 As  s   3B

Bc                     t        d      } t        d      }| j                  d|      } i }d|d<   d|d<   | j                  |      }t        |       \  }}|D ]&  }|d   j                  |      ||d	   j                  <   ( |d	   j                  |      }||k(  sJ t        d
      }t        |      \  }}|d	   |k(  sJ t	        |      dk  sJ y )NziPiecewise((C391 - 1.65, C390 < 0.5), (Piecewise((C391 - 1.65,         C391 > 2.35), (C392, True)), True))zGPiecewise((2.05*C390**(-1.03), C390 < 0.5), (2.5*C390**(-0.625), True))C391ggv?C390gɥ:?C392ra   r   a  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   r   rV   )	C393r   sub	ss_answersubstitutionsnew_eqnpair
cse_answerrB   s	            r=   test_issue_7840r     s    	-D QD 99VD!D
CCKCK		#IIM' . GLL-DGLL.%J
""" 	:D !YM71:}!!!rD   c            	      *   t         t        t        t        fD ]z  }  | ddt        t
        z   dddg      }t        t        t
        z   |g      }t        t        t
        z   fgt         | t        dgddgg      gf}||k(  sJ t        |d   d   |       rzJ  y )NrR   r   ra   rq   )	r,   r-   r.   r/   rK   r2   r   rU   rb   )clsr   resr   s       r=   test_issue_8891r     s    "$7 "79 +1q1uaA&'1q5!*oQU}r3Q!Q'8#9:;czz#a&*c***+rD   c                  D   t        d      \  } }}}}}| |z  |z  |z  |z  | |z  |dz  z  |z  ||z  |dz  z  |z  g}t        |      \  }}t        d |D              rJ ddlm}	 ddlm}
 t        d      }t        d      D cg c]'  }t        t        d	      D cg c]
  } |	|       c} ) }}t        |d
      D ]t  }t        |      }t        |      \  }}t        d |D              rJ t        |      D ]0  }t        t        |            D ]  } ||   j                  | ||<    2 ||k(  rtJ  t        d      D cg c]*  }t        t        d	      D cg c]  } |	|d d        c} , }}t        |d
      D ]  }t        |      }t        |      \  }}t        d |D              rJ t        |      D ]0  }t        t        |            D ]  } ||   j                  | ||<    2 ||D cg c]
  } |
|       c}k(  rJ  y c c}w c c}w c c}w c c}w c c}w )Nza b f k l irR   c              3   V   K   | ]!  }|j                   D ]  }|j                    # y wr@   argsis_Mul.0r   r<   s      r=   	<genexpr>z#test_issue_11230.<locals>.<genexpr>  s$     771188787   ')r   )choice)
expand_mulza:m   rf   rg   c              3   V   K   | ]!  }|j                   D ]  }|j                    # y wr@   r   r  s      r=   r  z#test_issue_11230.<locals>.<genexpr>  $     ;AAFF;qqxx;x;r  c              3   V   K   | ]!  }|j                   D ]  }|j                    # y wr@   )r   is_Addr  s      r=   r  z#test_issue_11230.<locals>.<genexpr>  r	  r  )r   r   anysympy.core.randomr  r   r  r:   r
   r)   r7   rv   rV   r   r   )r   r   r   krz   r<   pRr   r  r  sexris                 r=   test_issue_11230r    s/   }-Aq!Q1	
1QqAaC1HQJ!AqD
+Aq6DAq7Q7777 ).A7<Qx	@!#58,aq	,
-	@B	@R^ G1v1;;;;;1+ 	&B3q6] & qtyy"~!&	& Avv <A8	Da#uQx0!q!u0
1	DB	DR^ /G1v1;;;;;1+ 	&B3q6] & qtyy"~!&	& A.qZ]..../ -	@ 1	D /s6   HH	(H HH)H0H	HHc                     d } t         dz  t        dz  z  t         dz  t        z  z   t         dz  z   }t        |      t        t         dz  ft        t         t        z  fgt         dz  t        t        z  t        z  z   t        t        z  z   gfk(  sJ  | |       t         dz  t        dz   dz  z  t         t        dz   z  z   }t        |      t        t        dz   fgt         dz  t        dz  z  t         t        z  z   gfk(  sJ  | |       y )Nc                     t        |       \  }}| j                         t        |      t        d |D              z   t        |      z   k\  sJ y )Nc              3   B   K   | ]  }|d    j                           yw)ra   Nr"   )r  r<   s     r=   r  z2test_issue_11577.<locals>.check.<locals>.<genexpr>  s     5a1)5   )r   r#   rV   sum)rh   r   r   s      r=   checkztest_issue_11577.<locals>.check  sJ    2w1||~FS51555aL 	 rD   rf   rR   re   ra   )rK   r2   r   rU   rr   )r  rh   s     r=   test_issue_11577r    s     
AadQT!V	ad	"Br7
adb!A#Y!Q$Bq.2b5"8!9; ; ; ; 
"I	
Aq1uqj1a!e9	$Br7
a!e1RU
QrT)*, , , , 
"IrD   c                  L    t         dz   t         dz   g} t        |       g | fk(  sJ y )Nrg   re   )rK   r   r   s    r=   test_hollow_rejectionr    s)    
a%QBr7r2hrD   c                     t        t              dt        z  dt        t        dz         z  z   z  t        t              dt        z  dt        t        dz         z  z   z  g} t	        |       \  }}t        d |D              sJ d       t	        | t        f      \  }}t        d |D              rJ d       t        d	 |D              sJ d
       y )Nrg   ra   rf   c              3   F   K   | ]  \  }}t         |j                  v   y wr@   r2   r   r  r|   r   s      r=   r  z"test_cse_ignore.<locals>.<genexpr>  s     :CqC$$$:   !z&cse failed to identify any term with yignorec              3   F   K   | ]  \  }}t         |j                  v   y wr@   r   r!  s      r=   r  z"test_cse_ignore.<locals>.<genexpr>  s     >VQ1(((>r"  z,Sub-expressions containing y must be ignoredc              3   R   K   | ]  \  }}|t        t        d z         z
  dk(   ! yw)ra   r   N)r   rK   r!  s      r=   r  z"test_cse_ignore.<locals>.<genexpr>  s&     ;&!SsT!a%[ A%;s   %'z4cse failed to identify sqrt(x + 1) as sub-expression)r   r2   r   rK   r   r  )r   subst1red1subst2red2s        r=   test_cse_ignorer+    s    VQqS1T!A#Y;&'Q1qac{1B)CDEu:LFD:6::d<dd:uaT*LFD>v>>n@nn>;F;;s=ss;rD   c                  B   t         t        t              z  t        t               z  t        t              t        t              z  t        t               z  g} t        | t        f      \  }}|D cg c]  }|j                  t        |             }}|| k(  sJ y c c}w )Nr#  )rl   r   rK   rF   r2   r   r   rv   )rz   rY   rZ   rX   rls        r=   test_cse_ignore_issue_15002r.    s~    	#a&aRAs1vc1"g	A !QD)OFG,3	4q!&&&!
"	4B	47N7 
5s   1!Bc                      t        t        dz         } t        d| z
  d| z
  z  g      \  \  \  }}\  }|| k(  r|d|z
  d|z
  z  k(  sJ y ||  k(  r|d|z   d|z   z  k(  sJ y d|  d|   d| }J |       )Nra   rq   zExpected common subexpression z or z, instead got )r   rK   r   )xp1rU   ueredmsgs        r=   test_cse_unevaluatedr4  #  s    
!a%
 Cb3h1s7345JXb"	SyrBw1r6****	trBw1r6****.se4v^B4PcurD   c                     d\  } }t        d|z        }t        |       D cg c]5  }t        t        t        |      D cg c]  }||   d||z   z  z   c}      7 }}}|d   |d   z   j	                         dk(  sJ t        |      \  }}t        |      dkD  sJ d       t        |      D ]8  \  }}|j                  t        |            ||   z
  j	                         dk(  r8J  y c c}w c c}}w )N)rg   r5   zx:%drq   r   ra   z!exprs[0] == -exprs[2], i.e. a CSE)
r   r:   r   r   simplifyr   rV   	enumerater   rv   )	nexprsntermsrK   r<   r   r   substr2  rX   s	            r=   test_cse__performancer;  0  s    NFF A v 	suV}=!QqT21+%=>E  !HuQx))+q000UJE3u:>>>>># D1x'%(2<<>!CCCD >s   C,C'	C,'C,c                  
   t         t        z   dt         z   t        z   t         t        z   t        z   dt         z   t        z   t        z   g} t        |       \  }}dt	        |      t        d |D              z   t        |      z   k\  sJ y )NrR   rg   r   c              3   B   K   | ]  \  }}|j                           y wr@   r"   )r  r  vs      r=   r  z#test_issue_12070.<locals>.<genexpr>A  s     !BDAq!++-!Br  )rK   r2   rF   r   rV   r  r#   )r   r:  r2  s      r=   test_issue_12070r?  >  sq    UAEAIq1uqy!a%!)a-8EUJE3Uc!BE!BBB3  ! ! !rD   c                  n    t         dt         dz  z  t        dz  z   z  } t        |       d   d   }|| k(  sJ y )NrR   ra   r   )rK   r2   r   )rh   cse_eqs     r=   test_issue_13000rC  E  s9    	
Bq!tGadN	BWQZ]FR<<rD   c                      t        t        dz  dt        z  z   dz
  d      t        t        dz  dt        z  z   dz
  d      z   } t        |       g | gfk(  sJ y )Nrf      rR   r   ra   )r   rK   r   r   s    r=   test_issue_18203rF  K  sR    	A1q!	$wq!tbd{Q'B	BBr7rB4j   rD   c                      t        t        t        z   t        t        z   d      } t        |       t        t        t        z   fgt        dz  gfk(  sJ y )NFevaluaterR   )r
   rK   r2   r   rU   r   s    r=   test_unevaluated_mulrJ  P  s?    	QUAEE	*Br7QU}r1ug....rD   c                      ddl m}  t        d      \  }}}}}t        t        z   dz
  dz  t        t        t        z   t        t        z   dt        z  dz   z  t        t        z   dz
  dz  z   dt        z  dz   t        t        z   z  g}t        ||       \  }}|sJ |t        t        t        z   ft        t        dz
  dz  ft        dt        z  dz   f|t        t        z  t        z   f|t        t        z  ft        d f|t        ft        d f|t        ft        d f|t        fg|||||ffk(         |j                          |D 	
cg c]  \  }	}
|
	|	|
f }}	}
||D cg c]  }|j                  |       c}k(  sJ y c c}
}	w c c}w )Nr   )cse_release_variablesz_:5ra   rR   r   )sympy.simplify.cse_mainrL  r   rK   r2   r   rU   rr   rw   reverser   )rL  _0_1_2_3_4eqsr   rX   r  r>  r<   s               r=   test_cse_release_variablesrU  T  sq   = BBBEAI>1	AA!a AEAI>1	
1qAEC s 56DAq FaQK"rAvk"R1qMBr2r6lRJRJR2t*r1g/ 24RR0DF F F1 IIK/DAq!Q/A/a(166!9(((( 	0(s   <
E5E5E;c                  *   d }  | t               g t         fk(  sJ  | d      g dfk(  sJ t         g}t        t        t        fD ]  } |  ||            g  ||      fk(  rJ   | t	        |       g t	        | fk(  sJ t         di} | |      g |fk(  sJ y )Nc                     t        | d      S )NF)r7   r   )rK   s    r=   <lambda>ztest_cse_list.<locals>.<lambda>e  s    S' rD   rK   ra   )rK   r7   tuplesetr   )_cseitr   r   s       r=   test_cse_listr]  d  s    'D7r1g9S	!!!
BE3 *AbE{r1R5k)))* r
E2J////	
AA7r1grD   c                  Z    t        ddd      } t        |  | z  | z
        |  | z  | z
  k(  sJ y )Nr   rR   )r0   r   )r   s    r=   test_issue_18991r_  p  s7    S!QAQBFQJA26A:---rD   c                  F    t        ddd      g} t        |       g | fk(  sJ y )Nra   rR   FrH  )r
   r   )r   s    r=   test_unevaluated_Mulra  u  s)    	QE	"#Aq6b!WrD   c                      t        t        d            j                  dd      } t        |       }t	        |      }|g t        |       gfk(  sJ y NA:4rR   )r.   r   reshaper   r   r   rK   r   s      r=   "test_cse_matrix_expression_inverserg  z  sH    WU^,44Q:A
A1vHWQZL))))rD   c                      t        t        d            j                  dd      } t        t        d            }t        t	        |       |      }t        |      }|g |gfk(  sJ y Nrd  rR   zb:2)r.   r   re  r   r   r   r   r   rK   r   s       r=   )test_cse_matrix_expression_matmul_inverserk    sX    WU^,44Q:AWU^,Awqz1A1vHQCy   rD   c                      t        t        d            j                  dd      } t        t        j
                  |       }t        |      }|g |gfk(  sJ y rc  r.   r   re  r   r   NegativeOner   rf  s      r=   test_cse_matrix_negate_matrixro    sJ    WU^,44Q:Aq}}a A1vHQCy   rD   c                      t        t        d            j                  dd      } t        t        d            j                  dd      }t        t        j
                  | |      }t        |      }|g |gfk(  sJ y Nrd  rR   zB:4rm  r   r   rK   r   s       r=   +test_cse_matrix_negate_matmul_not_extractedrs    sg    WU^,44Q:AWU^,44Q:Aq}}a#A1vHQCy   rD   c                  8   t        t        d            j                  dd      } t        t        d            j                  dd      }t        t        j
                  t        | |            }t        |      }|g t        t        j
                  | |      gfk(  sJ y rq  rm  rr  s       r=   'test_cse_matrix_nested_matmul_collapsedru    sz    WU^,44Q:AWU^,44Q:Aq}}fQl+A1vHVAMM1a89::::rD   c                      t        t        d            j                  dd      } t        t        t        |                   }t	        |      }|g | gfk(  sJ y rc  )r.   r   re  r   r   rf  s      r=   0test_cse_matrix_optimize_out_single_argument_mulrw    sM    WU^,44Q:AvfQi !A1vHQCy   rD   c            	         t        t        d            j                  dd      } t        t	        t	        t	        |                   t	        t	        |             t	        |       |       }t        |      }|g t	        d|       gfk(  sJ y Nrd  rR   re   )r.   r   re  r   r   r   rf  s      r=   9test_cse_matrix_optimize_out_single_argument_mul_combinedrz    l    WU^,44Q:AvfVAY'(&*;VAYJA1vHVAq\N++++rD   c            	          t        t        d            j                  dd      } t        t        t        t        |                         }t	        |      }|g | gfk(  sJ y rc  )r.   r   re  r   r   rf  s      r=   0test_cse_matrix_optimize_out_single_argument_addr}    sR    WU^,44Q:AvfVAY'()A1vHQCy   rD   c            	         t        t        d            j                  dd      } t        t	        t	        t	        |                   t	        t	        |             t	        |       |       }t        |      }|g t        d|       gfk(  sJ y ry  )r.   r   re  r   r   r   rf  s      r=   9test_cse_matrix_optimize_out_single_argument_add_combinedr    r{  rD   c                      t        t        d            j                  dd      } t        t        d            }t        | |      }t	        |      }|g |gfk(  sJ y ri  )r.   r   re  r   r   rj  s       r=   'test_cse_matrix_expression_matrix_solver    sT    WU^,44Q:AWU^,AAqA1vHQCy   rD   c            	      t   t        t        d            j                  dd      } t        t        d            }t        t	        t        t        |       |             t        |       |      }t        |      }t        ddd      }t        t	        t        ||             ||      }||t        |       fg|gfk(  sJ y )NzX:4rR   zy:2rU   )r.   r   re  r   r   r   r   r0   )Xr2   r   r   rU   reduced_expr_expecteds         r=   !test_cse_matrix_matrix_expressionr    s    WU^,44Q:AWU^,AwvilA./1qAA1vH	dAq	!B"76"a=#92qA"il+,/D.EFFFFrD   c                     d} t        t        d|              }t        t        d| | z               j                  | |       }t        t        d| | z               j                  | |       }t        t        d| | z               j                  | |       }t        t        d|              }t        |t	        |t        |      t        t        |t	        ||t        |                        t        t	        ||      t	        t        j                  |                        }t        |t	        t        j                  |t        |      t        t        |t	        ||t        |                        ||            }t        ||g      }t        d| |       }	t        d| |       }
|	t        |      f|
t        t        |t	        |||	                  fg}t        |t	        ||	|
t        t	        ||      t	        t        j                  |                        t        |t	        t        j                  ||	|
||            g}|||fk(  sJ y	)
a  Kalman Filter example from Matthew Rocklin's SciPy 2013 talk.

    Talk titled: "Matrix Expressions and BLAS/LAPACK; SciPy 2013 Presentation"

    Video: https://pyvideo.org/scipy-2013/matrix-expressions-and-blaslapack-scipy-2013-pr.html

    Notes
    =====

    Equations are:

    new_mu = mu + Sigma*H.T * (R + H*Sigma*H.T).I * (H*mu - data)
           = MatAdd(mu, MatMul(Sigma, Transpose(H), Inverse(MatAdd(R, MatMul(H, Sigma, Transpose(H)))), MatAdd(MatMul(H, mu), MatMul(S.NegativeOne, data))))
    new_Sigma = Sigma - Sigma*H.T * (R + H*Sigma*H.T).I * H * Sigma
              = MatAdd(Sigma, MatMul(S.NegativeOne, Sigma, Transpose(H)), Inverse(MatAdd(R, MatMul(H*Sigma*Transpose(H)))), H, Sigma))

    rR   zmu:zSigma:zH:zR:zdata:rU   rr   N)r.   r   re  r   r   r   r   r   rn  r   r0   )NmuSigmaHr  datanew_mu	new_Sigmar   rU   rr   replacements_expectedreduced_exprs_expecteds                r=   test_cse_matrix_kalman_filterr    s:   $ 	
A	gA3i0	1B 6!a%)9!:;CCAqIEWr!a%\23;;AqAAWr!a%\23;;AqAA%s 45DBuilGF1fQPUW`abWcFd<e4fhnouvwy{o|  E  FG  FS  FS  UY  Z  i[  \  ]FufQ]]E9Q<QWXY[abcejluvwlx[yQzI{}~  AF  G  HIFI&'H	dAq	!B	dAq	!B	Yq\	WVAva3456
 	r6%Rq"vammUY?Z)[\]ufQ]]E2r1eDE -/EFFFFrD   )	functoolsr   r8   operatorr   sympy.codegen.matrix_nodesr   sympy.core.addr   sympy.core.containersr   sympy.core.exprr   r   r	   sympy.core.mulr
   sympy.core.powerr   sympy.core.relationalr   sympy.core.singletonr   sympy.core.symbolr   r   sympy.core.sympifyr   &sympy.functions.elementary.exponentialr   (sympy.functions.elementary.miscellaneousr   $sympy.functions.elementary.piecewiser   (sympy.functions.elementary.trigonometricr   r   sympy.matrices.denser   sympy.matrices.expressionsr   r   r   r   sympy.polys.rootoftoolsr   sympy.series.orderr   rM  r   sympy.simplify.simplifyr   sympy.tensor.indexedr    r!   r#   sympy.simplify.cse_optsr$   r%   sympy.functions.special.hyperr&   sympy.simplifyr'   r(   sympy.utilities.iterablesr)   sympy.testing.pytestr*   r+   sympy.matricesr,   r-   r.   r/   r0   rl   rK   r2   rF   rU   rr   rw   r   r   r   r   r   r   r   x10x11x12r>   rC   rG   rM   rP   r_   rc   ri   rm   rt   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r+  r.  r4  r;  r?  rC  rF  rJ  rU  r]  r_  ra  rg  rk  ro  rs  ru  rw  rz  r}  r  r  r  r  rL   rD   r=   <module>r     sh      2  ' + (    $ " / & 6 9 : ? ' I I +   ' , 3 ) 5 1 - - .5 5 3 Y
1a8? 5BBBBBS#	A64
44	!)A*.< / / / /   ; ; 
4
?9
4',(*30G	!e C
<<""J+"/J  *
t
D!!
/) 
.

*!!! ; ;! , ,! , ,!G%GrD   