
    \hk                     @   S r SSKrSSKJrJr  SSKJr  SSKJr  SSK	J
r
  SSKJr  SSKJr  SS	KJr  SS
KJrJrJrJr  SSKJr  SSKJrJr  SSKJr  SSKJrJrJ r   SSK!J"r"  SSK#J$r$  \" S5      r%\" S5      r&\" S5      r'\" S5      r(\" S5      u  r)r*r+\" S5      " \&\'5      r,\" S5      " \,\(5      r-\" S5      r.\" S5      r/\" S5      r0\" S5      r1\Rd                  Rg                  S\./\&/4\//\&/4\0/\&/4\1/\&/4\&/\&/4\'/\&/4\&\'-   /\&/4\&\'-  /\&/4\&S-  /\&/4\&\'-  /\&/4\" \&5      /\&/4\" \&5      /\&/4\ " \&5      /\&/4\.\/\&\'\&\'-  \&\'-   /\&\'/4\&\'-  \" \&\'-  5      -   \" \'5      -
  \&\'-  \" \'5      -
  -  /\&\'/4\%\ " \'\(-  5      -  \&\ " \'\(-  5      -
  -  \%\&-  \ " \'\(-  5      -  \&\ " \'\(-  5      -
  -  /\%\&\'\(/4\)S-  \*-   \*S-  \+-   \+S-  \)-   /\)\*\+/4\-\
" \-\&5      -   \,-   S\&-  -   /\&/4/5      S 5       r4S r5S r6S r7S  r8S! r9S" r:S# r;S$ r<g)%z5Tests for the ``sympy.simplify._cse_diff.py`` module.    N)Symbolsymbols)Integer)Function)
Derivative)exp)ImmutableDenseMatrix)dynamicsymbols)_forward_jacobian_remove_cse_from_derivative_forward_jacobian_cse!_forward_jacobian_norm_in_cse_out)simplify)Matrixeye)raises)cossintan)trigsimp)csewxyzzq1 q2 q3kf      z	expr, wrtc                     [        U /5      R                  n [        U/5      R                  n[        X5      n[         R                  " UR                  6 n[        X R                  U5      -
  5      U:X  d   eg N)r	   Tr   zerosshaper   jacobian)exprwrtr&   r$   s       Z/var/www/auris/envauris/lib/python3.13/site-packages/sympy/simplify/tests/test_cse_diff.pytest_forward_jacobianr*   +   se    4  '))D
u
%
'
'C +H &&7EH}}S112e;;;    c                     [        S5      u  pn[        S5      n[        S5      n[        U" U" X5      U5      [        U" U" X5      U5      U 5      -   U" X5      -   SU -  -   /5      n[	        U5      u  pg[        Xg5      u  p[        S5      n
[        S5      nX" X5      4X" X5      4/[        SU -  U
-   U-   [        U" U" X5      U5      U 5      -   /5      /4nXS   :X  d   SUS    S	U 35       eXS
   :X  d   SUS
    S	U	 35       eg )Nx y zr   r   r   x0x1r   z	Expected z
, but got r   )r   r   r   r   r   r   )r   r   r   r   r   r'   replreducedp_repl	p_reducedr.   r/   expected_outputs                r)   test_process_cser5   L   s4   gGA!AA1QqVQ<*Qqvq\1"==!F1LMNDIMD3DBF	B	B agQrX'	Qb:a!mQ#??@	ABO
 Q''[9_Q5G4H
SYRZ)[['**ai8J7K:V_U`,aa*r+   c                     [        S5      u  pn[        X-  X-  -   X-  U-  -   U S-  US-  -   US-  -   X-  X-  -   X-  -   /5      n[        XU/5      n[        U5      u  pV[        XVU5      u  pxn	[	        US   [        US   5      5      (       d   S5       e[        X45      u  pn[	        US   [        US   5      5      (       d   S5       e[        X45      n[	        U[        U5      5      (       d   S5       eg )Nr-   r   r   z9Jacobian should be a Matrix of the same type as the input)r   r	   r   r   
isinstancetyper   r   )r   r   r   r'   r(   replacementsreduced_exprreplacements_corejacobian_coreprecomputed_fs_corereplacements_normjacobian_normprecomputed_fs_normr&   s                 r)   test_io_matrix_typerA   `   s!   gGA!		!	Qa!q& 	! D
 ay
)C!$TL =RR^nq<r9&9mA&\!_(=>>{@{{> =^=9&9mA&\!_(=>>{@{{> !+HhT
++h-hh+r+   c                     [        S5      u  pn[        X-  X-  -   X-  U-  -   U S-  US-  -   US-  -   X-  X-  -   X-  -   /5      n[        XU/5      n[        U5      u  pV[        XVU5      u  pxn	[	        U[        U5      5      (       d   S5       e[	        U[        U5      5      (       d   S5       e[	        U	[        5      (       d   S5       e[        U5      [        U5      :X  d   S5       e[        U5      S:X  d   S5       e[        U	5      [        U5      :X  d   S	5       e[        X45      u  pn[	        U
[        U5      5      (       d   S5       e[	        U[        U5      5      (       d   S5       e[	        U[        5      (       d   S5       e[        U
5      [        U5      :X  d   S5       e[        U5      S:X  d   S5       e[        U5      [        U5      :X  d   S	5       eg )
Nr-   r   zReplacements should be a listzJacobian should be a listz)Precomputed free symbols should be a listz%Length of replacements does not matchr   z Jacobian should have one elementz1Length of precomputed free symbols does not match)	r   r   r   r   r7   r8   listlenr   )r   r   r   r'   r(   r9   r:   r;   r<   r=   r>   r?   r@   s                r)   "test_forward_jacobian_input_outputrE   y   s   gGA!		!	Qa!q& 	 D
 !
C!$TL =RR^nq<r9&9'l);<<]>]]<mT,%788U:UU8)400]2]]0 !S%66_8__6}"F$FF""#s<'88m:mm8 =^^b<h9&9'l);<<]>]]<mT,%788U:UU8)400]2]]0 !S%66_8__6}"F$FF""#s<'88m:mm8r+   c                     [        SS[        S-  [        -  S[        S-  -  [        [        -  -   /5      n [        [        /n[        X5      [        S[        -  [        -  [        S-  /[        S[        -  [        -   //5      :X  d   e[        SS[        [        S-  [        S-  -  /5      n [        X5      [        SS/S[        -  [        S-  -  [        S-  S-  [        S-  -  //5      :X  d   eg )Nr   r         r   )r   r   r   r   )Lsymss     r)   test_jacobian_hessianrK      s    q!ad1fa1fqsl+,Aq6DQ%!A#a%AAaC!G0M)NNNNq!aAad^$AQ%!Q!A#ad(AqDF1a4K9P0Q)RRRRr+   c                     [        S5      u  p[        U [        U5      -  U [        U5      -  /5      n[        X/5      n[	        X#5      nXBR                  UR                  5      :X  d   eXBR                  R                  U5      :X  d   eXBR                  R                  UR                  5      :X  d   eUR                  [        UR                  S   5      -  U-  nUR                  [        5      nU[        SS/SU S-  //5      :X  d   eg )Nrho,phir   r   r   )r   r   r   r   r   r&   r#   r   r%   	applyfuncr   )rhophiXYJgs         r)   test_jacobian_metricsrU      s    y!HCc#hc#h/0AzA!A

133q!!!!qss####	c!''!*o!A	HAAC1H.////r+   c                  .   [        S5      u  p[        U [        U5      -  U [        U5      -  U S-  /5      n[        X/5      n[        [        U5      U * [        U5      -  /[        U5      U [        U5      -  /SU -  S//5      n[	        X#5      U:X  d   eg )NrM   r   r   )r   r   r   r   r   )rO   rP   rQ   rR   rS   s        r)   test_jacobian2rW      s    y!HCc#hc#hq9:AzA	SC4#c(?#	S3S>"	
S! 	A
 Q"a'''r+   c                     [        [        [        [        -   [        -   5      [        [        [        -   [        -   5      [        [        [        -   [        -   5      /5      n [        [        [        [        /5      n[        SS5       H|  n[        SS5       Hi  nU S U2S S 24   nUS U2S S 24   n[        XE5      nUR                  U:X  d   eUR                  U:X  d   e[        U5       H  nUS S 2U4   U:X  a  M   e   Mk     M~     g )Nr   rH   )	r   r   r   r   r   ranger   rowscols)rQ   rR   ijX_sliceY_slicerS   r   s           r)   test_issue_4564r`      s    AEAIAEAIAEAI?@A1ayA1a[q!AAhGAhG!'3A66Q;;66Q;;1XAw')))   r+   c                    ^ ^ [        [        [        [        -   [        -   5      [        [        [        -   [        -   5      /[        [        [        -   [        -   5      [        [        [        -   [        -   5      //5      m [        [        U 4S j5        T SS S 24   m [        [        [        /[        [        //5      m[        [        U U4S j5        [        [        U 4S j5        g )Nc                  L   > [        T [        [        [        [        /5      5      $ r"   r   r   r   r   r   rQ   s   r)   <lambda>(test_nonvectorJacobian.<locals>.<lambda>   s    /61a)3DEr+   r   c                     > [        T T5      $ r"   )r   rQ   rR   s   r)   re   rf      s    /15r+   c                  Z   > [        T [        [        [        /[        [        //5      5      $ r"   rc   rd   s   r)   re   rf      s    /6Aq6Aq6:J3KLr+   )r   r   r   r   r   r   	TypeErrorrh   s   @@r)   test_nonvectorJacobianrk      s    QUQYQUQY0QUQYQUQY02 	3A
9EF	!Q$AAA A
956
9LMr+   )=__doc__pytestsympy.core.symbolr   r   sympy.core.numbersr   sympy.core.functionr   
sympy.corer   &sympy.functions.elementary.exponentialr   sympy.matrices.immutabler	   sympy.physics.mechanicsr
   sympy.simplify._cse_diffr   r   r   r   sympy.simplify.simplifyr   sympy.matricesr   r   sympy.testing.pytestr   (sympy.functions.elementary.trigonometricr   r   r   sympy.simplify.trigsimpr   sympyr   r   r   r   r   q1q2q3r   r   zeroonetwoneg_onemarkparametrizer*   r5   rA   rE   rK   rU   rW   r`   rk    r+   r)   <module>r      s   ;  / & ( ! 6 9 2I I - & ' D D ,  3K
3K
3K
3KJ'
B SM!QSM!Qqzajaj
"+ 
!


QC
qc

qc

a%1#
A#
Q$!
Q$!
a&A3
a&A3
a&A3
Q1Q3A	&A/aC3qs8c!f$!s1v~
6	7!Q@
C!H*a#ac(l
#QqSQqS\1s1Q3x<%@	AAq!Q<P
a%"*b!ebj"a%"*	-B|<
jA

"QqS
(	)A3/%2<32<b(i2n<S
0	(*Nr+   