o
    `iE                     @   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ZG d	d
 d
eejZG dd de	ejZdS )    )OptionalDictcastN   )RearrangeMixinReduceMixin)_EinmixMixinzAlex Rogozhnikovc                   @      e Zd Zdd ZdS )	Rearrangec                 C   
   |  |S N_apply_recipeselfx r   S/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/einops/layers/chainer.py__call__      
zRearrange.__call__N__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.__call__Nr   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   s   t jjj}|  - t j|||| _|d ur#t j|||| _nd | _W d    d S W d    d S 1 s9w   Y  d S r   )chainervariableinitializersUniform
init_scope	Parameterweightbias)r   weight_shapeweight_bound
bias_shape
bias_bounduniformr   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   sT   | j d ur
|  |}tj| j|| j}| jd ur|| j }| jd ur(| |}|S r   )r/   r   	functionseinsumeinsum_patternr#   r$   r1   )r   inputresultr   r   r   r   .   s   





zEinMix.__call__N)	r   r   r   r*   r   strr   r2   r   r   r   r   r   r      s    	
r   )typingr   r   r   r    r   r   _einmixr   
__author__Linkr
   r   r   r   r   r   r   <module>   s    