a
    o=ic                     @   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|  qN|S )NZ
abcdefghij)
            r   r   r      r   r   c                 S   s   i | ]\}}||qS  r	   ).0csr	   r	   l/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/opt_einsum/tests/test_input.py
<dictcomp>       zbuild_views.<locals>.<dictcomp>z...ijz->r   ,c                    s   g | ]} | qS r	   r	   )r
   xsizesr	   r   
<listcomp>   r   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*0    Y  t t tdddd W d    n1 sb0    Y  t ttf tdddd W d    n1 s0    Y  t t tdddd W d    n1 s0    Y  t t tddd	d
 W d    n1 s0    Y  t t tdddd W d    n1 sJ0    Y  t t td  W d    n1 s~0    Y  t t tddd W d    n1 s0    Y  t t tddd W d    n1 s0    Y  t t tddd W d    n1 s&0    Y  t t tddd W d    n1 s^0    Y  d} t| }t t* t|d tdgtdgg W d    n1 s0    Y  t t* t|d tt gtdg W d    n1 s0    Y  d S )Nr    testoutW)orderZblah)ZcastingZbad_data_type)Z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   s8    (,,,..(,,,,:r2   c                   C   sx  t t td W d    n1 s(0    Y  t t tdd W d    n1 s\0    Y  t t tdddg W d    n1 s0    Y  t t tdddg W d    n1 s0    Y  t t tdddg W d    n1 s0    Y  t t td W d    n1 s:0    Y  t t tddd W d    n1 sr0    Y  t t" tdddgdg W d    n1 s0    Y  t t tddg W d    n1 s0    Y  t t tdd W d    n1 s0    Y  t t tdddg W d    n1 sX0    Y  t t td	d W d    n1 s0    Y  t t td
ddg W d    n1 s0    Y  t t tdd W d    n1 s0    Y  t t tdddg W d    n1 s80    Y  t t tdddg W d    n1 sr0    Y  t t tdddg W d    n1 s0    Y  t t tdddg W d    n1 s0    Y  t t tdddg W d    n1 s 0    Y  t t tdddg W d    n1 sZ0    Y  t t tdddg W d    n1 s0    Y  t t tdddg W d    n1 s0    Y  t t tdddg W d    n1 s0    Y  t t& tdddgddgg W d    n1 sJ0    Y  t t( tdtddd W d    n1 s0    Y  t t( tdtddd W d    n1 s0    Y  t t( tdtddd W d    n1 s0    Y  t t8 tdddgddggtdddd W d    n1 sj0    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   sp    &(,,.(,2,*.*.*.........6888r7   c                   C   s   t t* tdddgddggdd W d    n1 s:0    Y  t t* tdddgddggdd W d    n1 s~0    Y  d S )Nr5   r   r6   T)Z	bad_kwarg)Zmemory_limit)r,   r-   r.   r   r/   r	   r	   r	   r   test_contract_inputs   s    8r9   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||sdJ 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||sHJ d S )Nr:   r;   Fr   r"   r   r0   r   r<   r=   r	   r	   r   test_ellipse_input1   s
    rB   c                  C   sH   d} t | }t| g|R ddi}t|d tdg}t||sDJ d S )Nz...ar;   Fr   rA   r=   r	   r	   r   test_ellipse_input2   s
    rC   c                  C   sN   d} t | }t| g|R ddi}t|d tdgtdg}t||sJJ d S )Nr*   r;   Fr   rA   r=   r	   r	   r   test_ellipse_input3   s
    rD   c                  C   sX   d} t | }t| g|R ddi}t|d tdg|d tdgtg}t||sTJ d S )Nz...b,...a->...r;   Fr   r6   rA   r=   r	   r	   r   test_ellipse_input4   s
    "rE   c                  C   s   t d} t d}td| |dd}td| |dd}t ||sDJ t |ddgsXJ t d} t d	}d
D ]N}td| | |df}td| ||d}t ||sJ t |t ddspJ qpd S )N)
   r   )r6   r   zij,ij->jF)r;   Tg      $@)r6   r   )r   r   )TFz...ij,...jk->...ikr   )r   Zonesr   r<   full)pqr>   r?   r;   Zres1Zres2r	   r	   r   "test_singleton_dimension_broadcast   s    



rJ   c                  C   sx   d} t | \}}}t| |||}t|d|d|d}t||sBJ tdD ](}t||d |f}t||jsJJ qJd S )Nab,bc,cd)i    )rL     )rM   i  rF   r6   r"   r   r   r<   rangeT)r   r   yzstring_outputZ
int_outputr3   transpose_outputr	   r	   r   test_large_int_input_format   s    rU   c            	      C   s   d} t | \}}}t| |||}t|d|d|d}t|d|d|dd}t||sVJ t||sfJ tddD ],}t|d| d	| f}t||jspJ qpd S )
NrK   )leftbond1)rW   bond2)rX   right)rV   rY   r6   rF   br+   rN   )	r   r   rQ   rR   rS   Zhash_output1Zhash_output2r3   rT   r	   r	   r   !test_hashable_object_input_format  s    r[   )__doc__numpyr   r,   Z
opt_einsumr   r   r"   r2   r7   r9   markZparametrizer@   rB   rC   rD   rE   rJ   rU   r[   r	   r	   r	   r   <module>   s&   9O	
				