U
    9%e                     @  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)MatrixCommon   )	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
dddZe
d
dd
dddZe
d
dd
dddZe
dd
d
dddZe
dd
d
dddZe
dd
d
dddZe
d
d
ddddZe fddZ  ZS ) ArrayDerivativeFc                   s.   t  j| |f||}t|tr*| |_|S N)super__new__
isinstancer   
_get_shape_shape)clsexpr	variableskwargsobj	__class__ c/var/www/html/Darija-Ai-API/env/lib/python3.8/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rN|| 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  s:   t |ttfr|j|j S t |tr.t|j S tdd S )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                   s   |  fddS )Nc                   s
     | 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/   s    z-ArrayDerivative._call_derive_scalar_by_matrixr
   c                 C  s"   |  |rt| |S t|j S d S r   )hasr   r   r   r0   r   r   r   _call_derive_scalar_by_matexpr3   s    

z.ArrayDerivative._call_derive_scalar_by_matexprr   c                   s   |  fddS )Nc                   s
     | S r   r(   r*   r,   r   r   r-   <   r.   z>ArrayDerivative._call_derive_scalar_by_array.<locals>.<lambda>r/   r0   r   r,   r   _call_derive_scalar_by_array:   s    z,ArrayDerivative._call_derive_scalar_by_arrayc                 C  s
   t | |S r   r   r0   r   r   r   _call_derive_matrix_by_scalar>   s    z-ArrayDerivative._call_derive_matrix_by_scalarc                 C  s
   |  |S r   )Z_eval_derivativer0   r   r   r   _call_derive_matexpr_by_scalarB   s    z.ArrayDerivative._call_derive_matexpr_by_scalarc                   s   |   fddS )Nc                   s
   |   S r   r(   r*   r"   r   r   r-   H   r.   z>ArrayDerivative._call_derive_array_by_scalar.<locals>.<lambda>r/   r0   r   r7   r   _call_derive_array_by_scalarF   s    z,ArrayDerivative._call_derive_array_by_scalarzExpr | Nonec                 C  s   |  |rt| |S d S d S r   )r2   r   r0   r   r   r   _call_derive_defaultJ   s    

z$ArrayDerivative._call_derive_defaultc                   sz  t |ttfr|dkdkrd S |jrt |tr<| ||}nJt |trT| ||}n2t |trl| 	||}n|jrt
 |||S d S n|jrt |tr| ||}n4t |tr| ||}nt |tr| ||}nd S nlt |tst |trt||}nLt |tr"t |tr"| ||}n&t |ts:t |tr>d S t||}|d krVd S |dkrd|S | |||d S d S )Nr   Tr   )r   intr   	is_scalarr   r1   r
   r3   r   r4   r   !_dispatch_eval_derivative_n_timesr5   r6   r8   r	   r9   )r   r   r"   r#   resultr   r   r   r<   Q   s@    








z1ArrayDerivative._dispatch_eval_derivative_n_times)__name__
__module____qualname__r;   r   r   propertyr   classmethodr&   staticmethodr1   r3   r4   r5   r6   r8   r9   r<   __classcell__r   r   r   r   r      s.   


r   N)
__future__r   Zsympy.core.exprr   Zsympy.core.functionr   Zsympy.core.numbersr   Zsympy.matrices.commonr   Z
ndim_arrayr   Zarrayopr	   Z"sympy.matrices.expressions.matexprr
   Z"sympy.matrices.expressions.specialr   r   r   r   r   r   r   <module>   s   