o
    eqis                     @   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)_EinmixMixinZPaddlePaddlec                   @      e Zd Zdd ZdS )	Rearrangec                 C   
   |  |S NZ_apply_recipeselfinput r   [/home/app/PaddleOCR-VL/.venv_paddleocr/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)Zdefault_initializer)Zcreate_parameterpaddlennZinitializerZUniformweightbias)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   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   ZeinsumZeinsum_patternr   r   r'   )r   r   resultr   r   r   r   1   s   





zEinMix.forwardN)	r   r   r   r    r   strr   r(   r   r   r   r   r   r      s    
r   )typingr   r   r   r    r   r   Z_einmixr   
__author__r   ZLayerr
   r   r   r   r   r   r   <module>   s    