B
    `              	   @   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ddddddg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 ddddddddddg
 dd t| D  g }| d	d
} | dd d}x0|D ](} fdd|D }|t jj|  q`W |S )NZ
abcdefghij               c             S   s   i | ]\}}||qS  r	   ).0csr	   r	   J/home/dcms/DCMS/lib/python3.7/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termsZtermZdimsr	   )r   r   build_views   s    
r   c           	   C   s  t t tdd W d Q R X t t tdddd W d Q R X t ttf tdddd W d Q R X t t tdddd W d Q R X t t tddd	d
 W d Q R X t t tdddd W d Q R X t t td  W d Q R X t t tddd W d Q R X t t tddd W d Q R X t t tddd W d Q R X t t tddd W d Q R X d} t| }t t  t|d tdgtdgg W d Q R X t t  t|d tt gtdg W d Q R X 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->&z
...a->...aa)pytestraises	TypeErrorr   
ValueErrorr   Ellipsisdict)r   r   r	   r	   r   test_type_errors   s8    $r+   c            	   C   s  t t td W d Q R X t t tdd W d Q R X t t tdddg W d Q R X t t tdddg W d Q R X t t tdddg W d Q R X t t td W d Q R X t t tddd W d Q R X t t tdddgdg W d Q R X t t tddg W d Q R X t t tdd W d Q R X t t tdddg W d Q R X t t td	d W d Q R X t t td
ddg W d Q R X t t tdd W d Q R X t t tdddg W d Q R X t t tdddg W d Q R X t t tdddg W d Q R X t t tdddg W d Q R X t t tdddg W d Q R X t t tdddg W d Q R X t t tdddg W d Q R X t t tdddg W d Q R X t t tdddg W d Q R X t t tdddgddgg W d Q R X t t tdtddd W d Q R X t t tdtddd W d Q R X t t tdtddd W d Q R X t t. tdddgddggtdddd W d Q R X 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i->i   r   )r!   )r%   r&   r(   r   r'   r   ZarangeZreshaper	   r	   r	   r   test_value_errorsT   sp     """r/   c            	   C   sd   t t  tdddgddggdd W d Q R X t t  tdddgddggdd W d Q R X d S )Nzi->ir   r.   T)Z	bad_kwarg)Zmemory_limit)r%   r&   r'   r   r(   r	   r	   r	   r   test_contract_inputs   s    $r1   r   z	...a->...z	a...->...za...a->...az...,...za,bz	...a,...bc             C   sb   t | }t| f|ddi}t| f| }t||s:tt| f|ddi}t||s^td S )NoptimizeFZoptimal)r   r   r   allcloseAssertionError)r   r   einoptr	   r	   r   test_compare   s    r7   c              C   sJ   d} t | }t| f|ddi}t|d tdgtg}t||sFtd S )Nz	...a->...r2   Fr   )r   r   r)   r   r3   r4   )r   r   r5   r6   r	   r	   r   test_ellipse_input1   s
    r8   c              C   sF   d} t | }t| f|ddi}t|d tdg}t||sBtd S )Nz...ar2   Fr   )r   r   r)   r   r3   r4   )r   r   r5   r6   r	   r	   r   test_ellipse_input2   s
    r9   c              C   sL   d} t | }t| f|ddi}t|d tdgtdg}t||sHtd S )Nz
...a->...ar2   Fr   )r   r   r)   r   r3   r4   )r   r   r5   r6   r	   r	   r   test_ellipse_input3   s
    r:   c              C   sV   d} t | }t| f|ddi}t|d tdg|d tdgtg}t||sRtd S )Nz...b,...a->...r2   Fr   r.   )r   r   r)   r   r3   r4   )r   r   r5   r6   r	   r	   r   test_ellipse_input4   s
    "r;   c              C   s   t d} t d}td| |dd}td| |dd}t ||sDtt |ddgsXtt d} t d	}xVd
D ]N}td| | |df}td| ||d}t ||stt |t ddsrtqrW d S )N)
   r   )r.   r   zij,ij->jF)r2   Tg      $@)r.   r   )r   r   )TFz...ij,...jk->...ikr   )r   Zonesr   r3   r4   full)pqr5   r6   r2   Zres1Zres2r	   r	   r   "test_singleton_dimension_broadcast   s    




r@   c              C   s|   d} t | \}}}t| |||}t|d|d|d}t||sBtx4tdD ](}t||d |f}t||jsLtqLW d S )Nzab,bc,cd)i  i  )i  i  )i  i  r<   r.   )r   r   r   r3   r4   rangeT)r   r   yzstring_outputZ
int_outputr,   transpose_outputr	   r	   r   test_large_int_input_format   s    rG   c        	      C   s   d} t | \}}}t| |||}t|d|d|d}t|d|d|dd}t||sVtt||sftx:tddD ],}t|d| d	| f}t||jsrtqrW d S )
Nzab,bc,cd)leftbond1)rI   bond2)rJ   right)rH   rK   r.   r<   br$   )r   r   r   r3   r4   rA   rB   )	r   r   rC   rD   rE   Zhash_output1Zhash_output2r,   rF   r	   r	   r   !test_hashable_object_input_format  s    rM   )__doc__numpyr   r%   Z
opt_einsumr   r   r   r+   r/   r1   markZparametrizer7   r8   r9   r:   r;   r@   rG   rM   r	   r	   r	   r   <module>   s,   9O					