o
    Ei                     @   s   d dl Z d dlZd dlZd dlZd dlZddlmZ g Zi Z	i Z
i Ze Zdd Zdd ZddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ee Zedej edej edej edej edej edej dd Zdd Zdd ZdS )    N   )Backendc                 C   sn   t + | tjv rt|  n| tvrg t| < t|  | W d    d S W d    d S 1 s0w   Y  d S N)locksysmodulesregisterbackend_factoriesappend)module_namebackend_factory r   R/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/einx/backend/register.pyregister_for_module   s   
"r   c                 C   sf   t ' t| tstdt|  | jD ]}| t|< q| t| j	< | W  d    S 1 s,w   Y  d S )Nz3Backend must be an instance of einx.backend.Backend)
r   
isinstancer   
ValueErrorbackendsr
   tensor_typestensortype_to_backendname_to_backendname)backendtyper   r   r   r      s   




$r   )_numpy)_torch)_tensorflow)_jax)_dask)_mlx)	_tinygradtorch
tensorflowjaxz
dask.arraymlxtinygradc                  C   sB   t t D ]} | tjv rt t|  D ]}t|  qt| = qd S r   )listr	   keysr   r   r   )r   factoryr   r   r   _update=   s   
r(   c                    sh   t t d }|d ur|S t  tD ]}t fdd|jD r)t tj	s) nqd S |t t < |S )Nc                 3   s    | ]}t  |V  qd S r   )r   ).0r   tensorr   r   	<genexpr>M   s    z_get1.<locals>.<genexpr>)
r   getr   r(   r   anyr   r   npndarray)r+   r   r   r*   r   _get1E   s   r1   c                 C   s4  t  t| tr1| tv rt|  W  d    S t  | tv r)t|  W  d    S td|  d| }t|dkrFt|d W  d    S d }|D ]4}|d ur~t|}|d ur~|d urt||krt|tkrt|tkrttd|j	 d|j	 |d u s||tkr~|}qJ|d u rtd|W  d    S 1 sw   Y  d S )NzBackend z
 not foundr   r   z'Got tensors with conflicting backends: z and z8Could not determine the backend to use in this operation)
r   r   strr   r(   r   lenr1   numpy__name__)argtensorsr   r+   backend2r   r   r   r-   Y   sJ   

$r-   )r   einx	threading	importlibr4   r/   baser   r   r	   r   r   RLockr   r   r    r   r   r   r   r   r   r   creater(   r1   r-   r   r   r   r   <module>   s<    