o
    wis                     @   s   d dl mZ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DictcastN   )RearrangeMixinReduceMixin)_EinmixMixinPaddlePaddlec                   @      e Zd Zdd ZdS )	Rearrangec                 C   
   |  |S N_apply_recipeselfinput r   Q/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/einops/layers/paddle.pyforward      
zRearrange.forwardN__name__
__module____qualname__r   r   r   r   r   r          r   c                   @   r
   )Reducec                 C   r   r   r   r   r   r   r   r      r   zReduce.forwardNr   r   r   r   r   r      r   r   c                	   @   sF   e Zd Zdd Zdee dee dee dee fddZd	d
 ZdS )EinMixc                 C   sR   | j |tjj| |d| _|d ur$| j |tjj| |d| _d S d | _d S )N)default_initializer)create_parameterpaddlenninitializerUniformweightbias)r   weight_shapeweight_bound
bias_shape
bias_boundr   r   r   _create_parameters   s   
zEinMix._create_parameterspre_reshape_patternpre_reshape_lengthspost_reshape_patternpost_reshape_lengthsc                 C   sT   d | _ |d urt|fi tt|| _ d | _|d ur(t|fi tt|| _d S d S r   )pre_rearranger   r   dictpost_rearrange)r   r+   r,   r-   r.   r   r   r   _create_rearrange_layers"   s   zEinMix._create_rearrange_layersc                 C   sR   | j d ur
|  |}t| j|| j}| jd ur|| j7 }| jd ur'| |}|S r   )r/   r    einsumeinsum_patternr$   r%   r1   )r   r   resultr   r   r   r   1   s   





zEinMix.forwardN)	r   r   r   r*   r   strr   r2   r   r   r   r   r   r      s    
r   )typingr   r   r   r     r   r   _einmixr   
__author__r!   Layerr   r   r   r   r   r   r   <module>   s    