B
    d              	   @   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	   M/var/www/html/venv/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terms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     """r0   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    $r2   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    r8   c              C   sJ   d} t | }t| f|ddi}t|d tdgtg}t||sFtd S )Nz	...a->...r3   Fr   )r   r   r*   r   r4   r5   )r   r   r6   r7   r	   r	   r   test_ellipse_input1   s
    r9   c              C   sF   d} t | }t| f|ddi}t|d tdg}t||sBtd S )Nz...ar3   Fr   )r   r   r*   r   r4   r5   )r   r   r6   r7   r	   r	   r   test_ellipse_input2   s
    r:   c              C   sL   d} t | }t| f|ddi}t|d tdgtdg}t||sHtd S )Nz
...a->...ar3   Fr   )r   r   r*   r   r4   r5   )r   r   r6   r7   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->...r3   Fr   r/   )r   r   r*   r   r4   r5   )r   r   r6   r7   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)r3   Tg      $@)r/   r   )r   r   )TFz...ij,...jk->...ikr   )r   Zonesr   r4   r5   full)pqr6   r7   r3   Zres1Zres2r	   r	   r   "test_singleton_dimension_broadcast   s    




rA   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   r4   r5   rangeT)r   r   yzstring_outputZ
int_outputr-   transpose_outputr	   r	   r   test_large_int_input_format   s    rH   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)rJ   bond2)rK   right)rI   rL   r/   r=   br%   )r   r   r   r4   r5   rB   rC   )	r   r   rD   rE   rF   Zhash_output1Zhash_output2r-   rG   r	   r	   r   !test_hashable_object_input_format  s    rN   )__doc__numpyr   r&   Z
opt_einsumr   r   r   r,   r0   r2   markZparametrizer8   r9   r:   r;   r<   rA   rH   rN   r	   r	   r	   r   <module>   s,   9O					