
    9iī                   Z!   U d Z 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ZddlZddl Z ddlm!Z!m"Z" ddlm#Z#m$Z$ ddlm%Z% ddlm&Z& ddlm'Z'm(Z( dd	lm)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 dd
l4m5Z5m6Z6 ddl7Z7ddl8Z7ddl9Z7ddl:m;c m<Z= ddl7m>Z> ddl?m@Z@mAZAmBZBmCZC ddlDmEZE ddlFmGZGmHZH ddlImJZJmKZKmLZL ddlMmNZN ddlOmPZPmQZQmRZRmSZSmTZT ddlUmVZVmWZW ddlXmYZY ddlZm[Z[ ddl\m]Z] ddl^m_Z_m`Z` ddlambZb ddlcmdZd eje        r8ddlfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZp ddlqmrZr ddlsmtZtmuZu ddlvmwZw ddlxmyZy ddlzm{Z{ 	 ddl|Z}n# e~$ r dZ}Y nw xY w	 ddlZ7ddlmZ dd lImZ dd!lmZ dd"lmZ e}rCe}e}j        e}j        e}j        fZd#ed$<   e}ee}j        ej        e}j        ej        e}j        ej        iZnd%Zi Zdd&lmZmZmZ n# e$ r Y nw xY w e2d'          Z e2d(          Z e5d)          Ze7j        j        j        Ze7j        j        j        Ze7j        j        j        Z ej        ej!                  Zd*ed+<   i Zd,ed-<   d.Zd/Zd0e d1Z ej        e          Zi Zd2ed3<    ej        e          Zd4ed5<    ej                    Z G d6 d7e
j                  Z G d8 d9          ZdUd@ZdadVdBZdVdCZdadDedE<   dWdHZdXdIZdVdJZdadYdMZdZdNZdVdOZdPedQ<   dRedS<   d[dTZd\dUZ G dV dWe
j                  Z G dX dY          Z ej                    Ze$	 	 	 	 	 	 	 	 d]d^dj            Ze/d_d`dn            Ze/	 d_dadq            Z	 dbdcdsZej        dVdt            Ze7j        e7j        e7j        fe7j        e7j        e7j        fe7j        e7j        e7j        fe7j        e7j        fe7j        e7j        fe7j        e7j        fe7j        e7j        e7j        fe7j        e7j        e7j        fe7j        e7j        e7j        fe7j        e7j        fi
Z G du dv          Z eަ            ZߐdddxZdVdyZ ej        dzej                  Z G d{ d|ej                  Zddd}Zddd~ZdedZdfdZdgdZdhdZdidZdjdZ G d d          Ze/dkd            Ze/dld            Ze/dmd            ZdndZej        dk    r&ej        ej        ej5        ej2        ej        ej        fZej        dk    reej3        fz  ZdodZdodZdodZe/dpd            Ze/dqd            ZdodZe3ej        ej        ej        ej        f         Zded<   drdZ dsdZej        ej        ej        ej        ej        ej        dZdddddddZ	dtdZ
dudZdvdZdwdZdxdZdydZ ej&        dæ          dzdĄ            Zd{d|dǄZd}dɄZd~d̈́Zd~d΄ZdϐZej         G dЄ dѦ                      ZdҐZ ej        eӦ          aded<   ddׄZdd؄ZddلZddڄZddZ eGe          Z  eHe          Z!ddZ"dVdZ#ddZ$ G d d          Z%da&ded<   ddZ'ddZ(e$	 	 ddd            Z)ej         G d d                      Z* G d de          Z+ e+            e+_,        ddZ-ddddZ.e/dd            Z/e/dd            Z/ddZ/ddZ0e$dd            Z1dd	Z2d_ddZ3ddZ4dxdZ5ddZ6 ej&        d          dd            Z7ddZ8	 dddZ9ddZ: e&d          dd             Z;eee<eܐe=e> e?d          e@jA        eBjA        ej'        e7jC        e7jD        e7jE        e7jF        e7jG        e7jH        e7j        jI        jJ        e7jK        jL        hZMd!ed"<    e`            r*ddlNZNeMO                    eNjP        jD                   	 dd#ZQejR        dd%            ZSdd'ZTdd)ZUdd+ZVdd,ZWdd.ZXdd/ZYdd0ZZdd1Z[ e?i \                                          Z]d2ed3<    e?i ^                                          Z_d4ed5<    e?i `                                          Zad6ed7<    e? e"            ^                                          Zbd4ed8<    e? ecd%                    Zdd9ed:<    e? ec eed                              Zfd9ed;<   edjg        Zheijj        Zkeljj        Zmd<  ejn        eljo        ^                                e"jo        ^                                          D             Zpd= eqjo        ^                                D             Zrd> esjo        ^                                D             Zteujj        Zvd? eujo        ^                                D             Zwd@ exjo        ^                                D             Zyexjz        Z{dA e=jo        ^                                D             Z| e2dB          Z} e2dC          Z~ddGZddIZddJZddMZddOZddPZeZddSZddUZeljz        Ze7j>        j        ddW            ZddZZdd\Zdd`ZddcZddfZ	 	 dddmZ	 d_ddrZdduZddwZddxZddzZd{Zdd|lzmZ dd~ZddZdZdddZddZddZddZd_ddZddZddZddZdZej        dZdZf
ddZddZej$        dd            Z e            Z ej        ex          Zded<   g Zded<    e            ZejR        dd            ZddZdddZddZddZddZ	 d_dÐdZ ej                    ZdĐdZe$dŐd            ZdƐdZdǐdZdȐdZdɐdZdʐdZdːdZdodZd̐dZd͐dÄZ	 d_dΐdƄZ G dǄ de
j                  ZdϐdʄZdАdфZdѐdӄZdҐdՄZd֐dgZdؐdgZg dڢZÐeez   ez   ZĐddۄZ	 	 	 dӐdԐdZ	 	 	 dӐdՐdZǐd֐dZȐd֐dZ G d de,eef                   ZʐdאdZ G d d          Z G d de,eef                   Z͐dؐdZΐdِdZϐdxdZАdxdZѐdڐdZҐdڐdZӐdېdZԐdܐdZej         G d d                      Z֐dݐdZאdސdZؐdߐdZِdodZڐdodZېddZܐdodZݐddZސdd	Zߐdod
ZddZej$        	 ddd            ZddZddZ G d de7j        j                  ZddZddZddZ G d d          Z eq            Zd ed!<   ddd#Zdd%Zej$        dd&            Zdd'Zdd(Zdd*Zdd,ZdVd-Zdd1Zdzd2Zdd3Zdd5Ze7j        dd7            Ze7j        dd8            Ze7j        dd9            Zdd:Zdd<Zdd>Z G d? d@          Z G dA dBeצ          ZddEZ dFZdedG<   ddHZe$ddI            Ze$ddJ            ZddKZdZaddLZddMZe7j        ddO            Z	e7j        ddQ            Z
ddSZddTZdS (  a  
Utility functions and classes used throughout the TorchDynamo system.

This module contains a collection of helper utilities used by various parts of Dynamo for:
- Performance metrics collection and reporting
- Compilation timing and debugging
- Graph manipulation and tensor operations
- Runtime guards and checks
- Common data structure operations
- Testing and development tools

This is an internal module that provides shared functionality used across the Dynamo codebase.
    )annotationsN)CounterOrderedDict)AbstractContextManagercontextmanager)is_dataclass)	lru_cache)CodeTypeMethodWrapperType)AnycastClassVarGenericLiteralOptionaloverload	TypeAlias	TypeGuardTypeVarUnion)	ParamSpecTypeIs)fx)_instruction_counter_len_torch_function_stack_pop_torch_function_stack_push_on_torch_function_stack)enable_python_dispatcher)MetricsContextRuntimeMetricsContext)	CompileIdSourceTracingContext)is_sparse_compressed)justknobs_checklog_chromium_event_internallog_compilation_eventrecord_chromium_event_internalsignpost_event)_format_graph_codelazy_format_graph_code)_WaitCounter)LazyModuleMixin)is_traceable_wrapper_subclass)
has_tritonhas_triton_package)RemovableHandle   )_get_flat_args)
Callable	Container	Generator	ItemsViewIterableIteratorKeysViewMappingSequence
ValuesView)ExecutionRecord)InstructionTranslatorInstructionTranslatorBaseVariableTracker)DeviceLikeType)FakeTensorMode)detect_fake_mode
LazyStringconfigztuple[types.ModuleType, ...]NP_SUPPORTED_MODULES )
FakeTensoris_fakemaybe_get_fake_modeTR_Pz*collections.defaultdict[str, Counter[str]]countersdict[str, Any]optimus_scuba_logzJhttps://pytorch.org/docs/main/compile/programming_model.recompilation.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_metricsdict[str, float]cumulative_time_spent_nsc                      e Zd ZdZdZdZdS )ReInplaceTriggerr2         N)__name__
__module____qualname__AUTO_FUNC_V1AUTO_FUNC_V2
TRITON_OPSrK       F/var/www/icac/venv/lib/python3.11/site-packages/torch/_dynamo/utils.pyrY   rY      s        LLJJJrb   rY   c                      e Zd ZU  ej        e          Zded<   edd	            Z	edd            Z
edd            Zedd            Zedd            Zedd            ZdS )ReinplaceCountersz!collections.defaultdict[str, int]_valuestriggerrY   bytesintreturnNonec                P    |dk    r| j         d|j         xx         |z  cc<   d S d S Nr   missed_bytes_)rf   name)clsrg   rh   s      rc   add_missed_bytesz"ReinplaceCounters.add_missed_bytes   sA    A::K6667775@77777 :rb   countc                F    |dk    r| j         d| xx         |z  cc<   d S d S Nr   missed_tensors_)rf   )rp   rg   rr   s      rc   add_missed_opportunitiesz*ReinplaceCounters.add_missed_opportunities   s?    A::K3'33444=44444 :rb   c                8    | j                                          d S N)rf   clearrp   s    rc   ry   zReinplaceCounters.clear   s    rb   c                `    d}t           D ]#}|| j                            d| d          z  }$|S rt   )rY   rf   getrp   sumrg   s      rc   get_total_missedz"ReinplaceCounters.get_total_missed   sB    ' 	C 	CG3;??#>W#>#>BBBCC
rb   c                j    d}t           D ](}|| j                            d|j         d          z  })|S rm   )rY   rf   r|   ro   r}   s      rc   get_total_missed_bytesz(ReinplaceCounters.get_total_missed_bytes   sD    ' 	F 	FG3;??#A7<#A#A1EEECC
rb   c                D    | j         rt          dd| j                    d S d S )Ninductorreinplace_counters)rf   r)   rz   s    rc   logzReinplaceCounters.log   s6     ; 	J:';S[IIIII	J 	Jrb   N)rg   rY   rh   ri   rj   rk   )rg   rY   rr   ri   rj   rk   rj   rk   rj   ri   )r\   r]   r^   collectionsdefaultdictri   rf   __annotations__classmethodrq   rv   ry   r   r   r   rK   rb   rc   re   re      s         1H1H1M1MGMMMM A A A [A
 > > > [>    [    [    [ J J J [J J Jrb   re   rows-Union[list[tuple[str, Any]], list[list[Any]]]headers!Union[tuple[str, ...], list[str]]rj   strc                    	 dd l }|                     | |          S # t          $ r6 d                    d t          j        |g|           D                       cY S w xY w)Nr   r   
c              3  f   K   | ],}d                      t          t          |                    V  -dS ), N)joinmapr   ).0rows     rc   	<genexpr>ztabulate.<locals>.<genexpr>   sG       
 
),DIIc#smm$$
 
 
 
 
 
rb   )tabulateImportErrorr   	itertoolschain)r   r   r   s      rc   r   r      s    
  w 777 
 
 
yy 
 
09	40P0P
 
 
 
 
 	
 	
 	

s    =AArk   c                     t           dz   a d S Nr2   )
curr_framerK   rb   rc   increment_framer      s    aJJJrb   c                 n    t                                            t                                           dad S Nr   )rW   ry   rU   r   rK   rb   rc   reset_frame_countr     s/    ""$$$""$$$JJJrb   !Optional[list[Callable[[], str]]]_recompile_user_contextshookCallable[[], str]c                L    t           g a t                               |            dS )aj  
    Register a hook to be called when a recompile is triggered. The hook
    should return a string describing user contexts that are not available
    to the compiler, such as the current training epoch. This is useful for
    debugging and data analysis for recompile. For data retention purposes,
    the user context string is capped at 256 characters.
    N)r   append)r   s    rc   (register_hook_for_recompile_user_contextr     s*      '#% ##D)))))rb   c                     t           S rx   r   rK   rb   rc   #get_hook_for_recompile_user_contextr         ##rb   c                 
    da dS )z@Clear any registered recompile user-context hooks (test helper).Nr   rK   rb   rc   reset_recompile_user_contextsr   !  s      $rb   cntri   c                    t           | z  a d S rx   )op_count)r   s    rc   increment_op_countr   *  s    OHHHrb   c                     i } t                                           D ]\  }}|dz  | |<   |                     dd          |                     dd          z   | d<   | S )N    eAentire_frame_compiler   entire_backward_compiletotal_wall_time)rW   itemsr|   )total_by_keyphasetimings      rc   calculate_time_spentr   1  sx    L17799 + +v$slU&2&6&6' '2A66'7L"# rb   c            	         t                      } d}|                                 D ]\  }}| d| dt          |d           }t          |           d S )NzTIMING: :   )r   r   roundprint)r   outkeyvalues       rc   print_time_reportr   C  se    '))L
C"((** / /
U..s..U5!__..	#JJJJJrb   r   _METRICS_CONTEXTr    _RUNTIME_METRICS_CONTEXTc                     t           S rx   )r   rK   rb   rc   get_metrics_contextr   f  s    rb   c                     t           S rx   )r   rK   rb   rc   get_runtime_metrics_contextr   j  r   rb   c                      e Zd ZdZdZdZdZdS )CompileEventLogLevelz
    Enum that loosely corresponds with a "log level" of a given event.

    CHROMIUM_EVENT: Logs only to tlparse.
    COMPILE_EVENT: Logs to tlparse + PT2 Compile Events
    COMPILATION_METRIC: Logs to tlparse, PT2 Compile Events, and dynamo_compile
    r2   rZ   r[   N)r\   r]   r^   __doc__CHROMIUMPT2_COMPILECOMPILATION_METRICrK   rb   rc   r   r   n  s,          HKrb   r   c                     e Zd ZdZedej        fd)d            Ze	 d*d+d            Ze	 d*d,d            Z	ed-d            Z
edej        fd.d            Zed/d            Zeej        fd0d            Zed1d            Zed1d            Zed*d2d            Ze	 d3d4d             Zed1d!            Zed5d(            ZdS )6CompileEventLoggera  
    Helper class for representing adding metadata(i.e. columns) to various compile events.
    Use CompileEventLogger to add event data to:
    - Chromium events
    - PT2 Compile Events
    - CompilationMetrics

    This should be used in conjunction with dynamo_timed() and metrics contexts, which create
    timed spans and events. CompileEventLogger uses three log levels (described in CompileEventLogLevel),
    where each log level logs to all sources below it in the hierarchy.

    Example usages:
    - I want to log to an existing chromium event within dynamo timed:
    with dynamo_timed("my_event"):
        CompileEventLogger.chromium("my_event", foo=bar)

    - I want to log my event to both chromium + pt2_compile_events:
    with dynamo_timed("my_event", log_pt2_compile_event=True):
        CompileEventLogger.pt2_compile("my_event", foo=bar)

    - I want to add information to dynamo events and dynamo_compile
        CompileEventLogger.compilation_metric(foo=bar)
    N
event_namer   metadatarS   time_nsOptional[int]	log_levelr   rj   rk   c                    |t          j                    }t                      }|t          j        k    rd}n"|t          j        k    rd}nt          d          |                    | |||           d S )NFTzjCannot log instant event at COMPILATION_METRIC level. Please choose one of CHROMIUM_EVENT or COMPILE_EVENT)timer   get_chromium_event_loggerr   r   r   RuntimeErrorlog_instant_event)r   r   r   r   chromium_loglog_pt2_compile_events         rc   r   z$CompileEventLogger.log_instant_event  s     ?lnnG022,555$)!!.:::$(!!|   	&&+@	
 	
 	
 	
 	
rb   F	overwriteboolobjectc                :   t                      }|                                }|t          j        k    r |j        | fi | dS |t          j        k    r8|                                }| |vrt          d|            |j        | fi | dS |t          j        k    sJ |                                }| |k    rt          d          t                      }|
                                st          d          |                    ||            |j        | fi | dS )z
        Centralized API for adding data to various events
        Log an event to a toplevel "dynamo" event or metrics context
        depending on log level.
        zError: specified log level PT2_COMPILE, but the event %s is not logged to pt2_compile_events. Make sure the event is active and you passed log_pt2_compile_event=True to dynamo_timedzLog level is COMPILATION_METRIC, but event_name isn't the toplevel event. CompilationMetrics must be logged to the toplevel event. Consider using `log_toplevel_event_data` directly.z[No metrics context is in progress. Please only call this function within a metrics context.N)r   get_pt2_compile_substackr   r   add_event_datar   r   r   get_outermost_eventr   in_progressupdate)r   r   r   r   r   pt2_compile_substack	top_eventmetrics_contexts           rc   add_datazCompileEventLogger.add_data  sv    122+DDFF,555'L'
??h?????.:::#/#H#H#J#J !555"A 	   (L'
??h????? 4 GGGGG$88::IY&&"B   233O"..00 "q  
 ""8Y777'L'
??h?????rb   c                    t                                                      }|t          d          t          j        || |fi | dS )zC
        Syntactic sugar for logging to the toplevel event
        NzWNo toplevel event active. Please only call this function within a dynamo_timed context.)r   r   r   r   r   )r   r   r   r   s       rc   add_toplevelzCompileEventLogger.add_toplevel  s[     .//CCEE	i   	#Iy)PPxPPPPPrb   r   r   ri   c                   t                      }|t          j        k    s|t          j        k    r|                    | ||           dS |t          j        k    sJ |                                }| |k    rt          d          t                      }|	                                st          d          |                    ||           |                    | ||           dS )z:
        Increments an existing field, or adds it
        zLog level is COMPILATION_METRIC, but event_name isn't the toplevel event. CompilationMetrics must be logged to the toplevel event. Consider using `increment_toplevel` directly.hNo metrics context is in progress. Please only call this function within a metrics context/dynamo_timed.N)
r   r   r   r   	incrementr   r   r   r   r   r   r   r   r   r   r   r   s          rc   r   zCompileEventLogger.increment  s     122-6660<<<"":sE::::: 4 GGGGG$88::IY&&"}  
 233O"..00 "~   %%c5111"":sE:::::rb   r2   c                    t                      }|                                }|t          d          t                              ||| |           dS )zX
        Increments a value on the toplevel metric. By default, logs to metric.
        N_No toplevel event active. Please only call this function within a metrics context/dynamo_timed.)r   r   r   r   r   r   r   r   r   r   s        rc   increment_toplevelz%CompileEventLogger.increment_toplevel  s]     122 4466	q   	$$Y	3FFFFFrb   r   c                   t                      }|t          j        k    s|t          j        k    r|                    | ||           dS |t          j        k    sJ |                                }| |k    rt          d          t                      }|	                                st          d          |                    ||           |                    | ||           dS )zl
        Add metadata <value> to a set of values with key <key>. Creates a set if it doesn't exist.
        zLog level is COMPILATION_METRIC, but event_name isn't the toplevel event. CompilationMetrics must be logged to the toplevel event. Consider using `add_to_set_metric` directly.r   N)
r   r   r   r   
add_to_setr   r   r   r   r   r   s          rc   r   zCompileEventLogger.add_to_set  s     122-6660<<<##JU;;;;; 4 GGGGG$88::IY&&"|  
 233O"..00 "~   &&sE222##JU;;;;;rb   c                    t                      }|                                }|t          d          t                              ||| |           dS )z
        Same as add to set, just does it automatically to the toplevel event instead of having to explicitly name it.
        Defaults to COMPILATION_METRIC log level.
        Nr   )r   r   r   r   r   r   s        rc   add_to_set_toplevelz&CompileEventLogger.add_to_set_toplevel6  s]     122 4466	q   	%%iCGGGGGrb   c                D    t          j        | t          j        fddi| dS )z
        Add <metadata> to <event_name> in chromium. Each key/value of metadata will appear in the chromium trace.
        <event_name> should be the name of a timed event span passed to `dynamo_timed`.
        r   FN)r   r   r   r   r   r   s     rc   chromiumzCompileEventLogger.chromiumJ  sA     	#,5	
 	
AF	
JR	
 	
 	
 	
 	
rb   c                D    t          j        | t          j        fddi| dS )a  
        Add <metadata> to <event_name> in chromium and PT2 Compile Events.
        Each key/value of metadata will appear in the chromium trace. Each kwarg name becomes
        a column in PT2 Compile Events, with the corresponding kwarg value.
        <event_name> should be the name of a timed event span passed to `dynamo_timed`,
        with log_to_pt2_compile_events=True.
        r   FN)r   r   r   r   r  s     rc   pt2_compilezCompileEventLogger.pt2_compileT  sA     	#,8	
 	
DI	
MU	
 	
 	
 	
 	
rb   c                @    t          j        t          j        | fi | dS )a6  
        Add <metadata> to the CompilationMetrics context. Also logs to PT2 Compile Events
        and chromium.
        Each key/value of metadata will appear in the chromium trace. Each kwarg name becomes
        a column in PT2 Compile Events and Dynamo Compile, with the corresponding kwarg value.
        N)r   r   r   r   )r   r   s     rc   compilation_metricz%CompileEventLogger.compilation_metrica  s8     	' 3Y	
 	
BJ	
 	
 	
 	
 	
rb   c                T    t                               | ||t          j                   dS )z
        Log an instant event to chromium logs with name <event_name> at time <time_ns>. The `args` field in
        Perfetto will point to metadata. <time_ns> should be a value obtained from time.time_ns().
        N)r   r   r   r   )r   r   r   s      rc   instantzCompileEventLogger.instantm  s3     	,,'+?+H	
 	
 	
 	
 	
rb   c                ^    t                      sdS t                      } |j        | fi | dS )z
        Adds to an existing pt2_compile event, but silently returns if the event doesn't exist
        or ChromiumEventLogger is not initialized.
        This function is syntactic sugar for chromium_event_logger().try_add_event_data.
        N)chromium_event_log_activer   try_add_event_data)r   r   r   s      rc   try_add_pt2_compilez&CompileEventLogger.try_add_pt2_compiley  sC     )** 	F022''
??h?????rb   	method_fnCallable[_P, Any]args_P.argskwargs	_P.kwargsc                ~    t                      sdS t                      }|                                sdS  | |i | dS )z
        Special function that quietly runs a given method, returning if CHROMIUM_EVENT_LOG is None or metrics context is not set
        N)r
  r   r   )r  r  r  r   s       rc   try_zCompileEventLogger.try_  sV    
 )** 	F-//**,, 	F	4"6"""""rb   )
r   r   r   rS   r   r   r   r   rj   rk   F)
r   r   r   r   r   r   r   r   rj   rk   )r   r   r   r   r   r   rj   rk   )
r   r   r   r   r   r   r   ri   rj   rk   )r   r   r   ri   r   r   rj   rk   )
r   r   r   r   r   r   r   r   rj   rk   )r   r   r   r   r   r   rj   rk   )r   r   r   r   rj   rk   )r   r   r   r   rj   rk   rx   )r   r   r   rS   r   r   rj   rk   )r  r  r  r  r  r  rj   rk   )r\   r]   r^   r   staticmethodr   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  rK   rb   rc   r   r   |  s#        0  "&*>*G	
 
 
 
 \
*   +@ +@ +@ +@ \+@Z ;@Q Q Q Q \Q ; ; ; \;<  *>*QG G G G \G  < < < \<<  +?*QH H H H \H& 
 
 
 \
 

 

 

 \

 	
 	
 	
 	
 \	
 LP	
 	
 	
 	
 \	
 	@ 	@ 	@ \	@ 	# 	# 	# \	# 	# 	#rb   r   Fr   
phase_nameOptional[str]r   r   r   Optional[dict[str, object]]dynamo_compile_column_us
compile_idOptional[CompileId]is_backwardOptional[bool]log_waitcounterwaitcounter_name_overrideGenerator[Any, None, None]c	           
   #  N	  K   |r|}	| }
n| }	d}
| t           vr
g t           | <   t           |          }i }|r|                    |           |
r|                    d|
i           ||                    d|i           t                      }t          j                    }|                    |	||||           t          j                            |  d          g}|r=|r|n| }|	                    t          d|                                                      t          j        j                                        du}|r|                    d          sJ t!          t"          d          sdt"          _        t"          xj        d	z  c_        t"          j        d	k    rl|	                    t          d
                                                     |s6d}|	                    t          |                                                     	 t'          j                    5 }|D ]}|                    |           dV  ddd           n# 1 swxY w Y   t          j                    }||z
  }|	                    |dz             |                    |	|i |||           |rt.          |	xx         |z  cc<   t"          xj        d	z  c_        t"          j        dk    }|dz  }|rVt1                      }|                                r0|                    ||           |r|                    d|           dS dS dS t7                      }|                    ||           |r"|d| d}|                    d||           dS dS dS # t          j                    }||z
  }|	                    |dz             |                    |	|i |||           |rt.          |	xx         |z  cc<   t"          xj        d	z  c_        t"          j        dk    }|dz  }|rSt1                      }|                                r/|                    ||           |r|                    d|           w w w t7                      }|                    ||           |r |d| d}|                    d||           w w w xY w)a  
    dynamo_timed is a context manager
    By wrapping a function in dynamo_timed, we can get a few things:

    1) Optionally log timings to pt2_compile_events.
    2) Optionally log timings to CompilationMetrics (dynamo_compile).
    3) Optionally log chromium events.
    4) Optionally increment a WaitCounter.
    5) Store a record in compilation_time_metrics
       For example:

        def _foo(...):
            with dynamo_timed("_foo"):
                ...

        Would show up as an entry in our timing dict:
        OrderedDict([('_foo', [0.083690, 0.23949, 3.1425e-05])])
        This is extremely useful for granular debugging.

    Although it is tempting to use dynamo_timed as a decorator, please do not.
    In its decorator form it makes cProfile traces less useful as dynamo_timed
    suddenly becomes a bottleneck for lots of function calls (as only one parent
    pointer is recorded).

    Params:
    - key: key into compile_time_metrics. If phase_name is not provided, this is
      also the event name used for pt2_compile_events logs and chromium events.
    - phase_name: Optional override for the event name.
    - log_pt2_compile_event: Whether to log a pt2 compile event internally.
    - metadata: Extra metadata to put in pt2_compile_events.
    - dynamo_compile_column_us: If provided, updates the specified CompilationMetrics
      field to be logged to dyname_compile column. We expect all columns to be _us;
      therefore, the field name must end with "_us".
    - compile_id: In the typical case, this parameter should not be needed. Use to
      supply the compile_id for those cases where we want to log a compile_id where
      it's not naturally available, e.g., for runtime autotuning.
    - is_backward: Specify forward/backward directly when not available in a
      CompileContext, e.g., during runtime autotuning.
      that support it.
    - log_waitcounter: If set, we'll log a waitcounter of the form "pytorch.dynamo_timed.{key}"
    Nfn_namer  z (dynamo_timed)zpytorch.wait_counter._usdepthr   r2   z#pytorch.wait_counter.dynamo_compilez.pytorch.wait_counter.compile_runtime_overheadsr     duration_usT)r  
is_runtime
is_forward)rU   r   r   r   r   log_event_starttorchprofilerrecord_functionr   r,   guard_guardsCompileContextcurrent_compile_idendswithhasattr_dynamo_timed_tlsr%  
contextlib	ExitStackenter_contextlog_event_endrW   r   r   r   r   )r   r  r   r   r  r  r  r  r   r   r#  metricsevent_metadatar   start_nscx_mgrswc_nameis_compile_time
runtime_wcstackcxend_nstime_spent_nsis_outer_eventr'  r   runtime_contextextras                               rc   dynamo_timedrG    s     l  


***(* %&s+GN (h''' 4y'2333}k:;;;(A(C(CL|~~H  Hn.CZ  
 	&&#'>'>'>??!G  P/HQ++c|$EG$E$EFFLLNNOOOm2EEGGtSO A'0077777 ('22 	(&'#1$ "a''NN<(MNNTTVVWWW" AM
|J77==??@@@(Q!## 	u ( (##B''''EEE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 )}s*+++""H.CZ	
 	
 	
 $ 	Q %Z000MA000 ##q(##.49N'4/K Q"5"7"7"..00 N#--.FTTT% N'11-MMMMMN NN N #>"?"?))*BKPPP! Q&0&**5o E
 $--m[%PPPPP9	Q 	Q,Q Q9 )}s*+++""H.CZ	
 	
 	
 $ 	Q %Z000MA000 ##q(##.49N'4/K Q"5"7"7"..00 N#--.FTTT% N'11-MMMMNN #>"?"?))*BKPPP! Q&0&**5o E
 $--m[%PPPP9	Q,Qs1   M< I8M< IM< IM< <D(R$reprLiteral['str']	aggregatec                    d S rx   rK   rH  rJ  s     rc   compile_timesrM  (  s    ILrb   Literal['csv']tuple[list[str], list[object]]c                    d S rx   rK   rL  s     rc   rM  rM  ,  s	     &)Srb   -Union[str, None, tuple[list[str], list[str]]]c                0   t           fd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.
    valueslist[float]item_fnCallable[[float], str]rj   r   c                ~    r |t          |                     S d                    t          ||                     S )Nr   )r~   r   r   )rS  rU  rJ  s     rc   fmt_fnzcompile_times.<locals>.fmt_fnC  s=     	(73v;;'''yyWf--...rb   c                F    g | ]}| t           |         d            fS )c                
    | dS )Nz.4frK   xs    rc   <lambda>z*compile_times.<locals>.<listcomp>.<lambda>J  s
    jj rb   rU  )rU   )r   krX  s     rc   
<listcomp>z!compile_times.<locals>.<listcomp>I  sG     
 
 
 /2<P<PQQQR
 
 
rb   z!TorchDynamo compilation metrics:
)FunctionzRuntimes (s)r   csvc                ,    g | ]} |d            S )c                
    | dS )Nz.6frK   r[  s    rc   r]  z*compile_times.<locals>.<listcomp>.<lambda>R  s
    1

 rb   r^  rK   )r   vrX  s     rc   r`  z!compile_times.<locals>.<listcomp>Q  s<     
 
 
 F122333
 
 
rb   N)rS  rT  rU  rV  rj   r   )r   rU   r   rS  listkeys)rH  rJ  r   r   rS  r   rX  s    `    @rc   rM  rM  3  s      GJ / / / / / / /
 u}}
 
 
 
-
 
 
 3x&BCCCC
	
 
 
 
-4466
 
 
 /4466774rb   c                 X    t                               t          dd                     d S )Nr   TrL  )r   inforM  rK   rb   rc   dump_compile_timesrj  Z  s'    HH]66677777rb   c                  (    e Zd ZdddZddZddZdS )DuplicateWarningChecker   maxsizeri   rj   rk   c                <    || _         |                                  d S rx   )rn  reset)selfrn  s     rc   __init__z DuplicateWarningChecker.__init__n  s    

rb   c                ,    t                      | _        d S rx   )r   setrq  s    rc   rp  zDuplicateWarningChecker.resetr  s    *5--rb   r   !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)rt  move_to_endrI   verboselenrn  popitemrq  r   s     rc   addzDuplicateWarningChecker.addu  s    $(??H  4 000> u !DHSMdh--$,..  e ,,, dh--$,..trb   N)rm  )rn  ri   rj   rk   r   )r   rv  rj   r   )r\   r]   r^   rr  rp  r~  rK   rb   rc   rl  rl  m  sU            8 8 8 8	 	 	 	 	 	rb   rl  contextlib.ExitStackc                     t           j                            dd          dk    } | rt                      S t	          j                    S )NTORCH_COMPILE_DEBUG01)osenvironr|   add_file_handlerr5  r6  )compile_debugs    rc   setup_compile_debugr    s@    JNN#8#>>#EM "!!!!!!rb   c                 8    t                                            d S rx   )graph_break_dup_warning_checkerrp  rK   rb   rc   reset_graph_break_dup_checkerr    s    #))+++++rb   z
    \x1B            # ESC
    \[              # [
    [0-?]*          # Parameter bytes
    [ -/]*          # Intermediate bytes
    [@-~]           # Final byte
    c                  "     e Zd ZdZ fdZ xZS )StripAnsiFormatterz0Logging formatter that strips ANSI escape codes.c                |    t                                          |          }t                              d|          S )N )superformatANSI_ESCAPE_PATTERNsub)rq  recordmsg	__class__s      rc   r  zStripAnsiFormatter.format  s.    ggnnV$$"&&r3///rb   )r\   r]   r^   r   r  __classcell__r  s   @rc   r  r    s>        ::0 0 0 0 0 0 0 0 0rb   r  c                    t           j                            t                      d          } t          j        | d           t          j        t           j                            | d                                        t          d                     t          j	        d          
                               t          j                    }|                    fd           |S )NtorchdynamoTexist_okz	debug.logz%(message)sztorch._dynamoc                 .                                    S rx   removeHandlerlog_file_handlerloggers   rc   r]  z"add_file_handler.<locals>.<lambda>  s    v334DEE rb   )r  pathr   get_debug_dirmakedirsloggingFileHandlersetFormatterr  	getLogger
addHandlerr5  r6  callback)log_path	exitstackr  r  s     @@rc   r  r    s    w||MOO];;HK4((((*27<<++N+NOO!!"4]"C"CDDD//F
&'''$&&IEEEEEFFFrb   c                 0   t          j                    } t          j        tt	          j        t          j                  t          j        j        	                                D ]0
                               |                     fd           1| S | S )Nc                 .                                    S rx   r  r  s   rc   r]  z setup_log_file.<locals>.<lambda>  s    v';';<L'M'M rb   )r5  r6  rI   log_file_namer  r  r+  _logging	_internalget_loggersr  r  )r  r  r  s    @@rc   setup_log_filer    s    $&&I'".v/CDDn.::<< 	O 	OF.///MMMMMNNNNrb   exc	Exceptioncoder
   c                n    t                       d|j         dt          |           j         d|j         dS )Nz/error_recordings/_z.rec)r  co_nametyper\   co_firstlineno)r  r  s     rc   gen_record_file_namer    sR    oo ? ?? ?S		"? ?%)%8? ? ? ?rb   filenameexec_recordr>   c                   	 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  r  fs      rc   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   callr2   )nodesop)r  cns      rc   count_callsr    s2    	AW  QT>>FAHrb   r\  c                    | S rx   rK   r[  s    rc   identityr    s    Hrb   r   c                `    	 t          |            dS # t          $ r Y dS t          $ r Y dS w xY wNTF)hash	TypeError
ValueErrorr[  s    rc   hashabler    sR    Qt   uu   uus    
-	--r  r  c                     d S rx   rK   r  r  s     rc   nothingr    s    Drb   c                  L    e Zd ZdZddZddZddd
ZddZddZddZ	ddZ
dS )ExactWeakKeyDictionaryz\Similar to weakref.WeakKeyDictionary, but use `is`/`id` rather than `==` to compare equalityrj   rk   c                "    i | _         i | _        d S rx   rS  refsru  s    rc   rr  zExactWeakKeyDictionary.__init__  s    &(;=			rb   r   r   c                6    | j         t          |                   S rx   )rS  idr}  s     rc   __getitem__z"ExactWeakKeyDictionary.__getitem__  s    {2c77##rb   Ndefaultc                R    | j                             t          |          |          S rx   )rS  r|   r  )rq  r   r  s      rc   r|   zExactWeakKeyDictionary.get  s    {r#ww000rb   r   c                .    t          |          | j        v S rx   )r  rS  r}  s     rc   __contains__z#ExactWeakKeyDictionary.__contains__  s    #ww$+%%rb   r   c                     t          |           j        vr!t          j        | fd           j        <   | j        <   d S )Nc                .                                   S rx   )
_remove_id)refidxrq  s    rc   r]  z4ExactWeakKeyDictionary.__setitem__.<locals>.<lambda>  s    $//#:N:N rb   )r  r  weakrefr  rS  )rq  r   r   r  s   `  @rc   __setitem__z"ExactWeakKeyDictionary.__setitem__  sR    ggdi$[.N.N.N.N.NOODIcN Crb   r  ri   c                N    || j         v r| j         |= || j        v r
| j        |= d S d S rx   r  )rq  r  s     rc   r  z!ExactWeakKeyDictionary._remove_id  s;    $+C $)	# rb   c                j    | j                                          | j                                         d S rx   )r  ry   rS  ru  s    rc   ry   zExactWeakKeyDictionary.clear
  s.    	rb   r   )r   r   rj   r   rx   )r   r   r  r   rj   r   )r   r   rj   r   )r   r   r   r   rj   rk   r  ri   rj   rk   )r\   r]   r^   r   rr  r  r|   r  r  r  ry   rK   rb   rc   r  r    s        ff> > > >$ $ $ $1 1 1 1 1& & & &! ! ! !        rb   r  objr   allowed_typestype[T]	TypeIs[T]c                    d S rx   rK   r  r  s     rc   istyper    s    >Acrb   )tuple[type[list[T]], type[tuple[T, ...]]]c                    d S rx   rK   r  s     rc   r  r    s	     rb   Iterable[type]c                    d S rx   rK   r  s     rc   r  r    s    @Crb   c                    t          |t          t          t          f          rt	          |           |v S t	          |           |u S )zisinstance() without subclasses)
isinstancetuplerf  rt  r  r  s     rc   r  r    s=    -%s!344 *CyyM))99%%rb   r[      )r[      r   c                    t           j        dk    rt          | t                    rdS t          | t          j                  p| t          j        u p| t          j        u S )Nr  T)sysversion_infor   _builtin_final_typing_classestyping_Finalr   r   r   s    rc   	is_typingr  7  sY     7""z%9V'W'W"t5&-(( 	!FN"	!FL rb   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)
npr  int8int16int32int64uint8uint16uint32uint64r  s    rc   is_numpy_int_typer  I  sQ     uGHHHHIII		
  rb   c                v    t           sdS t          | t           j        t           j        t           j        f          S r  )r  r  float16float32float64r  s    rc   is_numpy_float_typer  \  s8     uJJJ	
  rb   Callable[..., T]*TypeGuard[functools._lru_cache_wrapper[T]]c                    d S rx   rK   r  s    rc   is_lru_cache_wrapped_functionr!  j  s	     25rb   ,TypeGuard[functools._lru_cache_wrapper[Any]]c                    d S rx   rK   r  s    rc   r!  r!  p  s	     473rb   c                z    t          | t          j                  o!t          t	          j        | d                    S )N__wrapped__)r   	functools_lru_cache_wrapperis_functioninspectgetattr_staticr  s    rc   r!  r!  v  s<     eY9:: {um44@ @ rb   r   
_FuncTypesMTypeIs[Union[_FuncTypes, torch._ops.OpOverloadPacket, torch._ops.OpOverload]]c                    t          |           p/t          | t          j        j        t          j        j        f          S rx   )r(  r   r+  _opsOpOverloadPacket
OpOverloadr  s    rc   is_function_or_wrapperr1    s9     u 
+UZ-BC" " rb   TypeIs[_FuncTypes]c                z    t          | t          j        t          j        t          j        t          j        f          S rx   )r   typesFunctionTypeBuiltinFunctionTypeMethodDescriptorTypeWrapperDescriptorTyper  s    rc   r(  r(    s6     %&'		
  rb   )__eq____ne____lt____le____gt____ge__z==z!=<z<=>z>=TypeIs[Union[types.GetSetDescriptorType, types.MethodDescriptorType, types.WrapperDescriptorType, types.MemberDescriptorType, types.MethodWrapperType]]c                    t          | t          j        t          j        t          j        t          j        t          j        f          S rx   )r   r4  GetSetDescriptorTyper7  r8  MemberDescriptorTyper   r  s    rc   is_wrapper_or_member_descriptorrE    s>      &&'&#	
  rb   fnc                ,    t          |           d         S r   ) unwrap_with_attr_name_if_wrapper)rF  s    rc   unwrap_if_wrapperrI    s    +B//22rb   tuple[Any, Optional[str]]c                    t          |           r/t          j        | dd          rt          j        | d|           } d}nd }| |fS )N_torchdynamo_inlineF)r(  r)  r*  )rF  	attr_names     rc   rH  rH    sT     2 71"6KUSS #B(=rBB)			y=rb   TypeGuard[np.ndarray]c                H    t           sdS t          | t           j                  S r  )r  r  ndarrayr  s    rc   is_numpy_ndarrayrQ    s!     u%$$$rb   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	ParameterrI   traceable_tensor_subclasses_subclassesrL   r  )r  tensor_lists     rc   istensorrY    sO     	% 
	+% %K
 !2!= ??K#{###rb   modc                ,    t          | t                    S rx   )r   r-   )rZ  s    rc   is_lazy_moduler\    s    c?+++rb   rm  c                     t          |   d S rx   )r   r  s    rc   
print_oncer_    s    	4LLLLrb   valtypes.CellTypec                p    | d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 closurerj   r   c                      S rx   rK   r[  s   rc   r  zmake_cell.<locals>.f  s    rb   Nr2   r   )rj   r   )__closure__r{  )r`  r  r\  s     @rc   	make_cellre    sW    A      =$Q]););q)@)@)@)@=rb   &tuple[tuple[Any, ...], dict[str, Any]]c                8   	 t          d | D                       }d |                                D             }||fS # t          $ rR}ddlm} ddlm}  |dd ||   d |t          |                                            d	g |
           Y d }~d S d }~ww xY w)Nc              3  >   K   | ]}|                                 V  d S rx   as_proxyr   args     rc   r   z$proxy_args_kwargs.<locals>.<genexpr>  s*      ::c3<<>>::::::rb   c                >    i | ]\  }}||                                 S rK   ri  )r   r   rl  s      rc   
<dictcomp>z%proxy_args_kwargs.<locals>.<dictcomp>  s&    KKKSS\\^^KKKrb   r2   unimplemented)typestrz&Failed to convert args/kwargs to proxyzcall_function args: r   z7Missing `as_proxy()` implementation for some arg/kwarg.gb_typecontextexplanationhintsfrom_exc)	r  r   NotImplementedErrorr  rp  variables.baserq  rf  rS  )r  r  
proxy_argsproxy_kwargserp  rq  s          rc   proxy_args_kwargsr}    s    
::T:::::
KKFLLNNKKK<'' 

 

 

&&&&&&++++++<]77D>]]GGT&--//EZEZ<[]]Q	
 	
 	
 	
 	
 	
 	
 	
 	
 	
	

s   := 
BABBre  Optional[float]r   c                .    | d nt          | dz            S Nr&  ri   re  s    rc   	to_int_msr    s    944#a$h--/rb   c                .    | d nt          | dz            S )Ni@B r  r  s    rc   	to_int_usr    s    944#a)m"4"44rb   r[   c                  0   e Zd ZU dZded<   dZded<   dZded<   dZded<   dZded<   dZ	ded	<   dZ
ded
<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded <   dZded!<   dZded"<   dZ d#ed$<   dZ!ded%<   dZ"ded&<   dZ#d#ed'<   dZ$d#ed(<   dZ%d#ed)<   dZ&ded*<   dZ'ded+<   dZ(d#ed,<   dZ)ded-<   dZ*ded.<   dZ+ded/<   dZ,ded0<   dZ-ded1<   dZ.ded2<   dZ/ded3<   dZ0ded4<   dZ1ded5<   dZ2ded6<   dZ3ded7<   dZ4ded8<   dZ5ded9<   dZ6ded:<   dZ7ded;<   dZ8ded<<   dZ9ded=<   dZ:ded><   dZ;ded?<   dZ<ded@<   dZ=dedA<   dZ>dedB<   e?Z@dCedD<   dZAdedE<   dZBdedF<   dZCdedG<   dZDdedH<   dZEdedI<   dZFdedJ<   dZGdedK<   dZHdedL<   dZIdedM<   dZJdNedO<   dZKdedP<   dQZLd#edR<   dZMdedS<   dZNd#edT<   dZOd#edU<   dZPdedV<   dZQdedW<   dZRdedX<   dZSdedY<   dZTdedZ<   dZUded[<   dZVded\<   dZWded]<   dZXded^<   dZYded_<   dZZded`<   dZ[deda<   dZ\dedb<   dZ]dedc<   dQZ^d#edd<   dZ_dede<   dZ`dedf<   eadkdj            ZbdS )lCompilationMetricsNr  r  	frame_keyr  co_filenamer   r  
cache_sizeaccumulated_cache_sizeguard_countshape_env_guard_countgraph_op_countgraph_node_countgraph_input_countr~  
start_timeentire_frame_compile_time_sbackend_compile_time_sinductor_compile_time_scode_gen_time_s	fail_typefail_reasonfail_user_frame_filenamefail_user_frame_linenozOptional[set[str]]non_compliant_opscompliant_custom_opsrestart_reasonsdynamo_time_before_restart_szOptional[list[str]]stack_traceexception_stack_tracegraph_node_shapesr  has_guarded_coderemote_cache_time_saved_sstructured_logging_overhead_sconfig_suppress_errors config_inline_inbuilt_nn_modulesspecialize_floatdynamo_configcompiler_configr)  num_triton_bundles!remote_fx_graph_cache_get_time_ms!remote_fx_graph_cache_put_time_msstart_time_usr'  !dynamo_cumulative_compile_time_us'aot_autograd_cumulative_compile_time_us#inductor_cumulative_compile_time_us,inductor_code_gen_cumulative_compile_time_ustriton_compile_time_usruntime_cudagraphify_time_usruntime_triton_autotune_time_us%dynamo_compile_time_before_restart_us distributed_ephemeral_timeout_usstructured_logging_overhead_us!remote_fx_graph_cache_get_time_us!remote_fx_graph_cache_put_time_us#backward_cumulative_compile_time_usend_time_uspre_grad_pass_time_uspost_grad_pass_time_usjoint_graph_pass_time_usri   log_format_versioninductor_configremote_cache_version"inductor_fx_remote_cache_hit_count#inductor_fx_remote_cache_miss_count%inductor_fx_remote_cache_backend_type!inductor_fx_remote_cache_hit_keys"inductor_fx_remote_cache_miss_keyscuda_versiontriton_versionzOptional[dict[str, bool]]feature_usagecompile_time_autotune_time_usFr(  
gc_time_ustensorify_float_attempttensorify_float_successtensorify_float_failureguard_latency_usrecompile_reasonnum_graph_breakstriton_kernel_compile_times_usir_countcudagraph_skip_reasonpython_version!pgo_put_remote_code_state_time_us!pgo_get_remote_code_state_time_usparam_numelparam_bytesparam_countrecompile_user_contexts#inline_inbuilt_nn_modules_candidatepytorch_versioninductor_provenancer9  rS   rj   c                j   dd}dd}dd	}dd
} ||                     d                     ||                     d                     ||                     d                     ||                     d                     ||                     d                     ||                     d                     ||                     d                     ||                     d                     ||                     d                    d	}i ||} ||                     d                    |d<    ||                     d                    |d<    ||                     d                    |d<   |                     d          }|rt          |          nd|d<    | di |S )z
        Factory method to create a CompilationMetrics from a dict of fields.
        Includes the logic to add legacy fields and any pre-processing, e.g.,
        we transform some fields to comma-separated strings for scuba logging.
        metricr   rj   r~  c                    | | dz  nd S )Ng    .ArK   r  s    rc   us_to_sz*CompilationMetrics.create.<locals>.us_to_s  s    #)#56C<<4?rb   c                    | | dz  nd S r  rK   r  s    rc   us_to_msz+CompilationMetrics.create.<locals>.us_to_ms  s    %+%76T>>TArb   Optional[Any]r  c                    d	d| d S t          | t          t          f          sdS d                    fdt	          |           D                       S )
Nitemr   rj   r   c                D    	 t          |           S # t          $ r Y dS w xY wN	<unknown>)r   r  )r  s    rc   safe_strzFCompilationMetrics.create.<locals>.collection_to_str.<locals>.safe_str  s5    't99$  ' ' '&;;'s    
r  ,c              3  .   K   | ]} |          V  d S rx   rK   )r   r  r  s     rc   r   zGCompilationMetrics.create.<locals>.collection_to_str.<locals>.<genexpr>  s+      FFtHHTNNFFFFFFrb   )r  r   rj   r   )r   rt  rf  r   sorted)r  r  s    @rc   collection_to_strz4CompilationMetrics.create.<locals>.collection_to_str  sk    ' ' ' ' ~tfsDk22 #"{88FFFFvf~~FFFFFFrb   c                p    | d S 	 t          j        t          |                     S # t          $ r Y dS w xY wr  )jsondumpsrf  r  r  s    rc   collection_to_json_strz9CompilationMetrics.create.<locals>.collection_to_json_str  sI    ~t#z$v,,/// # # #"{{#s    ' 
55r  r  r  r  r  r  r  r  r  )	r  r  r  r  r  r  r  r  r  r  r  r  r  N)r  r   rj   r~  )r  r   rj   r   )r  r  rj   r  rK   )r|   r   )	rp   r9  r  r  r  r  legacy_metricsall_metricsr  s	            rc   createzCompilationMetrics.create  sa   	@ 	@ 	@ 	@	B 	B 	B 	B	G 	G 	G 	G	# 	# 	# 	# "''++o">">??+27?@@, , '.gEFF' ' (/wABB( (  'wJKK    *1>??* * 2:?@@2 2 2:?@@2 2 .5W<==. ./
 
8 4373 <M;LOO?@@<
 <
78 =N<MOO@AA=
 =
89 9O8NOO<==9
 9
45 !__\22
7A$KC
OOOtL! s!![!!!rb   )r9  rS   rj   r  )cr\   r]   r^   r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r)  r  r  r  r  r'  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  LOG_FORMAT_VERSIONr  r  r  r  r  r  r  r  r  r  r  r  r(  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  rK   rb   rc   r  r  "  s         $J$$$$#I####!G!!!!!%K%%%%$(N(((( $J$$$$,00000!%K%%%%+/////$(N((((&*****'+++++"&J&&&&377777.22222/33333'+O++++#I####!%K%%%%.22222,00000,00000/33333*.O....48 8888'+K++++155555'+++++ (,++++15555559!9999-111117;$;;;;'+++++#'M''''%)O))))!%J%%%%(,,,,,7;%;;;;7;%;;;;#'M''''!%K%%%%7;%;;;;=A+AAAA9='====BF0FFFF,0000026 666659#9999;?)????6:$::::48"88887;%;;;;7;%;;;;9='====!%K%%%%+/////,00000.2222200000%)O))))*.....8<&<<<<9='====;?)????7;%;;;;8<&<<<<"&L&&&&$(N((((/3M333337!7777!&J&&&& $J$$$$.22222.22222266666(,,,,,&*****&*****48"8888"H""""+/////$(N((((7;%;;;;7;%;;;; "&K%%%% "&K%%%% "&K%%%%266666:?'????%)O)))).22222R" R" R" [R" R" R"rb   r  @   maxlenz%collections.deque[CompilationMetrics]_compilation_metricsr  c                   t                      }|                                }|sdS |                    || j        | j        | j        | j        | j        | j        | j	        | j
        | j        | j        | j        | j        | j        | j        | j        | j        t'          | j                  nd| j        t'          | j                  nd| j        t'          | j                  nd| j        | j        | j                   dS )a  
    These are the common fields in CompilationMetrics that existed before
    metrics_context, and aren't set by MetricsContext.set(). We add the subset
    of them that make sense in `dynamo`/toplevel events in PT2 Compile Events
    directly.

    If you're tempted to add to this list, consider using CompileEventLogger.compilation_metric()
    instead, which will automatically also add it to tlparse and PT2 Compile Events.
    TODO: Get rid of this function and replace it with CompileEventLogger directly instead.
    N)r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  )r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rf  r  r  r  r  r  )r  event_loggerr   s      rc   #add_compilation_metrics_to_chromiumr    s    -..L1133J +	M'< 7M5'+-+M!"!; 7 *+)<)HD$%%%d -.,B,ND'(((TX ()'8'DD"###$%&%C+o;       rb   c                 n    dd}  | t          j                              }t          j        |d          S )NdrS   rj   c                L    h dfd|                                  D             S )N>   rz  base_dirrepro_afterrepro_levelTYPE_CHECKINGr  debug_dir_rootrepro_tolerancerepro_forward_only_custom_ops_profile_save_config_ignorerepro_ignore_non_fpignore_logger_methodslog_compilation_metricssame_two_models_use_fp64rV  reorderable_logging_functionsnontraceable_tensor_subclasses)_autograd_backward_strict_mode_banned_ops+inject_BUILD_SET_unimplemented_TESTING_ONLYc                l    i | ]0\  }}|v	|t          |t                    rt          |          n|1S rK   r   rt  r  r   r   r   	blocklists      rc   rn  zJ_get_dynamo_config_for_logging.<locals>.clean_for_json.<locals>.<dictcomp>1  M     
 
 
U)## *UC"8"8Ce###rb   r   r   r  s    @rc   clean_for_jsonz6_get_dynamo_config_for_logging.<locals>.clean_for_json  sG    
 
 
	.
 
 
 
ggii
 
 
 	
rb   T	sort_keysr   rS   rj   rS   )rI   get_config_copyr  r  )r  config_dicts     rc   _get_dynamo_config_for_loggingr     sE    
 
 
 
< !.!7!9!9::K:kT2222rb   c                     dd} t           j        j        sd S 	 t           j        j                                        }n# t          t
          f$ r Y dS w xY w | |          }t          j        |d          S )	Nr   rS   rj   c                J    dhfd|                                  D             S )Nr  c                l    i | ]0\  }}|v	|t          |t                    rt          |          n|1S rK   r  r  s      rc   rn  zH_compiler_config_for_logging.<locals>.clean_for_json.<locals>.<dictcomp>A  r  rb   r  r  s    @rc   r  z4_compiler_config_for_logging.<locals>.clean_for_json<  s@    
	
 
 
 
ggii
 
 
 	
rb   z!Compiler Config cannot be pickledTr  r  )r+  compilerrI   r  r  AttributeErrorr  r  )r  compiler_config_copyr  s      rc   _compiler_config_for_loggingr'  ;  s    	
 	
 	
 	
 >  t3$~4DDFF~& 3 3 32223 !.!566K:kT2222s   #= AAc                 R    G d dt           j                  } t                      }d}d}t          j        j        rJ	 t          j        j                                        }n%# t          t          t          t          f$ r d}Y nw xY w|	 |                                D ]V\  }}t          |t                    s|                    |           t          |t                    rt          |          ||<   W|D ]}||= t          j        || dd          }n# t"          $ r d}Y nw xY w|S )zN
    Method to parse and scrub uninteresting configs from inductor config
    c                        e Zd Zd fdZ xZS )A_scrubbed_inductor_config_for_logging.<locals>.TypeSafeSerializeror   rj   c                j    	 t                                          |          S # t          $ r Y dS w xY w)NzValue is not JSON serializable)r  r  r  )rq  r+  r  s     rc   r  zI_scrubbed_inductor_config_for_logging.<locals>.TypeSafeSerializer.default[  sB    8wwq))) 8 8 87778s    $ 
22)r+  r   rj   r   )r\   r]   r^   r  r  r  s   @rc   TypeSafeSerializerr*  Z  s=        	8 	8 	8 	8 	8 	8 	8 	8 	8 	8rb   r-  Nz!Inductor Config cannot be pickledT)rp   skipkeysr  z(Inductor Config is not JSON serializable)r  JSONEncoderrt  r+  	_inductorrI   r  r  r%  r   AssertionErrorr   r   r   r~  rf  r  r  )r-  keys_to_scrubinductor_conf_strinductor_config_copyr   r`  s         rc   %_scrubbed_inductor_config_for_loggingr5  S  s   8 8 8 8 8T- 8 8 8 "eeM D	D#(?#9#I#I#K#K  ><H 	D 	D 	D C	D '	K06688 : :S!#s++ +!%%c***c3'' :04S		(-$ . .(-- $
$&	! ! !  	K 	K 	K J	K s$   #A! !BB	BD D$#D$start_time_nsend_time_nsr9  exc_typeOptional[type[BaseException]]	exc_valueOptional[BaseException]c                @   t           j        j                                        r 	 ddlm} |}d}n# t          $ r d }d }Y nw xY wd }d }|                    d          }|s#t           j        j	        
                                }i d|d| dz  d|dz  d|r|j        nd d	|rt          |          nd d
t          t           j                                                  dt!                      dt"          j        dt"          j        dt)                      dt+                      dt           j        j        dt1                      rt2          j        ndd|d|dt6          j        dt           j        }	t8                              i |	|          t<                                         d}
j         du rd|
z   }
j!        du r|
dz   }
t           j        "                    |
fdd|           tG                     t"          j$        rtK                     d S d S )Nr   )REMOTE_CACHE_VERSION_ManifoldCacher  r  r&  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  compilation_metricsFbwd_T_runtimec                 d    d t          j                                                   D             S )Nc                b    i | ],\  }}|t          |t                    rt          |          n|-S rK   )r   rt  rf  )r   r_  re  s      rc   rn  z@record_compilation_metrics.<locals>.<lambda>.<locals>.<dictcomp>  sG     
 
 
1 *Q,,3tAwww!
 
 
rb   )dataclassesasdictr   )r?  s   rc   r]  z,record_compilation_metrics.<locals>.<lambda>  s9     
 
#*+>??EEGG
 
 
 rb   )record_logging_overheadr  )&r+  r0  utils should_use_remote_fx_graph_cachetorch._inductor.fb.remote_cacher=  ModuleNotFoundErrorr|   r/  r0  r1  r^   r   r  r  get_structured_logging_overheadr   rI   suppress_errorsinline_inbuilt_nn_modulesr5  r'  versioncudar/   triton__version__r  r  r  r  r   r)  r(  trace_structuredr  r  r'   )r6  r7  r9  r8  r:  r=  r  r  r  common_metricsro   r?  s              @rc   record_compilation_metricsrT    s    ==?? $	9LLLLLL#7 4D11" 	9 	9 	9#' 48111	9 15-# \**J G]1DDFF
j$. 	{d* 	h@X**D	
 	<s9~~~ 	))N::<<+
 +
 	799 	!&"8 	+F,L 	@BB 	799 	* 	
D&,,"  	 4!" 	01V#$ 	#+%& 	5,'N, -334Q~4Q4QRR 3444 D%..}%--j 	N##	
 	
 	
 	
 !&  $   $ ((;<<< % 31222223 3s   
1 AA)on_exitnew_sizec                    t          t                    | k    r1t                                           t          t                    | k    1t          j        t          |           }|ad S )Nr  )r{  r  popleftr   deque)rV  	new_deques     rc   set_compilation_metrics_limitr[    s`    
"
#
#h
.
.$$&&& "
#
#h
.
.!"6xHHHI$rb   c                 8    t                                            d S rx   )r  ry   rK   rb   rc   clear_compilation_metricsr]    s         rb   list[CompilationMetrics]c                 *    t          t                    S rx   )rf  r  rK   rb   rc   get_compilation_metricsr`    s    $%%%rb   c                      e Zd ZdZd'dZd(dZd'dZd)d	Zd*dZd+dZ	d+dZ
d,dZd-dZ	 	 d.d/dZd*d Z	 d0d1d"Z	 d0d2d%Z	 	 d3d4d&ZdS )5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.
    rj   	list[str]c                t    t          | j        d          r| j        j        S g | j        _        | j        j        S )z]
        The main event stack, with every chromium event.
        Logged to tlparse.
        r@  )r3  tlsr@  ru  s    rc   	get_stackzChromiumEventLogger.get_stack  s5    
 48W%% 	"8>!DHN8>!rb   r  c                B    |                                  }|r|d         ndS )zv
        Get the outermost event name (i.e. the longest running event)
        or None if the stack is empty.
        r   N)rf  )rq  r@  s     rc   r   z'ChromiumEventLogger.get_outermost_event  s&    
    *uQxxd*rb   c                t    t          | j        d          r| j        j        S g | j        _        | j        j        S )zq
        A smaller subset of the main stack that gets used to log
        PT2 Compile Events internally.
        r   )r3  re  r   ru  s    rc   r   z,ChromiumEventLogger.get_pt2_compile_substack  s9    
 48344 	1800,.DH)800rb   rS   c                \    t          | j        d          si | j        _        | j        j        S )N
event_data)r3  re  rj  ru  s    rc   get_event_dataz"ChromiumEventLogger.get_event_data  s+    tx.. 	%"$DHx""rb   rk   c                    t          j                    | _        ddlm} |j        r#|j         dt          j                     | _        n%t          t          j                              | _        t                              d| j                   d S )Nr2   rH   -z*ChromiumEventLogger initialized with id %s)	threadinglocalre  r  rI   pt2_compile_id_prefixuuiduuid4id_r   r   ri  )rq  rI   s     rc   rr  zChromiumEventLogger.__init__  s    ?$$ ' 	) 6GGGGDHH4:<<((DH 	=txHHHHHrb   r   r   r  r   c                R    ||                                  vrdS  | j        |fi | dS )zd
        Same as add_event_data, but will silently not log if the event isn't in the stack.
        N)rf  r   )rq  r   r  s      rc   r  z&ChromiumEventLogger.try_add_event_data$  s?     T^^----FJ11&11111rb   c                   ||                                  vr5t          dt          |           d|                                   d          |                                 }||vri ||<   ||                             |           dS )zz
        Adds additional metadata info to an in-progress event
        This metadata is recorded in the END event
        Event  not in q. Cannot add metadata to events that aren't in progress. Please make sure the event has started and hasn't ended.N)rf  r   rH  rk  r   )rq  r   r  rj  s       rc   r   z"ChromiumEventLogger.add_event_data,  s     T^^----Kj)) K K4>>3C3C K K K  
 ((**
Z''%'Jz":%%f-----rb   r   r   ri   c                ,   ||                                  vr5t          dt          |           d|                                   d          |                                 }||vri ||<   |||         vrd||         |<   ||         |xx         |z  cc<   dS )zK
        Increment an integer event data field by the given amount
        rv  rw  rx  r   N)rf  r   rH  rk  rq  r   r   r   rj  s        rc   r   zChromiumEventLogger.increment@  s     T^^----Kj)) K K4>>3C3C K K K   ((**
Z''%'Jz"j,,,*+Jz"3':s###u,#####rb   c                Z   ||                                  vr5t          dt          |           d|                                   d          |                                 }||vri ||<   |||         vrt	                      ||         |<   ||         |                             |           dS )zR
        Add a value to a set within a event_name's metadata if it exists
        rv  rw  rx  N)rf  r   rH  rk  rt  r~  rz  s        rc   r   zChromiumEventLogger.add_to_setR  s     T^^----Kj)) K K4>>3C3C K K K  
 ((**
Z''%'Jz"j,,,*-%%Jz"3':s#''.....rb   FNr   r   r   r   r  r  c                d   |p"t           j        j                                        }t	          |          |d<   |                     ||d|           |                                                     |            | j        |fi | |r)| 	                                                    |           dS dS )a  
        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
        :param log_pt2_compile_event: If True, log to pt2_compile_events
        :param compile_id: Explicit compile_id (rather than using the current context)
        r  BN)
r+  r/  r0  r1  r   _log_timed_eventrf  r   r   r   )rq  r   r   r   r   r  s         rc   r*  z#ChromiumEventLogger.log_event_starth  s       T5=#?#R#R#T#T
!$Z		
 	
 	
 	
+++J33(333  	?))++22:>>>>>	? 	?rb   c                    |                                  }|                                 }|                                 |                                 |                                 }|                                 d S rx   )rf  r   ry   rk  )rq  r@  substackrj  s       rc   rp  zChromiumEventLogger.reset  sj       0022((**
rb   r6  c                f   |p"t           j        j                                        }t	          |          |d<   |                                 }|v r|         }|= ni }|                    |           |                     |d|          }	d
fd}
|                                 }|vrt          
                    d           d	S  |
|           |rJ|                                 } |
|           t          |	|| j        |           |                                 |                                 d	S )a&  
        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
        :param start_time_ns: The start time timestamp in nanoseconds
        :param log_pt_compile_event: If True, log to pt2_compile_events
        :param compile_id: Explicit compile_id (rather than using the current context)
        r  Er@  rc  rj   rk   c                    | d         k    r<t                               d           |                                  | d         k    :d S d S )Nz>ChromiumEventLogger: Detected overlapping events, fixing stack)r   r  pop)r@  r   s    rc   	pop_stackz4ChromiumEventLogger.log_event_end.<locals>.pop_stack  sY    b	)) T   		 b	))))))rb   z7ChromiumEventLogger: Start event not in stack, ignoringN)r@  rc  rj   rk   )r+  r/  r0  r1  r   rk  r   r~  rf  r   r  r   r&   rs  r  )rq  r   r   r   r6  r   r  all_event_datar:  eventr  event_stackr   s    `           rc   r8  z!ChromiumEventLogger.log_event_end  sx   &  T5=#?#R#R#T#T
!$Z ,,..''+J7Nz**Nh'''%%	
 
	 	 	 	 	 	 nn&& [(( KKQRRRF	+  	'#'#@#@#B#B I*+++'+TX}   !$$&&& 	rb   r   Optional[dict[str, Any]]c                    ||dz  ||ddddt           j                            dfddd           t                     S )	za
        Logs a timed event in chromium format. See log_event_start, log_event_end, etc.
        r&  rG  r   )ro   tsr  phcattidpidchromium_eventc                      S rx   rK   r  s   rc   r]  z6ChromiumEventLogger._log_timed_event.<locals>.<lambda>      u rb   F
payload_fnsuppress_contextexpect_trace_id)r+  r  rR  r(   )rq  r   r   r   r   r  s        @rc   r~  z$ChromiumEventLogger._log_timed_event  sr     D.!	
 	
 	''$}}}"!	 	( 	
 	
 	
 	'u---rb   c           	     <   |i }t          t          j        j                                                  }||d<   ||dz  |ddddddt          j                            d	fd
dd           |r+t          |                                 | j	        |           dS 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
        Nr  r&  irG  r   p)ro   r  r  r  r  r  r  sr  c                      S rx   rK   r  s   rc   r]  z7ChromiumEventLogger.log_instant_event.<locals>.<lambda>  r  rb   FTr  )
r   r+  r/  r0  r1  r  rR  r&   r   rs  )rq  r   r   r   r   r  r  s         @rc   r   z%ChromiumEventLogger.log_instant_event  s     H5HHJJKK
!+D.!

 

 	''$}}}" 	 	( 	
 	
 	
 ! 	't4466'    	 	rb   )rj   rc  rj   r  )rj   rS   r   )r   r   r  r   rj   rk   )r   r   r   r   r   ri   rj   rk   )r   r   r   r   r   r   rj   rk   FN)r   r   r   ri   r   rS   r   r   r  r  rj   rk   rx   )r   r   r   ri   r   rS   r6  ri   r   r   r  r  rj   rk   )
r   r   r   ri   r   r   r   r  rj   rS   r  )
r   r   r   ri   r   r  r   r   rj   rk   )r\   r]   r^   r   rf  r   r   rk  rr  r  r   r   r   r*  rp  r8  r~  r   rK   rb   rc   rb  rb    so        	" 	" 	" 	"+ + + +	1 	1 	1 	1# # # #
I I I I2 2 2 2. . . .(- - - -$/ / / /6 ',*.? ? ? ? ?<   " +/G G G G G\ .2    B .2&+( ( ( ( ( ( (rb   rb  zOptional[ChromiumEventLogger]CHROMIUM_EVENT_LOGc                 :    t           t                      a t           S rx   )r  rb  rK   rb   rc   r   r   $  s    !022rb   c                     t           d uS rx   )r  rK   rb   rc   r
  r
  +  s    T))rb   r   reset_event_log_on_exitc           	   #    K   t                      }t          j                    }|                    | |i |           	 dV  |                    | t          j                    i ||           |r|                                 dS dS # |                    | t          j                    i ||           |r|                                 w w xY w)z
    Context manager that creates a chromium start and end event. Chromium event
    logging is integrated with dynamo_timed, so you probably want to use that
    instead. Use this context manager only if you want to avoid dynamo_timed.
    N)r   r   r   r*  r8  rp  )r   r  r   chromium_event_logchromium_start_times        rc   chromium_event_timedr  0  s      344,..&&
	  '((LNN!	
 	
 	
 # 	'$$&&&&&	' 	' 	((LNN!	
 	
 	
 # 	'$$&&&&	's   B ACc                  H    e Zd ZU dZded<   ded<   dd
Zedd            ZdS )CleanupHookz,Remove a global variable when hook is calledrS   scoper   ro   r  r   rj   rk   c                X    t           t           xj        dz  c_        | j        | j        = d S r   )CleanupManagerrr   r  ro   rq  r  s     rc   __call__zCleanupHook.__call__X  s.    %  A%  Jty!!!rb   r`  c                b    || vsJ t           xj        dz  c_        || |<   t          | |          S r   )r  rr   r  )r  ro   r`  s      rc   r  zCleanupHook.create^  s@    5    !d5$'''rb   Nr  r   rj   rk   )r  rS   ro   r   r`  r   rj   r  )r\   r]   r^   r   r   r  r  r  rK   rb   rc   r  r  Q  se         66III" " " " ( ( ( \( ( (rb   r  c                  0     e Zd ZU dZded<   d	 fdZ xZS )
r  r   zClassVar[CleanupManager]instancer  ri   rj   rk   c                ~    | j         |         D ]} |             t                                          |           d S rx   )rS  r  r  )rq  r  r   r  s      rc   r  zCleanupManager._remove_idj  sD    K$ 	 	DDFFFF3rb   r  )r\   r]   r^   rr   r   r  r  r  s   @rc   r  r  f  sP         E&&&&                   rb   r  torch.Tensorc                    |                                                      | j                  }| j        r%| j        | j                                         |_        |S )z!Clone the tensor and its gradient)clonerequires_grad_requires_gradis_leafgrad)r\  ys     rc   clone_tensorr  s  sF    			  11Ay  QV'Hrb   dtyper  Optional[torch.dtype]c          	        t          |           r| S d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+          |           r ||           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&        tO          | j&                  |_&        n'# tP          $ r  ||           cY cddd           S w xY wtS          | d          r| j*        +                                |_*        |cddd           S # 1 swxY w Y   dS )zcopy while preserving stridesr\  r  rj   c                    t          j        |           }| j        r|                    | j                   | j        r"| j        t          | j                  |_        t          | d          r| j        	                                |_        |S )Nr  _dynamo_dynamic_indices)
r+  r  r  r  r  r  clone_inputr3  r  copy)r\  r  r  s     rc   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%rb   xlaN)is_coalesced)layoutc              3  ,   K   | ]\  }}|d z
  |z  V  dS )r2   NrK   )r   shapestrides      rc   r   zclone_input.<locals>.<genexpr>  s@       
 
%2UFUQY& 
 
 
 
 
 
rb       )r  devicer  r  r\  r  rj   r  ),rM   r+  no_gradr  r  r  
sparse_coosparse_coo_tensor_indicesrf   r  r  r$   
sparse_csr
sparse_bsrcrow_indicescol_indicesccol_indicesrow_indicessparse_compressed_tensorrS  r.   r~   zipsizer  is_quantizedempty_quantizedemptyr  data_ptrelement_sizeas_strided_copy_r  r  r  r  r  r  r   r3  r  r  )r\  r  r  compressed_indicesplain_indicesneeded_sizeresultcache_line_offsets    `      rc   r  r  {  s   
 qzz       
 : :8=E!!;q>>: : : : : : : : 8u'''*AJJLL))AIIKK((^^--	  : : : : : : : : "!$$ 	"xE,e.>???%&^^%5%5" !%&^^%5%5" !1.//M**AHHJJ''x  ): : : : : : : :6 +1-- 	" ;q>>=: : : : : : : :@  
 
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>>!!o: : : : : : : :f	"
 1/00 	N-.-F-K-K-M-MF*u: : : : : : : : : : : : : : : : : :sQ   N=A7N=CN=3N=DN=(A1MN=M>/N==M>>2N==OOexample_inputs"dict[str, Union[T, tuple[T, ...]]]dict[str, list[T]]c                    d S rx   rK   r  s    rc   clone_inputsr    s	     rb   Sequence[T]list[T]c                    d S rx   rK   r  s    rc   r  r    s    :=#rb   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 rx   )r  dictr   r   r  r  r+  rS  r  rf  ranger{  )r  resr   r   r  s        rc   r  r    s    Nt##>""))++ 	. 	.JC%'' .'..C!%66CCUCCC&u--C

~

C3s88__ ) )c!fel++ 	) Q((CFJrb   c                    	 |                                   d S # t          $ rI}ddlm}m} t          j        ddt          |                     } | |d d|                     |d }~ww xY w)Nr2   )format_skip_frame_message	SkipFramez\(.*r  z(torch.compile cannot be run in context: )r  r   r  r  r  rer  rH  )r`  r|  r  r  functorch_subclass_names        rc   skip_frame_if_in_functorch_moder    s     
 
 
======== #%&"d3ii"@"@i%%T;RTT 
 

 	
s    
A+AA&&A+Generator[None, None, None]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rx   )r+  _C_DisableFuncTorchrG  _python_dispatch_disable_current_modesr  randomget_rng_stater  rO  is_availableset_rng_state)disable_functorchdisable_current_modes	rng_statecuda_rng_states       rc   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model0TypeIs[Union[torch.jit._trace.TopLevelTracedModule, torch.jit._script.RecursiveScriptModule, torch.jit.ScriptFunction[Any, Any], torch.jit.ScriptModule]]c                    t          | t          j        j        j        t          j        j        j        t          j        j        t          j        j        f          S rx   )	r   r+  jit_traceTopLevelTracedModule_scriptRecursiveScriptModuleScriptFunctionScriptModule)r
  s    rc   is_jit_modelr  
	  sD     I1I3I$I"		
  rb   modelrz  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)r  r  rz  s      rc   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rx   )r)  getfiler  OSErrorr  s    rc   r  r  2	  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    rc   is_namedtupler!  9	  s    T#YY'''rb   rp   c                    	 t           t                    rt           dd          }|dv rdS t          t           dd          t                    rit	          t           dd                    rKt          d  j        D                       }|t          fk    rdS |rt           fd|D                       r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-namedtupler]   N)torch.return_typesztorch.autograd.forward_adT_fields_makec              3  ,   K   | ]}|t           u|V  d S rx   )r   )r   ts     rc   r   z$is_namedtuple_cls.<locals>.<genexpr>I	  s,      KKA!7:J:Ja:J:J:J:JKKrb   c              3  R   K   | ]!}t          |          oj        |j        u V  "d S rx   )r   __new__)r   r'  rp   s     rc   r   z$is_namedtuple_cls.<locals>.<genexpr>M	  sR       ! ! 	 *!,, 5K194! ! ! ! ! !rb   F)
issubclassr  getattrr   callable	__bases__anyr  )rp   modulebasess   `  rc   r   r   >	  s   c5!! 	 S,55FLLLt'#y$77??  HWd++E E   KKKKKKKUH$$4 	 S ! ! ! ! #! ! !   	   4   5s   *B= A,B= B= =
C
	C
r  tuple[str, ...]c                H   | t           u rdS t          | t                    sJ t          | d          r| j        S t
          j         G d d                      }| j        dk    sJ  | t          |t          | j
                                      }i }t          |          D ]D}|d         dk    r6t          t          ||          |          rt          ||          j        ||<   Et          |          | j
        k    sJ t          t!          ||j                            S )	zIGet the fields of a namedtuple or a torch.return_types.* quasi-namedtuple)startstopstepr$  c                      e Zd ZU ded<   dS )!namedtuple_fields.<locals>.Markerri   indexNr\   r]   r^   r   rK   rb   rc   Markerr7  g	  s         




rb   r:  r#  r   r  )r   )slicer*  r  r3  r$  rD  	dataclassr]   r   r  n_fieldsdirr   r+  r8  r{  r  r|   )rp   r:  r  fieldsro   s        rc   namedtuple_fieldsr@  \	  s>    e||((c5!!!!!sI {        >11111
#c&%--..
/
/CFC 4 47c>>jd););VDD>"3--3F4Lv;;#,&&&&FJ///000rb   gmtorch.fx.GraphModuleCallable[[], None]c                   t          j                    5  t          j        t           j                                                  t           j                                        r0t          j        t           j                                                  d t          j        | 	                                | 
                                          D             d d d            n# 1 swxY w Y   dfd}|S )Nc                F    g | ]}||j         t          j        |          fS rK   )_versionr+  r  )r   params     rc   r`  z%checkpoint_params.<locals>.<listcomp>{	  s=     
 
 
  ENEK$6$67
 
 
rb   rj   rk   c                 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 rx   )r+  r  r  r  rO  r  rF  r  )rG  rN  original_valuer  r  saved_states      rc   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+  r  r  r  r  rO  r  r   r   
parametersbuffers)rA  rK  r  r  rJ  s     @@@rc   checkpoint_paramsrN  v	  s"   	 
 
K : : < <==	:""$$ 	E"[)A)A)C)CDDN
 
 #"**,,GG
 
 
	
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0 0 0 0 0 0 0 0 Ns   CC%%C),C)Iterable[Any]timestuple[Any, float]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+  rO  r  synchronizer  gccollectmanual_seedr   perf_counterr  )r  r  rP  rS  t0r  r  t1s           rc   timedrZ  	  s     z   j,KMMMJLLL	d				B5\\  '				B27?rb   c           	         t          d t          j        ||                     d                    D                       S )Nc              3  $   K   | ]}|j         V  d S rx   )is_cudar   r\  s     rc   r   z check_is_cuda.<locals>.<genexpr>	  s$      WWQqyWWWWWWrb   T)allr   r   rL  )rA  r  s     rc   check_is_cudar`  	  s8    WW)/."--PTBUBU"V"VWWWWWWrb   r  r  Callable[..., Any]c                   | dk    sJ d t          |           D             }t          |dd          |d d         z             }t          dd                    |           dd                    |           d          }d|  d	|_        |S )
Nr2   c                    g | ]}d | S r  rK   r   r  s     rc   r`  z rot_n_helper.<locals>.<listcomp>	  s    &&&GGG&&&rb   r  zlambda r  z: ()rot__helper)r  reversedevalr   r\   )r  varsrotatedrF  s       rc   rot_n_helperrl  	  s    q5555&&U1XX&&&DtBCCy49,--G	???388G+<+<???	@	@B####BKIrb   z	set[type]common_constant_typesc                >   t          | t          t          f          r"t          t	          t
          |                     S t          | t          j        t          t          j        t          j        t          j        f          pt          | t           t"          hz            S rx   )r  r  	frozensetr_  r   is_safe_constantr   enumEnumr  r+  Sizer	  _GenericAliasr4  GenericAliasrm  r;  r  s    rc   rp  rp  	  s    a%#$$ -3'++,,,	IJ 	
	 	  
	'
 
rb   set[int]c                 
    ddhS Nr   r2   rK   rK   rb   rc   common_constantsry  	  s    
 	
		 rb   -TypeGuard[Union[torch.SymBool, torch.SymInt]]c                    t          | t          j        t          j        f          o.t          | j        t          j        j        j        j                   S rx   )	r   r+  SymBoolSymIntnodenestedr  
nested_intNestedIntNoder  s    rc   is_torch_symr  	  sH    eemU\:;; J
EL*5CE E A rb   sourcec                   ddl m} t          j                    j         o|j                                         p|j                                        ot          j	         pv|j        
                                ot          j	         pP|j                                        ot          j	         p* ||          pt          d           o| t                      v S )Nr2   )is_from_defaultsz5pytorch/dynamo:enable_unspecialize_zero_one_plain_int)r  r  r#   r|   #force_unspec_int_unbacked_size_likeguard_sourceis_localis_specialized_nn_modulerI   allow_unspec_int_on_nn_module"is_unspecialized_builtin_nn_moduleis_unspecialized_nn_moduler%   ry  )r   r  r  s      rc   is_int_specialization_caser  	  s    ((((((!##GG ((*** 	

 88:: 988	
 BBDD 988	
 ::<< 988	
  F##!	
(   WXXX ,)+++/rb   rl  c                   ddl m}m}m} t	          | |          r|                                 so|                                 }|                                 }t          |          p3t          j
         o&t          |          t          u ot          ||           }|s| S t	          | |          r'|                    |                                           S | S )Nr2   )ConstantVariableLazyVariableTrackerSymNodeVariable)	variablesr  r  r  r   is_realizedoriginal_sourcerI  r  rI   specialize_intr  ri   r  r  evaluate_expr)rl  r  r  r  r  r   is_symnode_vts          rc   specialize_symnoder  
  s    QQQQQQQQQQ #*++ COO4E4E  $$&&""$$$U++ 
%% >Us">.uf=== 	  	J#'' <&&s'8'8':':;;;Jrb   c                    ddl m} t          |           } t          | |          r(|                                 r|                                 S | S )Nr2   rA   )r  rB   r  r   is_python_constantas_python_constant)rl  rB   s     rc   guard_if_dynr  +
  s]    ******
S
!
!C#'' (C,B,B,D,D (%%'''Jrb   Mapping[Any, Any]c                ~    t          d t          j        | |                                          D                       S )Nc              3  >   K   | ]}|                                 V  d S rx   )r  r^  s     rc   r   z&check_constant_args.<locals>.<genexpr>7
  s.      VV!q##%%VVVVVVrb   )r_  r   r   rS  r  s     rc   check_constant_argsr  6
  s3    VVytV]]__/U/UVVVVVVrb   c                    ddl m} ddlm} d}t	          j        | |                                          D ]?}t          ||          r|dz  }t          ||          r|                                s dS @|dk    S )Nr2   rA   UnspecializedPythonVariabler   F)	r  rB   variables.tensorr  r   r   rS  r   r  )r  r  rB   r  unspec_countr\  s         rc   check_unspec_python_argsr  :
  s    ******======L_T6==??33  a455 	ALLQ00 	Q5I5I5K5K 	55	!rb   c                    ddl m} t          j        | |                                          D ])}|                                st          ||          s dS *dS )Nr2   r  FT)r  r  r   r   rS  r  r   )r  r  r  r\  s       rc   check_unspec_or_constant_argsr  G
  sl    
 >=====_T6==??33  $$&& 	*Q8S*T*T 	554rb   c                    ddl m t          fdt          j        | |                                          D                       S )Nr2   )NumpyNdarrayVariablec              3  8   K   | ]}t          |          V  d S rx   )r   )r   r\  r  s     rc   r   z+check_numpy_ndarray_args.<locals>.<genexpr>W
  sB         	1*++     rb   )r  r  r.  r   r   rS  )r  r  r  s     @rc   check_numpy_ndarray_argsr  T
  sa    666666    v}}77     rb   ztype[KeysView[Any]]	dict_keysztype[ValuesView[Any]]dict_valuesztype[ItemsView[Any, Any]]
dict_itemsodict_valuesztype[Iterator[Any]]tuple_iteratorrange_iteratorc                0    h | ]}t          |          |S rK   r,  r   methods     rc   	<setcomp>r  f
  s6       
  rb   c                0    h | ]}t          |          |S rK   r  r  s     rc   r  r  k
  %    NNN&Xf=M=MNvNNNrb   c                0    h | ]}t          |          |S rK   r  r  s     rc   r  r  l
  s5       8H8H
  rb   c                0    h | ]}t          |          |S rK   r  r  s     rc   r  r  q
  s%    RRRF&AQAQRRRRrb   c                0    h | ]}t          |          |S rK   r  r  s     rc   r  r  r
  s%    PPP6x?O?OPPPPrb   c                0    h | ]}t          |          |S rK   r  r  s     rc   r  r  u
  r  rb   KVr   
dict[K, V]KeysView[K]c                d    t          | t                    sJ t                              |           S rx   )r   r  rg  )r   s    rc   builtin_dict_keysr  {
  s(    a99Q<<rb   !Iterable[tuple[K, Union[V, Any]]]c                H    t           t                    sJ t           t          t          f          r                                 S t           t                    r  fdt          j                   D             S  fdt                                         D             S )Nc                >    g | ]}|t          j        |          fS rK   )r   r  r   r_  r  s     rc   r`  z'get_items_from_dict.<locals>.<listcomp>
  s+    TTTK+C334TTTrb   c                J    g | ]}|t                               |          f S rK   )r  r  r  s     rc   r`  z'get_items_from_dict.<locals>.<listcomp>
  s.    FFF!D$$S!,,-FFFrb   )r   r  r  r   r   rg  r  s   `rc   get_items_from_dictr  
  s    c4     cD+&'' Gyy{{	C	%	% GTTTTk>Ns>S>STTTT GFFFtyy~~FFFFrb   c                l    t          |           }t          j        j                            |           |S rx   )
object_newr+  rT  Modulerr  )rp   r  s     rc   nn_module_newr  
  s*    
S//C	HOS!!!Jrb   itIterable[T]c                B    t          j        t          j        | d          S r   )r&  reduceoperatormul)r  s    rc   productr  
  s    HL"a000rb   r8  c                L    |                                  \  }\  }}|||z            S rx   )
__reduce__)r  r8  r  r  r3  s        rc   tuple_iterator_getitemr  
  s'    }}Avuuu}rb   c                d    t          j                            t          j                  |           S rx   )r+  _dynamodisablerD  r?  rz   s    rc   dataclass_fieldsr  
  s#    =  !344S999rb   
range_itertuple[int, int, int]c                    |                                  \  }\  }}|j        |pd|j        z  z   }|j        }|j        }|||fS r   )r  r3  r5  r4  )r  r  	range_obj	maybe_idxr3  r4  r5  s          rc   normalize_range_iterr  
  sP    !+!6!6!8!8A|	Y Oy~A??E>D>D4rb   r'  c                ,    |                      |          S rx   )as_subclass)r'  rp   s     rc   to_subclassr  
  s    ==rb   dict[Any, Any]c                    t           }t          | t                    rt          }t          t	          j        |                    |           ||dz                       S r   )r  r   r   nextr   islicerg  )r   r  
dict_classs      rc   dict_keys_getitemr  
  sM     J![!! ! 
	 !3!3QA>>???rb   r  set[T]c                ,    t          |           |         S rx   rf  )r  r  s     rc   set_getitemr  
  s    771:rb   ro  c                L    | j         j        }| j        }|rdnd}| d| d| }|S )NLGz["z"].)r  r\   ro   )r   ro  ro   r`  r  
local_names         rc   	enum_reprr  
  sD     ?#D
*C!CCcE++T++c++Jrb   r~  torch.fx.Nodeexample_valuec                    || j         d<   t          j                    j        }|J |j        }t
          j        j        j        	                    ||          x}r|| j         d<   d S d S )Nr  unbacked_bindings)
metar#   r|   	fake_mode	shape_envr+  r   experimentalsymbolic_shapescompute_unbacked_bindings)r~  r  r  r  symbol_to_paths        rc   set_example_valuer  
  s     "/DIo"$$.I   #I 8 0JJ}
 
	
8 *8	%&&&8 8rb   vtrB   c                    |                                  j        j                            d          }t	          |          s/ddlm} ddlm}  |dt          |          dg |j
                   |S )Nr  r2   graph_break_hintsro  z:Cannot check Tensor object identity without its fake valuez/TensorVariable is missing a fake example_value.rs  rt  ru  rv  )rj  r~  r  r|   rM   r  r  r  rp  r   
DYNAMO_BUG)r   fake_tensorr  rp  s       rc   _get_fake_tensorr  
  s    ++--$)--o>>K; 	
''''''&&&&&&P$$I1%01		
 	
 	
 	
 rb   r;  seq_lenc                |    |                      |          \  }}}t          d||z
  ||dk    rdndz
  z   |z            S )Nr   r2   r  )indicesmax)r  r  r3  r4  r5  s        rc   slice_lengthr  
  sI    		'**E4q4%<4q11b#ABtKLLLrb   r  txr@   ro   expectactualc                n    ddl m} ddlm} d| d| d| } |t          |  ||          g           d S )Nr   )raise_observed_exception)r  z3wrong number of arguments or keyword arguments for z() call.
  Expect: z
  Actual: r^  )torch._dynamo.excr  torch._dynamo.variablesr  r  )r  ro   r  r  r  r  msg_strs          rc   raise_args_mismatchr  
  s     ;:::::888888	d 	 		 		 	  
w''(     rb   r   searchr?   check_tensor_identityc                f   ddl m}m}                                 r0t	          fd| D                       }|                    |          S d}|r%                                rd}t                    d }| D ]}	|r=|	                                r(t          |	          u r|                    d          c S A |t          j	                  
                    ||	gi           }
||
}r |t          j                  
                    ||
|gi           }||                    d          }|S )Nr2   )BuiltinVariabler  c              3     K   | ]B}|                                 o)|                                                                k    V  Cd S rx   )r  r  )r   r\  r  s     rc   r   z iter_contains.<locals>.<genexpr>  sk       
 
    "" F$$&&&*C*C*E*EE
 
 
 
 
 
rb   FT)r  r  r  r  r.  r  	is_tensorr  r  eqcall_functionor_)r   r  r  r  r  r  found_constmust_check_tensor_idfoundr\  checks    `         rc   iter_containsr#    s    =<<<<<<<  "" 4 
 
 
 
 
 
 
 
 

  &&{333  *!1!1!3!3 *#!&))'+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  } ''..Lrb   r_  ?TypeIs[Union[torch.Tensor, torch.nn.Module, MethodWrapperType]]c                d    t          | t          j        t          j        j        t
          f          S )z4Returns whether it indexes dictionaries using its id)r   r+  rS  rT  r  r   )r_  s    rc   	key_is_idr&  :  s"     a%,9JKLLLrb   	list[Any]c                    d | D             S )Nc                N    g | ]"}t          |          rt          |          n|#S rK   )r&  r  )r   r_  s     rc   r`  zkey_to_id.<locals>.<listcomp>B  s-    888QYq\\(BqEEEq888rb   rK   r  s    rc   	key_to_idr*  A  s    88%8888rb   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d} ||           S | S )Nr2   )is_builtin_callabler  c              3  :   K   | ]}t          |           V  dS ro  N
const_reprr   r  ro  s     rc   r   zconst_repr.<locals>.<genexpr>I  s0      DDQj%888DDDDDDrb   [](z,)re  r/  'r  r+  r   rj   r   c                R    | j         }|j        }|dk    r|j        S |dz   |j        z   S )Nbuiltins.)r  r]   r^   )r+  klassr/  s      rc   fullnamezconst_repr.<locals>.fullnameZ  s7    KE%F##))C<%"444rb   )r+  r   rj   r   )trace_rulesr,  r   rf  r  r   r{  rq  rr  r  replacer\   r  )r\  ro  r,  
elems_reprr;  s    `   rc   r1  r1  E  sL   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 	5 x{{xrb   
const_keysc               V    d                     fd| D                       }d|z   dz   S )Nr  c              3  :   K   | ]}t          |           V  dS r.  r0  r2  s     rc   r   z!dict_keys_repr.<locals>.<genexpr>g  s0      GGq
1E222GGGGGGrb   r3  r4  r   )r?  ro  keys_strs    ` rc   dict_keys_reprrD  f  s8    xxGGGGJGGGGGH>Crb   
__dict_key)UnsupportedFakeTensorExceptionrootc                D    | dt          |           d| j        j         S )Nr  _c)r  outputr  )r  rG  r  s      rc   get_safe_global_namerK  q  s+     66RWW66	 4666rb   r  
containersContainer[T]c                    |D ]	}| |v r dS 
dS r  rK   )r  rL  	containers      rc   is_inrP  {  s-      	944 5rb   )requires_suffixprefixrQ  c                   |st          | g|R  s| S t          j                    D ]}|  d| }t          |g|R  s|c S t          d          )zm
    Return a name that starts with `prefix` and is not in any of the
    `containers` (e.g., map, set).
    r  unreachable)rP  r   rr   r1  )rR  rQ  rL  r  	candidates        rc   get_unique_name_wrtrV    s      5#=*#=#=#= _  OOOO	Y,,,, 		 
'
''rb   Callable[[], Any]c                    	  |             S # t           $ rX}ddlm} d|j         d}t                              |            |dt          |j                  |g |           Y d }~d S d }~ww xY w)Nr2   ro  zEncountered exception (z!) during fake tensor propagation.z!Fake tensor propagation exceptionrr  )rF  r  rp  reasonr   r  r   )rF  r|  rp  r  s       rc   wrap_fake_exceptionrZ    s    
rtt) 
 
 
&&&&&&SSSSC7MM	
 	
 	
 	
 	
 	
 	
 	
 	
 	

s   	 
A.AA))A.r  ,torch._subclasses.fake_tensor.FakeTensorModec                     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 rx   )r  deepcopyr  s   rc   r]  z)deepcopy_to_fake_tensor.<locals>.<lambda>  s    4=+=+= rb   )r+  rW  r  FakeCopyModerZ  )r  r  s   ` rc   deepcopy_to_fake_tensorr`    s     
		&	3	3I	>	> ? ?"#=#=#=#=>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?s   AA	A	r  r  c                x    t          j        t          j        t          j        | |z
                                S )z+
    Calculate root mean squared error
    )r+  sqrtmeansquare)r  r  s     rc   rmsere    s,     :ejcCi!8!899:::rb   	equal_nanc                (    t          | |d|          S )Ng        )tolrf  same)r  r  rf  s      rc   bitwise_samerk    s%    	   rb   g-C6?Tfp64_refcos_similarityrh  floatexact_dtyperelax_numpy_equalityignore_non_fp	log_errorCallable[..., None](use_larger_multiplier_for_smaller_tensorforce_max_multiplierc                >   	
  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    o1t          	
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          rt           t
          j        j                  rJ t          t
          j        j                  rJ d+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|%                                &                                '                                           t7          |dk              S s                     j                   t          j                   rdS j        t
          j(        k    rd})                                *                                s)                                *                                sZ )                                *                                r4t          j                            j                  ||          rdS tW                     '                                }tY          j)        |          rtF          $                    d           tW                    '                                }d, 
fd!} |            }|||z  d"z  z   k    }|sGrEtY          j)        |          r1tY          j)        |          rt
          j-        j.        j/        j0        sd}|s) 	d#||1                                j        |
           |S rdS  	d$           dS t           td          tf          t          d          t6          t
          j4        f          r)rdS  k    }|s 	d%t                                 |S tk                     stm                     rir2tk                    s#tm                    s '                                 t                     t                    u o k    }|s 	d&            |S to                     r\t                     t                    u o=t          t          j8                   t          j8                  	
'          S t                     j        d(v rJt                     t                    u sJ t          	 
fd) j9        D                       S tu          d*t                     j                   )-z-Check correctness to see if ref and res matchNztype mismatch r   zLength mismatchFc              3  V   	K   | ]#\  }}}t          |||
	           V  $dS )rr  rt  ru  Nri  )r   aibi	fp64_refirm  rf  ro  ru  rq  rr  rp  rh  rt  s       rc   r   zsame.<locals>.<genexpr>  sr       ,
 ,
 "B	 $#9a%9  ,
 ,
 ,
 ,
 ,
 ,
rb   QuestionAnsweringModelOutputrx  zkeys mismatch z == )	rm  rh  rf  ro  rp  rq  rr  rt  ru  zAccuracy failed for key name %sTzelements mismatch r'  r   rj   r  c                b    t          | t          j                  r| nt          j        |           S rx   )r   r+  rS  tensorr'  s    rc   	to_tensorzsame.<locals>.to_tensor  s%    "1el33H11aHrb   c              3  .   K   | ]} |          V  d S rx   rK   )r   r`  r  s     rc   r   zsame.<locals>.<genexpr>  s+      MMiinnMMMMMMrb   zdtype mismatch %s, %sr  )atolrtolrf  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.rn  c                 j   rdS j         t          j        t          j        fv rdnd} r                                dk    rd} nmr                                dk    rd} nP                                dk     s6j        dk    r%j        d	         j        d
         cxk    rdk    sn dk    rd} | S )N      $@g      @g       @
   i  g       @r&     r  r2   g{Gz?)r  r+  r  bfloat16numelndimr  )
multiplierru  rl  r  r  rh  rt  s    rc   get_multiplierzsame.<locals>.get_multiplieri  s     , $#t  #yU]EN,KKKQT  @ ) ((B..%)

A ) ((C//%(

 ((4//HMMcimsy}.Q.Q.Q.QPQ.Q.Q.Q.Q(??
 &)
%%rb   r  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rm  rh  rf  ro  rp  rq  rr  rt  )MaskedLMOutputSeq2SeqLMOutput!CausalLMOutputWithCrossAttentionsLongformerMaskedLMOutput	InstancesSquashedNormalBoxesNormalTanhTransformFooVariablec              3     K   | ]H}t          t          |          t          
|          t          |          	           V  IdS )r  N)rj  r+  )r   r   rm  rf  ro  rl  rq  rr  r  rp  r  rh  rt  s     rc   r   zsame.<locals>.<genexpr>  s       
 
  S!!S!!#&&-#'%9+#9a  
 
 
 
 
 
rb   zunsupported type: )r'  r   rj   r  )rj   rn  );r   rf  r  r   rY  r+  rT  ParameterListrs  r  r{  r_  r  r\   rj  lossr  rt  rg  r  rS  rn  rW  rL   	is_sparseto_denser  r   allclosetor  flattenr  
functionalcosine_similarityr   r  detachcpur  r  isnanr.  re  mathr0  rI   cppinject_relu_bug_TESTING_ONLYr  r   ri   r  r  r  rQ  	as_tensor__dict__r   )r  r  rl  rm  rh  rf  ro  rp  rq  rr  rt  ru  r_  rscore	loose_tol	ref_error	res_errorr  r  passes_testr  s   ````````````         @rc   rj  rj    s
    dE;,eh.DejQ  \F #e[->?@@ 	
 	
4T#YY44c44	
 	
 	
 s88s3xxI'(((53xx3s88# 
 ,
 ,
 ,
 ,
 ,
 ,
 ,
 ,
 ,
 ,
 ,
 ,
 &)c8%<%<,
 ,
 ,
 )
 )
 	
" 
c	=	=	= HHM 5]!5
 
 
 	
 
C		 pF#t$$$$$388::#chhjj//111CS__CC#chhjj//CC 211 

## 	 	AFFQK#1' +)="/'=e)=    	;Q???uu#$ t	C		 WF#s#####3xx3s88###%R#c((%R%RC%R%R###t	C%,.	/	/ SFc5#4#?@@@@@c5#4#?@@@@@	I 	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 t	++--""5=11C++--""5=11C~c3SsdKKK  tH'99#st9TTEt||15<<>>3E3E3G3G3L3L3N3NOOO&&& (ffSY'' ~c3SsiPPP t ~.. %	 ((,,.. IIKKOO--  		))   #)44&&"+  	   4 3//4466	:i(( KKW   !3//4466	!& !& !& !& !& !& !& !& !& !& !&F ,^--
'J,BS4Z,OP#	'!	' 
9--	' 
9--		' "O26S	' #'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Erb   c                n    | j                             d          d         }d| j         d| d| j         dS )N/r  r6  z' (r   re  )r  splitr  r  )r  short_filenames     rc   format_func_infor    sC    %++C004NGt|GGGG1DGGGGrb   c               #    K   t           j        } t          j        t           _        t           j        }t          j        t           _        	 d V  | t           _        |t           _        d S # | t           _        |t           _        w xY wrx   )rI   recompile_limitr  rn  accumulated_recompile_limit)priorprior_acc_limits     rc   disable_cache_limitr    sm      "E [F8O),F&=!&-<*** "'-<*<<<<s   A& &B z'collections.defaultdict[Any, list[Any]]guard_failuresz3list[torch._dynamo.output_graph.GraphCompileReason]graph_break_reasonsroot_dirc                    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strftimer   r  getpidr  r   )r  dir_names     rc   _get_debug_dirr    sm     	




!
!
*
*+A
B
B	C 	 bikk

		  7<<(+++rb   c                 8    t           j        } t          |           S rx   )rI   r  r  )
debug_roots    rc   r  r    s    &J*%%%rb   requiredc                    d| j         v r't          | j         d                   r| j         d         S |r5ddlm} ddlm}  |dt          |           d|  dg |j        	           d S d S )
Nr  r   ro  r2   r  z Missing FakeTensor example valuez,`FakeTensor` example value was required for z but not available.r  )r  rM   r  rp  r  r  r   r  )r~  r  rp  r  s       rc   extract_fake_example_valuer  !  s    $)##	/0J(K(K#y))	 333333''''''6II`t```1%01		
 	
 	
 	
 	
 	
 trb   r|  c                6    t          |           |j        u sJ | S rx   )rN   r  )r|  r  s     rc   ensure_graph_faker  3  s"    q!!R\1111Hrb   r  allow_non_graph_fakec                ^     d fd}t           j        j                            ||          S )Nr  r  rj   r   c                   | j         dk    rd| j        vrt          |           S | j         dk    rXd| j        vrO| j        j        j        v sJ j        j        | j                 }t          |t          j        j	                  sJ |S | j        d         }s*t          |t          j
                  rt          |          S |S )Nr  r  get_attr)r  r  get_fake_valuetargetrJ  
nn_modulesr   r+  r   GraphModulerS  r  )r  rA  r   r  r  s      rc   visitz)get_fake_values_from_nodes.<locals>.visit;  s    4?""af'D'D "!R)=>>>TZO16$A$A8ry33333%ah/Bb%("677777If_%# 	.
3(E(E 	.$S"---
rb   )r  r  rj   r   )r+  r   r~  map_arg)r  r  r  r  s   ` ` rc   get_fake_values_from_nodesr  8  sC          " 8=  ...rb   r  Optional[FakeTensorMode]c                    ddl }ddlm || S d}|j        J |j        }|j        fd} |j        |||           } | S )z
    Replace symbolic size expressions (like 's0', 's94') in error messages
    with their concrete runtime values for better readability.

    Example: "size (s94)" -> "size (s94: hint= 10)" if s94's value is 10.
    r   N)Integerz
\(s(\d+)\)c                   d|                      d           t          fd                                D             d           }t          |t          f          rd dt          |           dS |                      d          S )Nr  r2   c              3  8   K   | ]\  }}|j         k    |V  d S rx   )ro   )r   r_  re  sym_names      rc   r   zGget_concrete_sizes_from_symints.<locals>.replace_sym.<locals>.<genexpr>g  s3      DD41a81C1CQ1C1C1C1CDDrb   r5  z	: hint = re  r   )groupr  r   r   ri   r   )matchr`  r  r  
var_to_vals     @rc   replace_symz4get_concrete_sizes_from_symints.<locals>.replace_symd  s    'u{{1~~''DDDD:++--DDD
 
 cC>** 	65x55#c((5555{{1~~rb   )r  sympy.core.numbersr  r  r  r  )r  r  r  patternr  r  r  r  s         @@rc   get_concrete_sizes_from_symintsr  O  s     III******
G***#I%J      "&+s
+
+CJrb   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|          \  t          j        j        j        st          j        j        j        r,t          t'           i           |          }
d |
D             }ng }
i }dj        }|J |	dk    rgt+                    dk    rTt-          d         t          j        j                  r/t3          d         |          ft5          dd                   z   |	d	k    r\j        j         j                 t=                    r&t?          d
          r                                t3          |           j!        dv stE          d D                       rt5          d D                       	 |5  tG                      5  tI           fd          }ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   n# |$ r  tJ          $ r}|}|j&        |j&        }t-          |t          j'        j(        j)                  rp|j*        t          j+        j,        j-        j.        t          j+        j,        j/        j.        fv rdg}ndg} |dta          |j*                  d|j*         d|           nt-          |t          j'        j(        j1                  rpt          j        j        j2        s- |dta          |j*                  d|j*         ddg           n |dta          |j*                  d|j*         ddg           net-          |t          j'        j(        j3                  r|j*        }	d}t-          |	t          j4        j5                  rGt          j6        7                    |	j8        j!        |	j8        j9                  }||\  }}d| d| d| d} |d d!|j*         d| d"g           nt-          |t          j:        j;        j<        j=                  r  ||j>        ta          |          d#$          t-          ||          r ||j>        |j        d                   |t-          |t~                    r+d%ta          |          v r |d&d' j         d(| dg            t          ta          |          |          } ||          A                    |jB                  dd}~ww xY w|s9t          jD        t          jE        t          jG        t          )          |          }t          j        j        j        st          j        j        j        r!j        jI        J                     |
|           |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   )ValueRangeErrorr2   )TorchRuntimeErrorrp  Unsupported	UserErrorUserErrorTyper  c                V    i | ]&}t          |          t          |          |j        'S rK   )rM   r  rF  rk  s     rc   rn  z"get_fake_value.<locals>.<dictcomp>  s=     !
 !
 !
&)!
sGGS\!
 !
 !
rb   Ncall_methodcall_module_initialize_hook)interpolate
is_integerwrapped_gradientc              3  @   K   | ]}t          |t                    V  d S rx   )r   complex)r   as     rc   r   z!get_fake_value.<locals>.<genexpr>  sE       M M#$
1gM M M M M Mrb   c              3     K   | ];}t          |t          j                  r|j        j        t          |          n|V  <d S rx   )r   r+  SymFloatr~  hintrn  rk  s     rc   r   z!get_fake_value.<locals>.<genexpr>  sc       
 
  c5>227:x}7P c


	
 
 
 
 
 
rb   c                 4    t          j                   S rx   )run_noderJ  )r  r  nnmoduler~  r  s   rc   r]  z get_fake_value.<locals>.<lambda>  s    D$II rb   zkEnable tracing of data-dependent output operators with `torch._dynamo.config.capture_scalar_outputs = True`zConsider wrapping the operator into a PyTorch-understood custom operator (see https://pytorch.org/tutorials/advanced/custom_ops_landing_page.html)zData dependent operatorz
Operator `zP` has a non-Tensor output whose value is dependent on the data of Tensor inputs.r  zDynamic shape operatorz.`'s output shape depends on input Tensor data.zmEnable tracing of dynamic shape operators with `torch._dynamo.config.capture_dynamic_output_shape_ops = True`z'Dynamic shape operator (no meta kernel)zA` does not have a meta kernel that supports dynamic output shapesz!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 z3Operator does not support running with fake tensorszunsupported operator: 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 when making fake tensor callz
TypeError z: )r  )Ktorch.utils._sympy.value_rangesr  r  r  rp  r  r  r  r  r  rM   r  r  r  r+  r  rI   use_graph_deduplicationtrack_nodes_for_deduplicationr3   r  r{  r   rT  r  r`  r  rJ  r  r  r\  r3  _infer_parametersro   r.  r   rZ  r   	__cause__rW  r  DataDependentOutputExceptionfuncopsatenr  r  _local_scalar_denser   DynamicOutputShapeException capture_dynamic_output_shape_opsUnsupportedOperatorExceptionr.  r0  r  _dispatch_pystub_schemaoverload_namer   r  r  GuardOnDataDependentSymNodeCONSTRAINT_VIOLATIONr  r  with_traceback__traceback__pytreetree_map_onlyrS  r&  partialr  region_trackertrack_node_mutations)r~  r  r  r  r  rp  r  r  r  r  flat_args_kwargsid_to_initial_versionr  ret_valr|  causerv  import_suggestionmaybe_pystubr/  ctxr  r  r  r  r  s   ``                     @@@rc   r  r  r  s    @?????              
B $)##	/0J(K(K#y))-
TY$&: LD&
 	4#==# 6tR((*>
 
!
 !
-=!
 !
 !
  "HI   	]s4yy1}}DGUX_1U1U}'Q;;=d122hO	]9'4(## 	7:L(M(M 	7
 &&x666 +8Y??yEEE M M(,M M M J JE  
 
 
 
 
 
 
hO 	 	022 	 	)IIIIIIII G	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	     aO aO aO ;"KE5$0M
 
 Z	
 z	#+	2:  K` M1EJI I I I     5$0L
 
 @	 ='H 4
OO gUZ g g gY	     E
OO zUZ z z z;	     5$0M
 
 *	 B ""ej344 
$x88JORZ%=     +".KFC/#)/ /IO/ // / / &
 MM===( & & &		 	 	 	 	 58(8T
 
 	 )2E

5   
 // 	)M>q	JJPQQy)) 	jCJJ.F.FM@;T[;;E;;	    .c!ffi@@$$33AODD$NCaOF   
 L)+,="EEEw
 

 	4
==
 		 55!	
 	
 	
 Nsa   %H= 'H06HH0H	H0 H	!H0$H= 0H44H= 7H48H= =T0KT++T0Optional[torch.fx.Node]c                 .    t          t          dd           S )Nr   )r+  _current_noderK   rb   rc   get_current_noder%  A  s    ='4000rb   c              #     K   t                      }| t          _        	 d V  |t          _        d S # |t          _        w xY wrx   )r%  r$  r   )r~  olds     rc   set_current_noder(  E  sI      


CM"!c!!!!s   0 >tracerr  c           	       
 j         
t                    5  d
fd}ddlm} 	 
dk    r j        i cd	d	d	           S 
d
k    rnt          d         j                  sddlm}  |dd |d          g             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 n# t          t          f$ rC}ddlm} g }	t          |t                    rdg}	 |dd ||          |	|           Y d	}~nKd	}~w|$ r  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.
    r|  r   rj   r   c           	     L    d dj          d d d	t          |           z   S )Nz0Dynamo failed to run FX node with fake tensors: r   z(*z, **z): got )r  rH  )r|  r  r  r~  r  s    rc   make_error_messagez$run_node.<locals>.make_error_messaged  s@    p2ppppW[ppagpppq''rb   r2   )r  r  Nr  r   ro  z/Missing attribute when running call_method noder  zattribute not definedr  r  r  placeholderr  z;If the op is a PyTorch op, please file an issue to PyTorch.zGNotImplementedError/UnsupportedFakeTensorException when running FX noderr  )r|  r   rj   r   )r  r(  r  r  r  r3  rp  r+  output_graphget_submoduler  rx  rF  r   r  r   r  r  r1  )r)  r~  r  r  r  r,  r  rp  r|  rv  r  s    ```      @rc   r  r  O  s   " 
B	$		 7 7	 	 	 	 	 	 	 	 	 	%$$$$$-	_$$"t{D3F337 7 7 7 7 7 7 7 }$$tAw44 222222!M Q "$6$67N$O$O 	    5wtAw44d122hI&II/7 7 7 7 7 7 7 70 }$$+++x00057 7 7 7 7 7 7 76 z!!*88EE97 7 7 7 7 7 7 7: }$$&$)3333y1?7 7 7 7 7 7 7 7: % $%CD 	 	 	******E!011 Q Ma..q11          	 	 	 	 	 	11!4455DD 	i7 7 7 7 7 7 7 7 7 7 7 7 7 7 7r 

s_   GD9A'D9?D9$D9D98G9G
9FGG1GGGG#&G#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.
    r2   )r  c                $    t          |           S rx   )get_real_value)r  r)  s    rc   r]  z get_real_value.<locals>.<lambda>  s    .F++ rb   r-  graphargr  N)r  r  real_value_cacher  r+  r   r~  r  r  r  r  exampler.  r  r  r\  r  r^  r  r   r   r  r  )
r~  r)  r  cacher  r  r  	nn_module
real_valuer|  s
    `        rc   r2  r2    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} dfd}|                                 D ])\  }} ||          rJ d| d	 ||                       *|                                 D ])\  }} ||          rJ d
| d	 ||                       *d S )Nr   )FakeTensorConfigrM   r'  r   rj   r   c                N    j         rdd l}d |j        | 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'  r=  r:  s     rc   stack_or_hintz7assert_no_fake_params_or_buffers.<locals>.stack_or_hint  s?    ! 	d`9N9Nq~9^9^```ccrb   zUnexpected fake buffer r   zUnexpected fake param )r'  r   rj   r   )torch._subclasses.fake_tensorr:  rM   named_buffersnamed_parameters)rA  rM   r@  ro   bufferrG  r:  s         @rc    assert_no_fake_params_or_buffersrE    s   GGGGGGGGd d d d d d ((** 
 
f76?? 	
 	
DdDD]]6-B-BDD	
 	
 	
 	
 **,, 
 
e75>> 	
 	
BTBBMM%,@,@BB	
 	
 	
 	

 
rb   c                $    | j          d| j         S )z9
    Returns the fully qualified name of the object.
    r9  )r]   r^   r  s    rc   fqnrG    s     n11s/111rb   count1count2c                6    t           j        j        j        r| S |S rx   )r+  r  rI   assume_static_by_default)rH  rI  s     rc   ifdynstaticdefaultrL    s    }4 rb   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  r9  N)r  r  listdirr  r  r   r   __file__r2  	importlibimport_moduler\   )rZ  r  s     rc   import_submodulerT    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rb   c                :    t          t          |                     S rx   )class_has_getattributer  r  s    rc   object_has_getattributerW    s    !$u++...rb   c                F    t                               | d          }|||<   d S )Nr  )r   __getattribute__)r  ro   r   r   s       rc    object_setattr_ignore_descriptorrZ    s$    Z00AAdGGGrb   c                    	 t          t          j        | d          t          j                  rdS n# t
          $ r Y nw xY wdS )NrY  TF)r   r)  r*  r4  r5  r%  rz   s    rc   rV  rV    sc    "3(:;;
 
 	 4		
    5s   -2 
??ignore_nn_module_getattrr  c                    	 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  r%  r+  rT  r  r^  )r   r\  
getattr_fns      rc   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 )TensorStaticReasonrZ   r  r   N)r\   r]   r^   	PARAMETER
NOT_TENSORNN_MODULE_PROPERTYrK   rb   rc   rb  rb    s         IJrb   rb  rY  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 )rb  rc  rd  re  r1  )rY  s    rc   tensor_static_reason_to_messagerg    sX    #---OO#...CC#666EE
3633
4
44rb   r~  Union[torch.Tensor, Any]r  tensor_sourcer"   )tuple[bool, Optional[TensorStaticReason]]c                T   ddl m} |j                                        s|j                                        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.
    r2   ))is_from_unspecialized_param_buffer_sourceTr  )r  rl  r  r  r  rI   &force_nn_module_property_static_shapesrb  re  r  r+  rT  rU  force_parameter_static_shapesrc  rd  )r~  r  ri  rl  s       rc   tensor_always_has_static_shapero  $  s      BAAAAA 	";;==;%HHJJ; 
7; '::: 	V***44]CC 	+

. 	+ '111 3'222;rb   r#  c                2     d fd}t          |          S )Nrj   r   c                     	 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   )r   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 rK   )r  ro   r  r  r  )r   r  s     rc   r`  z<lazy_format_graph_tabular.<locals>.inner.<locals>.<listcomp>P  s:     
 
 
;<QT1618QVQX6
 
 
rb   )opcodero   r  r  r  r   )
r   r   r   r+   graphr  r*   forward__code__r  )r   
node_specs	graph_strr#  rA  s      rc   innerz(lazy_format_graph_tabular.<locals>.innerG  s    	))))))) 	 	 	~,Wb99::;  	
 
@B
 
 

 H N N N
 
 
	 "'2:+>+JIVVVs   
 *77rj   r   rF   )r#  rA  ry  s   `` rc   lazy_format_graph_tabularr{  F  s>    W W W W W W W" erb   line_noc                l    |  d| d| d| dt          j        |                                            d
S )Nr   z line z 
r   )disBytecode)rR  ro   r  r|  r  s        rc   format_bytecoder  [  sI     VVtVVhVVgVV#,t:L:L:P:P:R:RVVVVrb   _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          t          j        j        j        j                  p't          t          j        j        j        j                            S rx   )r   r{  r+  rT  modulesr/  _global_backward_hooks_global_backward_pre_hooksrK   rb   rc   nn_module_has_global_hooksr  l  sH     EH#:;; 	Cux&ABB  rb   torch.nn.Modulecheck_forward_hookscheck_backward_hookscheck_state_dict_hooksc                @   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   )rZ  r  r  r  hook_dicts_to_checkcheck_all_hooks	all_hookshook_dict_namehooks	hook_namer   s              rc   nn_module_get_all_hooksr  u  s      	'$$	'&& 
  7o 7""#5666 8 8""#6777 :""#8999I- # #^R00 	# 	#I#DT""""	# rb   c                F    t          | |||          }t          |          S )zL
    Helper function to check if a module has any hooks attached to it.
    )r  r  r  )r  r   )rZ  r  r  r  r  s        rc   nnmodule_has_hooksr    s2     $/15	  E ;;rb   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 rx   )to_numpy_helperr   r  s     rc   r   z"to_numpy_helper.<locals>.<genexpr>  *      AAC?3//AAAAAArb   )rM   r   tnprP  r  r~  r+  rS  numpyr  rf  r  r  s    rc   r  r    s    u~~ %%% u|,,,	E5<	(	( {{{&&&	EE4=	)	) tE{{AA5AAAAAArb   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 rx   )numpy_to_tensorr  s     rc   r   z"numpy_to_tensor.<locals>.<genexpr>  r  rb   )
r  r   rP  r+  r  r  r~  r  rf  r  r  s    rc   r  r    s    >>>%$$ &u%%%%%% |	EE4=	)	) tE{{AA5AAAAAArb   c                  &    e Zd ZddZddZddZdS )numpy_to_tensor_wrapperr  Callable[_P, R]rj   rk   c                <    || _         d| j         j        z   | _        d S Nwrapped_r  r\   )rq  r  s     rc   rr  z numpy_to_tensor_wrapper.__init__  s    "TV_4rb   r   c                "    d| j         j         dS )Nz<Wrapped function <original >>r  ru  s    rc   __repr__z numpy_to_tensor_wrapper.__repr__  s    AdfoAAAArb   r  r  r  r  r   c                :     | j         |i |}t          |          S rx   )r  r  rq  r  r  r   s       rc   r  z numpy_to_tensor_wrapper.__call__  s&    dfd%f%%s###rb   N)r  r  rj   rk   rz  r  r  r  r  rj   r   )r\   r]   r^   rr  r  r  rK   rb   rc   r  r    sT        5 5 5 5B B B B$ $ $ $ $ $rb   r  c                   t          | t          j                  rt          | |          }t	          |          S t          | t
          j                  r1t          t          j        |           |          }t	          |          S d S rx   )r   r  rP  r+  r  r+  rS  )r  ro   r   s      rc   numpy_attr_wrapperr    sx    #s{## $c4  s###	C	&	& $ck#&&--s###$ $rb   c                  *    e Zd ZdZddZddZddZdS )numpy_method_wrapperzgConvert obj from torch.Tensor to tnp.ndarray and call method. Then convert result back to torch.Tensor.r  r   rj   rk   c                2    || _         d| j         z   | _        d S r  )r  r\   )rq  r  s     rc   rr  znumpy_method_wrapper.__init__  s    "T[0rb   c                    d| j          dS )Nz<Wrapped method <original r  )r  ru  s    rc   r  znumpy_method_wrapper.__repr__  s    ;DK;;;;rb   r  r   r  c                    |d         }t          |t          j                  rt          j        |          }t          || j                  } ||dd          i |}t          |          S rx  )r   r+  rS  r  rP  r+  r  r  )rq  r  r  r  method_callabler   s         rc   r  znumpy_method_wrapper.__call__  si    1gc5<(( 	#+c""C!#t{33otABBx2622s###rb   N)r  r   rj   rk   rz  )r  r   r  r   rj   r   r\   r]   r^   r   rr  r  r  rK   rb   rc   r  r    sV        qq1 1 1 1< < < <$ $ $ $ $ $rb   r  c                  *    e Zd ZdZddZddZddZdS )numpy_operator_wrapperzQImplements dunder methods for tnp.ndarray via functions from the operator libraryr  ra  rj   rk   c                2    || _         d|j         | _        d S r  )r  r\   )rq  r  s     rc   rr  znumpy_operator_wrapper.__init__  s    02;00rb   r   c                    d| j          dS )Nz<Wrapped operator <original r  )r\   ru  s    rc   r  znumpy_operator_wrapper.__repr__  s    ?dm????rb   r  r  r  r  r   c                T    |rJ d |D             } | j         | }t          |          S )Nc              3  v   K   | ]4}t          |t          j                  rt          j        |          n|V  5d S rx   )r   r+  rS  r  rP  rk  s     rc   r   z2numpy_operator_wrapper.__call__.<locals>.<genexpr>  sS       
 
KN
3 = =FCK3
 
 
 
 
 
rb   )r  r  r  s       rc   r  znumpy_operator_wrapper.__call__  sI    
 
RV
 
 
 dgtns###rb   N)r  ra  rj   rk   rz  r  r  rK   rb   rc   r  r    sZ        [[1 1 1 1@ @ @ @$ $ $ $ $ $rb   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)r  r  r  )r   rL   _has_symbolic_sizes_stridesr  r+  r}  r   r~  r  	size_hintexprr  empty_stridedr  r  r  zero_)r\  r  r  r  r  s        rc   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Hrb   r  r  r  c                     | |i |S rx   rK   )rF  r  r  s      rc   8_disable_side_effect_safety_checks_for_current_subtracerr  !  s     2tvrb   c                0    dd l }| |j        j        j        u S r   )torch.utils.checkpointrG  
checkpoint)r  r+  s     rc   is_utils_checkpointr  '  s!    !!!!%+(333rb   c                    ddl m} | |u S )Nr   )invoke_subgraph_placeholder)'torch._higher_order_ops.invoke_subgraphr  )r  r  s     rc   is_invoke_subgraphr  .  s     SSSSSS---rb   optionsc                 H    ddl m}  |j        t          j        j        fi | S )Nr2    TorchHigherOrderOperatorVariable)variables.higher_order_opsr  maker+  _higher_order_opsinvoke_subgraph)r  r  s     rc   build_invoke_subgraph_variabler  4  sB    LLLLLL0+0/ 
  rb   c                     dd l mc m} ddlm} |j        }t          j        j        j	        r|j
        } |j        |fi | S )Nr   r2   r  )torch._higher_order_ops.wrapr  wrapr  r  tag_activation_checkpointr+  
_functorchrI   functionalize_rng_opswrap_activation_checkpointr  )r  higher_order_opsr  activation_checkpoint_ops       rc   build_checkpoint_variabler  =  s    ;;;;;;;;;LLLLLL
 	2  4 O#3#N 0+0  
  rb   device_typerC   c                    ddl m} t          j        |           j        } |            }|dk    rn|dv r|rt                      }nd}|S )Nr2   )is_dynamo_supportedr  )rO  xpumtiaF)
eval_framer  r+  r  r  r/   )r  r  r  compile_supporteds       rc   is_compile_supportedr  P  sl    //////<$$)D++--u}}	(	(	(->	(&LL!rb   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-8Nr=  )errors)encoder{  decode)r   r  as_utf8s      rc   _fix_offsetr  b  s?     jj!!Gwww&&wy&AABBBrb   c                  8    e Zd ZU ded<   ded<   ded<   ded<   dS )_Anchorsri   left_end_linenoleft_end_offsetright_start_linenoright_start_offsetNr9  rK   rb   rc   r  r  n  sD          rb   r  segmentOptional[_Anchors]c                z   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          dfd}dfddfd}dfd}|j        d         }t          ||j	                  r|j
        }t          ||j                  rt          t          |j        j                  dz
  }|j        j        J  |||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        J  |||j
        j                  } ||          \  }}|         |         dk    r! |||          \  }}|         |         dk    !t          t          |j                  dz
  }|j        J  |||j                  }t%          ||||          S t          ||j                  rt          t          |j        j                  dz
  }|j        j        J  |||j        j                  } ||          \  }}|         |         dk    r! |||          \  }}|         |         dk    !t          t          |j                  dz
  }|j        J  |||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
    )r[      r   Nz(
z
)r2   r   linenori   r  rj   c                0    t          |          |          S rx   )r  )r  r  liness     rc   	normalizez-_extract_anchors_from_expr.<locals>.normalize  s    5=&111rb   coltuple[int, int]c                &   | t                    k     rL|t          |                    k    r3d}| dz  } | t                    k     r|t          |                    k    3| t                    k     r|t          |                    k     sJ | |fS rx  r{  )r  r  r  s     rc   next_valid_charz3_extract_anchors_from_expr.<locals>.next_valid_char  s    s5zz!!cSv-?-?&?&?CaKF s5zz!!cSv-?-?&?&? E

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

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

""sSv-?-?'?'?'?'?s{rb   rZ   z)\#z\#r3  r5  )r  ri   r  ri   rj   ri   )r  ri   r  ri   rj   r	  )r  r  astparseSyntaxErrorr{  bodyr  r   Exprr   BinOpr   ri   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                  @@rc   _extract_anchors_from_exprr&  x  s    w&&&&JJJ yy5011   tt 49~~tMM$E2 2 2 2 2 2
                  	!I)SX&& CLdCI&& A	L c49#7881<J9+777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:,888 ydj.GHHH$3OK$J$J!K$X.#55(1	+x(H(H%X $X.#55  T_559L&222!	,0CDDIK<KKKch'' 	L
 sDI$899A=K9+777 ydi.FGGH$3OK$J$J!K$X.#55(1	+x(H(H%X $X.#55  T_559L&222!	,0CDDIK<KKK4s   6 
AAtypes.CodeTypeinstdis.Instructionc                Z    t           j        dk    rft          j         j        |j        j         j        |j        j        |j        j	        |j        j
                  }t          j        |g          d         }d                    |                                dd                   } fdt          |j        j        |j        j        dz             D             }t          j        d                    |                                                    }t#          |d                   t#          |d                   z
  }|d         d|         }t          j        t          j        |          |          }|S |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}	 t3          |          }n# t4          $ 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 in < 3.13 since `format_frame_summary` in
    Python's `traceback` module doesn't handle multi-line expressions
    (and their anchor extraction code is not completely correct).
    )r[      )r  colno	end_colnor   r   r2   Nc                h    g | ].}t          j        j        |                                          /S rK   )	linecachegetliner  rstrip)r   r  r  s     rc   r`  z.get_instruction_source_311.<locals>.<listcomp>  sE     
 
 
 d.77>>@@
 
 
rb   r  r   ~c                :    g | ]}|                     d d          S )r2  ^)r=  r   markers     rc   r`  z.get_instruction_source_311.<locals>.<listcomp>Q  s&    BBB6>>#s++BBBrb   c                ,    g | ]}t          |          S rK   r  r5  s     rc   r`  z.get_instruction_source_311.<locals>.<listcomp>T  s    +O+O+OVDLL+O+O+Orb   r4  c                8    g | ]}d                      |          S )r  rB  r5  s     rc   r`  z.get_instruction_source_311.<locals>.<listcomp>n  s"    AAAv2776??AAArb   )r  r  r=  FrameSummaryr  	positionsr  r  r  
col_offsetr  r>  r   
splitlinesr  textwrapdedentr{  indentr/  r0  r1  r  r   lstripr&  r1  r  r  r  r  )r  r(  frame_summaryr  
orig_linesorig_lines_dedent
indent_lenr?  
first_linestart_offset
end_offsetr   markers	last_liner  line
num_spacesanchorsmutable_markersr  r  s   `                    rc   get_instruction_source_311rN    s    7""!.N!L~0.+n3
 
 
 &77:6,,..qrr233
 
 
 
 5t~7PST7TUU
 
 

 %ODIIj,A,ABBMMOOA''#.?.B*C*CC
A{
{+!8!8&AA>%%%~$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   P) )
P65P6c                \    t          | t          j                  rt          | dd           S d S )N_dynamo_static_input_type)r   r+  rS  r+  r  s    rc   get_static_address_typerQ  z  s.    !U\"" =q5t<<<4rb   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 rx   )	r+  r  r6   	get_statedefault_generatorr  rO  	set_stater  )r   getterssetterss      rc   is_rng_state_getter_or_setterrX    ss     	$)
 G 	$)
 	G (g(((((rb   c                    t          | t          j                  o'| j        dk    o| j        j        t          j        j        u S )N__get__)	r   r4  r   r\   __self____objclass__r+  r  _TensorBaser  s    rc   is_tensor_base_attr_getterr^    s?    5%122 	@Ni'	@N'58+??rb   c                    	 t          j        t          j        |           }t	          |          t
          j        u S # t          $ r Y dS w xY wr  )r)  r*  r+  rS  r  r4  rC  r%  )ro   attrs     rc   is_tensor_getset_descriptorra    sQ    %elD99DzzU777   uus   9< 
A
	A
c                "    t          | d          S )N__torch_function__)r3  r  s    rc   is_torch_function_objectrd    s    5.///rb   c                r   ddl m} ddlm} |                                 s2t          | d          rt          |                                 d          rdd }t          | |          rt          | j	        dd           }n&t          | |          rt          | j
        dd           }|d t          j        j        fvS dS )Nr   )UserDefinedObjectVariable)TensorWithTFOverrideVariable
peek_valuerc  F)r  rf  &torch._dynamo.variables.torch_functionrg  r  r3  rh  r   r+  
class_typer   r+  r  _disabled_torch_function_impl)r   rf  rg  r  s       rc   has_torch_functionrl    s     BAAAAASSSSSS 
~~ 
JL!!
J&-bmmoo?S&T&T
J b677 	A2=*>EEDD566 	A28%94@@DD%("HIII5rb   c                    d }d }t           j        j                                        x}r| |j        v r|j        |          }|j        }|                    | d||          S )NF)static_shapessymbolic_contextr  )r+  r/  r#   try_gettensor_to_contextri  from_tensor)r'  r  ro  r  tracing_contexts        rc   to_fake_tensorrt    sx     F-6>>@@@ 4111.@C%3F  	1A& !   rb   c                    t          |            oOt          |            o?t          |           o0t          | d          o t          | j        d          o| j        j        S )N__dataclass_params__frozen)rW  rV  r   r3  rv  rw  r  s    rc   is_frozen_dataclassrx    st    #E*** 	.&u---	.	. E122	. E.99		.
 &-rb   attrsc                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: )r3  r+  r1  )r  ry  r`  s      rc   get_first_attrr{    s^      & &3 	&3%%%%%	& CMMeMM
N
NNrb   should_enable	fullgraphdynamicc              #     K   | sd V  d S dfd}t           j        j                            |          5 }|V  d d d            d S # 1 swxY w Y   d S )NrA  r   rj   c                <    dd}t          j        | |          S )Ngm_r   example_inputs_rj   c                    t           j        j        j        d         dxx         dz  cc<   t           j                            | |          S )Ncompiled_autogradcompilesr2   )r+  r  rG  rR   r0  compile)r  r  s     rc   inner_compilerzKmaybe_enable_compiled_autograd.<locals>.compiler_fn.<locals>.inner_compiler  sE    #,-@A*MMMQRRMMM..sODDDrb   )backendr}  r~  )r  r   r  r   rj   r   )r+  r  )rA  r  r~  r}  s     rc   compiler_fnz3maybe_enable_compiled_autograd.<locals>.compiler_fn  s?    E E E E =Ni   rb   )rA  r   rj   r   )r+  r  r  _enable)r|  r}  r~  r  r!  s    ``  rc   maybe_enable_compiled_autogradr    s        	 	 	 	 	 	 	 ],44[AA 	SIII	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A

AAr1   c                 V     G d dt                     } t           |                       S )Nc                      e Zd ZdS )*invalid_removeable_handle.<locals>.InvalidN)r\   r]   r^   rK   rb   rc   Invalidr    s        rb   r  )r  r1   )r  s    rc   invalid_removeable_handler    sB        $    7799%%%rb   c                    t          | t          j        j                  s| S t          | t          j        j                  r| S | j                            | j                  }| j        |_        |S rx   )	r   r+  rT  r  r   r  r  r)  r  )rZ  proxys     rc   nn_module_proxyr    s^    c58?++ 
#ux+,, 
M!!#-00E\ENLrb   c                  (     e Zd Zd fdZdd
Z xZS )	GmWrapperrA  rB  unflatten_fnCallable[[list[Any]], Any]rj   rk   c                d    t                                                       || _        || _        d S rx   )r  rr  rA  r  )rq  rA  r  r  s      rc   rr  zGmWrapper.__init__  s0     	(rb   r  r   c                Z    t          |          } | j        |                     |           S rx   )rf  rA  r  r  s     rc   ru  zGmWrapper.forward  s*    t**tw))$//00rb   )rA  rB  r  r  rj   rk   r  r   rj   r   )r\   r]   r^   rr  ru  r  r  s   @rc   r  r    sQ        ) ) ) ) ) )1 1 1 1 1 1 1 1rb   r  inputs
compile_gmCallable[[Any, Any], Any]c                  	
 d t          | j        j                  D             
t          j        j        j        ri
dgk    sJ t          |d         t                    sJ t          |d                   dd	dfd} |t          | |           	|                    n]t          j        |          \  }}t          j        t          j        |	          } |t          | |          |          t          j        	d	
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  r  r|   )r   r  r~  s      rc   r`  z(flatten_graph_inputs.<locals>.<listcomp>,  sH       At7m##	k5(I(I# 	
###rb   r   r  r   rj   c                B    | d         t          | dd                    z   S rx  r  r^  s    rc   
flatten_fnz(flatten_graph_inputs.<locals>.flatten_fn9  s    7T$qrr(^^++rb   	flat_argsc                0    | d          g| d          R S rx   rK   )r  boxed_inputs_counts    rc   r  z*flatten_graph_inputs.<locals>.unflatten_fn<  s,    1112TY?Q?R?R5STTTrb   )treespecc                 n     |           }D ]}| |                                            |          S rx   )ry   )r  r  r  compiled_fnr  inputs_idx_to_clears      rc   wrapperz%flatten_graph_inputs.<locals>.wrapperH  sH    Jt$$	 % 	 	AGMMOOOO {9%%%rb   r  )r  r   rj   r   )	enumeratert  r  r+  r  r  in_compiled_autograd_regionr   rf  r{  r  r  tree_flattenr&  r  tree_unflattenarg_tree_leaves)rA  r  r  r  flat_inputsspecr  r  r  r  r  s          @@@@rc   flatten_graph_inputsr  $  sd     00   }&B , #qc))))&)T***** ^^	, 	, 	, 	,	U 	U 	U 	U 	U 	U !j2|!<!<jj>P>PQQ #/77T ()>NNN j2|!<!<kJJ+
& & & & & & & & Nrb   maybe_gmc                    t          | t          j        j                  rt	          | d          sg S | j                            dg           S )Nr  locals_to_steal)r   r+  r   r  r3  r  r|   )r  s    rc   get_locals_to_stealr  U  sH    h 455 WXv=V=V 	=.333rb   r  c                    || j         d<   d S )Nr  r  )rA  r  s     rc   set_locals_to_stealr  [  s    !0BGrb   c                      e Zd ZddZd	dZdS )
Litr  r   rj   rk   c                    || _         d S rx   r  )rq  r  s     rc   rr  zLit.__init__`  s    rb   c                    | j         S rx   r  ru  s    rc   r  zLit.__repr__c  s	    vrb   N)r  r   rj   rk   rz  )r\   r]   r^   rr  r  rK   rb   rc   r  r  _  s<                rb   r  zset[str]warn_once_cache
stacklevelc                    | t           v rd S t                               |            t          j        | |dz              d S )Nr2   )r  )r  r~  warningswarn)r  r  s     rc   	warn_oncer  j  sG     oM#*q.111111rb   textc                V    t          j        d          }|                    d|           S )Nz\x1B[@-_][0-?]*[ -/]*[@-~]r  )r  r  r  )r  ansi_escapes     rc   strip_color_from_stringr  v  s&    *:;;K??2t$$$rb   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    rc   +_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 rx   )r+  r0  rI   freezingis_grad_enabledrK   rb   rc   is_parameter_freezingr    s!    ?!*J53H3J3J/JJrb   c                 L    d t          t                                D             S )Nc                ,    g | ]}t          |          S rK   ) get_torch_function_mode_stack_atrd  s     rc   r`  z1get_torch_function_mode_stack.<locals>.<listcomp>  s.       01(++  rb   )r  r   rK   rb   rc   get_torch_function_mode_stackr    s2     5:;T;V;V5W5W   rb   indc                t    | t                      k     r| dk    sJ t          j                            |           S r   )r   r+  r  _get_function_stack_at)r  s    rc   r  r    s6    *,,,,8**3///rb   r@  c                    t          t                                D ]}t                       | D ]}t          |           d S rx   )r  r   r   r   )r@  r  modes      rc   set_torch_function_mode_stackr    sY    ,..// $ $!#### , ,%d++++, ,rb   c                 ^    t          t                                D ]} t                       d S rx   )r  r   r   )r  s    rc   clear_torch_function_mode_stackr    s9    ,..// $ $!####$ $rb   r  torch.devicetorch.Streamc                @    t           j                            |           S rx   )r+  acceleratorcurrent_stream)r  s    rc   get_current_streamr    s    ++F333rb   c                 "    t                       d S rx   )
breakpointr^  s    rc   _breakpoint_for_c_dynamor    s    LLLLLrb   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 )NrZ   r2   )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{  rL  r  r  r[  r  )r   rF  sigr  s       rc   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
 
 	
 &%rb   user_clsc                    | j         t          j         t          j         fv o\| j        t          j        t          j        fv o=| j        t          j        t          j        fv o| j        t          j        t          j        fv S rx   )r   r  r   rS  rg  __iter__)r  s    rc   #does_not_override_dict_iter_methodsr    sl    4:{'899 	GO[-?@@	GMdi)9::	G $-1E!FF	rb   r  c                ,    |                      |          S rx   )r  r\  r  s     rc   	call_sizer    s    66!99rb   c                ,    |                      |          S rx   )r  r  s     rc   call_strider    s    88A;;rb   c                *    |                                  S rx   )storage_offsetr[  s    rc   call_storage_offsetr    s    rb   c                ,     ddg} fd|D             }|S )NrP  tagc                b    i | ]+}|j         v |t          j        j         |                   ,S rK   )r  r  )r   r   r'  s     rc   rn  z(_extract_tensor_dict.<locals>.<dictcomp>  s>       ,/3!*CTCTTYqz#''CTCTCTrb   rK   )r'  KEYS_TO_COPYtensor_dicts   `  rc   _extract_tensor_dictr    s@    #L
   3?  K rb   
tuple[Any]c                .    t          j        j        | i |S rx   )r+  r  Streamr  s     rc   build_streamr    s    8?D+F+++rb   torch.Eventc                .    t          j        j        | i |S rx   )r+  r  Eventr  s     rc   build_eventr    s    8>4*6***rb   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d                        ZdS )CompileTimeInstructionCounterr   ri   _counterr  _idrj   rk   c                n    | j         dz   | _         | j         dk    rt          j                    | _        d S d S r   )_depthr   r3  r	  rz   s    rc   r3  z#CompileTimeInstructionCounter.start  s5    Z!^
:??*022CGGG ?rb   c                    | j         dz
  | _         | j         dk    r0| xj        t          j        | j                  z  c_        d| _        d S d S )Nr2   r   r  )r  r  r   endr	  rz   s    rc   r  z!CompileTimeInstructionCounter.end  sJ    Z!^
:??LL04SW===LLCGGG ?rb   c                    d| _         d S r   r  rz   s    rc   ry   z#CompileTimeInstructionCounter.clear   s    rb   c                    | j         S rx   r  rz   s    rc   r   z#CompileTimeInstructionCounter.value  s
    |rb   r  c              #     K   	 t           j        r|                                  d V  t           j        r|                                  d S d S # t           j        r|                                  w w xY wrx   )rI   %record_compile_time_instruction_countr3  r  rz   s    rc   r  z$CompileTimeInstructionCounter.record  st      	; 		EEE; 					 v; 				s   $A #A/Nr   r   rj   r  )r\   r]   r^   r  r   r	  r  r   r3  r  ry   r   r   r  rK   rb   rc   r  r    s         HCMMMMF3 3 3 [3
    [    [    [    ^ [  rb   r  c                        e Zd Zd fdZ xZS )CompileCounterIntotherr   rj   c                `    t          t                                          |                    S rx   )r  r  __add__)rq  r  r  s     rc   r  zCompileCounterInt.__add__  s!     !7!7888rb   )r  r   rj   r  )r\   r]   r^   r  r  r  s   @rc   r  r    s=        9 9 9 9 9 9 9 9 9 9rb   r  featureusagec                    t                                                      r%t                                          d| |           dS dS )zQ
    Records whether we are using a feature
    Generally a feature is a JK.
    r  N)r   r   set_key_value)r  r  s     rc   set_feature_user    sO     ((** M++OWeLLLLLM Mrb   )ddp_optimizerpython_reducer'python_reducer_without_compiled_forwardno_optimization_ddp_optimization_modec                     t           j        } t          | t                    r| rdnd}n7t          | t                    r| }nt          dt          |                     |t          v sJ d|            |S )Nr  r!  z;Invalid dynamo config optimize_ddp type type(optimize_ddp)=z.Invalid dynamo config optimize_ddp value mode=)rI   optimize_ddpr   r   r   r  r  r"  )r$  r  s     rc   get_optimize_ddp_moder%  +  s    &L,%% 
".E4E	L#	&	& 
LtL7I7ILL
 
 	
 ))));D;; *)) Krb   c               #    K   t           j        ot          j                    } | r^t          j        d          5  t          j                    5  dV  ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS dV  dS )ar  
    Disables torch.inference_mode for the compilation (still on at runtime).
    This simplifies the compile stack where we can assume that inference_mode
    will always be off.

    Since inference_mode is equivalent to no_grad + some optimizations (version
    counts etc), we turn on no_grad here. The other optimizations are not
    relevant to torch.compile.
    FN)rI   "fake_tensor_disable_inference_moder+  is_inference_mode_enabledinference_moder  )is_inference_mode_ons    rc   maybe_disable_inference_moder+  <  s      	1We6U6W6W    ''	 	MOO	 	 EEE		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s5   A5AA5A!	!A5$A!	%A55A9<A9c               #     K   t           j        rBt          j        j                                        5  dV  ddd           dS # 1 swxY w Y   dS dV  dS )z
    Turns off tracking of inference_mode for fake tensor propagation. With this
    context manager, when a real tensor is converted to fake tensor, the fake
    tensor looses its inference-ness.
    N)rI   r'  r+  rW  
meta_utils$disable_inference_mode_for_fake_proprK   rb   rc   *maybe_disable_inference_mode_for_fake_propr/  T  s       0 )NNPP 	 	EEE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAc                .    | d u pd| j         v pd| j         v S )Nr  r`  r  )r~  s    rc   is_node_meta_validr1  b  s$    4<M?di7M5DI;MMrb   c                     t           S rx   _error_on_graph_breakrK   rb   rc   _get_error_on_graph_breakr5  j  s      rb   c                
    | a d S rx   r3  r  s    rc   _set_error_on_graph_breakr7  n  s    !rb   AbstractContextManager[None]c                     t           j        j        j        r$t           j        j                            d          nt          j                    } | 	                                 | S )NzPregraph bytecode)
r+  autogradr,  _is_profiler_enabledr  	_profiler_RecordFunctionFastr5  nullcontext	__enter__cms    rc   record_pregraph_bytecode_enterrB  s  sR     >"7	&../BCCC#%% 
 LLNNNIrb   rA  c                4    |                      d d d            d S rx   )__exit__r@  s    rc   record_pregraph_bytecode_exitrE  ~  s    KKdD!!!!!rb   Optional[list[CodeType]]c                 ,    ddl m}   | j                    S )Nr   r#   )torch._guardsr#   get_traced_coderH  s    rc   rJ  rJ    s%    ,,,,,,)>)+++rb   c                    ddl m} ddlm} t	          |           j                            dd          }|r0 |ddt	          |            d| d	| d
dg|j                   d S d S )Nr2   r  ro  __hash__Fz,User-defined object with overridden __hash__zhashing object of type=z and variable tracker zFound a user-defined object z4 with overridden __hash__ when attempting to hash itzMDynamo does not support hashing user-defined objects with overridden __hash__r  )r  r  r  rp  r  r  r|   SUPPORTABLE)r  r   r  rp  is_overriddens        rc   raise_on_overridden_hashrO    s    ######""""""II&**:u==M 	
BSd3iiSSrSSorooo_".		
 	
 	
 	
 	
 	
	
 	
rb   )r   r   r   r   rj   r   r   )r   r   rj   rk   )rj   r   )r   ri   rj   rk   )rj   rV   )rj   r   )rj   r    )NFNNNNFN)r   r   r  r  r   r   r   r  r  r  r  r  r  r  r  r   r   r  rj   r!  r  )rH  rI  rJ  r   rj   r   )rH  rN  rJ  r   rj   rO  )r   F)rH  r   rJ  r   rj   rQ  )rj   r  )r  r  r  r
   rj   r   )r  r   r  r>   rj   rk   )r  r  rj   ri   )r\  rO   rj   rO   )r\  r   rj   r   )r  r   r  r   rj   rk   )r  r   r  r  rj   r  )r  r   r  r  rj   r  )r  r   r  r  rj   r   )r  r   r  r   rj   r   )r   r   rj   r   )r   r  rj   r  )r   r   rj   r"  )r   r   rj   r,  )r   r   rj   r2  )r   r   rj   rA  )rF  r   rj   r   )rF  r   rj   rJ  )r   r   rj   rN  )r  r   rj   r   )rZ  r   rj   r   r  rx   )r`  r   rj   ra  )r  r   r  r   rj   rf  )re  r~  rj   r   )r  r  rj   rk   r  )r6  ri   r7  ri   r9  rS   r8  r9  r:  r;  rj   rk   )rV  ri   rj   rk   )rj   r^  )rj   rb  )rj   r   )FF)r   r   r  r   r   r   rj   r!  r  )r\  r  r  r  rj   r  )r  r  rj   r  )r  r  rj   r  )r  r   rj   r   )r`  r  rj   rk   r  )r
  r   rj   r  )r  r   r  r   rz  r   rj   r   )r  r   rj   r  )rp   r   rj   r   )rp   r  rj   r1  )rA  rB  rj   rC  )r2   )r  r   r  rO  rP  ri   rj   rQ  )rA  rB  r  rO  rj   r   )r  ri   rj   ra  )re  r   rj   r   )rj   rv  )r   r   rj   rz  )r   r   r  r   rj   r   )rl  r   rj   r   )r  rO  r  r  rj   r   )r   r  rj   r  )r  r  rj   r  )rp   r   rj   r   )r  r  rj   ri   )r  r   r8  ri   rj   r   )r  r   rj   r  )r'  r   rp   r  rj   r   )r   r  r  ri   rj   r   )r  r  r  ri   rj   rO   )r   r   ro  r   rj   r   )r~  r  r  r   rj   rk   )r   rB   rj   r   )r  r;  r  ri   rj   ri   )r  r  )
r  r@   ro   r   r  r   r  r   rj   rk   )
r   rO  r  r   r  r?   r  r   rj   r   )r_  r   rj   r$  )r   r   rj   r'  )r\  r   ro  r   rj   r   )r?  r   ro  r   rj   r   )r  r@   rG  r   r  r   rj   r   )r  rO   rL  rM  rj   r   )rR  r   rL  r   rQ  r   rj   r   )rF  rW  rj   r   )r  r   r  r[  rj   r   )r  r  r  r  rj   r  )r  r   r  r   rf  r   rj   r   )r  r   r  r   rl  r   rm  r   rh  rn  rf  r   ro  r   rp  r   rq  r   rr  rs  rt  r   ru  r   rj   r   )r  r
   rj   r   )r  r   rj   r   rz  )T)r~  r  r  r   rj   r   )r|  r   r  r@   rj   r   )r  r@   r  r   r  r   rj   r   )r  r   r  r  rj   r   )r~  r  r  r@   r  r   rj   r   )rj   r"  )r~  r  rj   r  )r)  r   r~  r  r  r   r  r   r  r   rj   r   )r~  r  r)  r   rj   r   )rA  rB  rj   rk   )r  r   rj   r   )rH  r   rI  r   rj   r   )rZ  rM  rj   rk   )r  r   ro   r   r   r   rj   rk   )rp   r  rj   r   )r   r   r\  r   rj   r  )rY  rb  rj   r   )r~  rh  r  r   ri  r"   rj   rj  )r#  r   rA  rB  rj   r   )rR  r   ro   r   r  r   r|  ri   r  r   rj   r   )FFF)
rZ  r  r  r   r  r   r  r   rj   r'  )
rZ  r  r  r   r  r   r  r   rj   r   )r   r   rj   r   )r  r   ro   r   rj   r   )r\  r   rj   r   )rF  r  r  r  r  r  rj   rP   )r  r   rj   r   )r  rC   rj   r   )r   r   r  ri   rj   ri   )r   r   rj   r  )r  r'  r(  r)  rj   r   )r'  r   rj   r   )ro   r   rj   r   )r   rB   rj   r   )r'  r  r  r[  rj   r   )r  r   ry  r   rj   r   )TT)r|  r   r}  r   r~  r   rj   r!  )rj   r1   )rZ  r   rj   r   )rA  rB  r  r   r  r  rj   ra  )r  r   rj   r'  )rA  rB  r  r'  rj   rk   )r  r   r  ri   rj   rk   )r  r   rj   r   )rj   r'  )r  ri   rj   r   )r@  r'  rj   rk   )r  r  rj   r  )r   r   rj   rk   )r  r   rj   r   )r\  r   r  ri   rj   ri   )r\  r   rj   ri   )r'  r  rj   rS   )r  r  r  r  rj   r  )r  r  r  r  rj   r  )r  r   r  r   rj   rk   )r~  r"  rj   r   )r   r   rj   rk   )rj   r8  )rA  r8  rj   rk   )rj   rF  )r  r   r   rB   rj   rk   (  r   
__future__r   atexitr   r5  r  rD  r  r~  rq  r&  rT  rR  r)  r   r  r/  r  r  r  r  r  r  r=  rn  r   r=  r4  r	  rq  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.fx.experimental.symbolic_shapestorch.utils._pytreerG  _pytreer  r   torch._Cr   r   r   r   torch._dispatch.pythonr   torch._dynamo.metrics_contextr   r    rI  r!   r"   r#   torch._subclasses.meta_utilsr$   torch._utils_internalr%   r&   r'   r(   r)   torch.fx._utilsr*   r+   torch.monitorr,   torch.nn.modules.lazyr-   torch.utils._python_dispatchr.   torch.utils._tritonr/   r0   torch.utils.hooksr1   graph_utilsr3   r  collections.abcr4   r5   r6   r7   r8   r9   r:   r;   r<   r=   torch._dynamo.replay_recordr>   torch._dynamo.symbolic_convertr?   r@   torch._dynamo.variables.baserB   torch._prims_commonrC   torch._subclassesrD   r  r  rJ  torch._loggingtorch._numpy_numpyr  rE   rG   r  rI   fftlinalgr  rJ   r   NP_TO_TNP_MODULErA  rL   rM   rN   r   rO   rP   rQ   rT  r  r^  unpatched_nn_module_getattrr  unpatched_nn_module_call
_call_implunpatched_nn_module_call_implr   rR   rT   troubleshooting_urlnnmodule_doc_urlnnmodule_doc_url_msgr  r\   r   rU   rn  rW   rr   timer_counterrr  rY   re   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ro  r4  rG  rM  registerrj  FloatTensorr  DoubleTensorr  double
HalfTensorr  halfBFloat16Tensorr  
ByteTensorr  
CharTensorr  
LongTensorr  long	IntTensorr  ri   ShortTensorr  short
BoolTensorr   tensortype_to_dtyperl  r  r  r  r  VERBOSEr  	Formatterr  r  r  r  r  r  r  r  r  r  r  r  ParamSpecArgsParamSpecKwargsTypeVarTupleTypeAliasTyper  r  r  r  r!  r5  r6  r7  r8  r+  r1  r(  r  neltlegtgecmp_name_to_op_mappingcmp_name_to_op_str_mappingrE  rI  rH  rQ  rY  r\  r_  re  r}  r  r  r  r<  r  !DEFAULT_COMPILATION_METRICS_LIMITrY  r  r  r   r'  r5  rT  r   r   r[  r]  r`  rb  r  r   r
  r  r  r  r  r  r  r  r  r	  r  r  r  r!  r   r@  rN  rZ  r`  rl  r  r   rh   r  Ellipsisr  NotImplementedr  r  memory_formatr  finfoiinfo	attention
SDPBackendrO  _CudaDevicePropertiesrm  rP  r~  languagerp  r6  ry  r  r  r  r  r  r  r  r  rg  r  rS  r  r   r  r  iterr  r  r  __length_hint__tuple_iterator_lenr   r)  r  r  dict_newr   r  dict_methodsrt  set_methodsro  frozenset_methodsr  	tuple_newtuple_methodsrf  list_methodsr  list_getitemstr_methodsr  r  r  r  r  r  r  r  r  	iter_nextr  r  dict_getitemr  r  r  r  r  r  r  r  r#  r&  r*  r1  rD  GLOBAL_KEY_PREFIXrF  rK  rP  rV  rZ  r`  re  rk  r  rj  r  r  orig_code_mapr  r  seen_code_mapr  r  r  r  r  r  r  r$  r%  r(  r  r2  rE  rG  rL  rT  rW  rZ  rV  r`  rb  rg  ro  r{  r  r  r  r  all_hook_namesr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r&  rN  rQ  rX  r^  ra  rd  rl  rt  rx  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  _disable_dynamor  r  r  r  r  r  r  r  r  r"  r%  r+  r/  r1  r4  r5  r7  rB  rE  rJ  rO  rK   rb   rc   <module>r     sO$     # " " " " "                



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



                , , , , , , , , = = = = = = = = $ $ $ $ $ $       - - - - - - - -                          0 / / / / / / /      , , , , $ $ $ $ $ $ $ $ $                  < ; ; ; ; ; O O O O O O O O ; ; ; ; ; ; ; ; ; ; = = = = = =              G F F F F F F F & & & & & & 1 1 1 1 1 1 F F F F F F > > > > > > > > - - - - - - ' ' ' ' ' ' 
 1                        <;;;;;        =<<<<<222222000000   	BBB	......)))))) 
 FII	>
 	
 	
 	
 	
 FCGIszIsz	
  "VVVVVVVVVVV 	 	 	D	 GCLLGCLLYt__#ho9  8?3  % : 7N{7N8 8     %'  & & & &P  Q V.VVV g!! 46  5 5 5 5
 .E[-DU-K-K  K K K K	!!    ty   %J %J %J %J %J %J %J %JP
 
 
 
 
           ?C  B B B B* * * *$ $ $ $$ $ $ $    
 
 
 
$   > !       / / / /   $ $ $ $    49   S# S# S# S# S# S# S# S#l $IO%%   !%"',0.2&*"&!/3OQ OQ OQ OQ OQd 
 L L L L 
 L 
 -2) ) ) ) 
) */$ $ $ $ $N 8 8 8 8
 
u{3	5	u}ej1	5>+	u{n	uzm	u{EJ/	Oek59-	U[1	uzm        ( #:"9";"; " " " ", , , ,
 !bj J	 	 0 0 0 0 0* 0 0 0   	 	 	 	? ? ? ?
G G G G         	 	 	 	       B 
 A A A 
 A 
   

 
 C C C 
 C& & & & w 	%! w!fl_4!   $   &    
5 5 5 
5
 
7 7 7 
7
    				!
           kkkkkk        83 3 3 3   % % % %$ $ $ $, , , , T       
 
 
 
$0 0 0 05 5 5 5   z" z" z" z" z" z" z" z"z %' ! ?Pk>O,? ? ?     
- - - -` 3  3  3  3F3 3 3 30- - - -`O3 O3 O3 O3f ">*DEEE 009STTT % % % %! ! ! !
& & & &s s s s s s s sl	 59  8 8 8 8   * * * *
  %*"'' ' ' ' '@ ( ( ( ( ( ( ( ((         +       ).**     8<M M M M M M` 
   

 
 = = = 
 =   &     9 9 9 9"   ,    $   ( ( ( (
   < Q1 1 1 12   0 =>    &X X X X 2    		DJJ	N	L	K		L	K	K	H!	J$'$     ,  5MMMfo3444   $          >   2   W W W W
 
 
 

 
 
 
    "&bggii	 0 0 0 0%)T"))++%6%6 6 6 6 6(,RXXZZ(8(8
 8 8 8 8&*d;;==+?+?+A+A&B&B B B B B&*d4488nn 4 4 4 4&*d44a>>&:&: : : : :#3 ^
< !)/$-"6"6"8"8+:N:U:U:W:WXX  
 ONCL$7$7$9$9NNN "+2244    M	RRen&;&;&=&=RRRPPT]%9%9%;%;PPPNNCL$7$7$9$9NNNGCLLGCLL   
G 
G 
G 
G   1 1 1 1   
: : : : 	        @ @ @ @   
   8 8 8 8(   M M M M 	    4 #(	& & & & &RM M M M9 9 9 9   B       
 !  = < < < < <7 7 7 7    <A( ( ( ( ( ($
 
 
 
"? ? ? ?; ; ; ;      !&%(Y5:!&mF mF mF mF mF`	H H H H
 = = = =  '&(( ;R+:QRV:W:W W W W W LN  M M M M '&(( , , , ,& & & &
    $   
/ / / /.       L "'I I I I IX  	!!1 1 1 1 " " " "L L L L^$ $ $ $N
 
 
 
*2 2 2 2   G G G G/ / / /   	 	 	 	 27
 
 
 
 
       5 5 5 5   D   *W W W W +,<= ,.?@     $&99<QQ    !&!&#(	    F !&!&#(	    $   
 
 
 

$ 
$ 
$ 
$ 
$gb!en 
$ 
$ 
$$ $ $ $$ $ $ $ $ $ $ $&$ $ $ $ $WRU^ $ $ $*   @   4 4 4 4. . . .      &   $	C 	C 	C 	C        { { { {|A A A AH   ) ) ) )"      0 0 0 0   <       O O O O AE    (& & & &   1 1 1 1 1 1 1 1. . . .b4 4 4 41 1 1 1         CEE ! ! ! !	2 	2 	2 	2 	2% % % % C C C CK K K K   0 0 0 0
, , , ,$ $ $ $
4 4 4 4
   
 
 
 
"               
 
 
 
, , , ,+ + + +# # # # # # # #L9 9 9 9 9 9 9 9
M M M M+        "    . 
 
 
 
N N N N
  ! ! ! !" " " "
     " " " ", , , ,
 
 
 
 
 
s%   	F FFA/H HH