
    3ji                     d   S SK r S SKrS SKrS SKJr  S SKJrJrJ	r	J
r
  S SKJr  S SKJrJr  \" SSS9r\" SSS9r\R$                  R'                  5       r/ S	Qr/ S
Qr/ SQrS rS rSAS jrS rS rS rS rS rS r S r!S r"S r#S r$S r%S r&S r'S r(S\)" 5       4S\)" SSS S!S"94S#\)" S$S%94S&\)" SS$SS'94S(\)" S)S%94S*\)" S$SS+94S,\)" 5       4S-\)" SS S+94S.\)" SS$S+94/	r*S/ r+S0 r,S1 r-S2 r.S3 r/S4\)" 5       4S5\)" S$S)S6S794S8\)" S S%94S9\)" 5       4S:\)" SS S+94S;\)" 5       4/r0S< r1S= r2S> r3S? r4S@ r5g)B    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                  d   [         R                  " / SQ5      n [        U S5        [        R                  " [
        5         [        U S5        S S S 5        [        U S5        [        R                  " [
        5         [        U S5        S S S 5        g ! , (       d  f       NJ= f! , (       d  f       g = f)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    O/home/wildlama/miniconda3/lib/python3.13/site-packages/einops/tests/test_ops.py"test_collapsed_ellipsis_errors_outr   ,   st    
!Aa./	{	#!45 
$ a!	{	#!%& 
$	#	 
$	# 
$	#s   B:B!
B!
B/c                     [         R                  " S5      R                  / SQ5      n [         H/  n[         R                  " U [        X5      5      (       a  M*   U5       e   [         H5  u  p#[         R                  " [        X5      [        X5      5      (       a  M5   e   S H@  n[         H3  u  p#[         R                  " [        XUS9[        XUS95      (       a  M3   e   MB     / [        Qn[         H  nUR                  U5        M     g )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   s    
		#$,,_=A$~~a1!677@@7 % <~~i4i6LMMMM < +	"?H>>&	"JFSTjsLtuuuu #@ +
 2016%%m4 7    c                   ^^^ UUU4S jnU" U5      n[         R                  nSn	U(       ab  UR                   V
s/ s H  n
[        R	                  5       U	:  a  U
OSPM!     nn
U R                  US9nU" U5      nU R                  XU4/5      nO(U" U R                  U5      5      nU R                  U5      nU" X~5        gs  sn
f )z
Helper to test result of operation (rearrange or transpose) against numpy
if reduction == 'rearrange', rearrange op is tested, otherwise reduce
c                 F   > TS:X  a  [        U T40 TD6$ [        U TT40 TD6$ )Nr   )r   r   )r   axes_lengthsr1   r)   s    r   	operation)check_op_against_numpy.<locals>.operationO   s1    #Q8<88!Wi@<@@r7   g      ?N)shape)	r   r-   r=   rngrandomcreate_symboleval_symbol
from_numpyto_numpy)backendnumpy_inputr1   r:   r)   is_symbolicr;   numpy_resultcheck_equalp_none_dimensiondsymbol_shapesymbolresult_symbolbackend_results     ```          r   check_op_against_numpyrO   I   s    A [)L..KQ\QbQbcQbASZZ\-==4GQbc&&\&:!&) ,,]k=R<ST"7#5#5k#BC )).9- ds   &C c                  b   [         R                  " S5      R                  / SQ5      n S H  n[        USS9 Hq  n[        [        [        R                  " [        6 5      -    H  n[        X U0 SUS9  M     S H-  n[        R                  " [        6  H  n[        X U0 XAS9  M     M/     Ms     M     g	)
z'Checking various patterns against numpyr   r   )TFFr   r   )r:   r)   rF   r$   N)r   r*   r+   r	   r,   list	itertoolschainr.   rO   r/   )r   rF   rD   r1   r)   s        r   test_ellipsis_ops_imperativerT   d   s    
		#$,,_=A$,k%PG,tIOOEb4c/dd&bK]h e
 3	(0MNG*G"	  O 3 Q %r7   c                     SS K n SSKJn  U R                  S:  a  [        R
                  " 5         [        R                  " S5      R                  / SQ5      n[        [        [        R                  " [        6 5      -    H_  n[        X#5      nUR                  U R                  U5      U5      n[        R                   " UR#                  US-   5      U5      (       a  M_   e   g )Nr   	array_api2.0.0r   r   )numpyeinopsrW   __version__r   skipr   r*   r+   r,   rQ   rR   rS   r.   r   from_dlpackr-   asnumpy)xpAAr   r1   expectedresults         r   test_rearrange_array_apirc   u   s    &	~~
		#$,,_=A$tIOO=Z,['\\Q(bnnQ/9~~bjj!4h???? ]r7   c            
         SS K n SSKJn  U R                  S:  a  [        R
                  " 5         [        R                  " S5      R                  / SQ5      n[        R                  " [        6  Hy  nS Hp  n[        X#US9nUR                  U R                  U5      X4S9n[        R                  " UR                  [        R                   " US-   5      5      U5      (       a  Mp   e   M{     g )Nr   rV   rX   r   r   r$   r(   )rY   rZ   rW   r[   r   r\   r   r*   r+   rR   rS   r/   r   r]   r-   r^   asarray)r_   r`   r   r1   r)   ra   rb   s          r   test_reduce_array_apirf      s    &	~~
		#$,,_=A??$AB.IaI>HYYr~~a0'YOF>>"**RZZ
-C"DhOOOO / Cr7   c                     / SQn [         R                  " [         R                  " U 5      5      R                  U 5      nS HO  n[	        X5      n[        [         R                  " X5      5      S:X  d   eUR                  UR                  :X  a  MO   e   [	        US5      n[         R                  " UR                  5       UR                  5       5      (       d   e[	        US5      n[         R                  " X5      (       d   e[	        US5      n[	        US5      n[         R                  " XE5      (       d   e[	        [	        US5      S	S
SS9n[         R                  " X5      (       d   e[        [        SU 5      5      n[	        US40 UD6n[	        US	40 UD6n[         R                  " X5      (       d   e[         R                  " S5      R                  / SQ5      n[	        US5      nUS   US   :X  d   eUS   US   :X  d   eg )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 a11rj   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"   )brJ   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)	r=   r   r1   rb   result1result2sizestempx2s	            r    test_rearrange_consistency_numpyr{      s   E
		"''%.!))%0A 1&2<<*+q000||qww&&& q:;F>>!))+v~~'78888qLMF>>!$$$$78G78G>>'++++y$DEGgklpqrF>>!$$$$Xu%&EQ8BEBDt=GGF>>!$$$$	9		%	%i	0Br+,Fg;&/)))g;&/)))r7   c                     [        SS5       H  n [        R                  " SU -  5      R                  S/U -  5      n[        R                  U 5      nSR                  S [        U 5       5       5      nSR                  S U 5       5      nUS-   U-   n[        X5      n[        R                  SSSU /5       H%  nU[        U5         U[        Xr   5         :X  a  M%   e   M     [        SS5       GH  n [        R                  " SU -  5      R                  S/U -  5      n[        R                  U 5      nSR                  S	 [        U 5      S S S
2    5       5      nSR                  S US S S
2    5       5      nUS-   U-   n[        X5      nUR                  UR                  :X  d   e[        R                  " U5      n[        U5       H  u  pXU	-	  S-  U
-  -  nM     [        R                  " Xh5      (       a  GM   e   g )Nr   
   r    c              3   >   #    U  H  nS [        U5      -   v   M     g7fiNstr.0axiss     r   	<genexpr>4test_rearrange_permutations_numpy.<locals>.<genexpr>   s     "M}t3T?}   c              3   >   #    U  H  nS [        U5      -   v   M     g7fr   r   r   s     r   r   r      s     #LC#d)Or    -> r   c              3   >   #    U  H  nS [        U5      -   v   M     g7fr   r   r   s     r   r   r      s     "S?Rt3T??Rr   c              3   >   #    U  H  nS [        U5      -   v   M     g7fr   r   r   s     r   r   r      s     #R@QC#d)O@Qr   )ranger   r*   r+   r>   permutationjoinr   integerstupler=   
zeros_like	enumerater-   )n_axesinputr   left_expressionright_expression
expressionrb   pickexpected_resultoriginal_axisresult_axiss              r   !test_rearrange_permutations_numpyr      s   2,		!V)$,,aS6\:oof-(("MuV}"MM88#L#LL$v-0@@
5-LLAF|4Dt%d6G0H)IIII 5  2,		!V)$,,aS6\:oof-(("SuV}TrT?R"SS88#RDbD@Q#RR$v-0@@
5-||u{{***--.*3K*@&M-!71 <LLO +A ~~f6666 r7   c                     [          GH  n [        SU R                  5        [         GH  n[        R
                  " SSS9R                  / SQ5      nUS;   a!  X"R                  S5      R                  5       -  nS0 [        X!5      " 5       /S	0 [        X!5      " 5       /S
[        SSS9[        X!5      " 5       /S0 [        X!5      " SS9R                  SSS5      R                  SS/5      /S0 [        X!5      " SS9R                  SSS5      R                  SS/5      /S0 [        X!5      " SS9R                  SSS5      R                  SS/5      /S0 [        X!5      " SS9R                  SSS5      R                  S/5      /S[        SS9U//nU Hh  u  pEn[        U R                  UR                  5       5      U4SU0UD6nU R                  U5      n[        R                   " Xv5      (       a  M`   SU 35       e   GM     GM     g )NReduction tests for r   int64rr   r   meanro   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   getattrrt   	transposer   rB   copyrC   allclose)rD   r)   r   
test_casesr1   r:   r   rb   s           r   test_reduction_imperativesr      s   "?$g&<&<=#III/w?GGXE,,Y 7 < < >> "ge&?&ABb'%";"=>*DA!,<ge>W>YZ*E-6:DDQ1MUUWY[\V]^ -E-6:DDQ1MUUWY[\V]^ /E-6:DDQ1MUUWY[\V]^
 (WU-FF-S-]-]^_abde-f-n-npros-tu+TQZ?)J, ;E6 2 25::< @'oU^obno ))&1{{6;;Sz'=SS; ;E7 $ #r7   c                     [          GH  n [        SU R                  5        [         GH  n[        R
                  " SSS9R                  / SQ5      nX"R                  S5      R                  5       -  nS0 [        X!5      " 5       /S0 [        X!5      " 5       /S	[        S
S
S9[        X!5      " 5       /S0 [        X!5      " SS9R                  SS
S5      R                  SS/5      /S0 [        X!5      " SS9R                  SS
S5      R                  SS/5      /S0 [        X!5      " SS9R                  SS
S5      R                  SS/5      /S0 [        X!5      " SS9R                  SS
S5      R                  S/5      /S[        S
S9U//nU GH,  u  pEnUR                  UR                   Vs/ s H  nS PM     sn/nU HS  n	U R                  U	5      n
[        X4SU0UD6nU R                  XU4/5      n[        R                   " X5      (       a  MS   e    / n	0 UEn[#        SUR                  5       H2  u  pX;   a  U	R%                  S 5        XU'   M!  U	R%                  U5        M4     U R                  U	5      n
[        X4SU0UD6nU R                  XU4/5      n[        R                   " X5      (       a  GM-   e   GM     GM     g s  snf )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   r)   abcde)sym_op_backendsr   r   r   r   r*   r+   r   r   r   rt   r   r=   r@   r   rA   r   ru   append)rD   r)   r   r   r1   r:   expected_numpy_result_shapesr=   sym
result_symrb   _axes_lengthsr   lengths                   r   test_reduction_symbolicr      s   "?$g&<&<=#III/w?GGXELL388::E !"ge&?&ABb'%";"=>($!*:GE<U<WX*E-6:DDQ1MUUWY[\V]^ -E-6:DDQ1MUUWY[\V]^ /E-6:DDQ1MUUWY[\V]^
 (WU-FF-S-]-]^_abde-f-n-npros-tu+TQZ?)J, AK<'<++ekk'Bkk'BC#E!//6C!'!Z	!Z\!ZJ$00El^LF;;vEEEE	 $ E$4|$4M(+GU[[(A?!LL.28$/!LL0 )B "//6C!'![	![]![J$00El^LF;;vEEEE+ AK5 $ #: (Cs   *Kc                     [          GH  n [        SU R                  5        / [        QSP GH  nSn[        R
                  nUS;   a  Sn[        R                  nSnSU R                  ;   a  SnS	U R                  ;   a  S
n[        U5       GHB  n[        R                  SSUS9n[        R                  U5      nUS:X  a  SO[        R                  US-   5      nSR                  S [        U5       5       5      n	SR                  S XxS   5       5      n
U	S-   U
-   n[        R                  " SS[        R                  " U5      -   US9R                  U5      nUS:X  a  XR                  5       -  n[!        XUS9nUR#                  U5      nUS:  a!  [%        X5      " ['        [        U5      5      S9nU" X5      (       d   e[)        XX0 SS9  GME     GM     GM     g )NzStress-testing reduction for r   r   r   r   ri   oneflowrh   paddle	   r   r!   sizer   r   r~   c              3   >   #    U  H  nS [        U5      -   v   M     g7fr   Nr   r   r   s     r   r   4test_reduction_stress_imperatives.<locals>.<genexpr>A  s     Dmc!fmr   c              3   >   #    U  H  nS [        U5      -   v   M     g7fr   r   r   s     r   r   r   B  s      M7L!s1v7Lr   ->r   ro   r(   r   F)r)   r:   rF   )r   r   r   r   r   r-   r   r   r>   r   r   r   r*   ro   r+   r   r   r   r   r   rO   )rD   r)   rr   coincidemax_dimr   r=   r   skippedleftrightr1   r   rv   rw   s                  r   !test_reduction_stress_imperativesr   /  s   "?-w/E/EF3:3{3IE~~H,,!;;GG2227111.Q7!oof5(K7!S\\&ST*=UxxDeFmDD M{87L MM+-IIaRWWU^!35AII%P&MA yA++k2Q;%g9uU7^?TUG1111&w7^`nst ) 4 #r7   c                  r   [         R                  " S5      R                  / SQ5      R                  S5      n X R	                  5       -  n S nS nS nS nSS	KJnJnJnJ	n  UR                  UUR                  UUR                  UUR                  U0n	[         H  n
U
R                  U	;  a  M  XR                     nU
R                  U 5      n[         H]  u  p[        S
U
R                  X5        [        XUS9n[        XUS9n[         R                   " UU
R#                  U5      5      (       a  M]   e   M     g )Nr   r   float32c                 $    U R                  U5      $ )N)	logsumexp)r   tuple_of_axess     r   logsumexp_torchAtest_reduction_with_callable_imperatives.<locals>.logsumexp_torchS  s    {{=))r7   c                 ,    SS K nUR                  X5      $ Nr   )
tensorflowreduce_logsumexp)r   r   tfs      r   logsumexp_tf>test_reduction_with_callable_imperatives.<locals>.logsumexp_tfV  s    ""144r7   c                 6    SS K Js  Jn  UR                  X5      $ r   )tensorflow.keras.backendkerasrD   r   )r   r   ks      r   logsumexp_kerasAtest_reduction_with_callable_imperatives.<locals>.logsumexp_keras[  s    ,,{{1,,r7   c                     U R                  U5      nX R                  USS9-
  n[        R                  " U5      n[        R                  " X1S9n[        R                  " U5      U-   $ )NT)keepdimsr   )r&   r   expr'   log)r   r   minusedys       r   logsumexp_numpyAtest_reduction_with_callable_imperatives.<locals>.logsumexp_numpy`  sS    %%&md33FF1IFF1)vvay7""r7   r   )NumpyBackendTensorflowBackendTFKerasBackendTorchBackendz!Test reduction with callable for r(   )r   r*   r+   r   r&   einops._backendsr   r   r   r   r   r   rB   r/   r   r   r   rC   )x_numpyr   r   r   r   r   r   r   r   backend2callbackrD   backend_callback	x_backendr2   r3   output_numpyoutput_backends                    r   (test_reduction_with_callable_imperativesr  O  s+   ii)*22?CJJ9UG{{}G*5
-
# _^ 	##_((,%%##_	 #!!)99+,B,BC&&w/	"?H5w7M7Mxb!'OL#ICSTN;;  0   	 #@ #r7   c                  l   [          GH$  n [        SU R                  5        / S// SQ/ SQ4 H  n[        R                  " [        R
                  " U5      5      R                  U5      n[        U5      n[        U R                  U5      5      n[        U5      [        U5      s=:X  a  [        U5      :X  d   e   eU Vs/ s H  oPR                  U5      PM     nn[        X45       H>  u  pgUR                  UR                  :X  d   e[        R                  " Xg5      (       a  M>   e   M     GM'     g s  snf )Nztesting directions forr   )r   r   r   r   r    r"   rh   )r   r   r   r   r*   ro   r+   r   rB   rp   rC   ru   r=   r   )rD   r=   r   axes1axes2axax1ax2s           r   test_enumerating_directionsr    s    "?&(>(>?1#y,7E		"''%.)11%8A)!,E)'*<*<Q*?@Eu:U9s5z9999949:Eb%%b)EE:-yyCII---{{3,,,, . 8 # ;s   >D1c                     [          GHp  n [        SU R                  5        S GHO  n/ S/SS// SQS/S-  /nU GH4  n[        U5       Vs/ s H?  n[        R
                  " XD[        R                  " U5      -   5      R                  U5      PMA     nnU Vs/ s H  o`R                  U5      PM     nn[        R                  " U5      n[        US5      n	[        US5      n
[        R                  " X5      (       d   e[        R                  " XR                  U
5      5      (       d   e[        US5      n	[        US5      n
[        R                  " XR                  U
5      5      (       a  GM5   e   GMR     GMs     g s  snf s  snf )Nztesting shapes for )r   r   r"   r   r  r#   r   zb ... -> ... b)r   r   r   r   r   r*   ro   r+   rB   re   r   r-   rC   )rD   n_arraysr   r=   r   arrays1arrayarrays2result0rv   rw   s              r    test_concatenations_and_stackingr    sG   "?#W%;%;<!H1#1v|aS1W=FTYZbTcdTcq299QBGGEN(:;CCEJTcdBIJ'--e4'J**W-#GZ8#GZ8~~g7777~~g/?/?/HIIII#G-=>#G-=>~~g/?/?/HIIII   " #
 eJs   
AE=
F
c            	         [          GHL  n U S;   a  M  [        R                  " SS5      R                  / SQ5      R	                  S5      n0 n[
         H  nUR                  U5      n[        US5      (       d  M'  [        USU S9n[        US	U S9n[        US
U SS9n[        USU S9nUR                  5         UR                  UR                  5      n	XUR                  '   M     [        SUR                  5       5        UR                  5        HB  u  pUR                  5        H)  u  p[        R                   " X5      (       a  M"   XS/5       e   MD     GMO     g )N)anyallr      rn   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   rB   hasattrr   backwardrC   r  r   r   keysitemsr   )r)   r   resultsrD   y0y1y2y3y4r  name1grad1name2grad2s                 r   test_gradients_imperativesr'    s+   Z	&IIa'//	:AA)L&G##A&B2v&&Ni@BLI>B,	aHBI;BKKM##BGG,D.2G**+ ' 	'8#MMOLE '{{500`5A_2``0 !0 ,)  r7   c                  |   [          H  n [        SU R                  5        [        R                  " SSS9R                  / SQ5      n/ SQnU Hi  n[        R                  " X5      nU R                  U5      nU R                  XS5      nU R                  U5      n[        R                  " Xt5      (       a  Mi   e   M     g 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+   tilerB   rC   r-   )rD   r   r   repeatsra   	convertedrepeatedrb   s           r   test_tiling_imperativesr/    s    "!7#9#9:		)73;;OL


 "Gwwu.H**51I||I7H%%h/F>>&3333 " #r7   c                  f   [          GH&  n [        SU R                  5        [        R                  " SSS9R                  / SQ5      n/ SQnU H  n[        R                  " X5      nU R                  UR                  5      nU R                  U R                  XS5      XQ//5      n[        R                  " Xd5      (       d   eU R                  S /[        UR                  5      -  5      nU R                  U R                  XS5      XQ//5      n[        R                  " Xd5      (       a  M   e   GM)     g r)  )r   r   r   r   r*   r+   r+  r@   r=   rA   r-   rp   )rD   r   r   r,  ra   r   rb   s          r   test_tiling_symbolicr1    s    "?!7#9#9:		)73;;OL


 "Gwwu.H''4C((c)Csl^TF>>&3333''U[[1A(ABC((c)Csl^TF>>&3333 " #r7   za b c -> c a bza b c -> (c copy a b)r   r    r"   )r   ark   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                     UR                  S5      u  p4US-   U-   n[        X40 UD6n[        Xe4SS0UD6n[        Xe4SS0UD6n[        R                  " X5      (       d   e[        R                  " X5      (       d   eg)z*Checks repeat pattern by running reductionr   r)   r%   r&   N)splitr   r   r   r-   )	r   repeat_patternrx   r   r   reduce_patternr.  reduced_minreduced_maxs	            r   check_reversionr=    s     &&t,KDT\D(Na151HLULeLKLULeLK>>!))))>>!))))r7   c                      [         R                  " S5      R                  / SQ5      n [        U SSS9n[         R                  " U S    U5      (       d   e[
         H  u  p#[        X40 UD6  M     g )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_    
		)$$Y/A	)	2B>>!D'2&&&&$5 6o6 %6r7   c                  d   [         R                  " S5      R                  / SQ5      n [         H  n[	        SUR
                  5        [         H\  u  p#[        X40 UD6nUR                  U 5      n[        XR40 UD6nUR                  U5      n[         R                  " Xt5      (       a  M\   e   M     g Nr*  r?  zRepeat tests for )r   r*   r+   r   r   r   r@  r   rB   rC   r-   )r   rD   r1   rB  ra   r-  r.  rb   s           r   test_repeat_imperativesrF    s    
		)$$Y/A"!7#9#9:(9$Ga<O<H**1-IiDODH%%h/F>>&3333 ): #r7   c            	      z   [         R                  " S5      R                  / SQ5      n [         H  n[	        SUR
                  5        [         Hg  u  p#[        X40 UD6nUR                  U R                  5      nUR                  [        XR40 UD6XP//5      n[         R                  " Xd5      (       a  Mg   e   M     g rE  )r   r*   r+   r   r   r   r@  r   r@   r=   rA   r-   )r   rD   r1   rB  ra   r   rb   s          r   test_repeat_symbolicrH    s    
		)$$Y/A"!7#9#9:(9$Ga<O<H''0C(()P)PTWS[R\]F>>&3333 ): #r7   c                     SS K n SSKJn  U R                  S:  a  [        R
                  " 5         [        R                  " S5      R                  / SQ5      n[         Hd  u  p4[        X#40 UD6nUR                  " U R                  U5      U40 UD6n[        R                  " UR                  US-   5      U5      (       a  Md   e   g )Nr   rV   rX   r*  r?  )rY   rZ   rW   r[   r   r\   r   r*   r+   r@  r   r]   r-   r^   )r_   r`   r   r1   rB  ra   rb   s          r   test_repeat_array_apirJ     s    &	~~
		)$$Y/A$5 !882>>!,gII~~bjj!4h????	 %6r7   za b c d -> c a d bza b c d -> (c 2 d a b)r#   )r2  r3  rJ   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                      [         R                  " S5      R                  / SQ5      n [         H  u  p[	        X40 UD6  M     g )N0   )r   r   r!   r#   )r   r*   r+   test_cases_repeat_anonymousr=  )r   r1   rB  s      r   test_anonymous_axesrN  <  s6    
		- ((6A$? 6o6 %@r7   c            	         [         R                  " S5      R                  / SQ5      n [         R                  " [	        [        U 5      S5      [	        U S5      5      (       d   e[         R                  " [        [        U 5      SS5      [        U SS5      5      (       d   e[         R                  " [        [        U 5      SSS9[        U SSS95      (       d   eg )	Nr   r   z... -> (...)za ... e -> (...)r%   z...  -> b (...)r    )rk   )r   r*   r+   r-   r   rQ   r   r   r   s    r   test_list_inputsrP  B  s    
		#$,,_=A>>$q'>*!^$    >>tAw*E2q$e,    >>tAw)Q/q#q)   r7   c                  :   [        S5      (       d  [        R                  " 5         SS Kn SU R                  R
                  l        S nU R                  USSS9nU R                  USSS9nU R                  / SQS9nU R                  U" U5      U" U5      S	S
9(       d   eU R                  U" U5      U" U5      S	S
9(       d   eU R                  / SQS9nU R                  U" U5      U" U5      S	S
9(       d   eU R                  U" U5      U" U5      S	S
9(       d   eg )Ntorchr   Tc                 V    U R                   tpp4[        U SSS9n [        U SSUS-  S9n U $ )Nz"(a a2) b c ... -> b (c a2) (a ...)r   r   zb ca2 A -> b Ar'   )ca2)r=   r   r   )r   r2  rk   r3  others        r   func14test_torch_compile_with_dynamic_shape.<locals>.func1[  s8    ''aa=!D1&1q5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_shaperb  S  s   W%% $(EMM  "MM%$MO"]]5$$]O&A>>/2E!H4>HHH>>03U1XD>III)A>>/2E!H4>HHH>>03U1XD>IIIr7   c                 @   ^  [        U 4S j[        S5       5       5      $ )Nc              3   4   >#    U  H  nTU-	  S -  v   M     g7f)r   N )r   r   r   s     r   r   bit_count.<locals>.<genexpr>q  s     /YQ!|Ys      )r'   r   r   s   `r   	bit_countrh  p  s    /U2Y///r7   c                     [         R                  " [        S5       V s/ s H  n [        U 5      S-  S:H  PM     sn 5      R	                  S/S-  5      n[
         GH  n[        SUR                  5        [        S5       GH"  n[         R                  " XSS9n[         R                  " XSS9n[         R                  " XE5      (       a   e[        S5      n[        U5      n[        U5      nS	X'   S
R                  U5      S-   S
R                  U5      -   n	[        UR                  U5      U	SS9n
[        UR                  U5      U	SS9n[         R                  " XBR                  U
5      5      (       d   e[         R                  " XRR                  U5      5      (       a  GM#   e   [         R                  " USSS9n[         R                  " USSS9nSn	[        UR                  U5      U	SS9n
[        UR                  U5      U	SS9n[         R                  " XBR                  U
5      5      (       d   e[         R                  " XRR                  U5      5      (       a  GM   e   gs  sn f )z5Checks that any/all reduction works in all frameworks@   r   r   r#   zReduction any/all tests for T)r   r   rl   1r~   r   r  r(   r  )r   r   za b ... -> 1 1 ...N)r   re   r   rh  r+   r   r   r   r  r  r-   rQ   r   r   rB   rC   )r   x_nprD   r   expected_result_anyexpected_result_allaxesaxes_inaxes_outr1   res_anyres_alls               r   #test_reduction_imperatives_booleansrt  t  s   ::dD1	!q(Q.DEMMqcTUgVD"?,g.D.DE!HD"$&&4"H"$&&4"H~~&9OOOO>D4jGDzH HNxx(F2chhx6HIGW//5w%PGW//5w%PG>>"57G7G7PQQQQ>>"57G7G7PQQQQ $ !ffTF ffTF&++D17eL++D17eL~~13C3CG3LMMMM~~13C3CG3LMMMM7 # Es   I%)r   F)6rR   rY   r   r   rZ   r   einops.einopsr   r   r   r   einops.testsr   r   r	   r
   r   r   r?   default_rngr>   r,   r.   r/   r   r6   rO   rT   rc   rf   r{   r   r   r   r   r  r  r  r'  r/  r1  rt   r@  r=  rC  rF  rH  rJ  rM  rN  rP  rb  rh  rt  re  r7   r   <module>rx     s       J J 7 A'uE'eDii	 ! ! '5$.6"@P #*L78!TH2Fju@0f-J&a64"4, tvdQ!q9:t|,%taq'BCTq\*#T%;<TV $Qa"89&1A(>? *7
44@& 46"ta123#Tq\2 )4aq+AB+TV4 7"J:0Nr7   