U
    ZÊ¹j¼  ã                   @  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
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/bwave/python/venv/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rˆt |tƒr<|  ||¡}nJt |tƒrT|  ||¡}n2t |tƒrl|  	||¡}n|jr‚t
ƒ  |||¡S d S nÀ|jrÜt |tƒr¦|  ||¡}n4t |tƒr¾|  ||¡}nt |tƒrÖ|  ||¡}nd S nlt |tƒsðt |tƒrüt||ƒ}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.matrixbaser   Z
ndim_arrayr   Zarrayopr	   Z"sympy.matrices.expressions.matexprr
   Z"sympy.matrices.expressions.specialr   r   r   r   r   r   r   Ú<module>   s   