o
    j?                     @   sX   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
dd Zdd ZdS )zf
Tets a series of opt_einsum contraction paths to ensure the results are the same for different paths
    N)contractcontract_expressionc               	   C   s  t t tddddd W d    n1 sw   Y  t t tdddd W d    n1 s4w   Y  td} t t tddd| d W d    n1 sVw   Y  tddd}t t}|tjd	d
 W d    n1 szw   Y  dt|j	v sJ t t}|tjd	d
tjd	d
tjd	d
 W d    n1 sw   Y  dt|j	v sJ t t}|tjd	d
dtjd
d W d    n1 sw   Y  dt|j	v sJ t t}|tjd	dtjd
dd W d    n	1 s
w   Y  dt|j	v sJ t t}|tjd	d
tjd
dtjd	ddd W d    n	1 sAw   Y  dt|j	v sPJ t t}|tjd	d
tjd
ddd W d    n	1 srw   Y  dt|j	v sJ d S )Nz	ab,bc->ac)      )r      Foptimize)*   r	   )r   r   )outr   r   z$`ContractExpression` takes exactly 2r   z4Internal error while evaluating `ContractExpression`      F)orderz6only valid keyword arguments to a `ContractExpression`)
pytestZraises
ValueErrorr   npemptyrandomrandstrvalue)r
   exprerr r   a/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/opt_einsum/tests/test_edge_cases.pytest_contract_expression_checks   sF   
,""0$r   c            	      C   s   t jddd} t jdd}t jdd}t jd}td| ||dd}td| ||d	d}t ||s6J || }td
| |||dd}td
| |||d	d}t ||sVJ t ||s^J d S )N   r   r   r   
   z	ijk,kl,jlFr   Tzijk,kl,jl,i->ir   r   r   r   allclose	abcdZ
ein_scalarZ
opt_scalarresulteinoptr   r   r   test_broadcasting_contraction7   s   r(   c            	      C   s   t jdddd} t jdd}t jdd}t jdd}td| ||dd}td| ||d	d}t ||s8J || }td
| |||dd}td
| |||d	d}t ||sXJ t ||s`J d S )Nr   r   r   r      z
abjk,kl,jlFr   Tzabjk,kl,jl,ab->abr   r    r   r   r   test_broadcasting_contraction2K   s   r*   c                  C   sx   t jddd} t jddd}t jdd}t jdd}td| |||dd}td| |||d	d}t ||s:J d S )
Nr   r   r   r   r)   zajk,kbl,jl,ab->abFr   Tr   )r!   r"   r#   r$   r&   r'   r   r   r   test_broadcasting_contraction3_   s   r+   c                  C   sH   t dddd} td| | dd}td| | dd}t ||s"J d S )	N@   r   r      zobk,ijk->iojFr   T)r   ZarangeZreshaper   r   )r!   r&   r'   r   r   r   test_broadcasting_contraction4l   s   r.   c                  C   sj   t dddd} | jd d dksJ | jd d d	u sJ | jd
 d dks(J | jd
 d dks3J d S )Nzab,bc,bd->acd)r   r   )r   r   )r      r   r   z
bc,ab->bcaFr   zbca,bd->acdZGEMM)r   Zcontraction_list)r   r   r   r   ,test_can_blas_on_healed_broadcast_dimensionsu   s
   r1   )__doc__numpyr   r   Z
opt_einsumr   r   r   r(   r*   r+   r.   r1   r   r   r   r   <module>   s    ,	