o
    iH                     @   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 )    )DictOptionalcastN   )RearrangeMixinReduceMixin)_EinmixMixinzTianhe Ren & Depeng Liangc                   @      e Zd Zdd ZdS )	Rearrangec                 C   
   |  |S N_apply_recipeselfinput r   R/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/einops/layers/oneflow.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   sZ   t jjt || |dd| _|d ur(t jjt || |dd| _d S d | _d S )NT)requires_grad)flownn	Parameterzeros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$   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   oneflowr    r   r   _einmixr   
__author__r   Moduler
   r   r   r   r   r   r   <module>   s    