
    Pii                        d dl Z d dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
 d dlmZ d dlmZmZ  edd          Z edd          Zej                                        Zg d	Zg d
Zg dZd Zd ZdBdZd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d e)            fd e)d d d!d"#          fd$ e)d%&          fd' e)d d%d (          fd) e)d*&          fd+ e)d%d ,          fd- e)            fd. e)d d!,          fd/ e)d d%,          fg	Z*d0 Z+d1 Z,d2 Z-d3 Z.d4 Z/d5 e)            fd6 e)d%d*d78          fd9 e)d!&          fd: e)            fd; e)d d!,          fd< e)            fgZ0d= Z1d> Z2d? Z3d@ Z4dA Z5dS )C    N)EinopsError)_enumerate_directions	rearrangereducerepeat)FLOAT_REDUCTIONS)collect_test_backendsis_backend_testedFsymboliclayersT)...->...za b c d e-> a b c d eza b c d e ...-> ... a b c d eza b c d e ...-> a ... b c d ez... a b c d e -> ... a b c d eza ... e-> a ... eza ... -> a ... za ... c d e -> a (...) c d e))za b c d e -> (a b) c d eza b ... -> (a b) ... )za b c d e -> a b (c d) ez... c d e -> ... (c d) e)za b c d e -> a b c d ez... -> ... )za b c d e -> (a b c d e)... ->  (...))za b c d e -> b (c d e) aza b ... -> b (...) a)za b c d e -> b (a c d) eza b ... e -> b (a ...) e))a b c d e -> z	 ... ->  )za b c d e -> (e a)za ... e -> (e a))za b c d e -> d (a e)z a b c d e ... -> d (a e) )za b c d e -> (a b)z ... c d e  -> (...) c                  x   t          j        g d          } t          | d           t          j        t
                    5  t          | d           d d d            n# 1 swxY w Y   t          | d           t          j        t
                    5  t          | d           d d d            d S # 1 swxY w Y   d S )N   r   r   r   r   za b c d ... ->  a b c ... dza b c d (...) ->  a b c ... dr   z(...) -> (...))npzerosr   pytestraisesr   xs    i/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/einops/tests/test_ops.py"test_collapsed_ellipsis_errors_outr   ,   s3   
!!Aa.///	{	#	# 6 6!45556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 a!!!	{	#	# ' '!%&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's$    AA!$A!B//B36B3c            
      (   t          j        d                              g d          } t          D ]/}t          j        | t          | |                    s
J |            0t          D ]8\  }}t          j        t          | |          t          | |                    sJ 9dD ]F}t          D ]<\  }}t          j        t          | ||          t          | ||                    sJ =Gg t          }t          D ]}|	                    |           d S )N                 minmaxsum	reduction)
r   arangereshapeidentity_patternsarray_equalr   equivalent_rearrange_patternsequivalent_reduction_patternsr   extend)r   patternpattern1pattern2r)   all_rearrange_patternspattern_pairss          r   test_ellipsis_ops_numpyr6   7   sN   
	#$$,,___==A$ A A~a1g!6!677@@@@7@; N N(~i844i86L6LMMMMMM* v v	"? 	v 	vHh>&H	"J"J"JFSTV^jsLtLtLtuuuuuu	v 2016 5 5%%m44445 5    r   c                 l   fd} ||          }t           j        }d|rNfd|j        D             }	|                     |	          }
 ||
          }|                     ||
|fg          }n3 ||                     |                    }|                     |          } |||           dS )z
    Helper to test result of operation (rearrange or transpose) against numpy
    if reduction == 'rearrange', rearrange op is tested, otherwise reduce
    c                 J    dk    rt          | fi S t          | fi S )Nr   )r   r   )r   axes_lengthsr1   r)   s    r   	operationz)check_op_against_numpy.<locals>.operationO   s@    ##Q88<888!Wi@@<@@@r7   g      ?c                 R    g | ]#}t                                           k    r|nd $S N)rngrandom).0dp_none_dimensions     r   
<listcomp>z*check_op_against_numpy.<locals>.<listcomp>Y   s0    cccASZZ\\-===4cccr7   )shapeN)r   r-   rD   create_symboleval_symbol
from_numpyto_numpy)backendnumpy_inputr1   r:   r)   is_symbolicr;   numpy_resultcheck_equalsymbol_shapesymbolresult_symbolbackend_resultrB   s     ```        @r   check_op_against_numpyrR   I   s    A A A A A A A 9[))L.K :ccccQ\Qbccc&&\&::!	&)) ,,]fk=R<STT"7#5#5k#B#BCC )).99Kn-----r7   c                  j   t          j        d                              g d          } dD ]}t          |d          D ]r}t          t          t          j        t                     z   D ]}t          || |i d|           dD ]-}t          j        t           D ]}t          || |i ||           .sd	S )
z'Checking various patterns against numpyr   r   )TFFr   r   )r:   r)   rK   r$   N)r   r*   r+   r	   r,   list	itertoolschainr.   rR   r/   )r   rK   rI   r1   r)   s        r   test_ellipsis_ops_imperativerW   d   s   
	#$$,,___==A$  ,k%PPP 
	 
	G,tIOEb4c/d/dd  &QbK]h     3  	(0MN  G*G"	_j    
	 r7   c                     dd l } ddlm} | j        dk     rt	          j                     t          j        d                              g d          }t          t          t          j        t                     z   D ]h}t          ||          }|                    |                     |          |          }t          j        |                    |dz             |          sJ id S )Nr   	array_api2.0.0r   r   )numpyeinopsrZ   __version__r   skipr   r*   r+   r,   rT   rU   rV   r.   r   from_dlpackr-   asnumpy)xpAAr   r1   expectedresults         r   test_rearrange_array_apirf   u   s    &&&&&&	~
	#$$,,___==A$tIO=Z,['\'\\ @ @Q((bnnQ//99~bjj!44h??????@ @r7   c            
         dd l } ddlm} | j        dk     rt	          j                     t          j        d                              g d          }t          j
        t           D ]}dD ]~}t          |||          }|                    |                     |          ||          }t          j        |                    t          j        |dz                       |          sJ d S )Nr   rY   r[   r   r   r$   r(   )r\   r]   rZ   r^   r   r_   r   r*   r+   rU   rV   r/   r   r`   r-   ra   asarray)rb   rc   r   r1   r)   rd   re   s          r   test_reduce_array_apiri      s   &&&&&&	~
	#$$,,___==A?$AB P P. 	P 	PIaI>>>HYYr~~a00'YYOOF>"**RZ
-C-C"D"DhOOOOOO	PP Pr7   c                  B   g d} t          j        t          j        |                                         |           }dD ]L}t	          ||          }t          t          j        ||                    dk    sJ |j        |j        k    sJ Mt	          |d          }t          j        |	                                |	                                          sJ t	          |d          }t          j        ||          sJ t	          |d          }t	          |d          }t          j        ||          sJ t	          t	          |d          d	d
d          }t          j        ||          sJ t          t          d|                     }t	          |dfi |}t	          |d	fi |}t          j        ||          sJ t          j        d                              g d          }t	          |d          }|d         |d         k    sJ |d         |d         k    sJ d S )N)r   r   r    r"         )za b c d e f -> a b c d e fzb a c d e f -> a b d e f ca b c d e f -> f e d c b aza b c d e f -> (f e) d (c b a)za b c d e f -> (f e d c b a)r   za b c d e f -> a (b) (c d e) fz0a aa aa1 a1a1 aaaa a11 -> a aa aa1 a1a1 aaaa a11rm   zf e d c b a -> a b c d e fza b c d e f -> (f d) c (e b) az(f d) c (e b) a -> a b c d e fr   r"   )brA   abcdef   r   r    r!   za b c -> b c a)r   r   r    )r   r    r   )r   r   r   )r   r   r   )r   r*   prodr+   r   len	setdiff1ddtyper-   flattendictzip)	rD   r   r1   re   result1result2sizestempx2s	            r    test_rearrange_consistency_numpyr~      s/   E
	"'%..!!))%00A 	' 	' 1g&&2<6**++q0000|qw&&&&&q:;;F>!))++v~~'7'788888qLMMF>!V$$$$$788G788G>'7+++++y$DEEGgklpqrrrF>!V$$$$$Xu%%&&EQ8BBEBBDt=GGGGF>!V$$$$$	9			%	%iii	0	0Br+,,Fg;&/))))g;&/))))))r7   c                     t          dd          D ]} t          j        d| z                                dg| z            }t                              |           }d                    d t          |           D                       }d                    d |D                       }|dz   |z   }t          ||          }t                              ddd| g          D ]6}|t          |                   |t          ||                            k    sJ 7t          dd          D ] } t          j        d| z                                dg| z            }t                              |           }d                    d	 t          |           d d d
         D                       }d                    d |d d d
         D                       }|dz   |z   }t          ||          }|j
        |j
        k    sJ t          j        |          }t          |          D ]\  }	}
|||	z	  dz  |
z  z  }t          j        ||          sJ "d S )Nr   
   r    c              3   :   K   | ]}d t          |          z   V  dS iNstrr@   axiss     r   	<genexpr>z4test_rearrange_permutations_numpy.<locals>.<genexpr>   s,      "M"Mt3T?"M"M"M"M"M"Mr7   c              3   :   K   | ]}d t          |          z   V  dS r   r   r   s     r   r   z4test_rearrange_permutations_numpy.<locals>.<genexpr>   s,      #L#LC#d))O#L#L#L#L#L#Lr7    -> r   c              3   :   K   | ]}d t          |          z   V  dS r   r   r   s     r   r   z4test_rearrange_permutations_numpy.<locals>.<genexpr>   s,      "S"St3T?"S"S"S"S"S"Sr7   c              3   :   K   | ]}d t          |          z   V  dS r   r   r   s     r   r   z4test_rearrange_permutations_numpy.<locals>.<genexpr>   s,      #R#RC#d))O#R#R#R#R#R#Rr7   )ranger   r*   r+   r>   permutationjoinr   integerstuplerD   
zeros_like	enumerater-   )n_axesinputr   left_expressionright_expression
expressionre   pickexpected_resultoriginal_axisresult_axiss              r   !test_rearrange_permutations_numpyr      sd   2,, 	J 	J	!V)$$,,aS6\::oof--(("M"MuV}}"M"M"MMM88#L#L#L#L#LLL$v-0@@
5*--LLAF|44 	J 	JDt%d;6G0H0H)IIIIII	J 2,, 7 7	!V)$$,,aS6\::oof--(("S"SuV}}TTrT?R"S"S"SSS88#R#RDDbD@Q#R#R#RRR$v-0@@
5*--|u{****-..*3K*@*@ 	M 	M&M;-!71 <LLOO~fo6666667 7r7   c                     t           D ]z} t          d| j                   t          D ]Y}t	          j        dd                              g d          }|dv r*||                    d                                          z  }di  t          ||                      gd	i  t          ||                      gd
t          dd           t          ||                      gdi  t          ||          d                              ddd                              ddg          gdi  t          ||          d                              ddd                              ddg          gdi  t          ||          d                              ddd                              ddg          gdi  t          ||          d                              ddd                              dg          gdt          d          |gg}|D ]r\  }}}t          |                     |                                          |fd|i|}|                     |          }t	          j        ||          sJ d|             s[|d S )NReduction tests for r   int64ru   r   meanrr   float64r   	a ... -> z(a1 a2) ... (e1 e2) -> r   r   )a1e2a b c d e -> (e c) ar   r    r   r   r   a ... c d e -> (e c) aa b c d e ... -> (e c) aa b c d e -> (e c a)(a a2) ... -> (a2 a) ...a2r)   z
Failed at )imp_op_backendsprintframework_name
REDUCTIONSr   r*   r+   astyper   getattrrw   	transposer   rG   copyrH   allclose)rI   r)   r   
test_casesr1   r:   r   re   s           r   test_reduction_imperativesr      s   "  T  T$g&<===# 	T 	TII/w???GGXXE,,,Y 7 7 < < > >> "&?geY&?&?&A&ABb";'%";";"="=>*DA!,<,<,<>WgeY>W>W>Y>YZ*-GE9--6:::DDQ1MMUUWY[\V]^^ --GE9--6:::DDQ1MMUUWY[\V]^^ /-GE9--6:::DDQ1MMUUWY[\V]^^
 (-FWUI-F-FF-S-S-S-]-]^_abde-f-f-n-npros-t-tu+TQZZZ?)J, ;E T T6 2 25::<< @ @'ooU^obnoo ))&11{6?;;SS=S'=S=SSS;ST7	T T  Tr7   c                  j   t           D ])} t          d| j                   t          D ]}t	          j        dd                              g d          }||                    d                                          z  }di  t          ||                      gdi  t          ||                      gd	t          d
d
           t          ||                      gdi  t          ||          d                              dd
d                              ddg          gdi  t          ||          d                              dd
d                              ddg          gdi  t          ||          d                              dd
d                              ddg          gdi  t          ||          d                              dd
d                              dg          gdt          d
          |gg}|D ]$\  }}}|j        d |j        D             g}|D ]W}|                     |          }	t          |	|fd|i|}
|                     |
|	|fg          }t	          j        ||          sJ X	 g }i |}t#          d|j                  D ]9\  }}||v r|                    d            |||<   $|                    |           :|                     |          }	t          |	|fd|i|}
|                     |
|	|fg          }t	          j        ||          sJ &
+d S )Nr   r   r   r   r   r   r   r   z(a a2) ... (e e2) -> r   )r   r   r   r   r   r   r   r   r   r   r   r   r   c                     g | ]}d S r=    )r@   _s     r   rC   z+test_reduction_symbolic.<locals>.<listcomp>  s    'B'B'B'B'B'Br7   r)   Tabcde)sym_op_backendsr   r   r   r   r*   r+   r   r   r   rw   r   rD   rE   r   rF   r   rx   append)rI   r)   r   r   r1   r:   expected_numpy_resultshapesrD   sym
result_symre   _axes_lengthsr   lengths                  r   test_reduction_symbolicr      s   " 1F 1F$g&<===# /	F /	FII/w???GGXXEELL3388:::E !"&?geY&?&?&A&ABb";'%";";"="=>($!*:*:*:<UGE9<U<U<W<WX*-GE9--6:::DDQ1MMUUWY[\V]^^ --GE9--6:::DDQ1MMUUWY[\V]^^ /-GE9--6:::DDQ1MMUUWY[\V]^^
 (-FWUI-F-FF-S-S-S-]-]^_abde-f-f-n-npros-t-tu+TQZZZ?)J, AK F F<'<+'B'Bek'B'B'BC# F FE!//66C!'W!Z!Z	!Z\!Z!ZJ$00sEl^LLF;v/DEEEEEEFE$4|$4M(+GU[(A(A 1 1f7??!LL...28M$//!LL0000!//66C!'W![![	![]![![J$00sEl^LLF;v/DEEEEEE+F5/	F1F 1Fr7   c                  .   t           D ]} t          d| j                   g t          dD ]}d}t          j        }|dv rd}t          j        }d}d| j        v rd}d	| j        v rd
}t          |          D ]}t          	                    dd|          }t          
                    |          }|dk    rdnt          	                    |dz             }d                    d t          |          D                       }	d                    d ||d          D                       }
|	dz   |
z   }t	          j        ddt	          j        |          z   |                              |          }|dk    r||                                z  }t!          |||          }|                    |          }|dk    r4 t%          ||          t'          t          |                              } |||          sJ t)          | |||i d           d S )NzStress-testing reduction for r   r   r   r   rl   oneflowrk   paddle	   r   r!   sizer   r   r   c              3   :   K   | ]}d t          |          z   V  dS r   Nr   r@   r   s     r   r   z4test_reduction_stress_imperatives.<locals>.<genexpr>A  s,      DDc!ffDDDDDDr7   c              3   :   K   | ]}d t          |          z   V  dS r   r   r   s     r   r   z4test_reduction_stress_imperatives.<locals>.<genexpr>B  s,       M M!s1vv M M M M M Mr7   ->r   rr   r(   r   F)r)   r:   rK   )r   r   r   r   r   r-   r   r   r>   r   r   r   r*   rr   r+   r   r   r   r   r   rR   )rI   r)   ru   coincidemax_dimr   rD   r   skippedleftrightr1   r   ry   rz   s                  r   !test_reduction_stress_imperativesr   /  sF   " u u-w/EFFF3:3{3 	u 	uIE~H,,,!;GG2227111.. u uQ77!oof55(K77!!S\\&ST*=U=UxxDDeFmmDDDDD M M{7887L M M MMM+-IaRWU^^!35AAAII%PP&&MA GyAAA++k22Q;;9ggy99uU7^^?T?TUUUGx11111&w7i^`nstttttu	uu ur7   c                  h   t          j        d                              g d                              d          } | |                                 z  } d }d }d }d }dd	lm}m}m}m	} |j
        ||j
        ||j
        ||j
        |i}	t          D ]}
|
j
        |	vr|	|
j
                 }|
                    |           }t          D ]j\  }}t          d
|
j
        ||           t          | ||          }t          |||          }t          j        ||
                    |                    sJ kd S )Nr   r   float32c                 ,    |                      |          S r=   )	logsumexp)r   tuple_of_axess     r   logsumexp_torchzAtest_reduction_with_callable_imperatives.<locals>.logsumexp_torchS  s    {{=)))r7   c                 6    dd l }|                    | |          S Nr   )
tensorflowreduce_logsumexp)r   r   tfs      r   logsumexp_tfz>test_reduction_with_callable_imperatives.<locals>.logsumexp_tfV  s$    ""1m444r7   c                 @    dd l mc m} |                    | |          S r   )tensorflow.keras.backendkerasrI   r   )r   r   ks      r   logsumexp_keraszAtest_reduction_with_callable_imperatives.<locals>.logsumexp_keras[  s1    ,,,,,,,,,{{1m,,,r7   c                     |                      |          }| |                      |d          z
  }t          j        |          }t          j        ||          }t          j        |          |z   S )NT)keepdimsr   )r&   r   expr'   log)r   r   minusedys       r   logsumexp_numpyzAtest_reduction_with_callable_imperatives.<locals>.logsumexp_numpy`  sa    %%&&md333F1IIF1=)))vayy7""r7   r   )NumpyBackendTensorflowBackendTFKerasBackendTorchBackendz!Test reduction with callable for r(   )r   r*   r+   r   r&   einops._backendsr   r   r   r   r   r   rG   r/   r   r   r   rH   )x_numpyr   r   r   r   r   r   r   r   backend2callbackrI   backend_callback	x_backendr2   r3   output_numpyoutput_backends                    r   (test_reduction_with_callable_imperativesr   O  s   i)**22???CCJJ9UUGw{{}}G* * *5 5 5
- - -
# # # _^^^^^^^^^^^ 	#_(,%#_	 #  !)999+G,BC&&w//	"? 	 	Hh5w7MxYabbb!'8OOOL#IxCSTTTN;  00     		 r7   c                  D   t           D ]t          dj                   g dgg dg dfD ]} t          j        t          j        |                                         |           }t          |          }t                              |                    }t          |          t          |          cxk    rt          |           k    sn J fd|D             }t          ||          D ].\  }}|j        |j        k    sJ t          j        ||          sJ /d S )Nztesting directions forr   )r   r   r   r   r    r"   rk   c                 :    g | ]}                     |          S r   )rH   )r@   axrI   s     r   rC   z/test_enumerating_directions.<locals>.<listcomp>  s'    :::bW%%b)):::r7   )r   r   r   r   r*   rr   r+   r   rG   rs   rx   rD   r   )rD   r   axes1axes2ax1ax2rI   s         @r   test_enumerating_directionsr	    sF   " 
- 
-&(>???1#yyy,,,7 	- 	-E	"'%..))11%88A)!,,E)'*<*<Q*?*?@@Eu::U9999s5zz999999::::E:::Eu-- - -SyCI----{3,,,,,,-	-
- 
-r7   c            	      T   t           D ]t          dj                   dD ] } g dgddgg ddgdz  g}|D ]fdt          |           D             }fd|D             }t	          j        |          }t          |d          }t          |d          }t	          j        ||          sJ t	          j        |                    |                    sJ t          |d	          }t          |d	          }t	          j        |                    |                    sJ d S )
Nztesting shapes for )r   r   r"   r   r  r#   c           	          g | ]?}t          j        ||t          j                  z                                           @S r   )r   r*   rr   r+   )r@   r   rD   s     r   rC   z4test_concatenations_and_stacking.<locals>.<listcomp>  s@    dddq29QBGENN(:;;CCEJJdddr7   c                 :    g | ]}                     |          S r   )rG   )r@   arrayrI   s     r   rC   z4test_concatenations_and_stacking.<locals>.<listcomp>  s'    JJJ7--e44JJJr7   r   zb ... -> ... b)	r   r   r   r   r   rh   r   r-   rH   )	n_arraysr   arrays1arrays2result0ry   rz   rI   rD   s	          @@r    test_concatenations_and_stackingr    ss   " J J#W%;<<<! 	J 	JH1#1v|||aS1W=F J JddddTYZbTcTcdddJJJJ'JJJ*W--#GZ88#GZ88~gw77777~gw/?/?/H/HIIIII#G-=>>#G-=>>~gw/?/?/H/HIIIIIIJ	JJ Jr7   c                     t           D ]p} | dv rt          j        dd                              g d                              d          }i }t
          D ]}|                    |          }t          |d          s(t          |d|           }t          |d	|           }t          |d
| d          }t          |d|           }|	                                 |
                    |j                  }	|	||j        <   t          d|                                           |                                D ]A\  }
}|                                D ]'\  }}t          j        ||          sJ |
|dg            (Brd S )N)anyallr      rq   r   gradza b c -> c ar(   z
c a -> a cza (c1 c2) -> ar   )r)   c1z... -> zcomparing gradients forzprovided different gradients)r   r   r*   r+   r   r   rG   hasattrr   backwardrH   r  r   r   keysitemsr   )r)   r   resultsrI   y0y1y2y3y4r  name1grad1name2grad2s                 r   test_gradients_imperativesr'    s    a a	&&Ia''//			::AA)LL& 	3 	3G##A&&B2v&& Ni@@@BLI>>>B,	aHHHBI;;;BKKMMM##BG,,D.2GG*++'888#MMOO 	a 	aLE5 ' a au{5%00``5%A_2```0`a	a)a ar7   c                     t           D ]} t          d| j                   t          j        dd                              g d          }g d}|D ]n}t          j        ||          }|                     |          }|                     ||          }|                     |          }t          j	        ||          sJ od S NzTiling tests for    r   r   )r   r   r    r   r"   )r   )r   r   r   r    r   )r    r   r   r!   r   )
r   r   r   r   r*   r+   tilerG   rH   r-   )rI   r   r   repeatsrd   	convertedrepeatedre   s           r   test_tiling_imperativesr/    s    " 4 4!7#9:::	)7333;;OOOLL
 
 


 " 	4 	4Gwug..H**511I||Iw77H%%h//F>&(333333	44 4r7   c                  t   t           D ].} t          d| j                   t          j        dd                              g d          }g d}|D ]}t          j        ||          }|                     |j                  }| 	                    |                     ||          ||gg          }t          j
        ||          sJ |                     d gt          |j                  z            }| 	                    |                     ||          ||gg          }t          j
        ||          sJ 0d S r)  )r   r   r   r   r*   r+   r+  rE   rD   rF   r-   rs   )rI   r   r   r,  rd   r   re   s          r   test_tiling_symbolicr1    sK   " 4 4!7#9:::	)7333;;OOOLL
 
 


 " 	4 	4Gwug..H''44C((c7)C)CsEl^TTF>&(33333''U[1A1A(ABBC((c7)C)CsEl^TTF>&(333333	44 4r7   za b c -> c a bza b c -> (c copy a b)r   r    r"   )r   arn   cza b c -> (a copy) b c r   r   za b c -> (c a) (copy1 b copy2))r2  copy1copy2za ...  -> a ... copyr!   z... c -> ... (copy1 c copy2))r5  r6  z...  -> ... z ...  -> copy1 ... copy2 za b c  -> copy1 a copy2 b c () c                     |                     d          \  }}|dz   |z   }t          | |fi |}t          ||fddi|}t          ||fddi|}t          j        | |          sJ t          j        | |          sJ dS )z*Checks repeat pattern by running reductionr   r)   r%   r&   N)splitr   r   r   r-   )	r   repeat_patternr{   r   r   reduce_patternr.  reduced_minreduced_maxs	            r   check_reversionr=    s     &&t,,KD%T\D(Na11511H>LLULeLLK>LLULeLLK>![)))))>![)))))))r7   c                      t          j        d                              g d          } t          | dd          }t          j        | d          |          sJ t
          D ]\  }}t          | |fi | d S )Nr*  r   r    r"   za b c -> copy a b c r   r4  )r   r*   r+   r   r-   repeat_test_casesr=  )r   x1r1   axis_dimensionss       r   test_repeat_numpyrC    s    
	)$$YYY//A	)	2	2	2B>!D'2&&&&&$5 7 7 766o66667 7r7   c                  j   t          j        d                              g d          } t          D ]}t	          d|j                   t          D ]b\  }}t          | |fi |}|                    |           }t          ||fi |}|	                    |          }t          j
        ||          sJ cd S Nr*  r?  zRepeat tests for )r   r*   r+   r   r   r   r@  r   rG   rH   r-   )r   rI   r1   rB  rd   r-  r.  re   s           r   test_repeat_imperativesrF    s    
	)$$YYY//A" 4 4!7#9:::(9 	4 	4$G_a<<O<<H**1--IiDDODDH%%h//F>&(333333	44 4r7   c            	      x   t          j        d                              g d          } t          D ]}t	          d|j                   t          D ]i\  }}t          | |fi |}|                    | j	                  }|
                    t          ||fi ||| gg          }t          j        ||          sJ jd S rE  )r   r*   r+   r   r   r   r@  r   rE   rD   rF   r-   )r   rI   r1   rB  rd   r   re   s          r   test_repeat_symbolicrH    s    
	)$$YYY//A" 4 4!7#9:::(9 	4 	4$G_a<<O<<H''00C((W)P)P)P)PTWYZS[R\]]F>&(333333	44 4r7   c                  |   dd l } ddlm} | j        dk     rt	          j                     t          j        d                              g d          }t          D ]b\  }}t          ||fi |} |j
        |                     |          |fi |}t          j        |                    |dz             |          sJ cd S )Nr   rY   r[   r*  r?  )r\   r]   rZ   r^   r   r_   r   r*   r+   r@  r   r`   r-   ra   )rb   rc   r   r1   rB  rd   re   s          r   test_repeat_array_apirJ     s    &&&&&&	~
	)$$YYY//A$5 @ @ !W88882>>!,,gIIII~bjj!44h??????	@ @r7   za b c d -> c a d bza b c d -> (c 2 d a b)r#   )r2  r3  rA   z1 b c d -> (d copy 1) 3 b c z1 ...  -> 3 ... z"() ... d -> 1 (copy1 d copy2) ... z$1 b c d -> (1 1) (1 b) 2 c 3 d (1 1)c                      t          j        d                              g d          } t          D ]\  }}t	          | |fi | d S )N0   )r   r   r!   r#   )r   r*   r+   test_cases_repeat_anonymousr=  )r   r1   rB  s      r   test_anonymous_axesrN  <  s\    
	-  ((66A$? 7 7 766o66667 7r7   c                     t          j        d                              g d          } t          j        t	          t          |           d          t	          | d                    sJ t          j        t          t          |           dd          t          | dd                    sJ t          j        t          t          |           dd          t          | dd                    sJ d S )	Nr   r   z... -> (...)za ... e -> (...)r%   z...  -> b (...)r    )rn   )r   r*   r+   r-   r   rT   r   r   r   s    r   test_list_inputsrP  B  s    
	#$$,,___==A>$q''>**!^$$     >tAww*E22q$e,,     >tAww)Q///q#q)))      r7   c                     t          d          st          j                     dd l} d| j        j        _        d }|                     |dd          }|                     |dd          }|                     g d          }| 	                     ||           ||          d	
          sJ | 	                     ||           ||          d	
          sJ |                     g d          }| 	                     ||           ||          d	
          sJ | 	                     ||           ||          d	
          sJ d S )Ntorchr   Tc                 l    | j         ^}}}}t          | dd          } t          | dd|dz            } | S )Nz"(a a2) b c ... -> b (c a2) (a ...)r   r   zb ca2 A -> b Ar'   )ca2)rD   r   r   )r   r2  rn   r3  others        r   func1z4test_torch_compile_with_dynamic_shape.<locals>.func1[  sF    '1a%a=!DDD1&1q5999r7   F)dynamic	fullgraph)r!   r"   r#   r    r   gh㈵>)atol)r#   r    r!   r   r    )
r
   r   r_   rR  _dynamoconfigverbosecompilerandnr   )rR  rV  func1_compiled_staticfunc1_compiled_dynamicr   s        r   %test_torch_compile_with_dynamic_shapera  S  sr   W%% LLL $(EM    "MM%$MOO"]]5$$]OO&&A>>//22EE!HH4>HHHHH>>0033UU1XXD>IIIII))A>>//22EE!HH4>HHHHH>>0033UU1XXD>IIIIIIIr7   c                 T     t           fdt          d          D                       S )Nc              3   (   K   | ]}|z	  d z  V  dS )r   Nr   )r@   r   r   s     r   r   zbit_count.<locals>.<genexpr>q  s+      //Q!|//////r7      )r'   r   r   s   `r   	bit_countre  p  s,    ////U2YY//////r7   c                     t          j        d t          d          D                                           dgdz            } t          D ]=}t          d|j                   t          d          D ]F}t          j        | |d          }t          j        | |d          }t          j	        ||          rJ t          d          }t          |          }t          |          }d	||<   d
                    |          dz   d
                    |          z   }t          |                    |           |d          }	t          |                    |           |d          }
t          j	        ||                    |	                    sJ t          j	        ||                    |
                    sJ Ht          j        | dd          }t          j        | dd          }d}t          |                    |           |d          }	t          |                    |           |d          }
t          j	        ||                    |	                    sJ t          j	        ||                    |
                    sJ ?dS )z5Checks that any/all reduction works in all frameworksc                 :    g | ]}t          |          d z  dk    S )r   r   )re  )r@   r   s     r   rC   z7test_reduction_imperatives_booleans.<locals>.<listcomp>v  s(    DDD1	!q(Q.DDDr7   @   r   r#   zReduction any/all tests for T)r   r   ro   1r   r   r  r(   r  )r   r   za b ... -> 1 1 ...N)r   rh   r   r+   r   r   r   r  r  r-   rT   r   r   rG   rH   )x_nprI   r   expected_result_anyexpected_result_allaxesaxes_inaxes_outr1   res_anyres_alls              r   #test_reduction_imperatives_booleansrr  t  s{   :DDdDDDEEMMqcTUgVVD" N N,g.DEEE!HH 	R 	RD"$&D4"H"H"H"$&D4"H"H"H~&9;NOOOOO>>D4jjGDzzH HTNxx((F2chhx6H6HIGW//55w%PPPGW//55w%PPPG>"5w7G7G7P7PQQQQQ>"5w7G7G7P7PQQQQQQ !fTFFF fTFFF&++D117eLLL++D117eLLL~173C3CG3L3LMMMMM~173C3CG3L3LMMMMMM7N Nr7   )r   F)6rU   r\   r   r   r]   r   einops.einopsr   r   r   r   einops.testsr   r   r	   r
   r   r   r?   default_rngr>   r,   r.   r/   r   r6   rR   rW   rf   ri   r~   r   r   r   r   r   r	  r  r'  r/  r1  rw   r@  r=  rC  rF  rH  rJ  rM  rN  rP  ra  re  rr  r   r7   r   <module>rv     s                  J J J J J J J J J J J J 7 7 7 7 7 7 A A A A A A A A''uEEE''eDDDi	 	 	 ! ! ! ! ! ! ' ' '5 5 5$. . . .6  "@ @ @P P P #* #* #*L7 7 78!T !T !TH2F 2F 2Fju u u@0 0 0f- - -J J J&a a a64 4 4"4 4 4, ttvvddQ!q999:tt|||,%ttaq'B'B'BCTTq\\\*#TT%;%;%;<TTVV $$Qa"8"8"89&1A(>(>(>? * * *7 7 7
4 
4 
44 4 4@ @ @& 4466"tta12223#TTq\\\2 )44aq+A+A+AB+TTVV4 7 7 7  "J J J:0 0 0N N N N Nr7   