
    gw>                        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          \  Z6Z7Z8 e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          ZA e#d#e8d          ZB e#d$e8d          ZC e#d%e8d          ZD e#d&e8d          ZEd' ZFd7d)ZGd* ZHd+ ZId, ZJd- ZKd. ZLd/ ZMd0 ZNd1 ZOd2 ZPd3 ZQd4 ZRd5 ZSd6S )8za
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                 8    t          | |dt          dz
  f          S )Nr   r$   )r   k)ijs     m/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/matrices/expressions/tests/test_derivatives.py<lambda>r3   0   s    nQAqs844        c                     d S N)xreplacer/   as_explicitdiffreshapeshapetomatrix)exprr#   diffexprdims       r2   &_check_derivative_with_explicit_matrixrA   3   s    
Fr4   c            	      z	   t                               t                    t          t          t                    k    sJ t           t
          t          z   z  t          z                      t                    t          t          d          k    sJ t                              t                    t          t          d          k    sJ t          j	        t          z                      t                    t          dd          k    sJ t          t          j	        z                      t                    t          t          t                    k    sJ t          t          z                       t                    t          t          d          k    sJ t          t          d                              t                    t          t          d          k    sJ t          t          t                                        t                                        t          t                              t                    t!          t          t                                        sJ t#          t          t                                        t                    t          t          d          k    sJ t#          t          t%          t          d          z  t          t                                        t                    t#          t          t                    k    sJ t          t          z                      t                    t          k    sJ t'          t                    t           z  t          z  t          z                      t                    t)          t                    t           z  t          z  t          z  k    sJ t                              t&                                        t                    t          t          d          k    sJ t+          t          dz  t
          z                                t                    dt          z  t+          t
                    z  k    sJ t-          d          } d| z  t          z  }|                    t                    d| z  t/          t                    z  k    sJ d S )Nr$   r5   mu)r&   r:   r0   r   r/   r"   r'   r,   r#   Tr%   r   dummy_eqr   	applyfuncr
   r   r   r   r   r   r   r   r   )rC   r>   s     r2    test_matrix_derivative_by_scalarrG   B   s'   66!99
1a((((((q1uIaKa  Jq!$4$4444466!99
1a((((((CE<<??jA......acE<<??jA......E<<??jA......!Q$$Q'':a+;+;;;;;!Q$$Q''00C((-1*=*=>>@ @ @ @ @Aq!!&&q))Z1-=-=====Ai1oo-q!4499!<<@PQRTU@V@VVVVVaC::a==AFF1HQJqLq!!SVVAXaZ\1111;;s  ##z!Q'7'77777Aa==a  AaCaL0000	BbDFD99Q<<1R4+++++++r4   c                      t          t          j        t          t          d                                        t                    t          t          d          k    sJ d S )Nr$   )r   r#   rD   r   r/   r:    r4   r2   test_one_matrixrJ   X   sC    !#yA'',,Q//9Q??BBBBBBr4   c            	      @   t          t                    } t          t          | |            t	          d          dd                    }t
                              t
                    |k    sJ t
          j                            t
                    t          t          | |            t	          d          ddd                    k    sJ dt
          z                      t
                    t          t          d| z  |            t	          d          dd                    k    sJ t          t
          t
                                        t
                    t          ||          k    sJ t
          t          z                       t
                    |k    sJ d S )N   r$   r5   )r   r/   r!   r    r   r&   r:   rD   r   r   r'   )IAdAs     r2   (test_matrix_derivative_non_matrix_resultrO   \   s?   A
(A..Aq!0D0D
E
EC66!99388A;;+&8A&>&>AqRSUV@W@WXXXXXXaC::a==K(:1Q3(B(BNKPQNNSTVWDXDXYYYYYY!Q<<Q8C#5#55555E<<??c!!!!!!r4   c                      t                               t                    t          t           t                    k    sJ d S r7   )r"   r:   r&   r   rI   r4   r2   $test_matrix_derivative_trivial_casesrQ   g   s/     66!991--------r4   c                  4   t           j        t          t                    z  t          z  } |                     t                    t          t                    j         t           z  t          j        z  t          t                    j        z  k    sJ t          t          t                              } t          t          t          t                    z  t          z            } |                     t                    t          dz  t          z  t          z  t          dz  z  j         k    sJ t          t          t          t          z                       } |                     t                    t          t          t          z             j        dz   k    sJ d S )Nr5   )
r*   rD   r   r"   r+   r:   r   r   r&   r'   r>   s    r2   #test_matrix_derivative_with_inverserU   m   s    3wqzz>!D99Q<<GAJJL=?13.wqzz|;;;;; wqzz""D
 71::a  D99Q<<QWQYq[R0333333 Q  D99Q<<WQU^^.11111111r4   c                  h   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          z  } |                     t                     t          k    sJ | d                             t           t
          df                                                   t          t
          df         k    sJ t          j        t           z  } |                     t                     t          k    sJ t          j        t          z  t          z  } |                     t                    t          t          j        z  k    sJ t          j        t          j        z  t          z  } |                     t                    t          t          j        z  k    sJ t          j        t          z  t          z  } |                     t                    t          t          j        z  k    sJ t          j        t          j        z  t          z  } |                     t                    t          t          j        z  k    sJ t          j        t          j        z  t          z  t          z  } |                     t                    t          t          z  t          j        z  t          t          z  t          j        z  z   k    sJ t          t           z  t          z   j        t          z  t          t           z  t           z   z  } |                     t                     t          j        t          z  t          t           z  t           z   z  t          j        t          j        z  t          t           z  t          z   z  z   k    sJ t           j        t          z  t           z  } |                     t                     t          t           z  t          j        t           z  z   k    sJ t          j        t          j        z  t          z  t          z  t          z  } |                     t                    t          j        t          z  t          z  t          j        z  t          t          z  t          z  t          j        z  z   k    sJ t          t          z  t          z   j        t          z  t          t          z  t          z   z  } |                     t                    t          t          t          z  t          z   z  t          j        z  t          j        t          t          z  t          z   z  t          j        z  z   k    sJ t#          | d                             t          t
          t$          f                                                             dk    sJ t           t           j        z  t           z  } t          t                    }|                     t                     t'          |t           j        t           z            dt           z  t           j        z  z   k    sJ 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))r5   )r#   r:   r   r/   r0   mdoitKDeltarD   r*   r"   r+   r,   r'   r(   r)   r-   strnr   r>   rM   s     r2   *test_matrix_derivative_vectors_and_scalarsr^      s6   66!99####QT7<<!Q$  %%''6!Q<<7777388A;;(1++%%%% 3q5D99Q<<1:??1QT7##((**a1g55553q5D99Q<<1 3q57D99Q<<1QS5     3qs719D99Q<<1QS5     3q57D99Q<<1QS5    3qs719D99Q<<1QS5     3qs719Q;D99Q<<1Q3qs7QqSW,,,,, aC!G;q=!A#'"D99Q<<13q5!A#'?QSWacAg->>>>>> 3q57D99Q<<1Q3Q;&&&& 3qs719Q;q=D99Q<<13q5713;1Qqs22222 aC!G;q=!A#'"D99Q<<1acAg;qs?QS!A#']13->>>>>>tDzqAw'',,..// 	^^ ^ ^ ^ QS57DA99Q<<+Aqs1u55!AC???????r4   c                  &   t          t                    t          z  } t          t                    }|                     t                    t          t          |t                    t          t          t          t                    |z  |           t          d          dd                              k    sJ | t          t          f                             t          t          t          f                                                   t          t          t                    t          t          t                    z  t          t                    z  t          t          t                    t          t          t          f         z  z   k    sJ t          t                    } |                     t                    t          t                    k    sJ |                     t"                                        t          t          t          f                                                   t          t          t                    k    sJ t          t          t          z            } |                     t                    t          j        k    sJ |                     t"                                        t          t          t          f                                                   t          t          t          f         k    sJ t          t          t          z  t&          z            } |                     t                    t          j        t&          j        z  k    sJ |                     t"                                        t          t          t          f                                                                       t          j        t&          j        z  t          t          f                   sJ t          t          t          j        z  t&          z            } |                     t                    t&          t          z  k    sJ t          t          j        t          z            } |                     t                    t          k    sJ t          t          t          j        z            } |                     t                    t          k    sJ t          t          dz            } |                     t                    dt          j        z  k    sJ t          t          dz  t&          z            } |                     t                    t          t&          z  t&          t          z  z   j        k    sJ t          t+          t          t          t&                              } |                     t                    t          t&          z  t&          t          z  z   j        k    sJ t          t          j        t&          z  t          z            } |                     t                    t&          t          z  t&          j        t          z  z   k    sJ t          t&          t          z  t          j        z            } |                     t                    t&          t          z  t&          j        t          z  z   k    sJ t          t          t          j        z  t&          z            } |                     t                    t&          t          z  t&          j        t          z  z   k    sJ t          t          t&          z  t          j        z            } |                     t                    t          t&          j        z  t          t&          z  z   k    sJ t          t&          t          j        z  t          z            } |                     t                    t          t&          j        z  t          t&          z  z   k    sJ t          t          j        t          z  t&          z            } |                     t                    t          t&          j        z  t          t&          z  z   k    sJ t          t          t          z  t&          z  t          z            } |                     t                    t          j        t          j        z  t&          j        z  t&          j        t          j        z  t          j        z  z   k    sJ t          t          j        t          z            } |                     t                    dt          z  k    sJ t          t          t          j        z            } |                     t                    dt          z  k    sJ t          t&          j        t          j        z  t,          z  t          z  t&          z            } |                     t                    t,          j        t          z  t&          z  t&          j        z  t,          t          z  t&          z  t&          j        z  z   k    sJ t          t          j        t&          z  t          z  t,          z            } |                     t                    t&          t          z  t,          z  t&          j        t          z  t,          j        z  z   k    sJ t          t          t          z  t&          z  t          j        z  t,          z            } |                     t                    t          j        t,          j        z  t          z  t&          j        z  t,          t          z  t          z  t&          z  z   k    sJ t          t          t          z  t&          z  t,          z   t          t          z  t&          z  t,          z   j        z            } |                     t                    dt          j        z  t          t          z  t&          z  t,          z   z  t&          j        z  k    sJ t          t          t          z            } t          t          t          t          z  z            } t          t&          j        t          j        z  t,          z  t          z  t          j        z  t,          z  t          z  t&          z            } |                     t                    t,          t          z  t          j        z  t,          z  t          z  t&          z  t&          j        z  t,          j        t          z  t&          z  t&          j        z  t          j        z  t,          j        z  t          z  z   t,          t          z  t&          z  t&          j        z  t          j        z  t,          z  t          z  z   t,          j        t          z  t          j        z  t,          j        z  t          z  t&          z  t&          j        z  z   k    sJ t          t          t          dz  z  t&          z            } |                     t                    t/          t                    j         t          j        z  t&          j        z  t/          t                    j        z  k    sJ t          t/          t          j        t,          z  t          z            t          z            } |                     t                    t                                          j         t          j        z  t                                          z  t,                                          j        z  t                                          j        z  t                                          j        t          z  t                                          z  t,                                          z  t                                          j        z  z
  k    sJ t          t          j        t,          z  t          z                                  t          j        t&          z  t          z  z            } |                     t                    dt,          z  t          z  t          j        t,          z  t          z                                  z  t          j        z  t&          z  t          z  t          j        t,          z  t          z                                  z  dt&          z  t          z  t          j        t,          z  t          z                                  z  z   k    sJ t          t          t          j        t,          z  t          z  z                                   t          j        t&          z  t          z  z            } |                     t                    t&          t          z  t/          t          t          j        t,          z  t          z  z             z  t,          t          z  t/          t          t          j        t,          z  t          z  z             z  t          j        z  t&          z  t          z  t/          t          t          j        t,          z  t          z  z             z  z
  t,          j        t          z  t/          t          j        t,          t          z  j        t          z  z             z  t          j        z  t&          j        z  t          z  t/          t          j        t,          t          z  j        t          z  z             z  z
  t&          j        t          z  t/          t          j        t,          t          z  j        t          z  z             z  z   k    sJ d S )NrL   r$   r5   rS   )r   r&   r   r/   r:   r   r    r!   r   r0   r1   rX   r\   rY   rZ   r"   rewriter   rD   r'   rE   r   r(   r   invr]   s     r2   !test_matrix_derivatives_of_tracesrc      s   88A:DA99Q<<8$6q!$<$<kJ\]bcd]e]efg]gijJkJkm{mxyzm{m{|}  @A  nB  nB  ?C  ?C  D  D  D  D  D  D1:??1QT7##((**q!VAq\\!%((*q!Qq!tW	    88D99Q<<8A;;&&&&<<!!!AqD'**//11VAq\\AAAA 1::D99Q<<13<<!!!AqD'**//11Qq!tW<<<< 1Q<<D99Q<<13qs7""""<<!!!AqD'**//11::ACGQT?KKKKK 13q>>D99Q<<1Q3 Q<<D99Q<<1 13<<D99Q<<1 A;;D99Q<<1QS5     Aa==D99Q<<AaC!A#I=((((1a!!D99Q<<AaC!A#I=(((( Qq>>D99Q<<1Q3Q;&&&& 1QS>>D99Q<<1Q3Q;&&&& 13q>>D99Q<<1Q3Q;&&&& 1QS>>D99Q<<1QS51Q3;&&&& 13q>>D99Q<<1QS51Q3;&&&& Qq>>D99Q<<1QS51Q3;&&&& 1Qq>>D99Q<<13qs713;QS44444 Q<<D99Q<<1Q313<<D99Q<<1Q3 QS1QD99Q<<13q5713;1Qqs22222 QqD99Q<<1Q3q513q59,,,,, 1Qqs1D99Q<<13qs719QS=1Q3q5722222 !A#a%!)ac!eai]*++D99Q<<1QS5!A#a%!),QS00000 A;;D 1a4==D QS1QS"1$Q&''D99Q<<1Q3qs719Q;q=,qs1uQwqs{13qs/B1/DDqs1uQSyQRQT}UVWXGXX[\[^_`[`abad[defeh[hij[jkl[lmnmp[pppppp
 1r71D99Q<<GAJJL=,QS0===== Qq!!!#$$D99Q<<QUUWWY;qs?155772155779<QUUWWYFSTUVUZUZU\U\I\]^]b]b]d]dIdefejejelelenInnnnnn !#a%'!#a%'*++D99Q<<2a4613q57--//1!#5a7913q57--//IAaCPQESTSVWXSXYZSZR_R_RaRaLaaaaaa !ac!eAg+""$$ac!eAg.//D99Q<<1Q3wq13q57{333ac'!ac!eAg+:N:N6Nqs6RST6TUV6VW^_`cdcfghchijcj_jWkWk6kknonqrsnst{|}|  DE  FG  DG  CJ  KL  CL  }L  uM  uM  oM  NO  NQ  oQ  RS  RU  oU  VW  oW  X_  `a  `c  gh  ij  gj  fm  no  fo  `o  Xp  Xp  op  p  st  sv  wx  sx  y@  AB  AD  HI  JK  HK  GN  OP  GP  AP  yQ  yQ  sQ  Q  Q  Q  Q  Q  Q  Qr4   c            	      4   t           j        t          t          z  t          j        t          z  t          t          z  z   z  t          j        t          j        z  t           t
          j        z  t          t          z  t          j        z  t          t          j        t          z  t          t          z  z   z  t          z  t          z  z   t          j        t          j        z  t          z  z
  z  t          z  t          t          t          j        z  t          t          z  t          z  t          j        z  z   dt          z  t          z  z
  z  z   z  t          z  z   dt          z  t          z  t          j        z  t          j        z  t          t          j        z   z  z   z  t
          z  } t          t          t          z  t          z  t          j        z  dt          z  t          z  z
  t          t          j        z  z   z  t           t
          j        z  t          t          t          z  t          j        t          z  z   z  t          z  t          z  t          t          z  t          j        z  z   t          j        t          j        z  t          z  z
  z  t          z  z   t          z  t
          z  t           j        z  t          j        z  t          dz  t
          z  t           j        z  t          j        z  t          j        z  t           z  t
          j        z  t          z  t          z  z   dt          z  t          z  t          j        z  t          j        z  t           z  t
          j        z  z   t          t          z  t          dz  z  t
          z  t           j        z  t          j        z  t          j        z  t           z  t
          j        z  t          z  z   t          t
          z  t           j        z  t          z  t          z  z   t           t
          j        z  dt          z  dt          j        z  z   z  t          z  t          z  t          j        z  z   t
          t           j        z  t          z  t          z  t           z  t
          j        z  t          j        dz  z  t          z  t          j        z  z   t
          t           j        z  t          z  t          z  t           z  t
          j        z  t          j        dz  z  t          j        z  t          j        t          z  t          j        t          j        z  z   z  z   dt
          z  t           j        z  t          z  t          z  t          j        z  t          j        z  z   t          j        dt          z  dt          j        z  z   z  t
          z  t           j        z  t          z  t          z  z   t          j        t          j        dz  z  t          z  t          z  t           z  t
          j        z  t          j        z  t          z  z   t          j        t           z  t
          j        z  t          j        t          j        z  t          j        t          z  z   z  z   t          j        t          j        z  t
          z  t           j        z  t          z  t          z  t           z  t
          j        z  t          j        dz  z  t          j        z  z   t          j        t          z  t          z  t           z  t
          j        z  t          j        z  t          z  z   dt          j        z  t          z  t          z  t           z  t
          j        z  t          j        z  t          j        z  z
  t          j        t          z  t          dz  z  t
          z  t           j        z  t          j        z  t          j        z  t           z  t
          j        z  z
  t          j        t          j        z  t           z  t
          j        z  t          j        z  z   }|                     t                    |k    sJ d S )NrL   *   r5   )	r*   rD   r&   r"   r'   r+   r)   r(   r:   )r>   results     r2   +test_derivatives_of_complicated_matrix_exprrg   L  s?   3!QSUQqS[!ACGQqsUAaCGaQ1oa>OPQ>Q4QTUTWXYX[T[\]T]4]-^_`-`cdfghihkfknopqnqrsnstutwnwfwz{|}z}~zf  dA  .A  %B  CD  %D  D  GI  JK  GK  LM  GM  NO  NQ  GQ  RS  RU  GU  WX  [\  [^  W^  G_  _  `  ab  bD1QqsQqSU"QqsU*+aeQ!ac!e_Q5Fq5H1Q3qs75RUVUXYZY\U\]^U^5^._`a.aacddeffghgjjklknnqrtuquvwqwxyx{q{|}|q  AB  AD  rD  EF  rF  GH  GJ  rJ  KL  rL  MN  rN  N  QS  TU  QU  VW  QW  XY  X[  Q[  \]  \_  Q_  `a  Qa  bc  be  Qe  e  hi  jk  hk  lm  op  lp  hp  qr  hr  st  sv  hv  wx  wz  hz  {|  {~  h~  @  h@  AB  AD  hD  EF  hF  F  IJ  KL  IL  MN  MP  IP  QR  IR  ST  IT  T  WX  YZ  Y\  W\  ^`  ab  ^b  eg  hi  hk  ek  ^k  Wl  mn  Wn  op  Wp  qr  qt  Wt  t  wx  yz  y|  w|  }~  w~  @  w@  AB  wB  CD  CF  wF  GH  GJ  LM  GM  wM  NO  wO  PQ  PS  wS  S  VW  XY  X[  V[  \]  V]  ^_  V_  `a  Va  bc  be  Ve  fg  fi  kl  fl  Vl  mn  mp  Vp  rs  ru  vw  rw  z{  z}  ~  ~A  zA  rA  VB  B  EG  HI  EI  JK  JM  EM  NO  EO  PQ  EQ  RS  RU  EU  VW  VY  EY  Y  \]  \_  ac  de  ae  hj  kl  kn  hn  an  \o  pq  \q  rs  ru  \u  vw  \w  xy  \y  y  |}  |  @A  @C  EF  @F  |F  GH  |H  IJ  |J  KL  |L  MN  MP  |P  QR  QT  |T  UV  |V  V  YZ  Y\  ]^  Y^  _`  _b  Yb  de  dg  hi  hk  dk  no  nq  rs  ns  ds  Yt  t  wx  wz  {|  {~  w~  @  w@  AB  AD  wD  EF  wF  GH  wH  IJ  wJ  KL  KN  wN  OP  OR  TU  OU  wU  VW  VY  wY  Y  \]  \_  `a  \a  bc  \c  de  \e  fg  fi  \i  jk  jm  \m  no  \o  o  rs  tu  tw  rw  xy  ry  z{  r{  |}  r}  ~  ~A  rA  BC  BE  rE  FG  FI  rI  I  LM  LO  PQ  LQ  RS  UV  RV  LV  WX  LX  YZ  Y\  L\  ]^  ]`  L`  ab  ad  Ld  ef  Lf  gh  gj  Lj  j  mn  mp  qr  qt  mt  uv  mv  wx  wz  mz  {|  {~  m~  ~F99Q<<6!!!!!!r4   c                  ~   dt          t                    z  } |                     t                    dt          t                    z  k    sJ t          } |                     t                    }t          |t                    sJ |t          t          t                    k    sJ t          t                    dz  } |                     t                    dt          t                    z  t          t                    z  k    sJ t          t                    t          z  } t          t                    }|                     t                    t          t          |t                    t          t          t          t                    |z  |           t          d          dd                              k    sJ t          t          t                    t          z            } |                     t                    dt          t                    z  t          t                    z  k    sJ t          t          t          t                    t          z            t          z            } |                     t                    dt          t                    dz  z  t          t                    z  k    sJ d S )NrL   r5   r$   )r   r&   r:   r   r/   
isinstancer   r   r    r!   r   )r>   derivrM   s      r2   "test_mixed_deriv_mixed_expressionsrk   R  s   U1XX:D99Q<<1Xa[[=((((DIIaLLEeZ(((((Jq!$$$$$$88Q;D99Q<<AeAhhJ3333388A:DA99Q<<8$6q!$<$<kJ\]bcd]e]efg]gijJkJkm{mxyzm{m{|}  @A  nB  nB  ?C  ?C  D  D  D  D  D  Dq!D99Q<<AeAhhJ33333uQxxz""1$%%D99Q<<AeAhhkM8A;;6666666r4   c                  T   t           j        t          z  } |                     t                     t          k    sJ | d                             t           t          df                                                   t          t          df         k    sJ t           j        t          z  t          j        z  } |                     t                     t          dt          t           j        t          z            z  z  k    sJ t           j        t           z  t          j        z  } |                     t                     t           t           j        t           z  t          dd          z  z  k    sJ t          j        t          z  t           j        z  t          z  t          j        z  } |                     t                     t          t          j        z  t          z  t          t          j        t          z  t           j        z  t          z            z  dz  k    sJ t          j        t          z  t           j        z  t          z  t          dd          z  } |                     t                     t          t          j        z  t          z  t          j        t          z  t           j        z  t          z  t          dd          z  z  dz  k    sJ t          j        t          z  t          z  t          j        z  } |                     t                    t          dt          t          j        t          z  t          z            z  z  t          j        z  k    sJ t          j        t           z  t          j        t          z  t          z  t          j        z  z  t          j        z  t          z  } |                     t                    t          dt          t          j        t          z  t          z            z  z  t           j        z  t          z  t          j        z  t          z  t          j        z  k    sJ d S )NrW   r   r5   rS   r$   rL   r`   )r#   rD   r%   r:   rX   rY   r   Halfr   r   r,   r*   r+   r"   r-   rT   s    r2   test_derivatives_matrix_normsrn   j  s   3q5D99Q<<1:??1QT7##((**a1g5555CEAF?D99Q<<1aQSUm,,,,,CEAF?D99Q<<1ac!ehr1oo555555CE!#IaK!& D99Q<<1QS574Aac	!#4#44Q66666CE!#IaK(1a..(D99Q<<1QS57ACE!#IaK(2q//#AA!CCCCCCE!GafD99Q<<1aQSU1Wo.qs222223q5!#a%'AF""13&q(D99Q<<1aQSU1Wo.qs214QS8:13>>>>>>>r4   c                  B   t                               t                    } |                     t                                         t          t                               d                               sJ | t          df                             t           t          df                                                   t          t           t          df                   dz  dz   t          t          t                    z  k    sJ t          | t           |                     t                                t          dz  t           z                      t                    } |                     t                                        t          dt          z  t           z  t          dz  t           z                      t                                        sJ | t          df                             t                                                    dt          z  t           t          df         z  t          t          dz  t           t          df         z            z  k    sJ t          | t          |                     t                               t          t                    t          z  t           z                      t                    } |                     t                                        t          t          t           z  t          z  t          t                    t          z  t           z                      t                                        sJ t          | t          |                     t                               t          t                               t"                    z  } t          | t           |                     t                                t           j        t          z  t           z  t&          t(                              t                    j        z  t           z  z   } |                     t                                         t          j        t           z  t          t           z  z   t&          t(                              t                    z  z             sJ t          | t           |                     t                                t                               t                    j        t(          z  } t          | t           |                     t                                t*          j        t,          z  t.          z                      t                    } |                     t,                                        t*          t*          j        t,          z  t.          z                      t                    z  t.          j        z            sJ t          | t,          |                     t,                               t*          j        t,                              t                    z  t.          z  } |                     t,                                        t          t*                    t,                              t                    z  t          t.                    z            sJ t          | t,          |                     t,                               t*          j        t          t,          z  t           z                      t                    z  t.          z  } |                     t,                                        t          j        t          t*                    z  t          t,          z  t           z                      t                    z  t          t.                    z  t           j        z            sJ t          | t,          |                     t,                               t*          j        t          t,          z  t.          z                      t                    z  t.          j        z  } t*          j        t          z  t,                              t                    z  t           z  t.          z  } |                     t,                                        t          t          j        t*          z  t.          j        z  t           j        z  t,                              t                                        sJ t*          j        t          t,                              t                    z  t           z                      t                    z  t.          z  } t*          j        t,                              t                                        t                    z  t.          z  } d S )Nc                 ,    t          |           dz  dz   S )Nr5   r$   )r   )r#   s    r2   r3   z8test_derivatives_elementwise_applyfunc.<locals>.<lambda>  s    QQ r4   r   r5   r$   )r#   rF   r   r:   rE   r   r0   rX   rY   rZ   rA   r   r   r   r
   r&   r'   r	   rD   r/   r%   r*   r"   r+   rT   s    r2   &test_derivatives_elementwise_applyfuncrq     s'   ;;sD99Q<<  1;;667788: : : : :1:??1QT7##((**s1QT7||Q/BF1aLL.PPPPP*4DIIaLLAAAqDFc""D99Q<<  1a!Q$q&!3!3C!8!899; ; ; ; ;1:??1""$$!AadGC1Qq!tW4E4E(EEEEE*4DIIaLLAAAFF1HQJ!!#&&D99Q<<  !AAq
55c::;;= = = = =*4DIIaLLAAAQ[[D +4DIIaLLAAA3q57Qq{{3''))!++D99Q<<  Q1qS1A1A/A!ABBBBB*4DIIaLLAAA;;saD +4DIIaLLAAAC!GaK""3''D99Q<<  ACE!G#6#6s#;#;!;AC!?@@@@@*4DIIaLLAAA3S!!!A%D99Q<<  1akk#&&&z!}}46 6 6 6 6*4DIIaLLAAA3!A#a%""3'''!+D99Q<<  	JqMM1Q3q5++C000A>qsBD D D D D*4DIIaLLAAA3!A#a%""3'''!#-D
 3q5S!!!!#A%D99Q<<  a!#+Q[[-=-=>>@ @ @ @ @ 3!AKK$$$Q&11#666:D 3!++c""--c222Q6DDDr4   c                  \   t          t          t          t                    } |                     t                    t          t          t          t                              k    sJ t          j        t          t          t          t                    z  t          z  } |                     t                    t          t          t          j        z  t          t                    k    sJ t          t          d          } |                     t                                                    dt          t                    z  k    sJ t          t          j        d          } |                     t                                                    dt          t                    z  k    sJ t          t          t          j                  } |                     t                    t          j        t          t          t          t          dd                              z  k    sJ t          t          j        t          z  t          z  d          } |                     t                    dt          z  t          j        z  t          z  t          z  t          j        z  k    sJ t          t          j        t          z  t          z  t          j                  } |                     t                    t          dt!          t          j        t          z  t          z            z  z  t          j        z  k    sJ d S )Nr5   rS   )r   r*   r#   r+   r:   r   rD   r&   r"   r'   r   r   rY   r   rm   r   r   rT   s    r2   (test_derivatives_of_hadamard_expressionsrs     s    Aq!$$D99Q<<:&6q!&<&<======31a(((*D99Q<<?1QS5!Q777777 !QD99Q<<!JqMM/1111!#q!!D99Q<<!JqMM/1111!QV$$D99Q<<16*^AxA-O-O"P"PPPPPP!#a%'1%%D99Q<<1Q3qs719Q;qs?****!#a%'16**D99Q<<1aQSU1Wo.qs2222222r4   N)r5   )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!   r0   r1   r/   rX   r\   r"   r#   r%   r&   r'   r(   r)   r*   r+   r,   r-   rZ   rA   rG   rJ   rO   rQ   rU   r^   rc   rg   rk   rn   rq   rs   rI   r4   r2   <module>r      s   
 # " " " " " + + + + + + ) ) ) ) ) ) ' ' ' ' ' ' " " " " " " % % % % % % = = = = = = = = 9 9 9 9 9 9 D D D D D D D D D D C C C C C C > > > > > > : : : : : : b b b b b b b b b b 6 6 6 6 6 6 ; ; ; ; ; ; 8 8 8 8 8 8 2 2 2 2 2 2 4 4 4 4 4 4 4 4 4 4 4 4 E E E E E E E E @ @ @ @ @ @ 5 5 5 5 5 5 f f f f f f f f f f
''

1awu~~1LaLaLaLaLaLaLaLaLaLaLa 
5	4H H H H, , ,,C C C" " ". . .2 2 2(5@ 5@ 5@pPQ PQ PQf" " "7 7 70? ? ?2<7 <7 <7B3 3 3 3 3r4   