o
    K+ 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)	rearrangeparse_shape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   f/home/app/PaddleOCR-VL-test/.venv_paddleocr/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   Z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   r7   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   convolver9   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_strider@   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   r@   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<   r9   r:   r   rI   )rJ   r=   r   r   <lambda>       z)test_rearrange_examples.<locals>.<lambda>c                    s   | d dS )Nr   )r?   r@   r   rI   )rJ   rA   r   r   rL      s    c                    s   | dd dS )Nr   )rD   rE   r@   r   rI   )rJ   rF   r   r   rL      rM   c                    s   |  dS )N)r@   r   rI   )rJ   rH   r   r   rL      s    ztesting source_examples for i )r
   r   r   r   i  )r   r   r   r   torchZoneflowr0   r      )
r   printZframework_namenumpyarangereshapeZto_numpyZ
from_numpyZarray_equalZ	index_exp)r   r   r!   r$   r%   r(   r,   r/   r1   r6   r8   testsbackendtestr   result1result2Z	last_stepZindexing_expressionr   )rJ   rA   rF   r=   rH   r   test_rearrange_examples	   s^   
	*rZ   c                     sr  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	| j }|D ]	}t d
||}qL|d}| d}|D ] }|j\}}}}t|d||d}|t|d }t|d||d}qb|}	t ||	sJ | }|D ]}|j\}}}}t|d||d}|t|d }q|d}
t ||
sJ d S )N)rP   rK   r      rK   z1.15.0c                    s   g | ]}t ||  gqS r   )rR   ones).0dZrankr   r   
<listcomp>   s    z.tensor_train_example_numpy.<locals>.<listcomp>r   r0   rO   )r0   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))rR   r\   __version__r   rT   Zeinsumr   allclose)r   ZGsr   Gr*   rb   rd   ra   rc   r+   Zy3r   r_   r   tensor_train_example_numpy   s4   
((


rh   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 )NrN   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   rP   c                    s    g | ]\}}| |  fqS r   r   )r]   Za_wZa_hstride_hstride_wr   r   r`      s     z?test_pytorch_yolo_fragment.<locals>.old_way.<locals>.<listcomp>r   r0   rK   ).r   ).r0   ).r   ).rP   ).rK   .rO   )sizeviewZpermute
contiguoussigmoidZis_cudacudaFloatTensor
LongTensorZlinspacerepeatr   typer'   Zindex_selectdataexpZTensorcat)inputnum_classesnum_anchorsanchorsrj   rk   bsin_hin_wZscaled_anchorsZ
predictionr   r   whconfZpred_clsrq   rr   Zgrid_xZgrid_yZanchor_wZanchor_hZ
pred_boxesZ_scaleoutputrN   ri   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   rK   r   z2prediction b anchor h w -> b anchor h w prediction)
r   rq   toZdevicer   rS   floatZ
zeros_likero   rv   )rx   ry   rz   r{   rj   rk   Zraw_predictionsZanchor_sizes_r}   r~   Zgrid_hZgrid_wZpredicted_bboxesr   r   r   new_way   s   


z+test_pytorch_yolo_fragment.<locals>.new_wayrK   r      2   d   K   r0   )rx   rz   ry   rj   rk   r{   )	r   pytestskiprN   lenZrandnrT   r   rf   )r   r   rj   rk   Z
batch_sizery   r{   rz   rx   rX   rY   r   r   r   test_pytorch_yolo_fragment   s<   5r   )rR   r   Zeinopsr   r   r   Zeinops.testsr   Zeinops.tests.test_opsr   rZ   rh   r   r   r   r   r   <module>   s     )