
    !Sh8H                        d dl Z d dlmZ d dlZd dlZd dlmZmZmZ d dl	m
Z
mZmZ dZ edg d          Z ed ed	
          dddddg dg           ed edd          dg d           ed ed          dg d          gZd Zd Ze ed ed          dddg           ed eddd          dd g           ed! ed          ddd"g          gz   Zd# Zd$ Zd-d&Zd' Zd( Zd) Zd* Zd+ Zd, ZdS ).    N)
namedtuple)	rearrangereduceEinopsError)collect_test_backendsis_backend_testedFLOAT_REDUCTIONSzAlex Rogozhnikovtestcase)patternaxes_lengthsinput_shapewrong_shapesb c h w -> b (c h w)   c)
   r      (    r   )r   r   r   )r      r   r   )   r   r   r   r   z(b c (h1 h2) (w1 w2) -> b (c h2 w2) h1 w1   h2w2)r   )r   r   r   r   )r   r      r   zb ... c -> c b ...r   )b)r   r   r   )r   r   )   r   c                     t          dd          D ]3} t          d| j                   t          D ]\  }}}}t	          j        t	          j        |          d                              |          }t          ||fi |} | 	                                j
        |fi |}|D ]S}	  ||                     t	          j        |d                               t          d          # t          $ r Y Pw xY wt          j        t          j        |                    }	|                      ||                     |                              }
|                      |	|                     |                              }t	          j        ||
          sJ t	          j        |
|          sJ | 	                                                    dd	
          }|                     |          } | ||                    }|                                 t	          j        |                     |j                  d          sJ 5d S )NFTsymboliclayersTest layer for float32dtypeFailure expected...->sum	reductionr   )r   printframework_namerearrangement_patternsnumpyarangeprodreshaper   r$   	Rearrange
from_numpyzerosAssertionErrorBaseExceptionpickleloadsdumpsto_numpyallcloseReducebackwardgrad)backendr   r   r   r   xresult_numpylayershapelayer2result1result2just_sumvariableresults                  ^/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/einops/tests/test_layers.pytest_rearrange_imperativerN   $   sc   (%EEE F F!7888@V 	F 	F<G\;UZ44IFFFNN{[[A$Q@@<@@L.GNN$$.wGG,GGE% = ==E',,U[i-P-P-PQQRRR ));<<< %   D \&,u"5"566F&&uuW-?-?-B-B'C'CDDG&&vvg.@.@.C.C'D'DEEG>,88888>'733333~~''..w%.HHH))!,,HXeeHoo..FOO>'"2"28="A"A1EEEEEE3	FF Fs   '2C((
C5	4C5	c                     t          dd          D ]} t          d| j                   t          D ]\  }}}}t	          j        t	          j        |          d                              |          }t          ||fi |} | 	                                j
        |fi |}d gt          |          z  }||g}	|	D ]&}
|                     |
          }||fg} ||          }|                     ||          }t	          j        ||          sJ t          j        t          j        |                    } ||          }|                     ||          }t	          j        ||          sJ | 	                                                    dd          }|                      ||          |          }t	          j        |          }t	          j        ||          sJ (d S )	NTr"   r%   r&   r'   r*   r+   r,   )r   r.   r/   r0   r1   r2   r3   r4   r   r$   r5   lencreate_symboleval_symbolr>   r:   r;   r<   r?   r+   )rB   r   r   r   r   rC   rD   rE   input_shape_of_nonesshapesrF   symboleval_inputsresult_symbol1rH   rG   result_symbol2rI   rJ   result_sum1result_sum2s                        rM   test_rearrange_symbolicr[   D   s   ($tDDD @ @!7888@V 	@ 	@<G\;UZ44IFFFNN{[[A$Q@@<@@L.GNN$$.wGG,GGE$(6C,<,<#< !#78F @ @ ..u55 &{m!&v!--nkJJ~lG<<<<<fl5&9&9::!'!--nkJJ~gw77777 #>>++227e2LL%11((>2J2JKXX#ill~k;??????'@	@@ @    zb c h w -> b ()z b c (h1 h2) (w1 w2) -> b c h1 w1   )h1r   r   )r   r      r   zb ... c -> b)   r   c                     t          dd          D ]} t          d| j                   t          D ]}t          D ]\  }}}}t          | |||||           t          j        ddt          j        |          z   d                              |          }||	                                z  }t          |||fi |} |                                 j        ||fi |}|D ]S}		  ||                     t          j        |	d                               t          d          # t           $ r Y Pw xY wt#          j        t#          j        |                    }
|                      ||                     |                              }|                      |
|                     |                              }t          j        ||          sJ t          j        ||          sJ |                                                     d	d
          }|                     |          } | ||                    }|                                 |                     |j                  }|d
k    rt          j        |d          sJ |dk    r)t          j        ||                                          sJ |dv rEt          j        t          j        |ddg                    sJ t          j        |          dk    sJ Őѐd S )NFTr"   r%   r   r&   r'   r)   r*   r+   r,   mean)maxminr   g      ?)r   r.   r/   
REDUCTIONSreduction_patternsr1   r2   r3   r4   rb   r   r$   r?   r6   r7   r8   r9   r:   r;   r<   r=   r>   r@   rA   rd   allin1dr+   )rB   r-   r   r   r   r   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rA   s                    rM   test_reduce_imperativeri   l   s,   (%EEE %1 %1!7888# #	1 #	1IDV "1 "1@{Lgy'<l[[[LA
;(?(?$?yQQQYYZeffQVVXX%a)LL|LL/((/SSlSS) A AEAg00U)1T1T1TUUVVV --?@@@ )     fl5&9&9::!**551C1CA1F1F+G+GHH!**66'2D2DQ2G2G+H+HII~lG<<<<<~gw77777">>++227e2LL"--a00!%%//22!!!''66%% >$22222&& >$

;;;;;.. 9UZq!f%=%=>>>>> 9T??S0000E"1#	1%1 %1s   "2D##
D0/D0c            
      :   t          dd          D ]} t          d| j                   t          D ]f}t          D ]Z\  }}}}t          j        ddt          j        |          z   d                              |          }||	                                z  }t          |||fi |} |                                 j        ||fi |}d gt          |          z  }	||	g}
|
D ]}|                     |          }||fg} ||          }|                     ||          }t          j        ||          sJ t#          j        t#          j        |                    } ||          }|                     ||          }t          j        ||          sJ \hd S )NTr"   r%   r   r&   r'   )r   r.   r/   re   rf   r1   r2   r3   r4   rb   r   r$   r?   rP   rQ   rR   r>   r:   r;   r<   )rB   r-   r   r   r   r   rC   rD   rE   rS   rT   rF   rU   rV   rW   rH   rG   rX   rI   s                      rM   test_reduce_symbolicrk      s   ($tDDD < <!7888# 	< 	<IDV < <@{LLA
;(?(?$?yQQQYYZeffQVVXX%a)LL|LL/((/SSlSS(,vK0@0@'@$%';<# < <E$22599F$*A;-K%*U6]]N%11.+NNG >,@@@@@#\&,u*=*=>>F%+VF^^N%11.+NNG >'7;;;;;;<<	<< <r\   Fc                    t          d          st          j                     d S ddlm}m}m}m}m} ddl	m
}m}m}	 dd l}
 | |ddd          | r |d	d
dd          n |d           |ddd           |d	d
dd          |r#|
j                             |d                    n
 |d           |dd           |             |dd           |             |	ddddd           |	ddddd           |dd                    S )Ntorchr   )
SequentialConv2d	MaxPool2dLinearReLU)r5   r?   EinMixr      )r    r    kernel_sizeb c (h h2) (w w2) -> b c h wrc   r   r      r   i  x   T   b c1 -> (b c2)c1 c2c2weight_shape
bias_shapec1r}   (b c2) -> b c3c2 c3c3r   r   r}   r   r   )r   pytestskiptorch.nnrn   ro   rp   rq   rr   einops.layers.torchr5   r?   rs   	torch.jitjitscript)
use_reduceadd_scripted_layerrn   ro   rp   rq   rr   r5   r?   rs   rm   s              rM   create_torch_modelr      s   W%% 
HHHHHHHHHHHHHHAAAAAAAAAAzF1aV,,,ISqFF15Q1EEEEYbYbopYqYqYqF1bf---F15Q1EEE!3EIYY'=>>???122F:s##DFFF3OODFFF#'drVXYYYF#'drVXYYYF2rNN
 
 	
r\   c                     t          d          st          j                     d S dd l} dd l} t          d          }t          d          }|                     g d          }|                      ||           ||                    rJ |                    t          j
        t          j        |                                                               |                      ||           ||                    sJ | j                            ||          }| j                             ||           ||          dd	           | j                             ||d
z              ||d
z             dd	           | j                            ||          }| j                             ||           ||          dd	           | j                             ||d
z              ||d
z             dd	           d S )Nrm   r   T)r   Fr   r       r   )example_inputsMbP?atolrtolr   )r   r   r   rm   r   r   randnr>   load_state_dictr:   r;   r<   
state_dictr   tracetestingassert_close)rm   model1model2inputmodel3model4s         rM   test_torch_layerr      s   W%% _ 	#t444#u555OOO,,>>&&--?????v|FL9J9J9L9L,M,MNNOOO~~ffUmmVVE]];;;;; >>""66%==&&--dQU"VVV""66%!)#4#4ffUQY6G6GdY]"^^^>>""66%==&&--dQU"VVV""66%!)#4#4ffUQY6G6GdY]"^^^^^r\   c                  D   t          d          st          j                     d S dd l} dD ]t}t	          d|          }| j                            |          }|                     g d          }| j        	                     ||           ||          dd           ud S )	Nrm   r   )FTT)r   r   r   r   r   )
r   r   r   rm   r   r   r   r   r   r   )rm   script_layerr   r   r   s        rM   test_torch_layers_scriptingr      s    W%% 
[) 	[ 	[L'4LYYYFY%%f--FKK00EM&&vve}}ffUmm$UY&ZZZZ	[ 	[r\   c                  ,  
 t          d          st          j                     d S dd l} | j        dk     rt          j                     ddlm ddlm
m	m
 ddlmmmm} 
fd} |            } |            }t           j                            g d	                              d
          }t!          j        |                    |          |                    |                    rJ d}t-          d|           | j        j                            ||           | j        j                            ||          }t           j                            |                    |          |                    |                     d}| j        j                            |                                |          }	|                    |           |	                     |           |                     |           t           j                            |                    |          |                    |                     t           j                            |                    |          |	                    |                     d S )N
tensorflowr   z2.16.)rn   )Conv2DDenserr   )r5   r?   rs   keras_custom_objectsc                  8      ddg d           dddd            d	d
           dddd           d           d                        d                        ddddd           ddddd           d          g          S )Nrt   r    )r   r   r   )rv   r   rw   rc   r   r   rx   ru   r   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   )ro   rs   rq   rr   r5   r?   rn   s   rM   create_keras_modelz,test_keras_layer.<locals>.create_keras_model   s    :F1!EEEF95Q1MMMF21---F95Q1MMMI455F3KKDFFF2JJDFFF+'dWY^`aaaF+'dWY^`aaaF2JJ  r\   )r   r   r   r   )sizer&   z/tmp/einops_tf_model.h5temp_path_keras1)custom_objectsz/tmp/einops_tf_model.weights.h5)!r   r   r   r   __version__tensorflow.keras.modelsrn   tensorflow.keras.layersr   r   rr   einops.layers.kerasr5   r?   rs   r   r1   randomnormalastyper>   predict_on_batchr.   kerasmodels
save_model
load_modelr   assert_allclosemodel_from_jsonto_jsonsave_weightsload_weights)tfr   r   r   r   r   tmp_model_filenamer   weight_filenamer   ro   rs   rq   rr   r5   r?   rn   s             @@@@@@@rM   test_keras_layerr      s   \** 8f>G##KMMM666666SSSSSSSSSSWWWWWWWWWWWW	 	 	 	 	 	 	 	 	 	 	$ $#%%##%%###99@@KK>&"9"9%"@"@&BYBYZ_B`B`aaaaa 7 "4555
""6+=>>>++,>Oc+dd%%f&=&=e&D&DfF]F]^cFdFdeee;001A1ARf0ggO,,,O,,,O,,,%%f&=&=e&D&DfF]F]^cFdFdeee 	%%f&=&=e&D&DfF]F]^cFdFdeeeeer\   c                     t          d          st          j                     dS ddl} ddlm ddl}ddlm ddlm	m
m  G fddj                  } |                                g d                              | j                            d                    }fd	}|                     |          } ||          } ||          \  }}                    ||          sJ |                     d
 ||          }	 ||	          }
||
k    sJ ||
f            |j                            |          }|j                            ||          }dS )z|
    One-off simple tests for Flax layers.
    Unfortunately, Flax layers have a different interface from other layers.
    jaxr   N)linen)rs   r?   r5   c                   8    e Zd Zj         fd            ZdS )test_flax_layers.<locals>.NNc                       dddt          dddd          	          |          }  d
t          d          	          |          }  ddt          d                    |          }|S )Nz b (h h2) (w w2) c -> b h w c_outzh2 w2 c c_outc_outr   r      r    )r   r   r   r   )sizeszb h w c -> b (w h c)r   z
b hwc -> brb   r   )hwc)dict)selfrC   rs   r5   r?   s     rM   __call__z%test_flax_layers.<locals>.NN.__call__=  s    FF6X\`afgkltuXvXvXv    GII4D1IIIFFFqIIEFF<)1D1D1DEEaHHr\   N)__name__
__module____qualname__compactr   )rs   r5   r?   nns   rM   NNr   <  sD        Z      Z  r\   r   )r   r   	   r   c                 `    j                                                 |                     S )N)linalgnormapply)paramsfixed_inputjnpmodels    rM   eval_at_pointz'test_flax_layers.<locals>.eval_at_pointJ  s%    :??5;;v{#C#CDDDr\   c                     | |dz  z
  S )Nr   r   )x1x2s     rM   <lambda>z"test_flax_layers.<locals>.<lambda>R  s    b2:o r\   )r   r   r   r   	jax.numpyr1   flaxr   einops.layers.flaxrs   r?   r5   Moduleonesinitr   PRNGKeyvalue_and_gradr>   tree_mapserializationto_bytes
from_bytes)r   r   r   r   r   vandgvalue0value1grad1params2value2fbytes_loadedrs   r5   r?   r   r   r   r   s                @@@@@@@rM   test_flax_layersr   -  s   
 U## '@


$$$$$$@@@@@@@@@@	 	 	 	 	 	 	 	 	 	 	 	 	 hh44455CJ..q11;??	E 	E 	E 	E 	E 	E 	E ""=11v&&f||FF+++++,,==vuMMw''&&!1 #,,V44$//??r\   c            
         ddl m}   | ddddd          }|j        J |j        J |j        d
k    sJ |j        g dk    sJ |j        J  | dddddddd          }|j        J |j        J |j        d
k    sJ |j        g dk    sJ |j        g dk    sJ  | ddd          }|j        J |j        J |j        dk    sJ |j        g k    sJ |j        g k    sJ  | ddddd          }|j        J |j        J |j        dk    sJ |j        g dk    sJ |j        J  | ddddd          }|j        dk    sJ |j        t          dd          k    sJ |j        dk    sJ |j        dk    sJ |j        g dk    sJ |j        J  | dd d!ddd"          }|j        d#k    sJ |j        t          dd$          k    sJ |j        d%k    sJ |j        d&k    sJ |j        ddgk    sJ |j        g d'k    sJ  | d(d)d*ddd+          }|j        d,k    sJ |j        t          dd-          k    sJ |j        d.k    sJ |j        d/k    sJ |j        g d0k    sJ |j        g d1k    sJ d	S )2zP
    Testing that einmix correctly decomposes into smaller transformations.
    r   _EinmixDebuggera b c d e -> e d c b ad a br   r   r    r   dar   Nzabcde,dab->edcba)r   r   r    z	a b c d er   r   )r   r   r  r   r   r  e)r   r   r   )r    r   r   r   r   z
... -> ... )r   r   z	...,->...zb a ...  -> b c ...zb a c)r   r  r   r   zba...,bac->bc...)r   r   r   z(b a) ... -> b c (...)z(b a) ... -> b a ...)r  r   zb c ... -> b c (...)zb ... (a c) -> b ... (a d)zc dza d)r   r   r  r   r  zb ... (a c) -> b ... a c)r  r   zb ... a d -> b ... (a d)zb...ac,cd->b...ad)r   r   r   za ... (b c) -> a (... d b)zc d bzd b)r   r   r   r   r  za ... (b c) -> a ... b c)r   r   za ... d b -> a (... d b)za...bc,cdb->a...db)r   r   r   )r   r   r   )	einops.layers._einmixr   pre_reshape_patternpost_reshape_patterneinsum_patternsaved_weight_shapesaved_bias_shapepre_reshape_lengthsr   )r   mixin1mixin2mixin3mixin4mixin5mixin6mixin7s           rM   test_einmix_decompositionr  \  s7    655555_ 
qA  F
 %---&... $66666$			1111"***_ 
qAa	  F %---&... $66666$			1111"ooo5555_  F
 %---&... K////$****"b((((_
qA  F
 %---&... $66666$			1111"***_ 
qA  F
 %)?????%Q7777&*@@@@@ $66666$			1111"***_$
qA	  F %)CCCCC%Q7777&*DDDDD $77777$A...."iii////_$
qA	  F %)CCCCC%Q7777&*DDDDD $88888$			1111"iii//////r\   c                     ddl m}  t          j        t                    5   | dddd           ddd           n# 1 swxY w Y   t          j        t                    5   | dd	ddd
           ddd           n# 1 swxY w Y   t          j        t                    5   | ddd
           ddd           n# 1 swxY w Y   t          j        t                    5   | ddd
d           ddd           dS # 1 swxY w Y   dS )z!
    Testing different cases
    r   r   r   r   r   r   )r   r  r  Nzw a br   r  z(...) a -> ... ar  )r   r  z(...) a -> a ...)r   r  r   )r  r   r   raisesr   r   s    rM   test_einmix_restrictionsr    sN    655555	{	#	# 
 
$ 1	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
{	#	# 
 
$ 1	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
{	#	# 
 
	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
{	#	# 
 
	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
sE   <A A  A==BB!B<<C C  C==DD)FF)r:   collectionsr   r1   r   einopsr   r   r   einops.testsr   r   r	   re   
__author__r
   r   r0   rN   r[   rf   ri   rk   r   r   r   r   r   r  r  r   r\   rM   <module>r     s~    " " " " " "   1 1 1 1 1 1 1 1 1 1 a a a a a a a a a a
:j"\"\"\]] Hr


	UL"24D4D4DE	  H2a***	  Hr


	  ,F F F@@ @ @B ,Hr


,<ul>STTH/a1H1H1HJZ]m\nooH^TTBZZZ)9E8;LMM/  &1 &1 &1R< < <4
 
 
 
4_ _ _4[ [ [9f 9f 9fx,@ ,@ ,@^W0 W0 W0t
 
 
 
 
r\   