§
    �Åjé  ã                   ó¾   — d Z ddlZddlmZmZmZ ddlZddlmZm	Z	  G d„ d¦  «        Z
dedej        d	ed
eeeef                  dej        f
d„Zd„ Z e¦   «          dS )ao  
Specialization of einops for torch.

Unfortunately, torch's jit scripting mechanism isn't strong enough,
and to have scripting supported at least for layers,
a number of additional moves is needed.

Design of main operations (dynamic resolution by lookup) is unlikely
to be implemented by torch.jit.script,
but torch.compile seems to work with operations just fine.
é    N)ÚDictÚListÚTuple)ÚTransformRecipeÚ _reconstruct_from_shape_uncachedc                   óR  — e Zd ZdZedej        dedee	         fd„¦   «         Z
edee	         fd„¦   «         Zedeej                 fd	„¦   «         Zed
ee	         fd„¦   «         Zede	dee	e	f         fd„¦   «         Zed„ ¦   «         Zed„ ¦   «         Zedee	         fd„¦   «         ZdS )ÚTorchJitBackendz�
    Completely static backend that mimics part of normal backend functionality
    but restricted to be within torchscript.
    ÚxÚ	operationÚreduced_axesc                 ót  — |dk    r|                       |¬¦  «        S |dk    r|                      |¬¦  «        S |dk    r|                      |¬¦  «        S |dk    r|                      |¬¦  «        S |dk    r3t	          |¦  «        d d d…         D ]}|                      |¬¦  «        } Œ| S t          d|¦  «        ‚)	NÚmin)ÚdimÚmaxÚsumÚmeanÚprodéÿÿÿÿzUnknown reduction )ÚaminÚamaxr   r   Úsortedr   ÚNotImplementedError)r
   r   r   Úis       úGC:\Projects\Historical\venv\Lib\site-packages\einops/_torch_specific.pyÚreducezTorchJitBackend.reduce   sÔ   € à˜ÒÐØ—6’6˜l�6Ñ+Ô+Ð+Ø˜%ÒÐØ—6’6˜l�6Ñ+Ô+Ð+Ø˜%ÒÐØ—5’5˜\�5Ñ*Ô*Ð*Ø˜&Ò Ð Ø—6’6˜l�6Ñ+Ô+Ð+Ø˜&Ò Ð Ý˜LÑ)Ô)¨$¨$¨B¨$Ô/ð "ð "�Ø—F’F˜q�F‘M”M��ØˆHå%Ð&:¸IÑFÔFÐFó    Úaxesc                 ó,   — |                       |¦  «        S ©N)Úpermute)r
   r   s     r   Ú	transposezTorchJitBackend.transpose,   s   € à�yŠy˜‰ŒÐr   Útensorsc                 ó*   — t          j        | ¦  «        S r   )ÚtorchÚstack)r"   s    r   Ústack_on_zeroth_dimensionz)TorchJitBackend.stack_on_zeroth_dimension0   s   € åŒ{˜7Ñ#Ô#Ð#r   Úrepeatsc                 ó,   — |                       |¦  «        S r   )Úrepeat)r
   r'   s     r   ÚtilezTorchJitBackend.tile4   s   € à�xŠx˜Ñ Ô Ð r   Ún_axesÚpos2lenc                 ó    — dg|z  }|                      ¦   «         D ]\  }}t          j        | |¦  «        } |||<   Œ |                      |¦  «        S )Nr   )Úitemsr$   Ú	unsqueezeÚexpand)r
   r+   r,   r'   Úaxis_positionÚaxis_lengths         r   Úadd_axeszTorchJitBackend.add_axes8   sY   € à�$˜‘-ˆØ*1¯-ª-©/¬/ð 	1ð 	1Ñ&ˆM˜;Ý”  =Ñ1Ô1ˆAØ%0ˆG�MÑ"Ð"Ø�xŠx˜Ñ Ô Ð r   c                 ól   — | j         t          j        t          j        t          j        t          j        fv S r   )Údtyper$   Úfloat16Úfloat32Úfloat64Úbfloat16©r
   s    r   Úis_float_typezTorchJitBackend.is_float_type@   s    € àŒw�5œ=­%¬-½¼ÍÌÐWÐWÐWr   c                 ó   — | j         S r   )Úshaper:   s    r   r=   zTorchJitBackend.shapeD   s	   € àŒwˆr   r=   c                 ó,   — |                       |¦  «        S r   )Úreshape)r
   r=   s     r   r?   zTorchJitBackend.reshapeH   s   € à�yŠy˜ÑÔÐr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústaticmethodr$   ÚTensorÚstrr   Úintr   r!   r&   r*   r   r3   r;   r=   r?   © r   r   r	   r	      s~  € € € € € ðð ð
 ðG�%”,ð G¨3ð G¸dÀ3¼ið Gð Gð Gñ „\ðGð  ð˜4 œ9ð ð ð ñ „\ðð ð$¨4°´Ô+=ð $ð $ð $ñ „\ð$ð ð!˜˜cœð !ð !ð !ñ „\ð!ð ð!˜Cð !¨$¨s°C¨x¬.ð !ð !ð !ñ „\ð!ð ðXð Xñ „\ðXð ðð ñ „\ðð ð ˜$˜sœ)ð  ð  ð  ñ „\ð ð  ð  r   r	   ÚrecipeÚtensorÚreduction_typeÚ	axes_dimsÚreturnc                 ó¨  — t           }t          | |                     |¦  «        |¬¦  «        \  }}}}}	}
|�|                     ||¦  «        }|�|                     ||¦  «        }t          |¦  «        dk    r|                     |||¬¦  «        }t          |¦  «        dk    r|                     ||
|¬¦  «        }|	�|                     ||	¦  «        }|S )N)rL   r   )r   r   )r+   r,   )r	   r   r=   r?   r!   Úlenr   r3   )rI   rJ   rK   rL   ÚbackendÚinit_shapesÚaxes_reorderingr   Ú
added_axesÚfinal_shapesÚn_axes_w_addeds              r   Úapply_for_scriptable_torchrV   N   sè   € õ €Gõ 	)¨°·²¸vÑ1FÔ1FÐR[Ð\Ñ\Ô\ñØØØØØØàÐØ—’ ¨Ñ5Ô5ˆØÐ"Ø×"Ò" 6¨?Ñ;Ô;ˆÝ
ˆ<ÑÔ˜1ÒÐØ—’ °.È|�Ñ\Ô\ˆÝ
ˆ:�„˜ÒÐØ×!Ò! &°ÈÐ!ÑTÔTˆØÐØ—’ ¨Ñ6Ô6ˆØ€Mr   c                  óÈ  — t          t          d¦  «        rt          j        d         dk     rd S t          t          d¦  «        rt          j        dk    rd S 	 ddlm}  n-# t
          $ r  t          j        dt          d¬¦  «         Y d S w xY wdd	l	m
}m}m}m} dd
lm}m}  | |¦  «          | |¦  «          | |¦  «          | |¦  «          | |¦  «          | |¦  «         dad S )NÚ__version__r   Ú2z2.8)Úallow_in_graphzHallow_ops_in_compiled_graph failed to import torch: ensure pytorch >=2.0é   )Ú
stacklevel)ÚeinsumÚ	rearranger   r)   )ÚpackÚunpackT)Úhasattrr$   rX   Útorch._dynamorZ   ÚImportErrorÚwarningsÚwarnÚImportWarningÚeinopsr]   r^   r   r)   Úpackingr_   r`   Ú#_ops_were_registered_in_torchdynamo)rZ   r]   r^   r   r)   r_   r`   s          r   Úallow_ops_in_compiled_graphrj   g   s[  € Ý�u�mÑ$Ô$ð ­Ô):¸1Ô)=ÀÒ)CÐ)Càˆå�u�mÑ$Ô$ð ­Ô):¸eÒ)CÐ)CàˆðØ0Ð0Ð0Ð0Ð0Ð0Ð0øÝð ð ð ÝŒØVÕXeÐrsð	
ñ 	
ô 	
ð 	
ð 	ˆˆð	øøøð :Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ø%Ð%Ð%Ð%Ð%Ð%Ð%Ð%à€N�9ÑÔÐØ€N�6ÑÔÐØ€N�6ÑÔÐØ€N�6ÑÔÐØ€N�4ÑÔÐØ€N�6ÑÔÐð +/Ð'Ð'Ð's   ÁA Á&BÂB)rC   rd   Útypingr   r   r   r$   Úeinops.einopsr   r   r	   rE   rF   rG   rV   rj   rH   r   r   ú<module>rm      sû   ðð
ð 
ð €€€Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $à €€€à KÐ KÐ KÐ KÐ KÐ KÐ KÐ Kð5 ð 5 ð 5 ð 5 ð 5 ñ 5 ô 5 ð 5 ðrØðØ%*¤\ðØCFðØSWÐX]Ð^aÐcfÐ^fÔXgÔShðà
„\ðð ð ð ð2/ð /ð /ðB Ð Ñ Ô Ð Ð Ð r   