o
    2hS                      @   s   d Z ddlmZmZ ddlZddlmZmZ ddlm	Z	 e
dZdedee	 fd	d
Zd!ddZejdeegdeddfddZejdg ddeddfddZd!ddZd!ddZd!ddZd!ddZd!ddZd!ddZd!dd ZdS )"zO
Tests the input parsing for opt_einsum. Duplicates the np.einsum input tests.
    )AnyListN)contractcontract_path)	ArrayTypenumpystringreturnc                    sv   d}t g d}tt|| g }| dd} | dd d}|D ]} fdd	|D }|t jj|  q$|S )
z\Builds random numpy arrays for testing by using a fixed size dictionary and an input string.
abcdefghij)
            r   r   r      r   r   z...ijz->r   ,c                    s   g | ]} | qS  r   ).0xsizesr   V/var/www/html/chatgem/venv/lib/python3.10/site-packages/opt_einsum/tests/test_input.py
<listcomp>   s    zbuild_views.<locals>.<listcomp>)	nparraydictzipreplacesplitappendrandomrand)r   charssizes_arrayviewstermstermdimsr   r   r   build_views   s   r(   c                  C   s  t t tdd W d    n1 sw   Y  t t tdddd W d    n1 s1w   Y  t ttf tdddd W d    n1 sOw   Y  t t tdddd W d    n1 skw   Y  t t tddd	d
 W d    n1 sw   Y  t t tdddd W d    n1 sw   Y  t t td  W d    n1 sw   Y  t t tddd W d    n1 sw   Y  t t tddd W d    n1 sw   Y  t t tddd W d    n	1 sw   Y  t t tddd W d    n	1 s*w   Y  d} t| }t t t|d tdgtdgg W d    n	1 sSw   Y  t t t|d ti gtdg W d    d S 1 svw   Y  d S )Nr    test)outW)orderblah)castingbad_data_type)dtype)bad_arg)?NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNz->,->r   z&,a->za,a->&
...a->...aa)pytestraises	TypeErrorr   
ValueErrorr(   Ellipsis)r   r$   r   r   r   test_type_errors!   sR   
$r:   contract_fnc                 C   sb  t t | d W d    n1 sw   Y  t t | dd W d    n1 s.w   Y  t t | dddg W d    n1 sJw   Y  t t | dddg W d    n1 sfw   Y  t t | dddg W d    n1 sw   Y  t t | d W d    n1 sw   Y  t t | ddd W d    n1 sw   Y  t t | dddgdg W d    n1 sw   Y  t t | ddg W d    n1 sw   Y  t t | dd W d    n	1 s
w   Y  t t | dddg W d    n	1 s'w   Y  t t | d	d W d    n	1 sBw   Y  t t | d
ddg W d    n	1 s_w   Y  t t | dd W d    n	1 szw   Y  t t | dddg W d    n	1 sw   Y  t t | dddg W d    n	1 sw   Y  t t | dddg W d    n	1 sw   Y  t t | dddg W d    n	1 sw   Y  t t | dddg W d    n	1 sw   Y  t t | dddg W d    n	1 s(w   Y  t t | dddg W d    n	1 sEw   Y  t t | dddg W d    n	1 sbw   Y  t t | dddg W d    n	1 sw   Y  t t | dddgddgg W d    n	1 sw   Y  t t | dtddd W d    n	1 sw   Y  t t | dtddd W d    n	1 sw   Y  t t | dtddd W d    n	1 sw   Y  t t | dddgddggdd W d    d S 1 s*w   Y  d S )Nr)   r   zi%...z...j$zi->&r   ir   z...izi...jzi...zij...zi..z.i...zj->..jzj->.j...zi->ijzij->jijiir   r   r   zii->izij->ij   T)	bad_kwarg)r5   r6   r8   r7   r   arangereshape)r;   r   r   r   test_value_errorsZ   s   

$rB   )	...a->...z	a...->...za...a->...az...,...za,bz	...a,...bc                 C   sh   t | }t| g|R ddi}t| g|R  }t||sJ t| g|R ddi}t||s2J d S )NoptimizeFoptimal)r(   r   r   allcloser   r$   einoptr   r   r   test_compare   s   rJ   c                  C   sL   d} t | }t| g|R ddi}t|d tdgtg}t||s$J d S )NrC   rD   Fr   r(   r   r9   r   rF   rG   r   r   r   test_ellipse_input1   s
   rL   c                  C   sH   d} t | }t| g|R ddi}t|d tdg}t||s"J d S )Nz...arD   Fr   rK   rG   r   r   r   test_ellipse_input2   s
   rM   c                  C   sN   d} t | }t| g|R ddi}t|d tdgtdg}t||s%J d S )Nr3   rD   Fr   rK   rG   r   r   r   test_ellipse_input3   s
   rN   c                  C   sX   d} t | }t| g|R ddi}t|d tdg|d tdgtg}t||s*J d S )Nz...b,...a->...rD   Fr   r>   rK   rG   r   r   r   test_ellipse_input4   s
   "rO   c                  C   s   t d} t d}td| |dd}td| |dd}t ||s"J t |ddgs,J t d} t d	}d
D ]'}td| | |df}td| ||d}t ||sSJ t |t dds_J q8d S )N)
   r   )r>   r   zij,ij->jF)rD   Tg      $@)r>   r   )r   r   )TFz...ij,...jk->...ikr   )r   onesr   rF   full)pqrH   rI   rD   res1res2r   r   r   "test_singleton_dimension_broadcast   s   



rW   c                  C   sx   d} t | \}}}t| |||}t|d|d|d}t||s!J tdD ]}t||d |f}t||js9J q%d S )Nab,bc,cd)i    )rY     )rZ   i  rP   r>   r(   r   r   rF   rangeT)r   r   yzstring_output
int_outputr<   transpose_outputr   r   r   test_large_int_input_format   s   rc   c            	      C   s   d} t | \}}}t| |||}t|d|d|d}t|d|d|dd}t||s+J t||s3J tddD ]}t|d| d	| f}t||jsNJ q8d S )
NrX   )leftbond1)re   bond2)rf   right)rd   rg   r>   rP   br4   r[   )	r   r   r^   r_   r`   hash_output1hash_output2r<   rb   r   r   r   !test_hashable_object_input_format  s&   	rk   )r	   N)__doc__typingr   r   r5   
opt_einsumr   r   opt_einsum.typingr   importorskipr   strr(   r:   markparametrizerB   rJ   rL   rM   rN   rO   rW   rc   rk   r   r   r   r   <module>   s,    

9P

	
	
	
	
