
    sgi                        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m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mZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) d dl*m+Z+ ed        Z,e,j[                  e      dedefd       Z.e,j[                  e      dedefd       Z.e,j[                  e      dedefd       Z.e,j[                  e      dedefd       Z.e,j[                  e      dedefd       Z.e,j[                  e      dedefd       Z.e,j[                  e      dedefd       Z.e,j[                  e      dedefd       Z.e,j[                  e      dedefd       Z.e,j[                  e       de defd       Z.e,j[                  e      dedefd       Z.e,j[                  e	      de	defd       Z.e,j[                  e#      de#defd       Z.e,j[                  e      dedefd       Z.e,j[                  e      dedefd       Z.e,j[                  e      dedefd        Z.e,j[                  e)      de)defd!       Z.d" Z/y)#    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    t        dt        |              )z8
    Derivatives (gradients) for array expressions.
    znot implemented for type )NotImplementedErrortypeexprxs     g/var/www/html/venv/lib/python3.12/site-packages/sympy/tensor/array/expressions/arrayexpr_derivatives.pyarray_deriver)      s    
  9$t*F
GG    r&   r'   c                 &    t        |j                   S Nr   shaper%   s     r(   _r/      s    aggr*   c                 T   | j                   }g }t        | j                         D ]I  \  }}t        ||      }|dk(  r|d | }||dz   d  }t        t        j
                  t        t        |      d      }	t        t        j
                  t        t        |      d      }
t        g ||| }t        t        |            }|t        |	      z   }|t        t        |            z   }|t        |
      z   }t        t        ||            t        t        |            z   t        t        ||            z   t        t        ||            z   }t        |t        |            }|j                  |       L t        |      dk(  r|d   S t        |      dk(  rt        j                   S t#        | S )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/   "   s   99DKDII& #3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 !#'dD(9#:;E$%&' vz$'786"##$ ;11~	[	Q	vv;''r*   c           	      ~   | |k(  rt        t        j                  d | j                  D              t	        t        | j                              D cg c]  }d|z  	 c}t	        t        | j                              D cg c]
  }d|z  dz    c}z         S t        |j                  | j                  z    S c c}w c c}w )Nc              3   2   K   | ]  }t        |        y wr,   )r   ).0r>   s     r(   	<genexpr>z_.<locals>.<genexpr>D   s     'H'Hs      r1   )r   r   fromiterr.   r:   r8   r   )r&   r'   r>   s      r(   r/   r/   @   s    qy'''HTZZ'HHDJJ01QQqS1E#djj/DZ4[qQqSU4[[
 	
 qww+-- 24[s   B5
>B:c                     | j                   \  }}| |k(  r*t        t        t        |      t        |            g d      S t	        |j                   | j                   z    S )N)r   rO   r1      )r.   r   r   r   r   )r&   r'   mns       r(   r/   r/   J   sR    ::DAqqy!(1+x{;
 	
 qww+--r*   c                 @    t        |j                  | j                  z    S r,   r-   r%   s     r(   r/   r/   U       qww+--r*   c                 @    t        |j                  | j                  z    S r,   r-   r%   s     r(   r/   r/   Z   rV   r*   c                 J    t        | j                  |      }t        |g d      S )N)r   r1   rR   rO   )r)   r?   r   )r&   r'   fds      r(   r/   r/   _   s!     
dhh	"B\**r*   c                     | j                   }t        ||      }t        |  ||       }t        |dd      }t	        |g d      }|S )N)r1      )      )r1   rO   r   rR   )Ir)   r   r   r   )r&   r'   matdexprtpmppps          r(   r/   r/   g   sF    
&&Ca E	ueT	2B	B	/B	r<	(BIr*   c                     t        |       dk(  sJ t        |      dk(  sJ | j                         }t        | j                  |      }t	        t        || j                        |      }t        |dd      }|S )NrO   )r   r[   )r1   r\   )r   _get_function_fdiffr)   r&   r   r   r   )r&   r'   fdiffr`   ra   tds         r(   r/   r/   q   sy    D>QA;!$$&EA&E	 		2
B 

FF
B Ir*   c                    | j                         }| j                  }t        ||      }t        |t	        ||            }t        |      }t        |       }t        |      D cg c]  }||z   ||z   |z   f }	}t        |g|	 S c c}w r,   )re   r&   r)   r   r   r   r:   r   )
r&   r'   rf   subexprdsubexprra   bcr>   diag_indicess
             r(   r/   r/      s    $$&EiiGGQ'H	!%1
B 	AA05a91QUAEAI&9L92--- :s   "Bc                 0    t        |       }t        ||      S r,   )r!   r)   )r&   r'   cgs      r(   r/   r/      s    	 	&BAr*   c                     t               r,   )r#   r%   s     r(   r/   r/      s    

r*   c                     t        | j                  |      }t        t        |            | j                  }|D cg c]  }t        fd|D               }}t        |g| S c c}w )Nc              3   (   K   | ]	  }|z     y wr,   r2   )rM   jrank_xs     r(   rN   z_.<locals>.<genexpr>   s     $;AQZ$;s   )r)   r&   r8   r   contraction_indicestupler   )r&   r'   rY   ru   r>   new_contraction_indicesrt   s         @r(   r/   r/      sc    	dii	#B1F22EXYu$;$;;YYb;#:;; Zs   A%c           	          t        | j                  |      }t        t        |            }| j                  D cg c]  }|D cg c]  }||z   	 c} }}}t        |g| S c c}w c c}}w r,   )r)   r&   r8   r   diagonal_indicesr   )r&   r'   rj   rt   r>   rs   rm   s          r(   r/   r/      s`    DIIq)H1F595J5JK+AQZ+KLK83l33 ,Ks   	A(A#A(#A(c           	      `    t        | j                  D cg c]  }t        ||       c} S c c}w r,   )r   r3   r)   )r&   r'   r?   s      r(   r/   r/      s&    		BS!,BCCBs   +c                     t        | j                  |      }ddg| j                  j                  D cg c]  }|dz   	 c}z   }t	        ||      S c c}w )Nr   r1   rO   )r)   r&   permutation
array_formr   )r&   r'   der>   rJ   s        r(   r/   r/      sN    	dii	#Bq6D$4$4$?$?@qQU@@DT"" As   Ac                 r    t        | j                  |      }t        |t        |      | j                  z         S r,   )r)   r&   r    r   r.   )r&   r'   r~   s      r(   r/   r/      s,    	dii	#B2y|djj011r*   c                 h    ddl m} t        |       }t        ||      } ||      j	                         S )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
r1
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*   