o
    ii                     @   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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tinygradr   c                    s   t |  jS N)
isinstancer   tensorr    T/home/ubuntu/.local/lib/python3.10/site-packages/einx/_src/frontend/impl/tinygrad.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permuteSkipBroadcastToexpandSkipConcatenatecatInlineGraphSkipCastr   r   )r   r   r   r   r   r   _get_backend_kwargs   s   	r.   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r4   backendr   )r	   r   r   r   adapterclassical_from_tinygradopsr    constant$decomposednamedtensor_from_classicalreducer   &namedtensor_from_decomposednamedtensoropnamedtensor_calltensorfactoryeinx_from_namedtensorr   typesSimpleNamespacer.   rC   r4   r   r#   r   r   r   adapt_numpylike_reduce&   s   
rI   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   r/   r0   r   r2   r   r   r   r5   9   r6   z-adapt_numpylike_elementwise.<locals>.<lambda>r7   r9   r:   r   )r	   r   r   r   r<   r=   r>   r    r?   r@   elementwiser   rB   rC   rD   rE   r   rF   rG   r.   rH   r   r   r   adapt_numpylike_elementwise8   s   
rK   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 )Nr7   r>   r3   priorityr   )r   r   r   r<   r=   r>   rB   rD   r   rE   r   r.   )r   r#   decomposednamedtensor_opsr3   namedtensor_opseinx_opscreater   r   
new_createK   s   
z$_backend_creator.<locals>.new_creater   )rS   rT   r   rR   r   _backend_creatorJ   s   rU   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<   r@   rJ   getattrr   r3   r#   r   r   
<dictcomp>^      " z,create_backend_numpylike.<locals>.<dictcomp>c                        i | ]}|t jt |qS r   )r<   r@   rA   rW   rX   rY   r   r   rZ   _        c                    r\   r   )r<   r@   preserve_shaperW   rX   rY   r   r   rZ   `   r]   c                    rV   r   )r<   r@   argfindrW   rX   rY   r   r   rZ   a   r[   c                    rV   r   )r<   r@   update_at_ravelledrW   rX   rY   r   r   rZ   b   r[   )get_atdottinygrad.numpylike)
r<   r>   rJ   rA   r^   r_   	update_atr@   get_at_ravelledrb   )r   r#   rO   r   rY   r   create_backend_numpylike[   s   

rf   r   rc   c                 C   s@   t | }t j|t j|t j|t j|d}|dfS )N)idsummultiplyrb   tinygrad.einsum)r<   einsum_from_tinygrad!decomposednamedtensor_from_einsumrg   rh   ri   rb   )r   r#   einsumrO   r   r   r   create_backend_einsumo   s   




rn   rj   c                  C   s8   t  j} t j}| d|d iB }td|dddt S )Nrb   r   r   rM   r   )rf   r>   rn   r   r.   )einx_ops_numpylikeeinx_ops_einsumrQ   r   r   r   create_backend   s   rq   )einx._src.tracer_srcr   einx._src.adapterr<   r   rF   r   inspect	functoolsr   r;   r   r   _utilr	   _docsr
   r   r.   rI   __doc__rK   rU   rf   register_on_importrn   rq   r   r   r   r   <module>   s6    

