Ë
    ÛÍ:jú  ã                   ó˜   — d Z ddlmZmZmZ ddlZddlmZ ddl	m
Z
mZ ddlmZ dZ G d	„ d
e
e«      Z G d„ dee«      Z G d„ dee«      Zy)aj  
Comment about tensorflow layers:
unfortunately instructions on creation of TF layers change constantly,
and changed way too many times at this point to remember what-compatible-where.

Layers in einops==0.7.0 (and several prior versions)
 are compatible with TF 2.13

Layers in einops==0.8.0 were re-implemented
 according to official instructions for TF 2.16

é    )ÚDictÚOptionalÚcastN)ÚLayeré   )ÚRearrangeMixinÚReduceMixin)Ú_EinmixMixinzAlex Rogozhnikovc                   ó   — e Zd Zd„ Zd„ Zd„ Zy)Ú	Rearrangec                  ó   — y ©N© ©ÚselfÚinput_shapes     úm/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/einops/layers/tensorflow.pyÚbuildzRearrange.build   ó   € Øó    c                 ó$   — | j                  |«      S r   ©Ú_apply_recipe©r   Úinputss     r   ÚcallzRearrange.call   ó   € Ø×!Ñ! &Ó)Ð)r   c                 ó6   — d| j                   i| j                  ¥S )NÚpattern)r   Úaxes_lengths©r   s    r   Ú
get_configzRearrange.get_config    s   € Ø˜4Ÿ<™<Ð=¨4×+<Ñ+<Ð=Ð=r   N©Ú__name__Ú
__module__Ú__qualname__r   r   r"   r   r   r   r   r      s   „ òò*ó>r   r   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚReducec                  ó   — y r   r   r   s     r   r   zReduce.build%   r   r   c                 ó$   — | j                  |«      S r   r   r   s     r   r   zReduce.call(   r   r   c                 óL   — | j                   | j                  dœ| j                  ¥S )N)r   Ú	reduction)r   r,   r    r!   s    r   r"   zReduce.get_config+   s    € ØŸ<™<°d·n±nÑZÈ×HYÑHYÐZÐZr   Nr#   r   r   r   r(   r(   $   s   „ òò*ó[r   r(   c            	       óT   — e Zd Zd„ Zdee   dee   dee   dee   fd„Zd„ Zd„ Z	d	„ Z
y
)ÚEinMixc                 ó   — ||||g| _         y r   )Ú_params)r   Úweight_shapeÚweight_boundÚ
bias_shapeÚ
bias_bounds        r   Ú_create_parameterszEinMix._create_parameters0   s   € ð % l°JÀ
ÐKˆ�r   Úpre_reshape_patternÚpre_reshape_lengthsÚpost_reshape_patternÚpost_reshape_lengthsc                 ó¦   — d | _         |�t        |fi t        t        |«      ¤Ž| _         d | _        |� t        |fi t        t        |«      ¤Ž| _        y y r   )Úpre_rearranger   r   ÚdictÚpost_rearrange)r   r6   r7   r8   r9   s        r   Ú_create_rearrange_layerszEinMix._create_rearrange_layers5   s[   € ð "ˆÔØÐ*Ü!*Ð+>Ñ!bÄ$ÄtÐM`ÓBaÑ!bˆDÔà"ˆÔØÐ+Ü"+Ð,@Ñ"eÄDÌÐOcÓDdÑ"eˆDÕð ,r   c                 óò   — | j                   \  }}}}| j                  |t        j                  | |«      d¬«      | _        |�/| j                  |t        j                  | |«      d¬«      | _        y d | _        y )NT)ÚshapeÚinitializerÚ	trainable)r0   Ú
add_weightÚtfÚrandom_uniform_initializerÚweightÚbias)r   r   r1   r2   r3   r4   s         r   r   zEinMix.buildD   s   € Ø?C¿|¹|Ñ<ˆ�| Z°Ø—o‘oØÜ×5Ñ5°|°mÀ\ÓRØð &ó 
ˆŒð Ð!ØŸ™Ø Ü×9Ñ9¸:¸+ÀzÓRØð (ó ˆD�Ið ˆD�Ir   c                 ó  — | j                   �| j                  |«      }t        j                  | j                  || j                  «      }| j
                  �|| j
                  z   }| j                  �| j                  |«      }|S r   )r;   rD   ÚeinsumÚeinsum_patternrF   rG   r=   )r   r   Úresults      r   r   zEinMix.callU   ss   € Ø×ÑÐ)Ø×'Ñ'¨Ó/ˆFÜ—‘˜4×.Ñ.°¸¿¹ÓDˆØ�9‰9Ð Ø˜dŸi™iÑ'ˆFØ×ÑÐ*Ø×(Ñ(¨Ó0ˆFØˆr   c                 ób   — | j                   | j                  | j                  dœ| j                  ¥S )N)r   r1   r3   )r   r1   r3   r    r!   s    r   r"   zEinMix.get_config_   s3   € à—|‘|Ø ×-Ñ-ØŸ/™/ñ
ð ×Ñð	
ð 	
r   N)r$   r%   r&   r5   r   Ústrr   r>   r   r   r"   r   r   r   r.   r.   /   sW   „ òLð
fà% c™]ðfð & d™^ðfð ' s™mð	fð
 ' t™nófòò"ó
r   r.   )Ú__doc__Útypingr   r   r   Ú
tensorflowrD   Útensorflow.keras.layersr   Ú r   r	   Ú_einmixr
   Ú
__author__r   r(   r.   r   r   r   ú<module>rU      sO   ðñ÷ (Ñ 'ã Ý )ç )Ý !à€
ô>� ô >ô[ˆ[˜%ô [ô6
ˆ\˜5õ 6
r   