
    PiJ                         d dl Z ddlT ddlT ddlmZ d dlmZ  G d d          Z G d d	          Zd
 Z G d d          Z	 G d d          Z
 G d d          ZdS )    N   )*)optimize)partialc                   6    e Zd ZddZd Zd Zd Zd	dZd ZdS )
	VariablesNc                     i | _         || _        g | _        | j        !| j        j                            |            d S d S N)	variablesparentchildrenappend)selfr   s     g/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/einx/tracer/compile.py__init__zVariables.__init__	   sF    {"K ''----- #"    c                 "    t          |           S )Nr   )r   r   s    r   forkzVariables.fork   s    %%%%r   c                 8    || j         v p| j        d uo|| j        v S r
   r   r   r   names     r   __contains__zVariables.__contains__   s'    t~%ZdkT.A*YddkFYZr   c                 b    || j         v rdS | j        || j        v rdS | j        D ]	}||v r dS 
dS )NFT)r   r   r   )r   r   childs      r   _is_freezVariables._is_free   sX    4>!!5{"tt{':':5] 	 	Eu}}uu tr   c                     |'|J || v rt          d| d          || j        |<   |S |J d}|                     | | x}          s |dz  }|                     | | x}           || j        |<   |S )NzVariable name 'z' already existsr   r   )
ValueErrorr   r   )r   valueprefixr   is        r   addzVariables.add    s    >###t|| !I4!I!I!IJJJ#(DN4 K<<<AmmvNqNN$:D;; Q mmvNqNN$:D;; #(DN4 Kr   c                 |    || j         v r| j         |         S | j        | j        |         S t          d| d          )Nz
Variable 'z' is not set)r   r   r    r   s     r   __getitem__zVariables.__getitem__/   sK    4>!!>$''{";t$$8d888999r   r
   )NN)	__name__
__module____qualname__r   r   r   r   r$   r&    r   r   r   r      s{        . . . .& & &[ [ [     : : : : :r   r   c                   B    e Zd Zd Zd Zed             Zd Zd Zd Z	dS )Blockc                 0    || _         || _        g | _        d S r
   )r   r   code)r   r   r   s      r   r   zBlock.__init__8   s    "			r   c                 Z    |j         | u p"|j         d uo|                     |j                   S r
   )r   is_parent_of)r   others     r   r0   zBlock.is_parent_of=   s5    |t# 
$H):):5<)H)H	
r   c                 4    | }|j         |j         }|j         |S r
   r   )r   blocks     r   
root_blockzBlock.root_blockB   s%    l&LE l&r   c                     | j         d u S r
   r   r   s    r   is_rootzBlock.is_rootI   s    {d""r   c                    g }| j         D ]u}t          |t                    r|                    |           -t          |t                    sJ |                    d |                                D                        v|S )Nc              3       K   | ]	}d | V  
dS )z    Nr*   ).0lines     r   	<genexpr>z*Block.get_lines_of_code.<locals>.<genexpr>S   s9        &*M4MM     r   )r.   
isinstancestrr   r,   extendget_lines_of_code)r   linesr   s      r   r?   zBlock.get_lines_of_codeL   s    Y 	 	E%%% U####!%/////  .3.E.E.G.G       r   c                 P    d                     |                                           S )N
)joinr?   r   s    r   __str__zBlock.__str__Y   s     yy//11222r   N)
r'   r(   r)   r   r0   propertyr4   r6   r?   rD   r*   r   r   r,   r,   7   sz          

 
 

   X# # #  3 3 3 3 3r   r,   c                    t          | t                    sJ d}| d         dk    o| d         dk    }|rJt          |           D ]:\  }}|dk    r|dz  }|dk    r#|dz  }|dk    r|t          |           dz
  k    } n;|r
| dd         } | S )Nr   ()r   )r<   r=   	enumeratelen)slevelcan_remove_parenthesesr#   cs        r   _remove_parenthesesrP   ]   s    aEqTS[9QrUc\ aLL 	 	DAqCxx
c
A::-.#a&&1*_*E adGHr   c                       e Zd Zd Zed             Zed             Zed             Zed             Zd Z	d Z
d Zd	 Zd
S )
Definitionc                 >    || _         || _        || _        d| _        d S )NF)_value_block_codeoverwritten)r   r!   r3   r.   s       r   r   zDefinition.__init__p   s%    
 r   c                 <    | j         rt          d          | j        S N'Trying to access overwritten definition)rW   r    rT   r   s    r   r!   zDefinition.valuev   %     	HFGGG{r   c                 <    | j         rt          d          | j        S rY   )rW   r    rU   r   s    r   r3   zDefinition.block|   r[   r   c                 <    | j         rt          d          | j        S rY   )rW   r    rV   r   s    r   r.   zDefinition.code   s%     	HFGGGzr   c                     | j         rt          d          |                                 st          d          | j        S )NrZ   z0Trying to access name of non-variable definition)rW   r    is_variablerV   r   s    r   r   zDefinition.name   sI     	HFGGG!! 	QOPPPzr   c                 r    | j         rt          d          | j        d uo| j                                        S rY   )rW   r    rV   isidentifierr   s    r   r_   zDefinition.is_variable   s=     	HFGGG:%C$**A*A*C*CCr   c                 |    | j         rt          d          t          | j        t          t
          t          f          S rY   )rW   r    r<   r!   tuplelistdictr   s    r   	is_pytreezDefinition.is_pytree   s6     	HFGGG$*udD&9:::r   c                     | j         S r
   )rW   r   s    r   is_overwrittenzDefinition.is_overwritten   s    r   c                     | j         rt          d          |                                 st          d          d| _         t          || j        | j                  S )Nz$Trying to overwrite definition twicez+Trying to overwrite non-variable definitionTr.   )rW   r    r_   rR   rU   rV   )r   	new_values     r   	overwritezDefinition.overwrite   sb     	ECDDD!! 	LJKKK)T[tzBBBBr   N)r'   r(   r)   r   rE   r!   r3   r.   r   r_   rf   rh   rl   r*   r   r   rR   rR   o   s        ! ! !   X
   X
   X
   XD D D
; ; ;
     C C C C Cr   rR   c                   J    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )
CodeObjectc           	          t          t                      d            _        i  _        g  _        t          |           _        t          j        	                     fd|           _
        t           j                   _         j        D ]`}d|j         dt          t          |j                             }t          |j                  }d|vr|d| z  }|dz    j        z    _        ad  j        D             t!           j                   t          j        	                    fd j
                   _        d S )	Nr   c                 8                         |           j        S r
   )get_definition_ofr   )xr   s    r   <lambda>z%CodeObject.__init__.<locals>.<lambda>   s    t7M7Ma7P7P7U r   z# z: rB    = c                 (    i | ]}|j         |j        S r*   )r   r!   )r9   
definitions     r   
<dictcomp>z'CodeObject.__init__.<locals>.<dictcomp>   s    ]]]
*/:+;]]]r   c                     |          S r
   r*   )r   locals_globalss    r   rs   z%CodeObject.__init__.<locals>.<lambda>   s    >$;O r   )r,   r   r4   definitions	constantsUsagesusageseinx	tree_utiltree_mapnamesr=   r.   r   typer!   execoutput)r   objectsrv   r:   	value_strry   s   `    @r   r   zCodeObject.__init__   s>   )++dCCCWoo^,,-U-U-U-UW^__
((	. 	0 	0JH
HH3tJ4D/E/E+F+FHHDJ,--I9$$)i)))tdi/DII]]dn]]]TY777n--.O.O.O.OQUQ[\\r   c                     | j         S r
   rj   r   s    r   rD   zCodeObject.__str__   
    yr   c                 <   t          |          }t          |          dk    r| j        S |d         }|dd          D ]_}t          |          t          |          k    r#|                    |          r|};|                    |          rQt          d          |S )Nr   r   zCannot join blocks)rd   rK   r4   idr0   r    )r   blocksr3   block2s       r   join_blockszCodeObject.join_blocks   s    fv;;!?"q	QRRj 	7 	7F%yyBvJJ&&##F++ 7$$U++ 7 !5666r   c           
          t          |t                    sJ |j        
d|j         nd} fd|j        D             }                     d |D                       d}t          |j        t                    rd|j        j         |j        j        }|j        j         d|j        j         |j        j        }|j        j	        d|j        j	         d	 t          fd
j        D                       s;j                            d|z                                   |j        |           n? j        t!          j        |                             j        t!          |j                  <   d S d }t          |j        t$                    r=d}                     |j        d                   j        }|j        d         }| d| }	nt          |j        t*                    rt-          |j                  dk    r;|j        j        }
                     |j        d                   j        }d|
 | d}	nt-          |j                  dk    rd|j        j        }
                     |j        d                   j        }                     |j        d                   j        }d| d	|
 d	| d}	n-t/          d|j        j         d          t          |j        t0                    r                     |j        d                   j        }                     |j        d                   j        }|j        j        }
                     |j        d                   j        }d| dt3          |           d|
 d	t3          |           d	}	nPt          |j        t4                    r                     |j        d                   j        }|j        d         }t          |t6                    s|f}t          |t6                    sJ t-          |          dk    sJ  fdd                    fd|D                       }| d| d}	n                     |j                  j        }
 fd|j        D              fd|j                                        D             z   }d                    |           }|
 d| d}	t          |j        t>                     }t-          |j                   dk    }|I| oE| oBt-          |	          dk     o/t-           j!        "                    |j                            dk    }|r"|rJ                      |j        |	           nt          |j        t6          tF          f          rtI          d |j        D                       rh|rJ  fd|j        D             }d	                    d |D                       }j        %                    | d t3          |	           |z              n|r|j         D ]|\  }}                     |          } j!        "                    |          }|&                                r|j'        u rt-          |          dk    sJ  (                    ||           }j        %                    t3          |	          |z              nQ )                    |j        d!"          j*        }j        %                    | d t3          |	           |z              |r- fd#}tV          j,        -                    ||j                   d S d S )$Nz  #  c                 :    g | ]}                     |          S r*   rq   )r9   rr   r   s     r   
<listcomp>z2CodeObject.execute_application.<locals>.<listcomp>   s'    OOO4))!,,OOOr   c                     g | ]	}|j         
S r*   r3   r9   ds     r   r   z2CodeObject.execute_application.<locals>.<listcomp>   s    !;!;!;a!'!;!;!;r   Fzimport z as zfrom  c              3   ~   K   | ]7}t          |t                    o|k    p|                    d z             V  8dS )z  #N)r<   r=   
startswith)r9   r:   
import_strs     r   r;   z1CodeObject.execute_application.<locals>.<genexpr>   sg          4%% PZ'N4??:;M+N+N     r   r   Tr   .rG   rI      z*Invalid number of arguments for operator ''[z] c                 H   t          | t                    rfd}| j        |t          | j                  z  }|dz  }| j        |t          | j                  z  }| j        |dt          | j                  z   z  }|S t                              |           j                  S )Nr   :)	r<   slicestartr=   stopsteprP   rq   r.   )rL   rr   r   s     r   slice_to_strz4CodeObject.execute_application.<locals>.slice_to_str  s    a'' OAw*S\\)HAv)S[[(v)S3qv;;..H.t/E/Ea/H/H/MNNNr   , c              3   .   K   | ]} |          V  d S r
   r*   )r9   rL   r   s     r   r;   z1CodeObject.execute_application.<locals>.<genexpr>  s+      ??1||A??????r   ]c                 D    g | ]}                     |          j        S r*   rq   r.   )r9   argr   s     r   r   z2CodeObject.execute_application.<locals>.<listcomp>$  s*    QQQD**3//4QQQr   c                 T    g | ]$\  }}| d                      |          j         %S )=r   r9   kvr   s      r   r   z2CodeObject.execute_application.<locals>.<listcomp>$  sO     U U U<@Aq177t--a00577U U Ur      c              3   @   K   | ]}t          |t                    V  d S r
   )r<   Tracer)r9   rr   s     r   r;   z1CodeObject.execute_application.<locals>.<genexpr>:  sE       E E*+
1f%%E E E E E Er   c                 @    g | ]}                     |d           S )rr   r"   new_variable_definition)r9   rr   r3   r   s     r   r   z2CodeObject.execute_application.<locals>.<listcomp>?  s;       KLD00E#0FF  r   c                 "    g | ]}|j         d z   S ),r   r   s     r   r   z2CodeObject.execute_application.<locals>.<listcomp>B  s    $G$G$GaQVc\$G$G$Gr   rt   rr   r   c                                          |           }t          |j        t                    rFd|j         d                     | j                  j         }j                            |           d S d S )Nzassert z
.shape == )rq   r<   r!   Tensorr.   shaper   )r   rv   r:   r3   r   s      r   checkz-CodeObject.execute_application.<locals>.checkW  s}    !33F;;
j.77 ,kZ_kk@V@VW]Wc@d@d@ikkDJ%%d+++++, ,r   ).r<   Applicationcommentdependenciesr   opImportimport_as_from_anyr.   insertnew_value_definitionr   rz   r   r   MemberAccessrq   argsOperatorrK   r    AssignAtrP   GetAtrc   rC   kwargsitemsr   inplace_updatesr}   getrd   allr   r_   r3   overwrite_variable_definitionr   r   r~   r   r   )r   applicationr   in_defsuse_dynamic_output_checkr   inlineobjmember	right_strr   r   arg0arg1keyupdateslicesr   inplaceoutput_defsleft_str	tensor_in
tensor_outin_definitionr}   r   r3   r   r   s   `                         @@@r   execute_applicationzCodeObject.execute_application   s[   +{333336A6I6Q.,...WY POOOk6NOOO  !;!;7!;!;!;<<#( knf-- 	;;>#9;;J>)D>%- *DD0BDD
"~)>'/H[^%9HHJHH
      "J      
!!!Z'%9:::))+*<eTJJJJ <@;Kut,--< K$6!7!78 Fknl33 8	NF(()9!)<==BC %a(F))))II11 3	N;#$$)) ^&,,[-=a-@AAF*NCNNN		[%&&!++ ^&--k.>q.ABBG--k.>q.ABBG333r33D333		 !bknN_!b!b!bccc11 '	N(()9!)<==BC(()9!)<==BC"B++K,<Q,?@@EFaCaa"5c":":aabaaCVW]C^C^aaaII.. !	N(()9!)<==BC %a(Ffe,, # fe,,,,,v;;????O O O O O YY?????????F*****II''77<BQQQQ@PQQQ U U U UDODVD\D\D^D^U U U D iioo'DI+5knf+M+M'M$k122Q6> -, BKB	NNR'B (:;;<<A	   	^////%%k&8%KKKK+,udm<< ^ E E/:/AE E E B B ^ #""{    P[Pb   88$G$G;$G$G$GHH
!!X"R"R2Ei2P2P"R"RU\"\]]]] ^-8-H R R)Iz$($:$:9$E$EM![__Y77F%1133)/588KK1,,,- 66}jQQQQ
!!"5i"@"@7"JKKKK  778JEZ]7^^c
!!X"R"R2Ei2P2P"R"RU\"\]]]# 	?, , , , , , N##E;+=>>>>>	? 	?r   c                      t          j                   j        v rt          d           j        t          j                  <    fd}t          j                            |j                   d S )Nz+Trying to add definition for existing valuec                     t          |          dk    rij        }|D ]A}t          |t                    r
|d| dz  }!t          |t                    r
|d| dz  }@J                     | j        |           d S d S )Nr   r   r   z["z"])rK   r.   r<   intr=   r   r3   )rr   r   r.   r   rv   r   s       r   storez)CodeObject._add_definition.<locals>.storee  s    3xx!||! % %A!!S)) %A(#As++ %
Q


*$u))!Z-=tDDDDD |r   )r   r!   rz   r    r~   r   tree_map_with_key)r   rv   r   s   `` r   _add_definitionzCodeObject._add_definition_  s    j4#333KLLL1;J,--.
	E 
	E 
	E 
	E 
	E 
	E 	((
0@AAAAAr   c                 ~     |j         j        |g|R i |}t          |||          }|                     |           |S r
   )r   r$   rR   r   )r   r!   r3   r   r   r   rv   s          r   r   z"CodeObject.new_variable_definitions  sQ    "u"5:4:::6::ud33
Z(((r   c                     t          |||          }|                     |           |                                r&|j        j                            ||j                   |S )Nr   )rR   r   r_   r3   r   r$   r   )r   r!   r3   r.   rv   s        r   r   zCodeObject.new_value_definitiony  sc    ud33
Z(((!!## 	H&**5z*GGGr   c                 R    t          ||d          }|                     |           |S )Nz!!!)rR   r   )r   r!   r3   rv   s       r   new_empty_definitionzCodeObject.new_empty_definition  s-    ue44
Z(((r   c                     |                                 r|                                rJ |                    |          | j        t	          |          <   d S r
   )r_   rf   rl   rz   r   )r   old_definitionrk   s      r   r   z(CodeObject.overwrite_variable_definition  sR    ))++NN4L4L4N4NNNN*8*B*B9*M*MI'''r   c                 :   
 t          |           j        v r? j        t          |                   }|                                rt          d          |S t	          |t
                    rG|j        t          d           j        }|j         	                    |||j                  }n 	                    ||d          }t          |j                                        |          

 fd|j        D             }
 fd|j        D             }d	 |D             }                     |j                  }|j                            d
|j         dd                    |           d           |j                            
           |j                            d|j                    |S t	          |t&                    r|j        dk    rt+          | j        d           S |j        t          dt-          |                     t	          |j        t.                    rL                     |j                   t          |           j        v sJ  j        t          |                   S J t-          |j                               t	          |t2                    rt+          | j        d| d          S t	          |t4                    ry fd|D             }dd                    d |D                       z   t7          |          dk    rdndz   dz   }	t+          |                     d |D                       |	          S t	          |t:                    ra fd|D             }dd                    d |D                       z   dz   }	t+          |                     d |D                       |	          S t	          |t<                    r fd|                                D             }d d                    d! |                                D                       z   d"z   }	t+          |                     d# |                                 D                       |	          S t	          |tB          tD          tF          j$        tF          j%        f          r#t+          | j        t3          |                    S t	          |tL                    r|j'        dd$                     |j(                  j         d                     |j)                  j         d                     |j'                  j         d}	nn|j)        Dd$                     |j(                  j         d                     |j)                  j         d}	n#d$                     |j(                  j         d}	t+          | j        |	          S |t+          | j        d%          S  	                    | j        d&          } j*                            |           |S )'Nz%Trying to access overwritten variablez3Cannot define a function without args and/or kwargsr   r   r   r   c                 @    g | ]}                     |d           S )r#   r   r   )r9   r   function_blockr   s     r   r   z0CodeObject.get_definition_of.<locals>.<listcomp>  s;       RU,,S.,MM  r   c                 <    g | ]}                     |          S r*   )r   )r9   virtual_argr   r   s     r   r   z0CodeObject.get_definition_of.<locals>.<listcomp>  s9           ))+~FF     r   c                     g | ]	}|j         
S r*   r   r   s     r   r   z0CodeObject.get_definition_of.<locals>.<listcomp>  s    1111111r   zdef rG   r   z):z    return constantz>Got a tracer without an origin and a concrete value with type F"c                 :    g | ]}                     |          S r*   r   r9   ar   s     r   r   z0CodeObject.get_definition_of.<locals>.<listcomp>  '    ;;;Ad,,Q//;;;r   c                     g | ]	}|j         
S r*   rj   r   s     r   r   z0CodeObject.get_definition_of.<locals>.<listcomp>      #;#;#;qAF#;#;#;r   r   r   r   rI   c                     g | ]	}|j         
S r*   r   r   s     r   r   z0CodeObject.get_definition_of.<locals>.<listcomp>      2K2K2Kq172K2K2Kr   c                 :    g | ]}                     |          S r*   r   r   s     r   r   z0CodeObject.get_definition_of.<locals>.<listcomp>  r   r   r   c                     g | ]	}|j         
S r*   rj   r   s     r   r   z0CodeObject.get_definition_of.<locals>.<listcomp>  r  r   r   c                     g | ]	}|j         
S r*   r   r   s     r   r   z0CodeObject.get_definition_of.<locals>.<listcomp>  r  r   c                 B    i | ]\  }}|                     |          S r*   r   r   s      r   rw   z0CodeObject.get_definition_of.<locals>.<dictcomp>  s-    IIItq!a//22IIIr   {c              3   6   K   | ]\  }}d | d|j          V  dS )r   z": Nrj   )r9   r   r   s      r   r;   z/CodeObject.get_definition_of.<locals>.<genexpr>  s9      "Q"Q$!Q#5q#5#5QV#5#5"Q"Q"Q"Q"Q"Qr   }c                     g | ]	}|j         
S r*   r   )r9   r   s     r   r   z0CodeObject.get_definition_of.<locals>.<listcomp>  s    2T2T2Tq172T2T2Tr   zslice(Noneconst)+r   rz   rh   r    r<   TracableFunctionr   r4   r   r   r,   r   r   virtual_argsrq   r   r.   r   rC   r   originrR   r   r   r   r=   rc   rK   r   rd   re   r   valuesr   floatnpintegerfloatingr   r   r   r   r{   )r   rr   rv   r3   arg_defsvirtual_arg_defsargnames
output_defx_defsr.   r   s   `         @r   rq   zCodeObject.get_definition_of  sg   a55D$$$)"Q%%0J((** K !IJJJa)** L	v~ !VWWW OEv!!99!U9PP

!99!U49PP
"U_-A-A-C-CERRRN    YZY_  H         #$>      21111H //99JJNZ_NNtyy7J7JNNNOOOJn---J=JO==>>>6"" +	x:%%!!T_d;;;! ^UYZ[U\U\^^   AHk22 2((222!uu 00000'1..1ah111u3 	a(a(((;;;5!! 	;;;;;;;F#;#;F#;#;#;<<<s1vvQR{{XZ[^aaDa!1!12K2KF2K2K2K!L!LdSSS4   	;;;;;;;F#;#;F#;#;#;<<<sBDa!1!12K2KF2K2K2K!L!LdSSS4   	IIIIqwwyyIIIF"Q"Q&,,.."Q"Q"QQQQTWWDa!1!12T2TFMMOO2T2T2T!U!UW[\\\C
BK@AA 	a#a&&9995!! 	v! V 6 6qw ? ? D  V  VH^H^_`_eHfHfHk  V  Vos  pF  pF  GH  GM  pN  pN  pS  V  V  V#n 6 6qw ? ? DnnH^H^_`_eHfHfHknnnG 6 6qw ? ? DGGGa$777Ya&999 55aQX5YYJN!!*---r   N)r'   r(   r)   r   rD   r   r   r   r   r   r   r   rq   r*   r   r   rn   rn      s        ] ] ]&     P? P? P?dB B B(      
N N NS S S S Sr   rn   c                        e Zd Zd Zd Zd ZdS )CompiledFunctionc                     t          |          }t          |          }t          |          | _        |j        | _        d S r
   )r   rn   r=   r.   r   r   )r   functioncode_objects      r   r   zCompiledFunction.__init__  s9    H%% **$$	$r   c                      | j         | S r
   )r   )r   input_concretes     r   __call__zCompiledFunction.__call__  s    tw''r   c                     | j         S r
   rj   r   s    r   rD   zCompiledFunction.__str__  r   r   N)r'   r(   r)   r   r"  rD   r*   r   r   r  r    sA        % % %( ( (    r   r  )r~   tracertensorr   	functoolsr   r   r,   rP   rR   rn   r  r*   r   r   <module>r'     s?                       ,: ,: ,: ,: ,: ,: ,: ,:^#3 #3 #3 #3 #3 #3 #3 #3L  $4C 4C 4C 4C 4C 4C 4C 4Cnv v v v v v v vr	         r   