ó
    EñiŠq  ã                   ó¾  • S SK r S SKrS SKrS SKrS SKJrJrJr  \(       a  S SKrS SK	J
r
  O\r
S SKrS SKJs  Jr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S S	KJr  S S
KJr  S/r\R<                  " \5      r \RB                  RE                  \S5      r#S\RH                  S\\%   4S jr&S\RH                  S\S   4S jr'\" SS9 SS\S\
S\%S\(SS4
S jj5       r)g)é    N)ÚAnyÚOptionalÚTYPE_CHECKING)ÚShapeEnv)Úfx)Úis_sparse_any)Úcompatibility)Úlazy_format_graph_code)Úpy_sym_types)ÚSymNode)ÚGraphModuleÚinsert_deferred_runtime_assertsÚgraph_code_verboseÚnodeÚreturnc                 ó€   • SU R                   ;   a  U R                   S   $ SU R                   ;   a  U R                   S   $ g)zl
Get the example value key for a node, since dynamo uses "example_value"
while non-strict export uses "val.
Úexample_valueÚvalN)Úmeta©r   s    Ú[/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/fx/passes/runtime_assert.pyÚ_get_example_valuer   "   s=   € ð
 ˜$Ÿ)™)Ó#Ø�y‰y˜Ñ)Ð)Ø	�$—)‘)Ó	Ø�y‰y˜ÑÐàó    ú
sympy.Exprc                 óp   • [        U 5      n[        U[        5      (       a  UR                  R                  $ g ©N)r   Ú
isinstancer   r   Úexpr)r   r   s     r   Ú_get_sym_valr   /   s*   € Ü
˜TÓ
"€CÜ�#”|×$Ñ$Ø�x‰x�}‰}ÐØr   T)Úis_backward_compatibleÚgmÚ	shape_envÚnameÚexportc                 ó  ^&^'^(^)^*^+^,^-^.^/^0^1^2^3^4^5^6^7^8^9^:^;^<^=^>• SSK m<SSKJn  SSKJm+Jm,Jm'Jm0Jm(J	m)J
m3Jm*Jn  SSKJm7  SSKJnJn  SSKJn  UR(                  R+                  5       m9U R,                  m5[.        R0                  R3                  T55      m=[4        R7                  S[9        S	U 3U S
S95        0 m2[;        5       n	Sn
T5R<                   H(  m8T8R>                  S:w  a  T8n
  OU	RA                  T85        M*     S[.        RB                  S[D        4U,U<4S jjnSm>T5R<                   H)  m8ST8RF                  ;   a  Sm>  OST8RF                  ;   d  M)    O      S0S[H        R.                  RB                  S[J        [L           S[J        [N        [L        [P        4      S[J        [N        [L        [P        4      SS4
U>4S jjjn[;        5       m/[;        5       m1U(       a  UOUm&U&U.4S jm.SSS[D        4U<4S jjm-U,U-U.U/U1U2U3U5U94	S jn[S        T5R<                  5      n[U        USS 5       GH  u  m6m8T5RW                  T8U	;  a  UT6S-      OU
5         U" U [X        RZ                  " UT8RF                  R]                  S5      T8RF                  R]                  S5      T8RF                  R]                  S5      S95         T8U	;   aÕ  [_        T85      =nbÇ  U+U2U<U=4S jnU" UU84S j5        [a        U=n[H        Rb                  5      (       a�  [U        URe                  5       5       H  u  m6nU" UU5U6U84S  j5        M     [g        U5      (       dN  [U        URi                  5       5       H  u  m6nU" UU5U6U84S! j5        M     U" URk                  5       U5U84S" j5        T8U
:X  a  U" T9Rm                  S/ 5      5        T8Rn                  [H        Rp                  [H        Rr                  Rt                  Rv                  Rx                  4;   aÒ  T8Rz                  (       a  T8Rz                  S   OT8R|                  R]                  S#5      nUS
:X  d  [        U5      =nT2;   ao  UT/;   ai  UnU R,                  R�                  T85        [a        U[.        RB                  5      (       a,  UR‚                  (       d  U R,                  R�                  U5        OT/RA                  U5        T8R>                  S:w  Ga1  [        T85      =m;Gb"  U2U;4S$ jnU" UT8RF                  R]                  S%0 5      5      m:U2U:4S& jnT;T2;   d  U" T85      (       a…  U" 5       (       dy  U" 5       (       dm  U" T85      (       a  T." T2T;5      T2T;'   T2T;   R„                  nT8R‡                  U5        U R,                  R�                  T85        [ˆ        R7                  S'T8UT;5        OYT;T2;  aS  [a        T;T<RŠ                  T<RŒ                  RŽ                  R�                  45      (       d  [.        R’                  " T8T=S(9T2T;'   T8Rn                  [H        Rr                  Rt                  R”                  Rx                  [H        Rr                  Rt                  R–                  Rx                  4;   a  U R,                  R�                  T85        / nU" UT8RF                  R]                  S%5      5      =n(       ax  UR™                  5        Hd  u  nnUR›                  U5        U'U(U)U*U0U4U54S) jm4UT2;  d  M+  [.        R’                  " T4" T8U5      T=S(9T2U'   [ˆ        R7                  S*UT2U   5        Mf     U GHå  nT9Rm                  U/ 5      nUT1;   a  M  URœ                  U   nURž                  (       a4  UR                   [¢        R¤                  S-
  :X  a  U" UR¦                  T75      nUR©                  5       R«                  U5      (       Gd5  U74S+ jnT2U   R„                  Rn                  T0LGa  U" UR¦                  5      =n bt  T." T2UU :¬  5      R„                  n!T5R­                  [H        Rr                  Rt                  Rv                  Rx                  U!S,UU :¬   S-U! S.345        T/RA                  UU :¬  5        U" UR                   5      =n"bt  T." T2UU":*  5      R„                  n#T5R­                  [H        Rr                  Rt                  Rv                  Rx                  U#S,UU":*   S-U# S.345        T/RA                  UU":*  5        T1RA                  U5        U" U5        GMè     SSS5        SSS5        GM     T2R™                  5        H—  u  n$n%[a        U$T<R®                  5      (       d  M#  U%R„                  R>                  S:w  d  M?  U%R„                  R‚                  (       a  M\  [ˆ        R7                  S/U$5        U R,                  R�                  U%R„                  5        M™     g! , (       d  f       NÇ= f! , (       d  f       GMà  = f)1a¸  
During tracing, we may have discovered that some data-dependent values
had runtime assert on them; e.g., torch.empty(x.item()) induces a runtime
that x.item() >= 0.  These asserts can happen unpredictably during fake
tensor propagation, so we cannot conveniently insert them into the FX graph
when they occur.  Instead, we accumulate them in the ShapeEnv, and in this
pass insert them into the graph as proper tests.

This pass also deduplicates size-related computation, CSE-ing ops that produce
symbolic values and/or are involved in runtime asserts. Additionally, shape calls
(size/stride/storage_offset) are turned into compute on input sizes if possible,
allowing intermediate tensors to be freed earlier. For example, here dynamo will
DCE the cat and repeat calls:

    z = torch.cat([x, x], dim=0)  # 2*s0
    w = z.repeat(y.shape[0])  # 2*s0*s1
    _w = w.shape[0]
    # something with _w, but not w ...

    # turns into ->
    _w0 = 2 * s0
    _w = _w0 * s1

    # where s0, s1 are either SymInt graph inputs, or the result of added size calls

Redundant torch._check or torch.ops.aten._assert_scalar.default calls that assert
the same expression, and redundant constrain_range calls are also deduplicated.
Additionally, because single-symbol bound checks (e.g. u0 >= 0, u0 <= 5) accumulate
information in the ShapeEnv, the ShapeEnv contains min/max bounds for each symbol,
and we delete all previous calls, adding bound checks at the end of this pass.
r   N)Ú_set_node_metadata_hook)	Ú_get_placeholder_exprÚ#_has_uninterpretable_sympy_functionÚCallMethodKeyÚ cast_symbool_to_symint_guardlessÚConvertIntKeyÚDivideByKeyÚfree_symbolsÚInnerTensorKeyÚresolve_unbacked_bindings)Úint_oo)Ú OptimizedPythonReferenceAnalysisÚPythonReferenceAnalysis)ÚValueRangesz%sz$pre insert_deferred_runtime_asserts T)ÚcoloredÚplaceholderr   r   c                 óÔ   >• [        U 5      =nSL=(       aR    [        UTR                  5      (       + =(       a0    T" U5      (       + =(       a    [        S U R                   5       5      $ )z|
If a size/stride/storage offset call on an intermediate tensor,
we can try to compute the value from input shapes instead.
Nc              3   óö   #   • U  Ho  n[        U[        R                  5      =(       aI    [        [        U5      [        R
                  [        R                  45      =(       a    UR                  S :g  v •  Mq     g7f)r5   N)r   r   ÚNoder   ÚtorchÚTensorÚSizeÚop)Ú.0Úargs     r   Ú	<genexpr>Ú\insert_deferred_runtime_asserts.<locals>._is_intermediate_tensor_sym_call.<locals>.<genexpr>“   s^   é € ð ò %�Cô ˜3¤§¡Ó(÷ ,ÜÔ1°#Ó6¼¿¹ÄuÇzÁzÐ8RÓS÷,à—F‘F˜mÑ+ô,ò %ùs   ‚A7A9)r   r   ÚNumberÚanyÚargs)r   r   r(   Úsympys     €€r   Ú _is_intermediate_tensor_sym_callÚIinsert_deferred_runtime_asserts.<locals>._is_intermediate_tensor_sym_call‰   sf   ø€ ô ! Ó&Ð&ˆS¨tÐ3÷ 	Ü˜s E§L¡LÓ1Ô1÷	ñ 8¸Ó<Ô<÷	ô ñ ð  Ÿ9š9ó	ó ð	
r   r   r   Ústack_traceÚnn_module_stackÚcustomc                 óR  >• [         R                  " S U R                  5      n U R                  nU R                  S:X  a^  [        U R                  [        5      (       d!  [        S[        U R                  5       35      e[        US   U R                  5      nUSS  nU" U6 U R                  T'   Ub  XR                  S'   Ub  X R                  S'   Ub  X0R                  S'   g g ! [         a     NA[        R                  R                  R                  R                    a     Ntf = f)	Nc                 ón   • [        U [        R                  R                  5      (       a  [	        U 5      $ U $ r   )r   r9   r   r8   r   )r>   s    r   Ú<lambda>ÚNinsert_deferred_runtime_asserts.<locals>._node_metadata_hook.<locals>.<lambda>«   s'   € Ü+5°c¼5¿8¹8¿=¹=×+IÑ+IÔ" 3Ó'ÐRÈsÐRr   Úcall_methodzExpected str target, got r   é   rG   rH   rI   )ÚpytreeÚtree_maprC   Útargetr<   r   ÚstrÚAssertionErrorÚtypeÚgetattrr   ÚNotImplementedErrorr9   r   ÚexperimentalÚsymbolic_shapesÚGuardOnDataDependentSymNode)r   rG   rH   rI   Ú	fake_argsrR   Úval_keys         €r   Ú_node_metadata_hookÚ<insert_deferred_runtime_asserts.<locals>._node_metadata_hook¤   s  ø€ ô —O’Oñð �I‰Ió	
ˆ	ð	Ø—[‘[ˆFØ�w‰w˜-Ó'Ü! $§+¡+¬s×3Ñ3Ü(Ø3´D¸¿¹Ó4EÐ3FÐGóð ô ! ¨1¡¨t¯{©{Ó;�Ø% a b˜M�	Ù!'¨Ð!3ˆD�I‰I�gÑð Ñ"Ø'2�I‰I�mÑ$ØÑ&Ø+:�I‰IÐ'Ñ(ØÑØ"(�I‰I�hÒð øô #ó 	ñ Ü�x‰x×$Ñ$×4Ñ4×PÑPó 	ñ ð		ús   ¥BC& Ã&
D&Ã21D&Ä%D&c           
      óê   >• SSK JnJnJn  SSKJn  SSKJnJn  X;   a  X   $ [        XX4U45      (       a	  U" T	X5      $ U" T	UR                   Vs/ s H  nT
" X5      PM     snU5      X'   X   $ s  snf )Nr   )ÚIntegerrA   ÚSymbol)ÚBooleanAtom)Ú_run_sympy_handlerÚsympy_interp)rD   r`   rA   ra   Úsympy.logic.boolalgrb   Útorch.utils._sympy.interprc   rd   r   rC   )Úexpr_to_proxyr   r`   rA   ra   rb   rc   rd   r>   ÚAnalysisÚ_sympy_interps            €€r   ri   Ú6insert_deferred_runtime_asserts.<locals>._sympy_interpÑ   s€   ø€ ç1Ñ1Ý3çNð Ó Ø Ñ&Ð&ä�d f°kÐB×CÑCÙ ¨-Ó>Ð>ñ 1ØØ:>¿)º)ÓDº)°3‰]˜=Ö.¹)ÑDØó
ˆÑð
 Ñ"Ð"ùò Es   ÁA0
r   r   c                 óz  >• [        U R                  5      S:w  d&  U R                  TR                  TR                  4;  a  gU R                  u  p[        UTR                  5      =(       a    [        UTR                  5      =(       d3    [        UTR                  5      =(       a    [        UTR                  5      $ )Né   F)ÚlenrC   ÚfuncÚLessThanÚGreaterThanr   ra   rA   )r   ÚlhsÚrhsrD   s      €r   Ú_is_bound_expr_for_symbolÚBinsert_deferred_runtime_asserts.<locals>._is_bound_expr_for_symbolç   sƒ   ø€ ô ˆt�y‰y‹>˜QÓ $§)¡)°E·N±NÀE×DUÑDUÐ3VÓ"VØØ—9‘9‰ˆÜ˜3 §¡Ó-×O´*¸SÀ%Ç,Á,Ó2O÷ 
Ü�s˜EŸL™LÓ)×K¬j¸¸e¿l¹lÓ.Kð	
r   c           
      óH  >	• U  GHš  nUR                   T	;   d}  [        UR                   R                  5      S:X  aC  [        [	        UR                   R                  5      5      T
;   a  T" UR                   5      (       d  T" UR                   5      (       a  M“  [
        R                  SUR                   5        T" UR                   5      nUTR                  5       -
  nU(       a2  [        U[        S9nTR                  U/ 5      R                  U5        GM  T" TUR                   5      R                  nTR                  [        R                  R                   R"                  R$                  USUR                    SU S345        T	R'                  UR                   5        GM�     g )NrO   zinserting runtime assert %s)Úkeyú(Runtime assertion failed for expression ú
 on node 'Ú')r   rm   r-   ÚnextÚiterÚlogÚdebugÚkeysÚminrS   Ú
setdefaultÚappendr   Úcall_functionr9   ÚopsÚatenÚ_assert_scalarÚdefaultÚadd)ÚrasÚraÚfvsÚmissingÚi1Úresr(   rs   ri   Úadded_assertsÚconstrained_unbacked_symbolsrg   r-   ÚgraphÚras_by_symbols         €€€€€€€€€r   Úadd_runtime_assertsÚ<insert_deferred_runtime_asserts.<locals>.add_runtime_assertsò   sI  ø€ ÜˆBð —‘˜=Ó(ô ˜Ÿ™×,Ñ,Ó-°Ó2ÜœT "§'¡'×"6Ñ"6Ó7Ó8Ð<XÓXÙ1°"·'±'×:Ñ:ñ 7°r·w±w×?Ñ?áä�I‰IÐ3°R·W±WÔ=á˜rŸw™wÓ'ˆCØ˜M×.Ñ.Ó0Ñ0ˆGÞÜ˜¤cÑ*�ð ×(Ñ(¨¨RÓ0×7Ñ7¸×;ñ $ M°2·7±7Ó;×@Ñ@�à×#Ñ#Ü—I‘I—N‘N×1Ñ1×9Ñ9ð ØBÀ2Ç7Á7À)È:ÐVYÐUZÐZ[Ð\ðô	ð ×!Ñ! "§'¡'×*òO r   éÿÿÿÿrO   )rG   rH   rI   c                 ó^  >• [        U [        R                  5      (       a�  [        U R                  [        5      (       am  [        T" U R                  5      =nTR
                  5      (       a?  UT;  a8  [        R                  " U" 5       TS9TU'   [        R                  SUTU   5        g g g g g )N©Útracerúexpr_to_proxy[%s] = %s)
r   r9   ÚSymIntr   r   ra   r   ÚProxyr|   r}   )ÚsymintÚcbÚsr'   rg   rD   r—   s      €€€€r   Úmatch_symbolÚ5insert_deferred_runtime_asserts.<locals>.match_symbol8  s”   ø€ ä" 6¬5¯<©<×8Ñ8Ü& v§{¡{´G×<Ñ<Ü&Ù!6°v·{±{Ó!CÐC˜AÀUÇ\Á\÷ñ ð  ]Ó2ä+-¯8ª8±B³DÀÑ+H˜ aÑ(äŸ	™	Ð":¸A¸}ÈQÑ?OÕPð	 3ðð =ð 9r   c                  ó   >• T $ r   © r   s   €r   rL   Ú1insert_deferred_runtime_asserts.<locals>.<lambda>E  s   ø€ ±Dr   c                  ó„   >• T R                  [        R                  R                  R                  R
                  TT45      $ r   )r‚   r9   rƒ   r„   Úsym_sizeÚint©r�   Úir   s   €€€r   rL   r¢   K  s-   ø€  E×$7Ñ$7Ü %§	¡	§¡× 7Ñ 7× ;Ñ ;¸dÀA¸Yô%r   c                  ó„   >• T R                  [        R                  R                  R                  R
                  TT45      $ r   )r‚   r9   rƒ   r„   Ú
sym_strider¥   r¦   s   €€€r   rL   r¢   S  s-   ø€ ¨×(;Ñ(;Ü$)§I¡I§N¡N×$=Ñ$=×$AÑ$AÀDÈ!À9ô)"r   c                  ó‚   >• T R                  [        R                  R                  R                  R
                  T45      $ r   )r‚   r9   rƒ   r„   Úsym_storage_offsetr†   )r�   r   s   €€r   rL   r¢   Y  s+   ø€  E×$7Ñ$7Ü %§	¡	§¡× AÑ A× IÑ IÈDÈ7ô%r   Úcondc                  ó<   >• TR                    H  n U T;  d  M    g   g)NTF)r-   )Úsymbolrg   Úsym_exprs    €€r   Úhas_new_untracked_symbolsÚBinsert_deferred_runtime_asserts.<locals>.has_new_untracked_symbols~  s#   ø€ à"*×"7Ô"7˜Ø!¨Õ6Ù#'ñ #8ð !r   Úunbacked_bindingsc                  óD   >• Tc  [        S5      eT H  n U T;  d  M    g   g)Nz"resolved_unbacked_bindings is NoneTF)rT   )rv   rg   Úresolved_unbacked_bindingss    €€r   Úhas_new_unbacked_bindingsÚBinsert_deferred_runtime_asserts.<locals>.has_new_unbacked_bindingsŒ  s/   ø€ Ø1Ñ9Ü,Ð-QÓRÐRÛ9˜Ø mÕ3Ù#'ñ  :ð !r   zCSE node %s -> %s for expr %sr–   c                 ó8  >• US:X  a  U $ [        U5      S:¼  GaA  [        US   T5      (       Ga,  [        US   [        R                  5      (       Ga	  US   R                  S:X  aV  T" TR                  [        R                  R                  R                  R                  XS   R                  45      USS  5      $ US   R                  S:X  aV  T" TR                  [        R                  R                  R                  R                  XS   R                  45      USS  5      $ T" TR                  US   R                  XS   R                  45      USS  5      $ [        US   T5      (       a†  US   R                  S:X  aI  T" TR                  [        R                  R                  R                  R                  U 45      USS  5      $ T" TR                  US   R                  U 45      USS  5      $ [        US   [        R                  5      (       a8  T" TR                  [         R"                  XS   R                  45      USS  5      $ [        US   T5      (       a  T" TR                  TU 45      USS  5      $ [        US   T5      (       a8  T" TR                  [         R$                  XS   R&                  45      USS  5      $ [        US   T5      (       a.  T" TR                  [(        XS   R*                  45      USS  5      $ [-        SU 35      e)	Nr¡   rl   r   rO   ÚsizeÚstrideÚstorage_offsetzunrecognized keypath )rm   r   rP   ÚSequenceKeyr#   r‚   r9   rƒ   r„   r¤   r¥   Úidxr©   rN   r«   r†   ÚoperatorÚgetitemÚfloordivÚdivisorrV   Ú
inner_namerT   )	r   Úkeypathr)   r+   r,   r.   r*   Úgor�   s	     €€€€€€€r   rÃ   Ú+insert_deferred_runtime_asserts.<locals>.goÎ  s  ø€ Ø" b›=Ø#'˜Kä ›L¨AÔ-Ü *¨7°1©:°}× EÒ EÜ *¨7°1©:´v×7IÑ7I× JÒ Jà& q™zŸ™°&Ó8Ù')Ø$)×$7Ñ$7Ü(-¯	©	¯©×(?Ñ(?×(CÑ(CØ)-°q©z¯~©~Ð(>ó%&ð %,¨A¨B Kó("ð !"ð  ' q™zŸ™°(Ó:Ù')Ø$)×$7Ñ$7Ü(-¯	©	¯©×(AÑ(A×(EÑ(EØ)-°q©z¯~©~Ð(>ó%&ð %,¨A¨B Kó("ð !"ñ $&Ø %× 1Ñ 1Ø$+¨A¡J§O¡O°dÀA¹J¿N¹NÐ5Kó!"ð !(¨¨ ó	$ð ô (¨°©
°M×BÑBØ& q™zŸ™Ð2BÓBÙ')Ø$)×$7Ñ$7Ü(-¯	©	¯©×(IÑ(I×(QÑ(QØ)-¨ó%&ð %,¨A¨B Kó("ð !"ñ $&Ø %× 1Ñ 1°'¸!±*·/±/ÀDÀ7Ó KÈWÐUVÐUWÈ[ó$ð ô (¨°©
´F×4FÑ4F×GÑGÙ#%Ø %× 3Ñ 3Ü$,×$4Ñ$4°tÀQ¹Z¿^¹^Ð6Ló!"ð !(¨¨ ó	$ð ô (¨°©
°M×BÑBÙ#%Ø %× 3Ñ 3Ø$DÀtÀgó!"ð !(¨¨ ó	$ð ô (¨°©
°K×@Ñ@á#%Ø %× 3Ñ 3Ü$,×$5Ñ$5¸Àa¹j×>PÑ>PÐ7Qó!"ð !(¨¨ ó	$ð ô (¨°©
°N×CÑCÙ#%Ø %× 3Ñ 3Ü$+¨d¸A±J×4IÑ4IÐ-Jó!"ð !(¨¨ ó	$ð ô #1Ð3HÈÈ	Ð1RÓ"SÐSr   r˜   c                 óP   >• U TT* 4;   a  g  [        U 5      $ ! [         a     g f = fr   )r¥   Ú	TypeError)r�   r0   s    €r   ÚconvertÚ0insert_deferred_runtime_asserts.<locals>.convertT  s5   ø€ Ø ¨&¨Ð 1Ó1Ø#'ð(Ü#& q£6˜MøÜ(ó (Ù#'ð(ús   �
 ˜
%¤%rw   rx   ry   z%deleting unused reified symbol for %s)NNN)XrD   Ú(torch._export.passes._node_metadata_hookr&   Ú%torch.fx.experimental.symbolic_shapesr'   r(   r)   r*   r+   r,   r-   r.   r/   Útorch.utils._sympy.numbersr0   Útorch.utils._sympy.referencer1   r2   Útorch.utils._sympy.value_rangesr3   Údeferred_runtime_assertsÚcopyr�   r   ÚproxyÚGraphAppendingTracerÚgraph_code_logr}   r
   ÚsetÚnodesr<   r‡   r8   Úboolr   r9   r   rS   Údictr   ÚlistÚ	enumerateÚinserting_beforeÚ	functoolsÚpartialÚgetr   r   r:   r¸   r   r¹   rº   ÚpoprR   Ú_checkrƒ   r„   r…   r†   rC   Úkwargsr   Ú
erase_nodeÚusersr   Úreplace_all_uses_withr|   rA   ÚlogicÚboolalgrb   rš   Úsym_constrain_rangeÚsym_constrain_range_for_sizeÚitemsr�   Úvar_to_rangeÚis_intÚupperÚsysÚmaxsizeÚlowerÚ _default_unspecified_value_rangeÚissubsetr‚   ra   )?r!   r"   r#   r$   r&   r/   r1   r2   r3   ÚplaceholdersÚfirst_non_placeholderrE   r]   r’   rÔ   r   rž   Útr�   r¬   Úassert_exprr>   r°   rµ   Ú	hash_nodeÚdefsr²   rÂ   Úi0rˆ   ÚvrrÇ   Úmin_valÚgeÚmax_valÚler   rÐ   rh   r)   r+   r,   r.   r'   r(   rs   ri   rŽ   r*   r�   rg   r-   rÃ   r�   r§   r0   r   r‘   r´   r¯   rD   r—   r\   s?                                         @@@@@@@@@@@@@@@@@@@@@@@@@r   r   r   6   s•  ÿÿÿø€ óP åP÷
÷ 
õ 
õ 2÷õ <ð ×6Ñ6×;Ñ;Ó=€MØ�H‰H€EÜ�X‰X×*Ñ*¨5Ó1€FÜ×ÑØÜØ2°4°&Ð9¸2Àtñ	
ôð 13€MÜ“5€LØ ÐØ—”ˆØ�7‰7�mÓ#Ø$(Ð!Ùà×Ñ˜TÖ"ñ ð
¬r¯w©wð 
¼4÷ 
ð 
ð& €GØ—”ˆØ˜dŸi™iÓ'Ø%ˆGÙØ�d—i‘iÕÙñ ð &*Ø48Ø+/ñ	%)Ü�h‰h�m‰mð%)äœc‘]ð%)ô "¤$¤s¬C x¡.Ñ1ð%)ô œœc¤3˜h™Ñ(ð	%)ð
 
÷%)ð %)ôP &)£U€MÜ69³eÐ æ*0Ñ&Ð6V€Hö#ð,	
¨ð 	
¼÷ 	
÷(+õ (+ôT �—‘Ó€EÜ˜U 3 B˜Z×(‰ˆˆ4ð
 ×"Ñ"Ø $¨LÓ 8��a˜!‘e’Ð>Sõñ $ØÜ×!Ò!Ø'Ø $§	¡	§¡¨mÓ <Ø$(§I¡I§M¡MÐ2CÓ$DØŸ9™9Ÿ=™=¨Ó2ñ	õð ˜Ó$Ü&8¸Ó&>Ð>�]ÑK÷Qð Qñ ˜]¬LÔ9ä =Ð0˜a´%·,±,×?Ñ?Ü )¨!¯&©&«(Ö 3™˜˜1Ù$Øööñ !4ô )¨×+Ñ+Ü$-¨a¯h©h«jÖ$9™D˜A˜qÙ(Ø !ö!"öñ %:ñ %Ø×,Ñ,Ó.õôð Ð,Ó,Ù# M×$5Ñ$5°d¸BÓ$?Ô@ð �{‰{Ü—‘Ü—	‘	—‘×-Ñ-×5Ñ5ðó ð (,§y§y�t—y‘y ’|°d·k±k·o±oÀfÓ6M�à˜D“LÜ'3°DÓ'9Ð9˜¸mÓKØ# }Ó4à�CØ—H‘H×'Ñ'¨Ô-Ü! #¤r§w¡w×/Ñ/¸¿	¿	ØŸ™×+Ñ+¨CÔ0øà!×%Ñ% kÔ2ð
 —‘˜=Ô(Ü!-¨dÓ!3Ð3�XÒ@ö!ñ .GØ˜tŸy™yŸ}™}Ð-@À"ÓEó.Ð*ö!ð  Ó-á8¸×>Ñ>á 9× ;Ñ ;á3×5Ñ5Ù7Ø÷ñ ñ 3@Ø)Ø$ó3˜ hÑ/ð
 !.¨hÑ 7× <Ñ <�IØ×.Ñ.¨yÔ9Ø—H‘H×'Ñ'¨Ô-Ü—I‘IØ7ØØ!Ø õ	ð  ]Ó2¼:ØØ—\‘\ 5§;¡;×#6Ñ#6×#BÑ#BÐC÷<ñ <ô /1¯hªh°tÀFÑ.K�M (Ñ+ð �{‰{Ü—	‘	—‘×2Ñ2×:Ñ:Ü—	‘	—‘×;Ñ;×CÑCðó ð —‘×#Ñ# DÔ)àˆDñ %>Ø˜4Ÿ9™9Ÿ=™=Ð)<Ó=ó%ð Ð õ ð #4×"9Ñ"9Ö";‘J�A�wØ—K‘K ”N÷JTó JTðX  Õ-Ü+-¯8ª8±B°t¸WÓ4EÈfÑ+U˜ aÑ(ÜŸ	™	Ð":¸A¸}ÈQÑ?OÖPñg #<ôj �Ø#×'Ñ'¨¨BÓ/�ðP Ð5Ó5Ùà×+Ñ+¨BÑ/�Ø—9—9 §¡¬S¯[©[¸1©_Ó!<ñ % R§X¡X¨vÓ6�BØ ×AÑAÓC×LÑLÈR×PÒPõ
(ð & bÑ)×.Ñ.×5Ñ5Ø?ó@ñ (/¨r¯x©xÓ'8Ð8˜GÑEÙ!.¨}¸bÀG¹mÓ!L×!QÑ!Q˜BØ!×/Ñ/Ü %§	¡	§¡× =Ñ =× EÑ Eà$&Ø&NÈrÐU\É}ÈoÐ]gÐhjÐgkÐklÐ$mð!"ôð *×-Ñ-¨b°G©mÔ<Ù'.¨r¯x©xÓ'8Ð8˜GÑEÙ!.¨}¸bÀG¹mÓ!L×!QÑ!Q˜BØ!×/Ñ/Ü %§	¡	§¡× =Ñ =× EÑ Eà$&Ø&NÈrÐU\É}ÈoÐ]gÐhjÐgkÐklÐ$mð!"ôð *×-Ñ-¨b°G©mÔ<à,×0Ñ0°Ô4Ù# C×(ñw ÷s÷ò ñ )ð~
 %×*Ñ*Ö,‰ˆˆeä�t˜UŸ\™\×*Ó*Ø—
‘
—‘ Õ.Ø—J‘J×$×$Ñ$ä�I‰IÐ=¸tÔDØ�H‰H×Ñ §
¡
Ö+ò -÷o
õ ú÷÷ ús-   ÉA*g6Ê6Qg%Û;H)g%ä$g6ç%
g3ç/g6ç6
h	)F)*rÚ   Úloggingr½   rë   Útypingr   r   r   rD   rÊ   r   r9   Útorch.utils._pytreeÚutilsÚ_pytreerP   r   Útorch._subclasses.meta_utilsr   Útorch.fx._compatibilityr	   Útorch.fx._utilsr
   Ú"torch.fx.experimental.proxy_tensorr   Útorch.fx.experimental.sym_noder   Útorch.fx.graph_moduler   Ú__all__Ú	getLoggerÚ__name__r|   Ú_loggingÚgetArtifactLoggerrÒ   r8   rS   r   r   rÕ   r   r¡   r   r   Ú<module>r     s   ðã Û Û Û 
ß /Ñ /ö Ûæ>à€Hã ß $Ð $Ý Ý 6Ý 1Ý 2Ý ;Ý 2Ý -ð -Ð
-€à×Ò˜Ó!€Ø—‘×1Ñ1°(Ð<PÓQ€ð
˜RŸW™Wð 
¨°#©ô 
ð�r—w‘wð  8¨LÑ#9ô ñ  dÑ+ð
 ñ	L	,ØðL	,àðL	,ð ðL	,ð ð	L	,ð
 
ôL	,ó ,ñL	,r   