
    3j,                     R    S SK rS SKrS SKJrJrJr  S SKJr  S SK	J
r
  S rS rS rg)    N)parse_shape	rearrangereduce)is_backend_tested)imp_op_backendsc                  ~  ^^^^^ S n S nS nS nS nS nS nS nS	 nS
 n	S n
S mS mS mS mS mU UUUUUUUUU	U
UU4S jUU4S jUU4S jUU4S j/n[          GHX  n[        SUR                  5        U GH7  n[        R                  " S5      R                  / SQ5      nU" U5      nUR                  U" UR                  U5      5      5      n[        R                  " UU5      (       d   e[        R                  " S5      R                  / SQ5      nUR                  S:w  a  UR                  S:w  a  SOSn[        R                  S S S2S S S2S S S2S S U24   nU" UU   5      nUR                  U" UR                  U5      U   5      5      n[        R                  " UU5      (       a  GM8   e   GM[     g ) Nc                 T    [        U S5      n[        UR                  5      S:X  d   eU$ )Nb c h w -> b h w c
      (      r   tupleshapexys     T/home/wildlama/miniconda3/lib/python3.13/site-packages/einops/tests/test_examples.pytest1&test_rearrange_examples.<locals>.test1
   s+    a-.QWW~!1111    c                 T    [        U S5      n[        UR                  5      S:X  d   eU$ )Nzb c h w -> b (c h w))r   i]  r   r   s     r   test2&test_rearrange_examples.<locals>.test2   s+    a/0QWW~!3333r   c                 T    [        U SSSS9n[        UR                  5      S:X  d   eU$ )Nz$b (c h1 w1) h w -> b c (h h1) (w w1)   h1w1)r      <   P   r   r   s     r   test3&test_rearrange_examples.<locals>.test3   s/    a?A!LQWW~!8888r   c                 T    [        U SSSS9n[        UR                  5      S:X  d   eU$ )Nz$b c (h h1) (w w1) -> b (h1 w1 c) h wr   r   )r   r$      r   r   r   s     r   test4&test_rearrange_examples.<locals>.test4   s/    a?A!LQWW~!????r   c                 T    [        U S5      n[        UR                  5      S:X  d   eU$ )Nz(b1 sound b2 letter -> b1 b2 sound letter)r   r   r   r   r   r   s     r   test5&test_rearrange_examples.<locals>.test5"   s+    aCDQWW~!1111r   c                     [        U S5      nUS S 2S S S24   n[        UR                  5      S:X  d   e[        US40 [        U S5      D6n[        UR                  5      S:X  d   eU$ )Nzb c h w -> (b h w) cr   )i.  r   z(b h w) c2 -> b c2 h wzb _ h wr   r   r   r   )r   r   r   r   )r   tr   s      r   test6&test_rearrange_examples.<locals>.test6(   sl    a/0a1fIQWW~!3333a1O[I5NOQWW~!1111r   c                     [        U SSS9u  p[        UR                  5      S:X  d   e[        UR                  5      S:X  d   eX-   $ )Nzb (c g) h w -> g b c h wr   )gr/   r   )r   y1y2s      r   test7&test_rearrange_examples.<locals>.test72   sH    18A>RXX"2222RXX"2222wr   c                 V    [        U SSSSS9n[        UR                  5      S:X  d   eU$ )Nzb c (h h1) (w w1) -> b c h wmaxr   )	reductionr    r!   )r   r   r(   r   )r   r   r   r   s     r   test8&test_rearrange_examples.<locals>.test89   s2    14!PQRQWW~!;;;;r   c                     [        U SSS9n[        UR                  5      S:X  d   e[        US5      n[        UR                  5      S:X  d   eU$ )Nzb c h w -> b c () ()r:   )r;   )r   r      r?   zb c () () -> c b)r   r   )r   r   r   r   r   s     r   test9&test_rearrange_examples.<locals>.test9?   sO    1,>QWW~///a+,QWW~)))r   c                 p    [        U S-   5      n[        US5      n[        UR                  5      S:X  d   eU$ )Nr   r
   r   listr   r   r   r   tensorss     r   test10'test_rearrange_examples.<locals>.test10G   s9    q1u+G%9:W]]#'7777r   c                 p    [        U S-   5      n[        US5      n[        UR                  5      S:X  d   eU$ )Nr   zb c h w -> h (b w) c)r   i  r   rC   rE   s     r   test11'test_rearrange_examples.<locals>.test11N   s9    q1u+G%;<W]]#'8888r   c                 <    U" U 5      n [        U SX#S9n U" U 5      n U $ )Nzb (c1 c2) h w-> b (c2 c1) h w)c1c2r   )r   convolverM   rN   s       r   
shufflenet+test_rearrange_examples.<locals>.shufflenetU   s(    QKa8RGQKr   c                 Z    [        U S5      n [        U SUS9n U" U 5      n [        U SUS9n U $ )Nb c t1 t2 -> b c (t1 t2)z b c (t stride) -> (stride b) c t)stridez (stride b) c t -> b c (t stride)rO   )r   rU   usual_convolutions      r   convolve_strided_1d4test_rearrange_examples.<locals>.convolve_strided_1d\   s<    a34a;FKa a;FKr   c                 B    [        U SXS9n U" U 5      n [        U SXS9n U $ )Nz$b c (h hs) (w ws) -> (hs ws b) c h w)hswsz$(hs ws b) c h w -> b c (h hs) (w ws)rO   )r   h_stridew_striderV   s       r   convolve_strided_2d4test_rearrange_examples.<locals>.convolve_strided_2dc   s/    a?HZa a?HZr   c                 `    [        U S5      n [        U SSS9nU" U5      nU [        USSS9-   n U $ )NrT   zb c (t dt) -> b (dt c) tr   )dtzb (dt c) t -> b c (t dt)rO   )r   rV   r   s      r   unet_like_1d-test_rearrange_examples.<locals>.unet_like_1di   sA    a34a3:a 	!7A>>r   c                     U $ )N )r   s    r   convolve_mock.test_rearrange_examples.<locals>.convolve_mockr   s    r   c                    > T" U TSSS9$ )N   r"   )rP   rM   rN   re   )r   rf   rQ   s    r   <lambda>)test_rearrange_examples.<locals>.<lambda>   s    *Q1Cr   c                    > T" U STS9$ )Nr   )rU   rV   re   )r   rf   rW   s    r   rj   rk      s    %a]Sr   c                    > T" U SSTS9$ )Nr   )r\   r]   rV   re   )r   rf   r^   s    r   rj   rk      s    %a!aS`ar   c                    > T" U TS9$ )N)rV   re   )r   rf   rb   s    r   rj   rk      s    ,qMBr   ztesting source_examples for i )r   r   r   r   i  )r   r#   r   r   torchoneflowr?   r      )
r   printframework_namenparangereshapeto_numpy
from_numpyarray_equal	index_exp)r   r   r%   r)   r,   r1   r7   r<   r@   rG   rJ   testsbackendtestr   result1result2	last_stepindexing_expressionrf   rW   r^   rQ   rb   s                      @@@@@r   test_rearrange_examplesr   	   s    	CSaBE$ #?,g.D.DED		+,445EFA1gG&&tG,>,>q,A'BCG>>'73333 		78@@AabA&55@WE[E[_hEhopI"$,,ssCaC1k	k/I"J1012G&&tG,>,>q,ABU,V'WXG>>'73333  #r   c            	      j   [         R                  " / SQ5      n Sn[         R                  S:  a  g U R                   Vs/ s H  n[         R                  " X"X/5      PM     nnUS   S S 2S S 2S S2S S 24   US'   US   S S 2S S 2S S 2S S24   US'   U R	                  S/U R                  Q75      nU H  n[         R
                  " SXT5      nM     UR	                  S5      nU R	                  S5      nU H7  nUR                  u  pxp[        USXS	9nU[        US
5      -  n[        USXS9nM9     Un[         R                  " Xk5      (       d   eU nU H,  nUR                  u  pxp[        USXS	9nU[        US
5      -  nM.     UR	                  S5      n[         R                  " Xl5      (       d   eg s  snf )N)rr   ri   r"      ri   z1.15.0r   r?   rq   zi j a b, a i ...  -> b ... jz (i rest alpha) -> rest (alpha i))alphaiz$i j alpha beta -> (alpha i) (j beta)zrest (beta j) -> (beta rest j))betajz"i ... (j alpha) -> ... j (alpha i))ru   ones__version__r   rw   einsumr   allclose)r   rankdGsr   Gr5   r   r   r   r   r6   y3s                r   tensor_train_example_numpyr      s    	AD	~~ /0ww	7w!"''1$
%wB	7qE!QA+BqEVAq!RaRK BrF 	
		1-qww- A II4a;  
2B 	
		"AGGea;5N	!CDDa9J	 
 
B;;r 	
AGGea=UP	!CDD  
2B;;r; 
8s   "F0c            	      r  ^ [        S5      (       d  [        R                  " 5         SS KmU4S jn U4S jnSnSnSnSnSS	/S	S/S
S
//n[	        U5      nTR                  XGSU-   -  SS/5      nU " UUUUUUS9n	U" UUUUUUS9n
U	R                  U
R                  5      n	TR                  X5      (       d   eg )Nro   r   c           	        > U R                  S5      nU R                  S5      nU R                  S5      nU V	V
s/ s H  u  pX-  X-  4PM     nn	n
U R                  XbSU-   Xx5      R                  SSSSS5      R                  5       nTR	                  US   5      nTR	                  US   5      nUS	   nUS
   nTR	                  US   5      nTR	                  USSS 24   5      nUR
                  (       a  TR                  R                  OTR                  nUR
                  (       a  TR                  R                  OTR                  nTR                  SUS-
  U5      R                  US5      R                  Xb-  SS5      R                  UR                  5      R                  U5      nTR                  SUS-
  U5      R                  US5      R                  5       R                  Xb-  SS5      R                  UR                  5      R                  U5      nU" U5      R                  SU" S/5      5      nU" U5      R                  SU" S/5      5      nUR                  US5      R                  SSXx-  5      R                  UR                  5      nUR                  US5      R                  SSXx-  5      R                  UR                  5      nU" USS S24   R                  5      nUR                  U-   US'   UR                  U-   US'   TR!                  UR                  5      U-  US	'   TR!                  UR                  5      U-  US
'   TR#                  XT/S-  5      R                  U5      nTR%                  UR                  USS5      U-  UR                  USS5      UR                  USU5      4S5      nU$ s  sn
n	f )Nr   r   rr   r"   r?   ri   ).r   ).r?   ).r   ).rr   ).ri   .rq   )sizeviewpermute
contiguoussigmoidis_cudacudaFloatTensor
LongTensorlinspacerepeatr   typer0   index_selectdataexpTensorcat)tensornum_classesnum_anchorsanchorsstride_hstride_wbsin_hin_wa_wa_hscaled_anchors
predictionr   r   whconfpred_clsr   r   grid_xgrid_yanchor_wanchor_h
pred_boxes_scaleoutputro   s                               r   old_way+test_pytorch_yolo_fragment.<locals>.old_way   sS   [[^{{1~{{1~KRS7xs3>3>:7S[[!k/4NVVWXZ[]^`acdeppr
MM*V,-MM*V,-vv}}Z/0==CG!45 12		ejj,,u?P?P./iiUZZ**U=M=M
 NN1dQh-VD!_VB$a+T!'']T+ 	 NN1dQh-VD!_QSVB$a+T!'']T+ 	 ~.;;Az1#O~.;;Az1#O??2q)00At{CHHQ??2q)00At{CHHQ C!G!4!:!:;
VVf_
6VVf_
6"YYqvv.9
6"YYqvv.9
6x2Q67<<[I__RQ'&0$))BA2FVXZ\^iHjkmo
 ] Ts   Oc                   > [        U SUS9nTR                  U5      R                  U R                  5      n[        US5      nUR                  u      pn
[        TR                  U	5      R                  5       S5      R                  U R                  5      n[        TR                  U
5      R                  5       S5      R                  U R                  5      nTR                  U5      nUS   R                  5       U-   U-  US'   US   R                  5       U-   U-  US'   USS	 R                  5       U-  USS	& US	   R                  5       US	'   US
S  R                  5       US
S & [        US5      $ )Nz5 b (anchor prediction) h w -> prediction b anchor h w)anchorz!anchor dim -> dim () anchor () ()zh -> () () h ()zw -> () () () wr   r?   r   ri   r"   z2prediction b anchor h w -> b anchor h w prediction)
r   r   todevicer   rv   float
zeros_liker   r   )r   r   r   r   r   r   raw_predictionsanchor_sizes_r   r   grid_hgrid_wpredicted_bboxesro   s                 r   new_way+test_pytorch_yolo_fragment.<locals>.new_way   sm   #F,clwx##G,//> *MN-331at5<<-3357HILLV]][5<<-3357HILLV]][ ++O<.q199;fDP.q199;fDP!01!5!9!9!;| K1-a088:.qr2::<)+_``r   ri   r"      2   d   K   r?   )r   r   r   r   r   r   )	r   pytestskipro   lenrandnrw   r   r   )r   r   r   r   
batch_sizer   r   r   r   r   r   ro   s              @r   test_pytorch_yolo_fragmentr      s    W%%3ja& HHJKCy3)b"X.Gg,KZK!@!QGHAG G oogmm,G>>'++++r   )numpyru   r   einopsr   r   r   einops.testsr   einops.tests.test_opsr   r   r   r   re   r   r   <module>r      s*      1 1 * 1M4`&Rg,r   