o
    K+ i(                     @   s   d dl Z d dlZd dlZd dlZd dlmZmZmZm	Z	 d dl
mZ dd ZdefddZdefd	d
ZG dd dZd%ddZe jG dd dZeddeddeddeddeddeddgZdd  Zd!d" Zd#d$ ZdS )&    N)EinopsErrorasnumpypackunpack)collect_test_backendsc                 C   s^   t | |\}}t| ||}t|t| ksJ t|| D ]\}}tt|t|s,J qd S N)r   r   lenzipnpallcloser   )xspatternxpsunpackedab r   e/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/einops/tests/test_packing.pypack_unpack   s   r   r   c                 C   s8   t | ||}t||d\}}tt|t| sJ |S N)r   )r   r   r
   r   r   )r   r   r   r   packedps2r   r   r   unpack_and_pack   s   r   c                 C   s*  t  }t  }| t| ||}t||d\}}W d    n1 s!w   Y  | t| }t|||}	t|	|d\}
}W d    n1 sEw   Y  t|jt|jksVJ |jd ur]d S tt|t| siJ tt|
t| suJ t|t|	ksJ t	||	D ]\}}tt||sJ qd S r   )
CaptureExceptionr   r   r   type	exceptionr
   r   r   r	   )r   r   r   Zcapturer_backendZcapturer_numpyr   r   r   x_npZunpacked_npZ	packed_npZps3r   r   r   r   r   unpack_and_pack_against_numpy   s(   
r   c                   @   s   e Zd Zdd Zdd ZdS )r   c                 C   s
   d | _ d S r   r   selfr   r   r   	__enter__6   s   
zCaptureException.__enter__c                 C   s
   || _ dS )NTr   )r!   exc_typeexc_valexc_tbr   r   r   __exit__9   s   zCaptureException.__exit__N)__name__
__module____qualname__r"   r&   r   r   r   r   r   5   s    r         c           	      C   s  dd }dd }|d| |\}}}|| |d}|t j|||gddt|||gd	d
  |t j|||gddt|||gdd
  |t j|||gd
dt|||gdd
  |t j|||gddt|||gdd
  |t j|||gd
dt|||gdd
  t jd d d d d f }|t j|| || || |gddt||||gd	d
  tt t||||gd W d    n1 sw   Y  t|||gd tt t||||gd W d    n1 sw   Y  tt t||||gd W d    n	1 sw   Y  tt t||||gd W d    n	1 s&w   Y  tt t||||gd W d    n	1 sEw   Y  tt t||||gd W d    n	1 sdw   Y  t||||gd d S )Nc                  W   s   t j| S r   )r
   random)shaper   r   r   rand?   s   z test_numpy_trivial.<locals>.randc                 S   s6   | j |j ksJ | j|jksJ t| |ksJ d S r   )Zdtyper-   r
   all)r   r   r   r   r   checkB   s   z!test_numpy_trivial.<locals>.check          )Zaxiszh w *r      zh * wz* h wzh *z* wzh w nonexisting_axis *z"some_name_for_H some_name_for_w1 *zh _w *zh_ w *z1h_ w *z1 w *zh h *zh H *)r
   stackr   ZconcatenateZ	index_exppytestraisesr   )	HWr.   r0   rgr   Z
embeddingsir   r   r   test_numpy_trivial>   sb    r=   c                   @   s8   e Zd ZU ejedf ed< eed< dd Zdd Z	dS )	UnpackTestCase.r-   r   c                 C   s   | j  dS )N*)r   splitindexr    r   r   r   dim~   s   zUnpackTestCase.dimc                 C   s   | j |   dksJ d S )N   )r-   rB   r    r   r   r   	selfcheck   s   zUnpackTestCase.selfcheckN)
r'   r(   r)   typingTupleint__annotations__strrB   rD   r   r   r   r   r>   y   s
   
 r>   )rC   r?   )rC      z* seven)rJ   rC   zseven *)rC   r1      z* three four)rK   rC   r1   zfour * three)r1   rK   rC   zthree four *c               	      s~  t D ]9} | j}| j}tj| t dgdgdgg| tt t dgdgdgg|d  W d    n1 s;w   Y  tt t dgdgdgg| W d    n1 s\w   Y  tt t dgdgdgg| W d    n1 s}w   Y  t dgdgdgg| t dgdgdgg| t dgdgdgg| t dgdgdgg|\}}}|j| 	  dksJ tt t
 dgdgdgg| W d    n1 sw   Y  tt t
 dgdgdgg| W d    n1 sw   Y  t ddgddgddgg|}t fd	d
|D sJ t ddgddgddgg|}t fdd
|D s<J t ddgddgddgg|}t fdd
|D sYJ tt t
 ddgdgdgg| W d    n	1 sww   Y  tt t
 ddgdgddgg| W d    n	1 sw   Y  tt t
 ddgdgddgg| W d    n	1 sw   Y  tt t
 ddgddgdgg| W d    n	1 sw   Y  tt t
 ddgddgdgg| W d    n	1 sw   Y  t dgdgdgg| t dgdgdgg| t dgdgdgg| t ddgddgg| qd S )Nr3   r4   z non_existent_axisrK   r1   r   rC   c                 3   (    | ]}t |jt  jd  kV  qdS r4   Nr   r-   .0r:   r   r   r   	<genexpr>      & z.test_pack_unpack_with_numpy.<locals>.<genexpr>c                 3   rM   rN   rO   rP   rR   r   r   rS      rT   c                 3   rM   rN   rO   rP   rR   r   r   rS      rT   )casesr-   r   r
   r,   r   r6   r7   BaseExceptionrB   r   r/   )caser-   r   _lastrsr   rR   r   test_pack_unpack_with_numpy   sf   
r[   c               
   C   s  t dddD ]} td| j  d}tD ]}t}|j}|j}tj|}| 	|}||dgdgdgg| t
t t|dgdgdgg| W d    n1 sSw   Y  t
t t|dgdgdgg| W d    n1 stw   Y  ||dgdgdgg| ||dgdgdgg| ||dgdgdgg| t
t t|dgdgdgg| W d    n1 sw   Y  t
t t|dgdgd	gg| W d    n1 sw   Y  ||ddgddgddgg| ||ddgddgddgg| ||ddgddgddgg| t
t t|ddgdgd	gg| W d    n	1 s*w   Y  t
t t|ddgdgd	dgg| W d    n	1 sNw   Y  t
t t|ddgdgd
dgg| W d    n	1 srw   Y  t
t t|ddgd
dgdgg| W d    n	1 sw   Y  t
t t|d
dgddgdgg| W d    n	1 sw   Y  |r||dgd
gdgg| ||dgd	gdgg| ||dgdgd	gg| ||dgd	gdgg| ||ddgdd	gg| qqd S )NF)ZsymbolicZlayersztest packing against numpy for Tr3   r4   rK   rL   rC   r1   r   )r   printZframework_namerU   r   r-   r   r
   r,   Z
from_numpyr6   r7   rV   r   )backendZcheck_zero_lenrW   r   r-   r   r   r   r   r   test_pack_unpack_against_numpy   sh   

r^   c               
   C   s  ddl m}  dd l}|jdk rt  tD ]}|j}|j}t	j

|}||}dgdgdggdgdgdggdgdgddggddgg ddggfD ]F}t|||}| |||}	t||	D ]\}
}t	|
| |d snJ q]t||\}}| |	|\}}||ksJ t	|| |sJ qIddggdgd	ggdgd	gdggdgddggdgd	gddggfD ]}tt t||| W d    n1 sw   Y  qqd S )
Nr   )	array_apiz2.0.0r3   r4   rL   r1   )r4   r4   r4   rC   )einopsr_   numpy__version__r6   skiprU   r-   r   r
   r,   Zfrom_dlpackr   r	   r   r   r   r7   rV   )ZAAZxprW   r-   r   r   Zx_xpr   Z
x_np_splitZ
x_xp_splitr   r   Zx_agg_npps1Zx_agg_xpr   r   r   r   test_pack_unpack_array_api  sD   


re   )r*   r+   )dataclassesrE   ra   r
   r6   r`   r   r   r   r   Zeinops.testsr   r   rI   r   r   r   r=   	dataclassr>   rU   r[   r^   re   r   r   r   r   <module>   s.    
	;?@