o
    gw>                     @   sL  d 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mZ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 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l0m1Z1 ddl2m3Z3m4Z4m5Z5 ed\Z6Z7Z8ed\Z9Z:e#de8e8Z;e#de8dZ<e#de8dZ=e#de8e8Z>e#d e8e8Z?e#d!e8e8Z@e#d"e8e8ZAe#d#e8dZBe#d$e8dZCe#d%e8dZDe#d&e8dZEd'd( ZFdEd*d+ZGd,d- ZHd.d/ ZId0d1 ZJd2d3 ZKd4d5 ZLd6d7 ZMd8d9 ZNd:d; ZOd<d= ZPd>d? ZQd@dA ZRdBdC ZSdDS )Fza
Some examples have been taken from:

http://www.math.uwaterloo.ca/~hwolkowi//matrixcookbook.pdf
    )KroneckerProduct)Permutation)Sum)Rational)S)symbols)explog)sqrt)cossintan)KroneckerDelta)Determinant)
DiagMatrix)HadamardPowerHadamardProducthadamard_product)Inverse)MatrixSymbol)	OneMatrix)Trace)MatAdd)MatMul)Identity
ZeroMatrix)ArrayDerivative)hadamard_power)ArrayAddArrayTensorProductPermuteDimszi j kzm nXx   yABCDabcdc                 C   s   t | |dtd fS )Nr   r#   )r   k)ij r0   h/var/www/visachat/venv/lib/python3.10/site-packages/sympy/matrices/expressions/tests/test_derivatives.py<lambda>0   s    r2      c                 C   s   d S N)xreplacer-   as_explicitdiffreshapeshapetomatrix)exprr"   diffexprdimr0   r0   r1   &_check_derivative_with_explicit_matrix3   s   r>   c                  C   s  t ttttksJ t tt  t tttdksJ ttttdks*J tj	t
 ttddks9J ttj	 ttttksHJ tt
 tttdksVJ ttdtttdkseJ tttttttttts{J ttt
tttdksJ ttttd tt
tttt
ksJ tt ttksJ ttt  t t tttt  t t ksJ tttttdksJ ttd t tdt tt ksJ td} d|  t }|td|  tt ksJ d S )Nr#   r3   mu)r%   r7   r.   r   r-   r!   r&   r+   r"   Tr$   r   dummy_eqr   	applyfuncr	   r   r   r   r   r   r   r   r   )r?   r;   r0   r0   r1    test_matrix_derivative_by_scalarB   s&   $*2*$rC   c                   C   s*   t tjttdtttdksJ d S )Nr#   )r   r"   r@   r   r-   r7   r0   r0   r0   r1   test_one_matrixX   s   *rD   c                  C   s   t t} tt| | tddd}tt|ksJ tjttt| | tddddks0J dt tttd|  | tdddksHJ ttttt	||ksWJ tt
 t|ksbJ d S )N   r#   r3   )r   r-   r    r   r   r%   r7   r@   r   r   r&   )IAdAr0   r0   r1   (test_matrix_derivative_non_matrix_result\   s   ,0rH   c                   C   s   t ttt tksJ d S r4   )r!   r7   r%   r   r0   r0   r0   r1   $test_matrix_derivative_trivial_casesg   s   rI   c                  C   s   t jtt t } | tttj t  tj ttj ks J ttt} tttt t	 } | ttd t	 t td  j ksEJ tttt } | tttt jd  ks^J d S )Nr3   )
r)   r@   r   r!   r*   r7   r   r   r%   r&   r;   r0   r0   r1   #test_matrix_derivative_with_inversem   s   .*&rL   c                  C   s:  t t ttksJ t tdf t tdf  tttks!J t jt ttks-J t jt	 } | t t	ks;J | d t tdf  t	tdf ksPJ t	jt  } | t t	ks^J t	jt
 t } | t
t	tj ksqJ t	jt
j t } | t
tt	j ksJ t	jt
 t	 } | t
t	t	j ksJ t	jt
j t	 } | t
t	t	j ksJ tjt
j t
 t } | t
t
t tj t
t tj  ksJ tt  t jt tt  t  } | t tjt tt  t  tjtj tt  t   ksJ t jt t  } | t tt  tjt   ksJ tjt
j t t
 t } | t
tjt
 t tj tt
 t tj  ks7J t
t t jt t
t t  } | t
tt
t t  tj tjt
t t  tj  kseJ t| d t
ttf  dksyJ t t j t  } tt}| t t|t jt  dt  t j  ksJ d S )Nr   r   r   zb[n, 0]*Sum((c[_i_1, 0] + Sum(X[_i_1, _i_3]*b[_i_3, 0], (_i_3, 0, k - 1)))*D[_i_1, m], (_i_1, 0, k - 1)) + Sum((c[_i_2, 0] + Sum(X[_i_2, _i_4]*b[_i_4, 0], (_i_4, 0, k - 1)))*D[m, _i_2]*b[n, 0], (_i_2, 0, k - 1))r3   )r"   r7   r   r-   r.   mdoitKDeltar@   r)   r!   r*   r+   r&   r'   r(   r,   strnr   r;   rF   r0   r0   r1   *test_matrix_derivative_vectors_and_scalars   s@   ,
*
*<"6>
2rT   c                  C   s  t tt } tt}| ttt|tttt t| |tdddks(J | t	t
f tttf  tt	ttt
t t t ttttt	t
f   ksRJ t t} | tttksaJ | ttttf  tttksvJ t tt } | ttjksJ | ttttf  tttf ksJ t tt t } | ttjtj ksJ | ttttf  tjtj ttf sJ t ttj t } | ttt ksJ t tjt } | ttksJ t ttj } | ttksJ t td } | tdtj ksJ t td t } | ttt tt  jks-J t tttt} | ttt tt  jksFJ t tjt t } | ttt tjt  ks`J t tt tj } | ttt tjt  kszJ t ttj t } | ttt tjt  ksJ t tt tj } | tttj tt  ksJ t ttj t } | tttj tt  ksJ t tjt t } | tttj tt  ksJ t tt t t } | ttjtj tj tjtj tj  ksJ t tjt } | tdt ksJ t ttj } | tdt ks,J t tjtj t t t } | ttjt t tj tt t tj  ksUJ t tjt t t } | ttt t tjt tj  ksvJ t tt t tj t } | ttjtj t tj tt t t  ksJ t tt t t tt t t j } | tdtj tt t t  tj ksJ t tt } t ttt  } t tjtj t t tj t t t } | ttt tj t t t tj tjt t tj tj tj t  tt t tj tj t t  tjt tj tj t t tj  ks8J t ttd  t } | tttj tj tj ttj ks[J t ttjt t t } | tt j tj t  t j t j t jt t  t  t j  ksJ t tjt t  tjt t  } | tdt t tjt t   tj t t tjt t   dt t tjt t    ksJ t ttjt t   tjt t  } | ttt tttjt t   tt tttjt t   tj t t tttjt t    tjt ttjtt jt   tj tj t ttjtt jt    tjt ttjtt jt    kseJ d S )NrE   r#   r3   rJ   )r   r%   r   r-   r7   r   r   r    r   r.   r/   rN   rR   rO   rP   r!   rewriter   r@   r&   rA   r   r'   r   invrS   r0   r0   r1   !test_matrix_derivatives_of_traces   s   <*,6
""""""""46,6&0*2f$l(rX   c               	   C   s  t jtt tjt tt   tjtj t tj tt tj ttjt tt   t t  tjtj t   t tttj tt t tj  dt t     t  dt t tj tj ttj    t } ttt t tj dt t  ttj   t tj ttt tjt   t t tt tj  tjtj t   t  t t t j tj td t t j tj tj t  tj t t  dt t tj tj t  tj  tt td  t t j tj tj t  tj t  tt t j t t  t tj dt dtj   t t tj  tt j t t t  tj tjd  t tj  tt j t t t  tj tjd  tj tjt tjtj    dt t j t t tj tj  tjdt dtj   t t j t t  tjtjd  t t t  tj tj t  tjt  tj tjtj tjt    tjtj t t j t t t  tj tjd  tj  tjt t t  tj tj t  dtj t t t  tj tj tj  tjt td  t t j tj tj t  tj  tjtj t  tj tj  }| t|ksJ d S )NrE   *   r3   )	r)   r@   r%   r!   r&   r*   r(   r'   r7   )r;   resultr0   r0   r1   +test_derivatives_of_complicated_matrix_exprL  s     6 r[   c                  C   sF  dt t } | tdtt ksJ t} | t}t|ts!J |tttks*J t td } | tdt t tt ksAJ t tt } tt}| ttt|tt	tt t| |t
dddksiJ t t tt } | tdt t tt ksJ t t t tt t } | tdt td  tt ksJ d S )NrE   r3   r#   )r   r%   r7   r   r-   
isinstancer   r   r   r    r   )r;   derivrF   r0   r0   r1   "test_mixed_deriv_mixed_expressionsR  s   
"<"*r^   c                  C   s  t jt } | t tksJ | d t tdf  ttdf ks#J t jt tj } | t tdtt jt   ks=J t jt  tj } | t t t jt  t	dd  ksXJ t
jt t j t tj } | t ttj t
 tt
jt t j t  d ksJ t
jt t j t t	dd } | t ttj t
 t
jt t j t t	dd  d ksJ tjt t tj } | ttdttjt t   tj ksJ tjt  tjt t tj  tj t
 } | ttdttjt t   t j t tj t
 tj ksJ d S )NrM   r   r3   rJ   r#   rE   rU   )r"   r@   r$   r7   rN   rO   r   Halfr
   r   r+   r)   r*   r!   r,   rK   r0   r0   r1   test_derivatives_matrix_normsj  s   
*$&8>.(Hr`   c                  C   s  t t} | t tt dd sJ | tdf t tdf  tt tdf d d t	tt ks8J t
| t | t  td t  t} | ttdt t  td t  tsbJ | tdf t dt t tdf  ttd t tdf   ksJ t
| t| t ttt t t} | tttt t ttt t tsJ t
| t| t tt t } t
| t | t  t jt t  tttj t   } | t tjt  tt   ttt  sJ t
| t | t  t tjt } t
| t | t  tjt t t} | tttjt t t tj s1J t
| t| t tjtt t } | ttttt tt sZJ t
| t| t tjtt t t t } | ttjtt tt t t tt tj sJ t
| t| t tjtt t t tj } tjt tt t t } | tttjt tj tj ttsJ tjttt t t t } tjttt t } d S )Nc                 S   s   t | d d S )Nr3   r#   )r   )r"   r0   r0   r1   r2     s    z8test_derivatives_elementwise_applyfunc.<locals>.<lambda>r   r3   r#   )r"   rB   r   r7   rA   r   r.   rN   rO   rP   r>   r   r   r   r	   r%   r&   r   r@   r-   r$   r)   r!   r*   rK   r0   r0   r1   &test_derivatives_elementwise_applyfunc  sX   

D
F
""00


,

 
"ra   c                  C   sj  t ttt} | ttt ttksJ tjt ttt	 t } | tt
ttj tt	ks/J ttd} | t dtt ksCJ ttjd} | t dtt ksXJ tttj} | ttjttttdd ksrJ ttjt t d} | tdt tj t t tj ksJ ttjt t tj} | ttdttjt t   tj ksJ d S )Nr3   rJ   )r   r)   r"   r*   r7   r   r@   r%   r!   r&   r   r   rO   r   r_   r   r
   rK   r0   r0   r1   (test_derivatives_of_hadamard_expressions  s    
(*2rb   N)r3   )T__doc__sympyr   sympy.combinatoricsr   sympy.concrete.summationsr   sympy.core.numbersr   sympy.core.singletonr   sympy.core.symbolr   &sympy.functions.elementary.exponentialr   r	   (sympy.functions.elementary.miscellaneousr
   (sympy.functions.elementary.trigonometricr   r   r   (sympy.functions.special.tensor_functionsr   &sympy.matrices.expressions.determinantr   #sympy.matrices.expressions.diagonalr   #sympy.matrices.expressions.hadamardr   r   r   "sympy.matrices.expressions.inverser   "sympy.matrices.expressions.matexprr   "sympy.matrices.expressions.specialr    sympy.matrices.expressions.tracer   !sympy.matrices.expressions.mataddr   !sympy.matrices.expressions.matmulr   r   r   $sympy.tensor.array.array_derivativesr   sympy.matrices.expressionsr   0sympy.tensor.array.expressions.array_expressionsr   r   r    r.   r/   r-   rN   rR   r!   r"   r$   r%   r&   r'   r(   r)   r*   r+   r,   rP   r>   rC   rD   rH   rI   rL   rT   rX   r[   r^   r`   ra   rb   r0   r0   r0   r1   <module>   sh    
8 A