~L i|@%UdZddlmZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddlm!Z!m"Z"ddlm#Z#m$Z$ddlm%Z%ddl m&Z&ddlm'Z'm(Z(dd lm)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1dd l2m3Z3m4Z4m5Z5m6Z6m7Z7ddl8Z8ddl9Z8ddl:Z8ddl;mdd l8m?Z?dd l@mAZAmBZBmCZCmDZDdd lEmFZFddlGmHZHmIZIddlJmKZKmLZLmMZMddlNmOZOddlPmQZQmRZRmSZSmTZTmUZUddlVmWZWmXZXddlYmZZZddl[m\Z\ddl]m^Z^m_Z_ddl`maZaddlbmcZcejr0ddlemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnddlompZpddlqmrZrmsZsddltmuZuddlvmwZw ddlxZy ddl{Z8ddl|m}Z~ddlJmZddl{mZdd lmZeyryeyeyjeyjeyj fZd!ed"<eye~eyje~jeyje~jeyj e~j iZnd#ZiZdd$lmZmZmZe0d%Ze0d&Ze4d'Ze8j"j$j&Ze8j"j$j*Ze8j"j$j.Zej2ejBZd(ed)<iZd*ed+<d,Zd-Zd.ed/Zej>eZiZd0ed1<ej2eZd2ed3<ejJZGd4d5e jNZGd6d7Z d[d8Zdad\d9Zd\d:Zdad;ed<<d]d=Zd^d>Zdad_d?Zd`d@Zd\dAZdBedC<dDedE<dadFZdbdGZGdHdIe jNZGdJdKZejrZe$ dc dddMZe/dedfdNZe/ de dgdOZ dh didPZejzd\dQZe8j~e8je8jFfe8je8je8jfe8je8je8jfe8je8jfe8je8jfe8je8jfe8je8je8jfe8je8je8jfe8je8je8jfe8je8jfi ZGdRdSZe٫ZڐdjdTZېd\dUZܐdjdVZݐdjdWZސdkdXZߐdldYZdmdZZdnd[Zdod\Zdpd]ZGd^d_Ze/dqd`Ze/ drdaZe/dsdbZdtdcZejddk\rHejejejhej`ejejfZdudeZdudfZdudgZe/ dvdhZe/ dwdiZ dudjZe1ejejejejfZdkedl< dxdmZ dydnZejejejejejejdoZdpdqdrdsdtdudoZ dzdvZd{dwZd|dxZd}dyZd~dzZdd{Ze jLd|dd}Zddd~ZddZddZ ddZ dZ ejGddZ dZejeaded<ddZddZddZ ddZeHeZeIeZddZd\dZddZGddZdaded<ddZddZe$ d ddZejGddZGddeZ e e _!ddZ"dd ddZ#e/ ddZ$e/ddZ$ddZ$ddZ%e$ddZ& ddZ'deddZ(ddZ)d~dZ*ddZ+e jLdddZ,ddZ- d ddZ.ddZ/e&dddZ0eee1eאe2e3e4de5jle7jlejNe8jpe8jre8jte8jve8jxe8jze8j"j|j~e8jjhZBded<e_r0ddlCZCeBjeCjjr ddZFe jddZHddZIddZJddZKddZLddZMddZN ddZOddZPe4ijZRded<e4ijZTded<e4ijZVded<e4e"jZWded<e4eXd#ZYded<e4eXeZdZ[ded<eYjZ]e^jZ`eajZbejeajje"jjDchc] }ee|r|c}ZfegjjDchc]}ee|s |c}ZheijjDchc]}ee|s |c}ZjekjZlekjjDchc]}ee|s |c}ZmenjjDchc]}ee|s |c}ZoenjZqe2jjDchc]}ee|s |c}Zre0dƫZse0dǫZtddȄZuddɄZvddʄZwdd˄Zxdd̄Zydd̈́Zze{Z|dd΄Z}ddτZ~eajZddЄZddфZdd҄ZddӄZddԄZddՄZddքZ de ddׄZ dd؄ZddلZddڄZddۄZdܐZddݐlmZddބZdd߄ZdLd ddZddZ ddZddZddLddLddLdLej*dLdLf ddZddZejHddZeZej2enZded<gZded<eZe jddZddZdddZddZ ddZ de ddZejrZddZe$ddZ ddZddZddZddZddZddZdudZddZddZ de ddZGdde jNZdҐdZ dӐdZdԐdZ dՐdZddgZdd gZgd ZeezezZdd Z d dאd Z d dؐd ZdِdZdِdZGdde-eefZdڐdZGddZGdde-eefZdېdZ dܐdZÐd~dZĐd~dZŐdݐdZƐdݐdZǐdސdZȐdߐdZejGdd Zʐdd!Zːdd"Z̐dd#Z͐dud$Zΐdud%Zϐdd&ZАdud'Zѐdd(Z dd)ZӐdud*ZԐdd+ZejH d dd,Z֐dd-Zאdd.ZGd/d0e8j"j$Z dd1Zڐdd2Zېdd3ZGd4d5ZegZސd6ed7<ddd8Zߐdd9ZejHdd:Zdd;Zdd<Zdd=Zdd>Zd\d?Zdd@ZddAZddBZe8jddCZe8jddDZe8jddEZddFZiZdGedH<ddIZddJZGdKdLZGdMdNeҫZddOZdPZdedQ<ddRZe$ddSZe$ddTZddUZdLaddVZddWZe8jddXZe8jddYZddZZy#ez$rdZyYwxYw#e$rYRwxYwcc}wcc}wcc}wcc}wcc}wcc}w(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)AbstractContextManagercontextmanager) is_dataclass) lru_cache)CodeTypeMethodWrapperType) AnyCallablecastClassVarGenericOptionaloverloadTypeVarUnion)Literal ParamSpec TypeAlias TypeGuardTypeIs)fx)_instruction_counter_len_torch_function_stack_pop_torch_function_stack_push_on_torch_function_stack)enable_python_dispatcher)MetricsContextRuntimeMetricsContext) CompileIdSourceTracingContext)is_sparse_compressed)justknobs_checklog_chromium_event_internallog_compilation_eventrecord_chromium_event_internalsignpost_event)_format_graph_codelazy_format_graph_code) _WaitCounter)LazyModuleMixin) has_tritonhas_triton_package)RemovableHandle)_get_flat_args) Container Generator ItemsViewIterableIteratorKeysViewMappingSequence ValuesView)ExecutionRecord)InstructionTranslatorInstructionTranslatorBase)VariableTracker)DeviceLikeType)detect_fake_mode LazyStringconfigztuple[types.ModuleType, ...]NP_SUPPORTED_MODULES) FakeTensoris_fakemaybe_get_fake_modeTR_Pz*collections.defaultdict[str, Counter[str]]countersdict[str, Any]optimus_scuba_logzAhttps://pytorch.org/docs/main/torch.compiler_troubleshooting.htmlz;https://pytorch.org/docs/main/torch.compiler_nn_module.htmlzSee z& for more information and limitations.zdict[str, list[float]]compilation_time_metricsdict[str, float]cumulative_time_spent_nsceZdZdZdZdZy)ReInplaceTriggerr2N)__name__ __module__ __qualname__ AUTO_FUNC_V1 AUTO_FUNC_V2 TRITON_OPSrHY/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/torch/_dynamo/utils.pyrVrVsLLJr_rVceZdZUejeZded<ed dZ ed dZ ed dZ ed dZ ed dZ ed dZy )ReinplaceCountersz!collections.defaultdict[str, int]_valuescX|dk7r%|jd|jxx|z cc<yyNr missed_bytes_)rcname)clstriggerbytess r`add_missed_bytesz"ReinplaceCounters.add_missed_bytess- A: KK- ~6 75 @ 7 r_cD|dk7r|jd|xx|z cc<yyNrmissed_tensors_)rc)rhricounts r`add_missed_opportunitiesz*ReinplaceCounters.add_missed_opportunitiess) A: KK/'3 4 = 4 r_c8|jjyN)rcclearrhs r`rszReinplaceCounters.clears r_cdd}tD]$}||jjd|dz }&|Srm)rVrcgetrhsumris r`get_total_missedz"ReinplaceCounters.get_total_misseds=' CG 3;;??_WI#>B BC C r_cxd}tD].}||jjd|jdz }0|Sre)rVrcrvrgrws r`get_total_missed_bytesz(ReinplaceCounters.get_total_missed_bytessA' FG 3;;??]7<<.#A1E EC F r_cL|jrtdd|jyy)Ninductorreinplace_counters)rcr*rts r`logzReinplaceCounters.logs! ;; :';S[[ I r_N)rirVrjintreturnNone)rirVrorrrrrrr)rYrZr[ collections defaultdictrrc__annotations__ classmethodrkrprsryr{rrHr_r`rbrbs1H1H1H1MG .MAA >>  JJr_rbc ddl}|j||S#t$r0djdtj|g|DcYSwxYw)Nrheaders c3ZK|]#}djtt|%yw), N)joinmapstr).0rows r` ztabulate..s$ ),DIIc#sm $ s)+)tabulate ImportErrorr itertoolschain)rowsrrs r`rrsZ   w 77  yy 09 40P    s6AActdzayNr2) curr_framerHr_r`increment_framers aJr_cXtjtjdayNr)rTrsrRrrHr_r`reset_frame_countrs""$""$Jr_!Optional[list[Callable[[], str]]]_recompile_user_contextsc>tgatj|y)aj Register a hook to be called when a recompile is triggered. The hook should return a string describing user contexts that are not available to the compiler, such as the current training epoch. This is useful for debugging and data analysis for recompile. For data retention purposes, the user context string is capped at 256 characters. N)rappend)hooks r`(register_hook_for_recompile_user_contextr s '#% ##D)r_ctSrr)rrHr_r`#get_hook_for_recompile_user_contextr ##r_ct|z ayrr)op_count)cnts r`increment_op_countrs  OHr_ci}tjD] \}}|dz ||<|jdd|jddz|d<|S)NeAentire_frame_compilerentire_backward_compiletotal_wall_time)rTitemsrv) total_by_keyphasetimings r`calculate_time_spentr&slL1779+ v$sl U+'3&6&6'2A6'7L"# r_c t}d}|jD]\}}|d|dt|d}t|y)NzTIMING: :)rrroundprint)routkeyvalues r`print_time_reportr6sQ')L C"((*/ UQse1U5!_-./ #Jr_r _METRICS_CONTEXTr!_RUNTIME_METRICS_CONTEXTctSrr)rrHr_r`get_metrics_contextrYs r_ctSrr)rrHr_r`get_runtime_metrics_contextr]rr_ceZdZdZdZdZdZy)CompileEventLogLevelz Enum that loosely corresponds with a "log level" of a given event. CHROMIUM_EVENT: Logs only to tlparse. COMPILE_EVENT: Logs to tlparse + PT2 Compile Events COMPILATION_METRIC: Logs to tlparse, PT2 Compile Events, and dynamo_compile r2rWrXN)rYrZr[__doc__CHROMIUM PT2_COMPILECOMPILATION_METRICrHr_r`rrasHKr_rceZdZdZedej f ddZe d ddZe d ddZ e ddZ edejf ddZ e dd Z eejf dd Zedd Zedd Zeddd Ze d ddZeddZeddZy)CompileEventLoggera Helper class for representing adding metadata(i.e. columns) to various compile events. Use CompileEventLogger to add event data to: - Chromium events - PT2 Compile Events - CompilationMetrics This should be used in conjunction with dynamo_timed() and metrics contexts, which create timed spans and events. CompileEventLogger uses three log levels (described in CompileEventLogLevel), where each log level logs to all sources below it in the hierarchy. Example usages: - I want to log to an existing chromium event within dynamo timed: with dynamo_timed("my_event"): CompileEventLogger.chromium("my_event", foo=bar) - I want to log my event to both chromium + pt2_compile_events: with dynamo_timed("my_event", log_pt2_compile_event=True): CompileEventLogger.pt2_compile("my_event", foo=bar) - I want to add information to dynamo events and dynamo_compile CompileEventLogger.compilation_metric(foo=bar) Nc|tj}t}|tjk(rd}n!|tj k(rd}n t d|j||||y)NFTzjCannot log instant event at COMPILATION_METRIC level. Please choose one of CHROMIUM_EVENT or COMPILE_EVENT)timetime_nsget_chromium_event_loggerrrr RuntimeErrorlog_instant_event) event_namemetadatar log_level chromium_loglog_pt2_compile_events r`rz$CompileEventLogger.log_instant_eventsp ?llnG02 ,55 5$) ! .:: :$( !|  && +@ r_c t}|j}|tjk(r|j|fi|y|tj k(r4|j}||vr t d||j|fi|y|tjk(sJ|j}||k7r t dt}|js t d|j|||j|fi|y)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) rget_pt2_compile_substackrradd_event_datarrrget_outermost_eventr in_progressupdate)rr overwriterrpt2_compile_substack top_eventmetrics_contexts r`add_datazCompileEventLogger.add_datas 12 +DDF ,55 5 'L ' ' ?h ? .:: :#/#H#H#J !55"A  (L ' ' ?h ? 4 G GG GG$88:IY&"B23O"..0"q  " "8Y 7 'L ' ' ?h ?r_c ~tj}| tdtj|||fi|y)zC Syntactic sugar for logging to the toplevel event NzWNo toplevel event active. Please only call this function within a dynamo_timed context.)rrrrr)rrrrs r` add_toplevelzCompileEventLogger.add_toplevelsD./CCE  i  ##Iy)PxPr_ct}|tjk(s|tjk(r|j |||y|tj k(sJ|j }||k7r tdt}|js td|j |||j |||y)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) rrrr incrementrrrrrrrrrrrrs r`rzCompileEventLogger.increments12 -66 60<<<  " ":sE : 4 G GG GG$88:IY&"} 23O"..0"~  % %c5 1  " ":sE :r_r2ct}|j}| tdtj ||||y)zX Increments a value on the toplevel metric. By default, logs to metric. N_No toplevel event active. Please only call this function within a metrics context/dynamo_timed.)rrrrrrrrrrs r`increment_toplevelz%CompileEventLogger.increment_toplevelsF12  446  q  $$Y 3Fr_ct}|tjk(s|tjk(r|j |||y|tj k(sJ|j }||k7r tdt}|js td|j |||j |||y)zl Add metadata to a set of values with 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.rN) rrrr add_to_setrrrrrrs r`rzCompileEventLogger.add_to_set s12 -66 60<<<  # #JU ; 4 G GG GG$88:IY&"| 23O"..0"~  & &sE 2  # #JU ;r_ct}|j}| tdtj ||||y)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)rrrrrrs r`add_to_set_toplevelz&CompileEventLogger.add_to_set_toplevel)sF12  446  q  %%iCGr_c Rtj|tjfddi|y)z Add to in chromium. Each key/value of metadata will appear in the chromium trace. should be the name of a timed event span passed to `dynamo_timed`. rFN)rrrrrrs r`chromiumzCompileEventLogger.chromium=s. ## ,55 AF JR r_c Rtj|tjfddi|y)a Add to 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. should be the name of a timed event span passed to `dynamo_timed`, with log_to_pt2_compile_events=True. rFN)rrrrrs r` pt2_compilezCompileEventLogger.pt2_compileGs. ## ,88 DI MU r_c Ntjtj|fi|y)a6 Add 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)rrrr)rrs r`compilation_metricz%CompileEventLogger.compilation_metricTs% '' 3 3Y BJ r_cPtj|||tjy)z Log an instant event to chromium logs with name at time . The `args` field in Perfetto will point to metadata. should be a value obtained from time.time_ns(). N)rrrr)rrrs r`instantzCompileEventLogger.instant`s" ,, '+?+H+H r_c Ttsyt}|j|fi|y)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_activertry_add_event_data)rrrs r`try_add_pt2_compilez&CompileEventLogger.try_add_pt2_compilels*)* 02 ' '' ?h?r_c`tsyt}|jsy||i|y)z Special function that quietly runs a given method, returning if CHROMIUM_EVENT_LOG is None or metrics context is not set N)rrr) method_fnargskwargsrs r`try_zCompileEventLogger.try_xs1 )* -/**, 4"6"r_) rrrrPr Optional[int]rrrrF) rrrrrboolrobjectrr)rrrrrr rr) rrrrrrrrrr)rrrrrrrr) rrrrrrrr rr)rrrr rrrr)rrrr rr)rrrr rrrr)rrrrPrrrr)rzCallable[_P, Any]r_P.argsr _P.kwargsrr)rYrZr[r staticmethodrrrrrrrrrrrrrrrrrHr_r`rros0"&*>*G*G      (     * +@+@'+@+@ +@  +@+@Z;@ Q' Q48 QNT Q  Q Q;;$8;?B;KN; ;;<*>*Q*QG GG(G  GG <<$8?!G/H+c|&;G9$EFLLNOmm22EEGtSO'00777('2&'  #1$  " "a ' NN<(MNTTV W"M |J7==?@(Q  ! ! # u (##B' (   )  %,,]S-@A"" H.CZ  $ %Z 0M A 0  # #q ( #.449N'4/K"5"7"..0#--.F T%'11-M"="?))*BKP!&0&**5oE $--m[%P " &1 $   )  %,,]S-@A"" H.CZ  $ %Z 0M A 0  # #q ( #.449N'4/K"5"7"..0#--.F T%'11-M&1 #>"?))*BKP!&0&**5oE $--m[%P "- $s8F?P(LL 3L;DP( LLDP%%P(cyrrrHrepr aggregates r` compile_timesr<sILr_cyrrrHr9s r`r<r<s&)r_cNtfd fd }|dk(r9tDcgc]}||t|df}}d}|t|dz }|S|dk(rKtjDcgc] }||d }}t tj }||fSy cc}wcc}w) 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. rc`r|t|Sdjt||S)Nr)rxrr)valuesitem_fnr;s r`fmt_fnzcompile_times..fmt_fn4s+ 3v;' 'yyWf-..r_c |dS)Nz.4frHxs r`zcompile_times..;s 3r_)rAz!TorchDynamo compilation metrics: )Functionz Runtimes (s)rcsvc |dS)Nz.6frHrDs r`rFzcompile_times..Cs 1S'r_N)r@z list[float]rAzCallable[[float], str]rr)rrRrr@listkeys) r:r;rBkrrvr@rs ` r`r<r<$s GJ/  u}. /2> !DHHSMdhh-$,,.  e ,dhh-$,,.r_N))rTrrrr)rz!Union[str, tuple[object, object]]rr)rYrZr[rWrUrbrHr_r`rRrR^s8 r_rRctjjdddk(}|r tSt j S)NTORCH_COMPILE_DEBUG01)osenvironrvadd_file_handlerr"r#) compile_debugs r`setup_compile_debugrlus7JJNN#8#>#EM!!    !!r_c,tjyrr)graph_break_dup_warning_checkerrUrHr_r`reset_graph_break_dup_checkerro~s#))+r_ctjjtd}tj|dt j tjj|dt jdjtj}|jfd|S)N torchdynamoTexist_okz debug.logz torch._dynamoc&jSrr removeHandlerlog_file_handlerloggersr`rFz"add_file_handler..sv334DEr_) rhpathr get_debug_dirmakedirslogging FileHandler getLogger addHandlerr"r#callback)log_path exitstackrxrys @@r`rjrjsww||MO];HKK4(**277<<++NO    /F &'$$&I EF r_cBtj}tjxt j tjt jjjD](j|jfd*|S|S)Nc&jSrrrurwsr`rFz setup_log_file..sv';';>( # KKKX  KK1D Ah% $  # $ $ $ G ;XFGs55BAB8B BBBBCCcTd}|jD]}d|jvs|dz }|S)Nrcallr2)nodesop)gcns r` count_callsrs5 A WW QTT> FA Hr_c|SrrrHrDs r`identityrs Hr_cN t|y#t$rYyt$rYywxYwNTF)hash TypeError ValueErrorrDs r`hashablers. Q  s  $$$cyrrrHrrs r`nothingrsr_cJeZdZdZd dZd dZd d dZddZddZddZ d d Z y)ExactWeakKeyDictionaryz\Similar to weakref.WeakKeyDictionary, but use `is`/`id` rather than `==` to compare equalityc i|_i|_yrrr@refsrZs r`rWzExactWeakKeyDictionary.__init__s&( ;= r_c2|jt|Srr)r@idras r` __getitem__z"ExactWeakKeyDictionary.__getitem__s{{2c7##r_NcL|jjt||Srr)r@rvr)rVrdefaults r`rvzExactWeakKeyDictionary.gets{{r#w00r_c0t||jvSrr)rr@ras r` __contains__z#ExactWeakKeyDictionary.__contains__s#w$++%%r_ct|jvr'tj|fdj<|j<y)Nc&jSrr) _remove_id)refidxrVs r`rFz4ExactWeakKeyDictionary.__setitem__..s$//#:Nr_)rrweakrefrr@)rVrrrs` @r` __setitem__z"ExactWeakKeyDictionary.__setitem__s?g dii $[[.NODIIcN  Cr_cr||jvr |j|=||jvr|j|=yyrrr)rVrs r`rz!ExactWeakKeyDictionary._remove_ids6 $++  C $))  # r_cl|jj|jjyrr)rrsr@rZs r`rszExactWeakKeyDictionary.clears   r_r)rr rr rr)rr rr rr )rr rr)rr rr rrrrrr) rYrZr[rrWrrvrrrrsrHr_r`rrs(f>$1&!  r_rcyrrrHobj allowed_typess r`istypers>Ar_cyrrrHrs r`rrsr_cyrrrHrs r`rrs@Cr_clt|tttfr t ||vSt ||uS)zisinstance() without subclasses) isinstancetuplerJrYrrs r`rrs1-%s!34CyM)) 9 %%r_rX ctjdk\rt|tryt|tj xs|tj uS)NrT)sys version_infor_builtin_final_typing_classestyping_Finalrrs r` is_typingr s> 7"z%9V'W eV]] + Fu/FFr_c tsyt|tjtjtjtj tj tjtjtjfSNF) nprint8int16int32int64uint8uint16uint32uint64rs r`is_numpy_int_typersU   GG HH HH HH HH II II II   r_ctsyt|tjtjtjfSr)rrfloat16float32float64rs r`is_numpy_float_typer-s2   JJ JJ JJ  r_cyrrrHrs r`is_lru_cache_wrapped_functionr;s25r_cyrrrHrs r`rrAs47r_cxt|tjxrtt j |dS)N __wrapped__)r functools_lru_cache_wrapper is_functioninspectgetattr_staticrs r`rrGs6 eY99 : {um4@r_r _FuncTypesct|xs>t|tjjtjj fSrr)rrr_opsOpOverloadPacket OpOverloadrs r`is_function_or_wrapperrWs; u    ++UZZ-B-BC"r_ct|tjtjtjtj fSrr)rtypes FunctionTypeBuiltinFunctionTypeMethodDescriptorTypeWrapperDescriptorTypers r`rr_s=      % %  & &  ' '   r_)__eq____ne____lt____le____gt____ge__z==z!=z>=ct|tjtjtjtj tj fSrr)rrGetSetDescriptorTyperrMemberDescriptorTyper rs r`is_wrapper_or_member_descriptorrsH    & &  & &  ' '  & &  # #  r_ct|dSr) unwrap_with_attr_name_if_wrapper)fns r`unwrap_if_wrapperrs +B / 22r_ct|r4tj|ddrtj|d|}d}||fSd}||fS)N_torchdynamo_inlineF)rrr)r attr_names r`rrsT2711"6KUS  # #B(=r B)  y= y=r_cDtsyt|tjSr)rrndarrayrs r`is_numpy_ndarrayrs  % $$r_ctjtjjgtj }|tj jfz}t||S)zCheck of obj is a tensor) rTensornn ParameterrFtraceable_tensor_subclasses _subclassesrIr)r tensor_lists r`istensorr!sW   %  + +%K !2!2!=!= ??K #{ ##r_c"t|tSrr)rr.)mods r`is_lazy_moduler$s c? ++r_rcct|yrr)rrs r` print_oncer's  4Lr_c~|dfd }|jt|jdk(sJ|jdS)zNSome black magic to create a cell object that usually only exists in a closurecSrrrHrDsr`rzmake_cell..fsr_r2r)rr ) __closure__r_)valrrEs @r` make_cellr,s> A == $Q]]);q)@@ @ == r_c B td|D}|jDcic]\}}||j}}}||fScc}}w#t$rF}ddlm}ddlm}|dd||d|t|jdg| Yd}~yd}~wwxYw) Nc3<K|]}|jywrr)as_proxyrargs r`rz$proxy_args_kwargs..s:c3<<>:r2unimplemented_v2)typestrz&Failed to convert args/kwargs to proxyzcall_function args: rz7Missing `as_proxy()` implementation for some arg/kwarg.gb_typecontext explanationhintsfrom_exc) rrr/NotImplementedErrorrr4variables.baser5rJr@) rr proxy_argsrr1 proxy_kwargser4r5s r`proxy_args_kwargsrAs :T:: *:!GT&--/EZ<[;\]Q    s(%AA A A B<dZ;ded?<dZZ?dBedC<dZ@dedD<dZAdedE<dZBdedF<dZCdedG<dZDdedH<dZEdedI<dZFdedJ<dZGdedK<dZHdedL<dZIdMedN<dZJdedO<dPZKd#edQ<dZLdedR<dZMd#edS<dZNd#edT<dZOdedU<dZPdedV<dZQdedW<dZRdedX<dZSdedY<dZTdedZ<dZUded[<dZVded\<dZWded]<dZXded^<dZYded_<dZZded`<dZ[deda<dZ\dedb<dPZ]d#edc<e^deddZ_y)fCompilationMetricsN Optional[str]r frame_keyr co_filenamerr cache_sizeaccumulated_cache_size guard_countshape_env_guard_countgraph_op_countgraph_node_countgraph_input_countOptional[float] start_timeentire_frame_compile_time_sbackend_compile_time_sinductor_compile_time_scode_gen_time_s fail_type fail_reasonfail_user_frame_filenamefail_user_frame_linenozOptional[set[str]]non_compliant_opscompliant_custom_opsrestart_reasonsdynamo_time_before_restart_szOptional[list[str]] stack_traceexception_stack_tracegraph_node_shapesOptional[bool]has_guarded_coderemote_cache_time_saved_sstructured_logging_overhead_sconfig_suppress_errors config_inline_inbuilt_nn_modulesspecialize_float dynamo_configrnum_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_ustriton_compile_time_usruntime_cudagraphify_time_usruntime_triton_autotune_time_us%dynamo_compile_time_before_restart_us distributed_ephemeral_timeout_usstructured_logging_overhead_us!remote_fx_graph_cache_get_time_us!remote_fx_graph_cache_put_time_us#backward_cumulative_compile_time_us end_time_uspre_grad_pass_time_uspost_grad_pass_time_usjoint_graph_pass_time_usrlog_format_versioninductor_configremote_cache_version"inductor_fx_remote_cache_hit_count#inductor_fx_remote_cache_miss_count%inductor_fx_remote_cache_backend_type!inductor_fx_remote_cache_hit_keys"inductor_fx_remote_cache_miss_keys cuda_versiontriton_versionzOptional[dict[str, bool]] feature_usagecompile_time_autotune_time_usFr gc_time_ustensorify_float_attempttensorify_float_successtensorify_float_failureguard_latency_usrecompile_reasonnum_graph_breakstriton_kernel_compile_times_usir_countcudagraph_skip_reasonpython_version!pgo_put_remote_code_state_time_us!pgo_get_remote_code_state_time_us param_numel param_bytes param_countrecompile_user_contexts#inline_inbuilt_nn_modules_candidatec dd}dd}dd}dd}||jd||jd||jd||jd||jd ||jd ||jd ||jd ||jd d }i||}||jd|d<||jd|d<||jd|d<|jd}|r t|nd|d<|di|S)z Factory method to create a CompilationMetrics from a dict of fields. Includes the logic to add legacy fields and any pre-processing, e.g., we transform some fields to comma-separated strings for scuba logging. c||dz SdS)Ng.ArHmetrics r`us_to_sz*CompilationMetrics.create..us_to_s`s#)#56C< ?4 ?r_c||dzSdSrCrHrs r`us_to_msz+CompilationMetrics.create..us_to_mscs%+%76T> AT Ar_cdd|yt|ttfsydjfdt |DS)Nc8 t|S#t$rYywxYwN )rr)items r`safe_strzFCompilationMetrics.create..collection_to_str..safe_strgs#'t9$ '&'s r,c3.K|] }|ywrrrH)rrrs r`rzGCompilationMetrics.create..collection_to_str..ssFtHTNF)rr rr)rrYrJrsorted)rrs @r`collection_to_strz4CompilationMetrics.create..collection_to_strfs< ' ~fsDk2"88Fvf~FF Fr_cd|y tjt|S#t$rYywxYwr)jsondumpsrJrrs r`collection_to_json_strz9CompilationMetrics.create..collection_to_json_strus4~ #zz$v,// #" #s # //rqrrrsrtrurzr|r}r{) rVrWrXrYrZrhrorprirrrrN)rrrrU)rrrr)r Optional[Any]rrKrH)rvr) rhmetricsrrrrlegacy_metrics all_metricsrs r`createzCompilationMetrics.createXs @ B G #"'++o">?+2 ?@,'. EF'(/ AB( ' JK *1 >?*2: ?@22: ?@2.5 <=./ 84373 r^base_dir repro_after repro_level TYPE_CHECKINGrdebug_dir_rootrepro_tolerancerepro_forward_only_custom_ops_profile_save_config_ignorerepro_ignore_non_fpignore_logger_methodslog_compilation_metricssame_two_models_use_fp64rreorderable_logging_functionsnontraceable_tensor_subclasses)_autograd_backward_strict_mode_banned_ops+inject_BUILD_SET_unimplemented_TESTING_ONLY)rrrYr)d blocklistrrs r`clean_for_jsonz6_get_dynamo_config_for_logging..clean_for_jsonsQ 2 ggi U)# *UC"8e C   s,AT) sort_keys)rrPrrP)rFget_config_copyrr)r config_dicts r`_get_dynamo_config_for_loggingrs- <!!7!7!9:K ::kT 22r_c,Gddtj}t}d}d}tjj r) tjj j }|~ |jD]E\}}t|ts|j|t|ts8t|||<G|D]}||=tj||dd}|S|S#ttf$rd}YwxYw#t$rd}Y|SwxYw)zN Method to parse and scrub uninteresting configs from inductor config c eZdZdfd ZxZS)A_scrubbed_inductor_config_for_logging..TypeSafeSerializercB t||S#t$rYywxYw)NzValue is not JSON serializable)superrr)rVo __class__s r`rzI_scrubbed_inductor_config_for_logging..TypeSafeSerializer.defaults) 8wq)) 87 8s  )rr rr )rYrZr[r __classcell__rs@r`TypeSafeSerializerrs  8 8r_rNz!Inductor Config cannot be pickledT)rhskipkeysrz(Inductor Config is not JSON serializable)r JSONEncoderrYr _inductorrFrrAttributeErrorrrrrbrJrr)r keys_to_scrubinductor_conf_strinductor_config_copyrr+s r`%_scrubbed_inductor_config_for_loggingrs08T--8"eM  D#(??#9#9#I#I#K ' K0668 :S!#s+!%%c*c3'04S (-  :% .(- .!% $& !   1>* D C  D* K J   Ks+(C-.AD63D-DD DDc tjjjr ddlm}|}d}nd}d}|jd}|s(tjjj}||dz|dz|r |jnd|r t|ndttjjt!t"j$t"j&t)tj*j,t/rt0j2nd||t4j*d} t6j9i| | t:j= d} j>d urd | z} j@d ur| d z} tjjC| fd d |tE t"jFr tI yy#t $rd}d}YwxYw)Nr)REMOTE_CACHE_VERSION_ManifoldCacherr)rrqrr[r\r{rmrjrkrrrrrrcompilation_metricsFbwd_T_runtimec tjjDcic]#\}}|t|tr t |n|%c}}Scc}}wrr) dataclassesasdictrrrYrJ)rLrMrs r`rFz,record_compilation_metrics..qsM#**+>?EEG 1 *Q,tAw! 3  s(A)record_logging_overheadr)%rrutils should_use_remote_fx_graph_cachetorch._inductor.fb.remote_cacherModuleNotFoundErrorrvrrrr[rrHrget_structured_logging_overheadrrFsuppress_errorsinline_inbuilt_nn_modulesrversioncudar/triton __version__rrJrrrrrtrace_structuredrrr() start_time_ns end_time_nsrexc_type exc_valuerrrrcommon_metricsrgrs @r`record_compilation_metricsr 8s ==? 9 L#7 4D 1 15-#\*J ]]11DDF !&$."d*.6X**D)2s9~*3 NN : : <+ 89"("8"8,2,L,L@B **0: &,," 41V++#N(-334Q~4Q4QR 34 D%%.}%%-j  NN##  !&$$((;<%%12&# 9#' 48 1 9s G G.-G.)on_exitctt|kDr'tjtt|kDr'tjt|}|ay)Nr)r_rpopleftrdeque)new_size new_deques r`set_compilation_metrics_limitrsE " #h .$$& " #h .!!"6xHI$r_c,tjyrr)rrsrHr_r`clear_compilation_metricsrs r_c ttSrr)rJrrHr_r`get_compilation_metricsrs $ %%r_ceZdZdZddZddZddZddZddZddZ ddZ dd Z dd Z d dd Z dd Z d ddZ d ddZ d ddZy )ChromiumEventLoggeraLogs chromium events to structured logs. tlparse will concatenate these into a perfetto UI link. See https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/preview#heading=h.yr4qxyxotyw for a specification of the Chromium Event JSON format. ct|jdr|jjSg|j_|jjS)z] The main event stack, with every chromium event. Logged to tlparse. r0)r tlsr0rZs r` get_stackzChromiumEventLogger.get_stacks9 488W %88>> !DHHN88>> !r_c4|j}|r|dSdS)zv Get the outermost event name (i.e. the longest running event) or None if the stack is empty. rN)r)rVr0s r`rz'ChromiumEventLogger.get_outermost_events!   uQx*d*r_ct|jdr|jjSg|j_|jjS)zq A smaller subset of the main stack that gets used to log PT2 Compile Events internally. r)r rrrZs r`rz,ChromiumEventLogger.get_pt2_compile_substacks? 4883 48800 0,.DHH )8800 0r_c|t|jdsi|j_|jjS)N event_data)r rr rZs r`get_event_dataz"ChromiumEventLogger.get_event_datas,txx."$DHH xx"""r_c0tj|_ddlm}|j r)|j dt j|_n"tt j|_tjd|jy)Nr2rE-z*ChromiumEventLogger initialized with id %s) threadinglocalrrrFpt2_compile_id_prefixuuiduuid4id_rrrO)rVrFs r`rWzChromiumEventLogger.__init__sd??$  ' ' 667qGDH4::<(DH =txxHr_c P||jvry|j|fi|y)zd Same as add_event_data, but will silently not log if the event isn't in the stack. N)rr)rVrrs r`rz&ChromiumEventLogger.try_add_event_datas+ T^^- - J1&1r_c ||jvr)tdt|d|jd|j}||vri||<||j |y)zz Adds additional metadata info to an in-progress event This metadata is recorded in the END event Event  not in q. Cannot add metadata to events that aren't in progress. Please make sure the event has started and hasn't ended.N)rrr:r!r)rVrrr s r`rz"ChromiumEventLogger.add_event_datas} T^^- -j)*(4>>3C2DEKK  ((* Z '%'Jz ":%%f-r_c||jvr)tdt|d|jd|j}||vri||<|||vrd|||<|||xx|z cc<y)zK Increment an integer event data field by the given amount r,r-r.rN)rrr:r!rVrrrr s r`rzChromiumEventLogger.increments T^^- -j)*(4>>3C2DEKK  ((* Z '%'Jz " j, ,*+Jz "3 ':s#u,#r_c||jvr)tdt|d|jd|j}||vri||<|||vrt |||<|||j |y)zR Add a value to a set within a event_name's metadata if it exists r,r-r.N)rrr:r!rYrbr0s r`rzChromiumEventLogger.add_to_sets T^^- -j)*(4>>3C2DEKK  ((* Z '%'Jz " j, ,*-%Jz "3 ':s#''.r_NcH|xs(tjjj}t ||d<|j ||d||j j||j|fi||r |jj|yy)a Logs the start of a single event. :param str event_name Name of event to appear in trace :param time_ns Timestamp in nanoseconds :param metadata: Any extra metadata associated with this event :param log_pt2_compile_event: If True, log to pt2_compile_events :param compile_id: Explicit compile_id (rather than using the current context) rBN) rrrrr_log_timed_eventrrrr)rVrrrrrs r`rz#ChromiumEventLogger.log_event_starts  T5==#?#?#R#R#T !$Z        +J3(3  ) ) + 2 2: > !r_c|j}|j}|j|j|j}|jyrr)rrrsr!)rVr0substackr s r`rUzChromiumEventLogger.reset9sK 002 ((* r_c|xs(tjjj}t ||d<|j }|vr |}|=ni}|j ||j|d|} dfd } |j} | vrtjdy| | |r@|j} | | t| | |j|| j| jy)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) rEct|dk7r/tjd|j|dk7r.yy)Nz>ChromiumEventLogger: Detected overlapping events, fixing stack)rrpop)r0rs r` pop_stackz4ChromiumEventLogger.log_event_end..pop_stackjs9b ) T b )r_z7ChromiumEventLogger: Start event not in stack, ignoringN)r0 list[str]rr)rrrrrr!rr4rrrrr'r)r;) rVrrrrrrall_event_datar*eventr< event_stackrs ` r`r%z!ChromiumEventLogger.log_event_endCs & T5==#?#?#R#R#T !$Z,,.  '+J7Nz*Nh'%%       nn&  [ ( KKQ R + #'#@#@#B * + '+TXX}  ! $ $ & r_c||dz ||ddddtjjdfdddtS) za Logs a timed event in chromium format. See log_event_start, log_event_end, etc. rr7r)rgtsrphcattidpidchromium_eventcSrrrHr?sr`rFz6ChromiumEventLogger._log_timed_event..ur_F payload_fnsuppress_contextexpect_trace_id)rrrr))rVrrrrr?s @r`r4z$ChromiumEventLogger._log_timed_eventsYD.!   '' $"! ( 'u- r_c 4|i}ttjjj }||d<||dz |ddddddtj j d fd d d |r't|j|j|yy)aZ Log an instant event with no associated duration. :param str event_name: Name of event to appear in trace :param int time_ns Timestamp in nanoseconds :param Optional[Dict[str, Any]] metadata: Any extra metadata associated with this event :param str cname optional color for the arrow in the trace Nrrir7rp)rgrBrrCrDrErFsrGcSrrrHrIsr`rFz7ChromiumEventLogger.log_instant_event..rJr_FTrK) rrrrrrrr'rr))rVrrrrrr?s @r`rz%ChromiumEventLogger.log_instant_events  H55HHJK !+D.!   '' $" ( ! 't446'  !r_)rr=rrK)rrPr)rrrr rr)rrrrrrrr)rrrrrr rrFN) rrrrrrPrrrOptional[CompileId]rrrr)rrrrrrPrrrrrrVrr) rrrrrrrOptional[dict[str, Any]]rrPr) rrrrrrWrrrr)rYrZr[rrrrr!rWrrrrrrUr%r4rrHr_r`rrs "+ 1# I2...  .(-$/// /  /6',*. ???! ? $ ? ( ? ?<"+/GGG! G  G $ G(G G\.2   +   B.2&+ (((+ ( $ ( (r_rzOptional[ChromiumEventLogger]CHROMIUM_EVENT_LOGc.t tatSrr)rXrrHr_r`rrs!02 r_ctduSrr)rXrHr_r`rrs T ))r_c #lKt}tj}|j||i| d|j |tji|||r|j yy#|j |tji|||r|j wwxYww)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)rrrrr%rU)rreset_event_log_on_exitrchromium_event_logchromium_start_times r`chromium_event_timedr_s34,,.&&   ' ((  LLN   !   #  $ $ & # ((  LLN   !   #  $ $ & #s3B4A5;B45tj|}|jr|j|j|jr(|j t |j |_t|dr|jj|_|S)Nrt_dynamo_dynamic_indices) rrmrprnrorq clone_inputr rxcopy)rErrrus r` torch_clonez clone_input..torch_clone7sr KKN 99  Q__ - 99+ u5AF 1/ 0()(A(A(F(F(HA %r_xlaN) is_coalesced)layoutc32K|]\}}|dz |zyw)r2NrH)rshapestrides r`rzclone_input..]s" %2UFUQY&   )rudevicertrxrE torch.Tensorrr)+rJrno_gradrrr~ sparse_coosparse_coo_tensor_indicesrcrr}r% sparse_csr sparse_bsr crow_indices col_indices ccol_indices row_indicessparse_compressed_tensorr@rxzipsizer is_quantizedempty_quantizedemptyrudata_ptr element_size as_strided_copy_rmrprnrorqryrr rxrz)rErur{compressed_indices plain_indices needed_sizeresultcache_line_offsets ` r`ryry.s qz 6 88==E !q>66 88u'' '**AJJL)AIIK(^^- 66"! $xxE,,e.>.>??%&^^%5" !  %&^^%5" !  11./M*AHHJ'xx )668 69!&&(AHHJ6O   >>**K",<+>BF[[b (8FZZ\FOO- - 3 ^^  1668QXXZ1BC " LL #yy%%aoo6yyQVV/)!&&> 1/ 0-.-F-F-K-K-MF *m66^ "q> !g66^ "_66sE!M(A4M(CM(!C6M(A:M,M(M%M($M%%M((M1cyrrrHexample_inputss r` clone_inputsrzsr_cyrrrHrs r`rrs:=r_ct|tur|t|}|jD]\\}}t|trt |||<%t|t jsJt|t|||<^|St|}tt|D]1}t||t js!t||||<3|Srr) rdictrrrrrrryrJranger_)rresrrrPs r`rrs Nt#>"))+ .JC%''.C!%6CU C6&u-C  .  ~ C 3s8_) c!fell + Q(CF) Jr_c |jy#t$r7}ddlm}t j ddt |}|d||d}~wwxYw)Nr2) SkipFramez\(.*rz(torch.compile cannot be run in context: )rrrrresubr:)r+r@rfunctorch_subclass_names r`skip_frame_if_in_functorch_modersX   "#%&&"d3i"@67N6O P   s A2AAc#Ktjj}tjjj }|5|5tj tjj}t|tjjr1tj tjj}dddddd dtjjj 5tjjtjjrtjjdddy#1swYxYw#1swYxYw#1swYyxYw#tjjj 5tjjtjjrtjjdddw#1swYwxYwxYwwrr) r_C_DisableFuncTorchr_python_dispatch_disable_current_modesrmrandom get_rng_staterr is_available set_rng_state)disable_functorchdisable_current_modes rng_statecuda_rng_states r`preserve_rng_staters22!KK88OO  E"3"5EKK : : <= ' 2 :: " " $"[[)A)A)CDN EE 9 [[ ) ) @ @ B 9 LL & &y 1zz&&( ((8 9 9EEEE 9 9U[[ ) ) @ @ B 9 LL & &y 1zz&&( ((8 9 9 9sAIF B E?F $I-F#1(IAF6 I?F F  FIF I#)H> AH2) H>2H; 7H>>Ic t|tjjjtjj j tjjtjjfSrr) rrjit_traceTopLevelTracedModule_scriptRecursiveScriptModuleScriptFunction ScriptModule)model0s r` is_jit_modelrsY  II   1 1 II   3 3 II $ $ II " "   r_c6t|r|S tjj||S#t$r` tjj |cYS#t$r1|rt jdnt jdYYywxYwwxYw)Nz jit errorz0Both torch.jit.trace and torch.jit.script failed) rrrtracerscriptrrerror)modelrr^s r` torchscriptrsE  Nyyun55 N N99##E* * N k* LM   NNs,/ BAB6BBBBcX tj|S#ttf$rYywxYwrr)rgetfilerOSErrorrs r`rrs-s## w s ))c*tt|S)zLTest if an object is a namedtuple or a torch.return_types.* quasi-namedtuple)is_namedtuple_clsrrs r` is_namedtuplers T#Y ''r_cH ttrtdd}|dvryttddtrTt tddr>tdj D}|tfk(ry|rt fd|Dryy #t$rYy wxYw) zhTest if an object is a namedtuple or a (torch.return_types|torch.autograd.forward_ad).* quasi-namedtuplerZN)torch.return_typesztorch.autograd.forward_adT_fields_makec32K|]}|tus |ywrr)r)rts r`rz$is_namedtuple_cls..sKA!7:JaKs c3hK|])}t|xrj|ju+ywrr)r__new__)rrrhs r`rz$is_namedtuple_cls..s:! *!,5KK19945!s/2F) issubclassrgetattrrcallable __bases__anyr)rhmodulebasess` r`rrs c5 !S,5FLL'#y$7?HWd+EKKKUH$S!#!      s!BAB=B B! B!tuple[str, ...]c|turyt|tsJt|dr |jSt j Gdd}|jdk(sJ|t|t|j}i}t|D];}|ddk7s tt|||s#t||j||<=t||jk(sJtt!||j"S) zIGet the fields of a namedtuple or a torch.return_types.* quasi-namedtuple)startstopsteprceZdZUded<y)!namedtuple_fields..MarkerrindexNrYrZr[rrHr_r`Markerr s r_rrrr)r)slicerrr rr dataclassrZrrn_fieldsdirrrrr_rrv)rhrrfieldsrgs r`namedtuple_fieldsr s e|( c5 !! !sI{{ >>1 11 1 c&% -. /CFC4 7c>jd);VD"3-33F4L4 v;#,, && & FJJ/ 00r_c 8tj5tjtjj tj j r1tjtj j tj|j|jDcgc]$}||jtj|f&c}ddddfd }|Scc}w#1swYxYw)Ncjtj5tjjtjj rtjjD]'\}}}|j |k7s|j|) dddy#1swYyxYwrr)rrrrrr_versionr)paramroriginal_valuerr saved_states r`restorez"checkpoint_params..restore+ s ]]_ 0 LL & &y 1zz&&( ((82= 0.w>>W,KK/ 0  0 0 0sA5B) B))B2r) rrrmrrrrrr parametersbuffersr)gmrrrrrs @@@r`checkpoint_paramsr! s  KK : : <= :: " " $"[[)A)A)CDN#"**,G ENNEKK$6 7  0 N   sB5D )D 6D DDcvtjjrtjj}nt}|t j tjdtj}t|D]}||}|tj}||z fS)Ni9) rrr synchronizergccollect manual_seedr perf_counterr)rrtimesrt0rrt1s r`timedr7 s zz jj,,  MJJL d   B 5\'     B 27?r_c ltdtj||jdDS)Nc34K|]}|jywrr)is_cudarrEs r`rz check_is_cuda..K sWQqyyWsT)allrrr)rrs r` check_is_cudar J s( W)//."--PTBU"VW WWr_rc|dkDsJt|Dcgc]}d| }}t|dd|ddz}tddj|ddj|d}d|d |_|Scc}w) Nr2rMr:zlambda rz: ()rot__helper)rreversedevalrrY)rrPvarsrotatedrs r` rot_n_helperrN s q5L5"1X &asG &D &tBCy49,-G 's388G+<*=Q? @B7#BK I 's A4z set[type]common_constant_typesc.t|ttfrtt t |St |tjttjtjtjfxst|t t"hzSrr)rr frozensetr ris_safe_constantrenumEnumrrSizer _GenericAliasr GenericAliasrrrEs r`rr{ sx a%#$3'+,,  II  JJ          '  r_c ddhSNrr2rHrHr_r`common_constantsr" s   r_ct|tjtjfxrCt|jtj j jj Srr) rrSymBoolSymIntnodenestedr nested_int NestedIntNoders r` is_torch_symr* sP eemmU\\: ; J ELL**55CCEAr_c ddlm}tjj xr|j j xs|j jxrtj xs|j jxrtj xsW|j jxrtj xs$||xstd xr |tvS)Nr2)is_from_defaultsz5pytorch/dynamo:enable_unspecialize_zero_one_plain_int)sourcer,r$rv#force_unspec_int_unbacked_size_like guard_sourceis_localis_specialized_nn_modulerFallow_unspec_int_on_nn_module"is_unspecialized_builtin_nn_moduleis_unspecialized_nn_moduler&r")rr-r,s r`is_int_specialization_caser5 s(!!#GG G     ! * * ,,    ! : : < 9888      ! D D F 9888     ! < < > 9888 F #! ( WX X ,)++/r_cpddlm}m}m}t ||rt|j sd|j }|j}t|xs3tj xr t|tuxr t|| }|s|St ||r|j|jS|S)Nr2)ConstantVariableLazyVariableTrackerSymNodeVariable) variablesr7r8r9r is_realizedoriginal_sourcerr*rFspecialize_intrrr5r evaluate_expr)r1r7r8r9r-r is_symnode_vts r`specialize_symnoder@ sQQ#*+COO4E$$&""$$U+ %% % >U s" >.uf==  J#'&&s'8'8':;; Jr_c`ddlm}t|}t||r|j S|S)Nr2r7)r:r7r@ras_python_constant)r1r7s r` guard_if_dynrD s.+ S !C#'(%%'' Jr_cjtdtj||jDS)Nc3<K|]}|jywrr)is_python_constantr s r`rz&check_constant_args.. sV!q##%Vr2)r rrr@rs r`check_constant_argsrH s$ VytV]]_/UV VVr_cddlm}ddlm}d}t j ||j D]"}t||r|dz }t||r"y|dkDS)Nr2rBUnspecializedPythonVariablerF)variables.constantr7variables.tensorrKrrr@r)rrr7rK unspec_countrEs r`check_unspec_python_argsrO s]4=L __T6==? 3 a4 5 A LA/0  ! r_cddlm}tj||j D]!}|j rt ||r!yy)Nr2rJFT)rMrKrrr@rGr)rrrKrEs r`check_unspec_or_constant_argsrQ sE > __T6==? 3$$&*Q8S*T r_c|ddlmtfdtj||j DS)Nr2)NumpyNdarrayVariablec36K|]}t|ywrr)r)rrErSs r`rz+check_numpy_ndarray_args.. s!  1*+s)rMrSrrrr@)rrrSs @r`check_numpy_ndarray_argsrU s16 v}}7 r_ztype[KeysView[Any]] dict_keysztype[ValuesView[Any]] dict_valuesztype[ItemsView[Any, Any]] dict_items odict_valuesztype[Iterator[Any]]tuple_iteratorrange_iteratorKVcPt|tsJtj|Srr)rrrK)rs r`builtin_dict_keysr_% s a   99Q<r_ct|tsJt|ttfr|j St|tr9tj |Dcgc]}|tj ||fc}Stj |Dcgc]}|tj ||fc}Scc}wcc}wrr)rrrrrrKr)rrLs r`get_items_from_dictra+ s c4   cD+&'yy{ C %>I>N>Ns>STK++C34TT7;yy~F!D$$S!,-FFUFs B;Ccnt|}tjjj ||Srr) object_newrrModulerW)rhrs r` nn_module_newre6 s& S/C HHOOS! Jr_cLtjtj|dSr)rreduceoperatormul)its r`productrk< s   HLL"a 00r_c>|j\}\}}|||zSrr) __reduce__)rjrrrrs r`tuple_iterator_getitemrn@ s%}}Avu uu} r_cftjjtj|Srr)r_dynamodisablerrrts r`dataclass_fieldsrrE s" == !3!3 4S 99r_c|j\}\}}|j|xsd|jzz}|j}|j}|||fSr)rmrrr) range_iterr range_obj maybe_idxrrrs r`normalize_range_iterrwL sU!+!6!6!8A| Y OOy~A? ?E >>D >>D 4 r_c$|j|Srr) as_subclass)rrhs r` to_subclassrzZ s == r_ct}t|trt}tt j |j |||dzSr)rrrnextrislicerK)rr dict_classs r`dict_keys_getitemra s=J![!    !3QA> ??r_ct||SrrrJ)rRrs r` set_getitemri s 71:r_cj|jj}|j}|rdnd}|d|d|}|S)NLGz["z"].)rrYrg)rr%rgr+rb local_names r` enum_reprrn sA ?? # #D **CCcE7"TF#cU+J r_c ||jd<tjj}|J|j}t j jjj||x}r||jd<yy)N example_valueunbacked_bindings) metar$rv fake_mode shape_envrr experimentalsymbolic_shapescompute_unbacked_bindings)r&rrrsymbol_to_paths r`set_example_valuerx s"/DIIo""$..I   ##I 88 0 0 J J }   *8 %&  r_c|jjjjd}t |s-ddlm}ddlm}|dt|dg|j|S)Nrr2graph_break_hintsr3z:Cannot check Tensor object identity without its fake valuez/TensorVariable is missing a fake example_value.r7r8r9r:) r/r&rrvrJrrrr4r DYNAMO_BUG)vt fake_tensorrr4s r`_get_fake_tensorr s_++-$$))--o>K ; ')P $I1%001  r_cj|j|\}}}td||z ||dkDrdndz z|zS)Nrr2r:)indicesmax)rRseq_lenrrrs r` slice_lengthr s? '*E4 q4%<4q1b#ABtK LLr_c Pddlm}ddlm}|t||d|dgy)Nr)raise_observed_exceptionrBzwrong number of arguments for z() callr&)torch._dynamo.excrtorch._dynamo.variablesr7r)txrgrr7s r`raise_args_mismatchr s+:8 !?vWMN Or_cddlm}m}m}j r%t fd|D}|j |Sd}|rt|r d}td} |D]} |r.t| |st| us |j dcS|tjj|| gi} | | } a|tjj|| | gi} | |j d} | S)Nr2)BuiltinVariabler7TensorVariablec3K|]7}|jxr!|jjk(9ywrr)rGrC)rrEsearchs r`rz iter_contains.. sJ   " F$$&&*C*C*EE F s=AFT) r:rr7rrGrrrrrheq call_functionor_) rrrcheck_tensor_identityrr7r found_constmust_check_tensor_idfoundrEchecks ` r` iter_containsr s ML   "    &&{33 FN!C#!&)'+E   !^,-a00+22488#HKK0>>rAv;PRSE}' 5CC  } ''. Lr_ctt|tjtjjt fS)z4Returns whether it indexes dictionaries using its id)rrrrrdr )rLs r` key_is_idr s% a%,,9JK LLr_ct|jDcgc]}t|r t|n|c}Scc}wrr)rKrr)rrLs r` key_to_idr s+27**, ?QYq\BqEq ( ?? ?s5cddlm}t|ttfr\dj fd|D}t|trd|dSt|tsJt |dk(rd|dSd|d St|tjrt| jd d S||r |jSt|tr dd }||S|S)Nr2)is_builtin_callablerc38K|]}t|ywr%N const_reprrrRr%s r`rzconst_repr.. sDQj%88D[](z,)rr'rcx|j}|j}|dk(r |jS|dz|jzS)Nbuiltins.)rrZr[)rklassrs r`fullnamezconst_repr..fullname s?KKE%%F#)))C<%"4"44 4r_)rr rr) trace_rulesrrrJrrr_rrrreplacerYr)rEr%r elems_reprrs ` r`rr s0!dE]#XXD!DD a zl!$ $a' ''1v{:,b)):,a(( Atyy !%(00b99 Q zz At  5{r_cHdjfd|D}d|zdzS)Nrc38K|]}t|ywrrrs r`rz!dict_keys_repr.. sGq 1E22Grrr)r) const_keysr%keys_strs ` r`dict_keys_reprr s&xxGJGGH >C r_ __dict_key)UnsupportedFakeTensorExceptioncP|dt|d|jjS)Nr_c)routputr)rrootrs r`get_safe_global_namer s*V1RWIR 4 45 66r_c|D]}||vsyyrrH)r containers containers r`is_inr s! 9  r_)requires_suffixc|st|g|s|StjD]}|d|}t|g|r|cStd)zm Return a name that starts with `prefix` and is not in any of the `containers` (e.g., map, set). r unreachable)rrroAssertionError)prefixrrrP candidates r`get_unique_name_wrtr s] 5#=*#= __ hasO Y,,   ''r_c |S#t$rU}ddlm}d|jd}tj ||dt |j|g|Yd}~yd}~wwxYw)Nr2r3zEncountered exception (z!) during fake tensor propagation.z!Fake tensor propagation exceptionr6)rrr4reasonrrr)rr@r4msgs r`wrap_fake_exceptionr. sd  t )  )'z1RS C7M    s A'A A""A'ctjjj|5t fdcdddS#1swYyxYw)Nc.tjSrr)rzdeepcopyrsr`rFz)deepcopy_to_fake_tensor..C s4==+=r_)rrr FakeCopyModer)rrs` r`deepcopy_to_fake_tensorr? s=    & & 3 3I >?"#=>???s AA c~tjtjtj||z S)z+ Calculate root mean squared error )rsqrtmeansquare)rrs r`rmserF s) ::ejjcCi!89 ::r_g-C6?Tc  ttttjt j jt jfrttttjfsJdtdtttk7r  dyttk(xr't   f dtDStjdk(r5tjjj  Stt rtt sJt#j%t#j%k(s;Jd t#j%d t#j%t'j%D]-} t| | |  r$ d | yy tt"rItt"sJt#t#k(sJdt#d t#y tt j(t*frtt j,j.rJtt j,j.rJd&dfdfD\j0r.j0sJj3j3tt j(sJdtdtrj4j4k7r dj4j4yj4t j6k(rery t j8j;t j<j;t j<} | s d| Srj?j;t j@j?j;t j@t j8d ry t j jBjEdd}|dkr@tFjId|jKjMjOt7|dk\Ssj;j4t j8ry j4t jPk(rd}jSjUsqjSjUsSjSjUr5t j8j;j4||ry tWjO}tYjR|rtFjIdtWjO}d'  fd }|}|||zdz zk}|s\rZtYjR|rEtYjR|r0t jZj\j^j`sd }|s' d||jcj4| |Sry  dyttdtftdt6t jhfr ry k(} | s d t| Stks tmrSr&tkstmsjOttuxrk(} | s  d!| StorTttuxr<tt jpt jp " Stjd#vrNttusJt  f d$jrj%DStud%tj)(z-Check correctness to see if ref and res matchNztype mismatch rzLength mismatchFc3T K|]\}}}t|||    !yw) log_error(use_larger_multiplier_for_smaller_tensorforce_max_multiplierN)same) raibi fp64_reficos_similarity equal_nan exact_dtyper ignore_non_fprrelax_numpy_equalitytolrs r`rzsame..g sO, "B  $#9a%9  , s%(QuestionAnsweringModelOutputrzkeys mismatch z == ) rrrrrrrrrzAccuracy failed for key name %sTzelements mismatch cdt|tjr|Stj|Srr)rrrtensorrs r` to_tensorzsame..to_tensor s""1ell31 Ha Hr_c3.K|] }|ywrrrH)rr+rs r`rzsame.. sMinMrzdtype mismatch %s, %srt)atolrtolrz+Accuracy failed: uint8 tensor did not matchrgư>)dimepsgGz?zSimilarity score=%sg{Gz?z=Found nan in reference. Consider running in higher precision.crryjtjtjfvrdnd}rj dkrd}|Srj dkrd}|Sj dks;j dk(r'j d j d cxk(rd k(snd k\rd}|S) N$@g@g@ ig @rr:r2g{Gz?)rurrbfloat16numelndimr) multiplierrfp64_refrrrrs r`get_multiplierzsame..get_multiplier s,# #yyU]]ENN,KKQT@ (B.%) &%B (C/%( &%!(4/HHMciimsyy}.QPQ.Q(? &) %%r_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=%szAccuracy failed (%s): %s != %sz!Accuracy failed (numpy): %s != %srrrrrrrr) MaskedLMOutputSeq2SeqLMOutput!CausalLMOutputWithCrossAttentionsLongformerMaskedLMOutput InstancesSquashedNormalBoxesNormal TanhTransformFooVariablec3 K|]8}tt|t |t|   :yw)rN)rr) rrrrrrrrrrrrrs r`rzsame..i s[  S!S!#&-#'%9+#9a   s>Azunsupported type: )rr rr)rfloat);rrJrrrrr ParameterListrrr_r rrYrlossrrYrKrrr$rrI is_sparseto_denserurallclosetorflattenr functionalcosine_similarityrrdetachcpurrisnanrrmathrrFcppinject_relu_bug_TESTING_ONLYrrrrrrr as_tensor__dict__r)rrrrrrrrrrrrrLrscore loose_tol ref_error res_errorrr passes_testrs```````````` @r`rrM sw dE;,,ehh.D.Dejj Q#e[->->?@ T#YKqc 4 @ s8s3x  ' (3x3s8# , , &)c8%<, )  " c  = = HH HH MM     5]!5   C #t$$$388:#chhj/1 S_-T#chhj/1B C 1 # AFFQK#1' +)="/'=e)= ;Q?% & C #s###3x3s8#R'9#c(4Cz%RR# C%,,. /c5#4#4#?#?@@@c5#4#4#?#?@@@ INc88LMS( ==== =,,.C,,.C#u||,VtCyk4PS9+.VV, yyCII%1399ciiHyyEJJ& NNFFF-FFF-' KL ++-""5==1C++-""5==1C~~c3SsdKHH''99#st9TEt| 15<<>3E3E3G3L3L3NO & &ffSYY'~~c3SsiP~~.%  (,,.IIKOO- ) #)) 4&&"+   3/446 ::i(KKW!3/446 !&!&F,- 'J,BS4Z,OP #! 9- 9-"OO2266SS"&K"I!!  "@ #" CS I C#sDJellC D  3J 6S 3 L 3 #6s#;  c "&9#&>((*C #Y$s) # 5#* 93 D # S T#Y&  D OOC OOC )#!5'5] -  c    CyDI%%%  ||((*   "/S 0B0B/CDEEr_c~|jjdd}d|jd|d|jdS)N/r:rz' (rr)rMsplitrr)rshort_filenames r`format_func_infor@} sD%%++C04N t||nC/q1D1D0EQ GGr_c#Ktj}tjt_tj}tjt_ d|t_|t_y#|t_|t_wxYwwrr)rFrecompile_limitrrTaccumulated_recompile_limit)priorprior_acc_limits r`disable_cache_limitrF s_  " "E [[F88O),F&= !&-<*"'-<*sAB A1B 1B  B z'collections.defaultdict[Any, list[Any]]guard_failuresz3list[torch._dynamo.output_graph.GraphCompileReason]graph_break_reasonscdtjjjdzdztt j z}tj j||S)Nrun_z%Y_%m_%d_%H_%M_%S_%fz-pid_)datetimenowstrftimerrhgetpidrzr)root_dirdir_names r`_get_debug_dirrQ sf       ! * *+A B C   biik     77<<( ++r_c8tj}t|Srr)rFrrQ) debug_roots r`r{r{ s&&J * %%r_cd|jvr't|jdr|jdS|r2ddlm}ddlm}|dt |d|dg|j yy) Nrrr3r2rz Missing FakeTensor example valuez,`FakeTensor` example value was required for z but not available.r)rrJrr4rrrr)r&requiredr4rs r`extract_fake_example_valuerV si$))# /0J(Kyy)) 6'6IFtfL_`1%001  r_c8t||jusJ|Srr)rKr)r@rs r`ensure_graph_fakerX s q !R\\ 11 1 Hr_chdfd }tjjj||S)Nc|jdk(rd|jvr t|S|jdk(r}d|jvro|jjj vsJjj |j}t |tjjsJ|S|jd}s&t |tjr t|S|S)Nrrget_attr) rrget_fake_valuetargetr nn_modulesrrr GraphModulerrX)rrrallow_non_graph_fakers r`visitz)get_fake_values_from_nodes..visit s 44? "aff'D"!R)=> > TTZ O166$A88ryy333 33%%ahh/Bb%(("6"67 77Iff_%# 3 (E$S"- - r_)r torch.fx.Noderr )rrr&map_arg)rrr`ras` ` r`get_fake_values_from_nodesrd s%" 88==  ..r_c  ddlm}ddlm}m}m}m}m}j} djvr'tjdrjdStjjf|\tjj j"s$tjj j$rGtt'i|} | D cic]$} t| st)| | j*&} } ng} i} dj,} | J| dk(rTt/dkDrFt1dtj2j4rt7d| ft9ddz| dk(rXj:j<j>tArtCd rjEt7| jFd vstId Drt9d D | 5tK5tMfd }dddddd|s>tjtjtjt(}tjj j"s$tjj j$r'j:jj| | Scc} w#1swYxYw#1swYxYw#|$rtN$r]}|}|jP |jP}t1|tjRjTjVr|jXtjZj\j^j`tjZj\jbj`fvrdg}ndg}|dte|jXd|jXd|nGt1|tjRjTjfrtjj jhs0|dte|jXd|jXddgn|dte|jXd|jXddgnt1|tjRjTjjr|jX} d}t1| tjljnr[tjpjs| jtjF| jtjv}||\}}d|d|d|d}|dd |jXd|d!gnt1|tjxjzj|j~r||jte|d"#t1||r!||j|jd|t1|tr)d$te|vr|d%d&j>d'|dg|te|j|jdd}~wwxYw))az Run the computation represented by `node` using fake tensors and return the result. allow_non_graph_fake: whether to allow the return result to be: 1. non-fake or 2. fake that is not created by this instance of Dynamo. If `True`, you must be prepared to deal with such return values, ideally by further wrapping them as this graph's fakes. r)ValueRangeErrorr2)TorchRuntimeErrorr4 Unsupported UserError UserErrorTyperN call_method call_module_initialize_hook) interpolate is_integerwrapped_gradientc3<K|]}t|tywrr)rcomplex)ras r`rz!get_fake_value..! sM#$ 1gMr2c3K|]A}t|tjr!|jj t |n|Cywrr)rrSymFloatr&hintr$r0s r`rz!get_fake_value..% sC c5>>2sxx}}7Pc  sAA c6tjSrr)run_noder)rrnnmoduler&rsr`rFz get_fake_value..1 sD$Ir_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)zData dependent operatorz Operator `zP` has a non-Tensor output whose value is dependent on the data of Tensor inputs.rzDynamic 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 PyTorchrz: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 tensorszunsupported operator: z}see https://docs.google.com/document/d/1GgvOe7C8_NVOMLOCwDaYV1mXXyHMXY7ExoewHqooxrs/edit#heading=h.64r4npvq0w0 for how to fixconstrain_as_size_example) case_nameargumentz&TypeError when making fake tensor callz TypeError z: )r)Ltorch.utils._sympy.value_rangesrfrrgr4rhrirjrrrJrdrrrrprFuse_graph_deduplicationtrack_nodes_for_deduplicationr3rrrr_rrrdrrrr^r]r$r _infer_parametersrgrrrr __cause__rrDataDependentOutputExceptionfuncopsatenrr_local_scalar_denserDynamicOutputShapeException capture_dynamic_output_shape_opsUnsupportedOperatorExceptionrrr_dispatch_pystub_schema overload_namerrrGuardOnDataDependentSymNodeCONSTRAINT_VIOLATIONrwith_traceback __traceback__pytree tree_map_onlyrrpartialrXregion_trackertrack_node_mutations)r&rr`rfrgr4rhrirjrflat_args_kwargsr1id_to_initial_versionrret_valr@causer:import_suggestion maybe_pystubrctxrrrrys`` @@@r`r\r\ s@ B$))# /0J(Kyy))- TYY $&:LD&  44 ==   = =5 tR(*> .>! &)BsGS\\ !! !  "H I    ]s4y1}DGUXX__1U'Q;=d12hO ]99'' 4 ( #:L(M  & &x 6+8Y? yyEEM(,MJ    hR  02 )IG  R  LL)++,="Ew   44 ==   = =   55   ! NC! R      aR  ;; "KKE  5$$00MM zz ##++ 22:: K ` 1EJJ( 5II   5$$00LL ==''HH 4 O",UZZL8f gY !E O",UZZL8y z;  5$$00MM B " "ejj334$xx88JJOORZZ%=%=   +".KFC##)(*HQ5 /& M0 =()*&&  588((88TT 22E 5   /M>>q JPQ Q y )jCJ.F @$T[[ME7;   A'66qGTQCaRsU$K05K0L  LK5/L7L 5K> :LL L Y9MY44Y9c$ttddS)Nr)r _current_noderHr_r`get_current_noder s ='4 00r_c#vKt}|t_ d|t_y#|t_wxYwwrr)rrr)r&olds r`set_current_noder s.  CM" ! c s9) 9 69c  j t5d fd }ddlm} dk(rjicdddS dk(r\t djsddlm}|d d |d g tdjddicdddS d k(r|J|icdddS dk(r.|jjjcdddS dk(r(djvsJjdcdddS dddt% #ttf$r8}ddlm}g} t|trdg} |dd ||| |Yd}~Ud}~w|$rt$r0}t||j!|j"|d}~wwxYw#1swYt% xYw)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 Nddjddd t|zS)Nz0Dynamo failed to run FX node with fake tensors: rz(*z, **z): got )r]r:)r@rrr&rs r`make_error_messagez$run_node..make_error_message s=B2$a }TVW[V\\`ag`hhopq' r_r2)rhrNrkrr3z/Missing attribute when running call_method noderzattribute not definedrrlr[ placeholderrz;If the op is a PyTorch op, please file an issue to PyTorch.zGNotImplementedError/UnsupportedFakeTensorException when running FX noder6)r@r rr)rrrrhr]r r4r output_graph get_submodulerr<rrrrrrr) tracerr&rrryrrhr4r@r:rs ``` @r`rxrx s " B $ 7   %- _$"t{{D3F377}$tAw 45$ Q "$67N$O  5wtAw 4d12hI&I/770}$+++005776z!**88E977:}$&$))333yy1?77:%;7r  1$%CD  -E!01Q a.q1      1!45DD  i7r  sYGD< AD<.D<)D<;#D<(G<F? .E>9G>F?+F::F??GGcddlm}j}||vr||S|j}tj j j|j|jffd\}}|dk(r'd|jvr|jdjS|dk(rMjj|j}t|st!j"|}n ||i|nd} t%||||}|||<|S#t&$r0} |t)| j+| j,dd} ~ wwxYw)z Run the actual computation represented by `node` and return the result. This will execute any dependent nodes in the graph as well. r2)rgct|Srr)get_real_value)rrs r`rFz get_real_value..s.F+r_rgraphargrlN)rrgreal_value_cacherrrr&rcrrrexamplerr^r]r$rzrrxrrrr) r&rrgcacherrr nn_module real_valuer@s ` r`rr s/ '  # #E u}T{ B88==(( DKK +LD&  ]zTYY6yy$,,, ]''224;;? i( i0I t &v & RfdD&)D  d   RA'66qGTQRs0D D?+D::D?cddlmm}dfd }|jD] \}}||sJd|d|||j D] \}}||sJd|d||y)Nr)FakeTensorConfigrJcdjr#ddl}d|j|jSy)Nrz"FAKE TENSOR CREATION TRACEBACK: zNEnable TORCH_FAKE_TENSOR_DEBUG=1 to get creation stack traces on fake tensors.)debug traceback format_list _debug_trace)rrrs r` stack_or_hintz7assert_no_fake_params_or_buffers..stack_or_hint4s2  ! ! 89N9N9Nq~~9^8_` `cr_zUnexpected fake buffer rzUnexpected fake param )rr rr)torch._subclasses.fake_tensorrrJ named_buffersnamed_parameters)rrJrrgbufferrrs @r` assert_no_fake_params_or_buffersr1sGd((* f6? %dV1]6-B,C D " **, e5> $TF!M%,@+A B ! r_c8|jd|jS)z9 Returns the fully qualified name of the object. r)rZr[rs r`fqnrFs!nn Qs//0 11r_cRtjjjr|S|Srr)rrprFassume_static_by_default)count1count2s r`ifdynstaticdefaultrMs }}44  r_c 8ttjtjj t t |jD]D}|jds|ddk7stj|jd|ddFy)z@ Ensure all the files in a given submodule are imported z.pyrrrN) rrhlistdirrzrrr__file__r importlib import_modulerY)r#rs r`import_submodulerTsw2::bggood3 6M&NOPG   U # s(:  # #s||nAhsm_$E FGr_c*tt|Srr)class_has_getattributerrs r`object_has_getattributer]s !$u+ ..r_c:tj|d}|||<y)Nr5)r __getattribute__)rrgrrs r` object_setattr_ignore_descriptorrasZ0AAdGr_c ttj|dtjry y#t $rYywxYw)NrTF)rrrrrrrts r`rrgsO   " "3(: ;           s .3 ??c tjt|d}|r(|tj j jurd}|S#t$rd}Y9wxYw)N __getattr__)rrrrrrrdr)rignore_nn_module_getattr getattr_fns r`get_custom_getattrrssX++DKG  J%((//2M2M$M   sA AAceZdZdZdZdZy)TensorStaticReasonrWrrN)rYrZr[ PARAMETER NOT_TENSORNN_MODULE_PROPERTYrHr_r`rrsIJr_rc|tjk(ry|tjk(ry|tjk(ryt d|)Nz>mark_dynamic on parameter, parameters are always static today.z2mark_dynamic on a non tensor, how did this happen?z4tensor is static because it is nn module associated.zIllegal reason )rrrrr)rs r`tensor_static_reason_to_messagersJ #---O #...C #666E ?6(3 44r_cddlm}|jjs|jj r"t j rdtjfSt|tjjus||r"t jrdtjfS|sdtjfSy)a@ Given a tensor, source, and is_tensor flag, determine if a shape should be static. Args: tensor - the real tensor to evaluate, parameters force a static shape. is_tensor - internal dynamo check, essentially "is_tensor": target_cls is TensorVariable, tensors not in a TensorVariable for whatever reason are forced static. Returns a tuple, where the first element is the bool of whether or not this tensor should have a static shape. The second element is a TensorStaticReason, useful for passing to tensor_static_reason_to_message if needed. r2))is_from_unspecialized_param_buffer_sourceTrU)r-rr/r1r3rF&force_nn_module_property_static_shapesrrrrrrforce_parameter_static_shapesrr)r is_tensor tensor_sourcers r`tensor_always_has_static_shapers B ""$==?  % % ' J J L  7 7':::: V *** 4] C  . .'1111 '2222 r_c*dfd }t|S)Nc ddlm}jj Dcgc];}|j |j|j|j|jg=}}||gd}tjjj|S#t$rdttzcYSwxYwcc}w)Nr)rzkTabulate module missing, please install tabulate to log the graph in tabular format, logging code instead: )opcodergr]rrr)rrrr,graphrrrgr]rrr+forward__code__rM)rr node_specs graph_strrrs r`innerz(lazy_format_graph_tabular..inners  )AC ;+>+J+JIVV ~,Wb9:;    sBAC!B>=B>rrrC)rrrs`` r`lazy_format_graph_tabularrsW" e r_c f|d|d|d|dtj|jd S)Nrz line z r)disBytecode)rrgrline_nors r`format_bytecoders=XQtfAhZvgYc#,,t:L:P:P:R9SSU VVr__forward_pre_hooks_forward_hooks_backward_pre_hooks_backward_hooks)_state_dict_pre_hooks_state_dict_hooks_load_state_dict_pre_hooks_load_state_dict_post_hooksctttjjj j xs7ttjjj jSrr)rr_rrmodulesr_global_backward_hooks_global_backward_pre_hooksrHr_r`nn_module_has_global_hooksrsS  EHH   # # : :; C uxx&&AA B r_cg}| xr| xr| }|s|r|jt|s|r|jt|r|jtg}|D],}t ||g}|D]} || } |j | .|S)z Sometimes its useful to differentiate between types of hooks such as forward/backward/pre hooks executed during module.__call__, and state_dict hooks which are executed separately. )extendforward_hook_namesbackward_hook_namesstate_dict_hook_namesrr) r#check_forward_hookscheck_backward_hookscheck_state_dict_hookshook_dicts_to_checkcheck_all_hooks all_hookshook_dict_namehooks hook_namers r`nn_module_get_all_hooksrs  '$ $ '& & o""#56""#67""#89I-#^R0 #I#D   T " ## r_c6t||||}t|S)zL Helper function to check if a module has any hooks attached to it. )r r r )rr)r#r r r rs r`nnmodule_has_hooksrs& $ /15  E ;r_c2t|r|St|tjrt |j St|t jr|jdSt|ttfrt|d|DS|S)z0Convert tensor and tnp.ndarray to numpy.ndarray.T)forcec32K|]}t|ywrr)to_numpy_helperrrs r`rz"to_numpy_helper..AC?3/Ar) rJrtnprrrrrnumpyrrJrrs r`rrstu~ %%u||,, E5<< ({{{&& EE4= )tE{A5AAA r_ctJt|tjrtj|St|t jr |j St|ttfrt|d|DS|S)zeConvert tnp.ndarray to tensor, leave other types intact. If a list/tuple, loop through it to convert.c32K|]}t|ywrr)numpy_to_tensorrs r`rz"numpy_to_tensor..*rr) rrrrr4rrrrJrrs r`r r "sk >>%$u%%%%|| EE4= )tE{A5AAA r_c$eZdZddZddZddZy)numpy_to_tensor_wrappercN||_d|jjz|_yNwrapped_rrY)rVrs r`rWz numpy_to_tensor_wrapper.__init__0s"TVV__4 r_c6d|jjdS)Nz>r&rZs r`__repr__z numpy_to_tensor_wrapper.__repr__4s-dffoo->bAAr_c<|j|i|}t|Srr)rr rVrrrs r`rfz numpy_to_tensor_wrapper.__call__7s"dffd%f%s##r_N)rCallable[_P, R]rrrrr rr rr )rYrZr[rWr)rfrHr_r`r"r"/s5B$r_r"ct|tjrt||}t |St|t j r*ttj||}t |Syrr)rrrrr rr)rrgrs r`numpy_attr_wrapperr/<sZ#s{{#c4 s## C &ckk#&-s## 'r_c(eZdZdZddZddZddZy) numpy_method_wrapperzgConvert obj from torch.Tensor to tnp.ndarray and call method. Then convert result back to torch.Tensor.c:||_d|jz|_yr$)methodrY)rVr3s r`rWznumpy_method_wrapper.__init__Hs "T[[0 r_c"d|jdS)Nz.es0 KN 3 =CKK 3 F s;=)rr r+s r`rfznumpy_operator_wrapper.__call__bs5z RV dggtns##r_N)rCallable[..., Any]rrrr-r8rHr_r`r:r:Xs[1@$r_r:cBt|ts|S|jrg}|jD]v}t|tj rI|j |jjj|jjf|j |xg}|jD]v}t|tj rI|j |jjj|jjf|j |xn |j}|j}t j|||j|j|j}|j!|S)N)rurro)rrI_has_symbolic_sizes_stridesrrr%rr&r size_hintexprr empty_stridedrurrozero_)rErrRrrrs r`defakerFls* a $ $$ A!U\\* AFF,,66qvv{{CD A    !A!U\\* aff..88EF a  ! vvx  ggxxoo  AGGI Hr_c||i|SrrrH)rrrs r`8_disable_side_effect_safety_checks_for_current_subtracerrHs t v r_cNddl}||jjjuSr)torch.utils.checkpointr checkpoint)rrs r`is_utils_checkpointrLs ! %++((33 33r_cddlm}||uS)Nr)invoke_subgraph_placeholder)'torch._higher_order_ops.invoke_subgraphrN)rrNs r`is_invoke_subgraphrPsS - --r_c dddlm}|jtjj fi|S)Nr2 TorchHigherOrderOperatorVariable)variables.higher_order_opsrSmaker_higher_order_opsinvoke_subgraph)optionsrSs r`build_invoke_subgraph_variablerYs2L 0 + 0 0 //   r_c ddlmcm}ddlm}|j }t jjjr |j}|j|fi|S)Nrr2rR) torch._higher_order_ops.wraprVwraprTrStag_activation_checkpointr _functorchrFfunctionalize_rng_opswrap_activation_checkpointrU)rXhigher_order_opsrSactivation_checkpoint_ops r`build_checkpoint_variablercs_;;L 22 44#3#N#N 0 + 0 0    r_cddlm}tj|j}|}|dk(r |S|dvr|r t }|Sd}|S)Nr2)is_dynamo_supportedr/)rxpumtiaF) eval_framererrrr/) device_typerercompile_supporteds r`is_compile_supportedrks`/ << $ ) )D+- u}  ( (->&L " r_cb|jd}t|d|jddS)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. zutf-8Nr)errors)encoder_decode)roffsetas_utf8s r` _fix_offsetrrs4jj!G ww&&wy&A BBr_c6eZdZUded<ded<ded<ded<y)_Anchorsrleft_end_linenoleft_end_offsetright_start_linenoright_start_offsetNrrHr_r`rtrtsr_rtc^tjdk\sJddl} |jd|zdz}t |j dk7ry|jddfd }dfd dfd }dfd }|j d}t||jr|j}t||jrtt|jjd z }|jj J|||jj } || \}} || x} j#s| d vr;| dvr ||| \}} n ||| \}} || x} j#r6| d vr;| dz} | t |kr!|| x} j#s | dvr| dz } t%|| || St||j&rtt|jjd z } |jj J|| |jj } | | \} } | | dk7r|| | \} } | | dk7rtt|jd z }|j J|||j } t%| | || St||j(rtt|j*jd z } |j*j J|| |j*j } | | \} } | | dk7r|| | \} } | | dk7rtt|jd z }|j J|||j } t%| | || Sy#t$rYywxYw)a Given source code `segment` corresponding to a bytecode instruction, determine: - for binary ops, the location of the binary op - for indexing, the location of the brackets. `segment` is expected to be a valid Python expression )rX rNz( z )r2rc"t||Srr)rr)linenorpliness r` normalizez-_extract_anchors_from_expr..normalizes5=&11r_c|tkr8|t|k\r'd}|dz }|tkr|t|k\r'|tkr|t|ksJ||fSr!r_)r|colr}s r`next_valid_charz3_extract_anchors_from_expr..next_valid_charsys5z!cSv-?&?C aKFs5z!cSv-?&?E "sSv-?'???s{r_cp|dz }||\}}|tkr|t|ksJ||fSrrr|rr}rs r`rz-_extract_anchors_from_expr..increment sH q%fc2 E "sSv-?'???s{r_ctd}|dz }||\}}|tkr|t|ksJ||fSr!rrs r`nextlinez,_extract_anchors_from_expr..nextlinesM! %fc2 E "sSv-?'???s{r_rWz)\#z\#rr)r|rrprrr)r|rrrrztuple[int, int])rrastparse SyntaxErrorr_bodyr>rExprrBinOprrleft end_linenoend_col_offsetisspacert SubscriptCallr)segmentrtreer~rr statementrC cur_linenocur_colch right_col left_linenoleft_col right_linenor}rs @@r`_extract_anchors_from_exprrs   w && &yy501 499~ MM$ E2  ! I)SXX& dCII & c499#7#781",;*2:w*G'J*3J*H'J z*7332<<>", ! ICj 122$Z0;;DDFeOQ JYG G cmm , sDJJ$9$9:Q>K::,,8 88 djj.G.GHH$3K$J !K $X.#5(1+x(H% X $X.#5 T__59L&&2 22!,0C0CDIK<K K chh ' sDII$8$89A=K99++7 77 dii.F.FGH$3K$J !K $X.#5(1+x(H% X $X.#5 T__59L&&2 22!,0C0CDIK<K K U sN N,+N,c tjdk\rtj|j|j j |j|j j|j j|j j}tj|gd}dj|jdd}t|j j |j jdzDcgc]0}tj |j|j#2}}t%j&dj|j}t)|dt)|dz }|dd|}t%j*t%j&||}|S|j J|j j ytj |j|j j j#} |j j| S|j j|j j| St-| |j j} d} d} g} |j j|j j k(rDt-| |j j} | | | } | j/d| zd | | z zzn| | ddz} | j/d| zd t)| | z zztj |j|j jj#}t-||j j} t|j j dz|j jD]}tj |j|j#}| |dzz } t)|t)|j1z }| j/d|zd t)||z zz| |d| z } t)|t)|j1z }| j/d|zd | |z zzd} t3| }|!| Dcgc]}|j7d d } }n%| Dcgc] }t9|}}|j:dk(r|xj<| z c_|j>dk(r|xj@| z c_ tt)| D]}tt)||D]t}||j:kr||j:k(r||j<kr2||j>k(r||j@k\rQ||j>kDra|||d k(smd |||<v|Dcgc]}dj|} }d}tt)| D]X}|tj |j|j j |zj#dzz }|| |dzz }Z|Scc}w#t4$rYwxYwcc}wcc}wcc}w) 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). )rX )rcolno end_colnorrr2Nrr~^)!rrr FrameSummaryrM positionsr|rr col_offsetrrr splitlinesr linecachegetlinerstriptextwrapdedentr_indentrrrlstriprrrrJrurvrwrx)rinst frame_summaryrr| orig_linesorig_lines_dedent indent_lenr first_line start_offset end_offsetrmarkers last_lineline num_spacesanchorsmarkermutable_markersrrPs r`get_instruction_source_311ras 7"!..    NN ! ! LL~~00..++nn33  && 7:6,,.qr23  5 5t~~7P7PST7TU    d.. 7 > > @  %OODIIj,ABMMOA'#.?.B*CC A{ +!8&A >> %% % ~~$""4#3#3T^^5J5JKRRTJ ~~  ( ~~  (DNN,I,I,Qz4>>+D+DELJGG ~~  DNN$9$99 T^^-J-JK \*5s\)C: 3L,MMN\]+d2s\)C3z?\3Q,RRS%%   dnn77 &( !DNN,I,IJ DNN11A5t~~7P7PQ NF$$T%5%5v>EEGD td{ "GTS%77J NN3+cSY5K.LL M  N 9[j))^c)*:*:*<&== sZ'#j1H*IIJ"&G ,W5 :AB6>>#s+BBHO+OVDL+O+O  " "a '  # #| 3 #  % % *  & &, 6 &CL) 7FS!89: 7G333W444w?V?V9Vg888w999G666"6*3/3636OF+C0 7 7"2AAv2776?AA F 3w< $   d..0E0E0I J Q Q S   '!*t## $ MI r    C,P4Bs*5Y% Y*0Y:Y?Z* Y76Y7cRt|tjr t|ddSy)N_dynamo_static_input_type)rrrrrs r`get_static_address_typers#!U\\"q5t<< r_ctjjjtjjtj tj j f}tjjjtjjtjtj jf}|g||vSrr) rrr5 get_statedefault_generatorrr set_stater)rgetterssetterss r`is_rng_state_getter_or_setterrs $$ ))    G $$ ))    G (g(( ((r_ct|tjxrA|jdk(xr0|jj t jjuS)N__get__) rrr rY__self__ __objclass__rr _TensorBasers r`is_tensor_base_attr_getterrsK5%112 @ NNi ' @ NN ' '588+?+? ?r_c tjtj|}t |t j uS#t$rYywxYwr)rrrrrrr r)rgattrs r`is_tensor_getset_descriptorrsD%%ellD9DzU7777 s>A A  A ct|dS)N__torch_function__)r rs r`is_torch_function_objectr s 5. //r_cVddlm}ddlm}|j s&t |drt |j drgd}t||rt|jdd}n#t||rt|jdd}|dtjjfvSy)Nr)UserDefinedObjectVariable)TensorWithTFOverrideVariable peek_valuerF)rr&torch._dynamo.variables.torch_functionrr;r rrr class_typerrr_disabled_torch_function_impl)rrrrs r`has_torch_functionrsBS ~~L!gbmmo?S&T b6 72==*>ED 5 6288%94@DD%(("H"HIII r_cd}d}tjjjx}r)||jvr|j|}|j }|j |d||S)NF) static_shapessymbolic_contextr-)rrr$try_gettensor_to_contextr from_tensor)rrrr-tracing_contexts r`to_fake_tensorr/sy F--66>>@@@ 11 1.@@C %33F   1A& ! r_ct| xrWt| xrIt|xr<t|dxr.t|jdxr|jj S)N__dataclass_params__frozen)rrrr rrrs r`is_frozen_dataclassr?sn #E ** .&u- - .   . E1 2 . E.. 9  .  & & - - r_cd|D]}t||st||cSt|d|)zX Return the first available attribute or throw an exception if none is present. z% does not has any of the attributes: )r rr)rattrsrs r`get_first_attrrJsC& 3 3% %& C5 EeWM NNr_c#K|sdydfd }tjjj|5}|dddy#1swYyxYww)Nc>dd}tj||S)Nctjjjddxxdz cc<tjj ||S)Ncompiled_autogradcompilesr2)rrprrOrcompile)gm_example_inputs_s r`inner_compilerzKmaybe_enable_compiled_autograd..compiler_fn..inner_compiler^s@ ##,,-@A*MQRRM..sODDr_)backend fullgraphdynamic)rr rr rr )rr)rrrrs r` compiler_fnz3maybe_enable_compiled_autograd..compiler_fn]s% E==Ni r_)rr rr )rrpr_enable) should_enablerrrrs `` r`maybe_enable_compiled_autogradrUsI   ]] , , 4 4[ A SI   s8AA  A AAc@Gddt}t|S)Nc eZdZy)*invalid_removeable_handle..InvalidN)rYrZr[rHr_r`Invalidrls r_r)rr1)rs r`invalid_removeable_handlerjs $  79 %%r_c t|tjjs|St|tjj r|S|j j|j }|j|_|Srr) rrrrdrr_rrr5)r#proxys r`nn_module_proxyrvsZ c588?? + #uxx++, MM ! !#-- 0E\\EN Lr_c4eZdZ dfd ZddZxZS) GmWrapperc>t|||_||_yrr)rrWr unflatten_fn)rVrrrs r`rWzGmWrapper.__init__s (r_cTt|}|j|j|Srr)rJrrres r`rzGmWrapper.forwards't*tww))$/00r_)rtorch.fx.GraphModulerzCallable[[list[Any]], Any]rrrr rr )rYrZr[rWrrrs@r`rrs%)&)6P) )1r_rc t|jjDcgc]2\}}|jdk(r|jj ddr|4c}} t jjjrO dgk(sJt|dtsJt|d d d d fd }|t|| | n`tj|\}}t!j"tj$|}|t||| tj& d fd }|Scc}}w) 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_argFrc*|dt|ddzSr!rr&s r` flatten_fnz(flatten_graph_inputs..flatten_fns7T$qr(^+ +r_c|dg|dSrrrH) flat_argsboxed_inputs_counts r`rz*flatten_graph_inputs..unflatten_fns#112TY?Q?R5ST Tr_)treespeccX|}D]}||j|Srr)rs)rrrP compiled_fnrinputs_idx_to_clears r`wrapperz%flatten_graph_inputs..wrappers8t$ % A GMMO 9%%r_r )rr rr ) enumeraterrrrrvrrprin_compiled_autograd_regionrrJr_rr tree_flattenrrtree_unflattenarg_tree_leaves) rinputs compile_gmrPr&r flat_inputsspecrrrrrs @@@@r`flatten_graph_inputsr s!0 At 77m # k5(I   }}&&BB#qc)))&)T*** ^ , U!2|!PQ #//7 T (()>)>N  2|!s) ?? ! ! * * J53H3H3J/JJr_c`ttDcgc] }t|c}Scc}wrr)rr get_torch_function_mode_stack_at)rPs r`get_torch_function_mode_stackrAs.5:;T;V5W 01(+  s+ch|tkr|dk\sJtjj|Sr)rrr_get_function_stack_at)inds r`r@r@s/ *, ,9 9 88 * *3 //r_clttD] }t|D] }t|yrr)rrrr)r0rmodes r`set_torch_function_mode_stackrGs9 ,. /$!#$,%d+,r_cHttD] }tyrr)rrr)rs r`clear_torch_function_mode_stackrIs ,. /$!#$r_ctyrr) breakpointr&s r`_breakpoint_for_c_dynamorL sLr_c|j}tj|}t|jdk7rddlm}|d|j|jk7rddlm}|dy)NrWr2)InternalTorchDynamoErrorz[Tensor subclass method __metadata_guard__ must take exactly two subclass metadata argumentsz?Tensor subclass method __metadata_guard__ must be a classmethod) __metadata_guard__r signaturer_rrrNrr)rrsigrNs r`verify_guard_fn_signaturerRsk  ! !B   B C 3>>a1& i   {{eoo%1& M  &r_cn|jtjtjfvxr|jtjtjfvxrZ|jtjtjfvxr,|j tj tj fvSrr)rrrr@rK__iter__)user_clss r`#does_not_override_dict_iter_methodsrV"s4::{'8'899 G OO [-?-?@ @ G MMdii)9)9: : G   $--1E1E!F F r_c$|j|Srr)rrErPs r` call_sizerY.s 66!9r_c$|j|Srr)rrXs r` call_strider[3s 88A;r_c"|jSrr)storage_offsetrDs r`call_storage_offsetr^8s   r_cddg}|Dcic]4}||jvs|tj|j|6}}|Scc}w)Nrtag)r5rz)r KEYS_TO_COPYr tensor_dicts r`_extract_tensor_dictrc?sZ# L 4@,/3!**CTTYYqzz# ''K  s A%Az(dict[int, weakref.ReferenceType[object]]user_obj_id_to_weakrefc2t|}|Jd|S)NzUser object is no longer alive)rd)obj_idrs r`get_user_object_from_idrgRs$  ( *C ?<<BA<A0A<"B0A9 5A<<BBc#Ktjr6tjjj 5ddddydy#1swYyxYww)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)rFrrr meta_utils$disable_inference_mode_for_fake_proprHr_r`*maybe_disable_inference_mode_for_fake_proprsJ00    ) ) N N P       s9AAAAAcJ|duxsd|jvxsd|jvS)Nrr+r&)r&s r`is_node_meta_validrs( 4< M?dii7 M5DII;MMr_ctSrr_error_on_graph_breakrHr_r`_get_error_on_graph_breakrs  r_c|ayrrrrs r`_set_error_on_graph_breakrs!r_ctjjjr)tjj j dntj}|j|S)NzPregraph bytecode) rautogradr_is_profiler_enabledr _profiler_RecordFunctionFastr" nullcontext __enter__cms r`record_pregraph_bytecode_enterrsS >> " " 7 7 ../BC  # # % LLN Ir_c*|jdddyrr)__exit__rs r`record_pregraph_bytecode_exitrsKKdD!r_c0ddlm}|jS)Nrr$) torch._guardsr$get_traced_coders r`rrs, )> ) ) ++r_)rz-Union[list[tuple[str, Any]], list[list[Any]]]rz!Union[tuple[str, ...], list[str]]rrr)rzCallable[[], str]rr)rr)rrrr)rrS)rr )rr!)NFNNNNFN)rrr&rKrrrzOptional[dict[str, object]]r'rKrrVrrfr(rr)rKrGenerator[Any, None, None]r)r:zLiteral['str']r;rrr)r:zLiteral['csv']r;rrztuple[list[str], list[object]])rF)r:rr;rrz-Union[str, None, tuple[list[str], list[str]]])rzcontextlib.ExitStack)rrrr rr)rrrr=rr)rzfx.Graphrr)rErLrrL)rEr rr)rr rr rr)rr rztype[T]r TypeIs[T])rr rz)tuple[type[list[T]], type[tuple[T, ...]]]rr)rr rzIterable[type]rr)rr rr rr)rr rr)rzCallable[..., T]rz*TypeGuard[functools._lru_cache_wrapper[T]])rr rz,TypeGuard[functools._lru_cache_wrapper[Any]])rr rzMTypeIs[Union[_FuncTypes, torch._ops.OpOverloadPacket, torch._ops.OpOverload]])rr rzTypeIs[_FuncTypes])rr rzTypeIs[Union[types.GetSetDescriptorType, types.MethodDescriptorType, types.WrapperDescriptorType, types.MemberDescriptorType, types.MethodWrapperType]])rr rr )rr rztuple[Any, Optional[str]])rr rzTypeGuard[np.ndarray])rr rr)r#r rrrhrr)r+r rztypes.CellType)rr rr rz&tuple[tuple[Any, ...], dict[str, Any]])rMrUrr)rrJrrrT) rrrrrrPr zOptional[type[BaseException]]r zOptional[BaseException]rr)rrrr)rzlist[CompilationMetrics])rr)rr)FF)rrr\rrrrrr)rErruzOptional[torch.dtype]rr)rz"dict[str, Union[T, tuple[T, ...]]]rzdict[str, list[T]])rz Sequence[T]rzlist[T])rr rr )r+rrrrx)rr rzTypeIs[Union[torch.jit._trace.TopLevelTracedModule, torch.jit._script.RecursiveScriptModule, torch.jit.ScriptFunction[Any, Any], torch.jit.ScriptModule]])rr rr r^rrr )rr rrK)rhr rr)rhrrr)rr rzCallable[[], None])r2)rr r Iterable[Any]rrrztuple[Any, float])rr rrrr)rrrr?)rMr rr)rzset[int])rr rz-TypeGuard[Union[torch.SymBool, torch.SymInt]])rr r-r rr)r1r rr )rrrzMapping[Any, Any]rr)r dict[K, V]rz KeysView[K])rrrz!Iterable[tuple[K, Union[V, Any]]])rhr rr )rjz Iterable[T]rr)rjr rrrr )rtr rztuple[int, int, int])rr rhrrr )rzdict[Any, Any]rrrr )rRzset[T]rrrrL)rr r%rrr)r&rbrr rr)rr@rr )rRrrrrr)rr?rgrrr) rrrr rr>rrrr )rLr rz?TypeIs[Union[torch.Tensor, torch.nn.Module, MethodWrapperType]])rr r list[Any])rEr r%r rr)rr r%r rr)rr?rrrr rr)rrLrz Container[T]rr)rrrr rrrr)rzCallable[[], Any]rr )rr r,torch._subclasses.fake_tensor.FakeTensorModerr )rrrrrr)rr rr rr rrrr$rrrrrrrrrzCallable[..., None]rrrrrr)rr rr)rOrrrr)T)r&rbrUrrr )r@r rr?rr )rr?rr r`rrr )r&rbrr?r`rrr )rOptional[torch.fx.Node])r&rbrry) rr r&rbrr rr ryr rr )r&rbrr rr )rr rr)rr rr)rr rr rr )r#ztypes.ModuleTyperr)rr rgrrr rr)rhrrr)rr rrrr)rrrr)rzUnion[torch.Tensor, Any]rrrr#rz)tuple[bool, Optional[TensorStaticReason]])rrrr rr ) rrrgrrrrrrr rr)FFF) r#torch.nn.Moduler rr rr rrr) r#rr rr rr rrr)rr rr )rr rgrrr )rEr rr )rr,rr rr rrM)rXr rr )rirArr )rrrprrr)rrrzOptional[_Anchors])rztypes.CodeTyperzdis.Instructionrr)rr rr )rgrrr)rr@rr)rrrrrr )rr rrrr )TT)rrrrrrrr)rr1)r#r rr )rr rr rzCallable[[Any, Any], Any]rr?)r#r rr)rr r"rrr)rrr/rrr)r4rrr)rr)rDrrr )r0rrr)rr rr)rUr rr)rEr rPrrr)rEr rr)rrrrP)rfrrr )rr rr)rrrrrr)r&rrr)rrrr)rAbstractContextManager[None])rrrr)rzOptional[list[CodeType]](r __future__ratexitrr"rzrrKrrrrrrrrrr}r1rhrhrrrr$rrrrr'r0rrrrrrr r r r r rrrrrrrtyping_extensionsrrrrrrtorch._functorch.config%torch.fx.experimental.symbolic_shapestorch.utils._pytreer_pytreerrtorch._Crrrrtorch._dispatch.pythonrtorch._dynamo.metrics_contextr r!rr"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._tritonr/r0torch.utils.hooksr1 graph_utilsr3rcollections.abcr4r5r6r7r8r9r:r;r<torch._dynamo.replay_recordr=torch._dynamo.symbolic_convertr>r?torch._dynamo.variables.baser@torch._prims_commonrArrrtorch._logging torch._numpy_numpyrrBrDrrFfftlinalgrrGrNP_TO_TNP_MODULErrIrJrKrrLrMrNrrdrunpatched_nn_module_getattrrfunpatched_nn_module_call _call_implunpatched_nn_module_call_implrrOrQtroubleshooting_urlnnmodule_doc_urlnnmodule_doc_url_msgrrYrrRr$rTro timer_counterrrVrbrrrrrrrrrrrrrrrr%r!r7r<registerrP FloatTensorr DoubleTensorrdouble HalfTensorrhalfBFloat16Tensorr ByteTensorr CharTensorr LongTensorrlong IntTensorrr ShortTensorrshort BoolTensorrtensortype_to_dtyperRrnrlrorjrrrrrrrrrr ParamSpecArgsParamSpecKwargs TypeVarTuple TypeAliasTyperrrrrrrrrrrrrneltlegtgecmp_name_to_op_mappingcmp_name_to_op_str_mappingrrrrr!r$r'r,rArFrHrrrJ!DEFAULT_COMPILATION_METRICS_LIMITrrrrrr rrrrrrrXrrr_rardrjrsryrrrrrrrrrrrr rrrrrjrEllipsisrNotImplementedrru memory_formatr~finfoiinfo attention SDPBackendr_CudaDevicePropertiesrrrblanguagerrr"r*r5r@rDrHrOrQrUrKrVr@rWrrXrYiterrZrr[__length_hint__tuple_iterator_lenr rrcrdict_newrr5r dict_methodsrY set_methodsrfrozenset_methodsr tuple_new tuple_methodsrJ list_methodsr list_getitem str_methodsr\r]r_rarerkrnrrr| iter_nextrwrz dict_getitemrrrrrrrrrrrrGLOBAL_KEY_PREFIXtorch._subclassesrrrrrrrrrr@rF orig_code_maprGrH seen_code_maprQr{rVrXrdr\rrrrxrrrrrrrrrrrrrrrrr all_hook_namesrrrrr r"r/r1r:rFrHrLrPrYrcrkrrrtrrrrrrrrrrrrrrrr r$r'r)r-r2r6r:r>rAr@rGrIrLrRrV_disable_dynamorYr[r^rcrdrgrirkr{rrrrrrrrrrrrr5s0r`rsX #         ,=$-   ON ,$$ <O;;=G&1>-'    <=2 .)  FF II II > :   FFCGG IIszz IIszz   "VV  CL CLt_#hhoo99 88??33 % : :7N{7N7N8 4%'>&GQ.//UVg!4605 .E[-D-DU-K*K ! tyy %J%JP  7  .       ?C;B *$  >! //$ 499 S#S#l$IOO%!%"',0.2&*"&!/3NQ NQNQ NQ * NQ , NQ$NQ NQNQ -NQ NQNQb L L ,1) )%))#) ) */$ $"&$2$N88   u{{3  5 u}}ejj1 5>>+ u{{n uzzm u{{EJJ/ OOekk599-  U[[1 uzzm (#:";",  ? G   B A A   I   C C&w  %! G&  5 5/5 5  7 717 7       ! I R    kkkkkkkkkkkk   83%$,T $0 5  v"v"v"r%'!?Pk>O>O ,?; -` 3F-`M3M3M3M3, M3 ' M3  M3b"*DE09ST%! &ssl 5918* %*"'''!' ' ''@ (((( + )* 8<II4IIX 6   = =& 99" *$( <Q112.=>  -69&X 2   J  NN LL KK  LL KK KK HH!! JJ$$'$y,foo334$  >2W    !2   "&bggi 0%)"))+%6 "6(,RXXZ(8 %8&*;=+?+?+A&B #B&*48n#4&*4a>&:#:#33 ^^ <<")//$--"6"6"8+:N:N:U:U:WX  %(LL$7$7$9N&Xf=MvN "++2248HF MM &+nn&;&;&=RF&AQR %)]]%9%9%;P6x?OP  $'LL$7$7$9N&Xf=MvN  CL CL G 1 :    @ 8( M #( & & & & &  &RM MDM@B !=<7(& 1 1..&).7P..b4 1 E! 2 2%  CCK 0 ,$  "  DF@E 6 ##L99 M+".  N !" "" ,yS B>  rK O SPOs|AI(B%AI6AJ7AJAJ-AJ <AJ 2AJAJ(AJ7AJ-AJ<AJI(AI3I2AI3I6AI?I>AI?