o
    i*                     @   s  d dl m  mZ d dlm  mZ ddlmZ ddlmZ d dlZd dlZd dl	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 Zdd Ze e_dd Ze e_dd Zedd Zedde edd Zedde dd Zedde dS )    N   )api)Tensor)partial)registry)Backend   )_make_iskwarg) _make_doc_adapt_numpylike_reduce)%_make_doc_adapt_numpylike_elementwisec                     s   t jjjddd t jj jt jj j	t jj
 jt jj jt j t j g} dd l  fdd}dd }| t jj||d	S )
N
tensorflowtf)as_r   c                    s   t |  jS N)
isinstancer   tensorr    V/home/ubuntu/.local/lib/python3.10/site-packages/einx/_src/frontend/impl/tensorflow.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	signaturepythonimport_	optimizer	classicalSkipReshapereshapeSkipTranspose	transposeSkipBroadcastTobroadcast_toSkipConcatenateconcatInlineGraphSkipCastr   r   )r   r   r   r   r   r   _get_backend_kwargs   s   	r0   c                 C   s   t | fdd}tj }tj|}tjj| } tj	j
| |jd} tj| |} tjj| |jd} tjj
| |d} t| tjdi t dS )Nc                 S      | dko|| S Naxisr   nameiskwargr   r   r   <lambda>'       z(adapt_numpylike_reduce.<locals>.<lambda>expected_typer6   backendr   )r	   r    r!   r   adapterclassical_from_tensorflowopsr"   constant$decomposednamedtensor_from_classicalreducer   &namedtensor_from_decomposednamedtensoropnamedtensor_calltensorfactoryeinx_from_namedtensorr   typesSimpleNamespacer0   rE   r6   r   r%   r   r   r   adapt_numpylike_reduce&   s   
rK   c                 C   s   t | fdd}tj }tj|}tjj| } tj	j
| ||jd} tj| |} tjj| |jd} tjj
| |d} t| tjdi t dS )Nc                 S   r1   r2   r   r4   r   r   r   r7   9   r8   z-adapt_numpylike_elementwise.<locals>.<lambda>r9   r;   r<   r   )r	   r    r!   r   r>   r?   r@   r"   rA   rB   elementwiser   rD   rE   rF   rG   r   rH   rI   r0   rJ   r   r   r   adapt_numpylike_elementwise8   s   
rM   c                    s    fdd}|S )Nc                     sh   t j } tj| } | |\}}tj||}tjj|| jd}tj	|}t
d||ddt S )Nr9   r@   r5   priorityr   )r    r!   r   r>   r?   r@   rD   rF   r   rG   r   r0   )r   r%   decomposednamedtensor_opsr5   namedtensor_opseinx_opscreater   r   
new_createK   s   
z$_backend_creator.<locals>.new_creater   )rU   rV   r   rT   r   _backend_creatorJ   s   rW   c                    s    fddt jjD  fddt jjD B  fddt jjD B  fddt jjD B  fddt jjD B t j t j	 dB }|dfS )	Nc                    "   i | ]}|t jt | qS r   )r>   rB   rL   getattrr   r5   r%   r   r   
<dictcomp>^      " z,create_backend_numpylike.<locals>.<dictcomp>c                        i | ]}|t jt |qS r   )r>   rB   rC   rY   rZ   r[   r   r   r\   _        c                    r^   r   )r>   rB   preserve_shaperY   rZ   r[   r   r   r\   `   r_   c                    rX   r   )r>   rB   argfindrY   rZ   r[   r   r   r\   a   r]   c                    rX   r   )r>   rB   update_at_ravelledrY   rZ   r[   r   r   r\   b   r]   )get_atdottensorflow.numpylike)
r>   r@   rL   rC   r`   ra   	update_atrB   get_at_ravelledrd   )r   r%   rQ   r   r[   r   create_backend_numpylike[   s   

rh   r   re   c                 C   s@   t | }t j|t j|t j|t j|d}|dfS )N)idsummultiplyrd   tensorflow.einsum)r>   einsum_from_tensorflow!decomposednamedtensor_from_einsumri   rj   rk   rd   )r   r%   einsumrQ   r   r   r   create_backend_einsumo   s   




rp   rl   c                  C   s8   t  j} t j}| d|d iB }td|dddt S )Nrd   r   r   rO   r   )rh   r@   rp   r   r0   )einx_ops_numpylikeeinx_ops_einsumrS   r   r   r   create_backend   s   rs   )einx._src.tracer_srcr    einx._src.adapterr>   r   rH   r   inspect	functoolsr   r=   r   r   _utilr	   _docsr
   r   r0   rK   __doc__rM   rW   rh   register_on_importrp   rs   r   r   r   r   <module>   s6    

