o
    gi-                     @   s  d dl m  mZ d dlmZ d dlZG dd dejZdd ZG dd dejZ	d	d
 Z
G dd dejZdd Zdd Zdd ZG dd dejZdCddZG dd dejZdCddZG dd dejZdCddZG dd  d ejZd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 ZG d3d4 d4ejZG d5d6 d6Z e  Z!G d7d8 d8ejZ"dDd9d:Z#G d;d< d<ejZ$d=d> Z%G d?d@ d@ej&Z'dCdAdBZ(dS )E    N)pytreec                       ,   e Zd Z fddZdd Zdd Z  ZS )GetAttrc                    s@   t |tstdt| t j||gtd || _|| _d S )Nzkey must be str, not inputsoutput)	
isinstancestr	TypeErrortypesuper__init__Valueobjkeyselfr   r   	__class__ _/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/einx/_src/tracer/signature/python.pyr      s
   

zGetAttr.__init__c                 C   s   t || j| jS N)r   r   r   r   	transformr   r   r   _tracer_transform      zGetAttr._tracer_transformc                 C   &   t |tr| j|jko| j|jkS dS NF)r   r   r   r   r   otherr   r   r   __eq__      
zGetAttr.__eq____name__
__module____qualname__r   r   r    __classcell__r   r   r   r   r          r   c                 C      t | |jS r   )r   r   r   r   r   r   r   getattr      r*   c                       r   )GetItemc                    s$   t  j||gtd || _|| _d S Nr   )r   r   r   r   r   r   r   r   r   r      s   
zGetItem.__init__c                 C   s   t || j|| jS r   )r,   r   r   r   r   r   r   r   !   s   zGetItem._tracer_transformc                 C   r   r   )r   r,   r   r   r   r   r   r   r    $   r!   zGetItem.__eq__r"   r   r   r   r   r,      s    r,   c                 C   r(   r   )r,   r   r)   r   r   r   getitem*   r+   r.   c                       r   )
UpdateItemc                    sN   t  j|||gtd t|tstdt| || _|| _|| _	|| _
d S )Nr   zop must be str, not )r   r   r   r   r	   r
   r   r   r   valueop)r   r   r   r0   r1   r   r   r   r   /   s   

zUpdateItem.__init__c                 C   s"   t || j|| j|| j| jS r   )r/   r   r   r0   r1   r   r   r   r   r   8   s   "zUpdateItem._tracer_transformc                 C   >   t |tr| j|jko| j|jko| j|jko| j|jkS dS r   )r   r/   r   r   r0   r1   r   r   r   r   r    ;   s   
0zUpdateItem.__eq__r"   r   r   r   r   r/   .   s    	r/   c                 C      t | ||djS )N=r/   r   r   r   r0   r   r   r   setitemA      r7   c                 C   r3   )Nz+=r5   r6   r   r   r   additemE   r8   r9   c                 C   r3   )Nz-=r5   r6   r   r   r   subtractitemI   r8   r:   c                       r   )Callc                    s   |d u rg }|d u ri }t |ttB stdt |ts td|D ]}t |ts2tdt| q"t j	|gt| t|
  t| td || _t|| _t|| _|| _d S )Nargs must be a list or tuplekwargs must be a dictkey in kwargs must be str, not r   )r   listtuple
ValueErrordictr	   r
   r   r   r   valuesr   functionargskwargsadditional_dependencies)r   rD   rE   rF   rG   kr   r   r   r   N   s"   

.


zCall.__init__c                    sH   t  | j fdd| jD  fdd| j D  fdd| jD S )Nc                       g | ]} |qS r   r   .0argr   r   r   
<listcomp>c       z*Call._tracer_transform.<locals>.<listcomp>c                       i | ]	\}}| |qS r   r   rK   rH   vrM   r   r   
<dictcomp>d       z*Call._tracer_transform.<locals>.<dictcomp>c                    rI   r   r   rK   deprM   r   r   rN   e   rO   )r;   rD   rE   rF   itemsrG   r   r   rM   r   r   `   s   zCall._tracer_transformc                 C   r2   r   )r   r;   rD   rE   rF   rG   r   r   r   r   r    h   s   



zCall.__eq__r"   r   r   r   r   r;   M   s    r;   c                 C   s   t | ||tt jS r   )r;   r?   tracerget_additional_dependenciesr   )funcrE   rF   r   r   r   calls   s   r[   c                       r   )CallInplacec                    s   |d u rg }|d u ri }t |tjstdt |ttB s!tdt |ts*td|D ]}t |ts<tdt	| q,t
 j||gt| t|  t| |jd || _|| _t|| _t|| _|| _d S )Nzfunction must be Tracerr<   r=   r>   r   )r   rX   TracerrA   r?   r@   rB   r	   r
   r   r   r   rC   _tracer_typexsrD   rE   rF   rG   )r   r_   rD   rE   rF   rG   rH   r   r   r   r   x   s(   

2


zCallInplace.__init__c                    sP   t  | j | j fdd| jD  fdd| j D  fdd| jD S )Nc                    rI   r   r   rJ   rM   r   r   rN      rO   z1CallInplace._tracer_transform.<locals>.<listcomp>c                    rP   r   r   rQ   rM   r   r   rS      rT   z1CallInplace._tracer_transform.<locals>.<dictcomp>c                    rI   r   r   rU   rM   r   r   rN      rO   )r\   r_   rD   rE   rF   rW   rG   r   r   rM   r   r      s   zCallInplace._tracer_transformc                 C   sJ   t |tr#| j|jko"| j|jko"| j|jko"| j|jko"| j|jkS dS r   )r   r\   r_   rD   rE   rF   rG   r   r   r   r   r       s   




zCallInplace.__eq__r"   r   r   r   r   r\   w   s    	r\   c                 C   s   t | |||tt jS r   )r\   r?   rX   rY   r   )r_   rZ   rE   rF   r   r   r   call_inplace   s   r`   c                       .   e Zd Zd fdd	Zdd Zdd Z  ZS )	ImportNc                    s   t |tstdt| |d ur t |ts tdt| |d ur2t |ts2tdt| |d u r>d|v r>tdt jg td || _|| _	|| _
d S )Nzimport_ must be str, not zfrom_ must be str, not zas_ must be str, not .z.Cannot use '.' in import_ or from_ without as_r   )r   r	   r
   r   rA   r   r   r   import_from_as_)r   rd   re   rf   r   r   r   r      s   

zImport.__init__c                 C   s   t | j| j| jS r   )rb   rd   re   rf   r   r   r   r   r      r   zImport._tracer_transformc                 C   2   t |tr| j|jko| j|jko| j|jkS dS r   )r   rb   rd   re   rf   r   r   r   r   r          
$zImport.__eq__NNr"   r   r   r   r   rb      s    rb   c                 C   s   t | ||jS r   )rb   r   )rd   rf   re   r   r   r   rd         rd   c                       r   )OperatorApplicationc                    sF   t |tstdt| t j|gt| td || _|| _	d S )Nzoperator must be str, not r   )
r   r	   r
   r   r   r   r?   r   operatoroperands)r   rl   rm   r   r   r   r      s
   

zOperatorApplication.__init__c                    s   t | j fdd| jD S )Nc                    rI   r   r   )rK   operandrM   r   r   rN      rO   z9OperatorApplication._tracer_transform.<locals>.<listcomp>)rk   rl   rm   r   r   rM   r   r      s   z%OperatorApplication._tracer_transformc                 C   r   r   )r   rk   rl   rm   r   r   r   r   r       r!   zOperatorApplication.__eq__r"   r   r   r   r   rk      r'   rk   c                 G   r(   r   )rk   r   )rl   rm   r   r   r   rl      r+   rl   c                 C      t d| |S )N+rl   abr   r   r   add   r+   ru   c                 C   ro   )N*rq   rr   r   r   r   mul   r+   rw   c                 C   ro   )N<rq   rr   r   r   r   less   r+   ry   c                 C   ro   )Nz<=rq   rr   r   r   r   
less_equal   r+   rz   c                 C   ro   )N>rq   rr   r   r   r   greater   r+   r|   c                 C   ro   )Nz>=rq   rr   r   r   r   greater_equal   r+   r}   c                 C   ro   )Nz==rq   rr   r   r   r   equal   r+   r~   c                 C   ro   )Nz!=rq   rr   r   r   r   	not_equal   r+   r   c                       r   )Builtinc                    s6   t |tstdt| t jg td || _d S )Nzname must be str, not r   )r   r	   r
   r   r   r   r   namer   r   r   r   r   r      s   

zBuiltin.__init__c                 C   
   t | jS r   )r   r   r   r   r   r   r         
zBuiltin._tracer_transformc                 C      t |tr| j|jkS dS r   )r   r   r   r   r   r   r   r         
zBuiltin.__eq__r"   r   r   r   r   r      s    r   c                   @   s   e Zd Zdd ZdS )Builtinsc                 C   s
   t |jS r   )r   r   r   r   r   r   __getattr__  r   zBuiltins.__getattr__N)r#   r$   r%   r   r   r   r   r   r     s    r   c                       ra   )	AssertNc                    sf   t  jtt |g  fddd  | _|| _|| _|d ur/t|t	s1t
dt| d S d S )Nc                    s   t  fddS )Nc                    s
   |   S r   )r^   )xoriginr   r   <lambda>  s   
 z3Assert.__init__.<locals>.<lambda>.<locals>.<lambda>)r   mapr   r_   r   r   r     rO   z!Assert.__init__.<locals>.<lambda>r   z!message must be str or None, not )r   r   r?   r   flattenr_   	conditionmessager   r	   r
   r   )r   r_   r   r   r   r   r   r     s   (zAssert.__init__c                 C   s   t t|| j|| j| jS r   )r   r   r   r_   r   r   r   r   r   r   r     s   zAssert._tracer_transformc                 C   rg   r   )r   r   r_   r   r   r   r   r   r   r      rh   zAssert.__eq__r   r"   r   r   r   r   r     s    r   c                 C   s   t | ||jS r   )r   r   )r_   r   r   r   r   r   assert_!  rj   r   c                       r   )Constantc                    s   t  jg td || _d S r-   )r   r   r   r0   )r   r0   r   r   r   r   &  s   
zConstant.__init__c                 C   r   r   )r   r0   r   r   r   r   r   *  r   zConstant._tracer_transformc                 C   r   r   )r   r   r0   r   r   r   r   r    -  r   zConstant.__eq__r"   r   r   r   r   r   %  s    r   c                 C   s
   t | jS r   )r   r   )r0   r   r   r   constant3  r   r   c                       sH   e Zd Z fddZedd Zdd Zdd Zd	d
 Zdd Z	  Z
S )r   c                    s   t  j|d d S )Nr   )r   r   )r   r   r   r   r   r   8  r   zValue.__init__c                 C   s   t S r   )r   )r   r   r   r   r^   ;  s   zValue._tracer_typec                 C   r   r   )r   r   r   r   r   r   r   r    ?  r   zValue.__eq__c                 C   s*   | dr|drt| |S t| |S )N__)
startswithendswithobject__getattribute__r*   r   r   r   r   r   r   D  s   
zValue.__getattr__c                 C   s
   t | |S r   )r.   r   r   r   r   __getitem__J  r   zValue.__getitem__c                 O   s   t | ||S r   )r[   )r   rE   rF   r   r   r   __call__M  r+   zValue.__call__)r#   r$   r%   r   propertyr^   r    r   r   r   r&   r   r   r   r   r   7  s    
r   c           	      C   s  |d u rK|d u rKt | }g }i }|j D ]3}|jt jjt jjfv r/|t	jj
jd d q|jt jjkrBt	jj
jd d||j< qtd|j n|d u rRg }n|d u rXi }t|t|  }|D ]}t|t	jsutdt| qd| |i |}t	j||d}|S )Nr   zUnsupported parameter kind: z,All arguments must be Tracer instances, got r   )inspect	signature
parametersrC   kind	ParameterPOSITIONAL_OR_KEYWORDPOSITIONAL_ONLYappendrX   pythonr   KEYWORD_ONLYr   rA   r?   r   r]   r
   r   Graph)	rZ   rE   rF   r   paraminput_tracersr0   output_tracergraphr   r   r   rD   Q  s.   
rD   ri   r   ))einx._src.tracer_srcrX   einx._src.utilr   r   Applicationr   r*   r,   r.   r/   r7   r9   r:   r;   r[   r\   r`   rb   rd   rk   rl   ru   rw   ry   rz   r|   r}   r~   r   r   r   builtinsr   r   r   r   r]   r   rD   r   r   r   r   <module>   sH    
&
+

