o
    GZh                     @  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__ S/var/www/auris/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)Z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   Z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>Z	applyfuncr   r"   r   r.   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   r2   r   r   r   _call_derive_scalar_by_matexpr3   s   


z.ArrayDerivative._call_derive_scalar_by_matexprr   c                   r(   )Nc                   r)   r   r*   r,   r.   r   r   r/   <   r0   z>ArrayDerivative._call_derive_scalar_by_array.<locals>.<lambda>r1   r2   r   r.   r   _call_derive_scalar_by_array:   r4   z,ArrayDerivative._call_derive_scalar_by_arrayc                 C  s
   t | |S r   r   r2   r   r   r   _call_derive_matrix_by_scalar>      
z-ArrayDerivative._call_derive_matrix_by_scalarc                 C  s
   |  |S r   )Z_eval_derivativer2   r   r   r   _call_derive_matexpr_by_scalarB   r9   z.ArrayDerivative._call_derive_matexpr_by_scalarc                   s   |   fddS )Nc                   s
   |   S r   r*   r,   r"   r   r   r/   H   r0   z>ArrayDerivative._call_derive_array_by_scalar.<locals>.<lambda>r1   r2   r   r;   r   _call_derive_array_by_scalarF   r4   z,ArrayDerivative._call_derive_array_by_scalarExpr | Nonec                 C  s   |  |r
t| |S d S r   )r5   r   r2   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   r3   r
   r6   r   r7   r   !_dispatch_eval_derivative_n_timesr8   r:   r<   r	   r>   )r   r   r"   r#   resultr   r   r   rA   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'   r=   )__name__
__module____qualname__r@   r   r   propertyr   classmethodr&   staticmethodr3   r6   r7   r8   r:   r<   r>   rA   __classcell__r   r   r   r   r      s0    


r   N)
__future__r   Zsympy.core.exprr   Zsympy.core.functionr   Zsympy.core.numbersr   Zsympy.matrices.matrixbaser   Z
ndim_arrayr   Zarrayopr	   Z"sympy.matrices.expressions.matexprr
   Z"sympy.matrices.expressions.specialr   r   r   r   r   r   r   <module>   s    