o
    ڷi,                     @   sX   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d Zdd Zd	d
 ZdS )    N)parse_shape	rearrangereduce)is_backend_tested)imp_op_backendsc                     s  dd } dd }dd }dd }d	d
 }dd }dd }dd }dd }dd }	dd }
dd dd dd dd dd   | |||||||||	|
 fd!d" fd#d" fd$d" fd%d"g}t D ]t}td&|j |D ]i}td'g d(}||}||||}t||sJ td)g d*}|jd+kr|jd,krd-nd.}tj	d d d/d d d0d d d.d d |f }||| }||||| }t||sJ qqqgd S )1Nc                 S       t | d}t|jdksJ |S )Nb c h w -> b h w c
      (      r   tupleshapexy r   P/home/ubuntu/vllm_env/lib/python3.10/site-packages/einops/tests/test_examples.pytest1
      
z&test_rearrange_examples.<locals>.test1c                 S   r   )Nzb c h w -> b (c h w))r
   i]  r   r   r   r   r   test2   r   z&test_rearrange_examples.<locals>.test2c                 S   &   t | d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   r   r   r   test3      z&test_rearrange_examples.<locals>.test3c                 S   r   )Nz$b c (h h1) (w w1) -> b (h1 w1 c) h wr   r   )r
   r       r   r   r   r   r   r   test4   r"   z&test_rearrange_examples.<locals>.test4c                 S   r   )Nz(b1 sound b2 letter -> b1 b2 sound letter)r
   r   r   r   r   r   r   r   r   test5"   r   z&test_rearrange_examples.<locals>.test5c                 S   s`   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   r   r   r   test6(   s   
z&test_rearrange_examples.<locals>.test6c                 S   s>   t | ddd\}}t|jdksJ t|jdksJ || S )Nzb (c g) h w -> g b c h wr   )gr&   r   )r   y1y2r   r   r   test72   s   z&test_rearrange_examples.<locals>.test7c                 S   s(   t | d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   r   r   r   test89   s   z&test_rearrange_examples.<locals>.test8c                 S   s@   t | ddd}t|jdksJ t|d}t|jdksJ |S )Nzb c h w -> b c () ()r-   )r.   )r
   r      r0   zb c () () -> c b)r   r
   )r   r   r   r   r   r   r   r   test9?   s
   
z&test_rearrange_examples.<locals>.test9c                 S   ,   t | d }t|d}t|jdksJ |S )Nr   r   r	   listr   r   r   r   tensorsr   r   r   test10G      
z'test_rearrange_examples.<locals>.test10c                 S   r2   )Nr   zb c h w -> h (b w) c)r   i  r   r3   r5   r   r   r   test11N   r8   z'test_rearrange_examples.<locals>.test11c                 S   s$   || } t | d||d} || } | S )Nzb (c1 c2) h w-> b (c2 c1) h w)c1c2r   )r   convolver:   r;   r   r   r   
shufflenetU   s   z+test_rearrange_examples.<locals>.shufflenetc                 S   s2   t | d} t | d|d} || } t | d|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)r<   )r   r@   usual_convolutionr   r   r   convolve_strided_1d\   s
   
z4test_rearrange_examples.<locals>.convolve_strided_1dc                 S   s,   t | d||d} || } t | d||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)r<   )r   h_stridew_striderA   r   r   r   convolve_strided_2dc   s   z4test_rearrange_examples.<locals>.convolve_strided_2dc                 S   s6   t | d} t | ddd}||}| t |ddd } | S )Nr?   zb c (t dt) -> b (dt c) tr   )dtzb (dt c) t -> b c (t dt)r<   )r   rA   r   r   r   r   unet_like_1di   s
   
z-test_rearrange_examples.<locals>.unet_like_1dc                 S   s   | S )Nr   r   r   r   r   convolve_mockr   s   z.test_rearrange_examples.<locals>.convolve_mockc                    s   |  dddS )N   r   )r=   r:   r;   r   rJ   )rK   r>   r   r   <lambda>       z)test_rearrange_examples.<locals>.<lambda>c                    s   | d dS )Nr   )r@   rA   r   rJ   )rK   rB   r   r   rM      s    c                    s   | dd dS )Nr   )rE   rF   rA   r   rJ   )rK   rG   r   r   rM      rN   c                    s   |  dS )N)rA   r   rJ   )rK   rI   r   r   rM      s    ztesting source_examples for i )r
   r   r   r   i  )r   r   r   r   torchoneflowr0   r      )
r   printframework_namenparangereshapeto_numpy
from_numpyarray_equal	index_exp)r   r   r!   r$   r%   r(   r,   r/   r1   r7   r9   testsbackendtestr   result1result2	last_stepindexing_expressionr   )rK   rB   rG   r>   rI   r   test_rearrange_examples	   s^   
	*rc   c                     sv  t g d} d t jdk rd S  fdd| jD }|d d d d d d dd d f |d< |d d d d d d d d df |d< | dg| jR }|D ]	}t d	||}qN|d}| d}|D ] }|j\}}}}t|d
||d}|t|d }t|d||d}qd|}	t ||	sJ | }|D ]}|j\}}}}t|d||d}|t|d }q|d}
t ||
sJ d S )N)rR   rL   r      rL   z1.15.0c                    s   g | ]}t ||  gqS r   )rU   ones).0drankr   r   
<listcomp>   s    z.tensor_train_example_numpy.<locals>.<listcomp>r   r0   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   re   __version__r   rW   einsumr   allclose)r   Gsr   Gr*   rl   rn   rk   rm   r+   y3r   rh   r   tensor_train_example_numpy   s4   
((


ru   c                     s   t dst  dd l  fdd}  fdd}d}d}d}d	}d
dgdd
gddgg}t|} ||d|  ddg}| ||||||d}	|||||||d}
|	|
j}	 |	|
s^J d S )NrO   r   c              	      s\  |  d}|  d}|  d} fdd|D }	| ||d| ||ddddd }
|
d	 }|
d
 }|
d }|
d }|
d }|
ddd f }|jr\jjnj}|jrfjjnj}	d|d |
|d
|| dd|j|}	d|d |
|d 
|| dd|j|}||	d|dg}||	d|dg}|
|d
dd|| |j}|
|d
dd|| |j}||
dd df j}|j| |d	< |j| |d
< |j| |d< |j| |d<  gd |}||dd| ||dd||d|fd}|S )Nr   r   rR   c                    s    g | ]\}}| |  fqS r   r   )rf   a_wa_hstride_hstride_wr   r   rj      s     z?test_pytorch_yolo_fragment.<locals>.old_way.<locals>.<listcomp>r   r0   rL   ).r   ).r0   ).r   ).rR   ).rL   .rQ   )sizeviewpermute
contiguoussigmoidis_cudacudaFloatTensor
LongTensorlinspacerepeatr   typer'   index_selectdataexpTensorcat)tensornum_classesnum_anchorsanchorsry   rz   bsin_hin_wscaled_anchors
predictionr   r   whconfpred_clsr   r   grid_xgrid_yanchor_wanchor_h
pred_boxes_scaleoutputrO   rx   r   old_way   sP   


(	"",z+test_pytorch_yolo_fragment.<locals>.old_wayc                    s   t | d|d} || j}t |d}|j\}}}}	}
t  |	 d| j}t  |
 d| j} |}|d  | | |d< |d  | | |d< |dd	 	 | |dd	< |d	  |d	< |d
d   |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   r0   r   rL   r   z2prediction b anchor h w -> b anchor h w prediction)
r   r   todevicer   rV   float
zeros_liker   r   )r   r   r   r   ry   rz   raw_predictionsanchor_sizes_r   r   grid_hgrid_wpredicted_bboxesr   r   r   new_way   s   


z+test_pytorch_yolo_fragment.<locals>.new_wayrL   r      2   d   K   r0   )r   r   r   ry   rz   r   )	r   pytestskiprO   lenrandnrW   r   rq   )r   r   ry   rz   
batch_sizer   r   r   r   r_   r`   r   r   r   test_pytorch_yolo_fragment   s<   5r   )numpyrU   r   einopsr   r   r   einops.testsr   einops.tests.test_opsr   rc   ru   r   r   r   r   r   <module>   s     )