o
    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 )NZ
abcdefghij)
            r   r   r      r   r   c                 S   s   i | ]\}}||qS  r	   ).0csr	   r	   KD:\Projects\ConvertPro\env\Lib\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randomZrand)stringcharsviewsZ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)orderZblah)ZcastingZbad_data_type)Zdtype)Z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   
$r0   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$   )r*   r+   r-   r   r,   r   ZarangeZreshaper	   r	   r	   r   test_value_errorsT   s   

*$r5   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 )Nr3   r   r4   T)Z	bad_kwarg)Zmemory_limit)r*   r+   r,   r   r-   r	   r	   r	   r   test_contract_inputs   s   "r7   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optimizeFZoptimal)r!   r   r   allcloser   r   einoptr	   r	   r   test_compare   s   r>   c                  C   sL   d} t | }t| g|R ddi}t|d tdgtg}t||s$J d S )Nr8   r9   Fr   r!   r   r.   r   r:   r;   r	   r	   r   test_ellipse_input1   s
   r@   c                  C   sH   d} t | }t| g|R ddi}t|d tdg}t||s"J d S )Nz...ar9   Fr   r?   r;   r	   r	   r   test_ellipse_input2   s
   rA   c                  C   sN   d} t | }t| g|R ddi}t|d tdgtdg}t||s%J d S )Nr(   r9   Fr   r?   r;   r	   r	   r   test_ellipse_input3   s
   rB   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->...r9   Fr   r4   r?   r;   r	   r	   r   test_ellipse_input4   s
   "rC   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   )r4   r   zij,ij->jF)r9   Tg      $@)r4   r   )r   r   )TFz...ij,...jk->...ikr   )r   Zonesr   r:   full)pqr<   r=   r9   Zres1Zres2r	   r	   r   "test_singleton_dimension_broadcast   s   



rH   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    )rJ     )rK   i  rD   r4   r!   r   r   r:   rangeT)r   r   yzstring_outputZ
int_outputr1   transpose_outputr	   r	   r   test_large_int_input_format   s   rS   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 )
NrI   )leftbond1)rU   bond2)rV   right)rT   rW   r4   rD   br)   rL   )	r   r   rO   rP   rQ   Zhash_output1Zhash_output2r1   rR   r	   r	   r   !test_hashable_object_input_format  s   rY   )__doc__numpyr   r*   Z
opt_einsumr   r   r!   r0   r5   r7   markZparametrizer>   r@   rA   rB   rC   rH   rS   rY   r	   r	   r	   r   <module>   s(    9O	
				