o
    K+ i_	                     @   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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   )apply_for_scriptable_torchzAlex Rogozhnikovc                   @      e Zd Zdd Zdd ZdS )	Rearrangec                 C   s   | j |j }t||d| jdS )NZ	rearrangeZreduction_typeZ	axes_dims)_multirecipendimr
   _axes_lengthsselfinputZrecipe r   _/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/einops/layers/torch.pyforward   s   zRearrange.forwardc                 C      d S Nr   r   xr   r   r   _apply_recipe      zRearrange._apply_recipeN__name__
__module____qualname__r   r   r   r   r   r   r          r   c                   @   r   )Reducec                 C   s    | j |j }t||| j| jdS )Nr   )r   r   r
   Z	reductionr   r   r   r   r   r      s   zReduce.forwardc                 C   r   r   r   r   r   r   r   r      r   zReduce._apply_recipeNr   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   sZ   t jjt || |dd| _|d ur(t jjt || |dd| _d S d | _d S )NT)Zrequires_grad)torchnn	ParameterZzerosZ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(   r0   )r   r   resultr   r   r   r   ;   s   





zEinMix.forwardN)	r   r   r    r)   r   strr   r1   r   r   r   r   r   r#       s    
r#   )typingr   r   r   r$    r   r   Z_einmixr   Z_torch_specificr
   
__author__r%   Moduler   r"   r#   r   r   r   r   <module>   s    

