
    sg                        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 d d	lmZ d d
lmZ d dlmZ  G d de      Zy)    )annotations)Expr)
Derivative)Integer)
MatrixBase   )	NDimArray)derive_by_array)
MatrixExpr)
ZeroMatrix_matrix_derivativec                       e Zd ZdZ fdZd Zed        Zed        Z	e
dd       Ze
dd       Ze
dd       Ze
dd	       Ze
dd
       Ze
dd       Ze
dd       Ze fd       Z xZS )ArrayDerivativeFc                z    t        |   | |g|i |}t        |t              r|j	                         |_        |S N)super__new__
isinstancer   
_get_shape_shape)clsexpr	variableskwargsobj	__class__s        W/var/www/html/venv/lib/python3.12/site-packages/sympy/tensor/array/array_derivatives.pyr   zArrayDerivative.__new__   s:    goc4>)>v>c?+)CJ
    c                    d}| j                   D ]1  \  }}t        |d      st        |      D ]  }||j                  z  } 3 t        | j                  d      r|| j                  j                  z  }|S )N shape)variable_counthasattrranger"   r   )selfr"   vcountis        r   r   zArrayDerivative._get_shape   sr    ++ 	%HAuq'"u %AQWW$E%	% 499g&TYY__$Er   c                    | j                   S r   )r   )r&   s    r   r"   zArrayDerivative.shape"   s    {{r   c                    t        |t        t        f      r |j                  |j                   S t        |t
              rt        |j                   S t        d      )Nz.Unable to determine shape of array-derivative.)r   r   r	   zerosr"   r   r   RuntimeError)r   r   s     r   _get_zero_with_shape_likez)ArrayDerivative._get_zero_with_shape_like&   sK    dZ344::tzz**j)tzz**OPPr   c                ,     |j                   fd      S )Nc                &    j                  |       S r   diffxr   s    r   <lambda>z?ArrayDerivative._call_derive_scalar_by_matrix.<locals>.<lambda>1       TYYq\ r   	applyfuncr   r'   s   ` r   _call_derive_scalar_by_matrixz-ArrayDerivative._call_derive_scalar_by_matrix/       {{122r   c                `    | j                  |      rt        | |      S t        |j                   S r   )hasr   r   r"   r9   s     r   _call_derive_scalar_by_matexprz.ArrayDerivative._call_derive_scalar_by_matexpr3   s)    88A;%dA..qww''r   c                ,     |j                   fd      S )Nc                &    j                  |       S r   r1   r3   s    r   r5   z>ArrayDerivative._call_derive_scalar_by_array.<locals>.<lambda><   r6   r   r7   r9   s   ` r   _call_derive_scalar_by_arrayz,ArrayDerivative._call_derive_scalar_by_array:   r;   r   c                    t        | |      S r   r   r9   s     r   _call_derive_matrix_by_scalarz-ArrayDerivative._call_derive_matrix_by_scalar>   s    !$**r   c                $    | j                  |      S r   )_eval_derivativer9   s     r   _call_derive_matexpr_by_scalarz.ArrayDerivative._call_derive_matexpr_by_scalarB   s    $$Q''r   c                ,    | j                  fd      S )Nc                &    | j                        S r   r1   )r4   r'   s    r   r5   z>ArrayDerivative._call_derive_array_by_scalar.<locals>.<lambda>H   s    q	 r   r7   r9   s    `r   _call_derive_array_by_scalarz,ArrayDerivative._call_derive_array_by_scalarF   s    ~~122r   c                >    | j                  |      rt        | |      S y r   )r=   r   r9   s     r   _call_derive_defaultz$ArrayDerivative._call_derive_defaultJ   s    88A;%dA..r   c                   t        |t        t        f      r|dk  dk(  ry |j                  rt        |t              r| j                  ||      }nit        |t              r| j                  ||      }nEt        |t              r| j                  ||      }n!|j                  rt        | -  |||      S y |j                  rjt        |t              r| j                  ||      }nt        |t              r| j                  ||      }nt        |t              r| j                  ||      }ny t        |t              st        |t              rt        ||      }n`t        |t              r#t        |t              r| j!                  ||      }n-t        |t              st        |t              ry t        ||      }|y |dk(  r|S | j                  |||dz
        S )Nr   Tr   )r   intr   	is_scalarr   r:   r   r>   r	   rA   r   !_dispatch_eval_derivative_n_timesrC   rF   rI   r
   rK   )r   r   r'   r(   resultr   s        r   rO   z1ArrayDerivative._dispatch_eval_derivative_n_timesQ   s    %#w0eqjT5I >>!Z(::4CAz*;;D!DAy)99$Bw@q%PP[[$
+::4CD*-;;D!DD),99$B $
+z!Z/H(q1D*-*Q
2K11$:D*-Az1J(q1>A:M88EAINNr   )r   r   r'   r   returnr   )r   r   r'   r   rQ   r   )r   r   r'   r	   rQ   r   )r   r   r'   r   rQ   r   )r   r   r'   r   rQ   r   )r   r	   r'   r   rQ   r   )r   r   r'   r   rQ   zExpr | None)__name__
__module____qualname__rN   r   r   propertyr"   classmethodr.   staticmethodr:   r>   rA   rC   rF   rI   rK   rO   __classcell__)r   s   @r   r   r      s    I   Q Q 3 3 ( ( 3 3 + + ( ( 3 3   /O /Or   r   N)
__future__r   sympy.core.exprr   sympy.core.functionr   sympy.core.numbersr   sympy.matrices.matrixbaser   
ndim_arrayr	   arrayopr
   "sympy.matrices.expressions.matexprr   "sympy.matrices.expressions.specialr   r   r   r!   r   r   <module>rb      s3    "   * & 0 ! $ 9 9 AsOj sOr   