a
    d5                     @   s~   d dl mZmZ d dlZddlmZmZ ddlmZ dZ	G dd deej
jZG d	d
 d
eej
jZG dd deej
jZdS )    )OptionalDictN   )RearrangeMixinReduceMixin)_EinmixMixinzAlex Rogozhnikovc                   @   s   e Zd Zdd ZdS )	Rearrangec                 C   s
   |  |S NZ_apply_recipeselfFx r   \/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/einops/layers/gluon.pyhybrid_forward   s    zRearrange.hybrid_forwardN__name__
__module____qualname__r   r   r   r   r   r      s   r   c                   @   s   e Zd Zdd ZdS )Reducec                 C   s
   |  |S r	   r
   r   r   r   r   r      s    zReduce.hybrid_forwardNr   r   r   r   r   r      s   r   c                   @   s@   e Zd Zdd Zee ee ee ee dddZdd ZdS )	EinMixc                 C   st   |   X | jjd|tj|d| _|d urL| jjd|tj|d| _nd | _W d    n1 sf0    Y  d S )Nweight)nameshapeinitbias)Z
name_scopeparamsgetmxnetZinitializerZUniformr   r   )r   Zweight_shapeZweight_boundZ
bias_shapeZ
bias_boundr   r   r   _create_parameters   s    





zEinMix._create_parameters)pre_reshape_patternpre_reshape_lengthspost_reshape_patternpost_reshape_lengthsc                 C   s   |d us|d urt dd S )NzpEinMix in mxnet/gluon doesn't support axis group/ungroup because einsum in gluon defined only for mx.np.ndarrays)NotImplementedError)r   r!   r"   r#   r$   r   r   r   _create_rearrange_layers#   s    zEinMix._create_rearrange_layersc                 O   s8   t j| j| | j }| jd ur4|| j 7 }|S r	   )r   npZeinsumZeinsum_patternZas_np_ndarrayr   datar   )r   r   r   argskwargsresultr   r   r   r   ,   s    
zEinMix.hybrid_forwardN)	r   r   r   r    r   strr   r&   r   r   r   r   r   r      s   	r   )typingr   r   r    r   r   Z_einmixr   
__author__ZgluonZHybridBlockr   r   r   r   r   r   r   <module>   s   