o
    "e                     @   s@   d Z ddlZddlmZ g dZedd Zdd	 Zd
d ZdS )zK
Required functions for optimized contractions of numpy arrays using cupy.
    N   )to_backend_cache_wrap)to_cupybuild_expressionevaluate_constantsc                 C   s"   dd l }t| tjr|| S | S )Nr   )cupy
isinstancenpZndarrayZasarray)Zarrayr    r
   8lib/python3.10/site-packages/opt_einsum/backends/cupy.pyr      s   
r   c                    s    fdd}|S )z<Build a cupy function based on ``arrays`` and ``expr``.
    c                     s    j dd | D dd S )Nc                 S      g | ]}t |qS r
   r   .0xr
   r
   r   
<listcomp>       z;build_expression.<locals>.cupy_contract.<locals>.<listcomp>r   )backend)Z	_contractget)Zarraysexprr
   r   cupy_contract   s   z'build_expression.<locals>.cupy_contractr
   )_r   r   r
   r   r   r      s   r   c                 C   s   |dd | D dddS )zcConvert constant arguments to cupy arrays, and perform any possible
    constant contractions.
    c                 S   r   r
   r   r   r
   r
   r   r   #   r   z&evaluate_constants.<locals>.<listcomp>r   T)r   r   r
   )Zconst_arraysr   r
   r
   r   r      s   r   )	__doc__Znumpyr	   Zsharingr   __all__r   r   r   r
   r
   r
   r   <module>   s    
		