o
    i e                     @   s   d Z ddlZddlZddlmZmZ dd Zdd Zdd	 Z	d
d Z
ejdg ddd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )zO
Tests the input parsing for opt_einsum. Duplicates the np.einsum input tests.
    N)contractcontract_pathc                    s|   d}t g d dd t| D  g }| dd} | dd d	}|D ]} fd
d|D }|t jj|  q'|S )N
abcdefghij)
            r   r   r      r   r   c                 S   s   i | ]\}}||qS  r
   ).0csr
   r
   J/var/www/myenv/lib/python3.10/site-packages/opt_einsum/tests/test_input.py
<dictcomp>   s    zbuild_views.<locals>.<dictcomp>z...ijz->r   ,c                    s   g | ]} | qS r
   r
   )r   xsizesr
   r   
<listcomp>   s    zbuild_views.<locals>.<listcomp>)nparrayzipreplacesplitappendrandomrand)stringchars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t gtdg W d    d S 1 sww   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dict)r   r    r
   r
   r   test_type_errors   sR   
$r8   c                   C   sp  t t td W d    n1 sw   Y  t t tdd W d    n1 s.w   Y  t t tdddg W d    n1 sJw   Y  t t tdddg W d    n1 sfw   Y  t t tdddg 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gdg W d    n1 sw   Y  t t tddg W d    n1 sw   Y  t t tdd W d    n	1 s
w   Y  t t tdddg W d    n	1 s'w   Y  t t td	d W d    n	1 sBw   Y  t t td
ddg W d    n	1 s_w   Y  t t tdd W d    n	1 szw   Y  t t tdddg W d    n	1 sw   Y  t t tdddg W d    n	1 sw   Y  t t tdddg W d    n	1 sw   Y  t t tdddg W d    n	1 sw   Y  t t tdddg W d    n	1 sw   Y  t t tdddg W d    n	1 s(w   Y  t t tdddg W d    n	1 sEw   Y  t t tdddg W d    n	1 sbw   Y  t t tdddg W d    n	1 sw   Y  t t tdddgddgg W d    n	1 sw   Y  t t tdtddd W d    n	1 sw   Y  t t tdtddd W d    n	1 sw   Y  t t tdtddd W d    n	1 sw   Y  t t tdddgddggtdddd W d    d S 1 s1w   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->ii->i   r   r'   )r2   r3   r5   r   r4   r   arangereshaper
   r
   r
   r   test_value_errorsT   s   

*$r?   c                   C   s   t t tdddgddggdd W d    n1 sw   Y  t t tdddgddggdd W d    d S 1 s@w   Y  d S )Nr;   r   r<   T)	bad_kwarg)memory_limit)r2   r3   r4   r   r5   r
   r
   r
   r   test_contract_inputs   s   "rC   r   )	...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   rK   c                  C   sL   d} t | }t| g|R ddi}t|d tdgtg}t||s$J d S )NrD   rE   Fr   r$   r   r6   r   rG   rH   r
   r
   r   test_ellipse_input1   s
   rM   c                  C   sH   d} t | }t| g|R ddi}t|d tdg}t||s"J d S )Nz...arE   Fr   rL   rH   r
   r
   r   test_ellipse_input2   s
   rN   c                  C   sN   d} t | }t| g|R ddi}t|d tdgtdg}t||s%J d S )Nr0   rE   Fr   rL   rH   r
   r
   r   test_ellipse_input3   s
   rO   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->...rE   Fr   r<   rL   rH   r
   r
   r   test_ellipse_input4   s
   "rP   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)rE   Tg      $@)r<   r   )r   r   )TFz...ij,...jk->...ikr   )r   onesr   rG   full)pqrI   rJ   rE   res1res2r
   r
   r   "test_singleton_dimension_broadcast   s   



rX   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    )rZ     )r[   i  rQ   r<   r$   r   r   rG   rangeT)r   r   yzstring_output
int_outputr9   transpose_outputr
   r
   r   test_large_int_input_format   s   rd   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 )
NrY   )leftbond1)rf   bond2)rg   right)re   rh   r<   rQ   br1   r\   )	r   r   r_   r`   ra   hash_output1hash_output2r9   rc   r
   r
   r   !test_hashable_object_input_format  s   rl   )__doc__numpyr   r2   
opt_einsumr   r   r$   r8   r?   rC   markparametrizerK   rM   rN   rO   rP   rX   rd   rl   r
   r
   r
   r   <module>   s(    9O	
				