o
    GZŽhk  ã                   @   s  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ƒZ0edƒZ1ej2 3d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' ge&gfe&e' ge&gfe&d ge&gfe&e' 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' e&e' ge&e'gfe&e' ee&e' ƒ ee'ƒ e&e' ee'ƒ  ge&e'gfe%e e'e( ƒ e&e e'e( ƒ  e%e& e e'e( ƒ e&e e'e( ƒ  ge%e&e'e(gfe)d e* e*d e+ e+d e) ge)e*e+gfe-e
e-e&ƒ e, de&  ge&gfg¡dd„ ƒZ4dd„ Z5d d!„ Z6d"d#„ Z7d$d%„ Z8d&d'„ Z9d(d)„ Z:d*d+„ Z;d,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                 C   sL   t | gƒj} t |gƒj}t| |ƒ}t j|jŽ }t||  |¡ ƒ|ks$J ‚d S ©N)r   ÚTr
   ÚzerosÚshaper   Újacobian)ÚexprÚwrtr$   r"   © r'   úQ/var/www/auris/lib/python3.10/site-packages/sympy/simplify/tests/test_cse_diff.pyÚtest_forward_jacobian+   s
   
r)   c                  C   s  t dƒ\} }}tdƒ}tdƒ}t||| |ƒ|ƒt||| |ƒ|ƒ| ƒ || |ƒ d|   gƒ}t|ƒ\}}t||ƒ\}}	t dƒ}
t dƒ}|
|| |ƒf|||
|ƒfgtd|  |
 | t||| |ƒ|ƒ| ƒ gƒgf}||d kszJ 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%   ÚreplZreducedZp_replZ	p_reducedr+   r,   Zexpected_outputr'   r'   r(   Útest_process_cseL   s   >,þ$(r.   c                  C   sø   t dƒ\} }}t| | ||  | | |  | d |d  |d  | | | |  ||  gƒ}t| ||gƒ}t|ƒ\}}t|||ƒ\}}}	t|d t|d ƒƒsSJ dƒ‚t||ƒ\}
}}t|d t|d ƒƒsjJ dƒ‚t||ƒ}t|t|ƒƒszJ 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$   r'   r'   r(   Útest_io_matrix_type`   s    ý
ÿ
r9   c                  C   s   t dƒ\} }}t| | ||  | | |  | d |d  |d  | | | |  ||  gƒ}t| ||gƒ}t|ƒ\}}t|||ƒ\}}}	t|t|ƒƒsOJ dƒ‚t|t|ƒƒsZJ dƒ‚t|	tƒscJ dƒ‚t|ƒt|ƒksoJ dƒ‚t|ƒdksyJ 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   r/   r0   ÚlistÚlenr   )r   r   r   r%   r&   r1   r2   r3   r4   r5   r6   r7   r8   r'   r'   r(   Ú"test_forward_jacobian_input_outputy   s,   ýr<   c                  C   sÄ   t ddtd t dtd  tt  gƒ} ttg}t| |ƒt dt t td gtdt t ggƒks3J ‚t ddttd td  gƒ} t| |ƒt ddgdt td  td d td  ggƒks`J ‚d S )Nr   r   é   é   r   )r   r   r   r
   )ÚLZsymsr'   r'   r(   Útest_jacobian_hessian—   s
   (6Br@   c                  C   sÂ   t dƒ\} }t| t|ƒ | t|ƒ gƒ}t| |gƒ}t||ƒ}|| |j¡ks)J ‚||j |¡ks3J ‚||j |j¡ks>J ‚|jt|jd ƒ | }| 	t
¡}|tddgd| d ggƒks_J ‚d S )Núrho,phir   r   r   )r   r   r   r   r
   r$   r!   r   r#   Z	applyfuncr   )ÚrhoÚphiÚXÚYÚJÚgr'   r'   r(   Útest_jacobian_metrics    s   

$rH   c                  C   sˆ   t dƒ\} }t| t|ƒ | t|ƒ | d gƒ}t| |gƒ}tt|ƒ|  t|ƒ gt|ƒ| t|ƒ gd|  dggƒ}t||ƒ|ksBJ ‚d S )NrA   r   r   )r   r   r   r   r
   )rB   rC   rD   rE   rF   r'   r'   r(   Útest_jacobian2­   s   "
ýrI   c                  C   sØ   t ttt t ƒttt t ƒttt t ƒgƒ} t tttgƒ}tddƒD ]D}tddƒD ]<}| d |…d d …f }|d |…d d …f }t||ƒ}|j|ksNJ ‚|j|ksUJ ‚t|ƒD ]}|d d …|f |ksgJ ‚qYq,q%d S )Nr   r>   )	r   r   r   r   r   Úranger
   ÚrowsÚcols)rD   rE   ÚiÚjZX_sliceZY_slicerF   r   r'   r'   r(   Útest_issue_4564¹   s   2
ÿúÿrO   c                      s¤   t ttt t ƒttt t ƒgttt t ƒttt t ƒggƒ‰ tt‡ fdd„ƒ ˆ dd d …f ‰ t ttgttggƒ‰tt‡ ‡fdd„ƒ tt‡ fdd„ƒ d S )Nc                      s   t ˆ ttttgƒƒS r    ©r
   r   r   r   r   r'   ©rD   r'   r(   Ú<lambda>Ê   s    z(test_nonvectorJacobian.<locals>.<lambda>r   c                      s
   t ˆ ˆƒS r    )r
   r'   ©rD   rE   r'   r(   rR   Í   s   
 c                      s   t ˆ tttgttggƒƒS r    rP   r'   rQ   r'   r(   rR   Î   s    )r   r   r   r   r   r   Ú	TypeErrorr'   r'   rS   r(   Útest_nonvectorJacobianÇ   s    ÿrU   )=Ú__doc__ZpytestZsympy.core.symbolr   r   Zsympy.core.numbersr   Zsympy.core.functionr   Z
sympy.corer   Z&sympy.functions.elementary.exponentialr   Zsympy.matrices.immutabler   Zsympy.physics.mechanicsr	   Zsympy.simplify._cse_diffr
   r   r   r   Zsympy.simplify.simplifyr   Zsympy.matricesr   r   Zsympy.testing.pytestr   Z(sympy.functions.elementary.trigonometricr   r   r   Zsympy.simplify.trigsimpr   Zsympyr   r   r   r   r   Úq1Úq2Zq3r   r   ÚzeroÚoneÚtwoZneg_oneÚmarkZparametrizer)   r.   r9   r<   r@   rH   rI   rO   rU   r'   r'   r'   r(   Ú<module>   st    





4N* îþ
	