§
    �ÅjÖ	  ã                   óÚ   — d dl mZ d dlmZmZmZ d dl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j        ¦  «        Z G d
„ dej        ¦  «        Z G d„ dej        e¦  «        ZdS )é    )Úfield)ÚDictÚOptionalÚcastNé   )ÚRearrangeMixinÚReduceMixin)Ú_EinmixMixinzAlex Rogozhnikovc                   óR   — e Zd ZU eed<   eed<    ee¬¦  «        Zeed<   d„ Zd„ Z	dS )ÚReduceÚpatternÚ	reduction©Údefault_factoryÚsizesc                 óJ   — t          | j        | j        fi | j        ¤Ž| _        d S ©N)r	   r   r   r   Úreducer©Úselfs    úCC:\Projects\Historical\venv\Lib\site-packages\einops/layers/flax.pyÚsetupzReduce.setup   s%   € Ý" 4¤<°´ÐNÐNÀ4Ä:ÐNÐNˆŒˆˆó    c                 ó6   — | j                              |¦  «        S r   )r   Ú_apply_recipe©r   Úinputs     r   Ú__call__zReduce.__call__   s   € ØŒ|×)Ò)¨%Ñ0Ô0Ð0r   N©
Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__r   Údictr   r   r   © r   r   r   r      sf   € € € € € € Ø€L€L�LØ€N€N�NØ�%¨Ð-Ñ-Ô-€Eˆ4Ð-Ð-Ñ-ðOð Oð Oð1ð 1ð 1ð 1ð 1r   r   c                   óH   — e Zd ZU eed<    ee¬¦  «        Zeed<   d„ Zd„ Z	dS )Ú	Rearranger   r   r   c                 ó>   — t          | j        fi | j        ¤Ž| _        d S r   )r   r   r   Ú
rearrangerr   s    r   r   zRearrange.setup   s!   € Ý(¨¬ÐDÐD¸¼ÐDÐDˆŒˆˆr   c                 ó6   — | j                              |¦  «        S r   )r*   r   r   s     r   r   zRearrange.__call__!   s   € ØŒ×,Ò,¨UÑ3Ô3Ð3r   Nr   r&   r   r   r(   r(      s]   € € € € € € Ø€L€L�LØ�%¨Ð-Ñ-Ô-€Eˆ4Ð-Ð-Ñ-ðEð Eð Eð4ð 4ð 4ð 4ð 4r   r(   c            	       óº   — e Zd ZU eed<   eed<   dZee         ed<    ee¬¦  «        Z	eed<   d„ Z
d„ Zd	ee         d
ee         dee         dee         fd„Zd„ ZdS )ÚEinMixr   Úweight_shapeNÚ
bias_shaper   r   c                 ó`   — |                       | j        | j        | j        | j        ¬¦  «         d S )N)r   r.   r/   Úaxes_lengths)Úinitialize_einmixr   r.   r/   r   r   s    r   r   zEinMix.setup+   s>   € Ø×ÒØ”LØÔ*Ø”Øœð	 	ñ 	
ô 	
ð 	
ð 	
ð 	
r   c                 ó  — |                       dt          j        j                             |¦  «        |¦  «        | _        |�@|                       dt          j        j                             |¦  «        |¦  «        | _        d S d | _        d S )NÚweightÚbias)ÚparamÚjaxÚnnÚinitializersÚuniformr4   r5   )r   r.   Úweight_boundr/   Ú
bias_bounds        r   Ú_create_parameterszEinMix._create_parameters3   sm   € Ø—j’j ­3¬6Ô+>×+FÒ+FÀ|Ñ+TÔ+TÐVbÑcÔcˆŒàÐ!ØŸ
š
 6­3¬6Ô+>×+FÒ+FÀzÑ+RÔ+RÐT^Ñ_Ô_ˆDŒIˆIˆIàˆDŒIˆIˆIr   Úpre_reshape_patternÚpre_reshape_lengthsÚpost_reshape_patternÚpost_reshape_lengthsc                 óÒ   — d | _         |�)t          |t          t          |¦  «        ¬¦  «        | _         d | _        |�+t          |t          t          |¦  «        ¬¦  «        | _        d S d S )N)r   )Úpre_rearranger(   r   r%   Úpost_rearrange)r   r>   r?   r@   rA   s        r   Ú_create_rearrange_layerszEinMix._create_rearrange_layers;   sp   € ð "ˆÔØÐ*Ý!*Ð+>ÅdÍ4ÐQdÑFeÔFeÐ!fÑ!fÔ!fˆDÔà"ˆÔØÐ+Ý"+Ð,@ÍÍTÐSgÑHhÔHhÐ"iÑ"iÔ"iˆDÔÐÐð ,Ð+r   c                 óØ   — | j         �|                       |¦  «        }t          j        | j        || j        ¦  «        }| j        �
|| j        z  }| j        �|                      |¦  «        }|S r   )rC   ÚjnpÚeinsumÚeinsum_patternr4   r5   rD   )r   r   Úresults      r   r   zEinMix.__call__J   sk   € ØÔÐ)Ø×&Ò& uÑ-Ô-ˆEÝ”˜DÔ/°¸¼ÑDÔDˆØŒ9Ð Ø�d”iÑˆFØÔÐ*Ø×(Ò(¨Ñ0Ô0ˆFØˆr   )r    r!   r"   r#   r$   r/   r   r   r%   r   r   r=   r   rE   r   r&   r   r   r-   r-   %   sÛ   € € € € € € Ø€L€L�LØÐÐÑØ $€J�˜”Ð$Ð$Ñ$Ø�%¨Ð-Ñ-Ô-€Eˆ4Ð-Ð-Ñ-ð
ð 
ð 
ðð ð ðjà% cœ]ðjð & dœ^ðjð ' sœmð	jð
 ' tœnðjð jð jð jðð ð ð ð r   r-   )Údataclassesr   Útypingr   r   r   Ú
flax.linenÚlinenr8   r7   Ú	jax.numpyÚnumpyrG   Ú r   r	   Ú_einmixr
   Ú
__author__ÚModuler   r(   r-   r&   r   r   ú<module>rU      s!  ðØ Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'à Ð Ð Ð Ð Ð Ø 
€
€
€
Ø Ð Ð Ð Ð Ð à )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ø !Ð !Ð !Ð !Ð !Ð !à€
ð	1ð 	1ð 	1ð 	1ð 	1ˆRŒYñ 	1ô 	1ð 	1ð4ð 4ð 4ð 4ð 4�”	ñ 4ô 4ð 4ð-ð -ð -ð -ð -ˆRŒY˜ñ -ô -ð -ð -ð -r   