
    קg                   >   U d dl m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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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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mZ d dl
mZ d dlm Z  d dlm!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 d dl5m6Z6m7Z7 d dl8Z8d dl9Z8d dl:m;c m<Z= d dl>Z8d dl?m@c mAZB d d	l8mCZC d d
lDmEZEmFZFmGZGmHZHmIZI d dlJmKZK d dlLmMZMmNZN d dlOmPZP d dlQmRZRmSZS d dlTmUZUmVZV d dlWmXZX d dlYmZZZm[Z[ d dl\m]Z] 	 d dl^Z_n# e`$ r dZ_Y nw xY w	 d dlaZ8d dlbmcZd d dlLmeZe d dlamfZf ddlgm<Z< e_rCe_e_jh        e_ji        e_jj        fZkdeld<   e_ede_jh        edjh        e_ji        edji        e_jj        edjj        iZmndZki Zmd dlnmoZompZpmqZq n# er$ r Y nw xY w e2d          Zse8jt        ju        jv        Zw ejx        ej%                  Zydeld<   i Zzdeld<   d Z{d!Z|d"e| d#Z} ej~        e          Zi Zd$eld%<    ejx        d&           Zd'eld(<    ej                    Zd@d/Zd adAd1ZdAd2Zd adBd5ZdCd7ZdAd8ZdDd=ZdEd>Ze	 	 dFdGdC            Ze.dHdIdH            Ze.	 dHdJdK            ZdKdLdLZej        dAdM            Ze8j        e8j        e8j        fe8j        e8j        e8j        fe8j        e8j        e8j        fe8j        e8j        fe8j        e8j        fe8j        e8j        fe8j        e8j        e8j        fe8j        e8j        e8j        fe8j        e8j        e8j        fe8j        e8j        fi
Z G dN dO          Z e            ZdP ZdAdQZdR ZdS ZdMdTZdNdVZdOdYZdZ Zd[ Zd\ Z G d] d^          Ze.dPdd            Ze.dQdf            Ze.dRdh            Zdi Zej        djk    r&ej        ej        ej        ej2        ej        ej        fZdk Zdl Zdm Zdn Zdo Zdp Zdq Zdr Zds Zdt Zdu Zdv Z e
j        dw          dx             ZϐdSdyZdz Zej         G d{ d|                      Zej         G d} d~                      ZdZ ej        eլ          adeld<   dTdZؐdUdZِdAdZڐdVdZ G d d          Zdadeld<   dWdZej         G d d                      Z G d de          Z e            e_        d ZdddZd ZdXdZed             Zd ZdHdZd Zd Zd Z e
j        d          d             Zd ZdYdZd Z ed          d             Zeeeeee ed          ej        ej        e8j        e8j        e8j        e8j        hZdeld<    e[            r#d dlZe                    ej        j                   	 d Z d Zd Zd Zd Zd Zd Z ei                                           Zdeld<    ei 	                                          Z
deld<    e ej                    	                                          Zdeld<    e ed                    Zdeld<   ej        Zej        Zd Zd Zd ZeZd Zd Zd Zd Zd ZdHdZd Zd Z dMdZ!dMdÄZ"dĐZ#d dŐl$m%Z% dƄ Z&dǄ Z'dȄ Z(dɄ Z)ddDddDd?dDdDej*        dDf	d˄Z+d̄ Z,ej        d̈́             Z- e            Z. ejx        e/          Z0deld<   g Z1deld<    e            Z2 e
j        d          d҄             Z3dӄ Z4dZdԄZ5dՄ Z6dք Z7dHdׄZ8 ej9                    Z:d؄ Z;edل             Z<dڄ Z=dۄ Z>d܄ Z?d[dބZ@d߄ ZAd\dZBd]dZCd^dZDdHd_dZE G d de	jF                  ZGd`dZHdadZId ZJd ZKddgZLddgZMg dZNeLeMz   eNz   ZOd ZP	 	 	 dbdZQ	 	 	 dbdZRd ZSd  ZT G d d          ZUd ZV G d d          ZW G d d          ZXd ZYd	 ZZd
 Z[d Z\dcdZ]ej         G d d                      Z^dddZ_dedZ`d Zad Zbd Zcd ZddfdZed Zfd  Zgd! Zhej        dgd"            Zid# Zjd$ Zk G d% d&e8jt        ju                  Zldhd)Zmd* Znd+ Zo G d, d-          Zp eq            Zrd.eld/<   dYd0Zsd1 Ztej        d2             Zud3 ZvdZd4Zwd5 Zxd6 Zyd7 Zzd8 Z{d9 Z|i Z}d:eld;<   d< Z~d= Z G d> d?          ZdS (i      )annotationsN)contextmanager)is_dataclass)	lru_cache)MethodWrapperType)AnyCallablecastClassVarCounterDefaultDictDequeDictIterableIteratorKeysViewListOptionaloverloadSetTupleTypeTypeVarUnion
ValuesView)Literal	TypeGuard)fx)_get_function_stack_at_instruction_counter_len_torch_function_stack_pop_torch_function_stack_push_on_torch_function_stack)enable_python_dispatcher)SourceTracingContext)is_sparse_compressed)log_chromium_event_internallog_compilation_event)_format_graph_codelazy_format_graph_code)LazyModuleMixin)
has_tritonhas_triton_package)RemovableHandle)detect_fake_mode
LazyString   )configzTuple[types.ModuleType, ...]NP_SUPPORTED_MODULES )
FakeTensoris_fakemaybe_get_fake_modeTzDefaultDict[str, Counter[str]]countersDict[str, Any]optimus_scuba_logzAhttps://pytorch.org/docs/main/torch.compiler_troubleshooting.htmlz;https://pytorch.org/docs/main/torch.compiler_nn_module.htmlzSee z& for more information and limitations.zDict[str, List[float]]compilation_time_metricsc                 4    t          j        t                    S N)collectionsdefaultdictfloatr6       O/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/_dynamo/utils.py<lambda>rF      s    K#E** rD   zDict[str, Dict[str, float]]frame_phase_timingrows3Union[List[Tuple[str, object]], List[List[object]]]headers!Union[Tuple[str, ...], List[str]]returnstrc                    	 dd l }|                     | |          S # t          $ r6 d                    d t          j        |g|           D                       cY S w xY w)Nr   rJ   
c              3  f   K   | ],}d                      t          t          |                    V  -dS ), N)joinmaprM   ).0rows     rE   	<genexpr>ztabulate.<locals>.<genexpr>   sG       
 
),DIIc#smm$$
 
 
 
 
 
rD   )tabulateImportErrorrS   	itertoolschain)rH   rJ   rX   s      rE   rX   rX      s    
  w 777 
 
 
yy 
 
09	40P0P
 
 
 
 
 	
 	
 	

s    =AANonec                     t           dz   a d S Nr3   )
curr_framer6   rD   rE   increment_framer`      s    aJJJrD   c                 n    t                                            t                                           dad S Nr   )rG   clearr>   r_   r6   rD   rE   reset_frame_countrd      s/    ""$$$JJJrD   cntintc                    t           | z  a d S r@   )op_count)re   s    rE   increment_op_countri      s    OHHHrD   Dict[str, float]c            	        d} i }t                                           D ]c}| |                    d|                    dd                    z  } |                                D ]\  }}||vr|||<   ||xx         |z  cc<    d|r| |d<   |S )Ng        entire_frame_compileinductor_compiler   total_wall_time)rG   valuesgetitems)rn   total_by_keytimingskeytimings        rE   calculate_time_spentrv      s    OL%,,.. 	, 	,7;;"GKK0BA$F$F
 
 	
 #==?? 	, 	,KC,&&$*S!!S!!!V+!!!!		,  :*9&'rD   c            	         t                      } d}|                                 D ]\  }}| d| dt          |d           }t          |           d S )NzTIMING: :   )rv   rq   roundprint)rr   outrt   values       rE   print_time_reportr      se    '))L
C"((** / /
U..s..U5!__..	#JJJJJrD   rt   
phase_name
time_spentrC   c                <    t           |          |xx         |z  cc<   d S r@   )rG   )rt   r   r   s      rE   _add_time_spentr      s)    sJ''':5'''''rD   c                 x    t           d         d         t           d         d         t           d         d         d} | S )zMGet a bunch of metadata about cache hits and misses to use in chromium eventsinductorfxgraph_cache_hitfxgraph_cache_missfxgraph_cache_bypass)r   r   r   )r;   )cache_statss    rE   get_cache_statsr      sB     &j12EF&z23GH ( 45K L K
 rD   TOptional[str]fwd_onlyboolc           	   #  	  K   t                      }| t          vr
g t          | <   d }d }t          d          }t          j                    }	 t
          j                            |  d          5  t          j                    }|                    | |d            |r|                    ||           d V  t          j                    |z
  }d d d            n# 1 swxY w Y   t          |          	                    |           n># t          $ r1}	t          t          |	                    }t          |	          } d }	~	ww xY w	 |r7|                    |t          j                    dt                      i|           |                    | t          j                    dt                      i|           |r[t          t                    }
|r|t!          |
||           d S t
          j        j                                        t          t
          j        j                                        j                  }d|v sd|v r|t!          |
||           d S d|v rt          t
          j        j                                                  }|t!          |||           |dk    rs|Ct0          |                             dd           }t0          |                             dd           }nd }d }t3          |||||          }t5          |           d S d S d S d S d S # |r7|                    |t          j                    dt                      i|           |                    | t          j                    dt                      i|           |rXt          t                    }
|r|t!          |
||           w t
          j        j                                        t          t
          j        j                                        j                  }d|v sd|v r|t!          |
||           w d|v rt          t
          j        j                                                  }|t!          |||           |dk    ro|Ct0          |                             dd           }t0          |                             dd           }nd }d }t3          |||||          }t5          |           w w w w w xY w)	Nz-infz (dynamo_timed)r   forward	inferencebackwardrm   code_gen)get_chromium_event_loggerr>   rC   timetime_nstorchprofilerrecord_functionlog_event_startappend	ExceptionrM   typelog_event_endr   r_   r   _guardsr&   try_getrp   aot_graph_nameCompileContextcurrent_compile_idrG   BwdCompilationMetricsrecord_compilation_metrics)rt   r   r   chromium_log	fail_typefail_reasonr   startt0e	frame_keyr   
compile_idinductor_compile_timecode_gen_timemetricss                   rE   dynamo_timedr     s      )B(C(CL
***(* %#I!%KvJLNNEG@^++s,C,C,CDD 	* 	*B((eT::: @,,Z???EEEr)J	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	!%,,Z8888   QLL	!ff 	9  	&& 1 12	   	""-1B1B!CU	
 	
 	
  -	@JI  )@I-	:zBBBBB
 =/7799E%(488::I& &N "^33{n7T7T#+'	:zJJJJJ#~55%(!M8KKMM& &
 %,+J
JOOO &);;;(08J$.9""%#&8$"?"? !6 1C:0N0R0R$.1" 1" 9= 504&; * 5 - ) +' 'G 7w?????[-	@ -	@ FE 65 <;M  	&& 1 12	   	""-1B1B!CU	
 	
 	
  -	@JI  )@I-	:zBBBB
 =/7799E%(488::I& &N "^33{n7T7T#+'	:zJJJJ#~55%(!M8KKMM& &
 %,+J
JOOO &);;;(08J$.9""%#&8$"?"? !6 1C:0N0R0R$.1" 1" 9= 504&; * 5 - ) +' 'G 7w????[-	@ F 6 <sP   "D -AC
D CD C#D L 
D=,D88D==L GS'FreprLiteral['str']	aggregatec                    d S r@   r6   r   r   s     rE   compile_timesr   \      CrD   Literal['csv']Tuple[List[str], List[object]]c                    d S r@   r6   r   s     rE   r   r   a  	     CrD   c                &   d ffd	| dk    r+fdt           D             }d}|t          |d          z  }|S | dk    rOfd	t                                           D             }t          t                                                     }||fS d
S )a  
    Get metrics about torchdynamo frontend/backend compilation times.

    Accumulates information from functions tagged with `dynamo_timed`.

    repr='str' returns a printable string for user interaction, and 'csv'
    returns headers, rows which can be logged for output

    aggregate causes values from multiple compilations (e.g. split graphs)
    to be accumulated into one value.  If false, expect more than one value
    per metric.
    c                    | S r@   r6   xs    rE   rF   zcompile_times.<locals>.<lambda>v  s     rD   c                ~    r |t          |                     S d                    t          ||                     S )NrR   )sumrS   rT   )ro   item_fnr   s     rE   fmt_fnzcompile_times.<locals>.fmt_fnv  s=     	(73v;;'''yyWf--...rD   rM   c                F    g | ]}| t           |         d            fS )c                
    | dS )Nz.4fr6   r   s    rE   rF   z*compile_times.<locals>.<listcomp>.<lambda>}  s
    jj rD   r   )r>   )rU   kr   s     rE   
<listcomp>z!compile_times.<locals>.<listcomp>|  sG     
 
 
 /2<P<PQQQR
 
 
rD   z!TorchDynamo compilation metrics:
)FunctionzRuntimes (s)rO   csvc                ,    g | ]} |d            S )c                
    | dS )Nz.6fr6   r   s    rE   rF   z*compile_times.<locals>.<listcomp>.<lambda>  s
    1

 rD   r   r6   )rU   vr   s     rE   r   z!compile_times.<locals>.<listcomp>  s<     
 
 
 F122333
 
 
rD   N)r>   rX   ro   listkeys)r   r   rH   r}   ro   rJ   r   s    `    @rE   r   r   h  s      +{ / / / / / /
 u}}
 
 
 
-
 
 
 3x&BCCCC
	
 
 
 
-4466
 
 
 /4466774rD   c                 X    t                               t          dd                     d S )NrM   Tr   )loginfor   r6   rD   rE   dump_compile_timesr     s'    HH]66677777rD   c                  &    e Zd ZdddZd ZddZdS )DuplicateWarningChecker   maxsizerf   rL   r\   c                <    || _         |                                  d S r@   )r   reset)selfr   s     rE   __init__z DuplicateWarningChecker.__init__  s    

rD   c                6    t          j                    | _        d S r@   )rA   OrderedDictsetr   s    rE   r   zDuplicateWarningChecker.reset  s    *,,rD   rt   !Union[str, Tuple[object, object]]r   c                ,   || j         v r+| j                             |d           t          j        sdS n_d | j         |<   t	          | j                   | j        k    r8| j                             d           t	          | j                   | j        k    8dS )NT)lastF)r   move_to_endr4   verboselenr   popitemr   rt   s     rE   addzDuplicateWarningChecker.add  s    $(??H  4 000> u !DHSMdh--$,..  e ,,, dh--$,..trD   N)r   )r   rf   rL   r\   )rt   r   rL   r   )__name__
__module____qualname__r   r   r   r6   rD   rE   r   r     sP            - - -	 	 	 	 	 	rD   r   c                     t           j                            dd          dk    } | rt                      S t	          j                    S )NTORCH_COMPILE_DEBUG01)osenvironrp   add_file_handler
contextlib	ExitStack)compile_debugs    rE   setup_compile_debugr     s@    JNN#8#>>#EM "!!!!!!rD   c                 8    t                                            d S r@   )graph_break_dup_warning_checkerr   r6   rD   rE   reset_graph_break_dup_checkerr     s    #))+++++rD   c                    t           j                            t                      d          } t          j        | d           t          j        t           j                            | d                    t          j        d                                         t          j
                    }|                    fd           |S )NtorchdynamoTexist_okz	debug.logztorch._dynamoc                 .                                    S r@   removeHandlerlog_file_handlerloggers   rE   rF   z"add_file_handler.<locals>.<lambda>  s    v334DEE rD   )r   pathrS   get_debug_dirmakedirsloggingFileHandler	getLogger
addHandlerr   r   callback)log_path	exitstackr  r  s     @@rE   r   r     s    w||MOO];;HK4((((*27<<++N+NOO//F
&'''$&&IEEEEEFFFrD   c                 0   t          j                    } t          j        tt	          j        t          j                  t          j        j        	                                D ]0
                               |                     fd           1| S | S )Nc                 .                                    S r@   r   r  s   rE   rF   z setup_log_file.<locals>.<lambda>  s    v';';<L'M'M rD   )r   r   r4   log_file_namer  r  r   _logging	_internalget_loggersr
  r  )r  r  r  s    @@rE   setup_log_filer    s    $&&I'".v/CDDn.::<< 	O 	OF.///MMMMMNNNNrD   c                n    t                       d|j         dt          |           j         d|j         dS )Nz/error_recordings/_z.rec)r  co_namer   r   co_firstlineno)exccodes     rE   gen_record_file_namer    sR    oo ? ?? ?S		"? ?%)%8? ? ? ?rD   filenamec                   	 t           j                            |           rt                              d|            d S t          j        t           j                            |           d           t          | d          5 }|                    |           d d d            d S # 1 swxY w Y   d S # t          $ r t          
                    d|            Y d S w xY w)Nz9Unable to write execution record %s; file already exists.Tr   wbz#Unable to write execution record %s)r   r  existsr   warningr  dirnameopendumpr   	exception)r  exec_recordfs      rE   write_record_to_filer'    s*   
G7>>(## 	$KKKX     K11DAAAAh%% $  ###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ G G G;XFFFFFFGs;   :B1 AB1 B$B1 $B((B1 +B(,B1 1%CCgfx.Graphc                :    d}| j         D ]}d|j        v r|dz  }|S )Nr   callr3   )nodesop)r(  cns      rE   count_callsr0    s2    	AW  QT>>FAHrD   c                    | S r@   r6   r   s    rE   identityr2    s    HrD   c                `    	 t          |            dS # t          $ r Y dS t          $ r Y dS w xY w)NTF)hash	TypeError
ValueErrorr   s    rE   hashabler7    sR    Qt   uu   uus    
-	--c                     d S r@   r6   argskwargss     rE   nothingr<    s    DrD   c                  >    e Zd ZdZd Zd Zd
dZd Zd Zd Z	d	 Z
dS )ExactWeakKeyDictionaryz\Similar to weakref.WeakKeyDictionary, but use `is`/`id` rather than `==` to compare equalityc                "    i | _         i | _        d S r@   ro   refsr   s    rE   r   zExactWeakKeyDictionary.__init__  s    			rD   c                6    | j         t          |                   S r@   )ro   idr   s     rE   __getitem__z"ExactWeakKeyDictionary.__getitem__  s    {2c77##rD   Nc                R    | j                             t          |          |          S r@   )ro   rp   rC  )r   rt   defaults      rE   rp   zExactWeakKeyDictionary.get  s    {r#ww000rD   c                .    t          |          | j        v S r@   )rC  ro   r   s     rE   __contains__z#ExactWeakKeyDictionary.__contains__  s    #ww$+%%rD   c                     t          |           j        vr!t          j        | fd           j        <   | j        <   d S )Nc                .                                   S r@   )
_remove_id)refidxr   s    rE   rF   z4ExactWeakKeyDictionary.__setitem__.<locals>.<lambda>  s    $//#:N:N rD   )rC  rA  weakrefrL  ro   )r   rt   r~   rM  s   `  @rE   __setitem__z"ExactWeakKeyDictionary.__setitem__  sR    ggdi$[.N.N.N.N.NOODIcN CrD   c                N    || j         v r| j         |= || j        v r
| j        |= d S d S r@   r@  )r   rM  s     rE   rK  z!ExactWeakKeyDictionary._remove_id!  s;    $+C $)	# rD   c                j    | j                                          | j                                         d S r@   )rA  rc   ro   r   s    rE   rc   zExactWeakKeyDictionary.clear'  s.    	rD   r@   )r   r   r   __doc__r   rD  rp   rH  rO  rK  rc   r6   rD   rE   r>  r>    s        ff  $ $ $1 1 1 1& & &! ! !      rD   r>  objobjectallowed_typesType[T]TypeGuard[T]c                    d S r@   r6   rS  rU  s     rE   istyperZ  ,  r   rD   )Tuple[Type[List[T]], Type[Tuple[T, ...]]]c                    d S r@   r6   rY  s     rE   rZ  rZ  1  r   rD   Iterable[type]c                    d S r@   r6   rY  s     rE   rZ  rZ  8  r   rD   c                    t          |t          t          t          f          rt	          |           |v S t	          |           |u S )zisinstance() without subclasses)
isinstancetupler   r   r   rY  s     rE   rZ  rZ  =  s=    -%s!344 *CyyM))99%%rD         c                    t           j        dk    rt          | t                    rdS t          | t          j                  p| t          j        u S )Nrb  T)sysversion_infor`  _builtin_final_typing_classestyping_FinalGenericr~   s    rE   	is_typingrm  Q  sE     7""z%9V'W'W"teV]++Fu/FFrD   c                    t           sdS t          | t           j        t           j        t           j        t           j        t           j        t           j        t           j        t           j	        f          S NF)
nprZ  int8int16int32int64uint8uint16uint32uint64rl  s    rE   is_numpy_int_typery  _  sQ     uGHHHHIII		
  rD   c                v    t           sdS t          | t           j        t           j        t           j        f          S ro  )rp  rZ  float16float32float64rl  s    rE   is_numpy_float_typer~  r  s8     uJJJ	
  rD   c                z    t          | t          j                  o!t          t	          j        | d                    S )N__wrapped__)r`  	functools_lru_cache_wrapperis_functioninspectgetattr_staticrl  s    rE   is_lru_cache_wrapped_functionr    s:    eY9:: {um44@ @ rD   c                    t          |           p/t          | t          j        j        t          j        j        f          S r@   )r  r`  r   _opsOpOverloadPacket
OpOverloadrl  s    rE   is_function_or_wrapperr    s7    u 
+UZ-BC" " rD   c                z    t          | t          j        t          j        t          j        t          j        f          S r@   )r`  typesFunctionTypeBuiltinFunctionTypeMethodDescriptorTypeWrapperDescriptorTyperl  s    rE   r  r    s4    %&'		
  rD   c                    t          | t          j        t          j        t          j        t          j        t          j        f          S r@   )r`  r  GetSetDescriptorTyper  r  MemberDescriptorTyper   rl  s    rE   is_wrapper_or_member_descriptorr    s<     &&'&#	
  rD   c                ,    t          |           d         S rb   ) unwrap_with_attr_name_if_wrapper)fns    rE   unwrap_if_wrapperr    s    +B//22rD   c                    t          |           r/t          j        | dd          rt          j        | d|           } d}nd }| |fS )N_torchdynamo_inlineF)r  r  r  )r  	attr_names     rE   r  r    sT     2 71"6KUSS #B(=rBB)			y=rD   c                H    t           sdS t          | t           j                  S ro  )rp  rZ  ndarrayrl  s    rE   is_numpy_ndarrayr    s!     u%$$$rD   c                    t           j        t           j        j        gt          j        R }|t           j        j        fz   }t          | |          S )zCheck of obj is a tensor)	r   Tensornn	Parameterr4   traceable_tensor_subclasses_subclassesr7   rZ  )rS  tensor_lists     rE   istensorr    sO     	% 
	+% %K
 !2!= ??K#{###rD   c                ,    t          | t                    S r@   )r`  r,   )mods    rE   is_lazy_moduler    s    c?+++rD   r   c                     t          |   d S r@   )r|   r:  s    rE   
print_oncer    s    	4LLLLrD   c                n    | fd}|j         t          |j                   dk    sJ |j         d         S )zNSome black magic to create a cell object that usually only exists in a closurec                      S r@   r6   r   s   rE   r&  zmake_cell.<locals>.f  s    rD   Nr3   r   )__closure__r   )valr&  r   s     @rE   	make_cellr    sR    A     =$Q]););q)@)@)@)@=rD   c                2   	 t          d | D                       }d |                                D             }||fS # t          $ rO}ddlm} ddlm}  |d ||   d |t          |                                            |           Y d }~d S d }~ww xY w)	Nc              3  >   K   | ]}|                                 V  d S r@   as_proxyrU   args     rE   rW   z$proxy_args_kwargs.<locals>.<genexpr>  s*      ::c3<<>>::::::rD   c                >    i | ]\  }}||                                 S r6   r  )rU   rt   r  s      rE   
<dictcomp>z%proxy_args_kwargs.<locals>.<dictcomp>  s&    KKKSS\\^^KKKrD   r3   unimplemented)typestrzcall_function args: rx   from_exc)	ra  rq   NotImplementedErrorr  r  variables.baser  r   ro   )r:  r;  
proxy_argsproxy_kwargsr   r  r  s          rE   proxy_args_kwargsr    s    
::T:::::
KKFLLNNKKK<'' 
 
 
&&&&&&++++++U77D>UUGGT&--//=R=R4SUU	
 	
 	
 	
 	
 	
 	
 	
 	
 	
	
s   := 
BABBc                     e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded	<   d
ed<   d
ed<   d
ed<   d
ed<   d
ed<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   d
ed<   ded<   ded<   ded<   ded <   d!ed"<   d
ed#<   d$S )%CompilationMetricsrM   r   r   r  co_filenamerf   r  
cache_sizeaccumulated_cache_sizeOptional[int]guard_countshape_env_guard_countgraph_op_countgraph_node_countgraph_input_countrC   
start_timeOptional[float]entire_frame_compile_time_sbackend_compile_time_sinductor_compile_time_scode_gen_time_sr   r   r   fail_user_frame_filenamefail_user_frame_linenoSet[str]non_compliant_opscompliant_custom_opsrestart_reasonsdynamo_time_before_restart_sr   has_guarded_code)possibly_missed_reinplacing_opportunitiesNr   r   r   __annotations__r6   rD   rE   r  r    sL        OOONNNLLLOOO((((!!!!####$$$$0000++++,,,,$$$$++++))))""""'''' <<<<<<rD   r  c                  B    e Zd ZU ded<   ded<   ded<   ded<   ded<   d	S )
r   rM   r   r  r  r  r   r   r   Nr  r6   rD   rE   r   r     sK         OOO,,,,$$$$rD   r   @   maxlenz7Deque[Union[CompilationMetrics, BwdCompilationMetrics]]_compilation_metricscompilation_metrics0Union[CompilationMetrics, BwdCompilationMetrics]c                     t                                           t           t                    rd}nd}t          j                            | fd           t          j        rt                      d S d S )Nr  bwd_compilation_metricsc                 d    d t          j                                                   D             S )Nc                b    i | ],\  }}|t          |t                    rt          |          n|-S r6   )r`  r   r   )rU   r   r   s      rE   r  z@record_compilation_metrics.<locals>.<lambda>.<locals>.<dictcomp>,  sG     
 
 
1 *Q,,3tAwww!
 
 
rD   )dataclassesasdictrq   )r  s   rE   rF   z,record_compilation_metrics.<locals>.<lambda>,  s9     
 
#*+>??EEGG
 
 
 rD   )
r  r   r`  r  r   r  trace_structuredr4   log_compilation_metricsr)   )r  names   ` rE   r   r   !  s      3444%'9:: )$(	N##	
 	
 	
 	
   % 31222223 3rD   new_sizec                    t          t                    | k    r1t                                           t          t                    | k    1t          j        t          |           }|ad S )Nr  )r   r  popleftrA   deque)r  	new_deques     rE   set_compilation_metrics_limitr  5  s`    
"
#
#h
.
.$$&&& "
#
#h
.
.!"6xHHHI$rD   c                 8    t                                            d S r@   )r  rc   r6   rD   rE   clear_compilation_metricsr  =  s         rD   6List[Union[CompilationMetrics, BwdCompilationMetrics]]c                 *    t          t                    S r@   )r   r  r6   rD   rE   get_compilation_metricsr  B  s    $%%%rD   c                  X    e Zd ZdZd Zd Z	 dddZddZ	 	 dddZ	 dddZ		 dddZ
dS )ChromiumEventLoggera  Logs chromium events to structured logs. tlparse will concatenate these into a perfetto UI link.

    See https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/preview#heading=h.yr4qxyxotyw for
    a specification of the Chromium Event JSON format.
    c                v    t          | j        d          r| j        j        S dg| j        _        | j        j        S )Nstack	__start__)hasattrtlsr  r   s    rE   	get_stackzChromiumEventLogger.get_stackM  s5    48W%% 	"8>!)]DHN8>!rD   c                    t          j                    | _        t          t	          j                              | _        t                              d| j                   d S )Nz*ChromiumEventLogger initialized with id %s)		threadinglocalr  rM   uuiduuid4id_r   r   r   s    rE   r   zChromiumEventLogger.__init__T  sG    ?$$ tz||$$ 	=txHHHHHrD   N
event_namerM   r   rf   metadataOptional[Dict[str, Any]]rL   r\   c                    |                      ||d|          }t          ||                                 | j                   |                                                     |           dS )z
        Logs the start of a single event.
        :param str event_name Name of event to appear in trace
        :param time_ns Timestamp in nanoseconds
        :param metadata: Any extra metadata associated with this event
        BN)_log_timed_eventr(   r  r	  r   r   r
  r   r  events        rE   r   z#ChromiumEventLogger.log_event_start]  si     %%	
 
 	$E4>>+;+;TXFFF
+++++rD   c                    |                                  }|                                 |                    d           d S )Nr   )r  rc   r   )r   r  s     rE   r   zChromiumEventLogger.resetr  s8       [!!!!!rD   start_time_nsr  c                   |                                  }||vrt                              d           dS |                     ||d|          }||d         k    r:t                              d           |                                 ||d         k    :t          ||| j        |           |                                 dS )aA  
        Logs the end of a single event. This function should only be
        called after log_event_start with the same event_name.
        :param event_name: Name of event to appear in trace
        :param time_ns: Timestamp in nanoseconds
        :param metadata: Any extra metadata associated with this event
        z7ChromiumEventLogger: Start event not in stack, ignoringNEz>ChromiumEventLogger: Detected overlapping events, fixing stack)r  r   r   r  popr(   r	  )r   r
  r   r  r  r  r  s          rE   r   z!ChromiumEventLogger.log_event_endy  s    "   U"" KKQRRRF%%	
 
 E"I%% KKP   IIKKK E"I%% 	$E5$(MJJJ		rD   phaser<   c                n    ||dz  ||ddddt           j                            dfddd           S )	za
        Logs a timed event in chromium format. See log_event_start, log_event_end, etc.
          r   r   )r  tsr:  phcattidpidchromium_eventc                      S r@   r6   r  s   rE   rF   z6ChromiumEventLogger._log_timed_event.<locals>.<lambda>      u rD   F
payload_fnsuppress_contextexpect_trace_id)r   r  r  )r   r
  r   r  r  r  s        @rE   r  z$ChromiumEventLogger._log_timed_event  sd     D.!	
 	
 	''$}}}"!	 	( 	
 	
 	
 rD   c           	         ||dz  |ddddddt           j                            dfdd	d
           t          |                                 | j                   dS )aZ  
        Log an instant event with no associated duration.
        :param str event_name: Name of event to appear in trace
        :param int time_ns Timestamp in nanoseconds
        :param Optional[Dict[str, Any]] metadata: Any extra metadata associated with this event
        :param str cname optional color for the arrow in the trace
        r  ir   r   p)r  r  r:  r  r  r  r  sr   c                      S r@   r6   r"  s   rE   rF   z7ChromiumEventLogger.log_instant_event.<locals>.<lambda>  r#  rD   FTr$  N)r   r  r  r(   r  r	  r  s       @rE   log_instant_eventz%ChromiumEventLogger.log_instant_event  s     D.!

 

 	''$}}}" 	 	( 	
 	
 	
 	$E4>>+;+;TXFFFFFrD   r@   )r
  rM   r   rf   r  r  rL   r\   rL   r\   )NN)
r
  rM   r   rf   r  r  r  r  rL   r\   )
r
  rM   r   rf   r  rM   r  r  rL   r<   )r   r   r   rR  r  r   r   r   r   r  r-  r6   rD   rE   r  r  F  s         " " "I I I .2	, , , , ,*" " " " .2'+* * * * *b .2    @ .2	G G G G G G GrD   r  zOptional[ChromiumEventLogger]CHROMIUM_EVENT_LOGc                 :    t           t                      a t           S r@   )r/  r  r6   rD   rE   r   r     s    !022rD   c                  D    e Zd ZU dZded<   ded<   d Zed             ZdS )	CleanupHookz,Remove a global variable when hook is calledr<   scoperM   r  c                X    t           t           xj        dz  c_        | j        | j        = d S r^   )CleanupManagercountr3  r  r   r:  s     rE   __call__zCleanupHook.__call__  s.    %  A%  Jty!!!rD   c                b    || vsJ t           xj        dz  c_        || |<   t          | |          S r^   )r5  r6  r2  )r3  r  r  s      rE   createzCleanupHook.create  s@    5    !d5$'''rD   N)r   r   r   rR  r  r8  staticmethodr:  r6   rD   rE   r2  r2    s[         66III" " " ( ( \( ( (rD   r2  c                  .     e Zd ZU dZded<    fdZ xZS )r5  r   zClassVar[CleanupManager]instancec                ~    | j         |         D ]} |             t                                          |           d S r@   )ro   superrK  )r   rM  hook	__class__s      rE   rK  zCleanupManager._remove_id  sD    K$ 	 	DDFFFF3rD   )r   r   r   r6  r  rK  __classcell__rA  s   @rE   r5  r5    sK         E&&&&                 rD   r5  c                    |                                                      | j                  }| j        r%| j        | j                                         |_        |S )z!Clone the tensor and its gradient)clonerequires_grad_requires_gradis_leafgrad)r   ys     rE   clone_tensorrK    sF    			  11Ay  QV'HrD   dtypec          	     F   t          |           r| S fd}t          j                    5  | j        j        dk    r ||           cddd           S | j        t          j        u rqt          j         ||                                            || 	                                          | j
        |                                           cddd           S t          |           r| j        t          j        t          j        hv r)|                                 }|                                 }n(|                                 }|                                 }t          j         ||           ||           ||                                           | j
        | j                  cddd           S t+          d t-          |                                 |                                           D                       }| j        rt          j        |dz   f|           }n&t          j        |dz   p| j        | j                  }|                                 |                                z
  dz  |                                 z  }|                    |                                 |                                 |           	 |                     | !                                           | j"        r|#                    | j$                   | j"        r"| j%        tM          | j%        	          |_%        n'# tN          $ r  ||           cY cddd           S w xY wtQ          | d
          r| j)        *                                |_)        |cddd           S # 1 swxY w Y   dS )zcopy while preserving stridesc                    t          j        |           }| j        r|                    | j                   | j        r"| j        t          | j                  |_        t          | d          r| j        	                                |_        |S )NrL  _dynamo_dynamic_indices)
r   rE  rH  rF  rG  rI  clone_inputr  rP  copy)r   rJ  rM  s     rE   torch_clonez clone_input.<locals>.torch_clone  s    KNN9 	.Q_---9 	6+ u555AF1/00 	I()(A(F(F(H(HA%rD   xlaN)is_coalesced)layoutc              3  ,   K   | ]\  }}|d z
  |z  V  dS )r3   Nr6   )rU   shapestrides      rE   rW   zclone_input.<locals>.<genexpr>D  s@       
 
%2UFUQY& 
 
 
 
 
 
rD       )rM  devicerL  rP  )+r8   r   no_gradr[  r   rV  
sparse_coosparse_coo_tensor_indices_valuesrX  rU  r'   
sparse_csr
sparse_bsrcrow_indicescol_indicesccol_indicesrow_indicessparse_compressed_tensorro   r   zipsizerY  is_quantizedempty_quantizedemptyrM  data_ptrelement_sizeas_strided_copy_rE  rH  rF  rG  rI  rQ  RuntimeErrorr  rP  rR  )r   rM  rS  compressed_indicesplain_indicesneeded_sizeresultcache_line_offsets    `      rE   rQ  rQ    s8    qzz      
 6 68=E!!;q>>6 6 6 6 6 6 6 6 8u'''*AJJLL))AIIKK((^^--	  6 6 6 6 6 6 6 6 "!$$ 	xE,e.>???%&^^%5%5" !%&^^%5%5" !1.//M**AHHJJ''x  )6 6 6 6 6 6 6 68  
 
69!&&((AHHJJ6O6O
 
 
 
 
 > 	*K",<+>BBFF[b (8  F ZZ\\FOO---3^^ 	16688QXXZZ1BCCC
	"LL###y 7%%ao666y ?QV/)!&>>> 	" 	" 	" ;q>>!!g6 6 6 6 6 6 6 6^	"
 1/00 	N-.-F-K-K-M-MF*m6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6sK   NA7NCN2DNA1L32N3MNM2NNNc                *   t          |           t          u rt          |           }|                                D ]p\  }}t          |t                    rt          |          ||<   -t          |t          j                  sJ t          |                      t          |          ||<   q|S t          |           }t          t          |                    D ]:}t          ||         t          j                  rt          ||                   ||<   ;|S r@   )r   dictrq   r`  ra  clone_inputsr   r  rQ  r   ranger   )example_inputsresrt   r~   r)  s        rE   ry  ry  a  s    Nt##>""))++ 	. 	.JC%'' .'..C!%66CCUCCC&u--C

~

C3s88__ ) )c!fel++ 	) Q((CFJrD   r  torch.Tensorc                    	 |                                   d S # t          $ r=}ddlm} t	          j        ddt          |                     } |d|           |d }~ww xY w)Nr3   )	SkipFramez\(.* z(torch.compile cannot be run in context: )rm  rq  r  r  resubr   )r  r   r  functorch_subclass_names       rE   skip_frame_if_in_functorch_moder  t  s    	   """""" #%&"d3ii"@"@iP7NPP
 
	s    
A8AAc               #  l  K   t           j        j        } t           j        j        j        } |            5   |             5  t          j        t           j                                                  }t          |           t           j
                                        r0t          j        t           j
                                                  }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   	 d V  t           j        j                                        5  t           j                            |           t           j
                                        rt           j
                            |           d d d            d S # 1 swxY w Y   d S # t           j        j                                        5  t           j                            |           t           j
                                        rt           j
                            |           d d d            w # 1 swxY w Y   w xY wr@   )r   _C_DisableFuncTorchutils_python_dispatch_disable_current_modesrE  randomget_rng_stater  cudais_availableset_rng_state)disable_functorchdisable_current_modes	rng_statecuda_rng_states       rE   preserve_rng_stater    s     2!K8O			 	  E E"3"3"5"5 E EK : : < <==	'	222:""$$ 	E"[)A)A)C)CDDN	E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E
9[)@@BB 	9 	9L&&y111z&&(( 9
((888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9U[)@@BB 	9 	9L&&y111z&&(( 9
((888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9sy   C0BCC0C	C0 C	!C00C47C4<F #AFFF$H3>AH'H3'H++H3.H+/H3c                    t          | t          j        j        j        t          j        j        j        t          j        j        t          j        j        f          S r@   )	r`  r   jit_traceTopLevelTracedModule_scriptRecursiveScriptModuleScriptFunctionScriptModule)model0s    rE   is_jit_modelr    sB    I1I3I$I"		
  rD   c                \   t          |           r| S 	 t          j                            | |          S # t          $ rl 	 t          j                            |           cY S # t          $ r: |rt                              d           nt                              d           Y nw xY wY nw xY wd S )Nz	jit errorz0Both torch.jit.trace and torch.jit.script failed)	r  r   r  tracer   scriptr   r$  error)modelr{  r   s      rE   torchscriptr    s    E 	Nyun555 N N N	N9##E***** 	N 	N 	N Nk****		LMMM		NN 4s3   3 
B)AB)AB# B)"B##B)(B)c                \    	 t          j        |           S # t          t          f$ r Y d S w xY wr@   )r  getfiler5  OSErrorrS  s    rE   r  r    s>    s###w   tts    ++c                :    t          t          |                     S )zLTest if an object is a namedtuple or a torch.return_types.* quasi-namedtuple)is_namedtuple_clsr   r  s    rE   is_namedtupler    s    T#YY'''rD   c                   	 t          | t                    rXt          | dg           pdg}t          | dd          }|dv p.|d         t          u ot          | d          ot          | d          S n# t          $ r Y nw xY wdS )	zhTest if an object is a namedtuple or a (torch.return_types|torch.autograd.forward_ad).* quasi-namedtuple	__bases__Nr   )torch.return_typesztorch.autograd.forward_adr   _make_fieldsF)
issubclassra  getattrr  r5  )clsbasesmodules      rE   r  r    s    c5!! 	Cb11;dVES,55FPP aE!Wgc7&;&;WY@W@W	    5s   A,A0 0
A=<A=c                   | t           u rg dS t          | t                    sJ t          | d          r| j        S t
          j         G d d                      }| j        dk    sJ  | t          |t          | j
                                      }dg| j
        z  }t          |          D ]D}|d         dk    r6t          t          ||          |          r||t          ||          j        <   E|S )	zIGet the fields of a namedtuple or a torch.return_types.* quasi-namedtuple)r   stopstepr  c                      e Zd ZU ded<   dS )!namedtuple_fields.<locals>.Markerrf   indexNr  r6   rD   rE   Markerr    s         




rD   r  r  Nr   r  )slicer  ra  r  r  r  	dataclassr   rT   rz  n_fieldsdirr`  r  r  )r  r  rS  fieldsr  s        rE   namedtuple_fieldsr    s    e||((((c5!!!!!sI {        >11111
#c&%--..
/
/C#'&3<"7FC 4 47c>>jd););VDD>/3F73%%+,MrD   c           	     H   t          j                    5  t          j        t           j                                                  t           j                                        r0t          j        t           j                                                  g t          j        | 	                                | 
                                          D ]1}                    ||j        t          j        |          f           2	 d d d            n# 1 swxY w Y   fd}|S )Nc                 l   t          j                    5  t           j                                       t           j                                        rt           j                                       D ]&\  } }}| j        |k    r|                     |           '	 d d d            d S # 1 swxY w Y   d S r@   )r   r\  r  r  r  r  _versionrp  )paramversionoriginal_valuer  r  saved_states      rE   restorez"checkpoint_params.<locals>.restore  s    ]__ 	0 	0L&&y111z&&(( 9
((8882= 0 0.w>W,,KK///0		0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   BB))B-0B-)r   r\  rE  r  r  r  r  rZ   r[   
parametersbuffersr   r  )gmr  r  r  r  r  s      @@@rE   checkpoint_paramsr    sT   	 L LK : : < <==	:""$$ 	E"[)A)A)C)CDDN_R]]__bjjllCC 	L 	LEu~u{57I7IJKKKK	LL L L L L L L L L L L L L L L0 0 0 0 0 0 0 Ns   C,DDDc                n   t           j                                        rt           j        j        }nt          } |             t          j                     t          j        d           t          j	                    }t          |          D ]} | | } |             t          j	                    }|||z
  fS )Ni9  )r   r  r  synchronizer<  gccollectmanual_seedr   perf_counterrz  )r  r{  timesr  r   r  ru  t1s           rE   timedr    s    z   j,KMMMJLLL	d				B5\\  '				B27?rD   c           	         t          d t          j        ||                     d                    D                       S )Nc              3  $   K   | ]}|j         V  d S r@   )is_cudarU   r   s     rE   rW   z check_is_cuda.<locals>.<genexpr>  s$      WWQqyWWWWWWrD   T)allrZ   r[   r  )r  r{  s     rE   check_is_cudar  
  s8    WW)/."--PTBUBU"V"VWWWWWWrD   rZ  c                   | dk    sJ d t          |           D             }t          |dd          |d d         z             }t          dd                    |           dd                    |           d          }d|  d	|_        |S )
Nr3   c                    g | ]}d | S r   r6   rU   r)  s     rE   r   z rot_n_helper.<locals>.<listcomp>  s    &&&GGG&&&rD   r  zlambda ,z: ()rot__helper)rz  reversedevalrS   r   )r/  varsrotatedr  s       rE   rot_n_helperr    s    q5555&&U1XX&&&DtBCCy49,--G	???388G+<+<???	@	@B####BKIrD   z	Set[type]common_constant_typesc                   t          | t          t          f          r"t          t	          t
          |                     S t          | t          j        t          t          j        f          pt          | t          t          hz            S r@   )rZ  ra  	frozensetr  rT   is_safe_constantr`  enumEnumr   r   Sizer  r  r  s    rE   r  r  5  sm    a%#$$ -3'++,,,a$)T5:677 6	'< < rD   c                    ddl m}m} t          | |          r'|                    |                                           S | S )Nr3   )ConstantVariableSymNodeVariable)	variablesr  r  r`  r:  evaluate_expr)r  r  r  s      rE   specialize_symnoder  >  sS    <<<<<<<< #'' <&&s'8'8':':;;;JrD   c                x    ddl m} t          |           } t          | |          r|                                 S | S )Nr3   r  )r  r  r  r`  as_python_constant)r  r  s     rE   guard_if_dynr  H  sK    ++++++
S
!
!C#'(( (%%'''JrD   c                ~    t          d t          j        | |                                          D                       S )Nc              3  >   K   | ]}|                                 V  d S r@   )is_python_constantr  s     rE   rW   z&check_constant_args.<locals>.<genexpr>T  s.      VV!q##%%VVVVVVrD   )r  rZ   r[   ro   r9  s     rE   check_constant_argsr  S  s3    VVytV]]__/U/UVVVVVVrD   c                    ddl m} ddlm} d}t	          j        | |                                          D ]+}t          ||          r|dz  }t          ||          s dS ,|dk    S )Nr3   r  UnspecializedPythonVariabler   F)variables.constantr  variables.tensorr  rZ   r[   ro   r`  )r:  r;  r  r  unspec_countr   s         rE   check_unspec_python_argsr  W  s    444444======L_T6==??33  a455 	ALLA/00 	55	!rD   c                    ddl m} t          j        | |                                          D ])}|                                st          ||          s dS *dS )Nr3   r  FT)r  r  rZ   r[   ro   r  r`  )r:  r;  r  r   s       rE   check_unspec_or_constant_argsr  d  sl     >=====_T6==??33  $$&& 	*Q8S*T*T 	554rD   c                    ddl m t          fdt          j        | |                                          D                       S )Nr3   )NumpyNdarrayVariablec              3  8   K   | ]}t          |          V  d S r@   )r`  )rU   r   r
  s     rE   rW   z+check_numpy_ndarray_args.<locals>.<genexpr>r  sB         	1*++     rD   )r  r
  anyrZ   r[   ro   )r:  r;  r
  s     @rE   check_numpy_ndarray_argsr  o  sa    666666    v}}77     rD   zType[KeysView[Any]]	dict_keyszType[ValuesView[Any]]dict_valuesodict_valueszType[Iterator[Any]]tuple_iteratorc                l    t          |           }t          j        j                            |           |S r@   )
object_newr   r  Moduler   )r  rS  s     rE   nn_module_newr    s*    
S//C	HOS!!!JrD   c                B    t          j        t          j        | d          S r^   )r  reduceoperatormul)its    rE   productr    s    HL"a000rD   c                L    |                                  \  }\  }}|||z            S r@   )
__reduce__)r  r  r  rS  r   s        rE   tuple_iterator_getitemr    s'    }}Avuuu}rD   c                ,    |                      |          S r@   )as_subclass)tr  s     rE   to_subclassr"    s    ==rD   c                h    t          t          j        t          |           ||dz                       S r^   )nextrZ   isliceiter)dr/  s     rE   dict_keys_getitemr(    s)    	 a!QU33444rD   c                L    | j         j        }| j        }|rdnd}| d| d| }|S )NLGz["z"].)rA  r   r  )r~   r  r  r  r3  
local_names         rE   	enum_reprr-    sD     ?#D
*C!CCcE++T++c++JrD   c                    || j         d<   t          j                    j        j        }t
          j        j        j        	                    ||          x}r|| j         d<   d S d S )Nexample_valueunbacked_bindings)
metar&   rp   	fake_mode	shape_envr   r   experimentalsymbolic_shapescompute_unbacked_bindings)noder/  r3  symbol_to_paths       rE   set_example_valuer9    so     "/DIo"$$.8I.>XX=  ~ 8 *8	%&&&8 8rD   c                    |                                  j        j                            d          }t	          |          sddlm}  |d           |S )Nr/  r3   r  z:Cannot check Tensor object identity without its fake value)r  r7  r1  rp   r8   r  r  )vtfake_tensorr  s      rE   _get_fake_tensorr=    s]    ++--$)--o>>K; T&&&&&&RSSSrD   c                ^   ddl m}m}m}m}                                 r0t          fd| D                       }|                    |          S d}	|r!t          |          rd}	t                    d }
| D ]}|	r9t          ||          r(t          |          u r|                    d          c S = |t          j                                      ||gi           }|
|}
n |t          j                                      |||
gi           }
|
|                    d          }
|
S )Nr3   )BuiltinVariabler  TensorVariableVariableTrackerc              3     K   | ]B}|                                 o)|                                                                k    V  Cd S r@   )r  r  )rU   r   searchs     rE   rW   z iter_contains.<locals>.<genexpr>  sk       
 
    "" F$$&&&*C*C*E*EE
 
 
 
 
 
rD   FT)r  r?  r  r@  rA  r  r  r:  r`  r=  r  eqcall_functionor_)rq   rC  txcheck_tensor_identityr?  r  r@  rA  found_constmust_check_tensor_idfoundr   checks    `           rE   iter_containsrM    s                 "" 4 
 
 
 
 
 
 
 
 

  &&{333  *FN!C!C *#!&))'+E   	!^,, 9-a0000+22488888#OHK00>>rAv;PRSSE}'55CC  } ''..LrD   c                d    t          | t          j        t          j        j        t
          f          S )z4Returns whether it indexes dictionaries using its id)r`  r   r  r  r  r   )r   s    rE   	key_is_idrO    s     a%,9JKLLLrD   c                >    d |                                  D             S )Nc                N    g | ]"}t          |          rt          |          n|#S r6   )rO  rC  )rU   r   s     rE   r   zkey_to_id.<locals>.<listcomp>  s-    ???QYq\\(BqEEEq???rD   )r   rl  s    rE   	key_to_idrR    s    ??%**,,????rD   c                  ddl m} t          | t          t          f          rrd                    fd| D                       }t          | t                    rd| dS t          | t                    sJ t          |           dk    rd| dS d| d	S t          | t          j                  r%t          | 
          
                    dd          S  ||           r| j        S t          | t                    rd } ||           S | S )Nr3   )is_builtin_callabler  c              3  :   K   | ]}t          |           V  dS r  N
const_reprrU   r+  r  s     rE   rW   zconst_repr.<locals>.<genexpr>  s0      DDQj%888DDDDDDrD   [](z,)r  rW  'r  c                R    | j         }|j        }|dk    r|j        S |dz   |j        z   S )Nbuiltins.)rA  r   r   )oklassr  s      rE   fullnamezconst_repr.<locals>.fullname  s7    KE%F##))C<%"444rD   )trace_rulesrT  r`  r   ra  rS   r   r  r  r-  replacer   r   )r   r  rT  
elems_reprrd  s    `   rE   rY  rY    sG   000000!dE]## XXDDDD!DDDDD
a 	)$z$$$$a'''''1vv{{):))))(:((((	Aty	!	!  %(((00b999		Q		 z	At		 	5 	5 	5 x{{xrD   c               V    d                     fd| D                       }d|z   dz   S )Nr  c              3  :   K   | ]}t          |           V  dS rV  rX  rZ  s     rE   rW   z!dict_keys_repr.<locals>.<genexpr>  s0      GGq
1E222GGGGGGrD   r[  r\  rS   )
const_keysr  keys_strs    ` rE   dict_keys_reprrm    s8    xxGGGGJGGGGGH>CrD   
__dict_key)UnsupportedFakeTensorExceptionc                D    | dt          |           d| j        j         S )Nr  _c)rC  outputr   )rG  rootrS  s      rE   get_safe_global_namert    s+     66RWW66	 4666rD   c                    	  |             S # t           $ rC}ddlm} d|j         d}t                              |            |||           Y d }~d S d }~ww xY w)Nr3   r  zUnsupported: z with fake tensor propagation.r  )ro  r  r  reasonr   r   )r  r   r  msgs       rE   wrap_fake_exceptionrx  $  s    'rtt) ' ' '&&&&&&FahFFFCcA&&&&&&&&&&'s   	 
A8AAc                     t           j        j                            |          5  t	           fd          cd d d            S # 1 swxY w Y   d S )Nc                 ,    t          j                   S r@   )rR  deepcopyr  s   rE   rF   z)deepcopy_to_fake_tensor.<locals>.<lambda>1  s    4=+=+= rD   )r   r  r<  FakeCopyModerx  )rS  r2  s   ` rE   deepcopy_to_fake_tensorr}  /  s    			&	3	3I	>	> ? ?"#=#=#=#=>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?s   AA	A	c                x    t          j        t          j        t          j        | |z
                                S )z+
    Calculate root mean squared error
    )r   sqrtmeansquare)rL  r|  s     rE   rmser  4  s,     :ejcCi!8!899:::rD   g-C6?c                r   	
  t           t          t          t          j        t
          j        j        t
          j        f          rt          t          t          t          j        f          s*J dt                      dt                                 t                     t                    k    r 	d           dS t                     t                    k    o0t          	
fdt                     D                       S t                     j        dk    r)t           j        j        j        	
          S t           t                     r
t          t                     sJ t#                                                     t#                                                    k    sNJ d	t#                                                      d
t#                                                                 t'                                                     D ]=}t           |         |         |         	
          s 	d|            dS >dS t           t"                    rct          t"                    sJ t#                     t#                    k    s*J dt#                      d
t#                                 dS t           t
          j        t*          f          r0t           t
          j        j                  rJ t          t
          j        j                  rJ d fd fD             \    j        r1j        sJ                                                                   t          t
          j                  s*J dt                      dt                                 r j        j        k    r 	d j        j                   dS  j        t
          j        k    rhrdS t          j                             t
          j                                      t
          j                            }|s 	d           |S r                                                     t
          j                                                                        t
          j                   t          j         d          rdS t
          j        j!        "                     dd          }|dk     rQtF          $                    d|%                                &                                '                                           |dk    S s                     j                   t          j                   rdS j        t
          j(        k    rNd})                                *                                s)                                *                                sZ )                                *                                r4t          j                            j                  ||          rdS tW                     '                                }tY          j)        |          rtF          $                    d           tW                    '                                }j        t
          j-        t
          j.        fv rdnd}
r!/                                dk    r	dk    rd}ns
r!/                                d k    r	dk    rd!}nP/                                d"k     s6 j0        d#k    r% j1        d$          j1        d%         cxk    rd&k    sn d'k    rd}|||z  dz  z   k    }|s=r;tY          j)        |          r'tY          j)        |          rtd          j3        j4        sd}|s) 	d(||5                                j        |
           |S rdS  	d)           dS t           tl          tn          t          d          t6          t
          j8        f          r)rdS  k    }|s 	d*t                                 |S ts                     stu                     rir2ts                    s#tu                    s '                                 t                     t                    u o k    }|s 	d+            |S tw                     r\t                     t                    u o=t          t          j<                   t          j<                  	
          S t                     j        d,v r\t                     t                    u sJ t          	 
fd- j=                                        D                       S t}          d.t                     j                   )/z-Check correctness to see if ref and res matchNztype mismatch rx   zLength mismatchFc              3  T   K   | ]"\  }}}t          |||
	           V  #dS )	log_error(use_larger_multiplier_for_smaller_tensorN)same)rU   aibi	fp64_reficos_similarity	equal_nanexact_dtypeignore_non_fpr  relax_numpy_equalitytolr  s       rE   rW   zsame.<locals>.<genexpr>T  so       ,
 ,
 "B	 $#9a  ,
 ,
 ,
 ,
 ,
 ,
rD   QuestionAnsweringModelOutputr  zkeys mismatch z == r  r  r  r  r  r  r  r  zAccuracy failed for key name %sTzelements mismatch c                b    t          | t          j                  r| nt          j        |           S r@   )r`  r   r  tensorr!  s    rE   	to_tensorzsame.<locals>.to_tensor  s%    "1el33H11aHrD   c              3  .   K   | ]} |          V  d S r@   r6   )rU   r  r  s     rE   rW   zsame.<locals>.<genexpr>  s+      MMiinnMMMMMMrD   zdtype mismatch %s, %srL  )atolrtolr  z+Accuracy failed: uint8 tensor did not matchr   gư>)dimepsgGz?zSimilarity score=%sg{Gz?z=Found nan in reference. Consider running in higher precision.g      @g       @
   g      $@i  g      @r     r  r3   g{Gz?zRMSE (res-fp64): %.5f, (ref-fp64): %.5f and shape=%s. res.dtype: %s, multiplier: %f, tol: %f, use_larger_multiplier_for_smaller_tensor: %dz+Accuracy failed: allclose not within tol=%szAccuracy failed (%s): %s != %sz!Accuracy failed (numpy): %s != %s)MaskedLMOutputSeq2SeqLMOutput!CausalLMOutputWithCrossAttentionsLongformerMaskedLMOutput	InstancesSquashedNormalBoxesNormalTanhTransformFooVariablec              3     K   | ]H}t          t          |          t          
|          t          |          	           V  IdS )r  N)r  r  )rU   rt   r  r  r  fp64_refr  r  rL  r  r|  r  r  s     rE   rW   zsame.<locals>.<genexpr>J  s       
 
  S!!S!!#&&-#'%9+#9a  
 
 
 
 
 
rD   zunsupported type: )?r`  r   ra  rA   r  r   r  ParameterListr  r   r   r  rh  r   r  lossrx  r   r   sortedr  rC   r  r7   	is_sparseto_denserM  r   allclosetoru  flattenr|  
functionalcosine_similarityr   r   cpudetachitemr}  isnanr  r  mathr{  bfloat16numelndimrX  inductor_configcppinject_relu_bug_TESTING_ONLYri  rM   rf   r[  ry  r~  r  	as_tensor__dict__rq  )rL  r|  r  r  r  r  r  r  r  r  r  r   rscore	loose_tol	ref_error	res_error
multiplierpasses_testr  s   ```````````        @rE   r  r  ;  s    dE;,eh.DejQ  PF ${01
 
 	4 	43DII33S		33	4 	4 	4 s88s3xxI'(((53xx3s88# 
 ,
 ,
 ,
 ,
 ,
 ,
 ,
 ,
 ,
 ,
 ,
 &)c8%<%<,
 ,
 ,
 )
 )
 	
  
c	=	=	= HHM 5]
 
 
 	
 
C		 fF#t$$$$$388::#HHJJ#
 #
 
 
 
BC

OOBBSXXZZBB
 
 
 

## 	 	AFFQK#1' +)="/'=e   	;Q???uu!" t	C		 NF#s#####3xx3s88###%R#c((%R%RC%R%R###t	C%,.	/	/ JFc5#4#?@@@@@c5#4#?@@@@@	I 	I 	I NMMMc88LMMMS(= 	!=   ,,..C,,..C#u|,,VV.VtCyy.V.V4PS99.V.VVVV 	yCI%%	139ciHHHuyEJ&&   4NFFF--FFF--'    MIKLLL k	++--""5=11C++--""5=11C~c3SsdKKK  tH'99#st9TTEt||1599;;3E3E3G3G3L3L3N3NOOOD=  (ffSY'' ~c3SsiPPP t ~.. %	 ((,,.. IIKKOO--  		))   #)44&&"+  	   4 3//4466	:i(( KKW   !3//4466	 9(GGGCCS  < %NN$$**sh!%JJ= %NN$$++x!$JJNN$$t++A#)B-39R=*M*M*M*MA*M*M*M*Mh
 "%J'J,BS4Z,OP#	'!	' 
9--	' 
9--		' ,/L	' #'K" II!!

	"@
 
 
 #" tICSIII5	C#sDJJelC	D	D =F 	43J 	MI6S		3LLL	3		 6F#6s#;#; 6F 	c""	&9#&>&>	 ((**C#YY$s))#5#* 	EI93DDD	#		 -FS		T#YY& 
DOC  OC  )#!5'5]-
 -
 -
 	
 
c	   
 
 CyyDII%%%% 
 
 
 
 
 
 
 
 
 
 
 
 
 
 |((**
 
 
 
 
 	
" DS		0BDDEEErD   c                n    | j                             d          d         }d| j         d| d| j         dS )N/r  r^  z' (ry   r  )r  splitr  r  )r  short_filenames     rE   format_func_infor  ^  sC    %++C004NGt|GGGG1DGGGGrD   c               #    K   t           j        } t          j        t           _        t           j        }t          j        t           _        	 d V  | t           _        |t           _        d S # | t           _        |t           _        w xY wr@   )r4   cache_size_limitrf  r   accumulated_cache_size_limit)priorprior_acc_limits     rE   disable_cache_limitr  c  sm      #E!kF9O*-+F'>"'.=+++ #(.=+====s   A& &B zDefaultDict[Any, List[Any]]guard_failuresz3List[torch._dynamo.output_graph.GraphCompileReason]graph_break_reasonsc                    dt           j                                                             d          z   dz   t          t	          j                              z   }t          j                            | |          S )Nrun_z%Y_%m_%d_%H_%M_%S_%fz-pid_)datetimenowstrftimerM   r   getpidr  rS   )root_dirdir_names     rE   _get_debug_dirr    sm     	




!
!
*
*+A
B
B	C 	 bikk

		  7<<(+++rD   c                 8    t           j        } t          |           S r@   )r4   debug_dir_rootr  )
debug_roots    rE   r  r    s    &J*%%%rD   c                    d| j         v r't          | j         d                   r| j         d         S |rddlm}  |d           d S d S )Nr/  r   r  z9`FakeTensor` example value was required but not available)r1  r8   torch._dynamo.excr  )r7  requiredr  s      rE   extract_fake_example_valuer    sf    $)##	/0J(K(K#y))	 333333QRRRRRtrD   c                6    t          |           |j        u sJ | S r@   )r9   r2  )r   rG  s     rE   ensure_graph_faker    s"    q!!R\1111HrD   c                ^     d fd}t           j        j                            ||          S )Nr/  torch.fx.Nodec                    | j         dk    rd| j        vrt          |           S | j        d         }s*t          |t          j                  rt          |          S |S )NrE  r/  )r-  r1  get_fake_valuer`  r   r  r  )r/  r}   allow_non_graph_fakerG  s     rE   visitz)get_fake_values_from_nodes.<locals>.visit  sm    4?""af'D'D "!R)=>>>f_%# 	.
3(E(E 	.$S"---
rD   )r/  r  )r   r   r7  map_arg)rG  r,  r  r  s   ` ` rE   get_fake_values_from_nodesr    sC    	 	 	 	 	 	 	 8=  ...rD   c           	     z    ddl m} ddlm}m}m}m}m}  j        }	d j	        v r't           j	        d                   r j	        d         S t           j         j        f|          \  d|	dk    rlt                    dk    rYt          d         t           j        j                  r4t'          d         j                  ft+          dd                   z   |	dk    raj        j         j                 t3                    r&t5          d	          r                               t'          j                  	 j        5  t9                      5  t;           fd
          }
ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   nV# |$ r  t<          $ rC}|}|j        |j        }t          |t           j         j!        j"                  r |d|j#         d           nt          |t           j         j!        j$                  rBt           j%        j&        j'        s |d|j#         d           ns |d|j#         d           n]t          |t           j         j!        j(                  r|j#        }	d}t          |	t           j)        j*                  rGt           j+        ,                    |	j-        j.        |	j-        j/                  }||\  }}d| d| d| d} |d|j#         d| d           nt          |t           j0        j1        j2        j3                  r  ||j4        tk          |          d          t          ||          r ||j4        |j        d                   |t          |tl                    r'dtk          |          v r |d j         d|             |tk          |                    7                    |j8                  dd}~ww xY w|s9ts          j:        t           j;        ty          j=        t|                    |
          }|
S )az  
    Run the computation represented by `node` using fake tensors and return the result.

    allow_non_graph_fake: whether to allow the return result to be:
        1. non-fake or 2. fake that is not created by this instance of Dynamo.
        If `True`, you must be prepared to deal with such return values, ideally
        by further wrapping them as this graph's fakes.
    r   )ValueRangeErrorr3   )TorchRuntimeErrorr  Unsupported	UserErrorUserErrorTyper/  Ncall_methodcall_module_initialize_hookc                 4    t          j                   S r@   )run_noderr  )r:  r;  nnmoduler7  rG  s   rE   rF   z get_fake_value.<locals>.<lambda>  s    D$II rD   zdata dependent operator: zC; to enable, set torch._dynamo.config.capture_scalar_outputs = Truezdynamic shape operator: zM; to enable, set torch._dynamo.config.capture_dynamic_output_shape_ops = Truezm; Operator does not have a meta kernel that supports dynamic output shapes, please report an issue to PyTorchr  z:It's possible that the support was implemented in module `z` and you may need to `import z`(z), otherwise zunsupported operator: z (z~see https://docs.google.com/document/d/1GgvOe7C8_NVOMLOCwDaYV1mXXyHMXY7ExoewHqooxrs/edit#heading=h.64r4npvq0w0 for how to fix)constrain_as_size_example)	case_nameargumentz
TypeError z: )rG  )?torch.utils._sympy.value_rangesr  r  r  r  r  r  r  r-  r1  r8   r  r:  r;  r   r`  r   r  r  r}  r2  ra  rr  
nn_modulestargetr  r  _infer_parametersr$   rx  rq  	__cause__r  r<  DataDependentOutputExceptionfuncDynamicOutputShapeException_dynamor4    capture_dynamic_output_shape_opsUnsupportedOperatorExceptionr  r  r  _dispatch_pystub_schemar  overload_namer   r4  r5  GuardOnDataDependentSymNodeCONSTRAINT_VIOLATIONrM   r5  with_traceback__traceback__pytreetree_map_onlyr  r  partialr  )r7  rG  r  r  r  r  r  r  r  r-  ret_valr   causeimport_suggestionmaybe_pystubr  ctxr  r:  r;  r  s   ``                @@@rE   r  r    s    @?????              
B $)##	/0J(K(K#y))-
TY$&: LD& H	]s4yy1}}DGUX_1U1U}'Q>>@5abb??R	]9'4(## 	7:L(M(M 	7
 &&x666 +8R\BBCR\ 	 	355 	 	)IIIIIIII G	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	     <R <R <R ;"KE5$0M
 
 5	? MTEJ T T T    5$0L
 
 .	? ='H 
buz b b b   
 8uz 8 8 8   
 5$0M
 
  	? B ""ej344 
$x88JORZ%=     +".KFC/#)/ /IO/ // / / &
 M# # #7H # # #   
 58(8T
 
 	? )2E

5   
 // 	?)M>q	JJPQQy)) 	?jCJJ.F.FM=t{==e==>>>A''66qGGTQy<R|   
 L)+,="EEEw
 
 Nsa   F* F#F:FF
	
FF
	FF* F!!F* $F!%F* *O=:H>O88O=c                 .    t          t          dd           S )Nr~   )r  _current_noder6   rD   rE   get_current_noder  .  s    ='4000rD   c              #     K   t                      }| t          _        	 d V  |t          _        d S # |t          _        w xY wr@   )r  r  r~   )r7  olds     rE   set_current_noder   2  sI      


CM"!c!!!!s   0 >c                .   j         t                    5  fd}	 dk    r j        i cddd           S dk    r5 t          d         j                  dd         i cddd           S dk    r|J  |i cddd           S dk    r+| j                            j                  cddd           S d	k    r$d
j        v sJ j        d
         cddd           S nx# t          t          f$ r&}ddl	m
}  | ||          |           Y d}~nFd}~wt          $ r6}t           ||                                        |j                  |d}~ww xY wddd           n# 1 swxY w Y   t                    )a  
    Runs a given node, with the given args and kwargs.

    Behavior is dictated by a node's op.

    run_node is useful for extracting real values out of nodes.
    See get_real_value for more info on common usage.

    Note: The tracer arg is only used for 'get_attr' ops
    Note: The nnmodule arg is only used for 'call_module' ops

    Nodes that are not call_function, call_method, call_module, or get_attr will
    raise an AssertionError.
    c           	     L    d dj          d d d	t          |           z   S )NzFailed running rx   z(*z, **z):
)r  rM   )r   r:  r;  r7  r-  s    rE   make_error_messagez$run_node.<locals>.make_error_messageO  s=    OROO$+OOOO6OOORUVWRXRXXXrD   rE  Nr  r   r3   r  get_attrplaceholderr/  r  r  )r-  r   r  r  output_graphget_submoduler1  r  ro  r  r  r   rq  r  r  AssertionError)	tracerr7  r:  r;  r  r#  r   r  r-  s	    ```    @rE   r  r  <  s    
B	$		  	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y	_$$"t{D3F33        }$$4wtAw44d122hI&II        }$$+++x000        z!!*88EE        }$$&$)3333y1#        % $%CD 	= 	= 	=******M,,Q//!<<<<<<<<< 	 	 	11!4455DD 	1              : 

s^   	E=C9.C9?C9$C9C98E=9E.
D+&E=+E.81E))E..E==FFc                J   ddl m} j        }| |v r||          S | j        }t          j        j                            | j        | j	        ffd          \  }}|dk    rd| j
        v r| j
        d         j        S |dk    rDj        j        | j                 }t          |          st!          j        |          }n ||i | nd}	 t%          | |||          }||| <   nC# t&          $ r6}	 |t)          |	                                        |	j                  dd}	~	ww xY w|S )z
    Run the actual computation represented by `node` and return the result.
    This will execute any dependent nodes in the graph as well.
    r3   )r  c                $    t          |           S r@   )get_real_value)r/  r)  s    rE   rF   z get_real_value.<locals>.<lambda>{  s    .F++ rD   r%  graphargr  N)r  r  real_value_cacher-  r   r   r7  r  r:  r;  r1  exampler&  r  r  r  rR  r{  r  rq  rM   r  r  )
r7  r)  r  cacher-  r:  r;  	nn_module
real_valuer   s
    `        rE   r,  r,  m  sl   
 '&&&&&#Eu}}T{	B8=((	DK ++++ LD&
 
]zTY66y$,,	]'24;?	i(( 	'i00II It&v&&&&	RfdD&)DD
 d R R RA''66qGGTQRs   C   
D *1DD c                   ddl mm} fd}|                                 D ])\  }} ||          rJ d| d ||                       *|                                 D ])\  }} ||          rJ d| d ||                       *d S )Nr   )FakeTensorConfigr8   c                X    j         r!dd l}d|                    | j                   S dS )Nr   z"FAKE TENSOR CREATION TRACEBACK: 
 zNEnable TORCH_FAKE_TENSOR_DEBUG=1 to get creation stack traces on fake tensors.)debug	tracebackformat_list_debug_trace)r!  r7  r4  s     rE   stack_or_hintz7assert_no_fake_params_or_buffers.<locals>.stack_or_hint  s?    ! 	d`9N9Nq~9^9^```ccrD   zUnexpected fake buffer rx   zUnexpected fake param )torch._subclasses.fake_tensorr4  r8   named_buffersnamed_parameters)r  r8   r:  r  bufferr  r4  s         @rE    assert_no_fake_params_or_buffersr?    s1   GGGGGGGGd d d d d ((** D Df7
 
 	D 	DCTCCMM&,A,ACC	D 	D 	D 	D **,, B Be7
 
 	B 	BADAA==+?+?AA	B 	B 	B 	BB BrD   r   c                $    | j          d| j         S )z9
    Returns the fully qualified name of the object.
    ra  )r   r   r  s    rE   fqnrA    s     n11s/111rD   c                6    t           j        j        j        r| S |S r@   )r   r	  r4   assume_static_by_default)count1count2s     rE   ifdynstaticdefaultrF    s    }4 rD   r  types.ModuleTypec           
     F   t          t          j        t          j                            t          t          | j                                                D ]I}|                    d          r2|d         dk    r&t          j
        | j         d|dd                     JdS )z@
    Ensure all the files in a given submodule are imported
    z.pyr   r  ra  N)r  r   listdirr  r!  r
   rM   __file__endswith	importlibimport_moduler   )r  r  s     rE   import_submodulerO    s     2:bgood36M6M&N&NOOPP G GU## 	Gs(:(:#s|$E$Ehssm$E$EFFFG GrD   r~   c                :    t          t          |                     S r@   )class_has_getattributer   rl  s    rE   object_has_getattributerR    s    !$u++...rD   r  r   c                    	 t          t          j        | d          t          j                  rdS n# t
          $ r Y nw xY wdS )N__getattribute__TF)r`  r  r  r  r  AttributeErrorr  s    rE   rQ  rQ    sc    "3(:;;
 
 	 4		
    5s   -2 
??ignore_nn_module_getattrc                    	 t          j        t          |           d          }n# t          $ r d }Y nw xY w|r|t          j        j        j        u rd }|S )N__getattr__)r  r  r   rU  r   r  r  rY  )r~   rW  
getattr_fns      rE   get_custom_getattrr[    si    +DKKGG

   


 J%(/2M$M$M
s   "% 44c                      e Zd ZdZdZdZdS )TensorStaticReason   r  rz   N)r   r   r   	PARAMETER
NOT_TENSORNN_MODULE_PROPERTYr6   rD   rE   r]  r]    s         IJrD   r]  rv  c                    | t           j        k    rdS | t           j        k    rdS | t           j        k    rdS t	          d|            )Nz>mark_dynamic on parameter, parameters are always static today.z2mark_dynamic on a non tensor, how did this happen?z4tensor is static because it is nn module associated.zIllegal reason )r]  r_  r`  ra  r(  )rv  s    rE   tensor_static_reason_to_messagerc    sX    #---OO#...CC#666EE
3633
4
44rD   r  Union[torch.Tensor, Any]	is_tensortensor_sourcer%   )Tuple[bool, Optional[TensorStaticReason]]c                   ddl m} |                                                                s&|                                                                rt
          j        rdt          j        fS t          |           t          j        j        u s ||          rt
          j        rdt          j        fS |sdt          j        fS dS )a@  
    Given a tensor, source, and is_tensor flag, determine if a shape should be static.

    Args:
    tensor - the real tensor to evaluate, parameters force a static shape.
    is_tensor - internal dynamo check, essentially "is_tensor": target_cls is TensorVariable,
    tensors not in a TensorVariable for whatever reason are forced static.

    Returns a tuple, where the first element is the bool of whether or not this tensor should have a static shape.
    The second element is a TensorStaticReason, useful for passing to tensor_static_reason_to_message if needed.
    r3   ))is_from_unspecialized_param_buffer_sourceT)FN)sourceri  guard_sourceis_specialized_nn_module"is_unspecialized_builtin_nn_moduler4   &force_nn_module_property_static_shapesr]  ra  r   r   r  r  force_parameter_static_shapesr_  r`  )r  re  rf  ri  s       rE   tensor_always_has_static_shaperp    s      BAAAAA 	""$$==??;%%''JJLL; 
7; '::: 	V***44]CC 	+

. 	+ '111 3'222;rD   c                0      fd}t          |          S )Nc                     	 ddl m }  n0# t          $ r# dt          t                              z   cY S w xY wd j        j        D             } | |g d          }t          j        j        j	        |          S )Nr   )rX   zkTabulate module missing, please install tabulate to log the graph in tabular format, logging code instead:
c                N    g | ]"}|j         |j        |j        |j        |j        g#S r6   )r-  r  r  r:  r;  )rU   r/  s     rE   r   z<lazy_format_graph_tabular.<locals>.inner.<locals>.<listcomp>	  s:     
 
 
;<QT1618QVQX6
 
 
rD   )opcoder  r  r:  r;  rO   )
rX   rY   rM   r+   graphr,  r*   r   __code__r  )rX   
node_specs	graph_strfn_namer  s      rE   innerz(lazy_format_graph_tabular.<locals>.inner	  s    	))))))) 	 	 	~,Wb99::;  	
 
@B
 
 

 H N N N
 
 
	 "'2:+>+JIVVVs   
 *77r1   )ry  r  rz  s   `` rE   lazy_format_graph_tabularr{  	  s8    W W W W W W" erD   c                l    |  d| d| d| dt          j        |                                            d
S )Nrx   z line z 
rP   )disBytecode)prefixr  r  line_nor  s        rE   format_bytecoder  "	  sG    VVtVVhVVgVV#,t:L:L:P:P:R:RVVVVrD   _forward_pre_hooks_forward_hooks_backward_pre_hooks_backward_hooks)_state_dict_pre_hooks_state_dict_hooks_load_state_dict_pre_hooks_load_state_dict_post_hooksc                     t          t          j        j        j        j                  p't          t          j        j        j        j                  S r@   )r   r   r  modulesr  _global_backward_hooks_global_backward_pre_hooksr6   rD   rE   nn_module_has_global_hooksr  1	  s@     ux&=>> #:C C rD   c                @   g }| o| o| }|s|r|                     t                     |s|r|                     t                     |r|                     t                     g }|D ]5}t	          | |g           }|D ]}	||	         }
|                    |
            6|S )z
    Sometimes its useful to differentiate between types of hooks such as forward/backward/pre
    hooks executed during module.__call__, and state_dict hooks which are executed separately.
    )extendforward_hook_namesbackward_hook_namesstate_dict_hook_namesr  r   )r  check_forward_hookscheck_backward_hookscheck_state_dict_hookshook_dicts_to_checkcheck_all_hooks	all_hookshook_dict_namehooks	hook_namer@  s              rE   nn_module_get_all_hooksr  9	  s      	'$$	'&& 
  7o 7""#5666 8 8""#6777 :""#8999I- # #^R00 	# 	#I#DT""""	# rD   c                F    t          | |||          }t          |          S )zL
    Helper function to check if a module has any hooks attached to it.
    )r  r  r  )r  r   )r  r  r  r  r  s        rE   nnmodule_has_hooksr  Z	  s2     $/15	  E ;;rD   c                `   t          |           r| S t          | t          j                  rt	          | j                  S t          | t          j                  r|                     d          S t          | t          t          f          r" t          |           d | D                       S | S )z0Convert tensor and tnp.ndarray to numpy.ndarray.T)forcec              3  4   K   | ]}t          |          V  d S r@   )to_numpy_helperrU   rS  s     rE   rW   z"to_numpy_helper.<locals>.<genexpr>u	  *      AAC?3//AAAAAArD   )r8   r`  tnpr  r  r  r   r  numpyra  r   r   rl  s    rE   r  r  l	  s    u~~ %%% u|,,,	E5<	(	( {{{&&&	EE4=	)	) tE{{AA5AAAAAArD   c                2   t           J t          | t           j                  rt          j        |           S t          | t
          j                  r| j        S t          | t          t          f          r" t          |           d | D                       S | S )zeConvert tnp.ndarray to tensor, leave other types intact. If a list/tuple, loop through it to convert.Nc              3  4   K   | ]}t          |          V  d S r@   )numpy_to_tensorr  s     rE   rW   z"numpy_to_tensor.<locals>.<genexpr>	  r  rD   )
rp  r`  r  r   r  r  r  ra  r   r   rl  s    rE   r  r  z	  s    >>>%$$ &u%%%%%% |	EE4=	)	) tE{{AA5AAAAAArD   c                       e Zd Zd Zd Zd ZdS )numpy_to_tensor_wrapperc                <    || _         d| j         j        z   | _        d S Nwrapped_r&  r   )r   r&  s     rE   r   z numpy_to_tensor_wrapper.__init__	  s    "TV_4rD   c                "    d| j         j         dS )Nz<Wrapped function <original >>r  r   s    rE   __repr__z numpy_to_tensor_wrapper.__repr__	  s    AdfoAAAArD   c                :     | j         |i |}t          |          S r@   )r&  r  r   r:  r;  r}   s       rE   r8  z numpy_to_tensor_wrapper.__call__	  s&    dfd%f%%s###rD   N)r   r   r   r   r  r8  r6   rD   rE   r  r  	  sD        5 5 5B B B$ $ $ $ $rD   r  c                   t          | t          j                  rt          | |          }t	          |          S t          | t
          j                  r1t          t          j        |           |          }t	          |          S d S r@   )r`  r  r  r  r  r   r  )rS  r  r}   s      rE   numpy_attr_wrapperr  	  sx    #s{## $c4  s###	C	&	& $ck#&&--s###$ $rD   c                  &    e Zd ZdZddZd Zd ZdS )	numpy_method_wrapperzgConvert obj from torch.Tensor to tnp.ndarray and call method. Then convert result back to torch.Tensor.methodrM   c                2    || _         d| j         z   | _        d S r  )r  r   )r   r  s     rE   r   znumpy_method_wrapper.__init__	  s    "T[0rD   c                    d| j          dS )Nz<Wrapped method <original r  )r  r   s    rE   r  znumpy_method_wrapper.__repr__	  s    ;DK;;;;rD   c                    |d         }t          |t          j                  rt          j        |          }t          || j                  } ||dd          i |}t          |          S Nr   r3   )r`  r   r  r  r  r  r  r  )r   r:  r;  rS  method_callabler}   s         rE   r8  znumpy_method_wrapper.__call__	  si    1gc5<(( 	#+c""C!#t{33otABBx2622s###rD   N)r  rM   r   r   r   rR  r   r  r8  r6   rD   rE   r  r  	  sL        qq1 1 1 1< < <$ $ $ $ $rD   r  c                  &    e Zd ZdZddZd Zd ZdS )	numpy_operator_wrapperzQImplements dunder methods for tnp.ndarray via functions from the operator libraryr-  Callable[..., Any]c                2    || _         d|j         | _        d S r  )r-  r   )r   r-  s     rE   r   znumpy_operator_wrapper.__init__	  s    02;00rD   c                    d| j          dS )Nz<Wrapped operator <original r  )r   r   s    rE   r  znumpy_operator_wrapper.__repr__	  s    ?dm????rD   c                T    |rJ d |D             } | j         | }t          |          S )Nc              3  v   K   | ]4}t          |t          j                  rt          j        |          n|V  5d S r@   )r`  r   r  r  r  r  s     rE   rW   z2numpy_operator_wrapper.__call__.<locals>.<genexpr>	  sS       
 
KN
3 = =FCK3
 
 
 
 
 
rD   )r-  r  r  s       rE   r8  znumpy_operator_wrapper.__call__	  sI    
 
RV
 
 
 dgtns###rD   N)r-  r  r  r6   rD   rE   r  r  	  sO        [[1 1 1 1@ @ @$ $ $ $ $rD   r  c                "   t          | t                    s| S | j        rg }|                                 D ]n}t          |t          j                  r=|                    |j        j        	                    |j        j
                             Y|                    |           og }|                                 D ]n}t          |t          j                  r=|                    |j        j        	                    |j        j
                             Y|                    |           on(|                                 }|                                 }t	          j        ||| j        | j        | j                  }|                                 |S )N)rM  r[  rG  )r`  r7   _has_symbolic_sizes_stridesri  r   SymIntr   r7  r3  	size_hintexprrY  empty_stridedrM  r[  rG  zero_)r   ri  r+  rY  rJ  s        rE   defaker  	  se   a$$  	$  	 	A!U\** AF,66qv{CCDDDDA 	! 	!A!U\** !af.88EEFFFFa    		! vvxxgxo	 	 	A GGIIIHrD   c                0    dd l }| |j        j        j        u S rb   )torch.utils.checkpointr  
checkpoint)rS  r   s     rE   is_utils_checkpointr  	  s!    !!!!%+(333rD   c                     dd l mc m} ddlm} |j        }t          j        j        j	        r|j
        } |j        |fi | S )Nr   r3   ) TorchHigherOrderOperatorVariable)torch._higher_order_ops.wrap_higher_order_opswrapvariables.higher_order_opsr  tag_activation_checkpointr   
_functorchr4   functionalize_rng_opswrap_activation_checkpointmake)optionshigher_order_opsr  activation_checkpoint_ops       rE   build_checkpoint_variabler  	  s    ;;;;;;;;;LLLLLL
 	2  4 O#3#N 0+0  
  rD   c                f    ddl m}  |            }| dk    rn| dk    r|rt                      }nd}|S )Nr3   )is_dynamo_supportedr  r  F)
eval_framer  r-   )device_typer  compile_supporteds      rE   is_compile_supportedr  	  s[    //////++--e			#4	&LL!rD   offsetc                    |                      d          }t          |d|                             dd                    S )z
    Convert byte offset `offset` of `str` into character offset.
    Byte offset is used for 3.11+ instruction column data.
    Takes things like unicode characters into consideration.

    Unchanged from CPython implementation.
    zutf-8Nrf  )errors)encoder   decode)rM   r  as_utf8s      rE   _fix_offsetr  
  s?     jj!!Gwww&&wy&AABBBrD   c                  8    e Zd ZU ded<   ded<   ded<   ded<   dS )_Anchorsrf   left_end_linenoleft_end_offsetright_start_linenoright_start_offsetNr  r6   rD   rE   r  r  
  sD          rD   r  segmentOptional[_Anchors]c                   t           j        dk    sJ ddl}	 |                    d| z   dz             }n# t          $ r Y dS w xY wt          |j                  dk    rdS |                     d          fd}fd	fd
}fd}|j        d         }t          ||j	                  r|j
        }t          ||j                  rt          t          |j        j                  dz
  } |||j        j                  }	 ||	          \  }}	|         |	         x}
                                s|
dv rI|
dv r |||	          \  }}	n |||	          \  }}	|         |	         x}
                                E|
dv I|	dz   }|t          |                   k     r+|         |         x}
                                s	|
dvr|dz  }t%          ||	||          S t          ||j                  rt          t          |j
        j                  dz
  } |||j
        j                  } ||          \  }}|         |         dk    r! |||          \  }}|         |         dk    !t          t          |j                  dz
  } |||j                  }t%          ||||          S t          ||j                  rt          t          |j        j                  dz
  } |||j        j                  } ||          \  }}|         |         dk    r! |||          \  }}|         |         dk    !t          t          |j                  dz
  } |||j                  }t%          ||||          S dS )a  
    Given source code `segment` corresponding to a bytecode
    instruction, determine:
        - for binary ops, the location of the binary op
        - for indexing, the location of the brackets.
    `segment` is expected to be a valid Python expression
    )rc     r   Nz(
z
)r3   rP   c                0    t          |          |          S r@   )r  )linenor  liness     rE   	normalizez-_extract_anchors_from_expr.<locals>.normalize?
  s    5=&111rD   c                &   | t                    k     rL|t          |                    k    r3d}| dz  } | t                    k     r|t          |                    k    3| t                    k     r|t          |                    k     sJ | |fS r  r   )r  colr  s     rE   next_valid_charz3_extract_anchors_from_expr.<locals>.next_valid_charD
  s    s5zz!!cSv-?-?&?&?CaKF s5zz!!cSv-?-?&?&? E

""sSv-?-?'?'?'?'?s{rD   c                    |dz  } | |          \  } }| t                    k     r|t          |                    k     sJ | |fS r^   r  r  r   r  r  s     rE   	incrementz-_extract_anchors_from_expr.<locals>.incrementL
  sX    q%ofc22E

""sSv-?-?'?'?'?'?s{rD   c                    d}| dz  }  | |          \  } }| t                    k     r|t          |                    k     sJ | |fS r  r  r  s     rE   nextlinez,_extract_anchors_from_expr.<locals>.nextlineS
  s]    !%ofc22E

""sSv-?-?'?'?'?'?s{rD   r^  z)\#z\#r[  r]  )rf  rg  astparseSyntaxErrorr   bodyr  r`  Exprr~   BinOpr
   rf   left
end_linenoend_col_offsetisspacer  	SubscriptCallr  )r  r  treer  r  r  	statementr  
cur_linenocur_colch	right_colleft_linenoleft_colright_linenor  r  s                  @@rE   _extract_anchors_from_exprr  %
  sH    w&&&&JJJ yy5011   tt 49~~tMM$E2 2 2 2 2
               	!I)SX&& >LdCI&& <	L c49#7881<Ji
DI,DEEG"1/*g"F"FJ z*7332<<>> I",,;;*2(:w*G*G'J*3)J*H*H'J	 z*7332<<>> I",,  !ICj 12222$Z0;;DDFF 3eOOQ	 JYGGGcm,, 	L sDJ$9::Q>K ydj.GHHH$3OK$J$J!K$X.#55(1	+x(H(H%X $X.#55  T_559L!	,0CDDIK<KKKch'' 	L
 sDI$899A=K ydi.FGGH$3OK$J$J!K$X.#55(1	+x(H(H%X $X.#55  T_559L!	,0CDDIK<KKK4s   6 
AAr  types.CodeTypeinstdis.Instructionc                j   |j         J |j         j        dS t          j        | j        |j         j                                                  }|j         j        |S |j         j        |j         j        |S t          ||j         j                  }d}d}g }|j         j        |j         j        k    rGt          ||j         j                  }|||         }|
                    d|z  d||z
  z  z              n||d         dz   }|
                    d|z  dt          |          |z
  z  z              t          j        | j        |j         j                                                  }t          ||j         j                  }t          |j         j        dz   |j         j                  D ]}t          j        | j        |                                          }	||	dz   z  }t          |	          t          |	                                          z
  }
|
                    d|
z  dt          |	          |
z
  z  z              ||d|         z  }t          |          t          |                                          z
  }
|
                    d|
z  d||
z
  z  z              d}	 t          |          }n# t          $ r Y nw xY w|d |D             }nd |D             }|j        d	k    r|xj        |z  c_        |j        d	k    r|xj        |z  c_        t          t          |                    D ]}t          t          ||                             D ]e}||j        k     r||j        k    r||j        k     r%||j        k    r||j        k    r<||j        k    rH||         |         dk    rd
||         |<   fd |D             }d}t          t          |                    D ]O}|t          j        | j        |j         j        |z                                             dz   z  }|||         dz   z  }P|S )a  
    Python 3.11+ only. Returns lines of source code (from code object `code`)
    corresponding to `inst`'s location data, and underlines relevant code to `inst`.

    Example: CALL on `g`:
    f(g(
      ^^
        h(x)))
        ^^^^^

    We need our own implementation since `format_frame_summary` in
    Python's `traceback` module doesn't handle multi-line expressions
    (and their anchor extraction code is not completely correct).
    Nr  rx   ~rP   r3   c                :    g | ]}|                     d d          S )r!  ^)rf  rU   markers     rE   r   z.get_instruction_source_311.<locals>.<listcomp>
  s&    BBB6>>#s++BBBrD   c                ,    g | ]}t          |          S r6   r   r$  s     rE   r   z.get_instruction_source_311.<locals>.<listcomp>
  s    +O+O+OVDLL+O+O+OrD   r   r#  c                8    g | ]}d                      |          S )r  rj  r$  s     rE   r   z.get_instruction_source_311.<locals>.<listcomp>
  s"    AAAv2776??AAArD   )	positionsr  	linecachegetliner  rstripr  
col_offsetr  r  r   r   rz  lstripr  r(  r  r  r  r  )r  r  
first_linestart_offset
end_offsetr  markers	last_liner  line
num_spacesanchorsmutable_markersr   ru  r)  s                   rE   get_instruction_source_311r8  
  s    >%%%~$r "4#3T^5JKKRRTTJ~ (~ (DN,I,Q z4>+DEEL JGG ~ DN$999 T^-JKK
\*45s\)C:3L,MMNNNN\]]+d2s\)C3z??\3Q,RRSSS%dn7
 

&(( 	 !DN,IJJ
DN1A5t~7PQQ 	N 	NF$T%5v>>EEGGDtd{"GTS%7%77JNN3+cSYY5K.LLMMMM9[j[))^^c)*:*:*<*<&=&==
sZ'#j1H*IIJJJ"&G,W55    BB'BBB ,P+Ow+O+O+O "a''##|3##%**&&,6&& CLL)) 	7 	7FS!899:: 7 7G333W444w?V9V9Vg888w999G666"6*3/36636OF+C07  BAAAAF3w<<   $ $d.0E0IJJQQSS	
 	'!*t##Ms   !J1 1
J>=J>c                \    t          | t          j                  rt          | dd           S d S )N_dynamo_static_input_type)r`  r   r  r  r  s    rE   get_static_address_typer;  
  s.    !U\"" =q5t<<<4rD   c                   t           j        j        j        t           j        j        t           j        t           j        j        f}t           j        j        j        t           j        j        t           j        t           j        j        f}| g ||R v S r@   )	r   r  	Generator	get_statedefault_generatorr  r  	set_stater  )r~   getterssetterss      rE   is_rng_state_getter_or_setterrC    ss     	$)
 G 	$)
 	G (g(((((rD   c                    t          | t          j                  o'| j        dk    o| j        j        t          j        j        u S )N__get__)	r`  r  r   r   __self____objclass__r   r  _TensorBaserl  s    rE   is_tensor_base_attr_getterrI  "  s?    5%122 	@Ni'	@N'58+??rD   c                "    t          | d          S )N__torch_function__)r  rl  s    rE   is_torch_function_objectrL  *  s    5.///rD   r;  ,torch._dynamo.variables.base.VariableTrackerc                    ddl m}m} ddlm} t          | |          rdS t          | |          r|                    |            t          | |          ot          | j        d          S )Nr   )LazyVariableTrackerUserDefinedObjectVariable)TensorWithTFOverrideVariableTrK  )	torch._dynamo.variablesrO  rP  &torch._dynamo.variables.torch_functionrQ  r`  realizer  r~   )r;  rO  rP  rQ  s       rE   has_torch_functionrU  .  s    VVVVVVVVSSSSSS"233 t")** (##B'''b344 
&: : rD   c                    d }d }t           j        j                                        x}r| |j        v r|j        |          }|j        }|                    | d||          S )NF)static_shapessymbolic_contextrj  )r   r   r&   r   tensor_to_contextrf  from_tensor)r!  r2  rX  rj  tracing_contexts        rE   to_fake_tensorr\  >  sv    F-6>>@@@ 4111.@C%3F  	1A& !   rD   c                x    t          |            o*t          |            ot          |           o| j        j        S r@   )rR  rQ  r   __dataclass_params__frozenrl  s    rE   is_frozen_dataclassr`  L  sH    #E*** 	.&u---	.	. &-	rD   c                x    |D ]$}t          | |          rt          | |          c S %t          |  d|           )zX
    Return the first available attribute or throw an exception if none is present.
    z% does not has any of the attributes: )r  r  r(  )rS  attrsattrs      rE   get_first_attrrd  U  s^      & &3 	&3%%%%%	& CMMeMM
N
NNrD   c              #     K   | sd V  d S fd}t           j        j                            |          5 }|V  d d d            d S # 1 swxY w Y   d S )Nc                :    d }t          j        | |          S )Nc                    t           j        j        j        d         dxx         dz  cc<   t           j                            | |          S )Ncompiled_autogradcompilesr3   )r   r	  r  r;   	_inductorcompile)gm_example_inputs_s     rE   inner_compilerzKmaybe_enable_compiled_autograd.<locals>.compiler_fn.<locals>.inner_compilerg  sE    #,-@A*MMMQRRMMM..sODDDrD   )backend	fullgraphdynamic)r   rk  )r  rn  rq  rp  s     rE   compiler_fnz3maybe_enable_compiled_autograd.<locals>.compiler_fnf  s9    E E E =Ni   rD   )r   r	  rh  enable)should_enablerp  rq  rr  r  s    ``  rE   maybe_enable_compiled_autogradru  `  s       	 	 	 	 	 	 ],33K@@ 	CIII	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A		AAc                 V     G d dt                     } t           |                       S )Nc                      e Zd ZdS )*invalid_removeable_handle.<locals>.InvalidN)r   r   r   r6   rD   rE   Invalidrx  u  s        rD   ry  )rx  r/   )ry  s    rE   invalid_removeable_handlerz  s  sB        $    7799%%%rD   c                    t          | t          j        j                  s| S t          | t          j        j                  r| S | j                            | j                  }| j        |_        |S r@   )	r`  r   r  r  r   GraphModulerA  __new__r  )r  proxys     rE   nn_module_proxyr    s^    c58?++ 
#ux+,, 
M!!#-00E\ENLrD   c                  $     e Zd Z fdZd Z xZS )	GmWrapperc                d    t                                                       || _        || _        d S r@   )r?  r   r  unflatten_fn)r   r  r  rA  s      rE   r   zGmWrapper.__init__  s.    (rD   c                Z    t          |          } | j        |                     |           S r@   )r   r  r  r7  s     rE   r   zGmWrapper.forward  s*    t**tw))$//00rD   )r   r   r   r   r   rB  rC  s   @rE   r  r    sG        ) ) ) ) )
1 1 1 1 1 1 1rD   r  r  torch.fx.GraphModulec                  	
 d t          | j        j                  D             
t          j        j        j        rg
dgk    sJ t          |d         t                    sJ t          |d                   d 	fd} |t          | |           	|                    n]t          j        |          \  }}t          j        t          j        |          } |t          | |          |          t          j        		
fd}|S )z
    Mutate inputs so that they are flat and wrap gm such that it
    accepts those inputs.  This is needed for graphs that take
    bumpy inputs.
    c                d    g | ]-\  }}|j         d k    |j                            dd          +|.S )r%  	steal_argF)r-  r1  rp   )rU   r)  r7  s      rE   r   z(flatten_graph_inputs.<locals>.<listcomp>  sH       At7m##	k5(I(I# 	
###rD   r   c                B    | d         t          | dd                    z   S r  r'  r  s    rE   
flatten_fnz(flatten_graph_inputs.<locals>.flatten_fn  s    7T$qrr(^^++rD   c                0    | d          g| d          R S r@   r6   )	flat_argsboxed_inputs_counts    rE   r  z*flatten_graph_inputs.<locals>.unflatten_fn  s,    1112TY?Q?R?R5STTTrD   )treespecc                 n     |           }D ]}| |                                            |          S r@   )rc   )r:  r  r)  compiled_fnr  inputs_idx_to_clears      rE   wrapperz%flatten_graph_inputs.<locals>.wrapper  sH    Jt$$	 % 	 	AGMMOOOO {9%%%rD   )	enumerateru  r,  r   r	  rh  in_compiled_autograd_regionr`  r   r   r  r  tree_flattenr  r  tree_unflattenarg_tree_leaves)r  inputs
compile_gmr  flat_inputsspecr  r  r  r  r  s          @@@@rE   flatten_graph_inputsr    sT     00   }&B , #qc))))&)T***** ^^	, 	, 	,	U 	U 	U 	U 	U !j2|!<!<jj>P>PQQ #/77T ()>NNN j2|!<!<kJJ+
& & & & & & & NrD   c                    t          | t          j        j                  rt	          | d          sg S | j                            dg           S )Nr1  locals_to_steal)r`  r   r   r|  r  r1  rp   )maybe_gms    rE   get_locals_to_stealr    sH    h 455 WXv=V=V 	=.333rD   c                    || j         d<   d S )Nr  )r1  )r  r  s     rE   set_locals_to_stealr    s    !0BGrD   c                      e Zd Zd Zd ZdS )Litc                    || _         d S r@   r+  )r   r+  s     rE   r   zLit.__init__  s    rD   c                    | j         S r@   r  r   s    rE   r  zLit.__repr__  s	    vrD   N)r   r   r   r   r  r6   rD   rE   r  r    s2              rD   r  r  warn_once_cachec                    | t           v rd S t                               |            t          j        | |dz              d S )Nr3   )
stacklevel)r  r   warningswarn)rw  r  s     rE   	warn_oncer    sG     oM#*q.111111rD   c                V    t          j        d          }|                    d|           S )Nz\x1B[@-_][0-?]*[ -/]*[@-~]r  )r  rk  r  )textansi_escapes     rE   strip_color_from_stringr    s&    *:;;K??2t$$$rD   c               #     K   	 t           j        j                            d          } d V  t           j        j                            |            d S # t           j        j                            |            w xY wNT)r   r  	_autograd _saved_tensors_hooks_set_tracing)r  s    rE   +_disable_saved_tensors_hooks_during_tracingr    sk      C"CCDII;;EBBBBB;;EBBBBs   (A &A8c                 V    t           j        j        j        ot          j                     S r@   )r   rj  r4   freezingis_grad_enabledr6   rD   rE   is_parameter_freezingr    s!    ?!*J53H3J3J/JJrD   c                ~    ddl m d t          t                                D             }| rfd|D             }|S )Nr3   )IGNORED_MODESc                ,    g | ]}t          |          S r6   )r   r  s     rE   r   z1get_torch_function_mode_stack.<locals>.<listcomp>  s!    SSS1#A&&SSSrD   c                6    g | ]}t          |          v|S r6   )r   )rU   moder  s     rE   r   z1get_torch_function_mode_stack.<locals>.<listcomp>  s)    KKK$4::]+J+J+J+J+JrD   )variables.torch_functionr  rz  r!   )filter_ignoredr  r  s     @rE   get_torch_function_mode_stackr    s^    777777SS6O6Q6Q0R0RSSSE LKKKK%KKKLrD   c                t    | t                      k     r| dk    sJ t          j                            |           S rb   )r!   r   r  r   )inds    rE    get_torch_function_mode_stack_atr    s6    *,,,,8**3///rD   c                    t          t                                D ]}t                       | D ]}t          |           d S r@   )rz  r!   r"   r#   )r  r)  r  s      rE   set_torch_function_mode_stackr    sY    ,..// $ $!#### , ,%d++++, ,rD   c                    | j         }t          j        |          }t          |j                  dk    rddlm}  |d          |j        | j        k    rddlm}  |d          d S )Nr^  r3   )InternalTorchDynamoErrorz[Tensor subclass method __metadata_guard__ must take exactly two subclass metadata argumentsz?Tensor subclass method __metadata_guard__ must be a classmethod)	__metadata_guard__r  	signaturer   r  r  r  rF  rA  )r~   r  sigr  s       rE   verify_guard_fn_signaturer    s    		!B

B

C
3>a111111&&i
 
 	
 
{eo%%111111&&M
 
 	
 &%rD   c                "   | j         t          j         t          j        j         fv ok| j        t          j        t          j        j        fv oG| j        t          j        t          j        j        fv o#| j        t          j        t          j        j        fv S r@   )rq   rx  rA   r   ro   r   __iter__)user_clss    rE   #does_not_override_dict_iter_methodsr  !  sx    4:{'>'DEE 	SO[-D-KLL	SMdi)@)EFF	S $-1H1Q!RR	rD   c                ,     ddg} fd|D             }|S )Nr:  tagc                b    i | ]+}|j         v |t          j        j         |                   ,S r6   )r  rR  )rU   rt   r!  s     rE   r  z(_extract_tensor_dict.<locals>.<dictcomp>2  s>       ,/3!*CTCTTYqz#''CTCTCTrD   r6   )r!  KEYS_TO_COPYtensor_dicts   `  rE   _extract_tensor_dictr  ,  s@    #L
   3?  K rD   z(Dict[int, weakref.ReferenceType[object]]user_obj_id_to_weakrefc                F    t          |                      }|
J d            |S )NzUser object is no longer alive)r  )obj_idrS  s     rE   get_user_object_from_idr  ?  s'    
 
(
*
*C??<???JrD   c                \    t          |           }t          j        |           t          |<   d S r@   )rC  rN  rL  r  )rS  r  s     rE   store_user_object_weakrefr  E  s(    WWF%,[%5%56"""rD   c                      e Zd ZU dZded<   dZded<   dZedd            Zedd	            Z	edd
            Z
edd            Zeed                         ZdS )CompileTimeInstructionCounterr   rf   _counterr  _idrL   r\   c                n    | j         dz   | _         | j         dk    rt          j                    | _        d S d S r^   )_depthr    r   r  rV  s    rE   r   z#CompileTimeInstructionCounter.startO  s5    Z!^
:??*022CGGG ?rD   c                    | j         dz
  | _         | j         dk    r0| xj        t          j        | j                  z  c_        d| _        d S d S )Nr3   r   r  )r  r  r    endr  rV  s    rE   r  z!CompileTimeInstructionCounter.endU  sJ    Z!^
:??LL04SW===LLCGGG ?rD   c                    d| _         d S rb   r  rV  s    rE   rc   z#CompileTimeInstructionCounter.clear\  s    rD   c                    | j         S r@   r  rV  s    rE   r~   z#CompileTimeInstructionCounter.value`  s
    |rD   c              #     K   	 t           j        r|                                  d V  t           j        r|                                  d S d S # t           j        r|                                  w w xY wr@   )r4   %record_compile_time_instruction_countr   r  rV  s    rE   recordz$CompileTimeInstructionCounter.recordd  st      	; 		EEE; 					 v; 				s   $A #A/Nr.  )rL   rf   )r   r   r   r  r  r  r  classmethodr   r  rc   r~   r   r  r6   rD   rE   r  r  J  s         HCMMMMF3 3 3 [3
    [    [    [   ^ [  rD   r  )rH   rI   rJ   rK   rL   rM   r.  )re   rf   rL   r\   )rL   rj   )rt   rM   r   rM   r   rC   rL   r\   )rL   r<   r  )rt   rM   r   r   r   r   )F)r   r   r   r   rL   rM   )r   r   r   r   rL   r   )rM   F)r   r   )rL   rM   )r  rM   rL   r\   )r(  r)  rL   rf   )rS  rT  rU  rV  rL   rW  )rS  rT  rU  r[  rL   rW  )rS  rT  rU  r]  rL   r   r@   )r  r  )r  rf   rL   r\   )rL   r  )rL   r  )r  r}  )r3   )T)rS  r   )r  rG  )r~   r   )r  r   )r~   r   rW  r   )rv  r]  )r  rd  re  r   rf  r%   rL   rg  )FFF)rM   rM   r  rf   rL   rf   )r  rM   rL   r  )r  r  r  r  rL   rM   )r;  rM  rL   r   )TT)r  r  (  
__future__r   atexitrA   r   rR  r  r  r}  r  r  r  rM  r  rZ   r*  r  r  r  r   r  rf  r  r   r  ri  r  r  rN  r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   typing_extensionsr   r   r   torch._functorch.configtorch._inductor.configrj  r4   r  %torch.fx.experimental.symbolic_shapestorch.utils._pytreer  _pytreer  r   torch._Cr   r    r!   r"   r#   torch._dispatch.pythonr$   torch._guardsr%   r&   torch._subclasses.meta_utilsr'   torch._utils_internalr(   r)   torch.fx._utilsr*   r+   torch.nn.modules.lazyr,   torch.utils._tritonr-   r.   torch.utils.hooksr/   r  rp  ModuleNotFoundErrortorch._loggingtorch._numpy_numpyr  r0   r2   r  fftlinalgr  r5   r  NP_TO_TNP_MODULEr;  r7   r8   r9   rY   r:   r  r  rY  unpatched_nn_module_getattrrB   r;   r=   troubleshooting_urlnnmodule_doc_urlnnmodule_doc_url_msgr	  r   r   r>   rG   r6  timer_counterrX   r_   r`   rd   rh   ri   rv   r   r   r   r   r   registerr   FloatTensorr|  rC   DoubleTensorr}  double
HalfTensorr{  halfBFloat16Tensorr  
ByteTensorru  
CharTensorrq  
LongTensorrt  long	IntTensorrs  rf   ShortTensorrr  short
BoolTensorr   tensortype_to_dtyper   r   r   r   r   r  r  r'  r0  r2  r7  r<  r>  rZ  rg  ParamSpecArgsParamSpecKwargs	ParamSpecTypeVarTupleTypeAliasTyperh  rm  ry  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   !DEFAULT_COMPILATION_METRICS_LIMITr  r  r   r  r  r  r  r/  r   r2  r5  r=  rK  rQ  ry  r  r  r  r  r  r  r  r  r  r  r  r  complexrM   bytesr   EllipsisrA  CodeTyper[  rM  memory_formatrV  r  tritonr   languager  r  r  r  r  r  r  r   r  ro   r  r   r  r&  r  __length_hint__tuple_iterator_lenrT  r}  r  r  r  r  r$  	iter_nextr"  r(  r-  r9  r=  rM  rO  rR  rY  rm  GLOBAL_KEY_PREFIXtorch._subclassesro  rt  rx  r}  r  r  r  r  r  orig_code_mapr   r  r  seen_code_mapr  r  r  r  r  r  r  r  r  r   r  r,  r?  rA  rF  rO  rR  rQ  r[  r  r]  rc  rp  r{  r  r  r  r  all_hook_namesr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r8  r;  rC  rI  rL  rU  r\  r`  rd  ru  rz  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r6   rD   rE   <module>r/     s   " " " " " " "                



      				                 				 				 



           % % % % % % $ $ $ $ $ $       # # # # # #                                           , 1 0 0 0 0 0 0 0      0 0 0 0 0 0 0 0 0 , , , , $ $ $ $ $ $ $ $ $                    < ; ; ; ; ; 0 0 0 0 0 0 0 0 = = = = = = T T T T T T T T F F F F F F F F 1 1 1 1 1 1 > > > > > > > > - - - - - -   	BBB	......)))))) 
 FII	>
 	
 	
 	
 	
 FCGIszIsz	
  "VVVVVVVVVVV 	 	 	D	 GCLL#ho9 +B;+B;CV+W+W W W W W$&  & & & &G  Q V.VVV g!! 46  5 5 5 5 3J+2I**3 3       	!!
 
 
 
 
                 2   6 6 6 6   J  !%T@ T@ T@ T@ T@n 
    
 
,1    
" " " " "J 8 8 8 8
 
u{3	5	u}ej1	5>+	u{n	uzm	u{EJ/	Oek59-	U[1	uzm        ( #:"9";"; " " ", , , ,
 
 
	 	 	? ? ? ?
G G G G       	 	 	       B 
   
 
   
 
   
& & & w 	%!G G G  &      	 	 	  $3 3 3  % % %$ $ $, , , T     
 
 
 = = = = = = = =B         %' !
 K>???  @ @ @ @
3 3 3 3(% % % %! ! ! !
& & & &ZG ZG ZG ZG ZG ZG ZG ZGz 59  8 8 8 8    ( ( ( ( ( ( ( ((         +       ).**    ! G G G G GT  &
 
 
 
 9 9 9"	 	 	   $  ( ( (
   Q  0  *   "X X X 2   		DJJ	N	L	K		L$        5MMMfo3444      W W W
 
 
     "&bggii	 0 0 0 0%)T"))++%6%6 6 6 6 6&*d+B;+B+D+D+K+K+M+M&N&N N N N N&*d4488nn 4 4 4 4#3 ^
  1 1 1  
 	  5 5 5  8 8 8  & & & &RM M M
@ @ @   B       
 !  = < < < < <7 7 7' ' '? ? ?
; ; ; i-2`F `F `F `FF	H H H
 
> 
> 
> '&(( /Fk.Ed.K.K K K K K LN  M M M M '&(( T, , ,& & &
     
/ / /x x x xv  	!!1 1 1 " " ". . .b$ $ $NB B B*2 2 2 2  G G G G/ / / /	 	 	 	           5 5 5 5   D  *W W W +,<= ,.?@     $&99<QQ    	   F  	   $  
 
 

$ 
$ 
$ 
$ 
$ 
$ 
$ 
$$ $ $$ $ $ $ $ $ $ $&$ $ $ $ $ $ $ $(  @4 4 4  &
 
 
"	C 	C 	C 	C        v v v vri i i iX  ) ) )"  0 0 0    
 
 
  O O O    $& & &  1 1 1 1 1 1 1 1, , , ,^4 4 41 1 1         CEE ! ! ! !	2 	2 	2 	2% % % C C CK K K   0 0 0
, , ,
 
 
"  
 
 
  DF  E E E E  6 6 6
# # # # # # # # # #s%   +D0 0D:9D:>A/F. .F65F6