~L i UdZddlmZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlZddlmZddlmZddl mZddlmZmZmZmZmZm Z  ddlm!Z!dd l#m$Z$m%Z%dd lm&Z&ddl'Z'ddl(Z'ddl)Z'dd l*m+Z+dd l,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;mZ>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFdd lGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQddlRmSZSmTZTddlUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^ddl_m`Z`ddlambZbddlcmdZdddlemfZfmgZgmhZhmiZimjZjddlkmlZmddlnmoZoddlpmqZqmrZrddlsmtZtddlumvZvmwZwmxZxddlymzZzddl{m|Z|m}Z}m~Z~mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZddlmZmZmZmZmZmZmZddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZdZded< ddlZerdd lmZmZmZdd!lmZdd"lmZdd#lmZmZe%d$Ze jeҫZe'jjed%Ze'jjed&Ze'jjed'Ze'jjed(Zd)ZGd*d+e`ZGd,d-Zdjd.Zejdkd/Zdad0ed1<dld2Zdmd3Ze'jjjZdnd4Z do dpd5Zdqd6Zdrd7Z dsd8Zdtd9Zdud:Zdvd;Zdwd<Zejd=>Gd?d@Z dxdBZdydCZejGdDdEZGdFdAejZejdzdGZGdHdIeZZGdJdKZdydLZGdMdNeܫZejGdOdPZejGdQdRZGdSdTZGdUdVejZd{dWZGdXdYZd|dZZd}d[Zd}d\Z d~d]Ze$d^eeefZ dd_Z dd`Z ddaZ d ddbZ d ddcZ dddZ ddeZezeddfZ ddgZddhddiZy#e"$r ddl#m!Z!YwwxYw#e$rdZYwxYw)a Core guard system for Dynamo that detects when compiled code needs to be recompiled due to changes in program state. Guards are conditions that must remain true for previously-compiled code to be valid for reuse. This module provides the infrastructure for creating, managing and checking guards, including: - Guard creation and composition - Guard state management and invalidation - Guard checking and failure handling - Utilities for guard optimization and debugging - Integration with Dynamo's compilation caching The guard system is critical for Dynamo's ability to efficiently reuse compiled code while maintaining correctness by detecting when recompilation is necessary due to changes in program state, tensor properties, or control flow. ) annotationsN)contextmanager)deepcopy) currentframe)AnyCallableNoReturnOptional TYPE_CHECKINGUnion) LiteralString) TypeAliasTypeTypeVar) ReferenceType)code_framelocals_names) check_obj_id check_type_idClosureGuardAccessorCodeGuardAccessor dict_versionDictGetItemGuardAccessorDictGuardManagerFuncDefaultsGuardAccessorFuncKwDefaultsGuardAccessorGetAttrGuardAccessorGetGenericDictGuardAccessor GuardAccessorGuardDebugInfo GuardManager install_no_tensor_aliasing_guardinstall_object_aliasing_guard!install_storage_overlapping_guardinstall_symbolic_shape_guard LeafGuardprofile_guard_managerRelationalGuardRootGuardManagerTupleGetItemGuardAccessorTypeDictGuardAccessorTypeGuardAccessorTypeMROGuardAccessor) get_global_source_nameget_local_source_name IndexedSource$is_from_flatten_script_object_sourceis_from_local_sourceis_from_optimizer_sourceis_from_skip_guard_source.is_from_unspecialized_builtin_nn_module_sourceTensorPropertyTensorPropertySource)CompileEventLoggerget_metrics_context) CompileContext CompileIdDuplicateInputsGuardGuardBuilderBase GuardEnvExpr GuardSourceSourceStorageOverlapIndentedBuffer) structured)justknobs_check)_CppShapeGuardsHelper_ShapeGuardsHelperEqualityConstraint is_symbolic SYMPY_INTERP)_pytree) OrderedSet) format_framereport_compile_source_on_error) TensorWeakRef)config convert_frameexc)set_guard_error_hook)*AttrProxySource AttrSourceCallFunctionNoArgsSourceCallMethodItemSource ChainedSource ClosureSource CodeSourceConstantSourceConstDictKeySourceDataclassFieldsSourceDefaultsSourceDictGetItemSourceDictSubclassGetItemSourceFlattenScriptObjectSourceFloatTensorSourceFSDPNNModuleSourceGenericAttrSource GetItemSource GlobalSourceGlobalStateSourceGlobalWeakRefSource GradSourceListGetItemSource LocalSourceNamedTupleFieldsSourceNNModuleSourceNonSerializableSetGetItemSourceNumpyTensorSourceOptimizerSourceScriptObjectQualifiedNameSourceShapeEnvSourceSubclassAttrListSourceTorchFunctionModeStackSource TorchSourceTupleIteratorGetItemSourceTypeDictSource TypeMROSource TypeSource"UnspecializedBuiltinNNModuleSourceUnspecializedNNModuleSourceUnspecializedParamBufferSourceWeakRefCallSource) CacheEntryDynamoFrameType ExtraState GuardedCode GuardFailGuardFilterEntryGuardFn)builtin_dict_keyscommon_constant_typesdataclass_fields dict_keysget_custom_getattrget_torch_function_mode_stack get_torch_function_mode_stack_atguard_failuresistype key_is_id key_to_idnormalize_range_iter orig_code_maptensor_always_has_static_shapetuple_iterator_getitemtuple_iterator_lenunpatched_nn_module_getattrverify_guard_fn_signaturez(Optional[Callable[[Any, Any, Any], Any]]guard_manager_testing_hook_fn) GeneratorKeysViewSequence)Symbol)DispatchKeySet) OutputGraphOutputGraphGuardsStateTguards recompilesrecompiles_verboseverbose_guards) __defaults____kwdefaults____code__ __closure____annotations____func____mro__c*eZdZddZddfd ZxZS)IndentedBufferWithPrefixc:d|j|jzzS)Nz| )_indenttabwidthselfs Z/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/torch/_dynamo/guards.pyprefixzIndentedBufferWithPrefix.prefixst||dmm344cN|rt||yt|d|zy)Nz+- )super writeline)rline skip_prefix __class__s rrz"IndentedBufferWithPrefix.writelines$  G d # G edl +rreturnstrF)rrrboolrNone)__name__ __module__ __qualname__rr __classcell__rs@rrrs5,,rrceZdZdZdddZeddZddZddZddZ ddZ dd Z dd Z dd Z d dd Z dd Z ddZddZddZddZddZy) GuardManagerWrappera A helper class that contains the root guard manager. An instance of this class is stored in the Dynamo cache entry, so that the cache entry can access the RootGuardManager stored in the "root" attribute and directly call the check_nopybind from C++. Nc |t|_n||_d|_d|_d|_g|_d|_d|_d|_d|_ d|_ i|_ g|_ t|_t|_yN)r'rootdiff_guard_root closure_varsargs code_partsverbose_code_parts global_scope guard_fail_fn cache_entry extra_stateid_matched_objsno_tensor_aliasing_sourcessetprinted_relational_guardsrKdiff_guard_sources)rrs r__init__zGuardManagerWrapper.__init__s <(*DIDI;?6:)- %'7;6:DH1515AC57'?Bu&3=<rc#zKt|_ dt|_y#t|_wxYwwr)rrrs r#_preserve_printed_relational_guardsz7GuardManagerWrapper._preserve_printed_relational_guardss,),& 3 -0UD *SUD *s;';8;cpdfd dfd dfd jjS)NcL|jjvxs|jdkD}t|j j D]\}\}}|||zz}|r)jj |j|SNr) get_sourcer fail_countsortedget_key_value_managersitemsadd)nodeis_diff_guard_nodeidxkey_mgrval_mgrrvisits rvisit_dict_managerzJGuardManagerWrapper.collect_diff_guard_sources..visit_dict_manager)s!T%<%<<U@QTU@U ,2++-335, F''gw#eGnuW~&EE" F "''++DOO,=>% %rc$t|trJ|jjvxs|j dkD}|j D] }||z}|r)jj |j|Sr) isinstancerrrrget_child_managersr)rr child_mgrrrs r visit_managerzEGuardManagerWrapper.collect_diff_guard_sources..visit_manager7s!$(89 99!T%<%<<U@QTU@U "446 7 "eI&66" 7"''++DOO,=>% %rcJ|yt|tr|S|S)NFrrrrrs rrz=GuardManagerWrapper.collect_diff_guard_sources..visitEs,|$ 01)$// & &r)rrrr)rrrr)rr)rrrrs`@@@rcollect_diff_guard_sourcesz.GuardManagerWrapper.collect_diff_guard_sourcess, & & ' dii&&&rcztjrtdr|j|j y)Nz3pytorch/compiler:use_recursive_dict_tags_for_guards)rP"use_recursive_dict_tags_for_guardsrDfind_tag_safe_rootsprepare_diff_guard_managerrs rfinalizezGuardManagerWrapper.finalizePs/  4 4 A:   $ $ & '')rcD|j|jyr)rpopulate_diff_guard_managerrs rrz.GuardManagerWrapper.prepare_diff_guard_managerWs '') ((*rc dddfd dfd dfd |j}|D]E}t|jtjj s6|j Gy) uD Identify ``tag safe nodes`` and ``tag safe roots`` within a guard tree. ----------------------------------------------------------------------- tag safe node ----------------------------------------------------------------------- A *tag safe node* is a ``GuardManager`` whose guarded value satisfies one of the following conditions: 1. Immutable value - The value is intrinsically immutable according to ``is_immutable_object``. Tensors are considered immutable. To ensure that symbolic guards run, we also check that the GuardManager has no accessors. 2. Nested tag safe dictionary - The value is a ``dict`` whose keys and values are all tag safe nodes (checked recursively). Such dictionaries allow entire nested structures to be skipped once their identity tag matches. 3. Pure ``nn.Module`` - The value is an ``nn.Module`` whose sole accessor is ``GetGenericDictGuardAccessor``—i.e., it only exposes its ``__dict__`` and nothing else that could mutate between runs. For every tag safe node, verifying the identity/tag of just the top-level dictionary is enough to guarantee the entire subtree is unchanged, enabling a *fast-path* guard check. ----------------------------------------------------------------------- tag safe root ----------------------------------------------------------------------- A ``tag safe root`` is a tag safe node whose parent is not tag safe. These boundary nodes mark the points where guard evaluation can safely prune traversal: if a tag-safe root’s dictionary tag matches, the entire subtree beneath it is skipped. One strong requirement for tag safe root is for the guarded object to support weakref. Refer to more details in the Recursive dict tag matching note. In short, we need to save the weakref of the object on first invocation, and check if it is still valid in later iterations, to apply recursive dict tag optimizations. `dict` objects do NOT support weakref. Therefore, as of now, we only mark nn module related guard managers as tag safe roots. Algorithm --------- The search runs in post-order traversal 1. Visit leaves and classify them as tag safe or not. 2. Propagate tag-safety upward: a parent dictionary becomes tag safe only if all of its children are already tag-safe. 3. Propagate tag-safe-rootness upward: if the whole subtree is tag safe, the current node becomes the new tag safe root, otherwise propagate the subtree tag safe roots. 4. Collect every tag safe node and, by inspecting parent tags, label the subset that are tag safe roots. c|j}|j}tfdt||DS)Nc3`K|]%\}}t|xr|j'ywr)r is_tag_safe).0accessormgraccepted_accessorss r zTGuardManagerWrapper.find_tag_safe_roots..check_tag_safety..s4!Hc8%78NS__=NNs+.) get_accessorsrallzip)rr accessors child_mgrss ` rcheck_tag_safetyzAGuardManagerWrapper.find_tag_safe_roots..check_tag_safetysB**,I002J%(J%? rct|jtsJg}d}t|j j D],\}\}}||||j |.t|j j D]3\}\}}|r||jz}|s!||jz}5|r|j|SNT) issubclassget_type_of_guarded_valuedictrrrextendr mark_tag_safe)rtag_safe_rootsis_subtree_tag_saferrrrs rrzCGuardManagerWrapper.find_tag_safe_roots..visit_dict_managersd<<>E EEN"& ,2++-335, :''gw&'N&"))%.9  :,2++-335, A''gw'7+>+>+@@''7+>+>+@@' A#""$! !rct|trJg}|jD]}|j||j rlt |j tjr2|jr2|js"|j|S|j|St |j trP|j}|j}tdt||D}|r|j|St |j tj j"r*|t$t&f}|r|j|gS|S|j t(j*t(j,t.t0fvrt2j4ru|t6t8t:t<t>f}|jD],}t|t>s||jAtBvz}.|r|j|St |j t(jDrE|t>f}|td|jDz}|r|j|St |j tFrU|jIjKtBr2t2j4r"|tLf}|r|j|St |j tNr%|tPtRf}|r|j|S)Nc3fK|])\}}t|txr|j+ywr)rrr)rrrs rrzQGuardManagerWrapper.find_tag_safe_roots..visit_manager..s3*%#x)ABXsGXX*/1c3fK|])}t|txr|jdk(+yw) cell_contentsN)rr get_attr_name)rrs rrzQGuardManagerWrapper.find_tag_safe_roots..visit_manager..s?+!x)=>D ..0OCD+r)*rrrris_guarded_value_immutabler rtorchTensorhas_no_accessorshas_object_aliasing_guardrrrrrnnModulerr*types FunctionType MethodType staticmethod classmethodrP)assume_dunder_attributes_remain_unchangedrrrrrrdunder_attrs_assumed_constantsCellTypetuplerendswithr(typer)r+) rrrrr rrr rs rrz>GuardManagerWrapper.find_tag_safe_roots..visit_managersJ!$(89 99 N!446 8 %%eI&67 8..0d<<> M,,.t7U7U7W**,|" !y&&(x" !wD::R=T&U##s+%)$6$6$8+(# '&&(6" !3499;UCOO%../MNDD'746'#'&&(" !D::.visit+s.| $ 01)$// & &rN)rrrztuple[type[GuardAccessor], ...]rr)rrrlist[GuardManager])rrrr-)rr rrrr mark_tag_safe_root)rrrr rrrs @@@@rrz'GuardManagerWrapper.find_tag_safe_roots[sxt  4S    "U>UV       ; ; = rcFdfd }|jj|S)Nc(|jvSr)r)node_mgrchosen_sourcess r filter_fnz@GuardManagerWrapper.clone_with_chosen_sources..filter_fnGs&&(N: :r)r4rrr)r clone_manager)rr5r6s ` rr0z-GuardManagerWrapper.clone_with_chosen_sourcesDs ;yy&&y11rc|jj}|j}|Dcgc] }|dz|z }}|Scc}w)N: )rrr)rguard guard_namepartsparts rget_guard_linesz#GuardManagerWrapper.get_guard_linesLsF__-- ((*6;c|j}|jj}|dz|z}|r|d|zz }|d|jz }|d|j d|j dz }|S)Nz : source=, z, type=z , tag_safe=())rrrrris_tag_safe_root)r guard_manager accessor_strsourcetss rget_manager_linez$GuardManagerWrapper.get_manager_lineRs))+  # # , , Of $   $ $A w}>>@A BB |M5578=;Y;Y;[:\\] ^^rct|jjD]\}\}}|jd||j 5|r5|jd|j ||j |||r5|jd|j ||j ||dddy#1swYxYw)NzKeyValueManager pair at index=z KeyManager: zValueManager: )rrrrindentrHconstruct_manager_string)rrbodyrrrs rconstruct_dict_manager_stringz1GuardManagerWrapper.construct_dict_manager_string^s(.c.H.H.J.P.P.R'S A #C#'7 NN;C5A B ANN\$2G2G2P1Q#RS11'4@NN^D4I4I'4R3S#TU11'4@ A A A A As A/CC c |j5|jD]}t|trq||jvr<|jj ||j |j|]|j |jjg|j |j|t|tr|j||t|j|jD]I\}}|j|j!|d|j#|j%||K dddy#1swYyxYw)Nz accessed_by=)rJget_leaf_guardsrr&rr writelinesr>rrrrMrrrrrHreprrK)rrrLr:rrs rrKz,GuardManagerWrapper.construct_manager_stringlsC[[] ?,,. Ae_5D$B$BB66::5A(<(  ?) ? ? ?s E E((E1c|j5t}d|_|jdd|jdd|jd|j |j |t |j dr?|j jD]"}|j|j|$|jcdddS#1swYyxYw)NrOT)rzTREE_GUARD_MANAGER:r'get_epilogue_lambda_guards) rrrrrKrhasattrrTrPr>getvalue)rrLr:s r__str__zGuardManagerWrapper.__str__s  5 5 7 #+-DDM NN24N 0 NN0dN C NN- .  ) )$))T :tyy">?!YYAACAEOOD$8$8$?@A==? # # #s C C$$C-c8|jj|Sr)rcheckrxs rrYzGuardManagerWrapper.checksyyq!!rc8|jj|Sr)r check_verboserZs rr]z!GuardManagerWrapper.check_verbosesyy&&q))rc^tdddfd jy)Ncg}|jD]5}|jddj}|j|7|S)N#r)rsplitrstripappend) leaf_guardrverbose_code_part code_parts rget_code_partszMGuardManagerWrapper.populate_code_parts_for_debugging..get_code_partssTJ%/%B%B%D -!-33C8;BBD !!), - rc<|jD]k}t|tr8|vsjj |j |Kjj |m|j D] }| yr)rOrr&rrrr)rr:rrgrelational_guards_seenrrs rrzDGuardManagerWrapper.populate_code_parts_for_debugging..visits,,. Be_5$::..~e/DE.2259OO**>%+@A  B!335 ! i  !r)rdr$r list[str])rrrr)rr)rrgrirs`@@@r!populate_code_parts_for_debuggingz5GuardManagerWrapper.populate_code_parts_for_debuggings(!$  ! ! diirr)rzOptional[RootGuardManager]rr)rzGenerator[None, None, None])rOrderedSet[str]rr)r5rlrr')r:r$rrj)rCrrD Optional[str]rr)rrrLrrr)rrrLrrrrr[rrr)r[rrr)rrr__doc__rrrrrrrrr0r>rHrMrKrWrYr]rkrrrrs@,33/'b*+Z*x >2-2 2JN ) 9F    A# A+C A  A??'?? ?> #"*rrctjj5t|tj tj frtj|n|cdddS#1swYyxYwr)r overrides_enable_torch_functionrnpgenericndarray as_tensor)as r from_numpyrzsR  / / 1T%/BJJ 3K%Luq!RSTTTs AA**A3cddl}ddl}|jj|jjg}ddlm}|j||Dchc]}tj|c}Scc}w)Nr)POLYFILLED_MODULES) torch._dynamo.external_utilstorch._dynamo.polyfills_dynamoexternal_utils polyfillstorch._dynamo.polyfills.loaderr|rinspectgetfile)rmodsr|ms runinteresting_filesrsS'" MM ( (%--*A*A BDAKK"#(, -1GOOA  -- -sA/Optional[dict[str, object]] _CLOSURE_VARSctidtdtdtjj dt dtdddtd td td td d dtdtjdtdntjdt!ddt"j$dt&j(j*t&j,t.t&j0t&t2datS)N___check_type_id___check_obj_id___odict_getitem ___key_to_id___dict_version___dict_containsc.tj||Sr)r __contains__)rybs rz#_get_closure_vars..sT->->q!-Dr___tuple_iterator_len___normalize_range_iter___tuple_iterator_getitem___dataclass_fields___namedtuple_fieldsc|jSr_fieldsr[s rrz#_get_closure_vars..s aiir#___get_torch_function_mode_stack_at __math_isnan __numpy_isnaninf __load_module utils_device)device ___from_numpy ___as_tensorrr)rrr collections OrderedDict __getitem__rrrrrrrmathisnanrufloat importlib import_modulerutils_devicerrz_as_tensor_fullprecrrqrr_get_closure_varsrs4   |   7 7 C C  I  |   D   $%7  &';  ()?  "#3  #$7  23S  DJJ  RZTRXX  5< Y44! " EKK//# $ll'!55- 0 rcLtj|jddS)N rS)astunparsereplace)rs r _ast_unparsers ;;t  $ $T2 ..rc~d}||jr_t|jD]F}|jtvsdt |d}t |dkDrdt |}nJnH|j r<|j j}t |dkDrdt |d}nd}|d |S) NrSz # T)rirz # z<60) user_stackreversedfilenamerrLlenstacksummary)rfr:extrafsrs rget_verbose_code_partrs E    u//0 ;;&9&;;"<#>"?@E5zD( #'|B'7&8 9 [[kk))+G7|a|GBK89:'_UG $$rct|ts|g}|Dcgc]}t||}}|r|Dcgc] }|d|d }}|Scc}wcc}w)N (HINT: rA)rlistr)rr:recompile_hintrfrr=s rget_verbose_code_partsrs| j$ ' \ BL4=i/;M 37tfH^,A .    s AA c|yt|s|St|tjsJ|jj Sr)rHrrSymIntr maybe_as_int)dims rconvert_int_to_concrete_valuesr%s> { s  #u||,,,xx$$&&rc>|Dcgc] }t|c}Scc}wr)r)size_or_striders rconvert_to_concrete_valuesr/s;I JC *3 / JJ Jsc,|tjjztjjz }|j}|j j }|j} d|d|jd|d|d|d| d|d|d} | S)Nz check_tensor(r@z , device=z, requires_grad=z, size=z , stride=rA) r_C_dispatch_tls_local_include_set_dispatch_tls_local_exclude_setdtyperindex requires_gradr) valuenamesizesstridespytype dispatch_keys dispatch_keyr device_indexr guard_strs rget_tensor_guard_code_partr3s @@BB 0023L KKE<<%%L''M vR 3 34B|nBugN/ geWIV]U^^_ a rcHtt|j|Sr)rrr)dctkeys r get_key_indexrHs !#& ' - -c 22rcd|d|dS)Nlist(dict.keys())[]rq)rErs rget_key_index_sourcerPs VHCwa 00rcDtdt|d|ddzdz)NType for object  cannot be saved @into torch.compile() package since it's defined in local scope. @Please define the class at global scope (top level of a module).) TypeErrorr+)objs rraise_local_type_errorrTs8  S {,se+<= L M L M rct|tjjxr#tj xst |tuSr)rrrr rPinline_inbuilt_nn_modulesrr)rs r$should_optimize_getattr_on_nn_moduler\s= eUXX__ - (( D e $(C CrT)frozenc8eZdZUdZded<dZded<dZded<y)NNModuleAttrAccessorInfoFrpresent_in_generic_dictNrnl1_keyl2_key)rrrrrrrrqrrrrfs' %*T)!FM !FM rrGuardManagerTypect|jj}t|jtr|jj}n(t|t sJt ||j}t||}tt||}t|ttfr |d|d} n|d|d} t|jtsM|j|||jtjj|j|d|g|j!|| ||S)N[rrrE example_valueguard_manager_enum == )baserrrr\rrrrrintrget_key_managerr GUARD_MANAGERadd_equals_match_guardget_value_manager) rEbase_guard_managerbase_example_valuerrbase_source_namer key_sourcekey_example_value value_sources rgetitem_on_dict_managerrus:{{'')&,, 23 "",d3330&,,?%&6>J ./ABCEJ#c3Z0*+1->,AC *+1ZL: fll$6 7 ** ,,/== + ! LLj\.?-BCD   / /#- 0 rc|j}t|try|jry|j xrt|t  SNFT)originating_sourcerrois_specialized_nn_module is_dict_keyri)r:rEs rmatch_on_id_for_tensorrsJ  % %F&+, %%'     F 6:(F$FFrc"eZdZUded<ded<y) GuardCodeListrj code_listr;r:Nrrrrrqrrrrs  LrrceZdZdZdZy)rrON)rrrrDICT_GUARD_MANAGERrqrrrrs Mrc<ttt|Sr)rrr)codes r&code_framelocals_names_reversed_cachedr s /56 77rceZdZ d8 d9dZ d:dZd;dZeddZ d?dZ d@d Z dAd Z dBd Z dCd Z dD dEd ZdFdGdZdHdZ dIdZdJdZ dF dKdZdJdZdJdZdLdZdMdZdJdZdJdZdFdNdZ dF dNdZdFdOdZdJdZdJdZdJdZ dJdZ!dJd Z"dJd!Z#dFdNd"Z$dJd#Z%dJd$Z&dJd%Z'dJd&Z(dJd'Z)dJd(Z*dJd)Z+dJd*Z,dPd+Z-dJd,Z.dJd-Z/dJd.Z0dJd/Z1dJd0Z2dJd1Z3dJd2Z4dJd3Z5dJd4Z6dJd5Z7dFdOd6Z8 dQ dRd7Z9y)S GuardBuilderNc  ||_||_||_||_||d|_| xs||_t jj|jd<tjjjjD]X\} } | jddjddjdd} | |jd| <| |j| <Z||_g|_g|_g|_g|_g|_||_t-|_|j*j0J|j*j0j2D]C} |j.j5t7|j9| j;Ei|_i|_t-|_ g|_!| |_"tFjHxr tKd|_$tM|_'y) NLG __builtins__>_<._dot_!pytorch/compiler:guard_nn_modules)(f_codeid_ref source_reflookup_weakrefsscoperuntime_global_scopebuiltins__dict__copyrpackagepackage_importer_package_imported_modulesrrrCargnamesrshape_env_codeno_tensor_aliasing_names!no_tensor_aliasing_guard_managerscheck_fn_managerrkey_order_guarded_dict_ids output_graphguard_on_key_orderridgetrr_cached_guard_managers_cached_duplicate_input_guardsobject_aliasing_guard_codes save_guardsrPguard_nn_modulesrDrK+already_guarded_not_present_in_generic_dict)rr.r/r0r1 local_scoperrCr>rGr3rpackage_modulerEs rrzGuardBuilder.__init__s  $.9D<3X $8$HL!%-%6%6%;%;%= >"]] + + E E K K M .  <<S)11#s;CCCQD/=DJJ~ &t ,-DJJt  .+#% )+ 4646%EG.6F +.%'$$11===++88KK MF  + + / /488FKKM3J0K L M BD@B#DGE+BD(& & 7 7! O /=  L 8rc\|j|}t|trtd|j|j j }t |D]K}||}t|j |}|j||}|j||d|d||My)NzsNot expecting a DictGuardManager. Seems like Dynamo incorrectly added the dict to tx.output.guard_on_key_order for )rrrrrErr) get_guard_managerrrNotImplementedErrorrrrr_get_guard_manager_typedict_getitem_manager) rrr:dict_mgr dict_sourcerrrrs r#guard_on_dict_keys_and_ignore_orderz0GuardBuilder.guard_on_dict_keys_and_ignore_order s))%0 h 0 1%FFKjj\S  ..335 %]3 C!#&E,U-E-ESQL!%!J"22!!#3#A#A 3K ~S*5..*)*RxqA522/:,d3'0JER' rctjrAtjdk\r.tjdkrt j dt y|S)N) )r\r]rOzMGuards may run slower on Python 3.13.0. Consider upgrading to Python 3.13.1+.)rPissue_3_13_0_warningsys version_infowarningswarnRuntimeWarning)rs r'_get_generic_dict_manager_example_valuez4GuardBuilder._get_generic_dict_manager_example_valueOsF  ' '  G+  :- MM_ rc( d d}|j} |j} t} tj|j D]+} | j | jj-tddd} | | vrtd| d} nNd| vr| | dvrtdd| } n5d| vr| | dvrtdd| } n| | vrd| vr| | dvr tdd| } | js|j|j|||S| jsJ| j}| j}|d }dx}}dx}}dx}}|rTt|j|}|j}| |}|j!||}|}|}|j!||}n|}|}|j!||}|j#||j%| t&j( }||||| || }|r||J||||||| S|S) a( This tries to avoid calling the expensive nn module custom getattr method by checking if the attribute is accessible via __dict__. For attributes that are not accessible via __dict__ (like descriptors), we fallback to PyObject_GetAttr. There are two cases that we optimize for 1) attributes present directly in __dict__, e.g training. 2) parameters/buffers/modules - they can be accessed via _parameters, _buffers, _modules keys in __dict__. For example, mod.linear can be accessed as mod.__dict__["_parameters"]["linear"] The most common and expensive case for nn module guards is of type mod.submod1.submod2.submod3.training. We avoid the python getattr of nn modules by going through the __dict__. ct|trct||}d|d|d}|j|||tj j ||d|g|j||||S|j||||S)NrrrrrrM) rrrrrrrr rQ)rr source_namer rrrr s rgetitem_on_dict_mgrz>GuardBuilder.getattr_on_nn_module..getitem_on_dict_mgr|s#/0&&8#> /{m3uiqI ##%"%'7'E'E $ )(*T#/I.JK,,&"/'9 -//&"/'9 0rFNT _parameters_buffers_modulesattrrErr .__dict__rErr)rrrgr rr)rrrrrgrr rrrrrrr)memberr5rrgetmrorupdatekeysrrgetattr_managerrrrUrrrPget_generic_dict_managerrdrr)rrEr r rr rgrrh attr_namemod_dictall_class_attribute_namesr[ accessor_inforrmod_dict_sourcel1_source_namel2_source_namel1_valuel2_valuel1_guard_manager_enuml2_guard_manager_enum l1_sourcemod_generic_dict_managerl1_mgrs rgetattr_on_nn_modulez!GuardBuilder.getattr_on_nn_moduleas6# # # # !$ #   #  !1 # # JMM %...1e! 2 < <= @A % , ,QZZ__-> ? @1dC  4T9dKM h &98O+O4T=)TM 8 # Xj5I(I4T:yQM 6 6h&Xj115T:yQM44&55]]"+#5 6 !'' ''"))F"))F"2 2)>>>rc|jjj|jd|jdt j S)Nr&) f_globalsrErr)rCrglobals_dict_managerr3r2rrrs rget_global_guard_managerz%GuardBuilder.get_global_guard_managersF!!&&;;//**S//== <  rc |jj}d}j}|dk7r||jvr|j|S|dk7r|j |}|j |}d}d}d}t j} ttrbjj}|j |}|jj}|j j|} ttrbt|j} t!| | j#j$z dz } |j'j$| f|||} ntt(r/|j+j-j.|||} ntt0r/|j+j3j.|||} nett4r|Stt6r|Stt8r|sJ|j;|||} ntt<r|sJ|j?|||} ntt@r|sJ|jC|||} nttDtFtHtJtLfr|sJ|} nttNr|jQd|||} nnttRr|jQfd|||} nDttTr|sJ|jW|||} nttXr%|sJ|j[j\||| } ntt^t`fr_|sJtt^sJtc|r|sJ|je||||||} n|jgj\||| } nptthtjfr|sJt|tltnjpfsJtthtjfsJt|trr$|ju| sJtw||||} ntj"txr t{d |j-j"|||} ntt|rHt|d jjjd j||| } nJttr%|sJ|jj||| } nttr%|sJ|jj"|||} nttr|sJt|tltnjpfrJdt|tr-js!|jj"|||} nht|tr-js!|jj"|||} n+j"} jrj} |j| |||} nttr|sJ|sJt|sJjsK|j||jt jjj|||} np|j}|J|dz}|j||t j}t|trrJ|j-j|||} nttr|sJ|jQt|||} nttr|sJ|jQd|||} nttr|sJ|jQd|||} nttr|sJ|jQd|||} nSttr|sJ|jQd|||} n'ttr|sJ|jQd|||} nttr|sJ|jQd|||} nttr%|sJ|jj"|||} nttxr.sr) python_lambdarErrc6tjSr)r _get_index)r)rEs rrz.s(H%%')rrlzUExpecting clean index here. Likely Dynamo forgot to mark a dict as guard_on_key_ordertensor_property__manager)rrErrzUse DictGetItemSourcez.__kwdefaults__c(|jdSr__tensor_flatten__rs rrz.@s(<(<(>q(Arc"|jSr)__obj_flatten__rs rrz.Hs(9(9(;rc>|jjSr)_typequalified_namers rrz.Ps (@(@(Brc"|jSr)get_basers rrz.Xs  rc"|jSr)itemrs rrz.`s rc,tj|Sr)rrrs rrz.hs(A(A!(Drrz4ConstDictKeySource can only work on DictGuardManagerct|Sr)rrs rrz.s (8(;rc|jSrrrs rrz.s  rzmissing guard manager builder z - )nrCrrrDrCrPrrrrXrget_guard_manager_from_sourcerrkr r.rr local_nameframelocals_managerrfrrQrrhglobal_weakref_managerrgrrry type_managerrwtype_dict_managerrxtype_mro_managerrprmr{rzrcrulambda_managerrtri grad_managerrdgeneric_getattr_managerrprUr|rrrtr_r`rrrrrrr\ RuntimeErrorr5getattrproplowerrr.indexed_managerrjlist_getitem_managerrerindex_is_slicer)tuple_getitem_manager unpack_slicegetitem_managerr^callableis_kwfunc_defaults_managerridx_keyrfunc_kwdefaults_managerrorzrsrarqrTrWrbrvtuple_iterator_getitem_managerAssertionErrorrrnset_getitem_managerr}weakref_call_managerrVcall_function_no_args_managerr]rlrZ code_managerrYclosure_manager)rrEroot_guard_managerrrgrr r r base_guard_manager_enumframelocals_names_reversedframelocals_idxoutr kwdefaults kw_sourcerRs ` rrz*GuardBuilder.get_guard_manager_from_source$s !//44 kkm " 0K0K!K..{; ; "  HH[1M!88O !!"2"@"@ fm ,%{{//1 !%*:!; !%!C!CFKK!P &*&A&A /' # &+ &*P * &./,2263D3DEF  %88&&8"+#5 9C FL )//1FF&&"+#5 GC F/ 0//1HH".."+#5 IC F- .& % FN +% % FJ '% %%$11"+#52C FN +% %%$66"+#57C FM *% %%$55"+#56C  +2"    & %%$C FK ($33-"+#5 4C F8 9$33#+#5 4CFJ '% %%$11"+#52C F- .% %%$<<]]"+#5 =C FZ)GH I% %%fj1 1134FG'''//&&!$&)88&"/'9 9 F.0IJ K% %%049P9P2QR RRf'8:S&TU UU,.>?223JKKK-&&!& fll,>?&8)== &"/'9 > F0 1'""6;;#3#3#9#9#;" .6v?T?T(>> &"/'9 ? (("//1E(88&"/'9 9 FN +% %%# ##./ //<<(>>+"4"A"A'7'E'E?"/&"/'9 " 0>> '333,/@@ .EE$",'7'E'EF &h0@AAA33&"/'9 4 F- .% %%$33("+#5 4C F2 3% %%$33A"+#5 4C F5 6% %%$33;"+#5 4C F; <% %%$33B"+#5 4C FO ,% %%$334"+#5 4C F0 1% %%$330"+#5 4C F- .% %%$33D"+#5 4C F6 7% %%$CCll"+#5 DC  2 302BC$J%44ll"+#5 5C F; <% %%$88ll"+#5 9C F- .% %%$99"+#5:C F4 5% %%$BB"+#5CC F1 2% %%$33;"+#5 4C F2 3% %%$331"+#5 4C FJ '% %%$11"+#52C FM *% %%$44"+#55C !0FKKM?K 69##FKKM2 rc8|j|jSr)rrrr:s rrNzGuardBuilder.get_guard_managers11%2J2JKKrc| t}dj|j}t||\}}i}d|jdi} t j d|t|| ||d|j} |r'|jjj| |y|jjj| |y)Nr@r&zPython shape guard function: %s___make_guard_fn) rjoinrsbuild_guard_functionr2 guards_logdebugexecvaluesrCradd_epilogue_lambda_guardadd_lambda_guard) rrrr is_epiloguemake_guard_fn_args _guard_bodypycoderglobals_for_guard_fnguard_fns r$add_python_lambda_leaf_guard_to_rootz1GuardBuilder.add_python_lambda_leaf_guard_to_roots  ,.L"YY|'8'8':;2:?QR V  #TZZ_5;VD V)3/*3)*L,?,?,AB     # # = =,     # # 4 4X?Q RrcH| t}t||j|Sr)revalr2)rrrs rrCzGuardBuilder.gets#  ,.LD$**l33rc8t|tr|}n |j}t|}||jvrat j jj|}|r6|dk(rtjd||jj||S)Nrzinvalid var name: %s) rrrstrip_function_callr:rrris_valid_var_namelogwarningrc)rr:rris_valids rarg_refzGuardBuilder.arg_refsz eS !D::D"4( t}} $xx''99$?Hq=KK 6> $$T* rc|dk(rt|j}nt|j|}t|||j|j }|j |y)Nr)rr)rZrrUr;rrcreate)rr:rvr attr_source new_guards r_guard_on_attributez GuardBuilder._guard_on_attributes[  "$U%=%=>K$U%=%=yIK AQAQ  rc `|j}t|tr |j}t|tryt|t sJd|j |j}|j }|j}|j|}t|j||}d}|r d|d|d}n d|d|d}|j||g|j||j|} |r|j|j } |j|} |j|| } t| r&|j|| | | ||j | y| j!||j | | y| j#|t%||y)Nzinvalid source hasattr(r@rAz not hasattr()provided_guarded_objectrl)rrrmrrZrUrrprrUrC_set_guard_export_inforrPrrrtadd_no_hasattr_guardr) rr:rE base_sourcerrmrefvalr base_managerrr rs rHASATTRzGuardBuilder.HASATTR s)) fn -[[F fj ) &*-M /MM-kk !}}ll4 dhhtnd+ cU"THA.D!#b2D ## D6488D> $ 99+F !HHV[[]3M!%$ !%!>QZZ '%)E !Q% |1 56"4<<#6"7r&C ##ED62 u%:: *47 rc0|j|}|j|j}t|j|j}d|d|}|j ||g|j |j |t||y)Nz___dict_version() == )rrCrrrrNadd_dict_version_guardr)rr:rrversionrs r DICT_VERSIONzGuardBuilder.DICT_VERSIONpsll5!hhuzz"txx 34!#eG95 ##ED62 u%<< 'e4 rc|j|}|rdnd}|d|d|d}|j||g|j|j| |t ||y)Nnot rSz___dict_contains(r@rA)rrrNrr)rr:rinvertdict_ref maybe_notrs r DICT_CONTAINSzGuardBuilder.DICT_CONTAINS~sn<<&$F" -cWBxjB ##ED62 u%==J3D%@ rc|j|}|}| }d|d|d}|j||g|j|j||t ||y)Nzset.__contains__(r@rA)rrrNadd_set_contains_guardr)rr:rr set_refrcontainsrs r SET_CONTAINSzGuardBuilder.SET_CONTAINSsj,,u%:"7)2dXQ7 ##ED62 u%<< d24? rcb|j|}|j|j}t|tsJ|d|g}|j |||r+|j |jt||y|j |jt||y)Nr) rrCrrrrrNadd_true_match_guardradd_false_match_guardrr:rrrs r BOOL_MATCHzGuardBuilder.BOOL_MATCHsll5!hhuzz"c4   %tC7#$ ##E40   " "5 ) > >&tU3   " "5 ) ? ?&tU3 rc|j|}|j|j}|J|dg}|j|||j |j t ||y)Nz is None)rrCrrrNadd_none_match_guardrrs r NONE_MATCHzGuardBuilder.NONE_MATCHsnll5!hhuzz"{{%x ! ##E40 u%:: "4 / rc&|j||Sr)id_match_unchecked)rr:rs rID_MATCHzGuardBuilder.ID_MATCHs&&un==rct|jtr=|jt |jj t jS|j|}|j|j}|j||j}d|d|d}|j||gd|j|j|t|||t|jtr_t|t j"j$r:|jj&}|j)|}|||j*|<yyyy)Nz___check_obj_id(r@rAr)provided_func_name)rrryrr;rr"rrCrr/rrNrWrrkrrr rr1r) rr:rrrrYrrweak_ids rrzGuardBuilder.id_match_uncheckeds6 e.. ;??e..33\5L5LM ll5!hhuzz"S%**-!#b2 ##ED6j#Q u%88 *4G e.. <#uxx/"55@@ ..s3&7>D((4'0 =rc|j|}|j|j}t|tj sJ|d}|j ||g|j|jt||yNz is not None) rrCrrrrrrNadd_not_none_guardr)rr:rrrrs rNOT_NONE_MATCHzGuardBuilder.NOT_NONE_MATCHswll5!hhuzz"#u||,,,l# ##ED62 u%88 "4 / rc|j|}|j|j}t|tj j sJ|d|d}|j|j|t||y)Nz.raw_repr() == z .raw_repr()) rrCrrrrrrNadd_dispatch_key_set_guardr)rr:rrrs rDISPATCH_KEY_SET_MATCHz#GuardBuilder.DISPATCH_KEY_SET_MATCHstll5!hhuzz"#uxx66777uOC7+>  u%@@ ' E: rcF|j|dtjy)Nr)rr" EQUALS_MATCHrs r NAME_MATCHzGuardBuilder.NAME_MATCHs    L4M4MNrcJ|jjJ|jjjdg}|j||tj j dfd }|jjj|t||y)Nz,torch.autograd.forward_ad._current_level == c"jk(Sr)_current_level)r[ dual_level forward_ads rfnz#GuardBuilder.DUAL_LEVEL..fns,, : :rro) r>r@r/rrautogradr0rCrrr)rr:rr1r/r0s @@r DUAL_LEVELzGuardBuilder.DUAL_LEVELs$$11===**77BB >zlKL ##E40^^..  ; 00 &tU3 rc|jjJ|jjj}|Dcgc]}|jc}ddg}|j ||t j jjdfd }|jjj|t||ycc}w)Nz5torch._functorch.pyfunctorch.compare_functorch_state(rAcSrrq)r[ compare_fnstatess rr1z.GuardBuilder.FUNCTORCH_STACK_MATCH..fn sf% %rro) r>r@functorch_layers get_staterr _functorch pyfunctorchcompare_functorch_staterCrrr)rr:ciscirr1r6r7s @@rFUNCTORCH_STACK_MATCHz"GuardBuilder.FUNCTORCH_STACK_MATCHs$$11===##00AA+./R",,./GxqQR ##E40%%11II  & 00 &tU3 0sCctjjjjtjjjj  dfd dg}|j ||dfd }|jjj|t||y)NcR|sy|\}}ttt|Sr)r)maprB)hooks pack_hook unpack_hookare_inline_hookss r hooks_ids_fnz?GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKS..hooks_ids_fns+$E*%* "I{R( (rzCtorch._functorch.aot_autograd.utils.top_saved_tensors_hooks ids == c$k(Srrq)r[ get_hooksguard_hooks_idsrGs rr1z5GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKS..fn's"l9;&?? ?r)rCzCtuple[Callable[[torch.Tensor], Any], Callable[[Any], torch.Tensor]]rzOptional[tuple[int, ...]]ro) rr: _aot_autogradrtop_saved_tensors_hooks"saved_tensors_hooks_are_inlineablerrCrrr)rr:rr1rFrIrJrGs @@@@rAUTOGRAD_SAVED_TENSORS_HOOKSz)GuardBuilder.AUTOGRAD_SAVED_TENSORS_HOOKSs$$2288PP    * * 0 0 S S  )V ) & )'y{3RRaQb c  ##E40 @ 00 &tU3 rc|j|jt|j|jjdt drt dfd }ndfd }dt |dtj}|j|j|t||y)NrO__metadata_guard__cJj|jdSNrO)rPr)r[original_metadatars rmetadata_checkerzEGuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH..metadata_checker4s)//%q';';'=a'@rc0|jdk(SrRr)r[rSs rrTzEGuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH..metadata_checker;s++-a04EEEr___check_metadata__cro) rCrrrrUrrBr8current_compile_idrNrr)rr:rTrrSrs @@rTENSOR_SUBCLASS_METADATA_MATCHz+GuardBuilder.TENSOR_SUBCLASS_METADATA_MATCH.s$$TXXejj%9%L%L%Nq%QR 5. / %e ,  F+2.>+?*@>CdCdCfBgh  u%66 4[%H rc |j|}|j|j}trtjtj tj tjtjtjtjtjtjtjtjf }nd}tt f}t#t$t&t"t(t*t,t.t0j2h||z}t0j4j7rddlm}ddlm} m } m!} m"} || | | || fz}ddl#m$} || fz}ddl%m&cm'}tQ||s.|jRt'|sJdt'|tQ|tTrtWjX|rq|j[|g}|j]d|d|j_|||ja|jcted tg||ytQ|thrtjX|rq|j[|g}|j]d |d|j_|||ja|jcted tg||y|d |g}tQ||r tk|}tg||}|r|Dcgc] }|d |d }}|ja|jm|||j_||ycc}w)Nrqr) DeviceMesh) _StridedShardPartial ReplicateShard) _IntWrapperzUnexpected type z __math_isnan(rArz__numpy_isnan(rrr)7rrCrruint8int16int32int64uint8uint16uint32uint64float16float32float64rrr)rr+rslicerangerrSize distributed is_availabletorch.distributed.device_meshr[(torch.distributed.tensor.placement_typesr\r]r^r_torch.export.dynamic_shapesr`torch.utils._pytreerrJris_constant_classrrrrrcrrNrrrcomplexrr)rr:rrrnp_typesok_mutable_typesok_typesr[r\r]r^r_r`pytreerrr=s rr*zGuardBuilder.EQUALS_MATCHCsll5!hhuzz"        /HH #; !   "        ) ) + @    #H <{n,,,c8$(@(@(@c(K tCyk * K #u $**S/ OOE "D KK-uA. /  ' 't 4  " "5 ) : :!#N3&tU3   #w BHHSM OOE "D KK.Q/ 0  ' 't 4  " "5 ) : :!#O4&tU3  %tC7#$ #' (3-C3D%@ ?Q"7;4& 02" " u%<used_builtin_varsrrrrrs r BUILTIN_MATCHzGuardBuilder.BUILTIN_MATCHsg   %224EF%%77;;,,22**51 1}}U##rc>|j|}|j|j}t|ts|j |g}t |dk(r|jd|n |jd|dt ||j||t|tr5|j|jt |t||y|j|jt |t||y)Nrr zlen(r) rrCrrrrrrcrrNadd_dict_length_check_guardradd_length_check_guardrr:rrrs rSEQUENCE_LENGTHzGuardBuilder.SEQUENCE_LENGTHsll5!$%& OOE " u:? KK$se % KK$se5U 5 6 ##E40 eT "  " "5 ) E EE 24?   " "5 ) @ @E 24? rc|j|}|j|j}t|}g}|j d|dt ||j ||t|}|j|d|jd}|j|jt ||t||y)Nz___tuple_iterator_len(rrrA) rrCrr+rcrrr/rNadd_tuple_iterator_length_guardr)rr:rrrFrrs rTUPLE_ITERATOR_LENzGuardBuilder.TUPLE_ITERATOR_LEN sll5!$ K ,SE7I%7P6QRS ##E40 KQ% |1 56 u%EE u %v/EdE/R rc |j|}|j|j}t|}g}t |}|j d|d||j ||t|}|j|d|jd}|\}} } |j|j|| | |t||y)Nz___normalize_range_iter(rrrA) rrCrr+rrcrr/rNadd_range_iterator_match_guardr) rr:rrrFrnormalized_range_iterrstartstopsteps rRANGE_ITERATOR_MATCHz!GuardBuilder.RANGE_ITERATOR_MATCH sll5!$ K 4U ; .se59N8OPQ ##E40 KQ% |1 561tT u%DD 4v'=dE'J rcB|jrdt|x}r%|jjj |t |x}r%|jj j ||j|}|j|j}t|js t|ry||f}||jvry|jj ||f|jj ||f|d|g}|j||tjr2|d}t||d} |j j#|| fyt%|j'||j)|t||y)N is r)rGr-r>additional_used_local_varsrr,additional_used_global_varsrrr1rrErrP#use_lamba_guard_for_object_aliasingrrFrcr!rNr) rr:source_brref_aref_brrrfres rDUPLICATE_INPUTzGuardBuilder.DUPLICATE_INPUT& sz   ,X66t6%%@@DDTJ-h77t7%%AAEEdK U# X]]_- #  $ $ %h / en $55 5  ++//? ++//?'eW%& ##E40  5 5QI 6y% H K   , , 3 3Y@Q4R S )&&u-228<&tU3 rc|j|dg}|j|||j|jt ||yr#)rrrNr$rrr:rs r WEAKREF_ALIVEzGuardBuilder.WEAKREF_ALIVEN sN<<&'|45 ##E40 u%88 "4 / rc "|j|}|j|j}g}|jd|dt |j |j |||j|j||y)z7Guard on the key order of types.MappingProxyType objectzlist(z .keys()) == N) rrCrrcrrsrrNadd_mapping_keys_guardrs rMAPPING_KEYS_CHECKzGuardBuilder.MAPPING_KEYS_CHECKV swll5!$ eC5 T%**,-?,@AB ##E40 u%<GLOBALr>r@current_devicerrNadd_default_device_guardrrs rDEFAULT_DEVICEzGuardBuilder.DEFAULT_DEVICE s||{11111$$11===-d.C.C.P.P._._-b c  ##E40 u%>> "4 / rc  %&'(ddlm}|jdk(sJjj((Jjj Tjj }|j }|j}|j |j}|j}nft(|sJ(j&&Dcgc]}|jc}'d(fd } (jJ(jri} g} g} i} t}(jD]j}|j (j"vr;t$j&j(j+|| (j| | | | |Vt,j/dlt1| | t3| j5|d%nd%d%&'(fd }t6j8r |d \}}}d}n d }|d \}}(j&s(jj=j>rstAjCd }|t|tDsJ|gn"t3|jFjI}tK||||| j_|jLD]}jO||gtQjRx}r%|jTjW|jLg}g}|ssJ|jL|jF}}|sy|jYD]\}}t|tZrd }jC|jit\t_}t|t`r|jc||fnt|tdr|jc||fd }|sddl3}ddl4m5}sJ|jL|jF}}tm||z} to|Dcgc] \}}jqts||"}}}djudto|D} djudto|D}!| rd| d} |!rd|!d}!twjxd| d|!ddju|d}"tzj}d|"|jL|j|"}#|j|#j|jj}$|$sJ t|t|t||$|#|jLy|jLr9j|jL|jLit\t_yycc}w#t:$rd }|d \}}YwxYwcc}}w#t$jjj$rYwxYw)NrrrSczj|Dcgc]}t|tj|c}Scc}wr)tracked_fakes_id_to_sourcer5r4SIZE)t_idrrEr@s r get_sourcesz+GuardBuilder.SHAPE_ENV..get_sources s? #/"I"I$"O)1D1DcJs"8z+Untracked tensor used in export constraintsF) source_pairsderived_equalitiesphantom_symbolsrelaxed_sources warn_onlyc jjDcgc]}|jc}Dcgc]}|jc}jj |Scc}wcc}w)N)input_contextsequalities_inputsr0 ignore_staticlangs) shape_envproduce_guards_verbosefakerEr0export)rryrrrr@rs r_get_code_partsz/GuardBuilder.SHAPE_ENV.._get_code_parts sh#--DD%'(QVV(')*!QXX*#1&7#'3':':#:E  (*s A)A. )pythonverbose_pythoncppT)rrcpp_code_parts)python_code_partsrrpython_fallbackshape_env_sources)r) CppCodeCacher@c38K|]\}\}}|d|dyw)z = int_values[rNrqrir)symbols rrz)GuardBuilder.SHAPE_ENV..H s-,&;AvhnQCq1,c38K|]\}\}}|d|dyw)z = float_values[rNrqrs rrz)GuardBuilder.SHAPE_ENV..L s..&;Avh.qc3.rzint64_t ;zdouble a #include #include #include #include #if defined(_MSC_VER) # define EXTERN_DLL_EXPORT extern "C" __declspec(dllexport) #else # define EXTERN_DLL_EXPORT extern "C" #endif EXTERN_DLL_EXPORT int8_t guard(int64_t *int_values, double *float_values) { z z return (z) && (z%); } zC++ shape guard function: %s %s)rrrrr list[Source])rztuple[str, ...]rzlist[_ShapeGuardsHelper])Jtorch._dynamo.output_graphrrr>r@shape_code_partsrrrrr tracked_fakessymbolic_contextrexport_constraintsrrrrrdynamic_shapes_process_equalitiesrrrGrrrP enable_cpp_symbolic_shape_guards OverflowErrorfreezerGlocalsrCrEsource_to_symbolrsShapeCodePartsexprsrr8try_getshape_env_guardsrrr[rIrrrcrctypestorch._inductor.codecacherrrVrr.rtextwrapdedentrrloadcastr:c_void_prr#r _inductorrRInvalidCxxCompilerr))rr:rrrrrrryrnamesrrrr constraintrmaybe_cpp_code_partsmaybe_shape_env_sourcesrcompile_contextint_source_to_symbolfloat_source_to_symbolrrrErrrrrguard_managersint_symbols_strfloat_symbols_strfunc_strclibcguardrrrr@s)` @@@@r SHAPE_ENVzGuardBuilder.SHAPE_ENV s/:zzR,,99 '''  1 1 =#44EE  0 B B !1!D!D ..:!1!@!@.>>O lK8 88++B:<=Qa00=N  ))5 55..46<> #68/2u"."A"A SJ!,*Q*QQ 33GG&'(22!(.++  $QR S%7!-'9$()?)?)A$B$3# %!%)!  66 ((KLJ%'9>',O#'8G095!#5  &&&&--/   $*8<<0@#A '/:$&;4  (/.??DDFG $ 6D"3#53 /"9 6D ! ! 2&++ 7D  ' 'v 6 7-446 6? 6  , , 3 34F4L4L M!!#! !>$$//)J "2"8"8": /fn5&*O$(HH %L %L8I8K%L%-%M"-5,33VV4DE#M59.55vv6FG+/ /"  >! !>$$//)J $$8;Q$QR < &//?%@"!666}VQ7OP"" #')),*34H*I,#%)II.*34J*K.%! #(00A&CO$*12C1DA(F%#?? ##$$%&#==456(  5&,, $((2TZZAGG v -",-./&,,   " "  5 5!''"((D D0A0CD 6  #k>|%&*Otj@fr$|jCd|d| dtE| h|jC|d| d | ny|jG|} tjHr9t=|tj&j(setK|jLsPt |jLtNs6|jPjC||jRjC| |j4j6} | jT|jL} tW| d }tW| d }tYt[|||||||}| j]|||||||t |tj&j(s/|j^j`jc|j|jdJtg|d |jL \}}|sti|drU|jj}d|d|d|d}|jC||jG|jm|tY||nBd|d}|jC||jG|jodtY||tq|dkDr|js||yy)N param_numel param_bytes param_countrO)rrrz ndimension()r+zstr(rrsizestrideT) is_tensor tensor_source_dynamo_dynamic_indicesz((z"._dynamo_dynamic_indices.issubset(z)) if hasattr(z', '_dynamo_dynamic_indices') else True)rz%, '_dynamo_dynamic_indices') == Falser):rP_unsafe_skip_fsdp_module_guardsis_fsdp_modulerrrrNrCrr+rr_dispatch_keysrrrrrlog_compilation_metricsr Parameterr7 incrementnumelnbytesrr>r@rrrrrrcrrN,skip_no_tensor_aliasing_guards_on_parametersr3rror<r=input_source_to_sizes_stridesrrradd_tensor_match_guardrCrrrErrUradd_dynamic_indices_guardrrr)rr:rrrmetrics_context tensor_namertermsterm real_valuerCr@metadatarrrstatic_reasondynamic_indicesrfs r TENSOR_MATCHzGuardBuilder.TENSOR_MATCH sX  1 1e6J6J6L  "% ( MM% %/".EDHHUZZ4HE%[F!HH33E:M%!2!2!=!=><<+"\\F&&2$)$7$7MeU\\2 22--*UEHHDVDV2W"5"7))-G))-F))-;,,u-K,!D((55A AA$$1188&"MD!%+*;d*B!CJj5<<*EF d;-qeC OCV$WX {m1TF$zl$KL M!% 6 6u = GGuehh&8&89I!44%U%=%=?PQ1188E::AA-P#44AA 'EE,,2(62BC3HX4FG%;.#%  &"44&!"%););<&&99==ejjI<<<+ ++<U5M5MOFG5";<&+&C&CO"$[M1STcSddrs~r@g!hIKK ***51KK')? 5)Q#;-/TUKK ***51FF1.y%@4y1}++E48rc8t}|J|j}~|J|xs|jj}~||jj vs Jd||"|j }|sdn|j|} n|} | tjt| nd} d} t| jdddk7} | rDt| tjttj fstj| } |j#|| || y)NzH_produce_guard_code must be called from inside GuardedCode. Called from __weakrefoffset__r)rf_backr.co_namerr5rrCweakrefrr+rrenumEnumr) ProxyTypesset_export_info) rr:rrr  cur_framecaller func_namerguarded_objectguarded_object_typeobj_refsupports_weakrefs rrz#GuardBuilder._set_guard_export_infoC s-!N $$$!! !!!&?&--*?*? DNN333 VW`Va b 3 # *::D)-T488D>N4N2@1KGKK^, -QU  N,,.A1 E J  J TYYw/A/AB% kk.1G       r)FN)r.types.CodeTyper/zCallable[[object, str], int]r0zCallable[[Source], str]r1z1Callable[[object], Optional[weakref.ref[object]]]rJdict[str, object]rr=rCrr>CheckFunctionManagerrGrr3rrr)rdict[Any, Any]r:r;rr)rr?r:r;rr)rrr Optional[Any])rErUr rr rrrr rrgrrrrr)rEr?rr)rEr?rzHOptional[Union[KeysView[Any], set[Any], frozenset[Any], dict[Any, Any]]]rr)rrrr)rr)rEr?rr)r:r;rrr ) rrjrrjrrrrrrr)rrrOptional[dict[str, Any]]rr)r:zUnion[str, Guard]rr)r:r;rvrrz(Callable[[GuardBuilderBase, Guard], Any]rr)r:r;rr)r:r;rmr@rr)r:r;rrr rrr)r:r;rrr rrr)r:r;rrnrr)r:r;rr@rr)r:r;rr?rr)NN) r:r;rrjrr@r rnrr):rrrrrTrZr$rdrrrPrrrrNrrCrrrrrrrrrrrrr%r(r+r3r?rNrYr*r~rrrrrrrrrrrrrrrrrr r+rrqrrr"r"s"<@GG-G, G K G ' G(G+G/GG:G GR+49 <$L"YY)Y Y  Y  YY-Y Yv9"" "  ",? Vp L59 SS&S2 S  S  SF4 ;   "3Yl37JJ"/J J2 *      "  >=A??,9? ?>   O " & : *jX %($ ' $4  &&P JC2$      n`v9z26,0 1 1 1 "/ 1 * 1  1 rr"ceZdZdZej ej ejfZe jGddZ GddejZ GddejZd dZddd Zdd Zdd Zy ) PyExprCSEPassrOc"eZdZUded<ded<y)PyExprCSEPass.Configzdict[str, int] expr_countzdict[str, str] expr_to_nameNrrqrrConfigrE s""$$rrHc(eZdZddZdfd ZxZS)PyExprCSEPass.ExprCounterc||_yr)_config)rrPs rrz"PyExprCSEPass.ExprCounter.__init__ s !DLrct|tjr*|jjt |xxdz cc<t ||yrR)rrCALLOWED_NODE_TYPESrLrFrrr)rrrs rrzPyExprCSEPass.ExprCounter.visit s>$ @ @A '' T(:;q@; GM$ r)rPrErr)rast.ASTrrrrrrrrrs@r ExprCounterrJ s "  rrQc8eZdZ dfd Zdfd ZxZS)PyExprCSEPass.ReplacercLt|||_||_g|_yr)rrrL _gen_namepreface)rrPgen_namers rrzPyExprCSEPass.Replacer.__init__ s% G  !DL%DN&(DLrc:t|tjrt|}|jj |tj kDr||jjvrdt|%|}t|}|j}|jj|d|||jj|<n|jj|}tj|tjSt|%|S)Nz = )rrCrNrrLrF USE_THRESHOLDrGrrrUrVrcrNameLoad)rrexprnode_expr_var_namers rrzPyExprCSEPass.Replacer.visit s$ @ @A#D)<<**40=3N3NN4<<#<#<<!& d 3 ,U 3#'>>#3 ++xjE7,CD:B 11$7#'<<#<#. sr)rFrG)_counterrHr defaultdictrLrs rrzPyExprCSEPass.__init__ s. {{"..y9#  rcP||j}|xjdz c_|SrR)rc)rrrs r_new_varzPyExprCSEPass._new_var s'$--)   rc|j|j}|D]'} |jtj|)y#t $r'}t jd|j|d}~wwxYw)Nz#Failed to visit expr at line %s. %s) rQrLrrparse SyntaxErrorr exceptionlineno)rrcountereexs rcountzPyExprCSEPass.count si""4<<0 A  ciil+   DbiiQRS s$A  A9"A44A9c|j|j|j}|jt j |}|j t|fSr)r`rLrfrrrhrVr)rr\replacernew_nodes rrzPyExprCSEPass.replace sF==t}}=>>#))D/2h!777rNrm)_var)rrrr)rrjrrr\rrztuple[list[str], str])rrrrYr AttributeCall SubscriptrN dataclasses dataclassrH NodeVisitorrQNodeTransformerr`rrfrorrqrrrCrC sxM--3==A%%% coo #'3&&#'J  8rrCct|jtxs.tjxr|j t juSr)rrr^rP guard_nn_modules_using_dict_tags create_fnr"r)r:s rmust_add_nn_module_guardsr s@ 5++^<   3 3 :<#9#99 rc(eZdZdfd ZddZxZS)DeletedGuardManagerWrapperc0t|||_yr)rrinvalidation_reason)rreasonrs rrz#DeletedGuardManagerWrapper.__init__ s #) rcd|_yr)rrs rrz6DeletedGuardManagerWrapper.populate_diff_guard_manager s #r)rrrrrm)rrrrrrrs@rrr s *$rrc@eZdZUded<ded<ded<ded<ded <y ) rrFrrzOptional[_CppShapeGuardsHelper]rrrrrNrrqrrrr s ))**33##rrc"eZdZUded<ded<y) GuardsStaterr@Optional[ShapeCodeParts]rNrrqrrrr s((..rrc eZdZy)_MissingN)rrrrqrrrr srrceZdZd fd Zed dZe d dZe ddZeddZeddZ e ddZ e ddZ edd Z dd Z xZS)GuardsStatePicklerct||i|tjj |_tjj j|_yr) rrrrFakeTensorMode fake_mode fake_tensorFakeTensorConvertertensor_converter)rrkwargsrs rrzGuardsStatePickler.__init__ sH $)&)**99; % 1 1 = = Q Q Srcdtjj}|j||Sr)rrr  __setstate__)clsstatemods r_unpickle_modulez#GuardsStatePickler._unpickle_module s%hhoo  rc tjj}tjjj }|j ||||tj jj|}||_ |Sr) rrrrrfrom_meta_and_devicerr from_raw_reprgrad) r meta_tensorrrdispatch_keys_rawrrrrets r_unpickle_tensorz#GuardsStatePickler._unpickle_tensor sv%%446  ,,88LLN33     HH # # 1 12C D   rc i}|D]\}} } | | ||<|j|j} } t|j||| | } || _t j jj|| _ | Sr) shaperr+__tensor_unflatten__rrrrrr)rrrrrctx inner_data inner_tensorsrm unpickle_funcunpickle_func_args outer_size outer_striders r$_unpickle_traceable_wrapper_subclassz7GuardsStatePickler._unpickle_traceable_wrapper_subclass( s 7A E 3D-!3"/1C"DM$  E$/#4#4k6H6H6JL ;44 3 L  !HH33AABST rc,tj|Sr)rr)raliass r_unpickle_python_modulez*GuardsStatePickler._unpickle_python_module? s&&u--rcTtjjj|Sr)rrrr)rraw_reprs r_unpickle_dispatch_key_setz-GuardsStatePickler._unpickle_dispatch_key_setC sxx&&44X>>rchtjjjj |Sr)rrr: CInterpreter deserialize)rjsons r_unpickle_functorch_interpreterz2GuardsStatePickler._unpickle_functorch_interpreterG s%xx""//;;DAArc,tj|Sr)r!MappingProxyType)rds r_unpickle_mapping_proxyz*GuardsStatePickler._unpickle_mapping_proxyM s%%a((rcJttjj|Sr)rropsr)rrs r_unpickle_c_opz!GuardsStatePickler._unpickle_c_opS suyy||T**rc ddl}t|tjrl|jj dk7rRddlm}||rg}|j\}}|D]6}t||}|j|\} } |j|| | f8t |jtj|d|jt |tjj|j!||ffSt |j"tj|d|j$|jt |tjj|j!|j&ffSt|tj(j*rt |j,t |j.k(rt0S|j2j4tj(j*j4k(rt |j6|j5ffSt9j:|r"t |j<|j.ffSt|tjj>r&t |j@|j!ffSt|tjjBjDr&t |jF|jIffSt9jJ|rItM||jNr3tQ|dr'tQ|dsJ|jR|jTffSt|tjVrtYd|d |jZd t|t\j^r&t |j`|jcffSt|tjdjfr=|jhjkd r"t |jl|j.ffS|j2jnd k(r!|j2j.d k(rtpdfSt|t\jrrtpdfSt9jt|rJ|jvjxt8jzzr#|j,|j.k7sJtpdfSt |j,t |j.k7r?tj|j~jdt |d|ddzdzt0S)Nrmeta)is_traceable_wrapper_subclass)r)rr_torch_handler_name_torch_unpicklerzCannot serialize SymInt z (node: rAz_C::r4 PyCapsulerqrrrrr)Asympyrrrrr+torch.utils._python_dispatchrrrreducer_overridercr empty_likerrrrrrrr rrNotImplementedr __getstate__rrismodulerrrr:rr serializeisclassr FunctionrUrrrrrr!rrr6_opsOpOverloadPacket_qualified_op_name startswithrrrr| isfunctionrco_flags CO_NESTEDrrR PackageError) rrrrrattrsrrminnerfunc args_tuples rrz#GuardsStatePickler.reducer_overrideW sK  c5<< (SZZ__-F R,S1  335 s!@D#C.E'+'<'?@ DzFF$$S8JJIHH++C099; I:..  V3CTCTU S '',557 1 UXX__ -Cy%%c););;%%}}))UXX__-I-IIDz22S5E5E5G4III   c ":55 F F UXX44 5:883<<>:KK K UXX00== >:== ?QQ Q OOC 3/233 23 33''#*A*A)CC C U\\ *!9#hsxxjPQRS S U33 4:55 }D D  ,, $$//7:,,s||o= = MM $ $ 2 &&+5R<  U^^ ,R<     $#,,*?*?'BSBS*S##s||3 33R<  9 ! !T#Y%7%7 7--##00S {,se3DETUTU  r)rrrrrr)rrrztorch.nn.Module) r torch.Tensorr torch.devicerr+rrrrrr)rrrrrr+rrrrrz5list[tuple[str, Callable[..., Any], tuple[Any, ...]]]rr)rrrztypes.ModuleType)rrrztorch._C.DispatchKeySet)rbytesrz torch._C._functorch.CInterpreter)rr?rz types.MappingProxyType[Any, Any])rrrr)rrrz6Union[tuple[Callable[..., Any], tuple[Any, ...]], Any])rrrrr%rrrrrrrrrrrs@rrr sdT  !      (!     J ,..??BB )BB )) ))) ++^^ ?^rrc tj}t|} |j||jS#t$r8}t j jjt||d}~wwxYwr) ioBytesIOrdumpAttributeErrorrrrRrrrV)rbufpicklerrms rpickle_guards_stater si **,C %G< U <<> <mm,,SV4!;>BceZdZU d d dZdZded< ddZ ddZ ddZdd Z dd Z dd Z y)r>Nc |r |jnd} i_t|} |_jJ|_|r |j nd_t _t _t _ |_ tdstjdtjj j"r |xsddfd }t%| xsdt&j(} |rj+| | ||d\} dfd }|| Dcgc] }|| c}}t-|t-| k(sJt/d |DsJt1| Dcgc] \}}||s |} }}j+| | |||\} | _j5| |j6j2_t8j;d j2j6j2_d |j<s|j>sj2jA|jBsAtEj2|jBtGjH}tKd |tL!tMj2|jBtOj2jP|jBd t8j;ddtSjTdtWd_,|rAddl-m.}t_j|sJ ja| j_,tjrjudfdjjwd_ycc}wcc}}w#tbjd$r|}tjj jfs| r|jjidtk|tmjnjqdYd}~d}~wwxYw)Nr-z9guard_nn_modules is turned off using justknobs killswitchc,|Dcgc]}dc}Scc}wr rq)gsgs rrz/CheckFunctionManager.__init__.. sR>Pt>P>Ps cPg}t||D]\}}|s|jd|jdvsd|jvrGtj d|j|j j|jd}|jd|S)NF)rrrrz7%s guard on %s is dropped with caching_precompile=True.T)rrc guard_typederived_guard_typesrr orig_guardr)rrkeepr_guard_filter_fns rguard_filter_fnz6CheckFunctionManager.__init__..guard_filter_fn s"#3F#;VD)GD! 5) (VV%)>)>> ULLLL--  5) 4() rrq)rFc Xt}t|j}|dk(rd}|}n j|j}d}t |j du}t ||||j|jrt|jnd||S#|}d}Y`xYw)NrSFTrq)r has_valuerrr is_globalr) objectstrip_local_scoperrCr,rrcreate_fn_name guard_typesr))r:MISSINGrrrrbuilders rmake_guard_filter_entryz>CheckFunctionManager.__init__..make_guard_filter_entry s ((42: %I#E * !( EJJ 7$( 353K3KLTXX ''$335494E4Ee//02'$   * '$) s B!!B)c3@K|]}t|tk(ywr)r+r)rr[s rrz0CheckFunctionManager.__init__..1 s?1tAw$?s%sgzGuard check failed: rOzGuard eval latency = %s us.2fguard_latency_usrrzGuard evaluation failed: r) tracebackdynamo_cpp_guards_strc*jdddS)Nz Guard latency = rz us)rC)latencyrsrrz/CheckFunctionManager.__init__.. s $"4"4!55GPS}TWXr payload_fn)rzlist[GuardFilterEntry]rz list[bool])r:r;rr)"!U.QRBSM "&!2!2  '    " + g}mD.5-D-D*t112-4-D-D* --l6I6I%%++L,D,DE6&& ,,"557 %';G9%EFF,8-&& (@(@',""'')A)A1G   9gc] L  1 12Dc'l S-1  >d//= == $($9$9]D,=,=%! '' #X (   SL^## ==''99\G!!00/Ax8'224::4@1 s+"N*3 N/N/"N55QA2P??Q)rrrrrrztuple[LiteralString, ...]%UNSUPPORTED_SERIALIZATION_GUARD_TYPEScl|D]}|j}|jrt|jnd}|dvr4|jsG|j |j }t |n|tjvr,tjjj|dtd|Ddx}stjjj|d|jttd fd } |j!} |D]`}t#|j$t&r2|j(sJ|j(j*D] } | |  O| |j$b|j,D] } | |  d d} | j.j1D cic]\} }| vs| |j2vr| |}} }| j.j1D cic]\} }| |j4vr| |c}} |<t7j8| | j:j1D cic]\} }| vs| |j<vr| |c}} |tj>jA|Dchc]+}t7j8|dd| |jB-c}tEjFtH| jJd } tM| |j( }tO|Scc}} wcc}} wcc}} wcc}w) Nrq)rrz guard cannot be serialized.c3DK|]}|tjvr|ywr)r>r)rrs rrz8CheckFunctionManager.serialize_guards.. s'0VVVs ct|x}r*t|tsJ|fvrj|yyt |x}r$t|tsJj|yyr)r,rrrr-)rErbuiltins_dict_nameused_global_varsused_local_varss rprune_variablez=CheckFunctionManager.serialize_guards..prune_variable sw-f55t5!$,,, 244$((.5.v666!$,,,##D)7rc8t|tjrxddtfd|jD}|j j Dcic]\}}||}}}tj|jg|i|S|Scc}}w)NcTt|ttjfr|S|Sr)rrNr0rrs r_refzPCheckFunctionManager.serialize_guards..normalize_create_fn.._ref s!!!mW[[%AB s Hrc3.K|] }|ywrrq)rryr(s rrzUCheckFunctionManager.serialize_guards..normalize_create_fn.. s 9Qa 9s)r[rrr)r functoolspartialr)rkeywordsrr)r[new_argskv new_keywordsr(s @rnormalize_create_fnzBCheckFunctionManager.serialize_guards..normalize_create_fn s!Y../ ! 9!&& 9978zz7G7G7IJtq!47 J J ((K(KlKKH KsB) obj_weakrefguarded_class_weakrefr~T)rJr_guardsrr)r@r)rEr?rr)r[Callable[..., None]rr5)(rrr)rrCrrr>rrrrRrnext%name_of_builtins_dict_key_in_fglobalsrdump_guards_staterrrrrrrArrrrrxrrJrr4 GuardsSetr~rztree_maprrrr)rrrr@r:rrrfailedr%output_graph_guards_staterEr1r.r/global_scope_staterr"r#r$s @@@rrz%CheckFunctionManager.serialize_guards sL# E--/J>C>O>O%(9(9":UW <<((!++ejj1C*3/2XXXmm''44!l">? 0  mm''44h:;3 :*OO5% *%1$B$B$D!" 9E%22NC,,,,"33EE+F"6*+u778  9#55 #F 6 " #  2>>DDF 1$$T-M-M(M qD  2>>"eg 2 1D*** qD2 -.%0$7$7 %6AAGGIAq'10O0O+O1 ,MM++"/  ''$(.2"5eoo"F  +1//.)GG+#/% !2#2!22 #<00U 2 s LL%L+ 0L1c  t}||_d d fd }t||j||j|j |j ||||j }d d} tj||  tjxr td} |D]`} | sK| jr;d| jvr-d| jvrtjsd| jvrP| j!|b||fS) Nc|j}|tjur|jSsJ}|J|j |jSr) guard_sourcer>CONSTANTrr)rEr@ r_builder w_builders rr0z5CheckFunctionManager.build_guards..source_ref*s]!..0L{333{{}$ 9! I( (($$V[[]3 3r)r3c&|}|rd|_yyr)r2)weak_brs rcleanup_builderz:CheckFunctionManager.build_guards..cleanup_builderBsArr-rrrC)rEr?rr)rEzweakref.ref[GuardBuilder]rr)rrr"r/r1rJrr3r0rrPrHrDrrrr) rrrr.r@rGrCr0rrFguard_on_nn_modulesr:rCs @rr z!CheckFunctionManager.build_guardss,- +F (  4  KK    $ $  % %   !%!:!:    KK9 $55 / /; # "E'224#%**4$EJJ655 9R LL ! " %%rcB |j}|dgz }tjdggg|jJt |j}|j j jttj|jJ|jj}|j j j|dg|j j j|jdgd|_ d dfd }t}|j D]=} | j"D],} | |vs|| | j$d|j'| .?|j(} d} d} t+| dkDr-t-|j.| dd j1| zd zgt2j4rA|j6r5t9t:t=|j6\}}|j?|||jr|jj@ng}|D]T}tC|tDrr|jF}|jH}|jKd |jK}tM|jO||jO||g||ddtC|tPr|jRDcgc]}|jO|}}|jTDcgc]}|jO|}}d d j1d |jRDdd j1d|jTDd}tW|||g||ddItYd||jZD]'} | j"D]} || | j$d)r$t\j^jadfdtbjdtcjf}| | |jh|dtjtm}|j jod|jpdi}t+dk(sJ||j _9||j _:|j jw|j _<||j _=||j _>d|j _?d|j _@| |j _Aycc}wcc}w)Nz**___kwargs_ignoredzGUARDS:z___check_global_state()z$___check_torch_function_mode_stack()c$t}tjd|jfdtj t jrd}d}pjr,ddjjj}jr,ddjjj}tjd|||s#jj|yy)Nrcr9jr-tjjjndr-jr!tjjdSddS)N)rrr)rrCfrom_tracebackrr)rfr:srrzNCheckFunctionManager.compile_check_fn..add_code_part..sg%!U[[#11%++2E2E2GH!!U%5%5#11%2B2BC " rrSz Stack: z User stack: z Guard: %s%s%s) rrrrcverbose_guards_log isEnabledForloggingDEBUGrrformatr) rfr:log_onlyre maybe_stackmaybe_user_stackrstructured_guard_fnsrs `` r add_code_partz.add_code_parts!6i G    T#4 5 ' '   "..w}}= #% ${{(22775;;;M;M;O3P2Q&R ''-bgge6F6F6M6M6O.P-QR)#((#$ !!),"))*;<rTrOzcheck_no_aliasing(r@rArzcheck_overlapping(overlapping=[c3<K|]}|jywrrrrGs rrz8CheckFunctionManager.compile_check_fn..s/\Q/\z], non_overlapping=[c3<K|]}|jywrrWrXs rrz8CheckFunctionManager.compile_check_fn..s3dAFFH3drYz])zUnknown GuardEnvExpr: dynamo_guardsc8Dcgc] }| c}Scc}wrrq)frTs rrz7CheckFunctionManager.compile_check_fn..sBV4WQQS4W4Wsr)___check_tensors___check_tensors_verbose___check_global_state"___check_torch_function_mode_stackr&rr)rfrr:Optional[Guard]rQrrr)Br:rrr $make_torch_function_mode_stack_guardrCrattach_compile_idrr8rXr@global_state_guardadd_global_state_guard#add_torch_function_mode_stack_guardrrrr:rr<rr r=rrPrrFrBrrraotautograd_guardsrr:input_source_ainput_source_brr!rr@overlapping_sourcesnon_overlapping_sourcesr"rr;rrrrQinitial_global_stateGlobalStateGuardrYrIrrr2rrrkrrrrrr)rr guards_outrlargs"torch_function_mode_stack_check_fn global_staterUseengclrr<check_tensors_fncheck_tensors_verbose_fnaliasing_code_partsaliasing_verbose_code_partsrhr:source_arrfrGoverlapping_guard_managersnon_overlapping_guard_managersrrrrTrs @@@rr z%CheckFunctionManager.compile_check_fn]sB   '((# CE--999-Q  * *. * 11 113 4   ,,,((;;  66 45  CC  * * 3 4 *.&FK) =) =#2) =>B) = ) =Vu<< #C  #t#"$ 48HHTN  # #$+#C#C #' ' (1 , -99(% 2J(KKcQR   6 633?Bc7>>?@ < !<  8 8#%@  594E4ED   0 02 ( EE%1 // //'}}/tHMMO3DE -99(C99(CK it4E>2#66.99!<.*. #::299!<2.2 &&*ii/\%B[B[/\&\%]^**.))3deFcFc3d*d)eegk 2.2K it4"%;E7#CDDA EH)) 5C  5dCIIt4 5 5 NN + +,W ,   - - 5(99;L 0(@%1%7%72T     !   ##% #W]]3%78:!###*6'"' <<>0B-*>'+8(*.&)-&8P5E.2s $T TcTt|drt|jts|jjx}h|jj x}Ot|t sJt|tsJd|d}t|}|j||||_yyyyy)NrCzCache line invalidated because z got deallocated) rUrrCrrrr~r invalidate)robj_strrrrdeleted_guard_managers rr}zCheckFunctionManager.invalidate1s D/ *t113MN $ 2 2 > >>K $ 2 2 > >>Kk:6 66k:6 666wi?OPF$>v$F !  " ";0E F!6D LLO +rc: t||jvr`tj||jt|<tj|t j |j|t|S#t$r Yt|SwxYw)zadd a weakref, return the id)r~) rBrr0rrr*r+r}r)rrr~s rr/zCheckFunctionManager.id_refBs #wdnn,+2++c*:r#w'  **4??GL #w  #w sA7B BBcbt||jvr|jt|Sy)zFLookup the _weakrefs created in id_ref function for ID_MATCH'd objectsN)rBr)rrs rr1z$CheckFunctionManager.lookup_weakrefsQs( c7dnn $>>"S'* *r)NNNNNFF)r.r<r@rrOptional[CacheEntry]r%Optional[Callable[[GuardFail], None]]rz8Optional[Callable[[list[GuardFilterEntry]], list[bool]]]rrr3rArGrrr)rr"r list[Guard]r@rrr) rrrrlr.r<r@rrGrrz(tuple[GuardBuilder, GuardManagerWrapper])rr"rorrrrr)r~rrr)rrr~rrr)rrrzOptional[weakref.ref[object]]) rrrrrrrr r r}r/r1rqrrr>r> sJ -1?C 599=!"O!O!-O!* O! = O!  O!3O!7O!O!O!bH)+Dy1y1#y1" y1  y1v>&">&&5>& >& - >&  >& 2>&@RQRQ RQ= RQ  RQh7" rr>c, ddlm}t j|d fd }|}|D]]}||\}}|j ||j d|d|j5|j dddd_|}|j d|j5|j||j d ddd|}|j d |d|j5|j||j d ddd|j|jfS#t$rd d}YCwxYw#1swYHxYw#1swYxYw#1swYVxYw) NrrAc&j|Sr)r)r\csepasss rrz%build_guard_function..replace_s??4( (rc g|fSrrq)r\s rrz%build_guard_function..replacees t8Orzif not (z):z return Falsez def guard(L):z return Truezdef ___make_guard_fn(z return guardrt) torch._inductor.utilsrBrCroRecursionErrorrPrrJsplicerV) r closure_argsrBr guard_bodyr\rVr: make_guard_fnrs @rrrXs4oG  j! ) !J1 g&xvR01     1   0 1 1 1  E OOO$ ' Z   &' #$M3L>DE    0U#/0    -"8"8": ::?   1 1 ''00s5E7E1;#E>#F  E.-E.1E; >F Fchtjjjj dS)Nrrr _internal log_stateis_artifact_enabledrqrris_recompiles_enabledrs# >> # # - - A A, OOrchtjjjj dS)Nrrrqrris_recompiles_verbose_enabledrs$ >> # # - - A ABV WWrcP|Dcgc] }t|c}dfd }|Scc}w)Nct}t|tk7ryt|D]\}}|t|k7syyr)rrrr+) cur_stacktymoder!s rcheck_torch_function_mode_stackzMmake_torch_function_mode_stack_guard..check_torch_function_mode_stacksL13 y>SZ 'E9- HBT$Z rrr)r+) initial_stackr[rr!s @rrcrcs+, ,T!W ,E  +* -s#Scopec||jJt|j}tjt}|j D]1}||d<t t|||}||j|3|Dcgc]}t||dkDs||}}dj|}d|gScc}w)N__compile_source__rOr@zDuplicate tensors found: ) rrrrdrrrBrrcrr) rCr2r ids_to_sourcer tensor_idrduplicate_tensorsrs r1recompilation_reason_for_no_tensor_aliasing_guardrs  % % 11 1 223L++D1M&AA7 -: )*tM<?@ i '' 67 ,9$'C c@R.Ds5#Av<(8??64+HH#s*,rrz-triggered by the following guard failure(s): zRecompiling function z in :z artifactc dddS)Nrecompile_reasonsr)rencodingrqrqrrrz9get_and_maybe_log_recompilation_reasons..[s' rcSrrq)rsrrz9get_and_maybe_log_recompilation_reasons.._s7r) metadata_fnr)rrCrrrrcr6r.rrrPerror_on_recompilerrVrrJr/ co_filenameco_firstlinenorecompiles_verbose_logrrecompiles_logrRRecompileErrorrrr) rframerrrdo_recompiles_logfailuresguard_failure_detailsmessagers @r'get_and_maybe_log_recompilation_reasonsr$sG  !&  % %    NN  " "     NN6 "!&&   ! <d6F6F5GqI\I\H]]_4f=> @  ,.&,,W5$$W-  $ $$$W- - NN## # $ Nrc|}t}|8|j|jj|j}|8|}|:||j_|jj |j}|:|Sr)rKrrrCrr6rr)rfirst_cache_entryacc_diff_guard_sourcess rrres$ /9l  !%%  % % @ @ B "&&  !$K  !7M !!4!!==?!&&   ! "!rctd|jd|jd|jtddj |j zdztddj |j t|d|i|j}|j D]} t||j|y#td|Y0xYw) NzERROR RUNNING GUARDS  rzlambda r@z and r%zMalformed guard: ) printr/rrrrrrrr)rCrrrlastrJr:s rguard_error_hookrs  ~Qt/?/?.@$BUBUAVW )dii 2 23 3c 9: #z}7789 -?M$>$>?K))0 0  22K @0 0 &ug. /s -CCc#bKt}|D]}||vs||j|ywr)rr)seqrsr[s runiquers3 5D  D=G HHQKs//c,|r||k7rt|}t|}t|s t|r7tj|j d|j d||k(r%t j tj|Sy)Nz is aliasing zC. This is not supported. Please do a clone for corresponding input.)r) r0r/rRUnsafeScriptObjectErrorrr*r+r"r) obj_source dupe_sourceser_source_is_localsource_is_locals rmake_dupe_guardrs{j02;?.z: /  1* =--??$%];3C3C3E2FG>?  / 1$$\%A%AKX X r)skipcvddlm}tjtj xs#t jtj }|jjjj}|D]8}t|tsJt|jr+||||dz:y)z Add dynamo guards to the current tracing context. Args: guards: guard(s) to add skip: number of stack frames to ignore for debug stack trace r)TracingContextrO)collect_debug_stackrN) torch._guardsrrrMrNrOrLrCguards_contextr[rrr;r2r)rrrrrr:s r install_guardrs-$11 8  ( ( 7     - - ; ; ? ?CK%''' $U%=%= >  E':J Kr)ryrrr)rzset[str])rr=)rrOrr)rfrr:rbrrr)rzUnion[str, list[str]]r:rbrrnrrj)rrrz Optional[int])rz list[Any]rlist[Optional[int]])rrrrrrrrrr+rrrr)rr?rrrr)rErrrrr)rrrr )rrrr) rEz3Union[DictGetItemSource, DictSubclassGetItemSource]r rr rrrrrrr)r:r;rr)rr<rrj)rrrr)rrjrrrztuple[str, str]r)rz'list[torch.overrides.TorchFunctionMode]rzCallable[[], bool])rCrr2rrrj)rGrrr)rCrrr=rzOptional[CompileId]rrr) rCrrr<rr=rr9rrrr)rrrrrrrrj)rrrrl) rCrrr<rr=rrrrrr)rz Sequence[T]rzGenerator[T, None, None])rr?rr?rz Optional[functools.partial[Any]])rr;rrrr(rp __future__rrr4rrxr1r*rrrrNrpickler_rrr!rar0 contextlibrr6rrtypingrrr r r r r ImportErrortyping_extensionsrrrrtorch.overridestorch.utils._devicetorch._C._dynamo.eval_framertorch._C._dynamo.guardsrrrrrrrrrrrrrrr r!r"r#r$r%r&r'r(r)r*r+torch._dynamo.sourcer,r-r.r/r0r1r2r3r4r5torch._dynamo.utilsr6r7rr8r9r:r;r<r=r>r?r@rrBtorch._loggingrCtorch._utils_internalrD%torch.fx.experimental.symbolic_shapesrErFrGrHrI torch.utilsrJrztorch.utils._ordered_setrKtorch.utils._tracebackrLrMtorch.utils.weakrNrSrPrQrR eval_framerSrErTrUrVrWrXrYrZr[r\r]r^r_r`rarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzr{r|r}r~rrrrrrrrrrrrrrrrrrrrrrrrrrrnumpyruModuleNotFoundErrorcollections.abcrrrrrtorch._Crrrrr getLoggerrrrgetArtifactLoggerrrrrLr'rrrzcacherrrrrrrrrrrrrrrrryrrrrr2rr r"rCrrrrrPicklerrrr>rrrrcrrrrrrrrrrrrrrrqrrrs"#     % JJ0$5! >8   H   1%1*/O*((,+++++++++++X,KOGN =='N CLg! ^^ - -h A 11(LI99 "^^55h@PQ",~,@@FT  . ..2 *1</hh&&::%6%)% " &'K   !    "  *31d# ! !$ !* ?*(** * ) *  *Z G  tyy  88s #s N>R8R8j $!4$ $$$ ///   nnbN N b);XPX +:++( gtCK012&2/422& %B)&B)B)$B) B)T &       <>%> >> >B"%""600 0 0  0  0  0.%&!!%+!%!H/0KqD0//0| Bs$5S$-S6$ S32S36TT