o
    2h                     @   sD   d Z ddlmZ ddlmZ g dZedd Zdd Zd	d
 ZdS )zIRequired functions for optimized contractions of numpy arrays using cupy.    )has_array_interface)to_backend_cache_wrap)to_cupybuild_expressionevaluate_constantsc                 C   s   dd l }t| r|| S | S )Nr   )cupyr   asarray)arrayr    r
   S/var/www/html/chatgem/venv/lib/python3.10/site-packages/opt_einsum/backends/cupy.pyr   	   s   
r   c                    s    fdd}|S )z7Build 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)	_contractget)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
   )const_arraysr   r
   r
   r   r      s   r   N)	__doc__opt_einsum.helpersr   opt_einsum.sharingr   __all__r   r   r   r
   r
   r
   r   <module>   s    
		