
    'i,                     R    d dl Zd dlZd dlmZmZmZ d dlmZ d dl	m
Z
 d Zd Zd Zy)    N)parse_shape	rearrangereduce)is_backend_tested)imp_op_backendsc                  N   d } d }d }d }d }d }d }d }d	 }d
 }	d }
d d d d d | |||||||||	|
fdfdfdfdg}t         D ]E  }t        d|j                         |D ]&  }t        j                  d      j                  g d      } ||      }|j                   ||j                  |                  }t        j                  ||      sJ t        j                  d      j                  g d      }|j                  dk7  r|j                  dk7  rdnd}t        j                  d d dd d dd d dd d |f   } |||         }|j                   ||j                  |      |               }t        j                  ||      r'J  H y ) Nc                 R    t        | d      }t        |j                        dk(  sJ |S )Nb c h w -> b h w c
      (      r   tupleshapexys     T/var/www/stems/demucs_env/lib/python3.12/site-packages/einops/tests/test_examples.pytest1z&test_rearrange_examples.<locals>.test1
   s+    a-.QWW~!1111    c                 R    t        | d      }t        |j                        dk(  sJ |S )Nzb c h w -> b (c h w))r   i]  r   r   s     r   test2z&test_rearrange_examples.<locals>.test2   s+    a/0QWW~!3333r   c                 X    t        | ddd      }t        |j                        dk(  sJ |S )Nz$b (c h1 w1) h w -> b c (h h1) (w w1)   h1w1)r      <   P   r   r   s     r   test3z&test_rearrange_examples.<locals>.test3   s/    a?A!LQWW~!8888r   c                 X    t        | ddd      }t        |j                        dk(  sJ |S )Nz$b c (h h1) (w w1) -> b (h1 w1 c) h wr   r   )r   r"      r   r   r   s     r   test4z&test_rearrange_examples.<locals>.test4   s/    a?A!LQWW~!????r   c                 R    t        | d      }t        |j                        dk(  sJ |S )Nz(b1 sound b2 letter -> b1 b2 sound letter)r   r   r   r   r   r   s     r   test5z&test_rearrange_examples.<locals>.test5"   s+    aCDQWW~!1111r   c                     t        | d      }|d d d d df   }t        |j                        dk(  sJ t        |dfi t        | d      }t        |j                        dk(  sJ |S )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   test6z&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                     t        | dd      \  }}t        |j                        dk(  sJ t        |j                        dk(  sJ ||z   S )Nzb (c g) h w -> g b c h wr   )gr*   r   )r   y1y2s      r   test7z&test_rearrange_examples.<locals>.test72   sL    18A>BRXX"2222RXX"2222Bwr   c                 Z    t        | dddd      }t        |j                        dk(  sJ |S )Nzb c (h h1) (w w1) -> b c h wmaxr   )	reductionr   r   )r   r   r%   r   )r   r   r   r   s     r   test8z&test_rearrange_examples.<locals>.test89   s2    14!PQRQWW~!;;;;r   c                     t        | dd      }t        |j                        dk(  sJ t        |d      }t        |j                        dk(  sJ |S )Nzb c h w -> b c () ()r3   )r4   )r   r      r7   zb c () () -> c b)r   r   )r   r   r   r   r   s     r   test9z&test_rearrange_examples.<locals>.test9?   sO    1,>QWW~///a+,QWW~)))r   c                 n    t        | dz         }t        |d      }t        |j                        dk(  sJ |S )Nr   r
   r   listr   r   r   r   tensorss     r   test10z'test_rearrange_examples.<locals>.test10G   s9    q1u+G%9:W]]#'7777r   c                 n    t        | dz         }t        |d      }t        |j                        dk(  sJ |S )Nr   zb c h w -> h (b w) c)r   i  r   r:   r<   s     r   test11z'test_rearrange_examples.<locals>.test11N   s9    q1u+G%;<W]]#'8888r   c                 D     ||       } t        | d||      }  ||       } | S )Nzb (c1 c2) h w-> b (c2 c1) h w)c1c2r   )r   convolverB   rC   s       r   
shufflenetz+test_rearrange_examples.<locals>.shufflenetU   s*    QKa8RBGQKr   c                 f    t        | d      } t        | d|      }  ||       } t        | d|      } | S )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)rD   )r   rI   usual_convolutions      r   convolve_strided_1dz4test_rearrange_examples.<locals>.convolve_strided_1d\   s<    a34a;FKa a;FKr   c                 R    t        | d||      }  ||       } t        | d||      } | S )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)rD   )r   h_stridew_striderJ   s       r   convolve_strided_2dz4test_rearrange_examples.<locals>.convolve_strided_2dc   s5    a?HQYZa a?HQYZr   c                 l    t        | d      } t        | dd      } ||      }| t        |dd      z   } | S )NrH   zb c (t dt) -> b (dt c) tr   )dtzb (dt c) t -> b c (t dt)rD   )r   rJ   r   s      r   unet_like_1dz-test_rearrange_examples.<locals>.unet_like_1di   sA    a34a3:a 	!7A>>r   c                     | S )N )r   s    r   convolve_mockz.test_rearrange_examples.<locals>.convolve_mockr   s    r   c                      | dd      S )N   r    )rE   rB   rC   rV   )r   rW   rF   s    r   <lambda>z)test_rearrange_examples.<locals>.<lambda>   s    *Q1C r   c                      | d      S )Nr   )rI   rJ   rV   )r   rW   rK   s    r   rZ   z)test_rearrange_examples.<locals>.<lambda>   s    %a]S r   c                      | dd      S )Nr   )rO   rP   rJ   rV   )r   rW   rQ   s    r   rZ   z)test_rearrange_examples.<locals>.<lambda>   s    %a!aS`a r   c                      |       S )N)rJ   rV   )r   rW   rT   s    r   rZ   z)test_rearrange_examples.<locals>.<lambda>   s    ,qMB r   ztesting source_examples for i )r   r   r   r   i  )r   r!   r   r   torchoneflowr7   r      )
r   printframework_namenparangereshapeto_numpy
from_numpyarray_equal	index_exp)r   r   r#   r&   r(   r,   r1   r5   r8   r>   r@   testsbackendtestr   result1result2	last_stepindexing_expressionrW   rK   rQ   rF   rT   s                      @@@@@r   test_rearrange_examplesrr   	   s    	CSaBE$ # 4,g.D.DE 	4D		+,445EFA1gG&&tG,>,>q,A'BCG>>'7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	44r   c            	      b   t        j                  g d      } d}t         j                  dk  ry | j                  D cg c]  }t        j                  ||||g       }}|d   d d d d d dd d f   |d<   |d   d d d d d d d df   |d<   | j	                  dg| j                        }|D ]  }t        j
                  d||      } |j	                  d      }| j	                  d      }|D ]@  }|j                  \  }}}	}
t        |d|	|	      }|t        |d
      z  }t        |d|
|      }B |}t        j                  ||      sJ | }|D ]1  }|j                  \  }}}	}
t        |d|	|	      }|t        |d
      z  }3 |j	                  d      }t        j                  ||      sJ y c c}w )N)ra   rY   r       rY   z1.15.0r   r7   r`   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))rd   ones__version__r   rf   einsumr   allclose)r   rankdGsr   Gr/   rv   rx   ru   rw   r0   y3s                r   tensor_train_example_numpyr      s    	AD	~~ /0ww	7!"''1at$
%	7B	7qE!QA+BqEVAq!RaRK BrF 	
		1-qww- A < II4a;< 
2B 	
		"A KGG1eTa;5AN	!CDDa9J	K
 
B;;r2 	
A EGG1eTa=UaP	!CDDE 
2B;;r2; 
8s    F,c                  h   t        d      st        j                          dd lfd} fd}d}d}d}d}dd	gd	dgd
d
gg}t	        |      }j                  ||d|z   z  ddg      } | ||||||      }	 |||||||      }
|	j                  |
j                        }	j                  |	|
      sJ y )Nr^   r   c           	         | j                  d      }| j                  d      }| j                  d      }|D 	
cg c]  \  }	}
|	|z  |
|z  f }}	}
| j                  ||d|z   ||      j                  ddddd      j                         }j	                  |d         }j	                  |d         }|d	   }|d
   }j	                  |d         }j	                  |ddd f         }|j
                  rj                  j                  nj                  }|j
                  rj                  j                  nj                  }j                  d|dz
  |      j                  |d      j                  ||z  dd      j                  |j                        j                  |      }j                  d|dz
  |      j                  |d      j                         j                  ||z  dd      j                  |j                        j                  |      } ||      j                  d |dg            } ||      j                  d |dg            }|j                  |d      j                  dd||z        j                  |j                        }|j                  |d      j                  dd||z        j                  |j                        } ||dd df   j                        }|j                  |z   |d<   |j                  |z   |d<   j!                  |j                        |z  |d	<   j!                  |j                        |z  |d
<   j#                  ||gdz        j                  |      }j%                  |j                  |dd      |z  |j                  |dd      |j                  |d|      fd      }|S c c}
}	w )Nr   r   ra   r    r7   rY   ).r   ).r7   ).r   ).ra   ).rY   .r`   )sizeviewpermute
contiguoussigmoidis_cudacudaFloatTensor
LongTensorlinspacerepeatr   typer+   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outputr^   s                               r   old_wayz+test_pytorch_yolo_fragment.<locals>.old_way   sf   [[^{{1~{{1~KRSxsC3>3>:S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Atd{CHHQ??2q)00Atd{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                    t        | d|      }j                  |      j                  | j                        }t        |d      }|j                  \  }}}}	}
t        j                  |	      j                         d      j                  | j                        }t        j                  |
      j                         d      j                  | j                        }j                  |      }|d   j                         |z   |z  |d<   |d   j                         |z   |z  |d<   |dd	 j                         |z  |dd	 |d	   j                         |d	<   |d
d  j                         |d
d  t        |d      S )Nz5 b (anchor prediction) h w -> prediction b anchor h w)anchorz!anchor dim -> dim () anchor () ()zh -> () () h ()zw -> () () () wr   r7   r   rY   r    z2prediction b anchor h w -> b anchor h w prediction)
r   r   todevicer   re   float
zeros_liker   r   )r   r   r   r   r   r   raw_predictionsanchor_sizes_r   r   grid_hgrid_wpredicted_bboxesr^   s                 r   new_wayz+test_pytorch_yolo_fragment.<locals>.new_way   so   #F,clwx##G,//> *MN-331at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   rY   r       2   d   K   r7   )r   r   r   r   r   r   )	r   pytestskipr^   lenrandnrf   r   r|   )r   r   r   r   
batch_sizer   r   r   r   rn   ro   r^   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>>'7+++r   )numpyrd   r   einopsr   r   r   einops.testsr   einops.tests.test_opsr   rr   r   r   rV   r   r   <module>r      s*      1 1 * 1M4`&Rg,r   