
    Qik                        d Z ddl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 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mZ ddlmZ ddlmZmZm Z  ddl!m"Z" ddl#m$Z$  ed          Z% ed          Z& ed          Z' ed          Z( ed          \  Z)Z*Z+  ed          e&e'          Z,  ed          e,e(          Z- ed          Z. ed          Z/ ed          Z0 ed          Z1ej2        3                    de.ge&gfe/ge&gfe0ge&gfe1ge&gfe&ge&gfe'ge&gfe&e'z   ge&gfe&e'z  ge&gfe&dz  ge&gfe&e'z  ge&gf ee&          ge&gf ee&          ge&gf e e&          ge&gfe.e/e&e'e&e'z  e&e'z   ge&e'gfe&e'z   ee&e'z            z    ee'          z
  e&e'z   ee'          z
  z  ge&e'gfe% e e'e(z            z  e& e e'e(z            z
  z  e%e&z   e e'e(z            z  e& e e'e(z            z
  z  ge%e&e'e(gfe)dz  e*z   e*dz  e+z   e+dz  e)z   ge)e*e+gfe- e
e-e&          z   e,z   de&z  z   ge&gfg          d             Z4d Z5d Z6d Z7d  Z8d! Z9d" Z:d# Z;d$ Z<dS )%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                     t          | g          j        } t          |g          j        }t          | |          }t          j        |j         }t          ||                     |          z
            |k    sJ d S N)r	   Tr   zerosshaper   jacobian)exprwrtr&   r$   s       z/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/sympy/simplify/tests/test_cse_diff.pytest_forward_jacobianr*   +   sv    4  '')D
u
%
%
'C s++H &7EHt}}S11122e;;;;;;    c                     t          d          \  } }}t          d          }t          d          }t           | || |          |          t           | || |          |          |           z    || |          z   d| z  z   g          }t	          |          \  }}t          ||          \  }}	t          d          }
t          d          }|
 || |          f| ||
|          fgt          d| z  |
z   |z   t           | || |          |          |           z   g          gf}||d         k    sJ d|d          d	|             |	|d
         k    sJ d|d
          d	|	             d S )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   s   gGAq!AA11QQqVVQ<<*QQqq1vvq\\1"="==!AF1LMNNDIIMD'3D'BBFI	B	B aa1ggQQr1XX'	Qb:aa!QmmQ#?#??@	A	ABO
 _Q'''')[_Q5G)[)[SY)[)['''****,a8J,a,aV_,a,a*****r+   c                     t          d          \  } }}t          | |z  ||z  z   | |z  |z  z   | dz  |dz  z   |dz  z   | |z  | |z  z   ||z  z   g          }t          | ||g          }t          |          \  }}t          |||          \  }}}	t	          |d         t          |d                             s
J d            t          ||          \  }
}}t	          |d         t          |d                             s
J d            t          ||          }t	          |t          |                    s
J d            d S )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   `   sv   gGAq!	AAA	!	Qa!q& 	AAA!  D
 1ay
)
)C!$TL, =RR^`lnq<r<r9}&9mA&\!_(=(=>>{{@{{{{ =^c= =9}&9mA&\!_(=(=>>{{@{{{{ !s++HhT

++hh-hhhhhhr+   c                     t          d          \  } }}t          | |z  ||z  z   | |z  |z  z   | dz  |dz  z   |dz  z   | |z  | |z  z   ||z  z   g          }t          | ||g          }t          |          \  }}t          |||          \  }}}	t	          |t          |                    s
J d            t	          |t          |                    s
J d            t	          |	t                    s
J d            t          |          t          |          k    s
J d            t          |          dk    s
J d            t          |	          t          |          k    s
J d	            t          ||          \  }
}}t	          |
t          |                    s
J d            t	          |t          |                    s
J d            t	          |t                    s
J d            t          |
          t          |          k    s
J d            t          |          dk    s
J d            t          |          t          |          k    s
J d	            d S )
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GAq!	AAA	!	Qa!q& 	AAA  D
 !Q

C!$TL, =RR^`lnq<r<r9}&9'l););<<]]>]]]]mT,%7%788UU:UUUU)400]]2]]]] !!S%6%66668_666}"""$F""""##s<'8'8888:m888 =^^bdg<h<h9}&9'l););<<]]>]]]]mT,%7%788UU:UUUU)400]]2]]]] !!S%6%66668_666}"""$F""""##s<'8'8888:m88888r+   c                  D   t          ddt          dz  t          z  dt          dz  z  t          t          z  z   g          } t          t          g}t          | |          t          dt          z  t          z  t          dz  gt          dt          z  t          z   gg          k    sJ t          ddt          t          dz  t          dz  z  g          } t          | |          t          ddgdt          z  t          dz  z  t          dz  dz  t          dz  z  gg          k    sJ d S )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NNq!aAad^$$AQ%%!Q!A#ad(AqDF1a4K9P0Q)R)RRRRRRRr+   c                  R   t          d          \  } }t          | t          |          z  | t          |          z  g          }t          | |g          }t	          ||          }||                    |j                  k    sJ ||j                            |          k    sJ ||j                            |j                  k    sJ |j        t          |j        d                   z  |z  }|	                    t                    }|t          ddgd| dz  gg          k    sJ d S )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#hhc#hh/00ASzA!QA

13q!!!!!!qs######	c!'!*oo!A	HAAC1H.////////r+   c                     t          d          \  } }t          | t          |          z  | t          |          z  | dz  g          }t          | |g          }t          t          |          |  t          |          z  gt          |          | t          |          z  gd| z  dgg          }t	          ||          |k    sJ d S )NrM   r   r   )r   r   r   r   r   )rO   rP   rQ   rR   rS   s        r)   test_jacobian2rW      s    y!!HCc#hhc#hhq9::ASzA	SC4#c((?#	S3S>"	
S! 	 	A
 Q""a''''''r+   c                  X   t          t          t          t          z   t          z             t          t          t          z   t          z             t          t          t          z   t          z             g          } t          t          t          t          g          }t          dd          D ]}t          dd          D ]l}| d |d d f         }|d |d d f         }t          ||          }|j        |k    sJ |j        |k    sJ t          |          D ]}|d d |f         |k    sJ md S )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AAAhGAAAhG!'733A6Q;;;;6Q;;;;1XX * *Aw')))))*	** *r+   c                  @    t          t          t          t          z   t          z             t          t          t          z   t          z             gt          t          t          z   t          z             t          t          t          z   t          z             gg           t          t           fd            dd d f          t          t          t          gt          t          gg          t          t           fd           t          t           fd           d S )Nc                  b    t           t          t          t          t          g                    S r"   r   r   r   r   r   rQ   s   r)   <lambda>z(test_nonvectorJacobian.<locals>.<lambda>   s     /61a)3D3DEE r+   r   c                  $    t                     S r"   )r   rQ   rR   s   r)   re   z(test_nonvectorJacobian.<locals>.<lambda>   s    /155 r+   c                  r    t           t          t          t          gt          t          gg                    S r"   rc   rd   s   r)   re   z(test_nonvectorJacobian.<locals>.<lambda>   s'    /6Aq6Aq6:J3K3KLL r+   )r   r   r   r   r   r   	TypeErrorrg   s   @@r)   test_nonvectorJacobianrj      s    QUQYQUQY0QUQYQUQY02 	3 	3A
9EEEEFFF	!QQQ$AAA  A
955555666
9LLLLMMMM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`   rj    r+   r)   <module>r      s   ; ;  / / / / / / / / & & & & & & ( ( ( ( ( ( ! ! ! ! ! ! 6 6 6 6 6 6 9 9 9 9 9 9 2 2 2 2 2 2I I I I I I I I I I I I - , , , , , & & & & & & & & ' ' ' ' ' ' D D D D D D D D D D , , , , , ,       F3KK
F3KK
F3KK
F3KK^J''
B HHSMM!QHHSMM!Qwqzzgajjgajj
'"++ 
!


QC
qc

qc

a%1#
A#
Q$!
Q$!
#a&&A3
#a&&A3
#a&&A3
Q1Q3A	&A/aC33qs88cc!ff$!ss1vv~
6	7!Q@
CC!HH*a##ac((l
#QqSQqS\1ss1Q3xx<%@	AAq!Q<P
a%"*b!ebj"a%"*	-B|<
jjA

"QqS
(	)A3/% 2< <3 2<b b b(i i i2n n n<S S S
0 
0 
0	( 	( 	(* * *N N N N Nr+   