
    g                        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dS )    )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                     t                      j        | |g|R i |}t          |t                    r|                                |_        |S N)super__new__
isinstancer   
_get_shape_shape)clsexpr	variableskwargsobj	__class__s        `/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/tensor/array/array_derivatives.pyr   zArrayDerivative.__new__   sR    eggoc4>)>>>v>>c?++ 	*))CJ
    c                    d}| j         D ]1\  }}t          |d          rt          |          D ]}||j        z  }2t          | j        d          r|| j        j        z  }|S )N shape)variable_counthasattrranger"   r   )selfr"   vcountis        r   r   zArrayDerivative._get_shape   sz    + 	% 	%HAuq'"" %u % %AQW$EE49g&& 	%TY_$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&   sZ    dZ344 	Q4:tz**j)) 	Qtz**OPPPr   r   r   r'   r   returnc                4     |                      fd          S )Nc                .                         |           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111222r   r   c                h    |                      |          rt          | |          S t          |j         S r   )hasr   r   r"   r:   s     r   _call_derive_scalar_by_matexprz.ArrayDerivative._call_derive_scalar_by_matexpr3   s1    88A;; 	(%dA...qw''r   r	   c                4     |                      fd          S )Nc                .                         |           S r   r2   r4   s    r   r6   z>ArrayDerivative._call_derive_scalar_by_array.<locals>.<lambda><   r7   r   r8   r:   s   ` r   _call_derive_scalar_by_arrayz,ArrayDerivative._call_derive_scalar_by_array:   r<   r   c                "    t          | |          S r   r   r:   s     r   _call_derive_matrix_by_scalarz-ArrayDerivative._call_derive_matrix_by_scalar>   s    !$***r   c                ,    |                      |          S r   )_eval_derivativer:   s     r   _call_derive_matexpr_by_scalarz.ArrayDerivative._call_derive_matexpr_by_scalarB   s    $$Q'''r   c                4    |                      fd          S )Nc                .    |                                S r   r2   )r5   r'   s    r   r6   z>ArrayDerivative._call_derive_array_by_scalar.<locals>.<lambda>H   s    q		 r   r8   r:   s    `r   _call_derive_array_by_scalarz,ArrayDerivative._call_derive_array_by_scalarF   s    ~~1111222r   Expr | Nonec                P    |                      |          rt          | |          S d S r   )r>   r   r:   s     r   _call_derive_defaultz$ArrayDerivative._call_derive_defaultJ   s)    88A;; 	%dA...4r   c                   t          |t          t          f          r
|dk    dk    rd S |j        rt          |t                    r|                     ||          }nt          |t                    r|                     ||          }nt          |t                    r| 	                    ||          }nr|j        r#t                                          |||          S d S |j        rt          |t                    r|                     ||          }nt          |t                    r|                     ||          }nt          |t                    r|                     ||          }nd S t          |t                    st          |t                    rt          ||          }n}t          |t                    r,t          |t                    r|                     ||          }n<t          |t                    st          |t                    rd S t          ||          }|d S |dk    r|S |                     |||dz
            S )Nr   Tr   )r   intr   	is_scalarr   r;   r   r?   r	   rB   r   !_dispatch_eval_derivative_n_timesrD   rG   rJ   r
   rM   )r   r   r'   r(   resultr   s        r   rQ   z1ArrayDerivative._dispatch_eval_derivative_n_timesQ   sE    %#w00 	eqjT5I5I4 > 	2!Z(( 
::4CCAz** ;;D!DDAy)) 99$BB ww@@q%PPPt[ 	2$
++ ::4CCD*-- ;;D!DDD),, 99$BBt $
++ 2z!Z/H/H 2(q11D*-- 2*Q
2K2K 211$::D*-- 2Az1J1J 2t(q11>4A::M88EAINNNr   )r   r   r'   r   r/   r   )r   r   r'   r   r/   r   )r   r   r'   r	   r/   r   )r   r   r'   r   r/   r   )r   r   r'   r   r/   r   )r   r	   r'   r   r/   r   )r   r   r'   r   r/   rK   )__name__
__module____qualname__rP   r   r   propertyr"   classmethodr.   staticmethodr;   r?   rB   rD   rG   rJ   rM   rQ   __classcell__)r   s   @r   r   r      s       I         X Q Q [Q 3 3 3 \3 ( ( ( \( 3 3 3 \3 + + + \+ ( ( ( \( 3 3 3 \3    \ /O /O /O /O [/O /O /O /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>rc      s   " " " " " "             * * * * * * & & & & & & 0 0 0 0 0 0 ! ! ! ! ! ! $ $ $ $ $ $ 9 9 9 9 9 9 9 9 9 9 9 9 A A A A A AsO sO sO sO sOj sO sO sO sO sOr   