
    !Shvi                        d dl Z 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mZmZ  edd          Z edd          Zg dZg d	Zg d
Zd Zd ZdAd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'd/ Z(d0 Z)d1 Z*d2 Z+d3 Z,d4 e&            fd5 e&d$d)d67          fd8 e&d %          fd9 e&            fd: e&dd +          fd; e&            fgZ-d< Z.d= Z/d> Z0d? Z1d@ Z2dS )B    N)EinopsError)	rearrangereducerepeat_enumerate_directions)collect_test_backendsis_backend_testedFLOAT_REDUCTIONSF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(...) -> (...))numpyzerosr   pytestraisesr   xs    [/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/einops/tests/test_ops.py"test_collapsed_ellipsis_errors_outr   *   s3   OOO$$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   5   sQ   &''//@@A$ D D Ia$9$9::CCGCC:C; Q Q( 1h!7!71h9O9OPPPPPP* y y	"? 	y 	yHh$VAx9%M%M%MvVWYamvOwOwOwxxxxxx	y 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>.operationM   s@    ##Q88<888!Wi@@<@@@r7   g      ?c                 \    g | ](}t           j                                        k    r|nd )S N)r   random).0dp_none_dimensions     r   
<listcomp>z*check_op_against_numpy.<locals>.<listcomp>W   s7    lllUVU\00226FFFDlllr7   )shapeN)r   r-   rC   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_resultrA   s     ```        @r   check_op_against_numpyrQ   G   s    A A A A A A A 9[))L#K :llllZeZklll&&\&::!	&)) ,,]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)   rJ   r$   N)r   r*   r+   r   r,   list	itertoolschainr.   rQ   r/   )r   rJ   rH   r1   r)   s        r   test_ellipsis_ops_imperativerV   b   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   )r   einopsrY   __version__r   skipr*   r+   r,   rS   rT   rU   r.   r   from_dlpackr-   asnumpy)xpAAr   r1   expectedresults         r   test_rearrange_array_apird   s   s    &&&&&&	~&''//@@A$tIO=Z,['\'\\ C CQ((bnnQ//99 FQJ!7!7BBBBBBC C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   rX   rZ   r   r   r$   r(   )r   r[   rY   r\   r   r]   r*   r+   rT   rU   r/   r   r^   r-   r_   npasarray)r`   ra   r   r1   r)   rb   rc   s          r   test_reduce_array_apirh      s   &&&&&&	~&''//@@A?$AB S S. 	S 	SIaI>>>HYYr~~a00'YYOOF$RZZ
6A:0F0F%G%GRRRRRR	SS S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 a11rl   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"   )br@   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)	rC   r   r1   rc   result1result2sizestempx2s	            r    test_rearrange_consistency_numpyr}      s6   EUZ&&''//66A 	' 	' 1g&&5?1f--..!3333|qw&&&&&q:;;FQYY[[&..*:*:;;;;;qLMMFQ'''''788G788GWg.....y$DEEGgklpqrrrFQ'''''Xu%%&&EQ8BBEBBDt=GGGGFQ'''''	i	 	 	(	(	3	3Br+,,Fg;&/))))g;&/))))))r7   c                     t          dd          D ]} t          j        d| z                                dg| z            }t          j                            |           }d                    d t          |           D                       }d                    d |D                       }|dz   |z   }t          ||          }t          j                            ddd| g          D ]6}|t          |                   |t          ||                            k    sJ 7t          dd          D ]%} t          j        d| z                                dg| z            }t          j                            |           }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   randinttuplerC   
zeros_like	enumerater-   )n_axesinputr   left_expressionright_expression
expressionrc   pickexpected_resultoriginal_axisresult_axiss              r   !test_rearrange_permutations_numpyr      sr   2,, 	J 	JQY''//f==l..v66(("M"MuV}}"M"M"MMM88#L#L#L#L#LLL$v-0@@
5*--L((AF|<< 	J 	JDt%d;6G0H0H)IIIIII	J 2,, : :QY''//f==l..v66(("S"SuV}}TTrT?R"S"S"SSS88#R#RDDbD@Q#R#R#RRR$v-0@@
5*--|u{*****511*3K*@*@ 	M 	M&M;-!71 <LLOO 999999: :r7   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rt   r   meanrq   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   getattrrv   	transposer   rF   copyrG   allclose)rH   r)   r   
test_casesr1   r:   r   rc   s           r   test_reduction_imperativesr      s   "  W  W$g&<===# 	W 	WIL!2'BBBJJ???[[E,,,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 W W6 2 25::<< @ @'ooU^obnoo ))&11~fo>>VV@VW@V@VVV>VW7	W W  W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   rB   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   rv   r   rC   rD   r   rE   r   rw   append)rH   r)   r   r   r1   r:   expected_numpy_resultshapesrC   sym
result_symrc   _axes_lengthsr   lengths                  r   test_reduction_symbolicr      s   " 1I 1I$g&<===# /	I /	IIL!2'BBBJJ???[[E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 I I<'<+'B'Bek'B'B'BC# I IE!//66C!'W!Z!Z	!Z\!Z!ZJ$00sEl^LLF >&2GHHHHHHI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 >&2GHHHHHH+I5/	I1I 1Ir7   c                  J   t           D ]} t          d| j                   t          dz   D ]}d}t          j        }|dv rd}t          j        }d}d| j        v rd}d	| j        v rd
}t          |          D ]}t          j        	                    dd|          }t          j        
                    |          }|dk    rdn!t          j        	                    |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   rk   oneflowrj   paddle	   r   r!   sizer   r   r   r   c              3   :   K   | ]}d t          |          z   V  dS r   Nr   r?   r   s     r   r   z4test_reduction_stress_imperatives.<locals>.<genexpr>=  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>>  s,       M M!s1vv M M M M M Mr7   ->r   rq   r(   r   F)r)   r:   rJ   )r   r   r   r   r   r-   r   r   r>   r   r   r   r*   rq   r+   r   r   r   r   r   rQ   )rH   r)   rt   coincidemax_dimr   rC   r   skippedleftrightr1   r   rx   ry   s                  r   !test_reduction_stress_imperativesr   +  sT   " u u-w/EFFF#n4 	u 	uIE(H,,,! >GG2227111.. u u,,Q,??#l66v>>(K77!!U\=Q=QRX[\R\=]=]xxDDeFmmDDDDD M M{7887L M M MMM+-LA
5(9(9$9GGGOOPUVV&&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_torchO  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_tfR  s$    ""1m444r7   c                 @    dd l mc m} |                    | |          S r   )tensorflow.keras.backendkerasrH   r   )r   r   ks      r   logsumexp_keraszAtest_reduction_with_callable_imperatives.<locals>.logsumexp_kerasW  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IaLLIam,,,y||g%%r7   r   )TorchBackendTensorflowBackendTFKerasBackendNumpyBackendz!Test reduction with callable for r(   )r   r*   r+   r   r&   einops._backendsr   r   r   r   r   r   rF   r/   r   r   r   rG   )x_numpyr   r   r   r   r   r   r   r   backend2callbackrH   backend_callback	x_backendr2   r3   output_numpyoutput_backends                    r   (test_reduction_with_callable_imperativesr   K  s   l,--55oooFFMMiXXG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                  P   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 t          ||          D ]C\  }}|                     |          }|j        |j        k    sJ t          j        ||          sJ Dd S )Nztesting directions forr   )r   r   r   r   r    r"   rj   )r   r   r   r   r*   rq   r+   r   rF   rr   rw   rG   rC   r   )rH   rC   r   axes1axes2ax1ax2s          r   test_enumerating_directionsr  ~  sA   " 
0 
0&(>???1#yyy,,,7 	0 	0EUZ..//77>>A)!,,E)'*<*<Q*?*?@@Eu::U9999s5zz999999u-- 0 0S&&s++yCI----~c3//////0	0
0 
0r7   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*   rq   r+   )r?   r   rC   s     r   rB   z4test_concatenations_and_stacking.<locals>.<listcomp>  sC    jjjUV5<1uz%/@/@+@AAII%PPjjjr7   c                 :    g | ]}                     |          S r   )rF   )r?   arrayrH   s     r   rB   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   rg   r   r-   rG   )	n_arraysr   arrays1arrays2result0rx   ry   rH   rC   s	          @@r    test_concatenations_and_stackingr    sv   " M M#W%;<<<! 	M 	MH1#1v|||aS1W=F M MjjjjZ_`hZiZijjjJJJJ'JJJ-00#GZ88#GZ88(':::::('2B2B72K2KLLLLL#G-=>>#G-=>>('2B2B72K2KLLLLLLM	MM M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      rp   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   rF   hasattrr   backwardrG   r  r   r   keysitemsr   )r)   r   resultsrH   y0y1y2y3y4r  name1grad1name2grad2s                 r   test_gradients_imperativesr$    s    d d	&&LM**22999==DDYOO& 	3 	3G##A&&B2v&& Ni@@@BLI>>>B,	aHHHBI;;;BKKMMM##BG,,D.2GG*++'888#MMOO 	d 	dLE5 ' d du~eU33cceUDb5ccc3cd	d)d d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+   tilerF   rG   r-   )rH   r   r   repeatsrb   	convertedrepeatedrc   s           r   test_tiling_imperativesr,    s    " 7 7!7#9:::Yg666>>OO
 
 


 " 	7 	7Gz%11H**511I||Iw77H%%h//F$VX666666	77 7r7   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(  rD   rC   rE   r-   rr   )rH   r   r   r)  rb   r   rc   s          r   test_tiling_symbolicr.    sM   " 7 7!7#9:::Yg666>>OO
 
 


 " 	7 	7Gz%11H''44C((c7)C)CsEl^TTF$VX66666''U[1A1A(ABBC((c7)C)CsEl^TTF$VX666666	77 7r7   za b c -> c a bza b c -> (c copy a b)r   r    r"   )r   arm   cza b c -> (a copy) b c r   r   za b c -> (c a) (copy1 b copy2))r/  copy1copy2za ...  -> a ... copyr!   z... c -> ... (copy1 c copy2))r2  r3  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_patternrz   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Q,,,,,Q,,,,,,,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   r1  )r   r*   r+   r   r-   repeat_test_casesr:  )r   x1r1   axis_dimensionss       r   test_repeat_numpyr@    s    Y''			22A	)	2	2	2BQtWb)))))$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   rF   rG   r-   )r   rH   r1   r?  rb   r*  r+  rc   s           r   test_repeat_imperativesrC    s    Y''			22A" 7 7!7#9:::(9 	7 	7$G_a<<O<<H**1--IiDDODDH%%h//F$VX666666	77 7r7   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 rB  )r   r*   r+   r   r   r   r=  r   rD   rC   rE   r-   )r   rH   r1   r?  rb   r   rc   s          r   test_repeat_symbolicrE    s    Y''			22A" 7 7!7#9:::(9 	7 	7$G_a<<O<<H''00C((W)P)P)P)PTWYZS[R\]]F$VX666666	77 7r7   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   rX   rZ   r'  r<  )r   r[   rY   r\   r   r]   r*   r+   r=  r   r^   r-   r_   )r`   ra   r   r1   r?  rb   rc   s          r   test_repeat_array_apirG    s    &&&&&&	~Y''			22A$5 C C !W88882>>!,,gIIII FQJ!7!7BBBBBB	C Cr7   za b c d -> c a d bza b c d -> (c 2 d a b)r#   )r/  r0  r@   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   r?  s      r   test_anonymous_axesrK  7  s\    ]##++LLL99A$? 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    )rm   )r   r*   r+   r-   r   rS   r   r   r   s    r   test_list_inputsrM  =  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          }|                     g d          }| 	                     ||           ||                    sJ |                     g 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)rC   r   r   )r   r/  rm   r0  others        r   func1z4test_torch_compile_with_dynamic_shape.<locals>.func1V  sF    '1a%a=!DDD1&1q5999r7   	aot_eager)dynamic	fullgraphrH   )r!   r"   r#   r    r   )r#   r    r!   r   r    )
r	   r   r]   rO  _dynamoconfigverbosecompilerandnequal)rO  rS  func1_compiled_dynamicr   s       r   %test_torch_compile_with_dynamic_shaper^  N  s    W%% LLL $(EM    #]]5$$Xc]dd&&A;;--a00%%((;;;;;))A;;--a00%%((;;;;;;;r7   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>j  s+      //Q!|//////r7      )r'   r   r   s   `r   	bit_countrb  i  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   )rb  )r?   r   s     r   rB   z7test_reduction_imperatives_booleans.<locals>.<listcomp>o  s(    GGGa9Q<<!+1GGGr7   @   r   r#   zReduction any/all tests for T)r   r   rn   1r   r   r  r(   r  )r   r   za b ... -> 1 1 ...N)r   rg   r   r+   r   r   r   r  r  r-   rS   r   r   rF   rG   )x_nprH   r   expected_result_anyexpected_result_allaxesaxes_inaxes_outr1   res_anyres_alls              r   #test_reduction_imperatives_booleansro  m  s   =GG5;;GGGHHPPRSQTWXQXYYD" Q Q,g.DEEE!HH 	U 	UD"')Dtd"K"K"K"')Dtd"K"K"K()<>QRRRRR>>D4jjGDzzH HTNxx((F2chhx6H6HIGW//55w%PPPGW//55w%PPPG$%8':J:J7:S:STTTTT$%8':J:J7:S:STTTTTT $i6DIII#i6DIII&++D117eLLL++D117eLLL !4g6F6Fw6O6OPPPPP !4g6F6Fw6O6OPPPPPP7Q Qr7   )r   F)3rT   r   rf   r   r[   r   einops.einopsr   r   r   r   einops.testsr   r	   r
   r   r   r   r,   r.   r/   r   r6   rQ   rV   rd   rh   r}   r   r   r   r   r   r  r  r$  r,  r.  rv   r=  r:  r@  rC  rE  rG  rJ  rK  rM  r^  rb  ro  r   r7   r   <module>rr     s                   J J J J J J J J J J J J a a a a a a a a a a''uEEE''eDDD	 	 	 ! ! ! ! ! ! ' ' '5 5 5$. . . .6  "C C CS S S#* #* #*L: : :8!W !W !WH2I 2I 2Iju u u@0 0 0f0 0 0M M M&d d d67 7 7"7 7 7, 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
7 
7 
77 7 7C C C$ 4466"tta12223#TTq\\\2 )44aq+A+A+AB+TTVV4 7 7 7  "< < <60 0 0Q Q Q Q Qr7   