o
    i(                     @   s   d dl m  mZ d dlm  mZ ddlmZ d dlZd dlZddlm	Z	 ddlm
Z
 d dlZddlmZ ddlmZ dd	lmZ d
d Zdd ZdS )    N   )api)registry)Backend   )_make_iskwarg)_raise_on_invalid_version)_allow_ops_in_graphc                     sB   t j t j g} dd l  fdd}dd }| t jj||dS )Nr   c                    s   t |  jS N)
isinstanceTensortensortorch X/home/ubuntu/.local/lib/python3.10/site-packages/einx/_src/frontend/impl/functorchdim.pyis_supported_tensor   s   z0_get_backend_kwargs.<locals>.is_supported_tensorc                 S   s   t dd | jD S )Nc                 s   s    | ]}t |V  qd S r
   )int).0xr   r   r   	<genexpr>   s    z9_get_backend_kwargs.<locals>.get_shape.<locals>.<genexpr>)tupleshaper   r   r   r   	get_shape   s   z&_get_backend_kwargs.<locals>.get_shape)optimizationscompilerr   r   )tracer	optimizerInlineGraphSkipCastr   r   python)r   r   r   r   r   r   _get_backend_kwargs   s
   r"   c                 C   s   t   t| fdd}t }tj }tjjjddd}tjj	| } tj
j| |||jd} |j| } tjj| |jd} tjj| |dd	} t| tjdi t d
}dd l}|j| |S )Nc                 S   s   | dko|| S )Naxisr   )nameiskwargr   r   r   <lambda>   s    zadapt.<locals>.<lambda>zfunctorch.dimftdim)as_)
get_device)expected_typeF)r%   allow_concat)backendr   r   )r   r   adapterTorchDeviceStackr   	signaturer   r!   import_constantnamedtensor_from_functorchdimopr)   namedtensornamedtensor_calltensorfactoryr   einx_from_namedtensorr   typesSimpleNamespacer"   r   allow_in_graph)r3   r%   device_stackr   functorchdimfuncr   r   r   adapt   s   
r=   )einx._src.tracer_srcr   einx._src.adapterr-   r   r7   inspectr,   r   r   	threading_utilr   r   r   r	   r"   r=   r   r   r   r   <module>   s    