o
    ii                     @   sV   d dl m  mZ d dlm  m  mZ ddlmZ G dd dZG dd dZ	dS )    N   _skip_idc                   @   s   e Zd Zdd ZdS )InlineGraphc                    s   t |tjrSt|j t  tjrSt  jtjjj	rSt
 jjdkrSdd  jjD }|j}dd |D dd |D kr>dS t fdd|D rKdS d| jjfS dS )	Nr   c                 S      g | ]}t |qS  r   .0ir   r   T/home/ubuntu/.local/lib/python3.10/site-packages/einx/_src/tracer/optimizer/graph.py
<listcomp>       z(InlineGraph.__call__.<locals>.<listcomp>c                 S   r   r   )idr   r   r   r   r      r   FNc                 3   s     | ]}t  jj|V  qd S N)tracer
depends_onoriginfunction)r	   inputoutputr   r   	<genexpr>   s    z'InlineGraph.__call__.<locals>.<genexpr>T)
isinstancer   Graphr   r   Tracerr   	signaturepythonCalllenkwargsargsinputsanyr   )selfx	transformfunction_inputsgraph_inputsr   r   r   __call__   s   
.zInlineGraph.__call__N)__name__
__module____qualname__r)   r   r   r   r   r      s    r   c                   @   s   e Zd Zdd Zdd ZdS )SkipCastc                 C   s   t |tjot |jtjS r   )r   r   r   r   Cast)r$   r%   r   r   r   _is_result_of_call   s   zSkipCast._is_result_of_callc                 C   sR   |  |r'|jj}|jj}tdd |}tdd |}||kr'd||fS dS )Nc                 S   
   |  d S r   _tracer_typer%   r   r   r   <lambda>#      
 z#SkipCast.__call__.<locals>.<lambda>c                 S   r0   r   r1   r3   r   r   r   r4   $   r5   Tr   )r/   r   r   r   pytreemap)r$   r%   r&   r   r   input_signatureoutput_signaturer   r   r   r)      s   
zSkipCast.__call__N)r*   r+   r,   r/   r)   r   r   r   r   r-      s    r-   )
einx._src.tracer_srcr   einx._src.util.pytreeutilr6   _utilr   r   r-   r   r   r   r   <module>   s
    