a
    o=ic;                     @   s  d dl Zd dlZd dlmZmZmZmZmZ d dl	m
Z
mZmZ zd dlZdZW n eyf   dZY n0 z d dlZe Zdej_dZW n ey   dZY n0 z"d dlZdejd< d dlZdZW n ey   dZY n0 zd dlZdZW n ey   dZY n0 zd dlZdZW n ey,   dZY n0 zd dlZdZ W n eyV   dZ Y n0 g dZ!ej"j#e d	d
ej"$de!dd Z%ej"j#e d	d
ej"$dd dhd dhddhgdd Z&ej"j#e d	d
ej"$de!dd Z'ej"j#e dd
ej"$de!dd Z(ej"j#e dd
ej"$dd dhd dhddhgdd Z)ej"j#e dd
ej"$de!dd Z*ej"j#e dd
ej"$de!dd Z+ej"j#e dd
ej"$dd dhd dhddhgd d! Z,ej"j#e d"d
ej"$de!d#d$ Z-ej"j#e d"d
ej"$dd dhd dhddhgd%d& Z.ej"j#e d"d
d'd( Z/ej"j#e  d)d
d*d+ Z0ej"$de!d,d- Z1ej"$de!d.d/ Z2ej"j#e d0d
ej"$de!d1d2 Z3ej"j#e d0d
ej"$dd dhd dhddhgd3d4 Z4d5d6 Z5ej"$de!d7d8 Z6dS )9    N)backendscontractcontract_expressionhelperssharingShapedinfer_backendparse_backendTFZGNUZMKL_THREADING_LAYER)z	ab,bc->cazabc,bcd,deazabc,def->fedcbazabc,bcd,df->fazijk,ikjzi,j->ijz	ijk,k->ijz	AB,BC->CAzTensorflow not installed.)reasonstringc                 C   s   t | }t| g|R ddd}t|}dd |D }t| g|R ddi}tjtd}|	   ||d|d	 W d    n1 s0    Y  |
  t||sJ d
d |D }||  d S )NFoptimizeZuse_blasc                 S   s   g | ]
}|j qS  shape.0vr   r   o/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/opt_einsum/tests/test_backends.py
<listcomp>D       z#test_tensorflow.<locals>.<listcomp>r   Tconfig
tensorflow)backendoutc                 S   s   g | ]}t |qS r   )r   to_tensorflowr   viewr   r   r   r   O   r   )r   build_viewsr   npZ
empty_liker   tfSession
_TF_CONFIG
as_defaultcloseallclose)r   viewseinoptshpsexprsessZtensorflow_viewsr   r   r   test_tensorflow=   s    


.r.   	constants      c           	         s   d}d}h d  \} fddt |D tjj||  t|g fddtdD R  }t|gR d	 i}tjt	d

  |dd}W d    n1 s0    Y  tdd |jd D sJ t||sJ |dd}t||sJ |t}t|tjsJ d S )Nij,jk,kl->lir1      r5      )r7         r   r0   r1   c                    s(   g | ] \}}| v r t jj| n|qS r   r!   randomrandr   iZshpr/   r   r   r   Y   r   z2test_tensorflow_with_constants.<locals>.<listcomp>c                 3   s"   | ]}| v r| nV  qd S Nr   r   r>   r/   opsvarr   r   	<genexpr>[   r   z1test_tensorflow_with_constants.<locals>.<genexpr>r5   r/   r   r   r   c                 s   s"   | ]}|d u pt |dkV  qd S )Nr   r	   r   arrayr   r   r   rE   b   s   numpy)	enumerater!   r;   r<   r   ranger   r"   r#   r$   r%   all_evaluated_constantsr'   r   r   
isinstanceTensor	r/   eqshapes	non_constres_expr,   res_gotZres_got2Zres_got3r   rB   r   test_tensorflow_with_constantsS   s"    &*rW   c           
   	   C   s6  t | }t| g|R ddd}dd |D }t| g|R ddi}tjtd}|  t	 `}||dd	i}t
 |u sJ t|}|d
ksJ ||dd	i}	t||ksJ W d    n1 s0    Y  W d    n1 s0    Y  tdd | D sJ t||s J t||	s2J d S )NFr   c                 S   s   g | ]
}|j qS r   r   r   r   r   r   r   u   r   z0test_tensorflow_with_sharing.<locals>.<listcomp>r   Tr   r   r   r   c                 s   s   | ]}t |tjV  qd S r@   )rO   r"   rP   r   tr   r   r   rE      r   z/test_tensorflow_with_sharing.<locals>.<genexpr>)r   r    r   r   r"   r#   r$   r%   r   shared_intermediatesget_sharing_cachelenrM   valuesr!   r'   )
r   r(   r)   r+   r,   r-   cacheZtfl1cache_szZtfl2r   r   r   test_tensorflow_with_sharingo   s    
Lr`   zTheano not installed.c                 C   s   t | }t| g|R ddd}dd |D }t| g|R ddi}||ddi}t||sdJ d	d |D }|| }t|tjj	sJ d S )
NFr   c                 S   s   g | ]
}|j qS r   r   r   r   r   r   r      r   ztest_theano.<locals>.<listcomp>r   Tr   theanoc                 S   s   g | ]}t |qS r   )r   	to_theanor   r   r   r   r      r   )
r   r    r   r   r!   r'   rO   ra   tensorTensorVariable)r   r(   r)   r+   r,   r*   Ztheano_viewsZ
theano_optr   r   r   test_theano   s    
re   ztheano not installed.c           	         s   d}d}h d  \} fddt |D tjj||  t|g fddtdD R  }t|gR d	 i}|d
d}tdd |jd
 D sJ t	||sJ |dd}t	||sJ |t
}t|tjjsJ d S )Nr2   r3   r9   c                    s(   g | ] \}}| v r t jj| n|qS r   r:   r=   r?   r   r   r      r   z.test_theano_with_constants.<locals>.<listcomp>c                 3   s"   | ]}| v r| nV  qd S r@   r   rA   rB   r   r   rE      r   z-test_theano_with_constants.<locals>.<genexpr>r5   r/   ra   rF   c                 s   s"   | ]}|d u pt |dkV  qd S )Nra   rG   rH   r   r   r   rE      r   rJ   )rK   r!   r;   r<   r   rL   r   rM   rN   r'   r   rb   rO   ra   rc   rd   rQ   r   rB   r   test_theano_with_constants   s    &rf   c           	      C   s   t | }t| g|R ddd}dd |D }t| g|R ddi}t `}||ddi}t |u snJ t|}|d	ksJ ||ddi}t||ksJ W d    n1 s0    Y  td
d |	 D sJ t
||sJ t
||sJ d S )NFr   c                 S   s   g | ]
}|j qS r   r   r   r   r   r   r      r   z,test_theano_with_sharing.<locals>.<listcomp>r   Tr   ra   r   c                 s   s   | ]}t |tjjV  qd S r@   )rO   ra   rc   rd   rX   r   r   r   rE      r   z+test_theano_with_sharing.<locals>.<genexpr>)r   r    r   r   r   rZ   r[   r\   rM   r]   r!   r'   )	r   r(   r)   r+   r,   r^   Zthn1r_   Zthn2r   r   r   test_theano_with_sharing   s    

.rg   zCupy not installed.c                 C   s   t | }t| g|R ddd}dd |D }t| g|R ddi}||ddi}t||sdJ d	d |D }|| }t|tjsJ t|t	|sJ d S )
NFr   c                 S   s   g | ]
}|j qS r   r   r   r   r   r   r      r   ztest_cupy.<locals>.<listcomp>r   Tr   cupyc                 S   s   g | ]}t |qS r   )r   Zto_cupyr   r   r   r   r      r   )
r   r    r   r   r!   r'   rO   rh   ndarrayZasnumpy)r   r(   r)   r+   r,   r*   Z
cupy_viewsZcupy_optr   r   r   	test_cupy   s    
rj   c           	         s  d}d}h d  \} fddt |D tjj||  t|g fddtdD R  }t|gR d	 i}|d
d}tdd |jd
 D sJ t	||sJ |dd}t	||sJ |t
}t|t
jsJ t	|| sJ d S )Nr2   r3   r9   c                    s(   g | ] \}}| v r t jj| n|qS r   r:   r=   r?   r   r   r      r   z,test_cupy_with_constants.<locals>.<listcomp>c                 3   s"   | ]}| v r| nV  qd S r@   r   rA   rB   r   r   rE      r   z+test_cupy_with_constants.<locals>.<genexpr>r5   r/   rh   rF   c                 s   s"   | ]}|d u pt |dkV  qd S )Nrh   rG   rH   r   r   r   rE      r   rJ   )rK   r!   r;   r<   r   rL   r   rM   rN   r'   rh   ZasarrayrO   ri   getrQ   r   rB   r   test_cupy_with_constants   s    &rl   zjax not installed.c                 C   sx   t | }t| g|R ddd}dd |D }t| g|R ddi}||ddi}t||sdJ t|tjstJ d S )	NFr   c                 S   s   g | ]
}|j qS r   r   r   r   r   r   r      r   ztest_jax.<locals>.<listcomp>r   Tr   jax)r   r    r   r   r!   r'   rO   ri   )r   r(   r)   r+   r,   r*   r   r   r   test_jax   s    
rn   c                    s   d}d}h d  \} fddt |D tjj||  t|g fddtdD R  }t|gR d	 i}|d
d}tdd |jd
 D sJ t	||sJ d S )Nr2   r3   r9   c                    s(   g | ] \}}| v r t jj| n|qS r   r:   r=   r?   r   r   r     r   z+test_jax_with_constants.<locals>.<listcomp>c                 3   s"   | ]}| v r| nV  qd S r@   r   rA   rB   r   r   rE     r   z*test_jax_with_constants.<locals>.<genexpr>r5   r/   rm   rF   c                 s   s"   | ]}|d u pt |dkV  qd S )Nrm   rG   rH   r   r   r   rE     r   )
rK   r!   r;   r<   r   rL   r   rM   rN   r'   )r/   rR   rS   rT   rU   r,   rV   r   rB   r   test_jax_with_constants  s    &ro   c            
         s   d} d}dd |D }t | g|R    | }t }||  }|tj|ddksZJ tt fdd}||}td	d
 t||D sJ dd t||D }||  }	|	|k sJ d S )N
ij,jk,kl->r4   r6   )r7   r1   c                 S   s   g | ]}t jj| qS r   r!   r;   Zrandnr   sr   r   r   r      r   z)test_jax_jit_gradient.<locals>.<listcomp>gh㈵>)relc                    s    |  S r@   r   r(   r,   r   r   <lambda>)  r   z'test_jax_jit_gradient.<locals>.<lambda>c                 s   s   | ]\}}|j |j kV  qd S r@   r   r   v1v2r   r   r   rE   +  r   z(test_jax_jit_gradient.<locals>.<genexpr>c                 S   s   g | ]\}}|d |  qS gMbP?r   r   r   Zdvr   r   r   r   .  r   )	r   rm   ZjititempytestZapproxgradrM   zip)
rR   rS   r(   x0Zjit_exprx1	grad_expr
view_grads	new_viewsZx2r   rw   r   test_jax_jit_gradient  s    
r   zautograd not installed.c                     s   d} d}dd |D }t | g|R    | }t fdd}||}tdd t||D sdJ d	d t||D } | }||k sJ d S )
Nrp   rq   c                 S   s   g | ]}t jj| qS r   rr   rs   r   r   r   r   7  r   z*test_autograd_gradient.<locals>.<listcomp>c                    s    |  S r@   r   rv   rw   r   r   rx   <  r   z(test_autograd_gradient.<locals>.<lambda>c                 s   s   | ]\}}|j |j kV  qd S r@   r   ry   r   r   r   rE   >  r   z)test_autograd_gradient.<locals>.<genexpr>c                 S   s   g | ]\}}|d |  qS r|   r   r}   r   r   r   r   A  r   )r   autogradr   rM   r   )rR   rS   r(   r   r   r   r   r   r   rw   r   test_autograd_gradient3  s    r   c                    s   t d t| }t| g|R ddd}dd |D }t| g|R ddi} fdd|D }|| }t| jszJ t	|t
|sJ t| g|R  }t| jsJ t	|t
|sJ d S )	Nz
dask.arrayFr   c                 S   s   g | ]
}|j qS r   r   r   r   r   r   r   L  r   ztest_dask.<locals>.<listcomp>r   Tc                    s   g | ]} j |d dqS )r1   )chunks)Z
from_arrayr   xdar   r   r   P  r   )r   importorskipr   r    r   r   rO   Arrayr!   r'   rI   )r   r(   r)   r+   r,   Zda_viewsZda_optr   r   r   	test_daskF  s    

r   c           	         s   t d t| }|D ]4}tjd tjddg|jdddg}d||< qt	| g|R ddd}d	d
 |D }t
| g|R ddi} fdd
|D }|| }t| jsJ t|| sJ t	| g|R  }t| jsJ t|| sJ d S )Nsparse*   FTg?gffffff?r   r   c                 S   s   g | ]
}|j qS r   r   r   r   r   r   r   k  r   ztest_sparse.<locals>.<listcomp>r   c                    s   g | ]} j |qS r   )COOZ
from_numpyr   r   r   r   r   o  r   )r   r   r   r    r!   r;   seedchoicer   r   r   rO   r   r'   Ztodense)	r   r(   r   maskr)   r+   r,   Zsparse_viewsZ
sparse_optr   r   r   test_sparse^  s     


r   zTorch not installed.c                 C   s   t | }t| g|R ddd}dd |D }t| g|R ddi}||ddi}t||sdJ d	d |D }|| }t|tjsJ t||	 
 sJ d S )
NFr   c                 S   s   g | ]
}|j qS r   r   r   r   r   r   r     r   ztest_torch.<locals>.<listcomp>r   Tr   torchc                 S   s   g | ]}t |qS r   )r   to_torchr   r   r   r   r     r   )r   r    r   r   r!   r'   rO   r   rP   cpurJ   )r   r(   r)   r+   r,   r*   Ztorch_viewsZ	torch_optr   r   r   
test_torch}  s    
r   c           	         s   d}d}h d  \} fddt |D tjj||  t|g fddtdD R  }t|gR d	 i}|d
d}tdd |jd
 D sJ t	||sJ |dd}t	||sJ |t
}t|tjsJ |jjdkr| n
|  }t	||sJ d S )Nr2   r3   r9   c                    s(   g | ] \}}| v r t jj| n|qS r   r:   r=   r?   r   r   r     r   z-test_torch_with_constants.<locals>.<listcomp>c                 3   s"   | ]}| v r| nV  qd S r@   r   rA   rB   r   r   rE     r   z,test_torch_with_constants.<locals>.<genexpr>r5   r/   r   rF   c                 s   s"   | ]}|d u pt |dkV  qd S )Nr   rG   rH   r   r   r   rE     r   rJ   r   )rK   r!   r;   r<   r   rL   r   rM   rN   r'   r   r   rO   r   rP   ZdevicetyperJ   r   rQ   r   rB   r   test_torch_with_constants  s     & r   c                  C   s0   t d} t| dksJ t| gddks,J d S )N)r0   r1   r5   
opt_einsumautorJ   r   )r   r   r   r   +test_auto_backend_custom_array_no_tensordot  s    r   c                 C   s   t | }t| g|R ddd}|jtks0J dd |D }t| g|R ddi}dd |D }t| g|R dd	i}|jtksJ t||t	sJ ||dd	i}|jtksJ t||t	sJ d S )
NFr   c                 S   s   g | ]
}|j qS r   r   r   r   r   r   r     r   z.test_object_arrays_backend.<locals>.<listcomp>r   Tc                 S   s   g | ]}| tqS r   )astypeobjectr   r   r   r   r     r   r   r   )
r   r    r   Zdtyper   r   r!   r'   r   float)r   r(   r)   r+   r,   Z	obj_viewsZobj_optr   r   r   test_object_arrays_backend  s    
r   )7rJ   r!   r   r   r   r   r   r   r   Zopt_einsum.contractr   r	   r
   rh   Z
found_cupyImportErrorr   r"   ZConfigProtor$   Zgpu_optionsZallow_growthZfound_tensorflowosenvironra   Zfound_theanor   Zfound_torchrm   Z	found_jaxr   Zfound_autogradtestsmarkZskipifZparametrizer.   rW   r`   re   rf   rg   rj   rl   rn   ro   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s   










