
    Pi                     L   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dl mZ d dlZ	d dl
mZ ddlmZ ddlT d Zd Zg Zg Z ej                    Z ej                    Zd	e_        d
 Zd Z ej                    Zd Z G d d          Zd Zd Zd ZdefdZ d Z!e!e _!        dS )    N)partial)defaultdict   )CompiledFunction)*c                 p   t          | t          j                  r!t          |                                           S t          | t
          t          f          rt          d | D                       S t          | t                    r0t          j        d |                                 D                       S | S )Nc              3   4   K   | ]}t          |          V  d S N_freeze).0xs     i/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/einx/tracer/decorator.py	<genexpr>z_freeze.<locals>.<genexpr>   s(      ++AWQZZ++++++    c                 4    i | ]\  }}|t          |          S  r   r   kvs      r   
<dictcomp>z_freeze.<locals>.<dictcomp>   s$    %J%J%J1a%J%J%Jr   )	
isinstancenpndarraytupletolistlistdict
frozendictitems)r   s    r   r   r      s    !RZ   QXXZZ   	Ae}	%	% ++++++++	At		 $%J%J		%J%J%JKKKr   c                 F     t          j                    fd            }|S )Nc                  h    d | D             } d |                                 D             } | i |S )Nc                 ,    g | ]}t          |          S r   r   )r   as     r   
<listcomp>z/freeze.<locals>.func_frozen.<locals>.<listcomp>   s    )))q

)))r   c                 4    i | ]\  }}|t          |          S r   r   r   s      r   r   z/freeze.<locals>.func_frozen.<locals>.<dictcomp>   s$    ;;;DAq!WQZZ;;;r   r    )argskwargsfuncs     r   func_frozenzfreeze.<locals>.func_frozen   sF    ))D)));;FLLNN;;;tT$V$$$r   )	functoolswraps)r*   r+   s   ` r   freezer.      s9    _T% % % % %
 r   Tc                      t          t          j                            dd                    dk    r3t	          d           t          j                    fd            }|S  S )NEINX_WARN_ON_RETRACEr   c                      dS Nr   r   r   r   r   <lambda>z'_with_retrace_warning.<locals>.<lambda>0   s    Q r   c            	      b   d}dk    rt          j                    }d}t          |          D ]\  }}|j        t          k    r|}||dz   d          }t          |          dk    rd}t          |          D ]M}|d|j         d|j         d|j         dz  }|j	        &|d	|j	        d         
                                 dz  }N	|xx         dz  cc<   t          j        r#	|         k    rd
}t          d d|            |r!dt          _         
| i |}d
t          _        n 
| i |}|S )NFr   r    zFile "z", line z, in 
z  Tz9WARNING (einx): The following call stack has resulted in z retraces of an einx function.
A retrace happens when the function is called with different signatures of input arguments.
Call stack (most recent call last):
)inspectstack	enumeratefilename__file__lenreversedlinenofunctioncode_contextstripthread_localwarnprint)r(   r)   
has_warnedr8   
last_indexiframetraceresultcache_failuresr*   warn_on_retrace_nums            r   func_with_warnz-_with_retrace_warning.<locals>.func_with_warn2   s   J"Q&&
 )% 0 0 ' 'HAu~11%&
j1n../u::>>E!)% L LbU^bbU\bbPUP^bbb !-9!%K%*<Q*?*E*E*G*G%K%K%KKE"5)))Q.)))#( 
^E-BFY-Y-Y%)
'2' '
  %' '    /$)!t.v..$(!!t.v..Mr   )intosenvirongetr   r,   r-   )r*   rM   rK   rL   s   ` @@r   _with_retrace_warningrR   ,   s    bjnn-CQGGHHQ$YY//			(	 (	 (	 (	 (	 (	 
	(	T r   c                    t          |           } t          t          j                            dd                    }|dk    r' t          j        |dk    r|nd           |           } nO|dk     rIdt          t
                    v rt          j        |           } n t          j        d           |           } t          |           } | S )NEINX_CACHE_SIZEr   )maxsizecache)
rR   rN   rO   rP   rQ   r,   	lru_cachevarsrW   r.   )r*   max_cache_sizes     r   rX   rX   b   s     &&D(92>>??NZy"^a=O=O>>UYZZZ[_``	!		d9oo%%?4((DD49&t444T::D$<<DKr   c                  \    t          t          d          sg t          _        t          j        S )Nr8   )hasattr_thread_localr8   r   r   r   _get_trace_stackr^   u   s%    ='** ! r   c                        e Zd Zd Zd Zd ZdS )_trace_contextc                     || _         d S r
   )backend)selfrb   s     r   __init__z_trace_context.__init__|   s    r   c                 H    t                                          |            d S r
   )r^   append)rc   s    r   	__enter__z_trace_context.__enter__   s"    !!$'''''r   c                     t          t                      d                   t          |           k    sJ t                                                       d S )NrU   )idr^   pop)rc   r(   s     r   __exit__z_trace_context.__exit__   sK    "$$R())RXX5555     r   N)__name__
__module____qualname__rd   rg   rk   r   r   r   r`   r`   {   sA          ( ( (! ! ! ! !r   r`   c                  @    t          t                                dk    S r2   )r<   r^   r   r   r   _is_tracingrp      s    !!""Q&&r   c                       fdS )Nc                  h     fd| D             i fd|                                 D             S )Nc                 &    g | ]} |          S r   r   )r   argts     r   r%   z.<lambda>.<locals>.<lambda>.<locals>.<listcomp>   s!    aaffr   c                 .    i | ]\  }}| |          S r   r   )r   r   r   ru   s      r   r   z.<lambda>.<locals>.<lambda>.<locals>.<dictcomp>   s'    !E!E!Eda!QQqTT!E!E!Er   r'   )r(   r)   cru   s     r   r3   z<lambda>.<locals>.<lambda>   sN    2!E!E!E!Efllnn!E!E!E2 2 r   r   ru   rw   s   ``r   r3   r3      s          r   c                     fdS )Nc                       | |          S r
   r   )r(   r)   rw   s     r   r3   z<lambda>.<locals>.<lambda>   s    !!D&// r   r   rx   s    `r   r3   r3      s    AAAA r   c                 \     t          t                    S t           fd            fddt          j                   d dd fd
            }t
          5  t                              |           t          D ]} ||           	 d d d            n# 1 swxY w Y   |S )N)rI   c                 |   t          |          5  t          j                                        }t          j        j                            | |f||          \  }\  } } | d|i|}t          |||j        |g          }|j        D ]} ||          }t          |          cd d d            S # 1 swxY w Y   d S )Nrb   )r(   outputnamevirtual_args)
r`   einxtracerTracerinputkey_to_tracerTracableFunctionfunction_name
decoratorsr   )	r(   r)   rb   virtual_arginput_tracersoutput_tracerr?   	decoratorr*   s	           r   construct_graphzjit.<locals>.construct_graph   s*   G$$ 	. 	.+,,..K,0K,=,K,Kv- -)M>D&
 !D$BB6BBM ("$*)]	  H %/ / /	$9X.. $H--+	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   BB11B58B5c                    |@t           j                                        }|t           j                            |          }n4t	          |t
                    rt           j                            |          } | ||          }|S )N)r(   r)   rb   )r   rb   get_defaultrQ   r   str)r(   r)   traced_input_valuesrb   graphr   s        r    find_backend_and_construct_graphz-jit.<locals>.find_backend_and_construct_graph   s{    ?l..00G,**+>??%% 	0l&&w//G  T&'JJJr   F)rb   r   c                    t                      rV|rJ | t                      d         j        } n,| t                      d         j        k    rt          d           	|d| i|S |}g fd}  |d           |i |\  }}
s+dt          j        v rdd lm} |                              d
 |||           }|r|S  | S )	NrU   z$Cannot change backend during tracingrb   c                     t           j        j                            |           \  }}|                    |           |S r
   )r   r   r   concrete_to_value_and_keyrf   )r   valuekeyr   s      r   	new_inputz(jit.<locals>.func_jit.<locals>.new_input   s=    *DDQGGJE3=#**5111Jr   c                  
    | |fS r
   r   )r(   r)   s     r   r3   z'jit.<locals>.func_jit.<locals>.<lambda>   s
    v r   torchr   T)	rp   r^   rb   
ValueErrorsysmodulestorch._dynamo_dynamodisable)rb   r   r(   r)   return_graphr   r   r   r   r*   has_decoratedrI   s          @r   func_jitzjit.<locals>.func_jit   s@   == 	:9*,,R08,..r2::: !GHHH49w9&999 !	 	 	 	 	 PuuY(N(NOOQU`Y_``f  	!CK!7!7++++++/6?_/`/`, M00v?RT[\\  	/L5-..r   )	r   jitrX   r,   r-   traced_functions_locktraced_functionsrf   traced_functions_decorators)r*   rI   r   r   r   r   r   s   ``  @@@r   r   r      sN   |s%((((. . . . Y.0     M_T $E %/ %/ %/ %/ %/ %/ %/ %/ %/ %/N 
    )))4 	  	 IIh	                              
 Os   $0B!!B%(B%c                     t           5  t          D ]} | |           t                              |            d d d            d S # 1 swxY w Y   d S r
   )r   r   r   rf   )r   r*   s     r   decorate_traced_functionsr      s    	 6 6$ 	 	DIdOOOO#**95556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6s   0AA	A	)"r,   rO   r   	threadingr   r7   r   r   numpyr   collectionsr   compiler   r   r   r.   r   r   Lockr   localrB   rC   rR   rX   r]   r^   r`   rp   	trace_all
trace_noner   r   r   r   r   <module>r      s       				           



           # # # # # # % % % % % %         !  &	(( y   3 3 3l     	!!  	! 	! 	! 	! 	! 	! 	! 	!' ' ' 	 BA
  Z Z Z Zz6 6 6 !:   r   