
    PiH                     
   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 d dl
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g 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          Zd$ Zd% Zd.d'Zd( Zd) Zd* Zd+ Zd, Zd- ZdS )/    N)
namedtuple)EinopsError	rearrangereduce)FLOAT_REDUCTIONS)collect_test_backendsis_backend_testedz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np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                  l/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/einops/tests/test_layers.pytest_rearrange_imperativerN   %   sc   (%EEE C C!7888@V 	C 	C<G\;	"'+..i@@@HHUUA$Q@@<@@L.GNN$$.wGG,GGE% = ==E',,RXe9-M-M-MNNOOO ));<<< %   D \&,u"5"566F&&uuW-?-?-B-B'C'CDDG&&vvg.@.@.C.C'D'DEEG;|W55555;w00000~~''..w%.HHH))!,,HXeeHoo..FOO;w//>>BBBBBB3	CC C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   _wrong_shapesrC   rD   rE   input_shape_of_nonesshapesrF   symboleval_inputsresult_symbol1rH   rG   result_symbol2rI   rJ   result_sum1result_sum2s                        rM   test_rearrange_symbolicr\   E   s
   ($tDDD = =!7888AW 	= 	==G\;	"'+..i@@@HHUUA$Q@@<@@L.GNN$$.wGG,GGE$(6C,<,<#< !#78F = = ..u55 &{m!&v!--nkJJ{<99999fl5&9&9::!'!--nkJJ{7G44444 #>>++227e2LL%11((>2J2JKXX fQii{;<<<<<<'=	== =    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   rc   r   r$   r?   r6   r7   r8   r9   r:   r;   r<   r=   r>   r@   rA   re   allisinr+   )rB   r-   r   r   r   r   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rA   s                    rM   test_reduce_imperativerj   n   s,   (%EEE %. %.!7888# #	. #	.IDV ". ".@{Lgy'<l[[[IaRW[%9%9!9KKKSST_``QVVXX%a)LL|LL/((/SSlSS) A AEAg00%y1Q1Q1QRRSSS --?@@@ )     fl5&9&9::!**551C1CA1F1F+G+GHH!**66'2D2DQ2G2G+H+HII{<99999{7G44444">>++227e2LL"--a00!%%//22!!!''66%%;tQ/////&&;tTXXZZ88888..6"'$A"7"7888886$<<#----E".#	.%. %.s   "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/   rf   rg   r1   r2   r3   r4   rc   r   r$   r?   rP   rQ   rR   r>   r:   r;   r<   )rB   r-   r   r   r   rS   rC   rD   rE   rT   rU   rF   rV   rW   rX   rH   rG   rY   rI   s                      rM   test_reduce_symbolicrl      s   ($tDDD 9 9!7888# 	9 	9IEW 9 9A{MIaRW[%9%9!9KKKSST_``QVVXX%a)LL|LL/((/SSlSS(,vK0@0@'@$%';<# 9 9E$22599F$*A;-K%*U6]]N%11.+NNG;|W=====#\&,u*=*=>>F%+VF^^N%11.+NNG;w88888899	99 9r]   Fc                    t          d          st          j                     d S dd l}ddlm}m}m}m}m	} ddl
m}m}	m}
  | |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   )Conv2dLinear	MaxPool2dReLU
SequentialEinMixr5   r?   r      )r    r    kernel_sizeb c (h h2) (w w2) -> b c h wrd   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.jittorch.nnro   rp   rq   rr   rs   einops.layers.torchru   r5   r?   jitscript)
use_reduceadd_scripted_layerrn   ro   rp   rq   rr   rs   ru   r5   r?   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 )Nrn   r   T)r   Fr   r       r   )example_inputsMbP?atolrtolr   )r	   r   r   rn   r   r   randnr>   load_state_dictr:   r;   r<   
state_dictr   tracetestingassert_close)rn   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 )	Nrn   r   )FTT)r   r   r   r   r   )
r	   r   r   rn   r   r   r   r   r   r   )rn   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                  d   t           j                                        } t          d          st	          j                     d S dd l}|j        dk     rt	          j                     ddlm	 ddlm
 ddlm ddlm ddlmmmm} fd	} |            } |            }|                     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.)Conv2D)Dense)rr   )rs   )ru   r5   r?   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 )Nrv   r    )r   r   r   )rx   r   ry   rd   r   r   rz   rw   r   r{   r|   r}   r~   r   r   r   r   r   r   r   r   )ro   ru   rp   rr   r5   r?   rs   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)"r1   randomdefault_rngr	   r   r   r   __version__tensorflow.keras.layersr   r   rr   tensorflow.keras.modelsrs   einops.layers.kerasru   r5   r?   r   normalastyper>   predict_on_batchr.   kerasmodels
save_model
load_modelr   assert_allclosemodel_from_jsonto_jsonsave_weightsload_weights)rngtfr   r   r   r   r   tmp_model_filenamer   weight_filenamer   ro   ru   rp   rr   r5   r?   rs   s              @@@@@@@rM   test_keras_layerr      s   
)


!
!C\** ;c>G##KMMM<<<<<<;;;;;;000000666666WWWWWWWWWWWW	 	 	 	 	 	 	 	 	 	 	$ $#%%##%%


0077	BB;v66u==v?V?VW\?]?]^^^^^ 7 "4555
""6+=>>>++,>Oc+dd

""6#:#:5#A#A6CZCZ[`CaCabbb;001A1ARf0ggO,,,O,,,O,,,

""6#:#:5#A#A6CZCZ[`CaCabbb 	
""6#:#:5#A#A6CZCZ[`CaCabbbbbr]   c                     t          d          st          j                     dS ddl} ddl}ddlm ddlm ddlm	m
m  G fddj                  } |                                g d                              |j                            d                    }fd	}|                    |          } ||          } ||          \  }}                    ||          sJ |j        d
k     r|j        }	n|j        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)linenrt   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 -> brc   r   )hwc)dict)selfrC   ru   r5   r?   s     rM   __call__z%test_flax_layers.<locals>.NN.__call__D  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   )ru   r5   r?   nns   rM   NNr   C  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_pointQ  s%    :??5;;v{#C#CDDDr]   z0.6.0c                     | |dz  z
  S )Nr   r   )x1x2s     rM   <lambda>z"test_flax_layers.<locals>.<lambda>]  s    "rEz/ r]   )r	   r   r   flaxr   	jax.numpynumpyr   einops.layers.flaxru   r5   r?   Moduleonesinitr   PRNGKeyvalue_and_gradr>   r   tree_maptreemapserializationto_bytes
from_bytes)r   r   r   r   r   vandgvalue0value1grad1r   params2value2fbytes_loadedru   r5   r?   r   r   r   r   s                 @@@@@@@rM   test_flax_layersr  4  s   
 U## +@


$$$$$$@@@@@@@@@@	 	 	 	 	 	 	 	 	 	 	 	 	 hh44455CJ..q11;??	E 	E 	E 	E 	E 	E 	E ""=11v&&f||FF+++++?W$$|HHx|H(9965II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  g  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   r   r1   r   einopsr   r   r   einops.testsr   rf   r   r	   
__author__r
   r   r0   rN   r\   rg   rj   rl   r   r   r   r   r  r  r  r   r]   rM   <module>r#     s    " " " " " "      1 1 1 1 1 1 1 1 1 1 7 7 7 7 7 7 A A A A A A A A
:j"\"\"\]] Hr


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


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


,<ul>STT H/a1H1H1HJZ]m\noo H^TTBZZZ)9E8;LMM	 &. &. &.R9 9 94
 
 
 
6_ _ _4[ [ [=c =c =c@0@ 0@ 0@fW0 W0 W0t
 
 
 
 
r]   