+
    &j?                   ,  a 0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI t ^ RI!t!^ RIH"t"H#t# ^ RIH$t$H%t% ^ RIH&t& ^ RIH't' ^ RIH(t(H)t) ^ RIH*t*H+t+H,t,H-t-H.t.H/t/H0t0H1t1H2t2H3t3 ^ R	I4H5t5H6t6 ^ RI7t7^ RI8t7^ RI9t7^ RI:H;u H<t= ^ R
I7H>t> ^ RI?H@t@HAtAHBtBHCtC ^ RIDHEtE ^ RIFHGtGHHtH ^ RIIHJtJHKtKHLtL ^ RIMHNtN ^ RIOHPtPHQtQHRtRHStSHTtT ^ RIUHVtVHWtW ^ RIXHYtY ^ RIZH[t[ ^ RI\H]t] ^ RI^H_t_ ^ RI`HataHbtb ^ RIcHdtd ^RIeHftf ]P                  '       d?   ^ RIhHitiHjtjHktkHltlHmtmHntnHotoHptpHqtqHrtr ^ RIsHttt ^ RIuHvtv ^ RIwHxtxHyty ^ RIzH{t{ ^ RI|H}t} ^ RI~Ht  ^ RIt ^ RIt7^ RIHt ^ R IIHt ^ R!IHt ^R"IHt ]'       dz   ]]EP                  ]EP                  ]EP                  3tR#]R$&   ]]]EP                  ]EP                  ]EP                  ]EP                  ]EP                  ]EP                  /tMERTt/ t^ R%IHtHtHt ]3! R&4      t]3! R'4      t]3! R(4      t]3! R)4      t]3! R*4      t]3! R+4      t]3! R,4      t]3! R-4      t]3! R.4      t]3! R/4      t]3! R04      t]3! R14      t]5! R24      t]7EPF                  EPH                  EPJ                  t]7EPF                  EPH                  EPN                  t]7EPF                  EPH                  EPR                  t]EPV                  ! ]PD                  4      tR3]R4&   / tR5]R6&   R7tR8tR9] R:2t]EPb                  ! ]4      t/ tR;]R<&   ]EPV                  ! ]4      tR=]R>&   ]EPn                  ! 4       t ! R? R@]EPr                  4      t ! RA RB4      tRC RD lt^ sRE RF ltRG RH ltRsRI]RJ&   RK RL ltRM RN ltRO RP lt^ sRQ RR ltRS RT ltRU RV lt]EP                  ! 4       tRW RX ltRY RZ lt ! R[ R\]EPr                  4      t ! R] R^4      t]EP                  ! 4       t]%R_ R` l4       t]%ERURb Rc ll4       t]0ERVRd Re ll4       t]0ERVRf Rg ll4       tERWRh Ri llt]EP                  Rj Rk l4       t]7EP                  ]7EP                  ]7EPj                  3]7EP                  ]7EP                  ]7EP                  3]7EP                  ]7EP                  ]7EP                  3]7EP                  ]7EP                  3]7EP                  ]7EP                  3]7EP                  ]7EP                  3]7EP                  ]7EP                  ]7EP                  3]7EP                  ]7EP                  ]7EP                  3]7EP                  ]7EP                  ]7EP                  3]7EP                  ]7EP                  3/
t ! Rl Rm4      t]! 4       tRn Ro ltRp Rq lt]EP                  ! Rr]EP                  4      t ! Rs Rt]EP                  4      tRu Rv ltRw Rx ltRy Rz ltR{ R| ltR} R~ ltR R ltR R ltR R lt ! R R4      t]0R R l4       Et ]0R R l4       Et ]0R R l4       Et ]0R R l4       Et ]0R R l4       Et ]0R R l4       Et ]0R R l4       Et ]0R R l4       Et ]0R R l4       Et ]0R R l4       Et ]0R R l4       Et ]0R R l4       Et R R lEt E]! 4       EtR]R&   ]EP                  ERX8  dJ   ]EP                  ]EP
                  ]Pj                  ]Pf                  ]EP                  ]EP                  3EtR R lEt]EP                  ERY8  d   E]]EP                  3,          EtR R lEt
R R lEtR R lEt]0R R l4       Et]0R R l4       EtR R lEt]EP                  ]EP                  ,          ]EP                   ,          ]EP"                  ,          EtR]R&   R R lEtR R lEtR]EP*                  R]EP,                  R]EP.                  R]EP0                  R]EP2                  R]EP4                  /EtRRRRRRRRRRRR/EtR R lEtR R lEtR R lEtR R lEt R R lEt!R R lEt"]PN                  ! R4      R R l4       Et#ERZR R llEt$R R lEt%R R lEt&R R lEt'^Et(]EPR                   ! R R4      4       Et*^@Et+]EPX                  ! E]+R7      Es-R]R&   R R lEt.R R lEt/R R lEt0R R lEt1R R lEt2R R lEt3R R lEt4R R lEt5 ! R R4      Et6REs7R]R&   R R lEt8R R lEt9]%ER[R R ll4       Et:]EPR                   ! R R4      4       Et; ! R R]4      Et<E]<! 4       E]<En=        R R lEt>R ER  lEt?ER ER lEt@ERR/ER ER llEtA]0ER ER l4       EtB]0ER ER	 l4       EtBER
 ER lEtBER ER lEtC]%ER ER l4       EtDER ER lEtEERVER ER llEtFER ER lEtGER ER lEtHER ER lEtI]PN                  ! ^4      ER ER l4       EtJER ER lEtKER\ER ER llEtLER  ER! lEtM]'! ^ 4      ER" ER# l4       EtN]]E]O]E]PE]QE]R! R4      E]SEP                  E]UEP                  ]PP                  ]7EP                  ]7EP                  ]7EP                  ]7EP                  ]7EP                  ]7EP                  ]7EPF                  EP                  EP                  ]7EP                  EP                  ]7Pv                  Px                  EP                  ]7Pv                  Px                  EP                  ]7Pv                  Px                  EP                  0EtcER$]ER%&   ]b! 4       '       d1   ^ REIdEtdE]cEP                  E]dEP                  EP                  4        ER& ER' lEtg]EP                  ER( ER) l4       EtiER* ER+ lEtjER, ER- lEtkER. ER/ lEtlER0 ER1 lEtmER2 ER3 lEtnER4 ER5 lEtoER6 ER7 lEtpER8 ER9 lEtqE]R! / EP                  4       4      EtsER:]ER;&   E]R! / EP                  4       4      EtuER<]ER=&   E]R! / EP                  4       4      EtwER>]ER?&   E]R! ]#! 4       EP                  4       4      EtxER<]ER@&   E]R! E]y! ERT4      4      EtzERA]ERB&   E]R! E]y! E]{! ^ 4      4      4      Et|ERA]ERC&   E]zEP                  Et~E]EP                   EtE]EP                   Et]EP                  ! E]EP
                  EP                  4       ]#EP
                  EP                  4       4       U u0 uF  p E]! V 4      '       g   K  V kK  	  up EtE]EP
                  EP                  4        U u0 uF  p E]! V 4      '       g   K  V kK  	  up EtE]EP
                  EP                  4        U u0 uF  p E]! V 4      '       g   K  V kK  	  up EtE]EP                   EtE]EP
                  EP                  4        U u0 uF  p E]! V 4      '       g   K  V kK  	  up EtE]EP
                  EP                  4        U u0 uF  p E]! V 4      '       g   K  V kK  	  up EtE]EP                   EtE]PEP
                  EP                  4        U u0 uF  p E]! V 4      '       g   K  V kK  	  up EtE]R! ]EPr                  4      EP
                  EP                  4        U u0 uF  p E]! V 4      '       g   K  V kK  	  up Et]3! ERD4      Et]3! ERE4      EtERF ERG lEtERH ERI lEtERJ ERK lEtERL ERM lEtERN ERO lEtERP ERQ lEtERR ERS lEtE]EtERT ERU lEtERV ERW lEtERX ERY lEtE]EP                   Et]7P|                  EPF                  ERZ ER[ l4       EtER\ ER] lEtER^ ER_ lEtER` ERa lEtERb ERc lEtERd ERe lEtER]ERf ERg llEtERVERh ERi llEtERj ERk lEtERl ERm lEtERn ERo lEtERp ERq lEtERrEt^ ERsI~EHEt ERt ERu lEtERv ERw lEtERxRa/ERy ERz llEtER{ ER| lEtER} ER~ lEtER ER lEtERVER ER llEtRRaERRaERRaRa]EPr                  RaRaRaER3ER ER llEtER ER lEt]PJ                  ER ER l4       Et]! 4       Et]EPV                  ! E]4      EtER]ER&   . EtER]ER&   ]! 4       Et]EP                  ER ER l4       EtER ER lEtER^ER ER llEtER ER lEtER ER lEtER ER lEtER ER lEtERVER ER llEtERVER ER llEt]EP                  ! 4       EtER ER lEt]%ER ER l4       EtER ER lEtER ER lEtER ER lEtER ER lEtER ER lEtER ER lEtER ER lEtER ER lEtER ER lEtERVER ER llEt ! ER ER]EPr                  4      EtER ER lEtER ER lEtER ER lEtER ER lEt. ER_OEtERER.Et. ER`OEtE]E],           E],           EtER ER lEtERaER ER llEtERaER ER llEtER ER lEtER ER lEt ! ER ER]-]]3,          4      EtER ER lEt ! ER ER4      Et ! ER ER]-]]3,          4      EtER ER lEtER ER lEtER ER lEtER ER lEtER ER lEtER ER lEtER ER lEtER ER lEt]EPR                   ! ER ER4      4       EtER ER lEtER ER lEtER ER lEtER ER lEtER ER lEtER ER lEtER ER lEtER ER lEtER ER lEtER ER lEtER ER lEt]PJ                  ERbER  ER ll4       EtER ER lEtER ER lEt ! ER ER]7EPF                  EPH                  4      Et ER ER	 lEtER
 ER lEtER ER lEt ! ER ER4      EtE]! 4       EtER]ER&   ER\ER ER llEtER ER lEt]PJ                  ER ER l4       EtER ER lEt	ER ER lEt
ER ER lEtER ER lEtER  ER! lEtER" ER# lEtER$ ER% lEtER& ER' lEtER( ER) lEt]7EP$                  ER* ER+ l4       Et]7EP$                  ER, ER- l4       Et]7EP$                  ER. ER/ l4       EtER0 ER1 lEtER2 ER3 lEtER4 ER5 lEt ! ER6 ER74      Et ! ER8 ER9]4      EtER: ER; lEtERcEtER<]ER=&   ER> ER? lEt]%ER@ ERA l4       Et]%ERB ERC l4       EtERD ERE lEt RaEs!ERF ERG lEt"ERH ERI lEt#]7EP$                  ERJ ERK l4       Et$]7EP$                  ERL ERM l4       Et%ERN ERO lEt&ERP ERQ lEt'ERR ERS lEt(R#   ] d    Rt ELzi ; i  ] d     ELi ; iu up i u up i u up i u up i u up i u up i u up i (d  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NoReturnoverload	TypeAlias	TypeGuardTypeVar)	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)
OrderedSet)is_traceable_wrapper_subclass)
has_tritonhas_triton_package)RemovableHandle)_get_flat_args)
Callable	Container	Generator	ItemsViewIterableIteratorKeysViewMappingSequence
ValuesView)Instruction)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T1T2T3T4T5T6T7T8T9T10R_Pz*collections.defaultdict[str, Counter[str]]countersdict[str, Any]optimus_scuba_logzihttps://docs.pytorch.org/docs/main/user_guide/torch_compiler/compile/programming_model.recompilation.htmlzZhttps://docs.pytorch.org/docs/main/user_guide/torch_compiler/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                  "    ] tR t^t^t^t^tRtR# )ReInplaceTrigger N)__name__
__module____qualname____firstlineno__AUTO_FUNC_V1AUTO_FUNC_V2
TRITON_OPS__static_attributes__rb       k/Users/jameslopez/projects/CWCArchive/cwc-podcast/.venv/lib/python3.14/site-packages/torch/_dynamo/utils.pyra   ra      s    LLJrk   ra   c                      ] tR t^t$ ]P
                  ! ]4      tR]R&   ]	R R l4       t
]	R R l4       t]	R R l4       t]	R	 R
 l4       t]	R R l4       t]	R R l4       tRtR# )ReinplaceCountersz!collections.defaultdict[str, int]_valuesc               $    V ^8  d   QhRRRRRR/# )   triggerra   bytesintreturnNonerb   )formats   "rl   __annotate__ReinplaceCounters.__annotate__   s'     A A'7 A A Ark   c                	p    V^ 8w  d/   V P                   RVP                   2;;,          V,          uu&   R# R# )    missed_bytes_Nro   name)clsrr   rs   s   &&&rl   add_missed_bytes"ReinplaceCounters.add_missed_bytes   s-    A:KK-~675@7 rk   c               $    V ^8  d   QhRRRRRR/# )rq   rr   ra   countrt   ru   rv   rb   )rw   s   "rl   rx   ry      s(     C C/? C CPT Crk   c                	p    V^ 8w  d/   V P                   RVP                   2;;,          V,          uu&   R# R# )r{   missed_tensors_Nr}   )r   rr   r   s   &&&rl   add_missed_opportunities*ReinplaceCounters.add_missed_opportunities   s-    A:KK/',,89UB9 rk   c                   V ^8  d   QhRR/# rq   ru   rv   rb   )rw   s   "rl   rx   ry      s      d rk   c                	:    V P                   P                  4        R # N)ro   clearr   s   &rl   r   ReinplaceCounters.clear   s    rk   c                   V ^8  d   QhRR/# rq   ru   rt   rb   )rw   s   "rl   rx   ry      s       rk   c                	    ^ p\          F2  pWP                  P                  RVP                   2^ 4      ,          pK4  	  V# )r{   r   ra   ro   getr~   r   sumrr   s   &  rl   get_total_missed"ReinplaceCounters.get_total_missed   s8    'G;;??_W\\N#CQGGC (
rk   c                   V ^8  d   QhRR/# r   rb   )rw   s   "rl   rx   ry      s      s rk   c                	    ^ p\          F2  pWP                  P                  RVP                   2^ 4      ,          pK4  	  V# )r{   r|   r   r   s   &  rl   get_total_missed_bytes(ReinplaceCounters.get_total_missed_bytes   s8    'G;;??]7<<.#A1EEC (
rk   c                   V ^8  d   QhRR/# r   rb   )rw   s   "rl   rx   ry      s     J JD Jrk   c                	\    V P                   '       d   \        R RV P                   4       R# R# )inductorreinplace_countersN)ro   r'   r   s   &rl   logReinplaceCounters.log   s#     ;;;:';S[[I rk   rb   N)rc   rd   re   rf   collectionsdefaultdictrt   ro   __annotations__classmethodr   r   r   r   r   r   rj   rb   rk   rl   rn   rn      s    1<1H1H1MG.M A A
 C C       J Jrk   rn   c               $    V ^8  d   QhRRRRRR/# )rq   rowsz'list[tuple[str, Any]] | list[list[Any]]headersztuple[str, ...] | list[str]ru   strrb   )rw   s   "rl   rx   rx      s&     
 

1
(
 	
rk   c                     ^ RI pVP                  WR7      #   \         d2    RP                  R \        P                  ! T.T 4       4       4      u # i ; i)r{   Nr   
c              3  `   "   T F$  pR P                  \        \        V4      4      x  K&  	  R# 5i), N)joinmapr   ).0rows   & rl   	<genexpr>tabulate.<locals>.<genexpr>   s&      
0PDIIc#sm$$0Ps   ,.)tabulateImportErrorr   	itertoolschain)r   r   r   s   && rl   r   r      sX    
   77 
yy 
09	40P
 
 	

s    9AAc                   V ^8  d   QhRR/# r   rb   )rw   s   "rl   rx   rx   	  s          rk   c                      \         ^,           s R#    N)
curr_framerb   rk   rl   increment_framer   	  s    aJrk   c                   V ^8  d   QhRR/# r   rb   )rw   s   "rl   rx   rx     s      4 rk   c                 Z    \         P                  4        \        P                  4        ^ sR# r{   N)r_   r   r]   r   rb   rk   rl   reset_frame_countr     s    ""$""$Jrk   list[Callable[[], str]] | None_recompile_user_contextsc                    V ^8  d   QhRRRR/# )rq   hookzCallable[[], str]ru   rv   rb   )rw   s   "rl   rx   rx     s     * *3D * *rk   c                D    \         f   . s \         P                  V 4       R# )aR  
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   &rl   (register_hook_for_recompile_user_contextr     s      '#% ##D)rk   c                   V ^8  d   QhRR/# )rq   ru   r   rb   )rw   s   "rl   rx   rx   '  s     $ $-K $rk   c                     \         # r   r   rb   rk   rl   #get_hook_for_recompile_user_contextr   '  s    ##rk   c                   V ^8  d   QhRR/# r   rb   )rw   s   "rl   rx   rx   +  s     $ $t $rk   c                 
    Rs R# )z@Clear any registered recompile user-context hooks (test helper).Nr   rb   rk   rl   reset_recompile_user_contextsr   +  s
      $rk   c                    V ^8  d   QhRRRR/# )rq   cntrt   ru   rv   rb   )rw   s   "rl   rx   rx   4  s      C D rk   c                     \         V ,          s R # r   )op_count)r   s   &rl   increment_op_countr   4  s    OHrk   c                   V ^8  d   QhRR/# )rq   ru   r^   rb   )rw   s   "rl   rx   rx   ;  s      . rk   c                     / p \         P                  4        F  w  rVR ,          W&   K  	  V P                  R^ 4      V P                  R^ 4      ,           V R&   V # )    eAentire_frame_compileentire_backward_compiletotal_wall_time)r_   itemsr   )total_by_keyphasetimings      rl   calculate_time_spentr   ;  sc    L1779$sl : '3&6&6'2A6'7L"# rk   c                   V ^8  d   QhRR/# r   rb   )rw   s   "rl   rx   rx   K  s      4 rk   c            	         \        4       p R pV P                  4        F  w  r#V RV R\        V^4       2pK  	  \        V4       R# )zTIMING: :N)r   r   roundprint)r   outkeyvalues       rl   print_time_reportr   K  sJ    ')L
C"((*
Qse1U5!_-. + 
#Jrk   c                   V ^8  d   QhRR/# )rq   ru   r   rb   )rw   s   "rl   rx   rx   m  s     0 0^ 0rk   c                     \        \        R 4      '       g   \        \        R7      \        n        \        P                  # )metrics_contexton_exit)hasattr_metrics_context_tlsr   record_compilation_metricsr   rb   rk   rl   get_metrics_contextr   m  s0    '):;;/=.0
,  ///rk   c                   V ^8  d   QhRR/# )rq   ru   r   rb   )rw   s   "rl   rx   rx   u  s     8 8%: 8rk   c                     \        \        R 4      '       g   \        \        R7      \        n        \        P                  # )runtime_metrics_contextr   )r   r   r   r   r   rb   rk   rl   get_runtime_metrics_contextr   u  s0    ')BCC7L.8
4  777rk   c                  &    ] tR tRtRt^t^t^tRtR# )CompileEventLogLeveli}  z
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
rb   N)	rc   rd   re   rf   __doc__CHROMIUMPT2_COMPILECOMPILATION_METRICrj   rb   rk   rl   r   r   }  s     HKrk   r   c                     ] tR tRtRt]R]P                  3R R ll4       t]R!R R ll4       t	]R!R R	 ll4       t
]R
 R l4       t]^]P                  3R R ll4       t]R R l4       t]]P                  3R R ll4       t]R R l4       t]R R l4       t]R R l4       t]R!R R ll4       t]R"R R ll4       t]R R l4       t]R R l4       tR tR# )#CompileEventLoggeri  a  
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)
Nc          
     ,    V ^8  d   QhRRRRRRRRR	R
/# )rq   
event_namer   metadatar[   time_ns
int | None	log_levelr   ru   rv   rb   )rw   s   "rl   rx   CompileEventLogger.__annotate__  s:     
 

 
 
 (	

 

rk   c                	    Vf   \         P                  ! 4       p\        4       pV\        P                  8X  d   RpM#V\        P
                  8X  d   RpM\        R4      hVP                  WW4       R # )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   &&&&  rl   r  $CompileEventLogger.log_instant_event  sk     ?llnG02,555$)!.:::$(!|  	&&	
rk   c          
     ,    V ^8  d   QhRRRRRRRRR	R
/# )rq   r  r   r  r   	overwriteboolr  objectru   rv   rb   )rw   s   "rl   rx   r    sA     +@ +@+@'+@ +@ 	+@
 
+@rk   c                4   \        4       pVP                  4       pV\        P                  8X  d   VP                  ! V 3/ VB  R# V\        P
                  8X  d8   VP                  4       pW9  d   \        RV 4      hVP                  ! V 3/ VB  R# V\        P                  8X  g   Q hVP                  4       pW8w  d   \        R4      h\        4       pVP                  4       '       g   \        R4      hVP                  W24       VP                  ! V 3/ VB  R# )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_eventr   s   &&&,    rl   add_dataCompileEventLogger.add_data  s    12+DDF,555''
?h?.:::#/#H#H#J 5"A 	  ''
?h? 4 G GGGG$88:I&"B  23O"..00"q 
 ""87''
?h?rk   c               (    V ^8  d   QhRRRRRRRR/# )	rq   r  r   r  r  r  r  ru   rv   rb   )rw   s   "rl   rx   r    s2     Q Q'Q48QNTQ	Qrk   c                    \        4       P                  4       pVf   \        R4      h\        P                  ! W0V3/ VB  R# )z3
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   &&, rl   add_toplevelCompileEventLogger.add_toplevel  sB     ./CCE	i  	##I)PxPrk   c          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
rq   r  r   r  r   r   r   rt   ru   rv   rb   )rw   s   "rl   rx   r    s4     ; ;;$8;?B;KN;	;rk   c                   \        4       pV\        P                  8X  g   V\        P                  8X  d   VP	                  WV4       R# V\        P
                  8X  g   Q hVP                  4       pW8w  d   \        R4      h\        4       pVP                  4       '       g   \        R4      hVP	                  W#4       VP	                  WV4       R# )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   &&&&   rl   r$  CompileEventLogger.increment  s     12-6660<<<"":E: 4 G GGGG$88:I&"} 
 23O"..00"~  %%c1"":E:rk   c               (    V ^8  d   QhRRRRRRRR/# )	rq   r   r   r   rt   r  r   ru   rv   rb   )rw   s   "rl   rx   r    s6     G GGG (G 
	Grk   c                    \        4       pVP                  4       pVf   \        R4      h\        P	                  WBW4       R# )zH
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   &&&  rl   increment_toplevel%CompileEventLogger.increment_toplevel  sB     12 446	q  	$$Y3Frk   c          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
rq   r  r   r  r   r   r   r   ru   rv   rb   )rw   s   "rl   rx   r  '  s4     < <<$8<?B<KN<	<rk   c                   \        4       pV\        P                  8X  g   V\        P                  8X  d   VP	                  WV4       R# V\        P
                  8X  g   Q hVP                  4       pW8w  d   \        R4      h\        4       pVP                  4       '       g   \        R4      hVP	                  W#4       VP	                  WV4       R# )z\
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   &&&&   rl   r/  CompileEventLogger.add_to_set&  s     12-6660<<<##JU; 4 G GGGG$88:I&"| 
 23O"..00"~  &&s2##JU;rk   c               (    V ^8  d   QhRRRRRRRR/# )	rq   r   r   r   r   r  r   ru   rv   rb   )rw   s   "rl   rx   r  F  s6     H HHH (H 
	Hrk   c                    \        4       pVP                  4       pVf   \        R4      h\        P	                  WBW4       R# )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   &&&  rl   add_to_set_toplevel&CompileEventLogger.add_to_set_toplevelE  sB     12 446	q  	%%iCGrk   c               $    V ^8  d   QhRRRRRR/# rq   r  r   r  r  ru   rv   rb   )rw   s   "rl   rx   r  Z  s!     
 
S 
f 
 
rk   c                V    \         P                  ! V \        P                  3RR/VB  R# )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   &,rl   chromiumCompileEventLogger.chromiumY  s.     	##,55	
AF	
JR	
rk   c               $    V ^8  d   QhRRRRRR/# r6  rb   )rw   s   "rl   rx   r  d  s!     

 

 

 

D 

rk   c                V    \         P                  ! V \        P                  3RR/VB  R# )aS  
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   r8  s   &,rl   pt2_compileCompileEventLogger.pt2_compilec  s.     	##,88	
DI	
MU	
rk   c               $    V ^8  d   QhRRRRRR/# r6  rb   )rw   s   "rl   rx   r  q  s!      S f  rk   c                f   \         P                  P                  P                  '       ds   V'       di   RP	                  R VP                  4        4       4      p\         P                  P                  P                  V  RV 24      ;_uu_ 4         RRR4       R# R# R#   + '       g   i     R# ; i)a  
Add record function data to the profiler event.

This emits profiler event data so compilation events show up in stack profilers
like the PyTorch profiler.

Args:
    event_name: Name of the event to record
    **metadata: Additional metadata to attach to the record function
r   c              3  4   "   T F  w  rV R V 2x  K  	  R# 5i)=Nrb   )r   kvs   &  rl   r   >CompileEventLogger.add_record_function_data.<locals>.<genexpr>}  s     $M<LDAs!A3Z<L   z_data: N)torchautogradprofiler_is_profiler_enabledr   r   record_function)r  r  metadata_strs   &, rl   add_record_function_data+CompileEventLogger.add_record_function_datap  s     >>""777H99$MHNN<L$MML((88,gl^4    =E7  s   BB0	c               $    V ^8  d   QhRRRRRR/# )rq   r  r  r  r  ru   rv   rb   )rw   s   "rl   rx   r    s!     	
 	
d 	
 	
4 	
rk   c                R    \         P                  ! \        P                  V 3/ VB  R# )a  
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   &,rl   compilation_metric%CompileEventLogger.compilation_metric  s%     	'' 33Y	
BJ	
rk   c               (    V ^8  d   QhRRRRRRRR/# )	rq   r  r   r  r[   r  r  ru   rv   rb   )rw   s   "rl   rx   r    s,     	
 	
	
#1	
<F	
		
rk   c                P    \         P                  WV\        P                  4       R# )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   &&&rl   instantCompileEventLogger.instant  s      	,,'+?+H+H	
rk   c               $    V ^8  d   QhRRRRRR/# r6  rb   )rw   s   "rl   rx   r    s&     	@ 	@ 	@ 	@D 	@rk   c                d    \        4       '       g   R# \        4       pVP                  ! V 3/ VB  R# )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   &, rl   try_add_pt2_compile&CompileEventLogger.try_add_pt2_compile  s+     )**02''
?h?rk   c               (    V ^8  d   QhRRRRRRRR/# )	rq   	method_fnzCallable[_P, Any]args_P.argskwargs	_P.kwargsru   rv   rb   )rw   s   "rl   rx   r    s*     	# 	#) 	#' 	#Y 	#SW 	#rk   c                ~    \        4       '       g   R# \        4       pVP                  4       '       g   R# V ! V/ VB  R# )zz
Special function that quietly runs a given method, returning if CHROMIUM_EVENT_LOG is None or metrics context is not set
N)rY  r   r  )r^  r_  ra  r   s   &*, rl   try_CompileEventLogger.try_  s7    
 )**-/**,,4"6"rk   rb   Fr   )rc   rd   re   rf   r   staticmethodr   r   r  r  r  r$  r   r+  r/  r3  r9  r=  rM  rQ  rU  r[  rd  rj   rb   rk   rl   r   r     sQ   0  #*>*G*G	
 
* +@ +@Z Q Q ; ;<  *>*Q*QG G  < <<  +?*Q*QH H& 
 
 

 

  $ 	
 	
 	
 	
 	@ 	@ 	# 	#rk   r   c                    V ^8  d   QhRRRR/# )rq   r~   r   ru   Generator[Any, None, None]rb   )rw   s   "rl   rx   rx     s      s /I rk   c              #  @  "   \         P                  P                  P                  '       dT   \         P                  P
                  P                  V 4      pVP                  4         Rx  VP                  RRR4       R# Rx  R#   TP                  RRR4       i ; i5i)a  
A context manager for compile-time profiling that uses _RecordFunctionFast
for lower overhead than torch.profiler.record_function.

This is intended for use during compilation (dynamo, inductor, etc.) where
we want profiling support but with minimal overhead. Moreover, we do not
want the record_function call inside torch.compile to be dispatched.

Args:
    name: The name of the record function event that will appear in profiles.
N)	rG  rH  rI  rJ  _C	_profiler_RecordFunctionFast	__enter____exit__)r~   rfs   & rl   compile_time_record_functionrq    sn      ~~333XX33D9
	*KKdD) KKdD)s   A$B'B +BBBFc               @    V ^8  d   QhRRRRRRRRR	RR
RRRRRRRRR/
# )rq   r   r   
phase_name
str | Noner  r  r  zdict[str, object] | Nonedynamo_compile_column_us
compile_idCompileId | Noneis_backwardbool | Nonelog_waitcounterwaitcounter_name_overrideru   ri  rb   )rw   s   "rl   rx   rx     s     MQ MQ	MQ MQ  	MQ
 'MQ )MQ !MQ MQ MQ  *MQ  MQrk   c	           
   #  	  "   V'       d   Tp	T p
MT p	Rp
V \         9  d
   . \         V &   \         V ,          p/ pV'       d   VP                  V4       V
'       d   VP                  RV
/4       Ve   VP                  RV/4       \        4       p\        P                  ! 4       pVP                  WWV4       \        V  R24      .pV'       d8   V'       d   TMT pVP                  \        RV 24      P                  4       4       \        P                  P                  P                  4       RJpV'       d   VP                  R4      '       g   Q h\        \         R4      '       g   ^ \         n        \         ;P"                  ^,          un        \         P"                  ^8X  d[   VP                  \        R4      P                  4       4       V'       g+   R	pVP                  \        V4      P                  4       4        \$        P&                  ! 4       ;_uu_ 4       pV F  pVP)                  V4       K  	  Rx  RRR4       \        P                  ! 4       pVV,
          pVP                  VR
,          4       VP+                  V	V/ WV4       V'       d   \,        V	;;,          V,          uu&   \         ;P"                  ^,          un        \         P"                  ^ 8H  pVR,          pV'       dS   \/        4       pVP1                  4       '       d1   VP3                  VV4       V'       d   VP3                  RV4       R# R# R# \5        4       pVP3                  VV4       V'       d#   RVRRRV'       * /pVP3                  RVV4       R# R# R#   + '       g   i     ELZ; i  \        P                  ! 4       pTT,
          pTP                  TR
,          4       TP+                  T	T/ YT4       T'       d   \,        T	;;,          T,          uu&   \         ;P"                  ^,          un        \         P"                  ^ 8H  pTR,          pT'       dP   \/        4       pTP1                  4       '       d/   TP3                  TT4       T'       d   TP3                  RT4       i i i \5        4       pTP3                  TT4       T'       d"   RTRRRT'       * /pTP3                  RTT4       i i i ; i5i)a8  
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_namerx  z (dynamo_timed)zpytorch.wait_counter._usdepthz#pytorch.wait_counter.dynamo_compilez.pytorch.wait_counter.compile_runtime_overheadsr     duration_usrv  
is_runtimeT
is_forward)r]   r  r	  r  r  log_event_startrq  r   r*   guardrG  _guardsCompileContextcurrent_compile_idendswithr   _dynamo_timed_tlsr  
contextlib	ExitStackenter_contextlog_event_endr_   r   r  r$  r   )r   rs  r  r  ru  rv  rx  rz  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   &&&&&&&&&                   rl   dynamo_timedr    s"    l 


**(* %&s+GNh'y'23}k:;(A(CL||~H  nZ ">_>U!V WG/H+c|&;G9$EFLLNOmm22EEGtSO'007777 ('22&'#1$ ""a'NN<(MNTTVW"M
|J7==?@(Q!!##u##B'  $
 )}s*+""HZ	
 $ %Z0MA0 ##q(#.449N'4/K"5"7"..00#--.FT%'11-M & 1
 #>"?))*BKP!$j$d$+oE
 $--m[%P "- $ $##
 )}s*+""HZ	
 $ %Z0MA0 ##q(#.449N'4/K"5"7"..00#--.FT%'11-M & 1
 #>"?))*BKP!$j$d$+oE
 $--m[%P "- $sq   <S#S#A:S#A S#4S#B/S#;N N7N ?B,S#,9S#&A"S#N		N B-S 
9S AS  S#c               $    V ^8  d   QhRRRRRR/# )rq   reprzLiteral['str']	aggregater  ru   r   rb   )rw   s   "rl   rx   rx   a  s     L L L4 LC Lrk   c                    R # r   rb   r  r  s   &&rl   compile_timesr  `  s    ILrk   c               $    V ^8  d   QhRRRRRR/# )rq   r  zLiteral['csv']r  r  ru   ztuple[list[str], list[object]]rb   )rw   s   "rl   rx   rx   f  s$     ) )
)%))#)rk   c                    R # r   rb   r  s   &&rl   r  r  d  s     &)rk   c               $    V ^8  d   QhRRRRRR/# )rq   r  r   r  r  ru   z(str | None | tuple[list[str], list[str]]rb   )rw   s   "rl   rx   rx   k  s$     $ $
$"&$-$rk   c           	     t  a \         3R V3R lllpV R8X  dC   \         Uu. uF  pW2! \        V,          R R7      3NK  	  ppRpV\        VRR7      ,          pV# V R8X  dM   \        P                  4        Uu. uF  pV! VR	 R7      NK  	  pp\	        \        P                  4       4      pW3# R
# u upi u upi )a  
Get metrics about torchdynamo frontend/backend compilation times.

Accumulates information from functions tagged with `dynamo_timed`.

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

aggregate causes values from multiple compilations (e.g. split graphs)
to be accumulated into one value.  If false, expect more than one value
per metric.
c               $    V ^8  d   QhRRRRRR/# )rq   valueszlist[float]item_fnzCallable[[float], str]ru   r   rb   )rw   s   "rl   rx   #compile_times.<locals>.__annotate__{  s"     / /{ /-C /c /rk   c                j   < S'       d   V! \        V 4      4      # R P                  \        W4      4      # )r   )r   r   r   )r  r  r  s   &&rl   fmt_fncompile_times.<locals>.fmt_fn{  s)    3v;''yyW-..rk   r   c                
    V R  # )z.4frb   xs   &rl   <lambda>compile_times.<locals>.<lambda>  s
    3jrk   )r  z!TorchDynamo compilation metrics:
r   csvc                
    V R  # )z.6frb   r  s   &rl   r  r    s
    1S'
rk   N)FunctionzRuntimes (s))r   r]   r   r  listkeys)	r  r  r  rC  r   r   rD  r  r   s	   &f       rl   r  r  k  s      GJ / /
 u} .
- /2<PQR- 	 
 3x&BCC
	 .446
6 1236 	 
 /4467

s    B08B5c                   V ^8  d   QhRR/# r   rb   )rw   s   "rl   rx   rx     s     8 8D 8rk   c                 F    \         P                  \        R RR7      4       R# )r   Tr  N)r   infor  rb   rk   rl   dump_compile_timesr    s    HH]67rk   c                  >    ] tR tRtR
R R lltR R ltR R ltRtR	# )DuplicateWarningCheckeri  c                    V ^8  d   QhRRRR/# )rq   maxsizert   ru   rv   rb   )rw   s   "rl   rx   $DuplicateWarningChecker.__annotate__  s       t rk   c                	2    Wn         V P                  4        R # r   )r  reset)selfr  s   &&rl   __init__ DuplicateWarningChecker.__init__  s    

rk   c                   V ^8  d   QhRR/# r   rb   )rw   s   "rl   rx   r    s     8 8t 8rk   c                	$    \        4       V n        R # r   )r   setr  s   &rl   r  DuplicateWarningChecker.reset  s    *5-rk   c                    V ^8  d   QhRRRR/# )rq   r   zstr | tuple[object, object]ru   r  rb   )rw   s   "rl   rx   r    s     	 	2 	t 	rk   c                	8   WP                   9   d9   V P                   P                  VR R7       \        P                  '       g   R#  R # RV P                   V&   \	        V P                   4      V P
                  8  d   V P                   P                  RR7       KB  R # )T)lastFN)r  move_to_endrH   verboselenr  popitemr  r   s   &&rl   addDuplicateWarningChecker.add  ss    ((?HH  4 0>>> "  !DHHSMdhh-$,,.  e ,rk   )r  r  N)   )rc   rd   re   rf   r  r  r  rj   rb   rk   rl   r  r    s    8	 	rk   r  c                   V ^8  d   QhRR/# rq   ru   zcontextlib.ExitStackrb   )rw   s   "rl   rx   rx     s     " "1 "rk   c                     \         P                  P                  R R4      R8H  p V '       d   \        4       # \        P
                  ! 4       # )TORCH_COMPILE_DEBUG01)osenvironr   add_file_handlerr  r  )compile_debugs    rl   setup_compile_debugr    s7    JJNN#8#>#EM!!!!rk   c                   V ^8  d   QhRR/# r   rb   )rw   s   "rl   rx   rx     s     , ,t ,rk   c                 .    \         P                  4        R # r   )graph_break_dup_warning_checkerr  rb   rk   rl   reset_graph_break_dup_checkerr    s    #))+rk   z
    \x1B            # ESC
    \[              # [
    [0-?]*          # Parameter bytes
    [ -/]*          # Intermediate bytes
    [@-~]           # Final byte
    c                  2   a  ] tR tRtRtR V 3R lltRtV ;t# )StripAnsiFormatteri  z0Logging formatter that strips ANSI escape codes.c                    V ^8  d   QhRRRR/# )rq   recordzlogging.LogRecordru   r   rb   )rw   s   "rl   rx   StripAnsiFormatter.__annotate__  s     0 0. 03 0rk   c                	N   < \         SV `  V4      p\        P                  R V4      # ) )superrw   ANSI_ESCAPE_PATTERNsub)r  r  msg	__class__s   && rl   rw   StripAnsiFormatter.format  s$    gnV$"&&r3//rk   rb   )rc   rd   re   rf   r   rw   rj   __classcell__r  s   @rl   r  r    s    :0 0rk   r  c                   V ^8  d   QhRR/# r  rb   )rw   s   "rl   rx   rx     s      . rk   c                   aa \         P                  P                  \        4       R 4      p \         P                  ! V RR7       \
        P                  ! \         P                  P                  V R4      4      oSP                  \        R4      4       \
        P                  ! R4      oSP                  S4       \        P                  ! 4       pVP                  VV3R l4       V# )torchdynamoTexist_okz	debug.logz%(message)sztorch._dynamoc                 &   < SP                  S 4      # r   removeHandlerlog_file_handlerloggers   rl   r  "add_file_handler.<locals>.<lambda>  s    v334DErk   )r  pathr   get_debug_dirmakedirsloggingFileHandlersetFormatterr  	getLogger
addHandlerr  r  callback)log_path	exitstackr  r  s     @@rl   r  r    s    ww||MO];HKK4(**277<<++NO!!"4]"CD/F
&'$$&IEFrk   c                   V ^8  d   QhRR/# r  rb   )rw   s   "rl   rx   rx     s     	 	, 	rk   c                 P  aa \         P                  ! 4       p \        P                  e}   \        P
                  ! \        P                  4      o\        P                  P                  P                  4        F*  oSP                  S4       V P                  VV3R l4       K,  	  V # V # )Nc                 &   < SP                  S 4      # r   r  r  s   rl   r   setup_log_file.<locals>.<lambda>  s    v';';<L'Mrk   )r  r  rH   log_file_namer  r  rG  _logging	_internalget_loggersr  r	  )r  r  r  s    @@rl   setup_log_filer    s}    $$&I'"..v/C/CDnn..::<F./MN = rk   c               $    V ^8  d   QhRRRRRR/# )rq   exc	Exceptioncoder	   ru   r   rb   )rw   s   "rl   rx   rx     s!     ? ?i ?x ?C ?rk   c                |    \        4        R VP                   R\        V 4      P                   RVP                   R2# )z/error_recordings/_z.rec)r  co_nametyperc   co_firstlineno)r  r  s   &&rl   gen_record_file_namer    sB    o aS	""#1T%8%8$9? ?rk   c               $    V ^8  d   QhRRRRRR/# )rq   filenamer   exec_recordr=   ru   rv   rb   )rw   s   "rl   rx   rx     s&     G G3 G_ G Grk   c                    \         P                  P                  V 4      '       d   \        P	                  R V 4       R# \         P
                  ! \         P                  P                  V 4      RR7       \        V R4      ;_uu_ 4       pVP                  V4       RRR4       R#   + '       g   i     R# ; i  \         d    \        P                  RT 4        R# i ; i)z9Unable to write execution record %s; file already exists.Tr  wbNz#Unable to write execution record %s)r  r  existsr   warningr  dirnameopendumpr  	exception)r   r!  fs   && rl   write_record_to_filer+    s    
G77>>(##KKKX KK1DAh%%  # &%%% G;XFGs:   $B8 B8 A	B8 B$B8 $B5	/B8 5B8 8!CCc                    V ^8  d   QhRRRR/# )rq   gzfx.Graphru   rt   rb   )rw   s   "rl   rx   rx     s      8  rk   c                h    ^ pV P                    F  pRVP                  9   g   K  V^,          pK!  	  V# )r{   call)nodesop)r-  cns   &  rl   count_callsr4    s0    	AWWQTT>FA  Hrk   c                    V ^8  d   QhRRRR/# )rq   r  rM   ru   rb   )rw   s   "rl   rx   rx     s       a rk   c                    V # r   rb   r  s   &rl   identityr7    s    Hrk   c                    V ^8  d   QhRRRR/# )rq   r  r   ru   r  rb   )rw   s   "rl   rx   rx     s        rk   c                \     \        V 4       R #   \         d     R# \         d     R# i ; iTF)hash	TypeError
ValueErrorr  s   &rl   hashabler>    s.    Q  s    ++++c               $    V ^8  d   QhRRRRRR/# )rq   r_  r   ra  ru   rv   rb   )rw   s   "rl   rx   rx   "  s!     	 	3 	# 	$ 	rk   c                     R # r   rb   r_  ra  s   *,rl   nothingrB  "  s    rk   c                  r    ] tR tRtRtR R ltR R ltRR R	 lltR
 R ltR R lt	R R lt
R R ltRtR# )ExactWeakKeyDictionaryi&  z\Similar to weakref.WeakKeyDictionary, but use `is`/`id` rather than `==` to compare equalityc                   V ^8  d   QhRR/# r   rb   )rw   s   "rl   rx   #ExactWeakKeyDictionary.__annotate__)  s     > >$ >rk   c                	"    / V n         / V n        R # r   r  refsr  s   &rl   r  ExactWeakKeyDictionary.__init__)  s    &(;=	rk   c                    V ^8  d   QhRRRR/# )rq   r   r   ru   rb   )rw   s   "rl   rx   rF  -  s     $ $s $s $rk   c                	:    V P                   \        V4      ,          # r   )r  idr  s   &&rl   __getitem__"ExactWeakKeyDictionary.__getitem__-  s    {{2c7##rk   Nc               $    V ^8  d   QhRRRRRR/# )rq   r   r   defaultru   rb   )rw   s   "rl   rx   rF  0  s!     1 1s 1S 1C 1rk   c                	L    V P                   P                  \        V4      V4      # r   )r  r   rM  )r  r   rQ  s   &&&rl   r   ExactWeakKeyDictionary.get0  s    {{r#w00rk   c                    V ^8  d   QhRRRR/# )rq   r   r   ru   r  rb   )rw   s   "rl   rx   rF  3  s     & & & &rk   c                	2    \        V4      V P                  9   # r   )rM  r  r  s   &&rl   __contains__#ExactWeakKeyDictionary.__contains__3  s    #w$++%%rk   c               $    V ^8  d   QhRRRRRR/# )rq   r   r   r   ru   rv   rb   )rw   s   "rl   rx   rF  6  s!     ! !s !3 !4 !rk   c                	   a a \        V4      oSS P                  9  d*   \        P                  ! VVV 3R  l4      S P                  S&   VS P                  S&   R# )c                &   < SP                  S4      # r   )
_remove_id)refidxr  s   &rl   r  4ExactWeakKeyDictionary.__setitem__.<locals>.<lambda>9  s    $//#:Nrk   N)rM  rI  weakrefr\  r  )r  r   r   r]  s   f&&@rl   __setitem__"ExactWeakKeyDictionary.__setitem__6  s?    gdii$[[.NODIIcN Crk   c                    V ^8  d   QhRRRR/# rq   r]  rt   ru   rv   rb   )rw   s   "rl   rx   rF  <  s      c d rk   c                	~    WP                   9   d   V P                   V WP                  9   d   V P                  V R # R # r   rH  )r  r]  s   &&rl   r[  !ExactWeakKeyDictionary._remove_id<  s2    ++C ))		# rk   c                   V ^8  d   QhRR/# r   rb   )rw   s   "rl   rx   rF  B  s      t rk   c                	n    V P                   P                  4        V P                  P                  4        R # r   )rI  r   r  r  s   &rl   r   ExactWeakKeyDictionary.clearB  s     		rk   )rI  r  r   )rc   rd   re   rf   r   r  rN  r   rV  r`  r[  r   rj   rb   rk   rl   rD  rD  &  s-    f>$1&! rk   rD  c               $    V ^8  d   QhRRRRRR/# )rq   objr  allowed_typesztype[T]ru   	TypeIs[T]rb   )rw   s   "rl   rx   rx   H  s     A A Aw A9 Ark   c                    R # r   rb   rj  rk  s   &&rl   istypero  G  s    >Ark   c               $    V ^8  d   QhRRRRRR/# )rq   rj  r  rk  z)tuple[type[list[T]], type[tuple[T, ...]]]ru   rl  rb   )rw   s   "rl   rx   rx   L  s$      	 Irk   c                    R # r   rb   rn  s   &&rl   ro  ro  K  s     rk   c               $    V ^8  d   QhRRRRRR/# )rq   rj  r  rk  ztuple[type[T1], type[T2]]ru   zTypeIs[T1 | T2]rb   )rw   s   "rl   rx   rx   S  s$      	 9rk   c                    R # r   rb   rn  s   &&rl   ro  ro  R  s     rk   c               $    V ^8  d   QhRRRRRR/# )rq   rj  r  rk  z#tuple[type[T1], type[T2], type[T3]]ru   zTypeIs[T1 | T2 | T3]rb   )rw   s   "rl   rx   rx   Y  s$      	 Crk   c                    R # r   rb   rn  s   &&rl   ro  ro  X  s     rk   c               $    V ^8  d   QhRRRRRR/# )rq   rj  r  rk  z-tuple[type[T1], type[T2], type[T3], type[T4]]ru   zTypeIs[T1 | T2 | T3 | T4]rb   )rw   s   "rl   rx   rx   _  s$     $ $	$ M$$rk   c                    R # r   rb   rn  s   &&rl   ro  ro  ^  s     !$rk   c               $    V ^8  d   QhRRRRRR/# )rq   rj  r  rk  z7tuple[type[T1], type[T2], type[T3], type[T4], type[T5]]ru   zTypeIs[T1 | T2 | T3 | T4 | T5]rb   )rw   s   "rl   rx   rx   e  s$     ) )	) W)#)rk   c                    R # r   rb   rn  s   &&rl   ro  ro  d  s     &)rk   c               $    V ^8  d   QhRRRRRR/# )rq   rj  r  rk  zAtuple[type[T1], type[T2], type[T3], type[T4], type[T5], type[T6]]ru   z#TypeIs[T1 | T2 | T3 | T4 | T5 | T6]rb   )rw   s   "rl   rx   rx   k  s&     . .	.T. ).rk   c                    R # r   rb   rn  s   &&rl   ro  ro  j  s     +.rk   c               $    V ^8  d   QhRRRRRR/# )rq   rj  r  rk  zKtuple[type[T1], type[T2], type[T3], type[T4], type[T5], type[T6], type[T7]]ru   z(TypeIs[T1 | T2 | T3 | T4 | T5 | T6 | T7]rb   )rw   s   "rl   rx   rx   r  s(     3 3	33
 .3rk   c                    R # r   rb   rn  s   &&rl   ro  ro  q  s     03rk   c               $    V ^8  d   QhRRRRRR/# )rq   rj  r  rk  zUtuple[type[T1], type[T2], type[T3], type[T4], type[T5], type[T6], type[T7], type[T8]]ru   z-TypeIs[T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8]rb   )rw   s   "rl   rx   rx   {  s(     8 8	88
 38rk   c                    R # r   rb   rn  s   &&rl   ro  ro  z  s     58rk   c               $    V ^8  d   QhRRRRRR/# )rq   rj  r  rk  z_tuple[type[T1], type[T2], type[T3], type[T4], type[T5], type[T6], type[T7], type[T8], type[T9]]ru   z2TypeIs[T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9]rb   )rw   s   "rl   rx   rx     s(     = =	=
= 8=rk   c                    R # r   rb   rn  s   &&rl   ro  ro    s     :=rk   c               $    V ^8  d   QhRRRRRR/# )rq   rj  r  rk  zjtuple[type[T1], type[T2], type[T3], type[T4], type[T5], type[T6], type[T7], type[T8], type[T9], type[T10]]ru   z8TypeIs[T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9 | T10]rb   )rw   s   "rl   rx   rx     s-     C C	CC >Crk   c                    R # r   rb   rn  s   &&rl   ro  ro    s	     @Crk   c               $    V ^8  d   QhRRRRRR/# )rq   rj  r  rk  z)tuple[type, ...] | list[type] | set[type]ru   r  rb   )rw   s   "rl   rx   rx     s$      	 I	rk   c                    R # r   rb   rn  s   &&rl   ro  ro    s     rk   c               $    V ^8  d   QhRRRRRR/# )rq   rj  r  rk  r   ru   r  rb   )rw   s   "rl   rx   rx     s!     & & &s &t &rk   c                z    \        V\        \        \        34      '       d   \	        V 4      V9   # \	        V 4      VJ # )zisinstance() without subclasses)
isinstancetupler  r  r  rn  s   &&rl   ro  ro    s4    -%s!344CyM))9%%rk   ztuple[Any, ...]_builtin_final_typing_classesc               $    V ^8  d   QhRRRRRR/# )rq   inputsz collections.abc.Sequence[object]modeltorch.fx.GraphModuleru   zlist[torch.device | None]rb   )rw   s   "rl   rx   rx     s&      , rk   c                ,   \         P                  ! V 4      ^ ,          \        VP                  P                  4       Uu. uF)  pRVP
                  9   g   K  VP
                  R,          NK+  	  up,           p\        \        V Uu. uF#  p\        VR4      '       g   K  VP                  NK%  	  up4      4      pV Uu. uF:  p\        V\        P                  4      '       g   K%  VP                  R8w  g   K8  VNK<  	  upR.,           # u upi u upi u upi )r{   valdevicemetaN)pytreetree_flattenr  graphr0  r  r,   r   r  r  rG  r  )r  r  node
all_inputsidevicess   &&    rl   get_inputs_devicesr    s     $$V,Q/%)%++*;*;%<3%<T@R		%%<3 J *.jIjGAx4HHAHHjIJ*G az!U\\:qvv?O7	 3 Js)   DDDD<"D#D6Dc                    V ^8  d   QhRRRR/# rq   r   r   ru   r  rb   )rw   s   "rl   rx   rx     s      S T rk   c                   \         P                  R8  d   \        V \        4      '       d   R# \        V \        P
                  \        P                  34      ;'       g-    V \        P                  J ;'       g    V \        P                  J # )   Tr     )
sysversion_infor  r  types	UnionTypetyping_Finalr   Unionr   s   &rl   	is_typingr    sj     7"z%9V'W'W55??FMM:; 	! 	!FNN"	! 	!FLL rk   c                    V ^8  d   QhRRRR/# r  rb   )rw   s   "rl   rx   rx     s      S T rk   c                &   \         '       g   R # \        V \         P                  \         P                  \         P                  \         P
                  \         P                  \         P                  \         P                  \         P                  34      # rf  )
npro  int8int16int32int64uint8uint16uint32uint64r  s   &rl   is_numpy_int_typer    sW    2GGHHHHHHHHIIIIII		
 rk   c                    V ^8  d   QhRRRR/# r  rb   )rw   s   "rl   rx   rx     s      s t rk   c                    \         '       g   R # \        V \         P                  \         P                  \         P                  34      # rf  )r  ro  float16float32float64r  s   &rl   is_numpy_float_typer    s4    2JJJJJJ	
 rk   c                    V ^8  d   QhRRRR/# )rq   r   zCallable[..., T]ru   z*TypeGuard[functools._lru_cache_wrapper[T]]rb   )rw   s   "rl   rx   rx   
  s     5 55/5rk   c                    R # r   rb   r  s   &rl   is_lru_cache_wrapped_functionr  	  s     25rk   c                    V ^8  d   QhRRRR/# )rq   r   r   ru   z,TypeGuard[functools._lru_cache_wrapper[Any]]rb   )rw   s   "rl   rx   rx     s     7 7717rk   c                    R # r   rb   r  s   &rl   r  r    s     47rk   c                    V ^8  d   QhRRRR/# r  rb   )rw   s   "rl   rx   rx     s      	rk   c                    \        V \        P                  4      ;'       d!    \        \        P
                  ! V R 4      4      # )__wrapped__)r  	functools_lru_cache_wrapperis_functioninspectgetattr_staticr  s   &rl   r  r    s;     eY99:  {um4@ rk   r   
_FuncTypesc                    V ^8  d   QhRRRR/# )rq   r   r   ru   zHTypeIs[_FuncTypes | torch._ops.OpOverloadPacket | torch._ops.OpOverload]rb   )rw   s   "rl   rx   rx   %  s      Mrk   c                    \        V 4      ;'       g?    \        V \        P                  P                  \        P                  P
                  34      # r   )r  r  rG  _opsOpOverloadPacket
OpOverloadr  s   &rl   is_function_or_wrapperr  %  s@     u  

++UZZ-B-BC" rk   c                    V ^8  d   QhRRRR/# )rq   r   r   ru   zTypeIs[_FuncTypes]rb   )rw   s   "rl   rx   rx   -  s      rk   c                    \        V \        P                  \        P                  \        P                  \        P
                  34      # r   )r  r  FunctionTypeBuiltinFunctionTypeMethodDescriptorTypeWrapperDescriptorTyper  s   &rl   r  r  -  s=     %%&&''		
 rk   __eq____ne____lt____le____gt____ge__z==z!=<z<=>z>=c                    V ^8  d   QhRRRR/# )rq   r   r   ru   zTypeIs[types.GetSetDescriptorType | types.MethodDescriptorType | types.WrapperDescriptorType | types.MemberDescriptorType | types.MethodWrapperType]rb   )rw   s   "rl   rx   rx   O  s      rk   c                    \        V \        P                  \        P                  \        P                  \        P
                  \        P                  34      # r   )r  r  GetSetDescriptorTyper  r  MemberDescriptorTyper
   r  s   &rl   is_wrapper_or_member_descriptorr  O  sH      &&&&''&&##	
 rk   c                    V ^8  d   QhRRRR/# )rq   fnr   ru   rb   )rw   s   "rl   rx   rx   i  s     3 3# 3# 3rk   c                &    \        V 4      ^ ,          # r{   ) unwrap_with_attr_name_if_wrapper)r  s   &rl   unwrap_if_wrapperr  i  s    +B/22rk   c                    V ^8  d   QhRRRR/# )rq   r  r   ru   ztuple[Any, str | None]rb   )rw   s   "rl   rx   rx   m  s       1G rk   c                    \        V 4      '       d<   \        P                  ! V R R4      '       d   \        P                  ! V R V 4      p R pW3# RpW3# )_torchdynamo_inlineFN)r  r  r  )r  	attr_names   & rl   r  r  m  sU     2711"6KUSS##B(=rB)	 = 	=rk   c                    V ^8  d   QhRRRR/# )rq   r   r   ru   zTypeGuard[np.ndarray]rb   )rw   s   "rl   rx   rx   x  s     % %C %$9 %rk   c                R    \         '       g   R # \        V \         P                  4      # rf  )r  ro  ndarrayr  s   &rl   is_numpy_ndarrayr  x  s    2%$$rk   c                    V ^8  d   QhRRRR/# rq   rj  r   ru   r  rb   )rw   s   "rl   rx   rx     s     $ $# $$ $rk   c                    \         P                  \         P                  P                  .\        P
                  O5pV\         P                  P                  3,           p\        W4      # )zCheck of obj is a tensor)	rG  Tensornn	ParameterrH   traceable_tensor_subclasses_subclassesrJ   ro  )rj  tensor_lists   & rl   istensorr    sU     	% 
	+	+%K
 !2!2!=!= ??K###rk   c                    V ^8  d   QhRRRR/# )rq   modr   ru   r  rb   )rw   s   "rl   rx   rx     s     , , , ,rk   c                "    \        V \        4      # r   )r  r+   )r  s   &rl   is_lazy_moduler    s    c?++rk   r  c                    V ^8  d   QhRRRR/# rq   r_  r   ru   rv   rb   )rw   s   "rl   rx   rx     s      c d rk   c                     \        V !   R # r   )r   r_  s   *rl   
print_oncer    s	    	4Lrk   c                    V ^8  d   QhRRRR/# )rq   r  r   ru   ztypes.CellTyperb   )rw   s   "rl   rx   rx     s      3 . rk   c                   a V oR V3R llpVP                   e   \        VP                   4      ^8X  g   Q hVP                   ^ ,          # )zNSome black magic to create a cell object that usually only exists in a closurec                   V ^8  d   QhRR/# )rq   ru   r   rb   )rw   s   "rl   rx   make_cell.<locals>.__annotate__  s      s rk   c                    < S # r   rb   r  s   rl   r*  make_cell.<locals>.f  s    rk   )__closure__r  )r  r*  r  s   & @rl   	make_cellr    sC    A  ==$Q]]);q)@@@==rk   c               $    V ^8  d   QhRRRRRR/# )rq   r_  r   ra  ru   z&tuple[tuple[Any, ...], dict[str, Any]]rb   )rw   s   "rl   rx   rx     s"     
 
C 
 
1W 
rk   c                ~    \         ;QJ d    . R  V  4       F  NK  	  5M! R  V  4       4      pVP                  4        UUu/ uF  w  r4W4P                  4       bK  	  pppW%3# u uppi   \         dJ   p^RIHp ^RIHp T! RRT! T !   RT! \        TP                  4       4      !   2R. TR7        Rp?R# Rp?ii ; i)	c              3  @   "   T F  qP                  4       x  K  	  R # 5ir   )as_proxyr   args   & rl   r   $proxy_args_kwargs.<locals>.<genexpr>  s     :Tc<<>>T   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_excN)
r  r   r  NotImplementedErrorr  r  variables.baser  r  r  )	r_  ra  
proxy_argsr   r  proxy_kwargser  r  s	   &&       rl   proxy_args_kwargsr"    s    
U:T:UU:T::
<BLLNKN\\^+NK'' L 

&+<*7D>*:!GT&--/EZ<[;\]Q	
 	
	

s.   
A( 4A( A"A( "A( (B<3>B77B<c                    V ^8  d   QhRRRR/# rq   rD  float | Noneru   r  rb   )rw   s   "rl   rx   rx     s     0 0 0* 0rk   c                2    V f   R # \        V R,          4      # Nr  rt   rD  s   &rl   	to_int_msr*    s    94/#a$h-/rk   c                    V ^8  d   QhRRRR/# r$  rb   )rw   s   "rl   rx   rx     s     5 5 5* 5rk   c                2    V f   R # \        V R,          4      # )Ni@B r(  r)  s   &rl   	to_int_usr-    s    944#a)m"44rk   c                     ] tR tRt$ RtR]R&   RtR]R&   RtR]R&   RtR]R&   Rt	R]R	&   Rt
R]R
&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR ]R!&   RtR ]R"&   Rt R]R#&   Rt!R$]R%&   Rt"R]R&&   Rt#R]R'&   Rt$R$]R(&   Rt%R$]R)&   Rt&R$]R*&   Rt'R]R+&   Rt(R]R,&   Rt)R$]R-&   Rt*R]R.&   Rt+R]R/&   Rt,R]R0&   Rt-R]R1&   Rt.R]R2&   Rt/R]R3&   Rt0R]R4&   Rt1R]R5&   Rt2R]R6&   Rt3R]R7&   Rt4R]R8&   Rt5R]R9&   Rt6R]R:&   Rt7R]R;&   Rt8R]R<&   Rt9R]R=&   Rt:R]R>&   Rt;R]R?&   Rt<R]R@&   Rt=R]RA&   Rt>R]RB&   Rt?R]RC&   ]@tARD]RE&   RtBR]RF&   RtCR]RG&   ^ tDR]RH&   ^ tER]RI&   RtFR]RJ&   RtGR]RK&   RtHR]RL&   ^ tIR]RM&   ^ tJR]RN&   ^ tKR]RO&   ^ tLR]RP&   ^ tMR]RQ&   ^ tNR]RR&   RtOR]RS&   RtPR]RT&   RtQRU]RV&   RtRR]RW&   RXtSR$]RY&   RtTR]RZ&   RtUR$]R[&   RtVR$]R\&   RtWR]R]&   RtXR]R^&   RtYR]R_&   RtZR]R`&   Rt[R]Ra&   Rt\R]Rb&   Rt]R]Rc&   Rt^R]Rd&   Rt_R]Re&   Rt`R]Rf&   RtaR]Rg&   RtbR]Rh&   RtcR]Ri&   RtdR]Rj&   RXteR$]Rk&   RtfR]Rl&   RtgR]Rm&   ]hRn Ro l4       tiRptjR# )qCompilationMetricsi  Nrt  rv  	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set[str] | Nonenon_compliant_opscompliant_custom_opsrestart_reasonsdynamo_time_before_restart_szlist[str] | Nonestack_traceexception_stack_tracegraph_node_shapesry  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_usrt   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!inductor_fx_local_cache_hit_count"inductor_fx_local_cache_miss_count"aotautograd_remote_cache_hit_count#aotautograd_remote_cache_miss_count!aotautograd_local_cache_hit_count"aotautograd_local_cache_miss_countcuda_versiontriton_versionzdict[str, bool] | None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_provenancec                    V ^8  d   QhRRRR/# )rq   r  r[   ru   r/  rb   )rw   s   "rl   rx   CompilationMetrics.__annotate__.  s     R" R"^ R"0B R"rk   c                   R R lpR R lpR R lpR R lpR	V! VP                  R
4      4      RV! VP                  R4      4      RV! VP                  R4      4      RV! VP                  R4      4      RV! VP                  R4      4      RV! VP                  R4      4      RV! VP                  R4      4      RV! VP                  R4      4      RV! VP                  R4      4      /	p/ VCVCpV! VP                  R4      4      VR&   V! VP                  R4      4      VR&   V! VP                  R4      4      VR&   VP                  R4      pV'       d   \        V4      MRVR&   V ! R / VB # )!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.
c                    V ^8  d   QhRRRR/# )rq   metricr  ru   r%  rb   )rw   s   "rl   rx   /CompilationMetrics.create.<locals>.__annotate__5  s     	@ 	@J 	@< 	@rk   c                     V e
   V R,          # R # )Ng    .Arb   r  s   &rl   us_to_s*CompilationMetrics.create.<locals>.us_to_s5  s    #)#56C<?4?rk   c                    V ^8  d   QhRRRR/# )rq   r  r  ru   rb   )rw   s   "rl   rx   r  8  s     	B 	BZ 	BJ 	Brk   c                     V e
   V R,          # R # r'  rb   r  s   &rl   us_to_ms+CompilationMetrics.create.<locals>.us_to_ms8  s    %+%76T>ATArk   c                    V ^8  d   QhRRRR/# rq   r  
Any | Noneru   rt  rb   )rw   s   "rl   rx   r  ;  s     	G 	Gj 	GZ 	Grk   c                   a R  R loV f   R# \        V \        \        34      '       g   R# RP                  V3R l\	        V 4       4       4      # )c                    V ^8  d   QhRRRR/# )rq   itemr   ru   r   rb   )rw   s   "rl   rx   JCompilationMetrics.create.<locals>.collection_to_str.<locals>.__annotate__<  s     ' 's 's 'rk   c                >     \        V 4      #   \         d     R # i ; i)	<unknown>)r   r  )r  s   &rl   safe_strFCompilationMetrics.create.<locals>.collection_to_str.<locals>.safe_str<  s#    't9$  '&'s   
 Nr  ,c              3  4   <"   T F  pS! V4      x  K  	  R # 5ir   rb   )r   r  r  s   & rl   r   GCompilationMetrics.create.<locals>.collection_to_str.<locals>.<genexpr>H  s     F~tHTNN~   )r  r  r  r   sorted)r  r  s   &@rl   collection_to_str4CompilationMetrics.create.<locals>.collection_to_str;  s?    ' ~fsDk22"88Fvf~FFFrk   c                    V ^8  d   QhRRRR/# r  rb   )rw   s   "rl   rx   r  J  s     	# 	#: 	#* 	#rk   c                r    V f   R #  \         P                  ! \        V 4      4      #   \         d     R# i ; i)Nr  )jsondumpsr  r  r  s   &rl   collection_to_json_str9CompilationMetrics.create.<locals>.collection_to_json_strJ  s4    ~#zz$v,// #"#s   ' 66r9  rT  r:  rU  r;  rV  r<  rW  r=  rX  rJ  r]  rR  r_  rS  r`  rK  r^  rl  rm  r  rv  Nrb   )r   r   )	r   r  r  r  r  r  legacy_metricsall_metricsrv  s	   &&       rl   createCompilationMetrics.create-  s   	@	B	G	# ''++o">?)7?@, %gEF' &wAB( wJK  (>?* 0?@2 0?@2 ,W<=./
8 4373 <MOO?@<
78 =NOO@A=
89 9OOO<=9
45 !__\2
7AC
OtL! ![!!rk   rb   )krc   rd   re   rf   rv  r   r0  r  r1  r  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  r  rQ  rR  rS  rT  r  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  LOG_FORMAT_VERSIONrf  rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  ru  rv  rw  r  rx  ry  rz  r{  r|  r}  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  rj   rb   rk   rl   r/  r/    s7   !J
! Iz GZ"K"!%NJ%!J
!)-J-"K"(,:,!%NJ%#'j'$(z(#J#044+/L/,0\0$(O\( Iz "K"+/j/)-J-)--,0/0'+O_+15 ,5$(K!(.2+2$(z( %)k(.2|226!<6*.K.48$k8$(k( $M:$"&OZ&"J"%)
)48%z848%z8 $M:$"K"48%z8:>+Z>6:':?C0*C)-J-/3 *326#Z68<):<37$j715"J548%z848%z86:':"K"(,:,)-J-+/j/00"&OZ&'+*+56&
667'78<):<48%z859&
945%z556&
656&
667'745%z556&
6#L*#!%NJ%,0M)004!:4#J#!J
!+/[/+/[//3_3%)l)#'j'#'j'15"J5Hj(,:,!%NJ%48%z848%z8 #K" #K" #K"/3_37<'<"&OZ&+//R" R"rk   r/  maxlenz%collections.deque[CompilationMetrics]_compilation_metricsc                    V ^8  d   QhRRRR/# )rq   r2  r/  ru   rv   rb   )rw   s   "rl   rx   rx     s     - -+= -$ -rk   c                   \        4       pVP                  4       pV'       g   R# TP                  TV P                  V P                  V P
                  V P                  V P                  V P                  V P                  V P                  V P                  V P                  V P                  V P                  V P                  V P                   V P"                  V P$                  e   \'        V P$                  4      MRV P(                  e   \'        V P(                  4      MRV P*                  e   \'        V P*                  4      MRV P,                  V P.                  V P0                  R7       R# )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  r0  r  r1  r  r2  r3  r4  r5  r6  r7  r8  r>  r?  r@  rA  rB  rC  rD  rE  rI  rO  )r	  r  r  r0  r  r1  r  r2  r3  r4  r5  r6  r7  r8  r>  r?  r@  rA  rB  r  rC  rD  rE  rI  rO  )r2  event_loggerr  s   &  rl   #add_compilation_metrics_to_chromiumr    s     -.L113J++		MM''<< 77MM55''++--++MM!"!;!; 77 *+)<)<)HD$$%d -.,B,B,ND''(TX ()'8'8'DD""#$%&%C%C++oo;   rk   c                   V ^8  d   QhRR/# rq   ru   rt  rb   )rw   s   "rl   rx   rx     s     !3 !3
 !3rk   c                 t    R  R lp V ! \         P                  ! 4       4      p\        P                  ! VRR7      # )c                    V ^8  d   QhRRRR/# rq   dr[   ru   rb   )rw   s   "rl   rx   4_get_dynamo_config_for_logging.<locals>.__annotate__  s     
 
. 
^ 
rk   c           	         0 RmpV P                  4        UUu/ uF1  w  r#W!9  g   K  T\        V\        4      '       d   \        V4      MTbK3  	  upp# u uppi )TYPE_CHECKING>   r  base_dirrepro_afterrepro_levelr  r  debug_dir_rootrepro_tolerancerepro_forward_only_custom_ops_profile_save_config_ignorerepro_ignore_non_fpignore_logger_methodslog_compilation_metricsignore_logging_functionssame_two_models_use_fp64r  reorderable_logging_functionsnontraceable_tensor_subclasses)_autograd_backward_strict_mode_banned_ops+inject_BUILD_SET_unimplemented_TESTING_ONLYr   r  r  r  r  	blocklistr   r   s   &   rl   clean_for_json6_get_dynamo_config_for_logging.<locals>.clean_for_json  sX    
	4  ggi
'
# DC*UC"8"8eC'
 	
 
s
   
A(AT	sort_keys)rH   get_config_copyr  r  )r  config_dicts     rl   _get_dynamo_config_for_loggingr    s-    
> !!7!7!9:K::kT22rk   c                   V ^8  d   QhRR/# r  rb   )rw   s   "rl   rx   rx     s     3 3j 3rk   c                    R  R lp \         P                  P                  '       g   R#  \         P                  P                  P                  4       pT ! T4      p\        P                  ! TRR7      #   \        \
        3 d     R# i ; i)c                    V ^8  d   QhRRRR/# r  rb   )rw   s   "rl   rx   2_compiler_config_for_logging.<locals>.__annotate__  s     	
 	
. 	
^ 	
rk   c           	         R 0pV P                  4        UUu/ uF1  w  r#W!9  g   K  T\        V\        4      '       d   \        V4      MTbK3  	  upp# u uppi )r  r  r  s   &   rl   r  4_compiler_config_for_logging.<locals>.clean_for_json  s[    
	  ggi
'
# DC*UC"8"8eC'
 	
 
s
   
A(ANz!Compiler Config cannot be pickledTr  )rG  compilerrH   r  r<  AttributeErrorr  r  )r  compiler_config_copyr  s      rl   _compiler_config_for_loggingr    sq    	
 >>   3$~~44DDF !!56K::kT22	 ~& 323s   (A2 2BBc                   V ^8  d   QhRR/# r  rb   )rw   s   "rl   rx   rx     s     - -z -rk   c                 v    ! R R\         P                  4      p \        4       pRpRp\        P                  P
                  '       d*    \        P                  P
                  P                  4       pVe    VP                  4        FQ  w  rE\        V\        4      '       g   VP                  V4       \        V\        4      '       g   KD  \        V4      W4&   KS  	  V F  pW4 K  	  \         P                   ! VV RRR7      pV# V#   \        \        \        \        3 d    Rp Li ; i  \"         d    Rp T# i ; i)zF
Method to parse and scrub uninteresting configs from inductor config
c                  .   a  ] tR tRtR V 3R lltRtV ;t# )A_scrubbed_inductor_config_for_logging.<locals>.TypeSafeSerializeri  c                    V ^8  d   QhRRRR/# )rq   or   ru   rb   )rw   s   "rl   rx   N_scrubbed_inductor_config_for_logging.<locals>.TypeSafeSerializer.__annotate__  s     	8 	8S 	8S 	8rk   c                	H   <  \         SV `  V4      #   \         d     R # i ; i)zValue is not JSON serializable)r  rQ  r  )r  r  r  s   &&rl   rQ  I_scrubbed_inductor_config_for_logging.<locals>.TypeSafeSerializer.default  s)    8wq)) 878s    !!rb   )rc   rd   re   rf   rQ  rj   r  r  s   @rl   TypeSafeSerializerr    s    	8 	8rk   r  Nz!Inductor Config cannot be pickledT)r   skipkeysr  z(Inductor Config is not JSON serializable)r  JSONEncoderr  rG  	_inductorrH   r  r<  r  r
  AssertionErrorr   r  r   r  r  r  r  )r  keys_to_scrubinductor_conf_strinductor_config_copyr   r  s         rl   %_scrubbed_inductor_config_for_loggingr    s-   8T-- 8 "eM	D#(??#9#9#I#I#K  '	K0668!#s++!%%c*c3''04S	(- 9 %(- % !%

$&	! 1 ><H 	D C	D*  	K J	Ks+   	(D 6AD' 
6D' D$#D$'D87D8c               0    V ^8  d   QhRRRRRRRRRR	R
R/# )rq   start_time_nsrt   end_time_nsr  r[   exc_typeztype[BaseException] | None	exc_valuezBaseException | Noneru   rv   rb   )rw   s   "rl   rx   rx   '  sL     O3 O3O3O3 O3 )	O3
 $O3 
O3rk   c                  a \         P                  P                  P                  4       '       d    ^ RIHp TpRpMRpRpVP                  R4      pV'       g)   \         P                  P                  P                  4       p/ RVbRV R,          bRVR,          bRV'       d   VP                  MRbR	V'       d   \        V4      MRbR
\        \         P                  P                  4       4      bR\!        4       bR\"        P$                  bRRbR\'        4       bR\)        4       bR\         P*                  P,                  bR\/        4       '       d   \0        P2                  MRbRVbRVbR\4        P*                  bR\         P2                  bp	\6        P9                  / V	CVC4      o\:        P=                  S4       Rp
SP>                  RJ d
   RV
,           p
SP@                  RJ d
   V
R,           p
\         P                  PC                  V
V3R lRVR7       \E        S4       \"        PF                  '       d   \I        S4       R# R#   \         d	    RpRp ELi ; i)r{   )REMOTE_CACHE_VERSION_ManifoldCacheNrv  rT  r  rb  r>  r?  r^  rO  rL  rM  Trg  rP  rt  ru  r  rh  rk  r  r  compilation_metricsFbwd__runtimec            	        < \         P                  ! S4      P                  4        U Uu/ uF)  w  rT \        V\        4      '       d   \        V4      MTbK+  	  upp # u upp i r   )dataclassesasdictr   r  r  r  )rC  rD  r  s     rl   r  ,record_compilation_metrics.<locals>.<lambda>b  sQ    #**+>?EEG
G *Q,,tAw!3G
 
s   /A)record_logging_overheadrv  )%rG  r  utils should_use_remote_fx_graph_cachetorch._inductor.fb.remote_cacher  ModuleNotFoundErrorr   r  r  r  re   r   r-  r  get_structured_logging_overheadr  rH   suppress_errorsr  r  versioncudar.   triton__version__r  r/  r  r  r   r  r  trace_structuredr  r  r%   )r  r   r  r  r  r  rh  rk  rv  common_metricsr~   r  s   &&&&&      @rl   r   r   '  sp    ==??	9L#7 4D1
 15-# \*J]]11DDF
j$. 	{d* 	hX**D	
 	s9~ 	))NN::<+
 	79 	!&"8"8 	+D 	@B 	79 	** 	
&,,"  	 4!" 	01V#$ 	#++%& 	5,,'N, -334Q~4Q4QR 34 D%%.}%%-j 	NN##	
 !&  $ $ ((;< %%%12 &C # 	9#' 481	9s   
I IIc                    V ^8  d   QhRRRR/# )rq   new_sizert   ru   rv   rb   )rw   s   "rl   rx   rx   y  s     % %C %D %rk   c                    \        \        4      V 8  d   \        P                  4        K*  \        P                  ! \        V R 7      pVsR# )r  N)r  r  popleftr   deque)r  	new_deques   & rl   set_compilation_metrics_limitr   y  s5    
"
#h
.$$&!!"6xHI$rk   c                   V ^8  d   QhRR/# r   rb   )rw   s   "rl   rx   rx     s     ! !4 !rk   c                 .    \         P                  4        R # r   )r  r   rb   rk   rl   clear_compilation_metricsr#    s     rk   c                   V ^8  d   QhRR/# )rq   ru   zlist[CompilationMetrics]rb   )rw   s   "rl   rx   rx     s     & &!9 &rk   c                      \        \        4      # r   )r  r  rb   rk   rl   get_compilation_metricsr&    s    $%%rk   c                      ] tR tRtRtR R ltR R ltR R ltR	 R
 ltR R lt	R R lt
R R ltR R ltR R ltR R ltR#R R lltR R ltR$R R lltR$R R lltR%R  R! lltR"tR# )&ChromiumEventLoggeri  aL  Logs chromium events to structured logs. tlparse will concatenate these into a perfetto UI link.

Also emits RecordFunction calls to torch.profiler when enabled.

See https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/preview#heading=h.yr4qxyxotyw for
a specification of the Chromium Event JSON format.
c                   V ^8  d   QhRR/# rq   ru   	list[str]rb   )rw   s   "rl   rx    ChromiumEventLogger.__annotate__  s     	" 	"9 	"rk   c                    \        V P                  R4      '       d   V P                  P                  # . V P                  n        V P                  P                  # )zE
The main event stack, with every chromium event.
Logged to tlparse.
r  )r   tlsr  r  s   &rl   	get_stackChromiumEventLogger.get_stack  s<    
 488W%%88>>!DHHN88>>!rk   c                   V ^8  d   QhRR/# r  rb   )rw   s   "rl   rx   r,    s     + +Z +rk   c                H    V P                  4       pV'       d
   V^ ,          # R# )z^
Get the outermost event name (i.e. the longest running event)
or None if the stack is empty.
N)r/  )r  r  s   & rl   r  'ChromiumEventLogger.get_outermost_event  s!    
   uQx*d*rk   c                   V ^8  d   QhRR/# r*  rb   )rw   s   "rl   rx   r,    s     	1 	1) 	1rk   c                    \        V P                  R4      '       d   V P                  P                  # . V P                  n        V P                  P                  # )zY
A smaller subset of the main stack that gets used to log
PT2 Compile Events internally.
r  )r   r.  r  r  s   &rl   r  ,ChromiumEventLogger.get_pt2_compile_substack  sB    
 48834488000,.DHH)88000rk   c                   V ^8  d   QhRR/# )rq   ru   r[   rb   )rw   s   "rl   rx   r,    s     # # #rk   c                	    \        V P                  R 4      '       g   / V P                  n        V P                  P                  # )
event_data)r   r.  r9  r  s   &rl   get_event_data"ChromiumEventLogger.get_event_data  s/    txx.."$DHHxx"""rk   c                   V ^8  d   QhRR/# )rq   ru   z'dict[str, AbstractContextManager[None]]rb   )rw   s   "rl   rx   r,    s     ) )&M )rk   c                	    \        V P                  R 4      '       g   / V P                  n        V P                  P                  # )record_functions)r   r.  r>  r  s   &rl   get_record_functions(ChromiumEventLogger.get_record_functions  s0    txx!344(*DHH%xx(((rk   c                   V ^8  d   QhRR/# r   rb   )rw   s   "rl   rx   r,    s     I I$ Irk   c                	D   \         P                  ! 4       V n        ^RIHp VP
                  '       d+   VP
                   R\        P                  ! 4        2V n        M#\        \        P                  ! 4       4      V n        \        P                  RV P                  4       R# )r   rG   -z*ChromiumEventLogger initialized with id %sN)	threadinglocalr.  r  rH   pt2_compile_id_prefixuuiduuid4id_r   r   r  )r  rH   s   & rl   r  ChromiumEventLogger.__init__  sg    ??$ ''' 667qGDH4::<(DH 	=txxHrk   c               $    V ^8  d   QhRRRRRR/# rq   r  r   ra  r   ru   rv   rb   )rw   s   "rl   rx   r,    s!     2 2S 2C 2D 2rk   c                X    WP                  4       9  d   R# V P                  ! V3/ VB  R# )zT
Same as add_event_data, but will silently not log if the event isn't in the stack.
N)r/  r  )r  r  ra  s   &&,rl   rZ  &ChromiumEventLogger.try_add_event_data  s'     ^^--J1&1rk   c               $    V ^8  d   QhRRRRRR/# rL  rb   )rw   s   "rl   rx   r,    s(     . .. . 
	.rk   c                    WP                  4       9  d*   \        R\        V4       RV P                  4        R24      hV P                  4       pW9  d   / W1&   W1,          P	                  V4       R# )zb
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)r/  r
  r  r:  r  )r  r  ra  r9  s   &&, rl   r  "ChromiumEventLogger.add_event_data  su     ^^--j)*(4>>3C2D EK K 
 ((*
'%'J"%%f-rk   c               (    V ^8  d   QhRRRRRRRR/# )rq   r  r   r   r   rt   ru   rv   rb   )rw   s   "rl   rx   r,    s(     - -C -c -# -$ -rk   c                   WP                  4       9  d*   \        R\        V4       RV P                  4        R24      hV P                  4       pW9  d   / WA&   W$V,          9  d   ^ WA,          V&   WA,          V;;,          V,          uu&   R# )z;
Increment an integer event data field by the given amount
rQ  rR  rS  N)r/  r
  r  r:  r  r  r   r   r9  s   &&&& rl   r$  ChromiumEventLogger.increment  s     ^^--j)*(4>>3C2D EK K  ((*
'%'J",,*+J"3's#u,#rk   c               (    V ^8  d   QhRRRRRRRR/# )rq   r  r   r   r   r   ru   rv   rb   )rw   s   "rl   rx   r,    s2     / // / 	/
 
/rk   c                0   WP                  4       9  d*   \        R\        V4       RV P                  4        R24      hV P                  4       pW9  d   / WA&   W$V,          9  d   \	        4       WA,          V&   WA,          V,          P                  V4       R# )zB
Add a value to a set within a event_name's metadata if it exists
rQ  rR  rS  N)r/  r
  r  r:  r  r  rW  s   &&&& rl   r/  ChromiumEventLogger.add_to_set  s     ^^--j)*(4>>3C2D EK K 
 ((*
'%'J",,*-%J"3's#''.rk   Nc               0    V ^8  d   QhRRRRRRRRR	R
RR/# )rq   r  r   r  rt   r  r[   r  r  rv  rw  ru   rv   rb   )rw   s   "rl   rx   r,    sN     &T &T&T &T !	&T
  $&T %&T 
&Trk   c                   T;'       g)    \         P                  P                  P                  4       p\	        V4      VR&   V P                  VVRV4       V P                  4       P                  V4       V P                  ! V3/ VB  V'       d    V P                  4       P                  V4       \         P                  P                  P                  '       do   \         P                  P                  P                  V4      pVP!                  4        W`P#                  4       V&   V'       d   \$        P&                  ! V3/ VB  R# R# R# )aQ  
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)
rv  BN)rG  r  r  r  r   _log_timed_eventr/  r   r  r  rH  rI  rJ  rk  rl  rm  rn  r?  r   rM  )r  r  r  r  r  rv  rp  s   &&&&&& rl   r  #ChromiumEventLogger.log_event_start  s       TT5==#?#?#R#R#T
!$Z		
 	
+J3(3 ))+22:> >>""777##77
CBLLN68%%'
3 ";;JS(S  8rk   c                   V ^8  d   QhRR/# r   rb   )rw   s   "rl   rx   r,  6  s     % %t %rk   c                	n   V P                  4       pV P                  4       pVP                  4        VP                  4        V P                  4       pVP                  4        V P	                  4       pV'       d=   VP                  4        F  pVP                  R R R 4       K  	  VP                  4        R # R # r   )r/  r  r   r:  r?  r  ro  )r  r  substackr9  r>  rp  s   &     rl   r  ChromiumEventLogger.reset6  s      002((*
446&--/D$- 0""$ rk   c               4    V ^8  d   QhRRRRRRRRRR	R
RRR/# )rq   r  r   r  rt   r  r[   r  r  r  rv  rw  ru   rv   rb   )rw   s   "rl   rx   r,  F  sY     N* N*N* N* !	N*
 N*  $N* %N* 
N*rk   c                  a T;'       g)    \         P                  P                  P                  4       p\	        V4      VR&   V P                  4       pSV9   d   VS,          pVS M/ pVP                  V4       V P                  SVRV4      p	R V3R llp
V P                  4       pSV9  d   \        P                  R4       R# V
! V4       V'       d@   V P                  4       pV
! V4       \        WV P                  V4       VP                  4        VP                  4        V P                  4       pSV9   d'   VP                  S4      pVP!                  RRR4       R# R# )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)
rv  Ec                    V ^8  d   QhRRRR/# )rq   r  r+  ru   rv   rb   )rw   s   "rl   rx   7ChromiumEventLogger.log_event_end.<locals>.__annotate__n  s     	 	Y 	4 	rk   c                r   < SV R,          8w  d(   \         P                  R4       V P                  4        K5  R# )r   z>ChromiumEventLogger: Detected overlapping events, fixing stackN)r   r%  pop)r  r  s   &rl   	pop_stack4ChromiumEventLogger.log_event_end.<locals>.pop_stackn  s0    b	) T 		 *rk   z7ChromiumEventLogger: Start event not in stack, ignoringN)rG  r  r  r  r   r:  r  r_  r/  r   r%  r  r$   rI  rl  r?  ro  )r  r  r  r  r  r  rv  all_event_datar  eventrm  event_stackr  r>  rp  s   &f&&&&&        rl   r  !ChromiumEventLogger.log_event_endF  sQ   &  TT5==#?#?#R#R#T
!$Z ,,.'+J7Nz*  Nh'%%	
	 	 nn& [( KKQR+ #'#@#@#B *+'TXX} !$$& 	  446))!%%j1BKKdD) *rk   c          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
rq   r  r   r  rt   r   r  dict[str, Any] | Noneru   r[   rb   )rw   s   "rl   rx   r,    s<        	
 ( 
rk   c                   a RVRVR,          RVRVRRR^ R	^ /o\         P                  P                  R
V3R lRRR7       \        S4       S# )zQ
Logs a timed event in chromium format. See log_event_start, log_event_end, etc.
r~   tsr  r_  phcatr  tidpidchromium_eventc                    < S # r   rb   rp  s   rl   r  6ChromiumEventLogger._log_timed_event.<locals>.<lambda>      urk   F
payload_fnsuppress_contextexpect_trace_id)rG  r  r  r&   )r  r  r  r   r  rp  s   &&&&&@rl   r_  $ChromiumEventLogger._log_timed_event  sg     J'D.H%>11	
 	''$"!	 	( 	
 	'u-rk   c          
     ,    V ^8  d   QhRRRRRRRRR	R
/# )rq   r  r   r  rt   r  rt  r  r  ru   rv   rb   )rw   s   "rl   rx   r,    s<     ( (( ( (	(  $( 
(rk   c                ^  a Vf   / p\        \        P                  P                  P	                  4       4      pWSR&   RVRVR,          RVRRR	R
R^ R^ RR/o\        P
                  P                  RV3R lRRR7       V'       d)   \        SV P                  4       V P                  V4       R# R# )a*  
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
Nrv  r~   rv  r  r_  rw  r  rx  r  ry  rz  spr{  c                    < S # r   rb   r}  s   rl   r  7ChromiumEventLogger.log_instant_event.<locals>.<lambda>  r  rk   FTr  )
r   rG  r  r  r  r  r  r$   r  rI  )r  r  r  r  r  rv  rp  s   &&&&& @rl   r  %ChromiumEventLogger.log_instant_event  s     H55HHJK
!+J'D.H#>11

 	''$" 	 	( 	
 !'t446' !rk   )rI  r.  FNr   )NF)rc   rd   re   rf   r   r/  r  r  r:  r?  r  rZ  r  r$  r/  r  r  r  r_  r  rj   rb   rk   rl   r(  r(    s\    	"+	1#
)
I2.(-$/,&TP% N*`:( (rk   r(  zChromiumEventLogger | NoneCHROMIUM_EVENT_LOGc                   V ^8  d   QhRR/# )rq   ru   r(  rb   )rw   s   "rl   rx   rx     s      #6 rk   c                 2    \         f   \        4       s \         # r   )r  r(  rb   rk   rl   r	  r	    s    !02rk   c                   V ^8  d   QhRR/# rq   ru   r  rb   )rw   s   "rl   rx   rx     s     * *4 *rk   c                     \         R J# r   )r  rb   rk   rl   rY  rY    s    T))rk   c               (    V ^8  d   QhRRRRRRRR/# )rq   r  r   reset_event_log_on_exitr  r  ru   ri  rb   )rw   s   "rl   rx   rx     s0     ' ''!'  '  	'rk   c           	   #    "   \        4       p\        P                  ! 4       pVP                  V V/ V4        Rx  VP	                  V \        P                  ! 4       / VV4       V'       d   VP                  4        R# R#   TP	                  T \        P                  ! 4       / TT4       T'       d   TP                  4        i i ; i5i)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  r  r  )r  r  r  chromium_event_logchromium_start_times   &&&  rl   chromium_event_timedr    s      34,,.&&
	'((LLN!	
 #$$& # 	((LLN!	
 #$$& #s   4CA? AC?ACCc                  R    ] tR tRt$ RtR]R&   R]R&   R R lt]R	 R
 l4       tRt	R# )CleanupHooki	  z,Remove a global variable when hook is calledr[   scoper   r~   c                    V ^8  d   QhRRRR/# r   rb   )rw   s   "rl   rx   CleanupHook.__annotate__	  s     " "c "d "rk   c                	~    \         e   \         ;P                  ^,          un        V P                  V P                   R # r   )CleanupManagerr   r  r~   r  r_  s   &*rl   __call__CleanupHook.__call__	  s)    %  A% JJtyy!rk   c               (    V ^8  d   QhRRRRRRRR/# )	rq   r  r[   r~   r   r  r   ru   r  rb   )rw   s   "rl   rx   r  	  s(     ( (n (C (c (k (rk   c                	j    W9  g   Q h\         ;P                  ^,          un        W V&   \        W4      # r   )r  r   r  )r  r~   r  s   &&&rl   r  CleanupHook.create	  s1       !d5''rk   rb   N)
rc   rd   re   rf   r   r   r  rg  r  rj   rb   rk   rl   r  r  	  s)    6
I" ( (rk   r  c                  >   a  ] tR tRt$ ^ tR]R&   R V 3R lltRtV ;t# )r  i#	  zClassVar[CleanupManager]instancec                    V ^8  d   QhRRRR/# rc  rb   )rw   s   "rl   rx   CleanupManager.__annotate__'	  s        c  d  rk   c                	h   < V P                   V,           F
  pV! 4        K  	  \        SV `	  V4       R # r   )r  r  r[  )r  r]  r   r  s   && rl   r[  CleanupManager._remove_id'	  s+    KK$$DF %3rk   rb   )	rc   rd   re   rf   r   r   r[  rj   r  r  s   @rl   r  r  #	  s    E&&   rk   r  c                    V ^8  d   QhRRRR/# rq   r  torch.Tensorru   rb   )rw   s   "rl   rx   rx   0	  s      L \ rk   c                    V P                  4       P                  V P                  4      pV P                  '       d.   V P                  e    V P                  P                  4       Vn        V# )z!Clone the tensor and its gradient)clonerequires_grad_requires_gradis_leafgrad)r  ys   & rl   clone_tensorr  0	  sD    		  1AyyyQVV'Hrk   c               (    V ^8  d   QhRRRRRRRR/# )rq   srcr  dstattrr   ru   rv   rb   )rw   s   "rl   rx   rx   8	  s(      < l # $ rk   c                    \        W4      '       d&   \        W\        W4      P                  4       4       R# \        W4      '       d   \	        W4       R# R# )z]Copy a single dynamo attribute from src to dst, or remove it from dst if src doesn't have it.N)r   setattrgetattrcopydelattr)r  r  r  s   &&&rl   _copy_dynamo_attrr  8	  s=    s73-2245			 
rk   c               $    V ^8  d   QhRRRRRR/# )rq   r  r  r  ru   rv   rb   )rw   s   "rl   rx   rx   @	  s&     @ @| @, @4 @rk   c                    \        WR4       \        WR4       \        WR4       \        WR4       \        WR4       \        WR4       R# )z
Copy dynamo-specific tensor attributes from src to dst.
These attributes are used for dynamic shape marking and must be preserved
when cloning or casting tensors. If src doesn't have an attribute but dst does,
the attribute is removed from dst.
_dynamo_dynamic_indices_dynamo_unbacked_indices_dynamo_hint_overrides_dynamo_shape_ids_dynamo_strict_unbacked_indices_dynamo_weak_dynamic_indicesN)r  )r  r  s   &&rl   copy_dynamo_tensor_attributesr  @	  sF     c 9:c :;c 89c 34c ABc >?rk   dtypec               $    V ^8  d   QhRRRRRR/# )rq   r  r  r  ztorch.dtype | Noneru   rb   )rw   s   "rl   rx   rx   O	  s'     I I< I+= I Irk   c          
       a \        V 4      '       d   V # R V3R llp\        P                  ! 4       ;_uu_ 4        V P                  P                  R8X  d   V! V 4      uuRRR4       # V P
                  \        P                  J de   \        P                  ! V! V P                  4       4      V! V P                  4       4      V P                  V P                  4       R7      uuRRR4       # \        V 4      '       d   V P
                  \        P                  \        P                  09   d"   V P                  4       pV P!                  4       pM V P#                  4       pV P%                  4       p\        P&                  ! V! V4      V! V4      V! V P)                  4       4      V P                  V P
                  R7      uuRRR4       # \+        V 4      '       d   V! V 4      uuRRR4       # \-        R \/        V P1                  4       V P3                  4       4       4       4      pV P4                  '       d!   \        P6                  ! V^ ,           3V 4      pM>\        P8                  ! V^ ,           S;'       g    V P:                  V P                  R7      pV P=                  4       VP=                  4       ,
          ^ ,          V P?                  4       ,          pVPA                  V P1                  4       V P3                  4       V4        VPC                  V PE                  4       4       V PF                  '       d   VPI                  V PJ                  4       V PF                  '       d+   V PL                  e   \O        V PL                  SR	7      Vn&        \S        Y4       TuuRRR4       #   \P         d    T! T 4      u uuRRR4       # i ; i  + '       g   i     R# ; i)
zcopy while preserving stridesc                    V ^8  d   QhRRRR/# r  rb   )rw   s   "rl   rx   !clone_input.<locals>.__annotate__V	  s      |  rk   c                  < \         P                  ! V 4      pV P                  '       d   VP                  V P                  4       V P                  '       d+   V P
                  e   \        V P
                  SR7      Vn        \        W4       V# )Nr  )rG  r  r  r  r  r  clone_inputr  )r  r  r  s   & rl   torch_clone clone_input.<locals>.torch_cloneV	  s\    KKN999Q__-999+ u5AF%a+rk   xlaN)is_coalesced)layoutc              3  F   "   T F  w  rV^,
          V,          x  K  	  R# 5ir   rb   )r   shapestrides   &  rl   r   clone_input.<locals>.<genexpr>	  s"      
6O]UUQY&  6Os   !)r  r  r  )*rK   rG  no_gradr  r  r  
sparse_coosparse_coo_tensor_indicesro   r  r  r"   
sparse_csr
sparse_bsrcrow_indicescol_indicesccol_indicesrow_indicessparse_compressed_tensorr  r-   r   zipsizer  is_quantizedempty_quantizedemptyr  data_ptrelement_sizeas_strided_copy_r  r  r  r  r  r  r
  r  )r  r  r  compressed_indicesplain_indicesneeded_sizeresultcache_line_offsets   &d      rl   r  r  O	  s    qzz  
88==E!q> 
 88u'''**AJJL)AIIK(^^-	 
 "!$$xxE,,e.>.>??%&^^%5" !%&^^%5" !11./M*AHHJ'xx) 
6 +1-- q>= 
@  
69!&&(AHHJ6O
 
 >>>**K",<+>BF[[b (8(8F ZZ\FOO--3^^ 	1668QXXZ1BC
	"LL#yyy%%aoo6yyyQVV/)!&&> 	&a0s 
f  	" q>!o 
f	"g 
s]   #O)A7O+COO(B
O3BO0N 2,N *N 	O O 3O?O  OO	c                    V ^8  d   QhRRRR/# )rq   example_inputszdict[str, T | tuple[T, ...]]ru   zdict[str, list[T]]rb   )rw   s   "rl   rx   rx   	  s      0rk   c                    R # r   rb   r  s   &rl   clone_inputsr  	  s     rk   c                    V ^8  d   QhRRRR/# )rq   r  zSequence[T]ru   zlist[T]rb   )rw   s   "rl   rx   rx   	  s     = = = =rk   c                    R # r   rb   r  s   &rl   r  r  	  s    :=rk   c                    V ^8  d   QhRRRR/# )rq   r  r   ru   rb   )rw   s   "rl   rx   rx   	  s        rk   c                   \        V 4      \        J d   \        V 4      pVP                  4        Fg  w  r#\        V\        4      '       d   \        V4      W&   K*  \        V\        P                  4      '       g   Q \        V4      4       h\        V4      W&   Ki  	  V# \        V 4      p\        \        V4      4       F>  p\        W,          \        P                  4      '       g   K+  \        W,          4      W&   K@  	  V# r   )r  dictr   r  r  r  rG  r  r  r  ranger  )r  resr   r   r  s   &    rl   r  r  	  s    Nt#>"))+JC%'''.!%66CUC6&u- & 

~
C3s8_cfell++ (CF  Jrk   c                    V ^8  d   QhRRRR/# )rq   r  r  ru   rv   rb   )rw   s   "rl   rx   rx   	  s     
 
 
$ 
rk   c           
          V P                  4        R	#   \         dE   p^RIHp \        P
                  ! RR\        T 4      4      pT! RRRT R2. TRR7        R	p?R	# R	p?ii ; i)
r   r  z\(.*r  z(skip frame due to being in functorh modez(torch.compile cannot be run in context: z. Skipping frame.T)r  r  r  r  r  
skip_frameN)r  r
  r  r  rer  r  )r  r!  r  functorch_subclass_names   &   rl   skip_frame_if_in_functorch_moder  	  sg    
 
& #%&&"d3i"@>BCZB[[lm	
 	

s    A#9AA#c                   V ^8  d   QhRR/# rq   ru   Generator[None, None, None]rb   )rw   s   "rl   rx   rx   	  s     7 77 7rk   c            	   #    "   \         P                  P                  p \         P                  P                  P
                  pV! 4       ;_uu_ 4        V ! 4       ;_uu_ 4        \         P                  ! \         P                  P                  4       4      p\        V4       \         P                  P                  4       '       d3   \         P                  ! \         P                  P                  4       4      p\         P                  P                  4       '       d3   \         P                  ! \         P                  P                  4       4      pR R R 4       R R R 4        R x  \         P                  P                  P                  4       ;_uu_ 4        \         P                  P                  X4       \         P                  P                  4       '       d    \         P                  P                  X4       \         P                  P                  4       '       d    \         P                  P                  X4       R R R 4       R #   + '       g   i     L; i  + '       g   i     EL	; i  + '       g   i     R # ; i  \         P                  P                  P                  4       ;_uu_ 4        \         P                  P                  X4       \         P                  P                  4       '       d    \         P                  P                  X4       \         P                  P                  4       '       d    \         P                  P                  X4       R R R 4       i   + '       g   i     i ; i; i5ir   )rG  rk  _DisableFuncTorchr  _python_dispatch_disable_current_modesr  randomget_rng_stater  r  is_availablexpuset_rng_state)disable_functorchdisable_current_modes	rng_statecuda_rng_statexpu_rng_states        rl   preserve_rng_stater  	  s    22!KK88OO		 	 "3"5"5KK : : <=	'	2::""$$"[[)A)A)CDN99!!##!KK		(?(?(ABM #6	 7[[))@@BBLL&&y1zz&&((

((8yy%%''		''6 CB #6"5	 	 	  CBBU[[))@@BBLL&&y1zz&&((

((8yy%%''		''6 CBBBs   AM0I B7H?	2H?	
IM0I: 0M0BI&I&5
M0?I
II#		M0&I7	1	M0:1M-+BM	2M		M-M*%M--M0c                    V ^8  d   QhRRRR/# )rq   model0r   ru   zTypeIs[torch.jit._trace.TopLevelTracedModule | torch.jit._script.RecursiveScriptModule | torch.jit.ScriptFunction[Any, Any] | torch.jit.ScriptModule]rb   )rw   s   "rl   rx   rx   	  s      rk   c                
   \        V \        P                  P                  P                  \        P                  P
                  P                  \        P                  P                  \        P                  P                  34      # r   )	r  rG  jit_traceTopLevelTracedModule_scriptRecursiveScriptModuleScriptFunctionScriptModule)r  s   &rl   is_jit_modelr#  	  sY     II11II33II$$II""		
 rk   c               (    V ^8  d   QhRRRRRRRR/# )rq   r  r   r  r  r  ru   rb   )rw   s   "rl   rx   rx   	  s(      s C $ 3 rk   c                ^   \        V 4      '       d   V #  \        P                  P                  W4      #   \         dn     \        P                  P                  T 4      u #   \         d:    T'       d   \        P                  R 4        M\        P                  R4         R# i ; i R# i ; i)z	jit errorz0Both torch.jit.trace and torch.jit.script failedN)	r#  rG  r  tracer  scriptr   r)  error)r  r  r  s   &&&rl   torchscriptr)  	  s    E	Nyyu55 N	N99##E** 	Nk*		LM	N* NsE   4 B, A!B,!B%4B%	B,B% B,$B%%B,+B,c                    V ^8  d   QhRRRR/# )rq   rj  r   ru   rt  rb   )rw   s   "rl   rx   rx   
  s        rk   c                `     \         P                  ! V 4      #   \        \        3 d     R # i ; ir   )r  getfiler<  OSErrorrj  s   &rl   r,  r,  
  s-    s##w s    --c                    V ^8  d   QhRRRR/# r  rb   )rw   s   "rl   rx   rx   
  s     ( (s (t (rk   c                *    \        \        V 4      4      # )zLTest if an object is a namedtuple or a torch.return_types.* quasi-namedtuple)is_namedtuple_clsr  r.  s   &rl   is_namedtupler2  
  s    T#Y''rk   c                    V ^8  d   QhRRRR/# )rq   r   r   ru   r  rb   )rw   s   "rl   rx   rx   
  s      3 4 rk   c                0  a   \        S \        4      '       d   \        S RR4      pVR	9   d   R# \        \        S RR4      \        4      '       d   \	        \        S RR4      4      '       d   \        ;QJ d    . R S P
                   4       F  NK  	  5M! R S P
                   4       4      pV\        38X  d   R# V'       dC   \        ;QJ d    V 3R lV 4       F  '       g   K   RM	  RM! V 3R lV 4       4      '       d   R# R#   \         d     R# i ; i)
zhTest if an object is a namedtuple or a (torch.return_types|torch.autograd.forward_ad).* quasi-namedtuplerd   NT_fields_makec              3  <   "   T F  q\         Jg   K  Vx  K  	  R # 5ir   )r   )r   ts   & rl   r   $is_namedtuple_cls.<locals>.<genexpr>
  s     KA7:Jaas   
c              3  z   <"   T F0  p\        V4      ;'       d    SP                  VP                  J x  K2  	  R # 5ir   )r1  __new__)r   r8  r   s   & rl   r   r9  !
  s@      ! #	 *!, 5 5KK19945 #s   ;!;F)torch.return_typesztorch.autograd.forward_ad)
issubclassr  r  r  callable	__bases__anyr<  )r   modulebasess   f  rl   r1  r1  
  s    c5!!S,5FLL'#y$7??HWd+E E KKKKKUH$SS ! #!SSS ! #!       s;   D D AD 7AD :D 
D D $D DDc                    V ^8  d   QhRRRR/# )rq   r   r  ru   tuple[str, ...]rb   )rw   s   "rl   rx   rx   1
  s     1 14 1O 1rk   c                V   V \         J d   R# \        V \        4      '       g   Q h\        V R4      '       d   V P                  # \
        P                   ! R R4      4       pV P                  R8X  g   Q hV ! \        V\        V P                  4      4      4      p/ p\        V4       FG  pV^ ,          R8w  g   K  \        \        W$4      V4      '       g   K0  \        W$4      P                  W4&   KI  	  \        V4      V P                  8X  g   Q h\        \!        W3P"                  R7      4      # )zIGet the fields of a namedtuple or a torch.return_types.* quasi-namedtupler5  c                  "    ] tR tRt$ R]R&   RtR# )!namedtuple_fields.<locals>.Markeri;
  rt   indexrb   Nrc   rd   re   rf   r   rj   rb   rk   rl   MarkerrG  ;
  s    
rk   rJ  r<  r  )r   )startstopstep)slicer=  r  r   r5  r
  	dataclassrd   r   r  n_fieldsdirr  r  rH  r  r  r   )r   rJ  rj  fieldsr~   s   &    rl   namedtuple_fieldsrS  0
  s     e|((c5!!!!sI{{   >>1111
c&%-.
/CFC7c>j);VDD"3-33FL  v;#,,&&&JJ/00rk   c                    V ^8  d   QhRRRR/# )rq   gmr  ru   zCallable[[], None]rb   )rw   s   "rl   rx   rx   J
  s      . 3E rk   c           
     t  aaa \         P                  ! 4       ;_uu_ 4        \         P                  ! \         P                  P	                  4       4      o\         P
                  P                  4       '       d3   \         P                  ! \         P
                  P	                  4       4      o\        P                  ! V P                  4       V P                  4       4       Uu. uF%  pWP                  \         P                  ! V4      3NK'  	  upoR R R 4       R VVV3R llpV# u upi   + '       g   i     L"; i)Nc                   V ^8  d   QhRR/# r   rb   )rw   s   "rl   rx   'checkpoint_params.<locals>.__annotate__U
  s     0 0T 0rk   c                   < \         P                  ! 4       ;_uu_ 4        \         P                  P                  S4       \         P                  P                  4       '       d    \         P                  P                  S4       S F*  w  rpV P                  V8w  g   K  V P                  V4       K,  	  R R R 4       R #   + '       g   i     R # ; ir   )rG  r  r  r  r  r  _versionr  )paramr  original_valuer  r  saved_states      rl   restore"checkpoint_params.<locals>.restoreU
  sx    ]]__LL&&y1zz&&((

((82=.>>W,KK/ 3>	 ___s   A9B<B<<C	)rG  r  r  r  r  r  r  r   r   
parametersbuffersrZ  )rU  r[  r^  r  r  r]  s   &  @@@rl   checkpoint_paramsrb  J
  s    	KK : : <=	::""$$"[[)A)A)CDN #"**,G
 H NNEKK$67G
	 
0 0 N
	 
s   B>D'+D"
D'"D''D7	c               (    V ^8  d   QhRRRRRRRR/# )	rq   r  r   r  Iterable[Any]timesrt   ru   ztuple[Any, float]rb   )rw   s   "rl   rx   rx   a
  s,       -69rk   c                   \         P                  P                  4       '       d   \         P                  P                  pM\        pV! 4        \
        P                  ! 4        \         P                  ! R 4       \        P                  ! 4       p\        V4       F  pV ! V!  pV! 4        K  	  \        P                  ! 4       pXWt,
          3# )i9  )rG  r  r  synchronizerB  gccollectmanual_seedr  perf_counterr  )r  r  re  rg  t0r  r  t1s   &&&     rl   timedrn  a
  s     zz  jj,,MJJL	d				B5\'  
			B27?rk   c               $    V ^8  d   QhRRRRRR/# )rq   rU  r  r  rd  ru   r  rb   )rw   s   "rl   rx   rx   t
  s'     X X* XM Xd Xrk   c           	         \         ;QJ d?    R  \        P                  ! WP                  R4      4       4       F  '       d   K   R# 	  R# ! R  \        P                  ! WP                  R4      4       4       4      # )c              3  8   "   T F  qP                   x  K  	  R # 5ir   )is_cudar   r  s   & rl   r    check_is_cuda.<locals>.<genexpr>u
  s     W"VQyy"V   TF)allr   r   r`  )rU  r  s   &&rl   check_is_cudarw  t
  sQ    3W)//.--PTBU"VW33W3W3W)//.--PTBU"VWWWrk   c                    V ^8  d   QhRRRR/# )rq   r3  rt   ru   Callable[..., Any]rb   )rw   s   "rl   rx   rx   y
  s      C . rk   c                   V ^8  g   Q h\        V 4       Uu. uF  pRV 2NK
  	  pp\        VR	R VRR	 ,           4      p\        RRP                  V4       RRP                  V4       R24      pRV  R2Vn        V# u upi )
r   rD  Nzlambda r  z: ()rot__helperrk  )r  reversedevalr   rc   )r3  r  varsrotatedr  s   &    rl   rot_n_helperr  x
  s    q5L5"1X&XasGXD&tBCy49,-G	's388G+<*=Q?	@B7#BKI	 's   A<z	set[type]common_constant_typesc                    V ^8  d   QhRRRR/# )rq   rD  r   ru   r  rb   )rw   s   "rl   rx   rx   
  s        rk   c                N   \        V \        \        34      '       d   \        \	        \
        V 4      4      # \        V \        P                  \        \        P                  \        P                  \        P                  34      ;'       g    \        V \         \"        0,          4      # r   )ro  r  	frozensetrv  r   is_safe_constantr  enumEnumr  rG  Sizer  _GenericAliasr  GenericAliasr  rN  r)  s   &rl   r  r  
  s    a%#$$3'+,,	IIJJ  	
	   
	'
rk   c                   V ^8  d   QhRR/# )rq   ru   zset[int]rb   )rw   s   "rl   rx   rx   
  s      ( rk   c                 
    ^ ^0# r  rb   rb   rk   rl   common_constantsr  
  s    
 	
		 rk   c                    V ^8  d   QhRRRR/# )rq   r   r   ru   z'TypeGuard[torch.SymBool | torch.SymInt]rb   )rw   s   "rl   rx   rx   
  s        G rk   c                    \        V \        P                  \        P                  34      ;'       dH    \        V P                  \        P
                  P                  P                  P                  4      '       * # r   )	r  rG  SymBoolSymIntr  nestedr  
nested_intNestedIntNoder  s   &rl   is_torch_symr  
  sU    eemmU\\:;  J

ELL**55CCE A rk   c               $    V ^8  d   QhRRRRRR/# )rq   r   r   sourceru   r  rb   )rw   s   "rl   rx   rx   
  s!      c 3 4 rk   c                   ^RI Hp \        P                  ! 4       P                  '       * ;'       Ed    VP
                  P                  4       '       * ;'       g    VP
                  P                  4       ;'       d    \        P                  '       * ;'       g    VP
                  P                  4       ;'       d    \        P                  '       * ;'       gu    VP
                  P                  4       ;'       d    \        P                  '       * ;'       g6    V! V4      ;'       g&    \        R4      '       * ;'       d    V \        4       9   # )r   )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_modulerH   allow_unspec_int_on_nn_module"is_unspecialized_builtin_nn_moduleis_unspecialized_nn_moduler#   r  )r   r  r  s   && rl   is_int_specialization_caser  
  s   (!!#GGG  ((** 	
 	

 88: 9 9888	
 	
 BBD 9 9888	
 	
 ::< 9 9888	
 	
  F#!	
 	
(   WXX , ,)++/rk   c                    V ^8  d   QhRRRR/# rq   r  r   ru   rb   )rw   s   "rl   rx   rx   
  s      C C rk   c                   ^RI HpHpHp \	        W4      '       d   V P                  4       '       g   V P                  4       pV P                  4       p\        V4      ;'       gG    \        P                  '       * ;'       d*    \        V4      \        J ;'       d    \        WT4      '       * pV'       g   V # \	        W4      '       d    VP                  V P                  4       4      # V # )r   )ConstantVariableLazyVariableTrackerSymNodeVariable)	variablesr  r  r  r  is_realizedoriginal_sourcer\  r  rH   specialize_intr  rt   r  r  evaluate_expr)r  r  r  r  r  r   is_symnode_vts   &      rl   specialize_symnoder  
  s    QQ #++COO4E4E $$&""$$U+ 
 
%%% > >Us"> >.u== 	 J#''&&s'8'8':;;Jrk   c                    V ^8  d   QhRRRR/# r  rb   )rw   s   "rl   rx   rx     s      c c rk   c                    ^RI Hp \        V 4      p \        W4      '       d'   V P	                  4       '       d   V P                  4       # V # )r   r@   )r  rA   r  r  is_python_constantas_python_constant)r  rA   s   & rl   guard_if_dynr    s<    *
S
!C#''C,B,B,D,D%%''Jrk   c               $    V ^8  d   QhRRRRRR/# rq   r_  rd  ra  zMapping[Any, Any]ru   r  rb   )rw   s   "rl   rx   rx     s'     W Wm W5F W4 Wrk   c                    \         ;QJ d>    R  \        P                  ! WP                  4       4       4       F  '       d   K   R# 	  R# ! R  \        P                  ! WP                  4       4       4       4      # )c              3  @   "   T F  qP                  4       x  K  	  R # 5ir   )r  rs  s   & rl   r   &check_constant_args.<locals>.<genexpr>  s     V/U!##%%/Ur  FT)rv  r   r   r  rA  s   &&rl   check_constant_argsr    sI    3Vyt]]_/UV33V3V3Vyt]]_/UVVVrk   c               $    V ^8  d   QhRRRRRR/# r  rb   )rw   s   "rl   rx   rx     s#     
 
= 
:K 
PT 
rk   c                
   ^RI Hp ^RIHp ^ p\        P
                  ! WP                  4       4       FI  p\        WS4      '       d   V^,          pK  \        WR4      '       d   VP                  4       '       d   KH   R# 	  V^ 8  # )r   r@   UnspecializedPythonVariableF)	r  rA   variables.tensorr  r   r   r  r  r  )r_  ra  rA   r  unspec_countr  s   &&    rl   check_unspec_python_argsr    sd    *=L__T==?3a55ALQ00Q5I5I5K5K	 4
 !rk   c               $    V ^8  d   QhRRRRRR/# r  rb   )rw   s   "rl   rx   rx     s$     
 


!2
	
rk   c                    ^RI Hp \        P                  ! WP	                  4       4       F/  pVP                  4       '       d   K  \        W24      '       d   K.   R# 	  R# )r   r  FT)r  r  r   r   r  r  r  )r_  ra  r  r  s   &&  rl   check_unspec_or_constant_argsr    sA    
 >__T==?3$$&&*Q*T*T 4 rk   c               $    V ^8  d   QhRRRRRR/# r  rb   )rw   s   "rl   rx   rx   ,  s#      = :K PT rk   c                  a ^RI Ho \        ;QJ dA    V3R l\        P                  ! WP                  4       4       4       F  '       g   K   R# 	  R# ! V3R l\        P                  ! WP                  4       4       4       4      # )r   )NumpyNdarrayVariablec              3  <   <"   T F  p\        VS4      x  K  	  R # 5ir   )r  )r   r  r  s   & rl   r   +check_numpy_ndarray_args.<locals>.<genexpr>/  s#      7A 	1*++7s   TF)r  r  r@  r   r   r  )r_  ra  r  s   &&@rl   check_numpy_ndarray_argsr  ,  s_    63 }}733 3 3 }}7  rk   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_iteratorKVc                    V ^8  d   QhRRRR/# )rq   r  
dict[K, V]ru   zKeysView[K]rb   )rw   s   "rl   rx   rx   Z  s        rk   c                \    \        V \        4      '       g   Q h\        P                  V 4      # r   )r  r  r  )r  s   &rl   builtin_dict_keysr  Z  s#    a99Q<rk   c                    V ^8  d   QhRRRR/# )rq   rj  r  ru   zIterable[tuple[K, V | Any]]rb   )rw   s   "rl   rx   rx   `  s     G GZ G,G Grk   c                   \        V \        4      '       g   Q h\        V \        \        34      '       d   V P	                  4       # \        V \        4      '       d<   \        P
                  ! V 4       Uu. uF  q\        P                  ! W4      3NK  	  up# \        P                  V 4       Uu. uF  q\        P                  W4      3NK  	  up# u upi u upi r   )r  r  ro  r   r   r  rN  )rj  rC  s   & rl   get_items_from_dictr  `  s    c4    cD+&''yy{	C	%	%>I>N>Ns>ST>SK++C34>STT7;yy~F~!D$$S,-~FF UFs   3 C-Cc                    V ^8  d   QhRRRR/# )rq   rj  r  ru   z Iterable[tuple[int, K, V | Any]]rb   )rw   s   "rl   rx   rx   k  s     9 9	9%9rk   c                   a \        V 4      p\        V \        4      '       d?   \        \        P                  V 4      4       UUu/ uF  w  r#W2bK	  	  uppoV3R lV 4       # R \        V4       4       # u uppi )a  Enumerate dict items yielding (dict_keys_position, key, value).

For OrderedDicts where move_to_end/prepend has been used, the OrderedDict
iteration order can differ from dict.keys() order.  We iterate in
OrderedDict order (correct execution semantics) but return each key's
dict.keys() position so that ConstDictKeySource indices stay consistent
with PyDict_Next / C++ DictGuardManager.
c              3  >   <"   T F  w  rSV,          W3x  K  	  R # 5ir   rb   )r   rC  rD  
key_to_poss   &  rl   r   5enumerate_items_with_dict_position.<locals>.<genexpr>y  s     8%$!A%%   c              3  4   "   T F  w  pw  r#WV3x  K  	  R # 5ir   rb   )r   r  rC  rD  s   &   rl   r   r  z  s     8'7)!VaQ1I'7rF  )r  r  r   	enumerater  r  )rj  r   r  rC  r  s   &   @rl   "enumerate_items_with_dict_positionr  k  sd      $E#{##'03'@A'@tqad'@A
8%888y'788 Bs   A3c                    V ^8  d   QhRRRR/# rq   r   r   ru   rb   )rw   s   "rl   rx   rx   }  s      s s rk   c                n    \        V 4      p\        P                  P                  P	                  V4       V# r   )
object_newrG  r  Moduler  )r   rj  s   & rl   nn_module_newr  }  s&    
S/C	HHOOS!Jrk   c                    V ^8  d   QhRRRR/# )rq   itzIterable[T]ru   rt   rb   )rw   s   "rl   rx   rx     s     1 1 1 1rk   c                N    \         P                  ! \        P                  V ^4      # r  )r  reduceoperatormul)r  s   &rl   productr    s    HLL"a00rk   c               $    V ^8  d   QhRRRRRR/# )rq   r  r   rH  rt   ru   rb   )rw   s   "rl   rx   rx     s!      s 3 3 rk   c                J    V P                  4       w  pw  r4W4V,           ,          # r   )
__reduce__)r  rH  r  rj  rK  s   &&   rl   tuple_iterator_getitemr    s!    }}Avu}rk   c                    V ^8  d   QhRRRR/# r  rb   )rw   s   "rl   rx   rx     s     : :# :# :rk   c                h    \         P                  P                  \        P                  4      ! V 4      # r   )rG  _dynamodisabler
  rR  r   s   &rl   dataclass_fieldsr    s"    ==  !3!34S99rk   c                    V ^8  d   QhRRRR/# )rq   
count_iterzIterator[Any]ru   ztuple[Any, Any]rb   )rw   s   "rl   rx   rx     s      ]  rk   c                6    V P                  4       w  r\        T4      ^8X  d   T^ ,          ^3# T^ ,          T^,          3#   \         d    ^ RIp\        T 4      pTP	                  R4      '       d   TP                  R4      '       g   \        \        3u #  TP                  RT^R  R24      pM%  \        \        3 d    \        \        3u u # i ; i\        T\        4      '       d   ^\        T4      u;8:  d   ^8:  g   M \        \        3u #  ELi ; i)r{   Nzcount(r{  (,)rk  )r  r<  astr  
startswithr  NotImplementedliteral_evalSyntaxErrorr=  r  r  r  )r  r  r_  r  
count_reprs   &    rl   normalize_count_iterr    s   4'')  4yA~Q|GT!W#  4 	*%
$$X..j6I6I#6N6N"N33	4##a
1R(8'9$<=DZ( 	4"N33	4$&&a3t9.A.A"N33 /B4s<   A AD	DB10D1CDC?DDc                    V ^8  d   QhRRRR/# )rq   
range_iterr   ru   ztuple[int, int, int]rb   )rw   s   "rl   rx   rx     s      S -A rk   c                    V P                  4       w  pw  r#VP                  T;'       g    ^ VP                  ,          ,           pVP                  pVP                  pWEV3# r  )r  rK  rM  rL  )r  r  	range_obj	maybe_idxrK  rL  rM  s   &      rl   normalize_range_iterr    sS    !+!6!6!8A|	 OOy~~A??E>>D>>Drk   c               $    V ^8  d   QhRRRRRR/# )rq   r8  r   r   r  ru   rb   )rw   s   "rl   rx   rx     s!      3 T c rk   c                $    V P                  V4      # r   )as_subclass)r8  r   s   &&rl   to_subclassr    s    ==rk   c               $    V ^8  d   QhRRRRRR/# )rq   r  dict[Any, Any]r3  rt   ru   r   rb   )rw   s   "rl   rx   rx     s!     : : :C :C :rk   c                v    \        \        P                  ! \        P	                  V 4      W^,           4      4      # r  )nextr   islicer  r  )r  r3  s   &&rl   dict_keys_getitemr    s(    
 	  1qa%899rk   c               $    V ^8  d   QhRRRRRR/# )rq   r  zset[T]r3  rt   ru   rM   rb   )rw   s   "rl   rx   rx     s!      6 c a rk   c                &    \        V 4      V,          # r   r  )r  r3  s   &&rl   set_getitemr    s    71:rk   c               $    V ^8  d   QhRRRRRR/# )rq   r   r   rE  r  ru   r   rb   )rw   s   "rl   rx   rx     s!      S  # rk   c                v    V P                   P                  pV P                  pV'       d   R MRpV RV RV 2pV# )LGz["z"].)r  rc   r~   )r   rE  r~   r  r  
local_names   &&    rl   	enum_reprr    sA     ??##D
**CCcE7"TF#cU+Jrk   c               $    V ^8  d   QhRRRRRR/# )rq   r  torch.fx.Nodeexample_valuer   ru   rv   rb   )rw   s   "rl   rx   rx     s!     8 8M 8# 8$ 8rk   c                   WP                   R &   \        P                  ! 4       P                  pVf   Q hVP                  p\
        P                  P                  P                  P                  W14      ;p'       d   W@P                   R&   R# R# )r"  Nunbacked_bindings)
r  r!   r   	fake_mode	shape_envrG  r   experimentalsymbolic_shapescompute_unbacked_bindings)r  r"  r%  r&  symbol_to_paths   &&   rl   set_example_valuer+    s~     "/IIo""$..I   ##I 88  00JJ
	
 	

 *8		%&	
rk   c                    V ^8  d   QhRRRR/# )rq   vtrA   ru   r   rb   )rw   s   "rl   rx   rx     s       S rk   c                    V P                  4       P                  P                  P                  R 4      p\	        V4      '       g.   ^RIHp ^RIHp V! R\        V4      R. VP                  OR7       V# )r"  graph_break_hintsr  z:Cannot check Tensor object identity without its fake valuez/TensorVariable is missing a fake example_value.r  r  r  r  )r  r  r  r   rK   r  r0  r  r  r   
DYNAMO_BUG)r-  fake_tensorr0  r  s   &   rl   _get_fake_tensorr4    sb    ++-$$))--o>K;'&P$I1%001		
 rk   c               $    V ^8  d   QhRRRRRR/# )rq   r  rN  seq_lenrt   ru   rb   )rw   s   "rl   rx   rx     s&     M ME MC MC Mrk   c                    V P                  V4      w  r#p\        ^ W2,
          YD^ 8  d   ^MR,
          ,           V,          4      # )r{   rk  )indicesmax)r  r6  rK  rL  rM  s   &&   rl   slice_lengthr:    s9    		'*Eq4<4q1b#ABtKLLrk   c          
     ,    V ^8  d   QhRRRRRRRRRR/# )	rq   txr?   r~   r   expectactualru   rv   rb   )rw   s   "rl   rx   rx     s:      !
  	
 
rk   c                H    ^ RI Hp RV RV RV 2pV! \        V V.R7       R# )r{   )raise_observed_exceptionz3wrong number of arguments or keyword arguments for z() call.
  Expect: z
  Actual: r  N)torch._dynamo.excr@  r<  )r<  r~   r=  r>  r@  msg_strs   &&&&  rl   raise_args_mismatchrC    sD     ; >dV DH H	  
Yrk   c          
     ,    V ^8  d   QhRRRRRRRRR	R/# )
rq   r   rd  searchr   r<  r>   check_tensor_identityr  ru   rb   )rw   s   "rl   rx   rx     s:     * *** 	*  	*
 	*rk   c                  a ^RI Hp SP                  4       '       dL   \        ;QJ d    V3R lV  4       F  '       g   K   RM	  RM! V3R lV  4       4      pVP	                  V4      # RpV'       d$   SP                  4       '       d   Rp\        S4      oRpV  F  pV'       d=   VP                  4       '       d%   S\        V4      J d   VP	                  R4      u # KE  KG  ^ RIHp	 V	P	                  V\        P                  4      P                  W(S./ 4      p
Vf   T
pK  V	P	                  V\        P                  4      P                  W*V./ 4      pK  	  Vf   VP	                  R4      pV# )r   )r  c              3     <"   T F>  pVP                  4       ;'       d"    VP                  4       SP                  4       8H  x  K@  	  R # 5ir   )r  r  )r   r  rE  s   & rl   r    iter_contains.<locals>.<genexpr>  sO      
    " F F$$&&*C*C*EEFs
   A	*A	TFN)SourcelessBuilder)r  r  r  r@  r  	is_tensorr4  torch._dynamo.variables.builderrJ  r  eqcall_functionor_)r   rE  r<  rF  r  found_constmust_check_tensor_idfoundr  rJ  checks   &f&&       rl   iter_containsrT    sI    ,  ""c 
 
ccc 
 
 

  &&{33 !1!1!3!3#!&)$(E{{}}-a00+22488 1  J%,,R=KKKE })00X\\BPP " } ''.Lrk   c                    V ^8  d   QhRRRR/# )rq   rC  r   ru   z:TypeIs[torch.Tensor | torch.nn.Module | MethodWrapperType]rb   )rw   s   "rl   rx   rx   @  s      M M
M?Mrk   c                t    \        V \        P                  \        P                  P                  \
        34      # )z4Returns whether it indexes dictionaries using its id)r  rG  r  r  r  r
   )rC  s   &rl   	key_is_idrW  @  s%     a%,,9JKLLrk   c                    V ^8  d   QhRRRR/# )rq   r   r   ru   	list[Any]rb   )rw   s   "rl   rx   rx   G  s     9 9S 9Y 9rk   c                h    V  Uu. uF!  p\        V4      '       d   \        V4      MTNK#  	  up# u upi r   )rW  rM  )r   rC  s   & rl   	key_to_idr[  G  s+    278%QYq\\BqEq(%888s   '/c               $    V ^8  d   QhRRRRRR/# )rq   r  r   rE  ru   r   rb   )rw   s   "rl   rx   rx   K  s!      #   rk   c                 a ^RI Hp \        V \        \        34      '       dl   RP                  V3R lV  4       4      p\        V \        4      '       d   RV R2# \        V \        4      '       g   Q h\        V 4      ^8X  d   RV R2# RV R2# \        V \        P                  4      '       d   \        V SR	7      P                  R
R4      # V! V 4      '       d   V P                  # \        V \        4      '       d   R R lpV! V 4      # V : # )r   )is_builtin_callabler  c              3  >   <"   T F  p\        VSR 7      x  K  	  R# 5irE  N
const_reprr   r  rE  s   & rl   r   const_repr.<locals>.<genexpr>O  s     D!Qj%88!r  []r  r  r{  ra  'r  c                    V ^8  d   QhRRRR/# )rq   r  r   ru   r   rb   )rw   s   "rl   rx    const_repr.<locals>.__annotate__`  s     	5 	5 	5 	5rk   c                    V P                   pVP                  pVR 8X  d   VP                  # VR,           VP                  ,           # )builtins.)r  rd   re   )r  klassrA  s   &  rl   fullnameconst_repr.<locals>.fullname`  s?    KKE%%F#)))C<%"4"444rk   )trace_rulesr^  r  r  r  r   r  r  r  r  replacerc   r  )r  rE  r^  
elems_reprro  s   &d   rl   rc  rc  K  s    0!dE]##XXD!DD
azl!$$a''''1v{:,b)):,a((	Atyy	!	! %(00b99	Q		zz	At			5 {rk   c               $    V ^8  d   QhRRRRRR/# )rq   
const_keysr   rE  ru   r   rb   )rw   s   "rl   rx   rx   l  s!        s  c  c  rk   c               Z   a R P                  V3R lV  4       4      pRV,           R,           # )r  c              3  >   <"   T F  p\        VSR 7      x  K  	  R# 5ir`  rb  rd  s   & rl   r   !dict_keys_repr.<locals>.<genexpr>m  s     GJq
1E22Jr  rf  rg  )r   )ru  rE  keys_strs   &d rl   dict_keys_reprrz  l  s&    xxGJGGH>Crk   
__dict_key)UnsupportedFakeTensorExceptionc               (    V ^8  d   QhRRRRRRRR/# )rq   r<  r?   rootr   rj  r   ru   rb   )rw   s   "rl   rx   rx   w  s*     7 76 7c 7 7PS 7rk   c                P    V R \        V4       RV P                  P                   2# )r  _c)rM  outputrv  )r<  r~  rj  s   &&&rl   get_safe_global_namer  w  s*     V1RWIR		 4 4566rk   c               $    V ^8  d   QhRRRRRR/# )rq   r  rM   
containerszContainer[T]ru   r  rb   )rw   s   "rl   rx   rx     s!         rk   c                *    V F  pW9   g   K   R # 	  R# r:  rb   )r  r  	containers   &* rl   is_inr    s    	   rk   requires_suffixc               (    V ^8  d   QhRRRRRRRR/# )rq   prefixr   r  r   r  r  ru   rb   )rw   s   "rl   rx   rx     s,     ( ((!(48((rk   c                   V'       g   \        V .VO5!  '       g   V # \        P                  ! 4        F!  pV  RV 2p\        V.VO5!  '       d   K  Vu # 	  \        R4      h)za
Return a name that starts with `prefix` and is not in any of the
`containers` (e.g., map, set).
r  unreachable)r  r   r   r  )r  r  r  r  	candidates   &$*  rl   get_unique_name_wrtr    s^     5#=*#=#=__hasO	Y,,, 
 
''rk   c                    V ^8  d   QhRRRR/# )rq   r  zCallable[[], Any]ru   r   rb   )rw   s   "rl   rx   rx     s     
 
- 
# 
rk   c           	          V ! 4       #   \          dW   p^RIHp RTP                   R2p\        P                  T4       T! R\        TP                  4      T. TR7        Rp?R# Rp?ii ; i)r   r  zEncountered exception (z!) during fake tensor propagation.z!Fake tensor propagation exceptionr  N)r|  r  r  reasonr   r%  r   )r  r!  r  r  s   &   rl   wrap_fake_exceptionr    sd    
t) 
&'z1RSC7M	
 	

s   	 A*AA%%A*c               $    V ^8  d   QhRRRRRR/# )rq   rj  r   r%  ,torch._subclasses.fake_tensor.FakeTensorModeru   rb   )rw   s   "rl   rx   rx     s$     ? ?	?E??rk   c                   a  \         P                  P                  P                  V4      ;_uu_ 4        \	        V 3R  l4      uuRRR4       #   + '       g   i     R# ; i)c                 0   < \         P                  ! S 4      # r   )r  deepcopyr.  s   rl   r  )deepcopy_to_fake_tensor.<locals>.<lambda>  s    4==+=rk   N)rG  r  r3  FakeCopyModer  )rj  r%  s   f&rl   deepcopy_to_fake_tensorr    s:     
			&	&	3	3I	>	>"#=> 
?	>	>	>s   AA	c               $    V ^8  d   QhRRRRRR/# )rq   r\  r  r   ru   rb   )rw   s   "rl   rx   rx     s!     ; ;l ; ;, ;rk   c                    \         P                  ! \         P                  ! \         P                  ! W,
          4      4      4      # )z#
Calculate root mean squared error
)rG  sqrtmeansquare)r\  r   s   &&rl   rmser    s'     ::ejjci!89::rk   c               (    V ^8  d   QhRRRRRRRR/# )rq   r\  r   r   	equal_nanr  ru   rb   )rw   s   "rl   rx   rx     s(      c    rk   c                     \        V VR VR7      # )g        )tolr  same)r\  r   r  s   &&&rl   bitwise_samer    s    	 rk   g-C6?TGz?c               T    V ^8  d   Qh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/# )rq   r\  r   r   fp64_refcos_similarityr  r  floatr  exact_dtyperelax_numpy_equalityignore_non_fp	log_errorzCallable[..., None](use_larger_multiplier_for_smaller_tensorforce_max_multiplieruse_iou_for_booliou_thresholdru   rb   )rw   s   "rl   rx   rx     s     LF LF	LF	LF LF 	LF
 
LF LF LF LF LF #LF /3LF LF LF LF 
LFrk   c                r  a aaaaaaaaa	a
aaaa Sf   S o\        S \        \        \        P                  \
        P                  P                  \
        P                  34      '       d   \        S\        \        \        P                  34      '       g    Q R\        S 4       R\        S4       24       h\        S 4      \        S4      8w  d   S	! R4       R# \        S 4      \        S4      8H  ;'       de    \        ;QJ d4    VVVVVVV	VVVV
3R l\        S SS4       4       F  '       d   K   R# 	  R# ! VVVVVVV	VVVV
3R l\        S SS4       4       4      # \        S 4      P                  R8X  d8   \        S P                  SP                  SP                  SSSSSSS	S
SSSR	7      # \        S \         4      '       d   \        S\         4      '       g   Q h\#        S P%                  4       4      \#        SP%                  4       4      8X  g<   Q R
\#        S P%                  4       4       R\#        SP%                  4       4       24       h\'        S P%                  4       4       FC  p\        S V,          SV,          SV,          SSSSSSS	S
SSSR7      '       d   K9  S	! RV4        R# 	  R# \        S \"        4      '       dS   \        S\"        4      '       g   Q h\#        S 4      \#        S4      8X  g    Q R\#        S 4       R\#        S4       24       hR# \        S \
        P(                  \*        34      '       Edc   \        S \
        P,                  P.                  4      '       d   Q h\        S\
        P,                  P.                  4      '       d   Q hR R loV3R lS SS3 4       w  o ooS P0                  '       d5   SP0                  '       g   Q hS P3                  4       o SP3                  4       o\        S\
        P(                  4      '       g    Q R\        S 4       R\        S4       24       hS'       Ed   S P4                  SP4                  8w  d!   S	! RS P4                  SP4                  4       R# S P4                  \
        P6                  8X  Ed   S'       d   R# S'       Ed   S S,          P9                  4       P+                  4       pS S,          P9                  4       P+                  4       pV^ 8X  d   \7        V^ 8H  4      # VV,          P;                  4       pVS8  d   S	! RVS\=        VP;                  4       4      \=        VP;                  4       4      \=        S P9                  4       P;                  4       4      \=        SP9                  4       P;                  4       4      \        S P>                  4      4       R# R# \
        P@                  ! S PC                  \
        PD                  R7      SPC                  \
        PD                  R7      SSSR7      pV'       g	   S	! R4       V# S'       Ed    S PG                  4       PC                  \
        PH                  4      o SPG                  4       PC                  \
        PH                  4      o\
        P@                  ! S SSSRR7      '       d   R# \
        P                  PJ                  PM                  S S^ RR7      pVR8  dA   \N        PQ                  RVPS                  4       PU                  4       P;                  4       4       \7        VR8  4      # S'       g   S PC                  SP4                  4      o \
        P@                  ! S SSSSR7      '       d   R# SP4                  \
        PV                  8X  Ed   R&pSPY                  4       P[                  4       '       g   SPY                  4       P[                  4       '       gb   S PY                  4       P[                  4       '       d>   \
        P@                  ! SPC                  SP4                  R7      SVVSR7      '       d   R# \]        SS 4      P;                  4       p\^        PX                  ! V4      '       d   \N        PQ                  R4       \]        SS4      P;                  4       pR VVV VVV
3R llpV! 4       pVVV,          SR,          ,           8*  pV'       gw   S'       do   \^        PX                  ! V4      '       dS   \^        PX                  ! V4      '       d7   \
        P`                  Pb                  Pd                  Pf                  '       g   RpV'       g(   S	! RVVSPi                  4       SP4                  VSS
4       V# S'       d   R# S	! R S4       R# \        S \j        \<        \        R4      \6        \
        Pl                  34      '       d.   S'       d   R# S S8H  pV'       g   S	! R!\        S 4      S S4       V# \o        S 4      '       g   \q        S 4      '       dr   S'       d3   \o        S4      '       g"   \q        S4      '       g   S P;                  4       o \        S 4      \        S4      J ;'       d    S S8H  pV'       g   S	! R"S S4       V# \s        S 4      '       d]   \        S 4      \        S4      J ;'       d?    \        \
        Pt                  ! S 4      \
        Pt                  ! S4      SSSSSSSS	S
R#7      # \        S 4      P                  R'9   d}   \        S 4      \        S4      J g   Q h\        ;QJ d3    VVVVVV	V VVVV
3R$ lS Pv                   4       F  '       d   K   R# 	  R# ! VVVVVV	V VVVV
3R$ lS Pv                   4       4      # \y        R%\        S 4      P                   24      h)(z-Check correctness to see if ref and res matchNztype mismatch r   zLength mismatchFc              3  \   <"   T F!  w  rp\        VVVSSSSSSS
SSSS	R 7      x  K#  	  R# 5i)r  r  r  r  r  Nr  )r   aibi	fp64_refir  r  r  r  r  r  r  r  r  r  r  s   &   rl   r   same.<locals>.<genexpr>  sU      ,
" &=!	! $#9a%9!1+   &=s   ),TQuestionAnsweringModelOutputr  zkeys mismatch z == )r  r  r  r  r  r  r  r  r  r  r  zAccuracy failed for key name %szelements mismatch c                    V ^8  d   QhRRRR/# )rq   r8  r   ru   r  rb   )rw   s   "rl   rx   same.<locals>.__annotate__(  s     	I 	I 	I 	Irk   c                r    \        V \        P                  4      '       d   V # \        P                  ! V 4      # r   )r  rG  r  tensorr8  s   &rl   	to_tensorsame.<locals>.to_tensor(  s%    "1ell331HaHrk   c              3  4   <"   T F  pS! V4      x  K  	  R # 5ir   rb   )r   r  r  s   & rl   r   r  +  s     M8Linn8Lr  zdtype mismatch %s, %sz^IoU accuracy failed: %.4f < %.2f (intersection=%d, union=%d, ref_sum=%d, res_sum=%d, shape=%s)r  )atolrtolr  z+Accuracy failed: uint8 tensor did not matchgư>)dimepsr  zSimilarity score=%sz=Found nan in reference. Consider running in higher precision.c                   V ^8  d   QhRR/# )rq   ru   r  rb   )rw   s   "rl   rx   r    s     !& !& !&rk   c                   < S'       d   R # SP                   \        P                  \        P                  39   d   RMRp S'       d   SP	                  4       ^
8:  d   R p V # S'       d   SP	                  4       R8:  d   Rp V # SP	                  4       R8  gL   SP
                  ^8X  d4   SP                  R,          SP                  R,          u;8X  d   ^8X  g
   M SR8  d   Rp V # )	      $@g      @g       @i  g       @r  rk  g{Gz?)r  rG  r  bfloat16numelndimr  )
multiplierr  r  r\  r   r  r  s    rl   get_multipliersame.<locals>.get_multiplier  s     ,#  #yyU]]ENN,KKQT  @ (B.%)
 &% B (C/%(
 &% !(4/HHMciimsyy}.QPQ.Q(?
 &)
%%rk   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r  r  r  r  r  r  r  r  c              3     <"   T F9  p\        \        SV4      \        S
V4      \        SV4      SSSSS	SSSR 7      x  K;  	  R# 5i)r  N)r  r  )r   r   r  r  r  r  r  r  r\  r  r   r  r  s   & rl   r   r    s\      
 $ S!S!#&-#'%9+#9a  $s   AAzunsupported type: g{Gz?)MaskedLMOutputSeq2SeqLMOutput!CausalLMOutputWithCrossAttentionsLongformerMaskedLMOutput	InstancesSquashedNormalBoxesNormalTanhTransformFooVariable)=r  r  r  r   r  rG  r  ParameterListr  r  r  rv  r  rc   r  lossr  r  r  r  r  r  r  rJ   	is_sparseto_denser  r  r   r  rt   r  allclosetor  flattenr  
functionalcosine_similarityr   r%  detachcpur  isnanr@  r  mathr  rH   cppinject_relu_bug_TESTING_ONLYr  r   r  r  r  r  	as_tensor__dict__r
  )r\  r   r  r  r  r  r  r  r  r  r  r  r  r  rC  intersectionunioniourscore	loose_tol	ref_error	res_errorr  r  passes_testr  s   ffffffffffffff            @rl   r  r    s	   " dE;,,ehh.D.DejjQ  #e[->->?@@ 	
T#YKqc4	
@ s8s3x'(3x3s8# 
 
 ,
 ,
" &)c8%<#,
 	
 	
 ,
 ,
" &)c8%<#,
 )
 	
& 
c		=	= HHHHMM 5]!5-'
 	
  
C		#t$$$$388:#chhj/1 	
S_-T#chhj/1BC	
1 
#AFFQK#1' +)="/'=e)=%5"/ " ;Q?) $* 	C		#s####3x3s8#R'9#c(4Cz%RR#	C%,,.	/	/c5#4#4#?#?@@@@c5#4#4#?#?@@@@	I Nc88LMS(====== =,,.C,,.C#u||,,VtCyk4PS9+.VV,;yyCII%1399ciiHyyEJJ& ## %(#I??#4#:#:#<L 3YOO-335Ez#LA$566'%/557C]*!|) 1 1 34

-	 01	 01 O	  %NNFFF-FFF-' KL>++-""5==1C++-""5==1C~~c3SsdKK HH''99#st9TEt|15<<>3E3E3G3L3L3NO&&ffSYY' ~~c3SsiPP ~~. %	 (,,..IIKOO--		)) #))4&&"+    3/446	::i((KKW !3/446	!& !&F ,-
'J,BS4Z,OP#!

9--

9-- "OO2266SSS"&K"I!!
		"@
 #"CSI	C#sDJellC	D	D3J6S	3L	3		#6s#;#;c""&9#&>&>((*C#Y$s)#55#*93D	#		S	T#Y& 
 
DOOC OOC )#!5'5]-
 	
 
c		   
 CyDI%%%s 
 
 ||
ss 	
s 	
s 
 
 ||
 
 	
" /S	0B0B/CDEErk   c                    V ^8  d   QhRRRR/# )rq   r  r	   ru   r   rb   )rw   s   "rl   rx   rx     s     H H8 H Hrk   c                    V P                   P                  R 4      R,          pRV P                   RV RV P                   R2# )/rh  z' (r   r{  rk  )r1  splitr  r  )r  short_filenames   & rl   format_func_infor    sD    %%++C04Nt||nC/q1D1D0EQGGrk   c                   V ^8  d   QhRR/# r  rb   )rw   s   "rl   rx   rx     s     = =8 =rk   c               #    "   \         P                  p \        P                  \         n        \         P                  p\        P                  \         n         R x  V \         n        V\         n        R #   T \         n        T\         n        i ; i5ir   )rH   recompile_limitr  r  accumulated_recompile_limit)priorprior_acc_limits     rl   disable_cache_limitr    s^     ""E [[F88O),F&=!&-<* "'-<*s   ABA2 B2B

Bz'collections.defaultdict[Any, list[Any]]guard_failuresz3list[torch._dynamo.output_graph.GraphCompileReason]graph_break_reasonsc                    V ^8  d   QhRRRR/# )rq   root_dirr   ru   rb   )rw   s   "rl   rx   rx   6  s     , ,S ,S ,rk   c                    R \         P                   P                  4       P                  R4      ,           R,           \        \        P
                  ! 4       4      ,           p\        P                  P                  W4      # )run_z%Y_%m_%d_%H_%M_%S_%fz-pid_)datetimenowstrftimer   r  getpidr  r   )r
  dir_names   & rl   _get_debug_dirr  5  sd     	





!
*
*+A
B	C 	 biik
		  77<<++rk   c                   V ^8  d   QhRR/# rq   ru   r   rb   )rw   s   "rl   rx   rx   A  s     & &s &rk   c                 8    \         P                  p \        V 4      # r   )rH   r  r  )
debug_roots    rl   r  r  A  s    &&J*%%rk   c               $    V ^8  d   QhRRRRRR/# )rq   r  r!  requiredr  ru   r   rb   )rw   s   "rl   rx   rx   F  s!      ] d c rk   c                   R V P                   9   d6   \        V P                   R ,          4      '       d   V P                   R ,          # V'       d4   ^ RIHp ^RIHp V! R\        V 4      RV  R2. VP                  OR7       R# R# )r"  r  r/  z Missing FakeTensor example valuez,`FakeTensor` example value was required for z but not available.r1  N)r  rK   rA  r  r  r0  r   r2  )r  r  r  r0  s   &&  rl   extract_fake_example_valuer  F  sl    $))#		/0J(K(Kyy))	3'6IFtfL_`1%001		
 rk   c               $    V ^8  d   QhRRRRRR/# )rq   r!  r   r<  r?   ru   rb   )rw   s   "rl   rx   rx   X  s"       ";  rk   c                <    \        V 4      VP                  J g   Q hV # r   )rL   r%  )r!  r<  s   &&rl   ensure_graph_faker  X  s    q!R\\111Hrk   c               (    V ^8  d   QhRRRRRRRR/# )rq   r<  r?   r0  r   allow_non_graph_faker  ru   rb   )rw   s   "rl   rx   rx   ]  s,     / /!/*-/EI//rk   c                l   a a R  VV 3R llp\         P                  P                  P                  W4      # )c                    V ^8  d   QhRRRR/# )rq   r3  r!  ru   r   rb   )rw   s   "rl   rx   0get_fake_values_from_nodes.<locals>.__annotate__`  s       3 rk   c                0  < V P                   R 8X  d   RV P                  9  d   \        V SS4      # V P                   R8X  d   RV P                  9  d}   V P                  SP                  P
                  9   g   Q hSP                  P
                  V P                  ,          p\        V\        P                  P                  4      '       g   Q hV# V P                  R,          pS'       g-   \        V\        P                  4      '       d   \        VS4      # V# )rN  r"  get_attr)r1  r  get_fake_valuetargetr  
nn_modulesr  rG  r   GraphModuler  r  )r3  rU  r   r  r<  s   &  rl   visit)get_fake_values_from_nodes.<locals>.visit`  s    44?"aff'D "!R)=>>TTZO166$A88ryy33333%%ahh/Bb%(("6"67777Iff_%#
3(E(E$S"--
rk   )rG  r   r  map_arg)r<  r0  r  r)  s   f&f rl   get_fake_values_from_nodesr,  ]  s(     " 88==  ..rk   c               $    V ^8  d   QhRRRRRR/# )rq   r  r   r%  zFakeTensorMode | Noneru   rb   )rw   s   "rl   rx   rx   t  s#       9N SV rk   c                   aa ^ RI p^ RIHo Vf   V # RpVP                  f   Q hVP                  pVP                  oR VV3R llpVP
                  ! W5V 4      p V # )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.
N)Integerz
\(s(\d+)\)c                    V ^8  d   QhRRRR/# )rq   matchr   ru   r   rb   )rw   s   "rl   rx   5get_concrete_sizes_from_symints.<locals>.__annotate__  s      3 3 rk   c                   <a R V P                  ^4       2o\        V3R lSP                  4        4       R4      p\        V\        S34      '       d   RS R\        V4       R2# V P                  ^ 4      # )r  c              3  R   <"   T F  w  rVP                   S8X  g   K  Vx  K  	  R # 5ir   )r~   )r   rC  rD  sym_names   &  rl   r   Gget_concrete_sizes_from_symints.<locals>.replace_sym.<locals>.<genexpr>  s"     K441(8JQQ4s   '
'Nr  z	: hint = r{  )groupr  r   r  rt   r   )r1  r  r5  r/  backed_var_to_vals   & @rl   replace_sym4get_concrete_sizes_from_symints.<locals>.replace_sym  sq    u{{1~&'K,224K
 cC>**xj	#c(155{{1~rk   )r  sympy.core.numbersr/  r&  r8  r  )r  r%  r  patternr&  r9  r/  r8  s   &&    @@rl   get_concrete_sizes_from_symintsr=  t  se     *
G***##I!33  &&s
+CJrk   c                    V ^8  d   QhRRRR/# )rq   gb_fnzCallable[[], NoReturn]ru   r   rb   )rw   s   "rl   rx   rx     s     2 24J 2x 2rk   c           	         ^RI HpHp  V ! 4        \        R4      h  T d?   pT! \        T4      \	        TRR4      4      pTP                  TP                  4      RhRp?ii ; i)r   )TorchRuntimeErrorUnsupported
real_stackNzshould be unreachable)r  rA  rB  r   r  with_traceback__traceback__r  )r?  rA  rB  r!  r  s   &    rl   (_wrap_graph_break_with_torch_runtime_errrF    s_    3< 0
11  <A<(FG  1t;<s    A!9AA!c               (    V ^8  d   QhRRRRRRRR/# 	rq   r  r!  r<  r?   r  r  ru   r   rb   )rw   s   "rl   rx   rx     s6     	U 	U
	U!	U 	U 			Urk   c                l   \         P                  ! 4       p \        WV4      VP                  P                  ;P
                  \         P                  ! 4       V,
          ,          un        #   TP                  P                  ;P
                  \         P                  ! 4       T,
          ,          un        i ; ir   )r  r  _get_fake_value_implr  bytecode_tracing_timingsget_fake_value_ns)r  r<  r  _t0s   &&& rl   r%  r%    so    
 ,,.CU#D.BC
		**<<QT@TT<		**<<QT@TT<s   A* *A	B3c               (    V ^8  d   QhRRRRRRRR/# rH  rb   )rw   s   "rl   rx   rx     s6     T T
T!T T 		Trk   c                X  a aaaaaaaa ^ RI Hp ^RIHo ^RIHoHpHpHp S P                  pRS P                  9   d6   \        S P                  R,          4      '       d   S P                  R,          # \        SS P                  S P                  3V4      w  oo\        P                   P"                  P$                  '       g+   \        P                   P"                  P&                  '       dQ   \        S\)        S / 4      V4      pV U	u/ uF,  p	\        V	4      '       g   K  \+        V	4      V	P,                  bK.  	  p
p	M. p/ p
RoSP.                  pVf   Q hVR8X  dm   \1        S4      ^ 8  d]   \3        S^ ,          \        P4                  P6                  4      '       d,   \9        S^ ,          V4      3\;        SR,          4      ,           oVR8X  di   SP<                  P>                  S P@                  ,          o\C        S4      '       d%   \E        SR	4      '       d   SPG                  SS4       \9        SV4      oS PH                  R,9   g;   \J        ;QJ d    R
 S 4       F  '       g   K   RM	  RM! R
 S 4       4      '       d-   \:        ;QJ d    . R S 4       F  NK  	  5M! R S 4       4      o T;_uu_ 4        \M        4       ;_uu_ 4        \O        VVVV V3R l4      pRRR4       RRR4       T'       gA   \        P                  ! \        P                  \        P                  ! \        SR+7      X4      p\        P                   P"                  P$                  '       g+   \        P                   P"                  P&                  '       d(   SP<                  P                  P                  S TT
4       X# u up	i   + '       g   i     L; i  + '       g   i     L; i  T d    h \P         Ed   pToTPR                  e   TPR                  o\3        S\        PT                  PV                  PX                  4      '       d   SPZ                  \        P\                  P^                  P`                  Pb                  \        P\                  P^                  Pd                  Pb                  39   d   R.pMR.pS! R\g        SPZ                  4      RSPZ                   R2TSR7       EM\3        S\        PT                  PV                  Ph                  4      '       d   \        P                   P"                  Pj                  '       g2   S! R\g        SPZ                  4      RSPZ                   R2R.SR7       EMS! R\g        SPZ                  4      RSPZ                   R2R.SR7       EM\3        S\        PT                  PV                  Pl                  4      '       d   SPZ                  pRp\3        T\        Pn                  Pp                  4      '       d^   \        Pr                  Pu                  TPv                  PH                  TPv                  Px                  4      pTe   Tw  ppRT RT RT R2pS! R R!SPZ                   2RT R"2.SR7       M\3        S\        Pz                  P|                  P~                  P                  4      '       d    T! TP                  \g        S4      R#R$7      Sh\3        ST4      '       d&   T! TP                  TP                  ^ ,          4      Th\3        S\        4      '       d:   R%\g        S4      9   d*   S! R&R'S P@                   R(S 2R. SP                  OSR7       \        \g        T4      T4      o\        TTTT3R) l4       \        R*4      RhRp?ii ; i)-ab  
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.
)ValueRangeErrorr/  )r  rB  	UserErrorUserErrorTyper"  Ncall_methodr   NNcall_module_initialize_hookc              3  B   "   T F  p\        V\        4      x  K  	  R # 5ir   )r  complex)r   as   & rl   r   '_get_fake_value_impl.<locals>.<genexpr>  s      M(,1
1gs   TFc              3     "   T FJ  p\        V\        P                  4      '       d$   VP                  P                  e   \        V4      MTx  KL  	  R # 5ir   )r  rG  SymFloatr  hintr  r  s   & rl   r   rZ    sG      
  c5>>22sxx}}7P c
 s   AAc                 6   < \        SP                  SS SS4      # r   )run_noder  )r_  ra  nnmoduler  r<  s   rl   r  &_get_fake_value_impl.<locals>.<lambda>  s    D$Irk   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: c                 6   < S! R RS. SP                   OS R7      # )z)RuntimeError when making fake tensor callr  r  
USER_ERROR)causer0  r  r  s   rl   r  ra  g  s%    MC5)445rk   zshould not reachable)r<  )interpolate
is_integerwrapped_gradient)Otorch.utils._sympy.value_rangesrP  r  r0  r  r  rB  rQ  rR  r1  r  rK   r,  r_  ra  rG  r  rH   use_graph_deduplicationtrack_nodes_for_deduplicationr1   rM  rZ  r%  r  r  r  r  r  r  r  r'  r&  r  r   _infer_parametersr~   r@  r   r  r
  	__cause__r  r3  DataDependentOutputExceptionfuncopsatenr  rQ  _local_scalar_denser   DynamicOutputShapeException capture_dynamic_output_shape_opsUnsupportedOperatorExceptionr  r  rk  _dispatch_pystub_schemaoverload_namer   r'  r(  GuardOnDataDependentSymNodeCONSTRAINT_VIOLATIONr<  rg  r=  rF  r  r  tree_map_onlyr  r  partialr  region_trackertrack_node_mutations)r  r<  r  rP  rB  rQ  rR  r1  flat_args_kwargsr  id_to_initial_versionr%  ret_valr!  r  import_suggestionmaybe_pystubrA  ctxr  r_  rh  r0  ra  r  r`  r  s   ff&                 @@@@@@@rl   rJ  rJ    sh    @#II	B $))#		/0J(K(Kyy))-
TYY$&:LD&
 	444=====5tR(*>
 .>!
-=c!BsGS\\!-= 	 !

  "HI   	]s4y1}DGUXX__1U1U'Q;=d2hO	]99''4(##:L(M(M
 &&x6 +8Y?yyEE M(,M M(,M J J u 
 
uu 
 
 
v?Y022)IIG 3Yn    LL)++,="Ew

 	444=====
		  55!	
 Nc!
V 32YY   o? ;;"KKE5$$00MM
 

 zz		##++		22:: K` 1EJJ( 5I I 5$$00LL
 
 ==''HHH4

O",UZZL8f gY #	 E

O",UZZL8y z; # 5$$00MM
 
 B ""ejj3344$xx88JJOORZZ%=%=   +".KFC##)(*H Q5/ &
 M0=() *& &
 
 588((88TT
 
 22E
5 	
 //M>>q	JPQQy))jCJ.F@$T[[ME7;5)445 .c!fi@0	
 34$>_o?sh   	N6!N60
O! :ON;	!O)O! ;OOO	O! O! !^)3^)4E^$I ^$$^)c                   V ^8  d   QhRR/# )rq   ru   torch.fx.Node | Nonerb   )rw   s   "rl   rx   rx     s     1 1. 1rk   c                 $    \        \        R R4      # )r   N)r  _current_noderb   rk   rl   get_current_noder    s    ='400rk   c                    V ^8  d   QhRRRR/# )rq   r  r!  ru   r	  rb   )rw   s   "rl   rx   rx     s     " "= "-H "rk   c              #  x   "   \        4       pV \        n         R x  V\        n        R #   T\        n        i ; i5ir   )r  r  r   )r  olds   & rl   set_current_noder    s-     

CM"!cs   :* :7:c               0    V ^8  d   QhRRRRRRRRRRRR/# )	rq   tracerr   r  r!  r_  ra  r`  ru   rb   )rw   s   "rl   rx   rx     sD     P PP$P,/P9<PHKPPrk   c                  aaaa SP                   o\        S4      ;_uu_ 4        R VVVV3R llp^RIHp  SR8X  d   SP                  ! S/ SB uuRRR4       # SR8X  d   \        S^ ,          SP                  4      '       g+   ^RIHp ^RIHp V! R	R
V! R4      . VP                  OR7       \        S^ ,          SP                  4      ! SR,          / SB uuRRR4       # SR8X  d   Vf   Q hV! S/ SB uuRRR4       # SR8X  d0   V P                  P                  SP                  4      uuRRR4       # SR8X  d1   RSP                  9   g   Q hSP                  R,          uuRRR4       #  RRR4       \+        S4      h  \        \        3 dY   p	^RIHp ^RIHp . TP                  Op
\!        T	\        4      '       d   T
RR.,          p
T! RR
T! T	4      T
T	R7        Rp	?	LwRp	?	iT d    h \"         d1   p	\%        T! T	4      4      P'                  T	P(                  4      T	hRp	?	ii ; i  + '       g   i     L; i)a  
Runs a given node, with the given args and kwargs.

Behavior is dictated by a node's op.

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

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

Nodes that are not call_function, call_method, call_module, or get_attr will
raise an AssertionError.
c                    V ^8  d   QhRRRR/# )rq   r!  r   ru   r   rb   )rw   s   "rl   rx   run_node.<locals>.__annotate__  s     	 	# 	# 	rk   c           	     V   < R S RSP                    RS RS R2	\        V 4      ,           # )z0Dynamo failed to run FX node with fake tensors: r   z(*z, **z): got )r&  r  )r!  r_  ra  r  r1  s   &rl   make_error_message$run_node.<locals>.make_error_message  s=    B2$a}TVW[V\\`ag`hhopq'rk   )rB  rN  NrS  r/  r  z/Missing attribute when running call_method noder  zattribute not definedr1  rT  rU  r$  placeholderr"  zsIf the op is a custom op, did you implement a fake tensor implementation? (e.g. with `@my_custom_op.register_fake`)z;If the op is a PyTorch op, please file an issue to PyTorch.zGNotImplementedError/UnsupportedFakeTensorException when running FX noder  )r1  r  r  rB  r&  r   r  r0  r  rg  r  output_graphget_submoduler  r  r|  r  r  r
  rD  rE  r  )r  r  r_  ra  r`  r  rB  r0  r  r!  r  r1  s   &fff&      @rl   r_  r_    s!   " 
B	$			 	 	%1	_${{D3F3 
 	 }$tAw4432! Q "$67N$O= 1 < <=	 tAw4d2hI&I1 
 	2 }$+++007 
 	8 z!**88E; 
 	< }$&$))333yy1A 
 	< %= 
 z 
7 $%CD 	+*3'223E!011@Q  a.q1   	 	1!45DD	q 
 	sf   H/FA=F#F+F8,F/H/H,AG'"H/'H,0
H,;H,<+H''H,,H//H?	c               $    V ^8  d   QhRRRRRR/# )rq   r  r!  r  r   ru   rb   )rw   s   "rl   rx   rx     s!     / / / / /rk   c                  aa	a
a ^RI Ho
 ^RIHo SP                  pW9   d	   W ,          # V P
                  p\        P                  P                  P                  V P                  V P                  3V3R l4      w  rEVR8X  d/   RV P                  9   d   V P                  R,          P                  # VR8X  dY   SP                  P                  V P                   ,          p\#        V4      '       g   \$        P&                  ! V4      pMV! V/ VB  MRp \)        SWWV4      pWrV &   V#   \*         d%   pTo	\-        T	T
T3R l4       \/        R	4      RhRp?ii ; i)
z
Run the actual computation represented by `node` and return the result.
This will execute any dependent nodes in the graph as well.
r/  r  c                   < \        V S4      # r   )get_real_value)r3  r  s   &rl   r   get_real_value.<locals>.<lambda>  s    .F+rk   r  graphargrU  Nc                 6   < S! R RR. SP                   OS R7      # )z7RuntimeError when trying to get real value from fx.Noder  r  rf  )exnr0  r  s   rl   r  r    s%    MQ5)445rk   zshould not be reachable)r  r0  r  r  real_value_cacher1  rG  r   r  r+  r_  ra  r  exampler  r'  r&  r  r  r  r_  r
  rF  r  )r  r  cacher1  r_  ra  	nn_module
real_valuer!  r  r0  r  s   &f       @@@rl   r  r    s+   
 $"##E}{	B88==((	DKK +LD
 
]zTYY6yy$,,,	]''224;;?	i((i0I t&v&	Bfd&D
 d   B0	
 67TABs   D' 'E2EEc                    V ^8  d   QhRRRR/# )rq   rU  torch.nn.Moduleru   rv   rb   )rw   s   "rl   rx   rx     s     
 
 
T 
rk   c                  a ^ RI HoHp R V3R llpV P                  4        F&  w  r4V! V4      '       g   K  Q RV RV! V4       24       h	  V P	                  4        F&  w  r5V! V4      '       g   K  Q RV RV! V4       24       h	  R# )r{   )FakeTensorConfigrK   c                    V ^8  d   QhRRRR/# )rq   r8  r   ru   r   rb   )rw   s   "rl   rx   6assert_no_fake_params_or_buffers.<locals>.__annotate__  s     d d d drk   c                r   < SP                   '       d$   ^ RIpRVP                  ! V P                  4       2# R# )r{   Nz"FAKE TENSOR CREATION TRACEBACK: 
 zNEnable TORCH_FAKE_TENSOR_DEBUG=1 to get creation stack traces on fake tensors.)debug	tracebackformat_list_debug_trace)r8  r  r  s   & rl   stack_or_hint7assert_no_fake_params_or_buffers.<locals>.stack_or_hint  s2    !!!89N9Nq~~9^8_``crk   zUnexpected fake buffer r   zUnexpected fake param N)torch._subclasses.fake_tensorr  rK   named_buffersnamed_parameters)rU  rK   r  r~   bufferr[  r  s   &     @rl    assert_no_fake_params_or_buffersr    s    Gd d ((*6?? 	
%dV1]6-B,CD	
" + **,5>> 	
$TF!M%,@+AB	
! -rk   c                    V ^8  d   QhRRRR/# )rq   rj  r   ru   r   rb   )rw   s   "rl   rx   rx   .  s     2 2S 2S 2rk   c                8    V P                    RV P                   2# )z1
Returns the fully qualified name of the object.
rm  )rd   re   r.  s   &rl   fqnr  .  s!     nnQs//011rk   c               $    V ^8  d   QhRRRRRR/# )rq   count1r   count2ru   rb   )rw   s   "rl   rx   rx   5  s!      s C C rk   c                ^    \         P                  P                  P                  '       d   V # V# r   )rG  r  rH   assume_static_by_default)r  r  s   &&rl   ifdynstaticdefaultr  5  s"    }}444rk   c                    V ^8  d   QhRRRR/# )rq   r  ztypes.ModuleTyperu   rv   rb   )rw   s   "rl   rx   rx   <  s     G G* Gt Grk   c           
     ^   \        \        P                  ! \        P                  P	                  \        \        V P                  4      4      4      4       FT  pVP                  R4      '       g   K  V^ ,          R8w  g   K,  \        P                  ! V P                   RVRR  24       KV  	  R# )z8
Ensure all the files in a given submodule are imported
z.pyr  rm  N)r  r  listdirr  r&  r   r   __file__r  	importlibimport_modulerc   )r  r   s   & rl   import_submoduler  <  st     2::bggood36M&NOPU##s(:##s||nAhsm_$EF Qrk   c                    V ^8  d   QhRRRR/# r  rb   )rw   s   "rl   rx   rx   E  s     / /3 /4 /rk   c                *    \        \        V 4      4      # r   )class_has_getattributer  r  s   &rl   object_has_getattributer  E  s    !$u+..rk   c               (    V ^8  d   QhRRRRRRRR/# )rq   rj  r   r~   r   r   ru   rv   rb   )rw   s   "rl   rx   rx   I  s(      # S   rk   c                :    \         P                  V R 4      pW#V&   R# )r  N)r  __getattribute__)rj  r~   r   r  s   &&& rl    object_setattr_ignore_descriptorr  I  s    Z0AdGrk   c                    V ^8  d   QhRRRR/# )rq   r   r  ru   r  rb   )rw   s   "rl   rx   rx   O  s     	 	 	 	rk   c                     \        \        P                  ! V R 4      \        P                  4      '       d   R#  R#   \
         d     R# i ; i)r  TF)r  r  r  r  r  r  r   s   &rl   r  r  O  sT    ""3(:;
 
 	
   s   5< A
Ac               $    V ^8  d   QhRRRRRR/# )rq   r   r   ignore_nn_module_getattrr  ru   r  rb   )rw   s   "rl   rx   rx   [  s$     
 

*.

rk   c                     \         P                  ! \        V 4      R 4      pV'       d+   V\        P
                  P                  P                  J d   RpV#   \         d    Rp LCi ; i)__getattr__N)r  r  r  r  rG  r  r  r  )r   r  
getattr_fns   && rl   get_custom_getattrr  [  sX    ++DKG
  J%((//2M2M$M
  
s    A A&%A&c                  "    ] tR tRt^t^t^tRtR# )TensorStaticReasonih  rb   N)rc   rd   re   rf   	PARAMETER
NOT_TENSORNN_MODULE_PROPERTYrj   rb   rk   rl   r  r  h  s    IJrk   r  c                    V ^8  d   QhRRRR/# )rq   r  r  ru   r   rb   )rw   s   "rl   rx   rx   n  s     5 5,> 53 5rk   c                    V \         P                  8X  d   R # V \         P                  8X  d   R# V \         P                  8X  d   R# \	        RV  24      h)z>mark_dynamic on parameter, parameters are always static today.z2mark_dynamic on a non tensor, how did this happen?z4tensor is static because it is nn module associated.zIllegal reason )r  r  r  r  r  )r  s   &rl   tensor_static_reason_to_messager  n  sJ    #---O#...C#666E
?6(3
44rk   c               (    V ^8  d   QhRRRRRRRR/# )	rq   r  ztorch.Tensor | AnyrK  r  tensor_sourcer    ru   z&tuple[bool, TensorStaticReason | None]rb   )rw   s   "rl   rx   rx   x  s0        ,	rk   c                   ^RI Hp VP                  P                  4       '       g!   VP                  P	                  4       '       d)   \
        P                  '       d   R\        P                  3# \        V 4      \        P                  P                  J g   V! V4      '       d)   \
        P                  '       d   R\        P                  3# V'       g   R\        P                  3# R# )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.
))is_from_unspecialized_param_buffer_sourceTr  )r  r  r  r  r  rH   &force_nn_module_property_static_shapesr  r  r  rG  r  r  force_parameter_static_shapesr  r  )r  rK  r  r  s   &&& rl   tensor_always_has_static_shaper  x  s      B 	"";;==%%HHJJ

7
7
7':::: 	V***4]CC

.
.
.'1111'2222rk   c               $    V ^8  d   QhRRRRRR/# )rq   r}  r   rU  r  ru   r   rb   )rw   s   "rl   rx   rx     s"      s 0D  rk   c                0   a a R  V V3R llp\        V4      # )c                   V ^8  d   QhRR/# r  rb   )rw   s   "rl   rx   /lazy_format_graph_tabular.<locals>.__annotate__  s     W W3 Wrk   c                   <  ^ RI H p  SP                  P
                   Uu. uF;  qP                  TP                  TP                  TP                  TP                  .NK=  	  ppT ! T. ROR7      p\        SSP                  P                  P                  T4      #   \         d     R\        \        SS4      4      ,           u # i ; iu upi )r{   )r   zkTabulate module missing, please install tabulate to log the graph in tabular format, logging code instead:
r   )opcoder~   r&  r_  ra  )r   r   r   r)   r  r0  r1  r~   r&  r_  ra  r(   forward__code__r1  )r   r3  
node_specs	graph_strr}  rU  s       rl   inner(lazy_format_graph_tabular.<locals>.inner  s    	) AC
@N1TT166188QVVQXX6 	 
  N
	 "'2::+>+>+J+JIVV  	~,Wb9:;	
s   B AC'CCrE   )r}  rU  r  s   ff rl   lazy_format_graph_tabularr    s    W W" erk   c               0    V ^8  d   QhRRRRRRRRRRR	R/# )
rq   r  r   r~   r   line_nort   r  r   ru   rb   )rw   s   "rl   rx   rx     sD     W WWW&)W47W?BWWrk   c                h    V  R V R V RV R\         P                  ! V4      P                  4        R2
# )r   z line z 
r   )disBytecode)r  r~   r   r  r  s   &&&&&rl   format_bytecoder    s=     XQtfAhZvgYc#,,t:L:P:P:R9SSUVVrk   _backward_pre_hooks_backward_hooksc                   V ^8  d   QhRR/# r  rb   )rw   s   "rl   rx   rx     s      D rk   c                     \        \        \        P                  P                  P
                  P                  4      ;'       g8    \        \        P                  P                  P
                  P                  4      4      # r   )r  r  rG  r  modulesrA  _global_backward_hooks_global_backward_pre_hooksrb   rk   rl   nn_module_has_global_hooksr    sY     EHH##::; 	C 	Cuxx&&AAB rk   c          
     ,    V ^8  d   QhRRRRRRRRRR/# )	rq   r  r  check_forward_hooksr  check_backward_hookscheck_state_dict_hooksru   rY  rb   )rw   s   "rl   rx   rx     s:      	  !	
 rk   c                   . pV'       * ;'       d    V'       * ;'       d    V'       * pV'       g	   V'       d   VP                  \        4       V'       g	   V'       d   VP                  \        4       V'       d   VP                  \        4       . pV F1  p\	        W. 4      pV F  p	W,          p
VP                  V
4       K  	  K3  	  V# )z
Sometimes its useful to differentiate between types of hooks such as forward/backward/pre
hooks executed during module.__call__, and state_dict hooks which are executed separately.
)extendforward_hook_namesbackward_hook_namesstate_dict_hook_namesr  r   )r  r  r  r	  hook_dicts_to_checkcheck_all_hooks	all_hookshook_dict_namehooks	hook_namer   s   &&&&       rl   nn_module_get_all_hooksr    s      	' 	'$$	' 	'&& 
 o""#56""#67""#89I-R0I#DT"  . rk   c          
     ,    V ^8  d   QhRRRRRRRRRR/# )rq   r  r  r  r  r  r	  ru   rb   )rw   s   "rl   rx   rx     s:      	  !	
 
rk   c                6    \        V VVVR7      p\        V4      # )zD
Helper function to check if a module has any hooks attached to it.
)r  r  r	  )r  r  )r  r  r  r	  r  s   &&&& rl   nnmodule_has_hooksr    s&     $/15	E ;rk   c                    V ^8  d   QhRRRR/# rq   r   r   ru   rb   )rw   s   "rl   rx   rx     s      3 3 rk   c                b   \        V 4      '       d   V # \        V \        P                  4      '       d   \	        V P
                  4      # \        V \        P                  4      '       d   V P                  RR7      # \        V \        \        34      '       d   \        V 4      ! R V  4       4      # V # )z0Convert tensor and tnp.ndarray to numpy.ndarray.T)forcec              3  8   "   T F  p\        V4      x  K  	  R # 5ir   )to_numpy_helperr   rj  s   & rl   r   "to_numpy_helper.<locals>.<genexpr>
       A5C?3//5ru  )rK   r  tnpr  r  r  rG  r  numpyr  r  r  r  s   &rl   r  r    s}    u~~%%%u||,,	E5<<	(	({{{&&	EE4=	)	)E{A5AAArk   c                    V ^8  d   QhRRRR/# r  rb   )rw   s   "rl   rx   rx     s     
 
3 
3 
rk   c                F   \         f   Q h\        V \         P                  4      '       d   \        P                  ! V 4      # \        V \
        P                  4      '       d   V P                  # \        V \        \        34      '       d   \        V 4      ! R V  4       4      # V # )zeConvert tnp.ndarray to tensor, leave other types intact. If a list/tuple, loop through it to convert.c              3  8   "   T F  p\        V4      x  K  	  R # 5ir   )numpy_to_tensorr  s   & rl   r   "numpy_to_tensor.<locals>.<genexpr>  r!  ru  )
r  r  r  rG  r  r"  r  r  r  r  r  s   &rl   r'  r'    sr    >>%$$u%%%%%||	EE4=	)	)E{A5AAArk   c                  :    ] tR tRtR R ltR R ltR R ltRtR	# )
numpy_to_tensor_wrapperi  c                    V ^8  d   QhRRRR/# )rq   r*  Callable[_P, R]ru   rv   rb   )rw   s   "rl   rx   $numpy_to_tensor_wrapper.__annotate__  s     5 5/ 5d 5rk   c                	V    Wn         R V P                   P                  ,           V n        R# wrapped_Nr*  rc   )r  r*  s   &&rl   r   numpy_to_tensor_wrapper.__init__  s    "TVV__4rk   c                   V ^8  d   QhRR/# r  rb   )rw   s   "rl   rx   r-  !  s     B B# Brk   c                	6    R V P                   P                   R2# )z<Wrapped function <original >>r1  r  s   &rl   __repr__ numpy_to_tensor_wrapper.__repr__!  s    -dffoo->bAArk   c               $    V ^8  d   QhRRRRRR/# rq   r_  r`  ra  rb  ru   r   rb   )rw   s   "rl   rx   r-  $  s!     $ $g $ $s $rk   c                	<    V P                   ! V/ VB p\        V4      # r   )r*  r'  r  r_  ra  r   s   &*, rl   r   numpy_to_tensor_wrapper.__call__$  s     ffd%f%s##rk   )rc   r*  N)rc   rd   re   rf   r  r6  r  rj   rb   rk   rl   r*  r*    s    5B$ $rk   r*  c               $    V ^8  d   QhRRRRRR/# )rq   rj  r   r~   r   ru   rb   )rw   s   "rl   rx   rx   )  s!     $ $C $s $s $rk   c                   \        V \        P                  4      '       d   \        W4      p\	        V4      # \        V \
        P                  4      '       d,   \        \        P                  ! V 4      V4      p\	        V4      # R # r   )r  r"  r  r  r'  rG  r  )rj  r~   r   s   && rl   numpy_attr_wrapperr?  )  s^    #s{{##c s##	C	&	&ckk#&-s## 
'rk   c                  >    ] tR tRtRtR R ltR R ltR R ltR	tR
# )numpy_method_wrapperi2  zgConvert obj from torch.Tensor to tnp.ndarray and call method. Then convert result back to torch.Tensor.c                    V ^8  d   QhRRRR/# )rq   methodr   ru   rv   rb   )rw   s   "rl   rx   !numpy_method_wrapper.__annotate__5  s     1 1s 1t 1rk   c                	B    Wn         R V P                   ,           V n        R# r/  )rC  rc   )r  rC  s   &&rl   r  numpy_method_wrapper.__init__5  s    "T[[0rk   c                   V ^8  d   QhRR/# r  rb   )rw   s   "rl   rx   rD  9  s     < <# <rk   c                	"    R V P                    R2# )z<Wrapped method <original r5  )rC  r  s   &rl   r6  numpy_method_wrapper.__repr__9  s    +DKK=;;rk   c               $    V ^8  d   QhRRRRRR/# )rq   r_  r   ra  ru   rb   )rw   s   "rl   rx   rD  <  s!     $ $c $S $S $rk   c                	    V^ ,          p\        V\        P                  4      '       d   \        P                  ! V4      p\        W0P                  4      pV! VR,          / VB p\        V4      # r{   rT  )r  rG  r  r"  r  r  rC  r'  )r  r_  ra  rj  method_callabler   s   &*,   rl   r  numpy_method_wrapper.__call__<  sV    1gc5<<((++c"C!#{{3tBx262s##rk   )rc   rC  N	rc   rd   re   rf   r   r  r6  r  rj   rb   rk   rl   rA  rA  2  s    q1<$ $rk   rA  c                  >    ] tR tRtRtR R ltR R ltR R ltR	tR
# )numpy_operator_wrapperiE  zQImplements dunder methods for tnp.ndarray via functions from the operator libraryc                    V ^8  d   QhRRRR/# )rq   r1  ry  ru   rv   rb   )rw   s   "rl   rx   #numpy_operator_wrapper.__annotate__H  s     1 1- 1$ 1rk   c                	:    Wn         R VP                   2V n        R# r/  )r1  rc   )r  r1  s   &&rl   r  numpy_operator_wrapper.__init__H  s    "2;;-0rk   c                   V ^8  d   QhRR/# r  rb   )rw   s   "rl   rx   rS  L  s     @ @# @rk   c                	"    R V P                    R2# )z<Wrapped operator <original r5  )rc   r  s   &rl   r6  numpy_operator_wrapper.__repr__L  s    -dmm_B??rk   c               $    V ^8  d   QhRRRRRR/# r9  rb   )rw   s   "rl   rx   rS  O  s!     $ $g $ $s $rk   c                	^    V'       d   Q hR  V 4       pV P                   ! V!  p\        V4      # )c              3     "   T F=  p\        V\        P                  4      '       d   \        P                  ! V4      MTx  K?  	  R # 5ir   )r  rG  r  r"  r  r  s   & rl   r   2numpy_operator_wrapper.__call__.<locals>.<genexpr>S  s2      
RV3
3 = =CKK3FRVs   AA)r1  r'  r;  s   &*, rl   r  numpy_operator_wrapper.__call__O  s3    z
RV
 ggtns##rk   )rc   r1  NrO  rb   rk   rl   rQ  rQ  E  s    [1@$ $rk   rQ  c                    V ^8  d   QhRRRR/# )rq   r  r   ru   rb   )rw   s   "rl   rx   rx   Z  s      c c rk   c                   \        V \        4      '       g   V # V P                  '       d   V P                  4        Uu. uF6  p\        P
                  P                  P                  P                  V4      NK8  	  ppV P                  4        Uu. uF6  p\        P
                  P                  P                  P                  V4      NK8  	  ppM V P                  4       pV P                  4       p\        P                  ! VVV P                  V P                  V P                  R 7      pVP                  4        V# u upi u upi ))r  r  r  )r  rJ   _has_symbolic_sizes_stridesr  rG  r   r'  r(  optimization_hintr  empty_stridedr  r  r  zero_)r  r  r  r  r  s   &    rl   defakerd  Z  s	   a$$ 	$$$
 QRPVPVPX
PX1EHH!!11CCAFPX 	 

 XXZ
 HH!!11CCAF 	 

 vvxggxxoo	A GGIH%

s   <D7<D<c               (    V ^8  d   QhRRRRRRRR/# )	rq   r  r,  r_  r`  ra  rb  ru   rX   rb   )rw   s   "rl   rx   rx   x  s,       '3<rk   c                    V ! V/ VB # r   rb   )r  r_  ra  s   &*,rl   8_disable_side_effect_safety_checks_for_current_subtracerrg  x  s     tvrk   c                    V ^8  d   QhRRRR/# r  rb   )rw   s   "rl   rx   rx   ~  s     4 4S 4T 4rk   c                L    ^ RI pWP                  P                  P                  J # r   )torch.utils.checkpointr  
checkpoint)rj  rG  s   & rl   is_utils_checkpointrl  ~  s    !++((3333rk   c                    V ^8  d   QhRRRR/# r  rb   )rw   s   "rl   rx   rx     s     . .C .D .rk   c                    ^ RI Hp WJ # )r{   )invoke_subgraph_placeholder)'torch._higher_order_ops.invoke_subgraphro  )rj  ro  s   & rl   is_invoke_subgraphrq    s    S--rk   c                    V ^8  d   QhRRRR/# rq   optionsr   ru   rb   )rw   s   "rl   rx   rx     s      c c rk   c                 d    ^RI Hp VP                  ! \        P                  P
                  3/ V B # )r    TorchHigherOrderOperatorVariable)variables.higher_order_opsrw  makerG  _higher_order_opsinvoke_subgraph)rt  rw  s   , rl   build_invoke_subgraph_variabler|    s/    L+00//
 rk   c                    V ^8  d   QhRRRR/# rs  rb   )rw   s   "rl   rx   rx     s        rk   c                     ^ RI Hu Hp ^RIHp VP
                  p\        P                  P                  P                  '       d   VP                  pVP                  ! V3/ V B # )r{   Nrv  )torch._higher_order_ops.wraprz  wraprx  rw  tag_activation_checkpointrG  
_functorchrH   functionalize_rng_opswrap_activation_checkpointry  )rt  higher_order_opsrw  activation_checkpoint_ops   ,   rl   build_checkpoint_variabler    s_    ;;L
 	22  444#3#N#N +00 
 rk   c                    V ^8  d   QhRRRR/# )rq   device_typerB   ru   r   rb   )rw   s   "rl   rx   rx     s      n  rk   c                    ^RI Hp \        P                  ! V 4      P                  pV! 4       pVR8X  d    V# VR9   d   V'       d   \        4       pV# RpV# )r   )is_dynamo_supportedr  F)r  r  mtia)
eval_framer  rG  r  r  r.   )r  r  r  compile_supporteds   &   rl   is_compile_supportedr    s`    /<<$))D+-u}
 	 
(	(->&L  "rk   c               $    V ^8  d   QhRRRRRR/# )rq   r   offsetrt   ru   rb   )rw   s   "rl   rx   rx     s&     	C 	CS 	C# 	C# 	Crk   c                b    V P                  R4      p\        VRV P                  RRR7      4      # )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-8Nrr  )errors)encoder  decode)r   r  as_utf8s   && rl   _fix_offsetr    s4     jj!Gww&&wy&ABBrk   c                  @    ] tR tRt$ R]R&   R]R&   R]R&   R]R&   RtR# )	_Anchorsi  rt   left_end_linenoleft_end_offsetright_start_linenoright_start_offsetrb   NrI  rb   rk   rl   r  r    s     rk   r  c                    V ^8  d   QhRRRR/# )rq   segmentr   ru   z_Anchors | Nonerb   )rw   s   "rl   rx   rx     s     } } } }rk   c                  aa \         P                  R8  g   Q h^ RIpRp VP                  RV ,           R,           4      pTf   Q h\        TP                  4      ^8w  d   R# T P                  R4      oR T3R llpR T3R lloR	 TT3R
 llpR TT3R llpTP                  ^ ,          p\        YaP                  4      '       Ed.   TP                  p\        YqP                  4      '       Ed   \        \        TP                  P                  4      ^,
          pTP                  P                   f   Q hT! YP                  P                   4      p	S! Y4      w  rST,          T	,          ;p
P#                  4       '       g   T
R9   d    T
R9   d   T! Y4      w  rK@  T! Y4      w  rKL  T	^,           pT\        ST,          4      8  d7   ST,          T,          ;p
P#                  4       '       g   T
R9  d
   T^,          p\%        YY4      # \        YqP&                  4      '       d   \        \        TP                  P                  4      ^,
          pTP                  P                   f   Q hT! YP                  P                   4      pS! Y4      w  rST,          T,          R8w  d   T! Y4      w  rK!  \        \        TP                  4      ^,
          pTP                   f   Q hT! YP                   4      p\%        YY4      # \        YqP(                  4      '       d   \        \        TP*                  P                  4      ^,
          pTP*                  P                   f   Q hT! YP*                  P                   4      pS! Y4      w  rST,          T,          R8w  d   T! Y4      w  rK!  \        \        TP                  4      ^,
          pTP                   f   Q hT! YP                   4      p\%        YY4      # R#   \         d     R# i ; i)z
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
Nz(
z
)r   c               $    V ^8  d   QhRRRRRR/# )rq   linenort   r  ru   rb   )rw   s   "rl   rx   0_extract_anchors_from_expr.<locals>.__annotate__  s!     2 2# 2s 2s 2rk   c                *   < \        SV ,          V4      # r   )r  )r  r  liness   &&rl   	normalize-_extract_anchors_from_expr.<locals>.normalize  s    5=&11rk   c               $    V ^8  d   QhRRRRRR/# rq   r  rt   colru   ztuple[int, int]rb   )rw   s   "rl   rx   r    s!       # / rk   c                   < V \        S4      8  d%   V\        SV ,          4      8  d   ^ pV ^,          p K4  V \        S4      8  d   V\        SV ,          4      8  g   Q hW3# r  r  )r  r  r  s   &&rl   next_valid_char3_extract_anchors_from_expr.<locals>.next_valid_char  sW    s5z!cSv-?&?CaKFE
"sSv-?'???{rk   c               $    V ^8  d   QhRRRRRR/# r  rb   )rw   s   "rl   rx   r    s!      # C O rk   c                   < V^,          pS! W4      w  rV \        S4      8  d   V\        SV ,          4      8  g   Q hW3# r  r  r  r  r  r  s   &&rl   r$  -_extract_anchors_from_expr.<locals>.increment  sB    q%f2E
"sSv-?'???{rk   c               $    V ^8  d   QhRRRRRR/# r  rb   )rw   s   "rl   rx   r    s!       3 ? rk   c                   < ^ pV ^,          p S! W4      w  rV \        S4      8  d   V\        SV ,          4      8  g   Q hW3# r  r  r  s   &&rl   nextline,_extract_anchors_from_expr.<locals>.nextline  sG    !%f2E
"sSv-?'???{rk   z)\#z\#rf  r  )r     )r  r  r  parser  r  bodyr  r  Exprr   BinOpr   rt   left
end_linenoend_col_offsetisspacer  	SubscriptCallrr  )r  r  treer  r$  r  	statementexpr
cur_linenocur_colch	right_colleft_linenoleft_colright_linenor  r  s   &              @@rl   _extract_anchors_from_exprr    sm    w&&&D yy501 
499~MM$E2 2
    		!I)XX&&dII&& c499#7#781<J99++777
II,D,DEG"1*"FJ z*7332<<>>",;*2:*G'J*3J*H'J  !ICj 122$Z0;;DDFFeOQ	 JGGmm,, sDJJ$9$9:Q>K::,,888 jj.G.GHH$3K$J!K$X.#5(1+(H%XT__59L&&222!,0C0CDIK<KKhh''
 sDII$8$89A=K99++777 ii.F.FGH$3K$J!K$X.#5(1+(H%XT__59L&&222!,0C0CDIK<KKW  s   O7 7PPc               $    V ^8  d   QhRRRRRR/# )rq   r  ztypes.CodeTypeinstr<   ru   r   rb   )rw   s   "rl   rx   rx   O  s&     A A^ A; A3 Ark   c           	        \         P                  R
8  Ed   \        P                  ! V P                  VP
                  P                  V P                  VP
                  P                  VP
                  P                  VP
                  P                  R7      p\        P                  ! V.4      ^ ,          pRP                  VP                  4       R,          4      p\        VP
                  P                  VP
                  P                  ^,           4       Uu. uF2  p\        P                   ! V P                  V4      P#                  4       NK4  	  pp\$        P&                  ! RP                  V4      4      P                  4       p\)        V^ ,          4      \)        V^ ,          4      ,
          pV^ ,          RV p\$        P*                  ! \$        P&                  ! V4      V4      pV# \-        VR4      '       d   VP
                  f   Q hVP
                  P                  f   R# \        P                   ! V P                  VP
                  P                  4      P#                  4       p	VP
                  P                  f   V	# VP
                  P                  e   VP
                  P                  f   V	# \/        WP
                  P                  4      p
RpRp. pVP
                  P                  VP
                  P                  8X  dR   \/        WP
                  P                  4      pWV pVP1                  RV
,          RW,
          ,          ,           4       EMWR R,           pVP1                  RV
,          R\)        V	4      V
,
          ,          ,           4       \        P                   ! V P                  VP
                  P                  4      P#                  4       p\/        WP
                  P                  4      p\        VP
                  P                  ^,           VP
                  P                  4       F  p\        P                   ! V P                  V4      P#                  4       pWR,           ,          p\)        V4      \)        VP3                  4       4      ,
          pVP1                  RV,          R\)        V4      V,
          ,          ,           4       K  	  WRV ,          p\)        V4      \)        VP3                  4       4      ,
          pVP1                  RV,          RVV,
          ,          ,           4       Rp \5        V4      pVf$   V Uu. uF  pVP9                  RR	4      NK  	  ppEM\V Uu. uF  p\;        V4      NK  	  ppVP<                  ^ 8X  d   V;P>                  V
,          un        VP@                  ^ 8X  d   V;PB                  V
,          un!        \        \)        V4      4       F  p\        \)        VV,          4      4       F  pVVP<                  8  d   K  VVP<                  8X  d   VVP>                  8  d   K:  VVP@                  8X  d   VVPB                  8  d   K^  VVP@                  8  d   Kq  VV,          V,          R8X  g   K  R	VV,          V&   K  	  K  	  V Uu. uF  pRP                  V4      NK  	  ppRp\        \)        V4      4       Fq  pV\        P                   ! V P                  VP
                  P                  V,           4      P#                  4       R,           ,          pW=V,          R,           ,          pKs  	  V# u upi   \6         d     EL#i ; iu upi u upi u upi )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  colno	end_colnor   rT  N	positionsr  r   ~^)r     )"r  r  r  FrameSummaryr1  r  r  r  r  
col_offsetr  r  r   
splitlinesr  	linecachegetlinerstriptextwrapdedentr  indentr   r  r   lstripr  r  rr  r  r  r  r  r  )r  r  frame_summaryr  r  
orig_linesorig_lines_dedent
indent_lenr  
first_linestart_offset
end_offsetr  markers	last_lineline
num_spacesanchorsmarkermutable_markersr  r  s   &&                    rl   get_instruction_source_311r  O  s    7"!..NN!!LL~~00..++nn33
 &&7:6,,.r23   5 5t~~7P7PST7TU
U d..7>>@U 	 
 %OODIIj,ABMMOA'#.?.B*CC
A{
+!8&A4%%$..*DDD~~$ ""4#3#3T^^5J5JKRRTJ~~  (~~  (DNN,I,I,Q z>>+D+DEL JGG ~~  DNN$9$99 ^^-J-JK
*5s\)C:3L,MMN]+d2s\)C3z?\3Q,RRS%%dnn77

&( 	 !NN,I,IJ
DNN11A5t~~7P7PQF$$T%5%5v>EEGDd{"GTS%77JNN3+cSY5K.LLM R 	[j))^c)*:*:*<&==
sZ'#j1H*IIJ#G,W5
 :AB'6>>#s+'B HO+OwVDLw+O ""a'##|3#%%*&&,6& CL)FS!89:G333W444w?V?V9Vg888w999G666"6*3/3636OF+C0 ; *" 2AAv2776?AF3w< d..0E0E0IJQQS	
 	!*t## ! MI
r  
 C ,P4 Bs*   8]=] ]/3]4/]9],+],c                    V ^8  d   QhRRRR/# )rq   r8  r   ru   rb   )rw   s   "rl   rx   rx     s      s s rk   c                `    \        V \        P                  4      '       d   \        V R R4      # R# )_dynamo_static_input_typeN)r  rG  r  r  r  s   &rl   get_static_address_typer    s&    !U\\""q5t<<rk   c                    V ^8  d   QhRRRR/# r  rb   )rw   s   "rl   rx   rx     s     ) ) ) )rk   c                   \         P                  P                  P                  \         P                  P                  \         P
                  \         P                  P
                  3p\         P                  P                  P                  \         P                  P                  \         P                  \         P                  P                  3pV . VOVO59   # r   )	rG  rk  r4   	get_statedefault_generatorr  r  	set_stater  )r   getterssetterss   &  rl   is_rng_state_getter_or_setterr    s     	$$))

  G 	$$))

  	G (g((((rk   c                    V ^8  d   QhRRRR/# r  rb   )rw   s   "rl   rx   rx     s      c d rk   c                   \        V \        P                  4      ;'       df    V P                  R 8H  ;'       dO    \	        V P
                  R4      ;'       d1    V P
                  P                  \        P                  P                  J # )__get____objclass__)
r  r  r
   rc   r   __self__r  rG  rk  _TensorBaser  s   &rl   is_tensor_base_attr_getterr	    ss    5%112 	@ 	@NNi'	@ 	@ENNN3	@ 	@ NN''588+?+??	rk   c                    V ^8  d   QhRRRR/# )rq   r~   r   ru   r  rb   )rw   s   "rl   rx   rx     s      c d rk   c                     \         P                  ! \        P                  V 4      p\	        V4      \
        P                  J #   \         d     R # i ; irf  )r  r  rG  r  r  r  r  r  )r~   r  s   & rl   is_tensor_getset_descriptorr	    sD    %%ellD9DzU7777 s   ?A AAc                    V ^8  d   QhRRRR/# r  rb   )rw   s   "rl   rx   rx     s     0 0C 0D 0rk   c                    \        V R 4      # )__torch_function__)r   r  s   &rl   is_torch_function_objectr	    s    5.//rk   c                    V ^8  d   QhRRRR/# )rq   r-  rA   ru   r  rb   )rw   s   "rl   rx   rx      s      ? t rk   c                   ^ RI Hp ^ RIHp V P	                  4       '       g3   \        V R4      '       d   \        V P                  4       R4      '       ds   Rp\        W4      '       d   \        V P                  RR4      pM(\        W4      '       d   \        V P                  RR4      pVR\        P                  P                  39  # R# )r{   )UserDefinedObjectVariable)TensorWithTFOverrideVariable
peek_valuer	  NF)torch._dynamo.variablesr	  &torch._dynamo.variables.torch_functionr	  r  r   r	  r  r  
class_typer   rG  rk  _disabled_torch_function_impl)r-  r	  r	  rr  s   &   rl   has_torch_functionr	     s     BS 
~~L!!gbmmo?S&T&Tb772==*>ED66288%94@DD%(("H"HIIIrk   c               $    V ^8  d   QhRRRRRR/# )rq   r8  r  r%  r  ru   r   rb   )rw   s   "rl   rx   rx     s$       Lrk   c                    R pR p\         P                  P                  P                  4       ;p'       d0   WP                  9   d    VP                  V ,          pVP
                  pVP                  V RW#R7      # )NF)static_shapessymbolic_contextr  )rG  r  r!   try_gettensor_to_contextr  from_tensor)r8  r%  r	  r  tracing_contexts   &&   rl   to_fake_tensorr	    su     F--66>>@@@111.@@C%33F  	1A !  rk   c                    V ^8  d   QhRRRR/# r  rb   )rw   s   "rl   rx   rx   .  s      s t rk   c                   \        V 4      '       * ;'       dt    \        V 4      '       * ;'       d\    \        V 4      ;'       dI    \        V R 4      ;'       d5    \        V P                  R4      ;'       d    V P                  P
                  # )__dataclass_params__frozen)r  r  r   r   r	  r	  r  s   &rl   is_frozen_dataclassr 	  .  s    #E** 	. 	.&u--	. 	.	. 	. E12	. 	. E..9		. 	.
 &&--rk   c               $    V ^8  d   QhRRRRRR/# )rq   rj  r   attrsr   ru   rb   )rw   s   "rl   rx   rx   9  s&     O O OS OS Ork   c                p    V F!  p\        W4      '       g   K  \        W4      u # 	  \        V  RV 24      h)zP
Return the first available attribute or throw an exception if none is present.
z% does not has any of the attributes: )r   r  r  )rj  r"	  r  s   &* rl   get_first_attrr$	  9  s=     33%%  C5 EeWM
NNrk   c               (    V ^8  d   QhRRRRRRRR/# )rq   should_enabler  	fullgraphdynamicru   ri  rb   )rw   s   "rl   rx   rx   E  s,      $(:>rk   c              #     aa"   V '       g   R x  R # R VV3R llp\         P                  P                  P                  V4      ;_uu_ 4       pVx  R R R 4       R #   + '       g   i     R # ; i5i)Nc                    V ^8  d   QhRRRR/# )rq   rU  r   ru   rb   )rw   s   "rl   rx   4maybe_enable_compiled_autograd.<locals>.__annotate__L  s     	 	C 	C 	rk   c                B   < R  R lp\         P                  ! WSSR7      # )c               $    V ^8  d   QhRRRRRR/# )rq   gm_r   example_inputs_ru   rb   )rw   s   "rl   rx   Imaybe_enable_compiled_autograd.<locals>.compiler_fn.<locals>.__annotate__M  s&     E EC E# E# Erk   c                    \         P                  P                  P                  R ,          R;;,          ^,          uu&   \         P                  P                  W4      # )compiled_autogradcompiles)rG  r  r  rZ   r  compile)r.	  r/	  s   &&rl   inner_compilerKmaybe_enable_compiled_autograd.<locals>.compiler_fn.<locals>.inner_compilerM  s>    ##,,-@A*MQRRM..sDDrk   )backendr'	  r(	  )rG  r4	  )rU  r5	  r(	  r'	  s   & rl   compiler_fn3maybe_enable_compiled_autograd.<locals>.compiler_fnL  s#    E ==i rk   )rG  r  r2	  _enable)r&	  r'	  r(	  r8	  r  s   &ff  rl   maybe_enable_compiled_autogradr;	  D  sK      	 	 ]],,44[AASI BAAAs   A
A1A
A1A.	(	A1c                   V ^8  d   QhRR/# )rq   ru   r0   rb   )rw   s   "rl   rx   rx   Y  s     & &? &rk   c                 @     ! R  R\         4      p \        V ! 4       4      # )c                      ] tR tRtRtR# )*invalid_removeable_handle.<locals>.Invalidi[  rb   N)rc   rd   re   rf   rj   rb   rk   rl   Invalidr?	  [  s    rk   r@	  )r  r0   )r@	  s    rl   invalid_removeable_handlerA	  Y  s    $  79%%rk   c                    V ^8  d   QhRRRR/# )rq   r  r   ru   rb   )rw   s   "rl   rx   rx   e  s        rk   c                "   \        V \        P                  P                  4      '       g   V # \        V \        P                  P
                  4      '       d   V # V P                  P                  V P                  4      pV P                  Vn        V# r   )	r  rG  r  r  r   r(  r  r;  r  )r  proxys   & rl   nn_module_proxyrE	  e  s`    c588??++
#uxx++,,
MM!!#--0E\\ENLrk   c                  :   a  ] tR tRtR V 3R lltR R ltRtV ;t# )	GmWrapperip  c               $    V ^8  d   QhRRRRRR/# )rq   rU  r  unflatten_fnzCallable[[list[Any]], Any]ru   rv   rb   )rw   s   "rl   rx   GmWrapper.__annotate__q  s$     ) )&)6P)	)rk   c                	<   < \         SV `  4        Wn        W n        R # r   )r  r  rU  rI	  )r  rU  rI	  r  s   &&&rl   r  GmWrapper.__init__q  s     	(rk   c                    V ^8  d   QhRRRR/# rq   r_  r   ru   rb   )rw   s   "rl   rx   rJ	  x  s     1 1S 1S 1rk   c                	V    \        V4      pV P                  ! V P                  V4      !  # r   )r  rU  rI	  r  s   &*rl   r  GmWrapper.forwardx  s%    t*ww))$/00rk   )rU  rI	  )rc   rd   re   rf   r  r  rj   r  r  s   @rl   rG	  rG	  p  s    ) )1 1rk   rG	  c               (    V ^8  d   QhRRRRRRRR/# )	rq   rU  r  r  r   
compile_gmzCallable[[Any, Any], Any]ru   ry  rb   )rw   s   "rl   rx   rx   ~  s,     . ..&).7P..rk   c                  a	a
aa \        V P                  P                  4       UUu. uF>  w  r4VP                  R8X  g   K  VP                  P                  RR4      '       g   K<  VNK@  	  uppo\        P                  P                  P                  '       dd   S^ .8X  g   Q h\        V^ ,          \        4      '       g   Q h\        V^ ,          4      o	R R loR V	3R llpV! \        W4      S! V4      4      o
M`\        P                  ! V4      w  rg\         P"                  ! \        P$                  VR7      pV! \        W4      V4      o
\        P&                  oR	 V
VV3R
 llpV# u uppi )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.
r  	steal_argFc                    V ^8  d   QhRRRR/# rN	  rb   )rw   s   "rl   rx   *flatten_graph_inputs.<locals>.__annotate__  s     	, 	,S 	,S 	,rk   c                B    V ^ ,          \        V R,          4      ,           # rL  r  r  s   &rl   
flatten_fn(flatten_graph_inputs.<locals>.flatten_fn  s    7T$r(^++rk   c                    V ^8  d   QhRRRR/# )rq   	flat_argsr   ru   rb   )rw   s   "rl   rx   rV	    s     	U 	UC 	UC 	Urk   c                   < V R S .V SR  O5# r   rb   )r[	  boxed_inputs_counts   &rl   rI	  *flatten_graph_inputs.<locals>.unflatten_fn  s#    112TY?Q?R5STTrk   )treespecc                    V ^8  d   QhRRRR/# rN	  rb   )rw   s   "rl   rx   rV	    s     & &s &s &rk   c                 b   < S! V 4      pS F  pW,          P                  4        K  	  S! V4      # r   )r   )r_  r[	  r  compiled_fnrX	  inputs_idx_to_clears   *  rl   wrapper%flatten_graph_inputs.<locals>.wrapper  s1    t$	 %AGMMO % 9%%rk   )r  r  r0  r1  r  r   rG  r  r2	  in_compiled_autograd_regionr  r  r  rG	  r  r  r  r  tree_unflattenarg_tree_leaves)rU  r  rR	  r  r  rI	  flat_inputsspecrd	  r]	  rb	  rX	  rc	  s   &&&      @@@@rl   flatten_graph_inputsrk	  ~  s/    !00GA77m# 	
(,		k5(I 	
0 }}&&BBB #qc)))&)T**** ^	,	U 	U !2!<j>PQ #//7 (()>)>N 2!<kJ++
& & NMs   E)E)%E)c                    V ^8  d   QhRRRR/# )rq   maybe_gmr   ru   rY  rb   )rw   s   "rl   rx   rx     s     4 4# 4) 4rk   c                    \        V \        P                  P                  4      '       d   \	        V R 4      '       g   . # V P
                  P                  R. 4      # )r  locals_to_steal)r  rG  r   r(  r   r  r   )rm	  s   &rl   get_locals_to_stealrp	    sB    h 4 455WXv=V=V	==.33rk   c               $    V ^8  d   QhRRRRRR/# )rq   rU  r  ro	  rY  ru   rv   rb   )rw   s   "rl   rx   rx     s#     1 10 19 1QU 1rk   c                "    WP                   R &   R# )ro	  Nr  )rU  ro	  s   &&rl   set_locals_to_stealrt	    s    !0GGrk   c                  .    ] tR tRtR R ltR R ltRtR# )Liti  c                    V ^8  d   QhRRRR/# )rq   r  r   ru   rv   rb   )rw   s   "rl   rx   Lit.__annotate__  s      # $ rk   c                	    Wn         R # r   r  )r  r  s   &&rl   r  Lit.__init__  s    rk   c                   V ^8  d   QhRR/# r  rb   )rw   s   "rl   rx   rx	    s      # rk   c                	    V P                   # r   rz	  r  s   &rl   r6  Lit.__repr__  s    vvrk   rz	  N)rc   rd   re   rf   r  r6  rj   rb   rk   rl   rv	  rv	    s     rk   rv	  zset[str]warn_once_cachec               $    V ^8  d   QhRRRRRR/# )rq   r  r   
stacklevelrt   ru   rv   rb   )rw   s   "rl   rx   rx     s!     	2 	23 	2C 	2 	2rk   c                    V \         9   d   R # \         P                  V 4       \        P                  ! W^,           R7       R # )N)r	  )r	  r  warningswarn)r  r	  s   &&rl   	warn_oncer	    s-     oMM#q.1rk   c                    V ^8  d   QhRRRR/# )rq   textr   ru   rb   )rw   s   "rl   rx   rx     s     % %# %# %rk   c                R    \         P                  ! R 4      pVP                  RV 4      # )z\x1B[@-_][0-?]*[ -/]*[@-~]r  )r  r4	  r  )r	  ansi_escapes   & rl   strip_color_from_stringr	    s"    **:;K??2t$$rk   c                   V ^8  d   QhRR/# r  rb   )rw   s   "rl   rx   rx     s     C C5P Crk   c               #    "    \         P                  P                  P                  R 4      p Rx  \         P                  P                  P                  V 4       R#   \         P                  P                  P                  X 4       i ; i5i)TN)rG  rk  	_autograd _saved_tensors_hooks_set_tracing)r  s    rl   +_disable_saved_tensors_hooks_during_tracingr	    sX     C""CCDI;;EB;;EBs   B
-A +B
+BB
c                   V ^8  d   QhRR/# r  rb   )rw   s   "rl   rx   rx     s     K Kt Krk   c                     \         P                  P                  P                  ;'       d    \         P                  ! 4       '       * # r   )rG  r  rH   freezingis_grad_enabledrb   rk   rl   is_parameter_freezingr	    s,    ??!!**JJ53H3H3J/JJrk   c                   V ^8  d   QhRR/# )rq   ru   rY  rb   )rw   s   "rl   rx   rx     s      y rk   c                 d    \        \        4       4       U u. uF  p \        V 4      NK  	  up # u up i r   )r  r    get_torch_function_mode_stack_at)r  s    rl   get_torch_function_mode_stackr	    s3    5:;T;V5W5W(+5W  s   -c                    V ^8  d   QhRRRR/# )rq   indrt   ru   r   rb   )rw   s   "rl   rx   rx     s     0 0# 0# 0rk   c                p    V \        4       8  d   V ^ 8  g   Q h\        P                  P                  V 4      # r  )r   rG  rk  _get_function_stack_at)r	  s   &rl   r	  r	    s/    *,,9988**3//rk   c                    V ^8  d   QhRRRR/# )rq   r  rY  ru   rv   rb   )rw   s   "rl   rx   rx     s     , , ,t ,rk   c                v    \        \        4       4       F  p\        4        K  	  V  F  p\        V4       K  	  R # r   )r  r   r   r   )r  r  modes   &  rl   set_torch_function_mode_stackr	    s/    ,./!# 0 %d+ rk   c                   V ^8  d   QhRR/# r   rb   )rw   s   "rl   rx   rx     s     $ $ $rk   c                 N    \        \        4       4       F  p \        4        K  	  R # r   )r  r   r   )r  s    rl   clear_torch_function_mode_stackr	    s    ,./!# 0rk   c                    V ^8  d   QhRRRR/# )rq   r  ztorch.deviceru   torch.Streamrb   )rw   s   "rl   rx   rx     s     4 4| 4 4rk   c                @    \         P                  P                  V 4      # r   )rG  acceleratorcurrent_stream)r  s   &rl   get_current_streamr	    s    ++F33rk   c                    V ^8  d   QhRRRR/# r   rb   )rw   s   "rl   rx   rx     s      C D rk   c                     \        4        R # r   )
breakpointr  s   *rl   _breakpoint_for_c_dynamor	    s    Lrk   c                    V ^8  d   QhRRRR/# )rq   r   r   ru   rv   rb   )rw   s   "rl   rx   rx     s     
 
S 
T 
rk   c                    V P                   p\        P                  ! V4      p\        VP                  4      ^8w  d   ^RIHp V! R4      hVP                  V P                  8w  d   ^RIHp V! R4      hR# )rq   )InternalTorchDynamoErrorz[Tensor subclass method __metadata_guard__ must take exactly two subclass metadata argumentsz?Tensor subclass method __metadata_guard__ must be a classmethodN)	__metadata_guard__r  	signaturer  r`  r  r	  r  r  )r   r  sigr	  s   &   rl   verify_guard_fn_signaturer	    sk    		!	!B


B
C
3>>a1&i
 	
 
{{eoo%1&M
 	
 &rk   c                    V ^8  d   QhRRRR/# )rq   user_clsr   ru   r  rb   )rw   s   "rl   rx   rx     s      # $ rk   c                   V P                   \        P                   \        P                   39   ;'       d    V P                  \        P                  \        P                  39   ;'       dc    V P                  \        P                  \        P                  39   ;'       d.    V P
                  \        P
                  \        P
                  39   # r   )r   r  r   r  r  __iter__)r	  s   &rl   #does_not_override_dict_iter_methodsr	    s    4::{'8'899 	G 	GOO[-?-?@@	G 	GMMdii)9)9::	G 	G $--1E1E!FF	rk   c               $    V ^8  d   QhRRRRRR/# rq   r  r   r  rt   ru   rb   )rw   s   "rl   rx   rx   #  s!         rk   c                $    V P                  V4      # r   )r  r  r  s   &&rl   	call_sizer	  "  s    66!9rk   c               $    V ^8  d   QhRRRRRR/# r	  rb   )rw   s   "rl   rx   rx   (  s!      3 3 3 rk   c                $    V P                  V4      # r   )r  r	  s   &&rl   call_strider	  '  s    88A;rk   c                    V ^8  d   QhRRRR/# )rq   r  r   ru   rt   rb   )rw   s   "rl   rx   rx   -  s      3 3 rk   c                "    V P                  4       # r   )storage_offsetr  s   &rl   call_storage_offsetr	  ,  s    rk   c                    V ^8  d   QhRRRR/# )rq   r8  r  ru   r[   rb   )rw   s   "rl   rx   rx   3  s     
 
L 
^ 
rk   c                    R R.pV Uu/ uF=  q"V P                   9   g   K  V\        P                  ! V P                   V,          4      bK?  	  ppV# u upi )r  tag)r  r  )r8  KEYS_TO_COPYr   tensor_dicts   &   rl   _extract_tensor_dictr	  3  s]    #L 4@3?C!**CT'TYYqzz#''<   	s
   A,Ac               $    V ^8  d   QhRRRRRR/# )rq   r_  
tuple[Any]ra  r  ru   r	  rb   )rw   s   "rl   rx   rx   @  s!     , ,z ,> ,l ,rk   c                B    \         P                  P                  ! V / VB # r   )rG  rk  StreamrA  s   &&rl   build_streamr	  @  s    88??D+F++rk   c               $    V ^8  d   QhRRRRRR/# )rq   r_  r	  ra  r  ru   ztorch.Eventrb   )rw   s   "rl   rx   rx   D  s!     + +j +. +[ +rk   c                B    \         P                  P                  ! V / VB # r   )rG  rk  EventrA  s   &&rl   build_eventr	  D  s    88>>4*6**rk   c                      ] tR tRt$ ^ tR]R&   RtR]R&   ^ t]R R l4       t	]R R l4       t
]R	 R
 l4       t]R R l4       t]]R R l4       4       tRtR# )CompileTimeInstructionCounteriH  rt   _counter_idc                   V ^8  d   QhRR/# r   rb   )rw   s   "rl   rx   *CompileTimeInstructionCounter.__annotate__N  s     3 3d 3rk   c                	    V P                   ^,           V n         V P                   ^8X  d   \        P                  ! 4       V n        R# R# r   )_depthr   rK  r	  r   s   &rl   rK  #CompileTimeInstructionCounter.startM  s1    ZZ!^
::?*002CG rk   c                   V ^8  d   QhRR/# r   rb   )rw   s   "rl   rx   r	  T  s      D rk   c                	    V P                   ^,
          V n         V P                   ^ 8X  dA   V ;P                  \        P                  ! V P                  4      ,          un        RV n        R# R# )r   Nrk  )r	  r	  r   endr	  r   s   &rl   r	  !CompileTimeInstructionCounter.endS  sF    ZZ!^
::?LL044SWW==LCG rk   c                   V ^8  d   QhRR/# r   rb   )rw   s   "rl   rx   r	  [  s      d rk   c                	    ^ V n         R# r   r	  r   s   &rl   r   #CompileTimeInstructionCounter.clearZ  s	    rk   c                   V ^8  d   QhRR/# r   rb   )rw   s   "rl   rx   r	  _  s      c rk   c                	    V P                   # r   r	  r   s   &rl   r   #CompileTimeInstructionCounter.value^  s    ||rk   c                   V ^8  d   QhRR/# r  rb   )rw   s   "rl   rx   r	  d  s      2 rk   c              #  	  "    \         P                  '       d   V P                  4        R x  \         P                  '       d   V P                  4        R # R #   \         P                  '       d   T P                  4        i i ; i5ir   )rH   %record_compile_time_instruction_countrK  r	  r   s   &rl   r  $CompileTimeInstructionCounter.recordb  sV     	;;;		;;;	 <v;;;	 <s   B*A *B)BBrb   Nrk  )rc   rd   re   rf   r	  r   r	  r	  r   rK  r	  r   r   r   r  rj   rb   rk   rl   r	  r	  H  s    HcCMF3 3
         rk   r	  c                  .   a  ] tR tRtR V 3R lltRtV ;t# )CompileCounterIntin  c                    V ^8  d   QhRRRR/# )rq   otherr   ru   r	  rb   )rw   s   "rl   rx   CompileCounterInt.__annotate__o  s     9 9S 9%6 9rk   c                	4   < \        \        SV `	  V4      4      # r   )r	  r  __add__)r  r	  r  s   &&rl   r	  CompileCounterInt.__add__o  s     !788rk   rb   )rc   rd   re   rf   r	  rj   r  r  s   @rl   r	  r	  n  s    9 9rk   r	  c               $    V ^8  d   QhRRRRRR/# )rq   featurer   usager  ru   rv   rb   )rw   s   "rl   rx   rx   s  s&     M MS M M$ Mrk   c                z    \        4       P                  4       '       d   \        4       P                  RW4       R# R# )zE
Records whether we are using a feature
Generally a feature is a JK.
rv  N)r   r  set_key_value)r	  r	  s   &&rl   set_feature_user	  s  s.     ((**++OWL +rk   rD  _ddp_optimization_modec                   V ^8  d   QhRR/# r  rb   )rw   s   "rl   rx   rx     s      s rk   c                     \         P                  p \        V \        4      '       d   V '       d   R MRpM1\        V \        4      '       d   T pM\        R\        V 4      : 24      hV\        9   g   Q RV: 24       hV# )ddp_optimizerno_optimizationz;Invalid dynamo config optimize_ddp type type(optimize_ddp)=z.Invalid dynamo config optimize_ddp value mode=)rH   optimize_ddpr  r  r   r=  r  r	  )r 
  r	  s     rl   get_optimize_ddp_moder
    s|    &&L,%%".4E	L#	&	&JtL7I6KL
 	
 )) 
9D7;) Krk   c                   V ^8  d   QhRR/# r  rb   )rw   s   "rl   rx   rx     s      &A rk   c            	   #  t  "   \         P                  ;'       d    \        P                  ! 4       p V '       dT   \        P                  ! R4      ;_uu_ 4        \        P
                  ! 4       ;_uu_ 4        Rx  RRR4       RRR4       R# Rx  R#   + '       g   i     L ; i  + '       g   i     R# ; i5i)aV  
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)rH   "fake_tensor_disable_inference_moderG  is_inference_mode_enabledinference_moder  )is_inference_mode_ons    rl   maybe_disable_inference_moder
    so      	11WWe6U6U6W    ''MMOO  ('
 		 O (''s:   5B8B8B$4B	9B$B8B!B$$B5	/	B8c                   V ^8  d   QhRR/# r  rb   )rw   s   "rl   rx   rx     s     
 
4O 
rk   c               #     "   \         P                  '       d@   \        P                  P                  P                  4       ;_uu_ 4        Rx  RRR4       R# Rx  R#   + '       g   i     R# ; i5i)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)rH   r
  rG  r  
meta_utils$disable_inference_mode_for_fake_proprb   rk   rl   *maybe_disable_inference_mode_for_fake_propr
    sK      000))NNPP QP 	 QPPs   AA2	AA2A/	)	A2c                    V ^8  d   QhRRRR/# )rq   r  r  ru   r  rb   )rw   s   "rl   rx   rx     s     N N1 Nd Nrk   c                f    V R J ;'       g'    RV P                   9   ;'       g    RV P                   9   # )Nr"  r  rs	  )r  s   &rl   is_node_meta_validr
    s.    4<MM?dii7MM5DII;MMrk   c                   V ^8  d   QhRR/# r  rb   )rw   s   "rl   rx   rx     s     ! !4 !rk   c                     \         # r   _error_on_graph_breakrb   rk   rl   _get_error_on_graph_breakr
    s      rk   c                    V ^8  d   QhRRRR/# )rq   r   r  ru   rv   rb   )rw   s   "rl   rx   rx     s     " "T "d "rk   c                
    V s R # r   r
  r  s   &rl   _set_error_on_graph_breakr
    s    !rk   c                   V ^8  d   QhRR/# )rq   ru   AbstractContextManager[None]rb   )rw   s   "rl   rx   rx     s      (D rk   c                     \         P                  P                  P                  '       d*   \         P                  P
                  P                  R 4      M\        P                  ! 4       p V P                  4        V # )zPregraph bytecode)
rG  rH  rI  rJ  rk  rl  rm  r  nullcontextrn  cms    rl   record_pregraph_bytecode_enterr
    sV     >>""777 	../BC##% 
 LLNIrk   c                    V ^8  d   QhRRRR/# )rq   r
  r
  ru   rv   rb   )rw   s   "rl   rx   rx     s     " "&B "t "rk   c                ,    V P                  R R R 4       R # r   )ro  r
  s   &rl   record_pregraph_bytecode_exitr"
    s    KKdD!rk   c                   V ^8  d   QhRR/# )rq   ru   zlist[CodeType] | Nonerb   )rw   s   "rl   rx   rx     s     , ,. ,rk   c                 0    ^ RI Hp  V P                  ! 4       # )r{   r!   )torch._guardsr!   get_traced_coder%
  s    rl   r'
  r'
    s    ,))++rk   c               $    V ^8  d   QhRRRRRR/# )rq   rj  r   r-  rA   ru   rv   rb   )rw   s   "rl   rx   rx     s!     
 
# 
? 
t 
rk   c                    ^RI Hp ^RIHp \	        V 4      P
                  P                  RR4      pV'       d/   V! RR\	        V 4       RV 2RV R	2R
.VP                  OR7       R# R# )r   r/  r  __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__r1  N)r  r0  r  r  r  r  r   SUPPORTABLE)rj  r-  r0  r  is_overriddens   &&   rl   raise_on_overridden_hashr-
    so    #"I&&**:u=MB-d3i[8NrdS6rd:no_"..		
 rk   c               $    V ^8  d   QhRRRRRR/# )rq   r<  r>   r*  ry  ru   zCallable[..., VariableTracker]rb   )rw   s   "rl   rx   rx     s$      "4#rk   c                N   a a \        S4      '       g   Q R 4       hR VV 3R llpV# )z!Expect f to be a python callable.c               $    V ^8  d   QhRRRRRR/# )rq   r_  rA   ra  ru   rb   )rw   s   "rl   rx   #_make_inlined.<locals>.__annotate__  s)     K KK*9K	Krk   c                    < ^ RI Hp ^ RIHp V! 4       ;_uu_ 4        V! S4      P	                  SW4      uuRRR4       #   + '       g   i     R# ; i)r{   )_force_inline)UserFunctionVariableN)torch._dynamo.trace_rulesr3
  !torch._dynamo.variables.functionsr4
  rN  )r_  ra  r3
  r4
  r*  r<  s   *,  rl   inline_call"_make_inlined.<locals>.inline_call  s3     	<J__'*88TJ ___s   A  A	)r>  )r<  r*  r7
  s   ff rl   _make_inlinedr9
    s-     A;;;;;;K K rk   rb   )NFNNNNFNrf  )r   Fr  )r     r   )FFr  )r  r  )T)_forward_pre_hooks_forward_pre_hooks_with_kwargs_forward_hooks_with_kwargs_forward_hooks)_state_dict_pre_hooks_state_dict_hooks_load_state_dict_pre_hooks_load_state_dict_post_hooks)FFF)TT)r	  python_reducer'python_reducer_without_compiled_forwardr	  ()  __conditional_annotations__r   
__future__r   atexitr   r  r  r
  r  r  r  r  rh  r  r  r   r  r  r  r  r  r  r  r  r  rD  r  r  r  r  rG  r	  r_  r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   typing_extensionsr   r   rG  torch._functorch.config%torch.fx.experimental.symbolic_shapestorch.utils._pytreer  _pytreer  r   torch._Cr   r   r   r   torch._dispatch.pythonr   torch._dynamo.metrics_contextr   r   r&
  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._ordered_setr,   torch.utils._python_dispatchr-   torch.utils._tritonr.   r/   torch.utils.hooksr0   graph_utilsr1   r  collections.abcr2   r3   r4   r5   r6   r7   r8   r9   r:   r;   %torch._dynamo.bytecode_transformationr<   torch._dynamo.replay_recordr=   torch._dynamo.symbolic_convertr>   r?   torch._dynamo.variables.baserA   torch._prims_commonrB   torch._subclassesrC   r#  r  r  torch._loggingtorch._numpy_numpyr"  rD   rF   r  rH   fftlinalgr  rI   r   NP_TO_TNP_MODULEr  rJ   rK   rL   r   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   r  r  r  unpatched_nn_module_getattrr  unpatched_nn_module_call
_call_implunpatched_nn_module_call_implr   rZ   r\   troubleshooting_urlnnmodule_doc_urlnnmodule_doc_url_msgr  rc   r   r]   r  r_   r   timer_counterr  ra   rn   r   r   r   r   r   r   r   r   r   r   r   r   rE  r   r   r   r   r   r  rq  r  r  registerr  FloatTensorr  DoubleTensorr  double
HalfTensorr  halfBFloat16Tensorr  
ByteTensorr  
CharTensorr  
LongTensorr  long	IntTensorr  rt   ShortTensorr  short
BoolTensorr  tensortype_to_dtyper  r  r  r  r4	  VERBOSEr  	Formatterr  r  r  r  r+  r4  r7  r>  rB  rD  ro  r  r  r  ParamSpecArgsParamSpecKwargsTypeVarTupleTypeAliasTyper  r  r  r  r  r  r  r  r  r  r  r  r  rM  neltlegtgecmp_name_to_op_mappingcmp_name_to_op_str_mappingr  r  r  r  r  r  r  r  r"  r*  r-  r  rO  r/  !DEFAULT_COMPILATION_METRICS_LIMITr  r  r  r  r  r  r   r   r#  r&  r(  r  r	  rY  r  r  r  r  r  r  r  r  r  r  r  r#  r)  r,  r2  r1  rS  rb  rn  rw  r  rX  r   rs   r  Ellipsisr  r  r  r  memory_formatr  finfoiinfo	attention
SDPBackendr  _CudaDevicePropertiesSequenceKey
MappingKey
GetAttrKeyr  r  r  languager  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  iterr  r  r  __length_hint__tuple_iterator_lenr  r;  r  r  dict_newr   r  r>  dict_methodsr  set_methodsr  frozenset_methods	tuple_newtuple_methodsr  list_methodsrN  list_getitemstr_methodsenum_type_methodsr  r  r  r  r  r  r  r  r  r  	iter_nextr  r  r  dict_getitemr  r  r  r  r+  r4  r:  rC  rT  rW  r[  rc  rz  GLOBAL_KEY_PREFIXr|  r  r  r  r  r  r  r  r(  r  r  r  orig_code_mapr  r  seen_code_mapr  r  r  r  r,  r=  rF  r%  rJ  r  r  r  r_  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  all_hook_namesr  r  r  r  r'  r*  r?  rA  rQ  rd  rg  rl  rq  r|  r  r  r  r  r  r  r  r  r	  r	  r	  r	  r	  r 	  r$	  r;	  rA	  rE	  rG	  rk	  rp	  rt	  rv	  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
  r
  r
  r
  r
  r
  r"
  r'
  r-
  r9
  )rC  rE
  s   0@rl   <module>r
     s7   #       
   	         	 	 
          , = $  -   0   , $ $   < O ; ; =  G & 1 / F > - ' 
   B; =20	.) 
FFIIII	>
: 	
 FFCGGIIszzIIszz	
  " VV
 CLT]T]T]T]T]T]T]T]T]enCLt_#hhoo99  88??33  % : : 7B7N7N8
4  %' > & B o .//UV ! 46 0 5
 .9-D-DU-K * K!tyy %J %JP
 
  <@ 8 ?*$$  > !( 08499 f# f#R	 OO%   . MQ MQ` 
 L 
 L 
) 
)
$ $N 8 8
 
u{{3	5	u}}ejj1	5>>+	u{{n	uzzm	u{{EJJ/	OOekk599-	U[[1	uzzm  ( #:"; ",
 jj JJ	 0** 0	?
G	 B 
 A 
 A 
 
 
 

 
 

 
$ 
$
 
) 
)
 
. 
. 
3 
3 
8 
8 
= 
=  
C 
C" 
 

& 27  8w 	%! w!fll_4!$& 
5 
5
 
7 
7
 
   ! !!" I  hkkhkkhkkhkkhkkhkk  ddcdcd 43%$, T  
$05   @" @" @"F %' ! ?J>O>O,? ; 
-`!3H30-`O3d%!
&Q Qh
 26 . 5*
 ' '@ ( ( (( +   )* @ @I I IX 
 

 
 = 
 = &
 
& 7 7* & $ ( (
 < Q1 12 . &X X 2  		J	NN	LL	KK		LL	KK	KK	HH!!	JJ$$	KK##	KK""	KK""/$ y 4 foo334 $    > 2 W W
 

 
  "&bggi	 0%)"))+%6" 6(,RXXZ(8
% 8&*;=+?+?+A&B# B&*48n# 4&*4a>&:# :#33 ^^
<< //$--"6"6"8+:N:N:U:U:WXX FX
 %(LL$7$7$9N$9&Xf=Mvv$9N"++2244v8HFF4  MM	&+nn&;&;&=R&=F&AQ&=R%)]]%9%9%;P%;6x?O%;P$'LL$7$7$9N$9&Xf=Mvv$9N dii1188::vhv>NFF:  CLCL G G9 9$ 1 1 
: : 	 .    : : 
 8 8( M M
 ** *ZM M9 9 B   
 !  = <7 7 (;@( ($
 
"? ?; ;   !&%(YY5:!&"LF LF^
H H
 = =  '( ;F:Q:QRV:W7 W LN H M '( , ,& &
 $ 
/ /. B2 2	U 	UT Tn !1 1 " "P Pf/ /d
 
*2 2 G G/ / 	 	
 
 5 5 D *W W  -.?@   $&99<QQ  B $ 
 

$gb!en 
$$ $$ $&$WRU^ $* < 4 4. .  & $	C 	C   } }@A AH ) )"  0 0 <   O O   (& & 1 1. .b4 41 1   E !	2 	2% % C CK K 0 0
, ,$ $
4 4
 
 
"       
 
, ,+ +# #L9 9
M M+   "  . 
 
N N
  ! !" "
   " ", ,
 
$ sc  	B@  		DU
 O
 SP Os   !AX &#AX# 
BAX# +AX1AX1*AX6 AX6)AX;?AX;7AY AY 6AYAYAY
AY
AY*AYX	AX XAX X#AX.X-AX.