o
    wi(                     @   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   V/home/ubuntu/sommelier/.venv/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   capturer_backendcapturer_numpyr   r   r   x_npunpacked_np	packed_np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   )dtyper2   r
   all)r   r   r   r   r   checkB   s   z!test_numpy_trivial.<locals>.check          )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   concatenate	index_exppytestraisesr   )	HWr3   r6   rgr   
embeddingsir   r   r   test_numpy_trivial>   sb    rG   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.r2   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   )r2   rL   r%   r   r   r   	selfcheck   s   zUnpackTestCase.selfcheckN)
r,   r-   r.   typingTupleint__annotations__strrL   rN   r   r   r   r   rH   y   s
   
 rH   )rM   rI   )rM      z* seven)rT   rM   zseven *)rM   r7      z* three four)rU   rM   r7   zfour * three)r7   rU   rM   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 )Nr9   r;   z non_existent_axisrU   r7   r   rM   c                 3   (    | ]}t |jt  jd  kV  qdS r;   Nr   r2   .0rC   r   r   r   	<genexpr>      & z.test_pack_unpack_with_numpy.<locals>.<genexpr>c                 3   rW   rX   rY   rZ   r\   r   r   r]      r^   c                 3   rW   rX   rY   rZ   r\   r   r   r]      r^   )casesr2   r   r
   r1   r   r?   r@   BaseExceptionrL   r   r5   )caser2   r   _lastrsr   r\   r   test_pack_unpack_with_numpy   sf   
re   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)symboliclayersztest packing against numpy for Tr9   r;   rU   rV   rM   r7   r   )r   printframework_namer_   r#   r2   r   r
   r1   
from_numpyr?   r@   r`   r   )backendcheck_zero_lenra   r   r2   r   r   r   r   r   test_pack_unpack_against_numpy   sh   

rm   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.0r9   r;   rV   r7   )r;   r;   r;   rM   )einopsrn   numpy__version__r?   skipr_   r2   r   r
   r1   from_dlpackr   r	   r   r   r   r@   r`   )AAxpra   r2   r   r   x_xpr   
x_np_split
x_xp_splitr   r   x_agg_npps1x_agg_xpr   r   r   r   test_pack_unpack_array_api  sD   


r|   )r/   r0   )dataclassesrO   rp   r
   r?   ro   r   r   r   r   einops.testsr   r   rS   r   r#   r   rG   	dataclassrH   r_   re   rm   r|   r   r   r   r   <module>   s.    
	;?@