o
    jg                     @  s   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 deZdS )    )annotations)Expr)
Derivative)Integer)
MatrixBase   )	NDimArray)derive_by_array)
MatrixExpr)
ZeroMatrix_matrix_derivativec                      s   e Zd ZdZ fddZdd Zedd Zedd	 Z	e
d"ddZe
d#ddZe
d$ddZe
d%ddZe
d&ddZe
d'ddZe
d(ddZe fd d!Z  ZS ))ArrayDerivativeFc                   s4   t  j| |g|R i |}t|tr| |_|S N)super__new__
isinstancer   
_get_shape_shape)clsexpr	variableskwargsobj	__class__ \/var/www/html/zoom/venv/lib/python3.10/site-packages/sympy/tensor/array/array_derivatives.pyr      s   

zArrayDerivative.__new__c                 C  sR   d}| j D ]\}}t|drt|D ]}||j7 }qqt| jdr'|| jj7 }|S )Nr   shape)variable_counthasattrranger   r   )selfr   vcountir   r   r   r      s   
zArrayDerivative._get_shapec                 C  s   | j S r   )r   )r"   r   r   r   r   "   s   zArrayDerivative.shapec                 C  s6   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   r   r   r   _get_zero_with_shape_like&   s
   

z)ArrayDerivative._get_zero_with_shape_liker   r   r#   r   returnc                      |  fddS )Nc                   
     | S r   diffxr   r   r   <lambda>1      
 z?ArrayDerivative._call_derive_scalar_by_matrix.<locals>.<lambda>	applyfuncr   r#   r   r0   r   _call_derive_scalar_by_matrix/      z-ArrayDerivative._call_derive_scalar_by_matrixr
   c                 C  s   |  |r
t| |S t|j S r   )hasr   r   r   r5   r   r   r   _call_derive_scalar_by_matexpr3   s   


z.ArrayDerivative._call_derive_scalar_by_matexprr   c                   r*   )Nc                   r+   r   r,   r.   r0   r   r   r1   <   r2   z>ArrayDerivative._call_derive_scalar_by_array.<locals>.<lambda>r3   r5   r   r0   r   _call_derive_scalar_by_array:   r7   z,ArrayDerivative._call_derive_scalar_by_arrayc                 C  s
   t | |S r   r   r5   r   r   r   _call_derive_matrix_by_scalar>      
z-ArrayDerivative._call_derive_matrix_by_scalarc                 C  s
   |  |S r   )_eval_derivativer5   r   r   r   _call_derive_matexpr_by_scalarB   r<   z.ArrayDerivative._call_derive_matexpr_by_scalarc                   s   |   fddS )Nc                   s
   |   S r   r,   r.   r#   r   r   r1   H   r2   z>ArrayDerivative._call_derive_array_by_scalar.<locals>.<lambda>r3   r5   r   r?   r   _call_derive_array_by_scalarF   r7   z,ArrayDerivative._call_derive_array_by_scalarExpr | Nonec                 C  s   |  |r
t| |S d S r   )r8   r   r5   r   r   r   _call_derive_defaultJ   s   

z$ArrayDerivative._call_derive_defaultc                   sf  t |ttfr|dkdkrd S |jrCt |tr| ||}nt |tr*| ||}ntt |tr6| 	||}nh|jrAt
 |||S d S |jrlt |trR| ||}nLt |tr^| ||}n@t |trj| ||}n4d S t |tsvt |tr|t||}n"t |trt |tr| ||}nt |tst |trd S t||}|d u rd S |dkr|S | |||d S )Nr   Tr   )r   intr   	is_scalarr   r6   r
   r9   r   r:   r   !_dispatch_eval_derivative_n_timesr;   r>   r@   r	   rB   )r   r   r#   r$   resultr   r   r   rE   Q   s@   






z1ArrayDerivative._dispatch_eval_derivative_n_times)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)   rA   )__name__
__module____qualname__rD   r   r   propertyr   classmethodr(   staticmethodr6   r9   r:   r;   r>   r@   rB   rE   __classcell__r   r   r   r   r      s0    


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   r   <module>   s    