
    shi                        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J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JrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)  S SK*J+r+  \S 5       r,\,R[                  \5      S\S\4S j5       r.\,R[                  \5      S\S\4S j5       r.\,R[                  \5      S\S\4S j5       r.\,R[                  \5      S\S\4S j5       r.\,R[                  \5      S\S\4S j5       r.\,R[                  \5      S\S\4S j5       r.\,R[                  \5      S\S\4S j5       r.\,R[                  \5      S\S\4S j5       r.\,R[                  \5      S\S\4S j5       r.\,R[                  \ 5      S\ S\4S j5       r.\,R[                  \5      S\S\4S j5       r.\,R[                  \	5      S\	S\4S j5       r.\,R[                  \#5      S\#S\4S j5       r.\,R[                  \5      S\S\4S j5       r.\,R[                  \5      S\S\4S j5       r.\,R[                  \5      S\S\4S  j5       r.\,R[                  \)5      S\)S\4S! j5       r.S" r/g)#    N)reducesingledispatch)Expr)S)HadamardProduct)Inverse)
MatrixExprMatrixSymbol)Identity	OneMatrix)	Transpose)
_af_invert)ElementwiseApplyFunction)
_ArrayExpr	ZeroArrayArraySymbolArrayTensorProductArrayAddPermuteDimsArrayDiagonalArrayElementwiseApplyFuncget_rank	get_shapeArrayContraction_array_tensor_product_array_contraction_array_diagonal
_array_add_permute_dimsReshape)convert_matrix_to_arrayc                 0    [        S[        U 5       35      e)z0
Derivatives (gradients) for array expressions.
znot implemented for type )NotImplementedErrortypeexprxs     ڈ/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/sympy/tensor/array/expressions/arrayexpr_derivatives.pyarray_deriver)      s    
  9$t*F
GG    r&   r'   c                 &    [        UR                  6 $ Nr   shaper%   s     r(   _r/      s    aggr*   c                 T   U R                   n/ n[        U R                   5       GHF  u  pE[        XQ5      nUS:X  a  M  US U nX$S-   S  n[        [        R
                  [        [        U5      S5      n	[        [        R
                  [        [        U5      S5      n
[        / UQUPUQ76 n[        [        U5      5      nU[        U	5      -   nU[        [        U5      5      -   nU[        U
5      -   n[        [        X5      5      [        [        U5      5      -   [        [        X5      5      -   [        [        X5      5      -   n[        U[        U5      5      nUR                  U5        GMI     [        U5      S:X  a  US   $ [        U5      S:X  a  [        R                   $ [#        U6 $ )Nr       )args	enumerater)   r   operatoraddmapr   r   lenlistranger   r   appendr   Zeror   )r&   r'   r3   addend_listiargdarg	args_prev	args_succ
shape_prev
shape_succaddendtot1tot2tot3tot4perms                    r(   r/   r/   "   sv   99DKDII&C#19!H	1J	HLL#i*CRH
HLL#i*CRH
&D	D4D)D9Q< c*o%c)C.))c*o%E$%&E$K !#'d(9#:;E$%&' vz$'786"# '$ ;11~	[	Q	vv;''r*   c           	         X:X  a  [        [        R                  " S U R                   5       5      [	        [        U R                  5      5       Vs/ s H  nSU-  PM
     sn[	        [        U R                  5      5       Vs/ s H  nSU-  S-   PM     sn-   5      $ [        UR                  U R                  -   6 $ s  snf s  snf )Nc              3   8   #    U  H  n[        U5      v   M     g 7fr,   )r   ).0r>   s     r(   	<genexpr>_.<locals>.<genexpr>D   s     'HZZs      r1   )r   r   fromiterr.   r:   r8   r   )r&   r'   r>   s      r(   r/   r/   @   s    y'''HTZZ'HHDJJ010QQqS01E#djj/DZ4[DZqQqSUDZ4[[
 	
 qww+-- 24[s   B<
Cc                     U R                   u  p#X:X  a*  [        [        [        U5      [        U5      5      / SQ5      $ [	        UR                   U R                   -   6 $ )N)r   rP   r1      )r.   r   r   r   r   )r&   r'   mns       r(   r/   r/   J   sN    ::DAy!(1+x{;
 	
 qww+--r*   c                 @    [        UR                  U R                  -   6 $ r,   r-   r%   s     r(   r/   r/   U       qww+--r*   c                 @    [        UR                  U R                  -   6 $ r,   r-   r%   s     r(   r/   r/   Z   rW   r*   c                 J    [        U R                  U5      n[        U/ SQ5      $ )N)r   r1   rS   rP   )r)   r?   r   )r&   r'   fds      r(   r/   r/   _   s!     
dhh	"B\**r*   c                     U R                   n[        X!5      n[        U * X05      n[        USS5      n[	        U/ SQ5      nU$ )N)r1      )      )r1   rP   r   rS   )Ir)   r   r   r   )r&   r'   matdexprtpmppps          r(   r/   r/   g   sB    
&&C E	ue	2B	B	/B	r<	(BIr*   c                     [        U 5      S:X  d   e[        U5      S:X  d   eU R                  5       n[        U R                  U5      n[	        [        X R                  5      U5      n[        USS5      nU$ )NrP   )r   r\   )r1   r]   )r   _get_function_fdiffr)   r&   r   r   r   )r&   r'   fdiffra   rb   tds         r(   r/   r/   q   sw    D>QA;!$$&EA&E	 		2
B 

FF
B Ir*   c                    U R                  5       nU R                  n[        X15      n[        U[	        X#5      5      n[        U5      n[        U 5      n[        U5       Vs/ s H  oU-   Xg-   U-   4PM     n	n[        U/U	Q76 $ s  snf r,   )rf   r&   r)   r   r   r   r:   r   )
r&   r'   rg   subexprdsubexprrb   bcr>   diag_indicess
             r(   r/   r/      s    $$&EiiGG'H	!%1
B 	AA05a91UAEAI&L92--- :s    Bc                 .    [        U 5      n[        X!5      $ r,   )r!   r)   )r&   r'   cgs      r(   r/   r/      s    	 	&Br*   c                     [        5       er,   )r#   r%   s     r(   r/   r/      s    

r*   c                    ^ [        U R                  U5      n[        [        U5      5      mU R                  nU Vs/ s H  n[        U4S jU 5       5      PM     nn[        U/UQ76 $ s  snf )Nc              3   ,   >#    U  H	  oT-   v   M     g 7fr,   r2   )rM   jrank_xs     r(   rN   rO      s     $;AZs   )r)   r&   r8   r   contraction_indicestupler   )r&   r'   rZ   rv   r>   new_contraction_indicesru   s         @r(   r/   r/      sf    	dii	#B1F22EXYEXu$;$;;EXYb;#:;; Zs   A)c           	          [        U R                  U5      n[        [        U5      5      nU R                   VVs/ s H  oD Vs/ s H  oUU-   PM	     snPM     nnn[        U/UQ76 $ s  snf s  snnf r,   )r)   r&   r8   r   diagonal_indicesr   )r&   r'   rk   ru   r>   rt   rn   s          r(   r/   r/      se    DIIq)H1F595J5JK5J+AZ+5JLK83l33 ,Ks   	A,A'A,'A,c           	      d    [        U R                   Vs/ s H  n[        X!5      PM     sn6 $ s  snf r,   )r   r3   r)   )r&   r'   r?   s      r(   r/   r/      s(    		B	S,	BCCBs   -c                     [        U R                  U5      nSS/U R                  R                   Vs/ s H  o3S-   PM	     sn-   n[	        X$5      $ s  snf )Nr   r1   rP   )r)   r&   permutation
array_formr   )r&   r'   der>   rJ   s        r(   r/   r/      sP    	dii	#Bq6D$4$4$?$?@$?qU$?@@D"" As   Ac                 r    [        U R                  U5      n[        U[        U5      U R                  -   5      $ r,   )r)   r&   r    r   r.   )r&   r'   r   s      r(   r/   r/      s,    	dii	#B2y|djj011r*   c                 f    SSK Jn  [        U 5      n[        X15      nU" U5      R	                  5       $ )Nr   )convert_array_to_matrix)3sympy.tensor.array.expressions.from_array_to_matrixr   r!   r)   doit)r&   r'   r   cedces        r(   matrix_deriver      s-    [	 	&B
r
C"3',,..r*   )0r5   	functoolsr   r   sympy.core.exprr   sympy.core.singletonr   #sympy.matrices.expressions.hadamardr   "sympy.matrices.expressions.inverser   "sympy.matrices.expressions.matexprr	   r
   "sympy.matrices.expressions.specialr   r   $sympy.matrices.expressions.transposer    sympy.combinatorics.permutationsr   $sympy.matrices.expressions.applyfuncr   0sympy.tensor.array.expressions.array_expressionsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    3sympy.tensor.array.expressions.from_matrix_to_arrayr!   r)   registerr/   r   r2   r*   r(   <module>r      si    ,   " ? 6 I B : 7 I9 9 9 9 9
 X H H tD Z   )*( (4 ( +(: {#.K .J . $. |$.L .Z . %. x .H . . !. y!.I .* . ". y!+I +$ + "+ wG     /0$   1 01.% .$ . 2. z"J 4  #
 ' O     (  '(< < < )< }%4M 4d 4 &4 x DH D D !D {##K #D # $# w2G 2 2  2
/r*   