§
    �Åj+  ã                   óL  — d dl Z d dlmZmZ d dlZd dlZd dlmZm	Z	m
Z
 d dlmZ  G d„ d¦  «        Z edddd	d
¬¦  «        ddf edddd	d
¬¦  «        ddf edddd
¬¦  «        ddf edddd
ddd¬¦  «        ddf edddddd¬¦  «        ddfgZg d ¢Zd!„ Zg d"¢Zd#„ Zd$„ Zd%„ ZdS )&é    N)ÚAnyÚCallable)ÚEinopsErrorÚ_compactify_pattern_for_einsumÚeinsum)Úcollect_test_backendsc                   ó*   — e Zd Zdedefd„Zdefd„ZdS )Ú	ArgumentsÚargsÚkargsc                 ó"   — || _         || _        d S ©N©r   Úkwargs)Úselfr   r   s      úIC:\Projects\Historical\venv\Lib\site-packages\einops/tests/test_einsum.pyÚ__init__zArguments.__init__   s   € ØˆŒ	ØˆŒˆˆó    Úfunctionc                 ó&   —  || j         i | j        ¤ŽS r   r   )r   r   s     r   Ú__call__zArguments.__call__   s   € Øˆx˜œÐ2 d¤kÐ2Ð2Ð2r   N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   © r   r   r
   r
      sQ   € € € € € ð˜cð ¨Cð ð ð ð ð3 ð 3ð 3ð 3ð 3ð 3ð 3r   r
   zb c_in h w -> w c_out h bz
c_in c_outé   é   )Ú
bias_shapeÚc_outÚc_in)é   r   é   é   )r#   r   r"   r!   r   zb c_in h w -> w c_in h bÚ )r   r    )r#   r   r"   r!   zb c_in h w -> b c_outzc_in h w c_outr"   r#   é   )r   r    ÚhÚwr   ©r!   r%   zb t head c_in -> b t head c_outzhead c_in c_outé   )r   Úheadr    r   ©r!   r"   r#   r%   )r!   r"   r#   r)   ))zb c h w, b w -> b hzabcd,ad->ac)r+   r(   )r!   r#   )zb c h w, b w, b c -> b hzabcd,ad,ab->ac))r!   r"   é(   r%   r(   ©r!   r"   )r!   r,   )z2... one two three, three four five -> ... two fivez...abc,cde->...be)©é    r%   r!   r"   r#   ©r#   r%   r)   ©r/   r%   r"   r)   )z2one two three ..., three four five -> two five ...zabc...,cde->be...))r!   r"   r#   r/   r%   r0   )r"   r)   r/   r%   )z6... one two three, ... three four five -> ... two fivez...abc,...cde->...be)r.   )r/   r%   r#   r%   r)   r1   )z*first_tensor second_tensor -> first_tensorzab->a))r%   r#   ©r%   )zi i -> zaa->))r%   r%   r   )z% one  two  ,  three four->two  four  z	ab,cd->bd)r-   )r#   r%   )r"   r%   )zi middle i -> middlezaba->b))r%   é
   r%   ©r3   )zi ... i -> ...z
a...a->...©)r%   r"   r!   é   r#   r%   )r"   r!   r6   r#   )zi ... i -> i ...za...a->a...r5   )r%   r"   r!   r6   r#   )zone one one -> onezaaa->a))r%   r%   r%   r2   )zi j k -> j i kzabc->bac))r6   r!   r"   )r!   r6   r"   )z
... -> ...z...->...)©r%   r#   r"   r!   r6   r7   )z..., ..., ... -> ...z...,...,...->...)©r"   r!   r8   r8   r8   )zindex ->za->r4   r   c                  óî  — t          dd¬¦  «        D ]â} t          j                             ¦   «         }| j        dv r¹|                      ¦   «         j        }t          D ]˜\  }}} ||¦  «        }t          d|j	        d| j        ¦  «         | 
                    |¬¦  «                             d¦  «        }|                      |¦  «        } ||¦  «        }	|                      |	¦  «        }
|
j        |k    sJ ‚Œ™Œãd S )	NTF)ÚlayersÚsymbolic)Ú
tensorflowÚtorchÚoneflowÚpaddleÚRunningÚfor©ÚsizeÚfloat32)r   ÚnpÚrandomÚdefault_rngÚframework_namer:   ÚEinMixÚtest_layer_casesÚprintÚeinsum_patternÚuniformÚastypeÚ
from_numpyÚto_numpyÚshape)ÚbackendÚrngÚ
layer_typer   Úin_shapeÚ	out_shapeÚlayerÚinputÚinput_frameworkÚoutput_frameworkÚoutputs              r   Ú
test_layerr\   ©   s
  € Ý(°¸uÐEÑEÔEð 1ð 1ˆÝŒi×#Ò#Ñ%Ô%ˆØÔ!Ð%QÐQÐQØ ŸšÑ)Ô)Ô0ˆJÝ-=ð 1ð 1Ñ)��h 	Ø˜˜ZÑ(Ô(�Ý�i Ô!5°u¸gÔ>TÑUÔUÐUØŸš¨˜Ñ2Ô2×9Ò9¸)ÑDÔD�Ø")×"4Ò"4°UÑ";Ô";�Ø#( 5¨Ñ#9Ô#9Ð Ø ×)Ò)Ð*:Ñ;Ô;�Ø”| yÒ0Ð0Ð0Ð0Ð0øð1ð 1r   )
r<   r=   ÚjaxÚnumpyr>   Úcupyztensorflow.kerasr?   ÚpytensorÚmlxc            	      óŠ  ‡‡— t          d„ t          ¦   «         ¦  «        } | D �]Št          D �]\  }}}}t          d|› d‰j        › �¦  «         t          |¦  «        }||k    sJ ‚t          j                             d¦  «        Šˆfd„|D ¦   «         }ˆfd„|D ¦   «         }dD ]œ}|r ‰j	        |g|¢R Ž }	nt          g |¢|‘R Ž }	t          |	j        ¦  «        |k    rt          d|› d	|	j        › �¦  «        ‚t          j	        |g|¢R Ž }
‰                     |	¦  «        }t          j                             ||
d
¬¦  «         Œ��Œ�Œ!d S )Nc                 ó   — | j         t          v S r   ©rH   Úvalid_backends_functional©Úxs    r   ú<lambda>z!test_functional.<locals>.<lambda>È   s   €  Ô 0Õ4MÐ M€ r   ú	Running 'z' for r   c                 ób   •— g | ]+}‰                      |¬ ¦  «                             d¦  «        ‘Œ,S ©rB   rD   ©rM   rN   )Ú.0rQ   Úrstates     €r   ú
<listcomp>z#test_functional.<locals>.<listcomp>Ó   s5   ø€ Ð]Ð]Ð]È%˜Ÿš¨U˜Ñ3Ô3×:Ò:¸9ÑEÔEÐ]Ð]Ð]r   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r   )rO   )rm   ÚarrayrR   s     €r   ro   z#test_functional.<locals>.<listcomp>Ô   s'   ø€ Ð"TÐ"TÐ"TÀ 7×#5Ò#5°eÑ#<Ô#<Ð"TÐ"TÐ"Tr   ©TFúExpected output shape ú	 but got r%   ©Údecimal)Úfilterr   Útest_functional_casesrK   rH   r   rE   rF   ÚRandomStater   ÚtuplerQ   Ú
ValueErrorrP   ÚtestingÚassert_array_almost_equal)ÚbackendsÚeinops_patternÚtrue_patternÚ	in_shapesrV   Úpredicted_patternÚ	in_arraysÚin_arrays_frameworkÚdo_manual_callÚ	out_arrayÚtrue_out_arrayÚpredicted_out_arrayrR   rn   s               @@r   Útest_functionalr‰   Æ   sÊ  øø€ åÐMÐMÕOdÑOfÔOfÑgÔg€HØð eñ eˆÝBWð 	eñ 	eÑ>ˆN˜L¨)°YÝÐL˜nÐLÐL°GÔ4JÐLÐLÑMÔMÐMõ !?¸~Ñ NÔ NÐØ$¨Ò4Ð4Ð4Ð4õ ”Y×*Ò*¨1Ñ-Ô-ˆFØ]Ð]Ð]Ð]ÐS\Ð]Ñ]Ô]ˆIØ"TÐ"TÐ"TÐ"TÈ)Ð"TÑ"TÔ"TÐð #0ð eð e�à!ð MØ . ¤Ð/@Ð WÐCVÐ WÐ WÐ W�I�Iå &Ð LÐ(;Ð L¸^Ð LÐ LÐ L�Iõ ˜œÑ)Ô)¨YÒ6Ð6Ý$Ð%c¸iÐ%cÐ%cÐR[ÔRaÐ%cÐ%cÑdÔdÐdõ "$¤¨<Ð!D¸)Ð!DÐ!DÐ!D�Ø&-×&6Ò&6°yÑ&AÔ&AÐ#Ý”
×4Ò4Ð5HÈ.ÐbcÐ4ÑdÔdÐdÐdñeñ	eðeð er   c                  ó®  ‡‡— t          d„ t          dd¬¦  «        ¦  «        } | D �].Št          D �]"\  }}}}t          d|› d‰j        › �¦  «         t          |¦  «        }||k    sJ ‚t          j                             d¦  «        Šˆfd„|D ¦   «         }ˆfd	„|D ¦   «         }t          j	        |g|¢R Ž }d
D ]™}	|	r ‰j	        |g|¢R Ž }
nt          g |¢|‘R Ž }
‰ 
                    |
t          t          ||¦  «        ¦  «        ¦  «        }|j        |k    rt          d|› d|j        › �¦  «        ‚t          j                             ||d¬¦  «         Œš�Œ$�Œ0d S )Nc                 ó   — | j         t          v S r   rd   rf   s    r   rh   z*test_functional_symbolic.<locals>.<lambda>ë   s   € �!Ô"Õ&?Ð?€ r   TF)r;   r:   ri   z' for symbolic r   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r   )Úcreate_symbol)rm   rU   rR   s     €r   ro   z,test_functional_symbolic.<locals>.<listcomp>õ   s'   ø€ ÐQÐQÐQ¸8�w×,Ò,¨XÑ6Ô6ÐQÐQÐQr   c                 ób   •— g | ]+}‰                      |¬ ¦  «                             d¦  «        ‘Œ,S rk   rl   )rm   rU   rn   s     €r   ro   z,test_functional_symbolic.<locals>.<listcomp>ö   s5   ø€ ÐaÐaÐaÈ8�v—~’~¨8�~Ñ4Ô4×;Ò;¸IÑFÔFÐaÐaÐar   rr   rs   rt   r%   ru   )rw   r   rx   rK   rH   r   rE   rF   ry   r   Úeval_symbolÚlistÚziprQ   r{   r|   r}   )r~   r   r€   r�   rV   r‚   Úin_symsÚin_dataÚexpected_out_datar…   Úpredicted_out_symbolÚpredicted_out_datarR   rn   s               @@r   Útest_functional_symbolicr—   é   sæ  øø€ ÝØ?Ð?ÕAVÐ`dÐmrÐAsÑAsÔAsñô €Hð ð gñ gˆÝBWð 	gñ 	gÑ>ˆN˜L¨)°YÝÐU˜nÐUÐU¸WÔ=SÐUÐUÑVÔVÐVå >¸~Ñ NÔ NÐØ$¨Ò4Ð4Ð4Ð4å”Y×*Ò*¨1Ñ-Ô-ˆFØQÐQÐQÐQÀyÐQÑQÔQˆGØaÐaÐaÐaÐW`ÐaÑaÔaˆGå "¤	¨,Ð A¸Ð AÐ AÐ AÐà"/ð gð g�Ø!ð LØ+9¨7¬>Ð:KÐ+VÈgÐ+VÐ+VÐ+VÐ(Ð(å+1Ð+K°7Ð+K¸NÐ+KÐ+KÐ+KÐ(à%,×%8Ò%8Ø(Ý�˜W gÑ.Ô.Ñ/Ô/ñ&ô &Ð"ð &Ô+¨yÒ8Ð8Ý$Ð%l¸iÐ%lÐ%lÐRdÔRjÐ%lÐ%lÑmÔmÐmÝ”
×4Ò4Ð5GÐIZÐdeÐ4ÑfÔfÐfÐfñgñ	gðgð gr   c            	      ó  ‡— t           j                             d¦  «        Šˆfd„} t          j        t
          d¬¦  «        5  t           | dd¦  «        d¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        t
          d¬¦  «        5  t           | dd¦  «        d	¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        t
          d¬¦  «        5  t           | d
d¦  «        d¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        t
          d¬¦  «        5  t           | dd¦  «        d¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        t          d¬¦  «        5  t           | dd¦  «        d¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        t          d¬¦  «        5  t           | ddd¦  «        d¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        t          d¬¦  «        5  t           | d¦  «        d 
                    t          j        ¦  «        dz   ¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        t          d¬¦  «        5  t           | dd¦  «        d¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        t          d¬¦  «        5  t          d | ddd¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        t          d¬¦  «        5  t          d¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        t          d¬¦  «        5  t           | dd¦  «        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nr   c                  óV   •— ‰                      | ¬¦  «                             d¦  «        S )NrB   rD   rl   )rQ   rn   s    €r   Úcreate_tensorz-test_functional_errors.<locals>.create_tensor  s%   ø€ Ø�~Š~ 5ˆ~Ñ)Ô)×0Ò0°Ñ;Ô;Ð;r   z
^Singleton)Úmatchr%   r6   z	i () -> iz^Shape rearrangementza b -> (a b)r3   z(a b) -> a bz^Anonymous axeszi 2 -> iz^Invalid axis identifierz	i 2j -> iz^Einsum patternr"   r!   zi j kz^Too many axesú z	 extra ->z^Unknown axiszi j -> kz^The last argumentz
i j k -> ir#   z^`einops.einsum` takes)rE   rF   ry   ÚpytestÚraisesÚNotImplementedErrorr   r   r{   ÚRuntimeErrorÚjoinÚstringÚascii_letters)rš   rn   s    @r   Útest_functional_errorsr¤   	  sƒ  ø€ õ ŒY×"Ò" 1Ñ%Ô%€Fð<ð <ð <ð <ð <õ 
ŒÕ*°,Ð	?Ñ	?Ô	?ð 
ð 
ÝØˆM˜!˜QÑÔØñ	
ô 	
ð 	
ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
õ 
ŒÕ*Ð2HÐ	IÑ	IÔ	Ið 
ð 
ÝØˆM˜!˜QÑÔØñ	
ô 	
ð 	
ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
õ 
ŒÕ*Ð2HÐ	IÑ	IÔ	Ið 
ð 
ÝØˆM˜"˜aÑ Ô Øñ	
ô 	
ð 	
ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
õ 
ŒÕ*Ð2CÐ	DÑ	DÔ	Dð 
ð 
ÝØˆM˜!˜QÑÔØñ	
ô 	
ð 	
ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
õ 
Œ•{Ð*DÐ	EÑ	EÔ	Eð 
ð 
ÝØˆM˜!˜QÑÔØñ	
ô 	
ð 	
ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
õ 
Œ•zÐ):Ð	;Ñ	;Ô	;ð 
ð 
ÝØˆM˜!˜Q Ñ"Ô"Øñ	
ô 	
ð 	
ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
õ 
Œ•|Ð+;Ð	<Ñ	<Ô	<ð 
ð 
ÝØˆM˜!ÑÔØ�HŠH•VÔ)Ñ*Ô*¨[Ñ8ñ	
ô 	
ð 	
ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
õ 
Œ•|¨?Ð	;Ñ	;Ô	;ð 
ð 
ÝØˆM˜!˜QÑÔØñ	
ô 	
ð 	
ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
õ 
Œ•zÐ)=Ð	>Ñ	>Ô	>ð 
ð 
ÝØØˆM˜!˜Q Ñ"Ô"ñ	
ô 	
ð 	
ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
õ 
Œ•zÐ)AÐ	BÑ	BÔ	Bð 
ð 
ÝØñ	
ô 	
ð 	
ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
õ 
Œ•zÐ)AÐ	BÑ	BÔ	Bð 
ð 
ÝØˆM˜!˜QÑÔñ	
ô 	
ð 	
ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð 
ð 
sÆ   ÁA(Á(A,Á/A,ÂB5Â5B9Â<B9ÃDÄDÄ	DÄ(EÅEÅEÅ5FÆF Æ#F ÇG*Ç*G.Ç1G.È:IÉIÉIÉ<J#Ê#J'Ê*J'Ë	K1Ë1K5Ë8K5ÌL3Ì3L7Ì:L7ÍN Î NÎN)r¢   Útypingr   r   r^   rE   r�   Úeinops.einopsr   r   r   Úeinops.testsr   r
   rJ   rx   r\   re   r‰   r—   r¤   r   r   r   ú<module>r¨      sæ  ðØ €€€Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ø €€€à MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ .Ð .Ð .Ð .Ð .Ð .ð3ð 3ð 3ð 3ð 3ñ 3ô 3ð 3ð 	ˆ	Ð-¨|ÈÐTVÐ]_Ð`Ñ`Ô`ØØðð 	ˆ	Ð-¨|ÈÐWYÐ`bÐcÑcÔcØØðð 	ˆ	Ð,¨b¸TÈÐKÑKÔKØØðð 	ˆ	Ð)Ð+;ÈÐSUÐYZÐ^_ÐghÐiÑiÔiØØðð 	ˆ	Ð3Ð5FÐSWÐ^_ÐfgÐopÐqÑqÔqØØðð+Ð ð>sð sð sÐ ðl1ð 1ð 1ðð ð Ð ð eð  eð  eðFgð gð gð@Y
ð Y
ð Y
ð Y
ð Y
r   