Ë
    f^(h,q  ã                   ó²  — d dl Z d dlZd dlZd dlZd dlmZmZmZ erd dlZd dl	m
Z
 neZ
d dlZd dlmc mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ dgZ ej<                  e«      Z ejB                  jE                  ed«      Z#dejH                  dee%   fd„Z&dejH                  ded   fd„Z' ed¬«      	 ddede
de%de(ddf
d„«       Z)y)é    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ÚnodeÚreturnc                 óx   — d| j                   v r| j                   d   S d| j                   v r| j                   d   S y)zx
    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    ú\/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/fx/passes/runtime_assert.pyÚ_get_example_valuer   "   s=   € ð
 ˜$Ÿ)™)Ñ#Ø�y‰y˜Ñ)Ð)Ø	�$—)‘)Ñ	Ø�y‰y˜ÑÐàó    ú
sympy.Exprc                 óf   — t        | «      }t        |t        «      r|j                  j                  S y ©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‡:‡;‡<— ddl Š:ddlmŠ+ ddlmŠ(mŠ$mŠ.mŠ%mŠ&m	Š1m
Š'm} ddlmŠ5 ddlm}m} ddlm} |j&                  j)                  «       Š7‰ j*                  Š3t,        j.                  j1                  ‰3«      Š;t2        j5                  dt7        d	|› �‰ d
¬«      «       i Š0t9        «       }d}	‰3j:                  D ]&  Š6‰6j<                  dk7  r‰6}	 n|j?                  ‰6«       Œ( dt,        j@                  dtB        fˆ(ˆ:fd„}
dŠ<‰3j:                  D ]$  Š6d‰6jD                  v rdŠ< nd‰6jD                  v sŒ$ n 	 	 d.dtF        j,                  j@                  dtH        tJ           dtH        tL        tJ        tN        f      ddfˆ<fd„Š*t9        «       Š-t9        «       Š/|r|n|Š#ˆ#ˆ,fd„Š,dddtB        fˆ:fd„Š)ˆ(ˆ)ˆ*ˆ+ˆ,ˆ-ˆ/ˆ0ˆ1ˆ ˆ3ˆ7fd„}tQ        ‰3j:                  «      }tS        |dd «      D �]~  \  Š4Š6‰3jU                  ‰6|vr|‰4dz      n|	«      5  ‰6|v rÃtW        ‰6«      x}�¶ˆ*ˆ+ˆ0ˆ ˆ:ˆ;fd„} ||ˆ6fd„«       tY        |x}tF        jZ                  «      r„tS        |j]                  «       «      D ]  \  Š4} ||ˆ3ˆ4ˆ6fd„«       Œ t_        |«      sJtS        |ja                  «       «      D ]  \  Š4} ||ˆ3ˆ4ˆ6fd„«       Œ  ||jc                  «       ˆ3ˆ6fd „«       ‰6|	k(  r |‰7je                  dg «      «       ‰6jf                  tF        jh                  tF        jj                  jl                  jn                  jp                  fv rµ‰6jr                  d   d
k(  s&tu        ‰6jr                  d   «      x}‰0v s
|�t ‰)|«      rl‰6jr                  d   }‰ j*                  jw                  ‰6«       tY        |t,        j@                  «      r9|jx                  s-‰ j*                  jw                  |«       n‰-j?                  |«       ‰6j<                  dk7  �rqtu        ‰6«      xŠ9��cˆ0ˆ9fd!„} ||‰6jD                  j{                  d"i «      «      Š8‰8€J ‚ˆ0ˆ8fd#„}‰9‰0v s |
‰6«      rÐ |«       sÉ |«       sÂ |
‰6«      rf ‰+‰ t}        j~                  ‰*‰6jD                  j{                  d«      ‰6jD                  j{                  d«      ¬$«      «      5   ‰,‰0‰9«      ‰0‰9<   ddd«       ‰0‰9   j€                  }‰6jƒ                  |«       ‰ j*                  jw                  ‰6«       t„        j5                  d%‰6|‰9«       nT‰9‰0vrPtY        ‰9‰:j†                  ‰:jˆ                  jŠ                  jŒ                  f«      st-        jŽ                  ‰6‰;¬&«      ‰0‰9<   ‰6jf                  tF        jj                  jl                  j�                  jp                  tF        jj                  jl                  j’                  jp                  fv r‰ j*                  jw                  ‰6«       g } ||‰6jD                  j{                  d"«      «      x}r†|j•                  «       D ]s  \  }}|j—                  |«       ˆ$ˆ%ˆ&ˆ'ˆ.ˆ2ˆ3fd'„Š2|‰0vsŒ' ‰+‰ ‰*«      5  t-        jŽ                   ‰2‰6|«      ‰;¬&«      ‰0|<   ddd«       t„        j5                  d(|‰0|   «       Œu |D �]¸  }‰7je                  |g «      }|‰/v rŒ||j˜                  v r}|rM‰3j›                  tF        jj                  jl                  j’                  jp                  ‰0|   j€                  f«       n.‰3j›                  tF        jœ                  ‰0|   j€                  f«       |jž                  |   }|j                   r3|j¢                  t¤        j¦                  dz
  k(  r ||j¨                  ‰5«      }|j«                  «       j­                  |«      �sŒˆ5fd)„}‰0|   j€                  jf                  ‰.k7  �rj ‰+‰ t}        j~                  ‰*‰6jD                  j{                  d«      ‰6jD                  j{                  d«      ¬$«      «      5   ||j¨                  «      x}�t ‰,‰0||k\  «      j€                  }‰3j›                  tF        jj                  jl                  jn                  jp                  |d*||k\  › d+|› d,�f«       ‰-j?                  ||k\  «        ||j¢                  «      x}�t ‰,‰0||k  «      j€                  } ‰3j›                  tF        jj                  jl                  jn                  jp                  | d*||k  › d+| › d,�f«       ‰-j?                  ||k  «       ddd«       ‰/j?                  |«        ||«       �Œ» 	 ddd«       �Œ� ‰0j•                  «       D ]ˆ  \  }!}"tY        |!‰:j®                  «      sŒ|"j€                  j<                  dk7  sŒ7|"j€                  jx                  rŒNt„        j5                  d-|!«       ‰ j*                  jw                  |"j€                  «       ŒŠ y# 1 sw Y   �ŒGxY w# 1 sw Y   �Œ™xY w# 1 sw Y   ŒçxY w# 1 sw Y   �ŒNxY w)/a  
    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.  This 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)Ú#_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                 ó¦   •— t        | «      x}duxr@ t        |‰j                  «       xr'  ‰|«       xr t        d„ | j                  D «       «      S )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   óÜ   K  — | ]d  }t        |t        j                  «      xrD t        t        |«      t        j
                  t        j                  f«      xr |j                  d k7  –— Œf y­w)r4   N)r   r   ÚNoder   ÚtorchÚTensorÚSizeÚop)Ú.0Úargs     r   ú	<genexpr>z\insert_deferred_runtime_asserts.<locals>._is_intermediate_tensor_sym_call.<locals>.<genexpr>’   s]   è ø€ ò ð ô ˜3¤§¡Ó(ò ,ÜÔ1°#Ó6¼¿¹ÄuÇzÁzÐ8RÓSò,à—F‘F˜mÑ+ó,ñùs   ‚A*A,)r   r   ÚNumberÚanyÚargs)r   r   r'   Úsympys     €€r   Ú _is_intermediate_tensor_sym_callzIinsert_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_stackc                 ó|  •— t        j                  d„ | j                  «      }	 | j                  }| j                  dk(  r:t        | j                  t        «      sJ ‚t        |d   | j                  «      }|dd  } ||Ž | j                  ‰<   |�|| j                  d<   |�|| j                  d<   y y # t        $ r Y Œ/w xY w)Nc                 ód   — t        | t        j                  j                  «      rt	        | «      S | S r   )r   r8   r   r7   r   )r=   s    r   ú<lambda>zNinsert_deferred_runtime_asserts.<locals>._node_metadata_hook.<locals>.<lambda>©   s)   € Ü+5°c¼5¿8¹8¿=¹=Ô+IÔ" 3Ó'ð ØORð r   Úcall_methodr   é   rD   rE   )
ÚpytreeÚtree_maprA   Útargetr;   r   ÚstrÚgetattrr   ÚNotImplementedError)r   rD   rE   Ú	fake_argsrM   Úval_keys        €r   Ú_node_metadata_hookz<insert_deferred_runtime_asserts.<locals>._node_metadata_hook£   sÇ   ø€ ô
 —O‘Oñð �I‰Ió	
ˆ	ð	Ø—[‘[ˆFØ�w‰w˜-Ò'Ü! $§+¡+¬sÔ3Ð3Ð3Ü  ¨1¡¨t¯{©{Ó;�Ø% a b˜M�	Ù!'¨Ð!3ˆD�I‰I�gÑð Ð"Ø'2ˆD�I‰I�mÑ$ØÐ&Ø+:ˆD�I‰IÐ'Ò(ð 'øô #ò 	ñ ð		ús   ¤A'B/ Â/	B;Â:B;c           
      óæ   •— ddl m}m}m} ddlm} ddlm}m} || v r| |   S t        |||||f«      r
 |‰	| |«      S  |‰	|j                  D �cg c]  } ‰
| |«      ‘Œ c}|«      | |<   | |   S c c}w )Nr   )ÚIntegerr?   ÚSymbol)ÚBooleanAtom)Ú_run_sympy_handlerÚsympy_interp)rB   rU   r?   rV   Úsympy.logic.boolalgrW   Útorch.utils._sympy.interprX   rY   r   rA   )Úexpr_to_proxyr   rU   r?   rV   rW   rX   rY   r=   ÚAnalysisÚ_sympy_interps            €€r   r^   z6insert_deferred_runtime_asserts.<locals>._sympy_interpÅ   s‰   ø€ ç1Ñ1Ý3çNð �=Ñ Ø  Ñ&Ð&ä�d˜W f¨f°kÐBÔCÙ ¨-¸Ó>Ð>ñ 1ØØ:>¿)¹)ÖD°3‰]˜=¨#Õ.ÒDØó
ˆ�dÑð
 ˜TÑ"Ð"ùò Es   ÁA.
r   r   c                 óX  •— t        | j                  «      dk7  s$| j                  ‰j                  ‰j                  fvry| j                  \  }}t        |‰j                  «      xr t        |‰j                  «      xs. t        |‰j                  «      xr t        |‰j                  «      S )Né   F)ÚlenrA   ÚfuncÚLessThanÚGreaterThanr   rV   r?   )r   ÚlhsÚrhsrB   s      €r   Ú_is_bound_expr_for_symbolzBinsert_deferred_runtime_asserts.<locals>._is_bound_expr_for_symbolÛ   s…   ø€ ô ˆt�y‰y‹>˜QÒ $§)¡)°E·N±NÀE×DUÑDUÐ3VÑ"VØØ—9‘9‰ˆˆSÜ˜3 §¡Ó-ÒO´*¸SÀ%Ç,Á,Ó2Oò 
Ü�s˜EŸL™LÓ)ÒK¬j¸¸e¿l¹lÓ.Kð	
r   c                 óX  •— | D �]—  }|j                   ‰v spt        |j                   j                  «      dk(  r<t        t	        |j                   j                  «      «      ‰v r ‰|j                   «      s ‰|j                   «      rŒƒt
        j                  d|j                   «        ‰|j                   «      }|‰j                  «       z
  }|r3t        |t        ¬«      }‰j                  |g «      j                  |«       Œý ‰	‰‰«      5   ‰
‰|j                   «      j                  }‰j                  t        j                  j                   j"                  j$                  |d|j                   › d|› d�f«       d d d «       ‰j'                  |j                   «       �Œš y # 1 sw Y   Œ(xY w)NrJ   zinserting runtime assert %s)Úkeyú(Runtime assertion failed for expression ú
 on node 'ú')r   ra   r,   ÚnextÚiterÚlogÚdebugÚkeysÚminrN   Ú
setdefaultÚappendr   Úcall_functionr8   ÚopsÚatenÚ_assert_scalarÚdefaultÚadd)ÚrasÚraÚfvsÚmissingÚi1Úresr'   rg   rS   r&   r^   Úadded_assertsÚconstrained_unbacked_symbolsr\   r,   r!   ÚgraphÚras_by_symbols         €€€€€€€€€€€€r   Úadd_runtime_assertsz<insert_deferred_runtime_asserts.<locals>.add_runtime_assertsæ   sh  ø€ Øó '	+ˆ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¸Õ;ñ -¨RÐ1DÓEñ 
Ù'¨°r·w±wÓ?×DÑD�CØ×'Ñ'ÜŸ	™	Ÿ™×5Ñ5×=Ñ=ð  ØFÀrÇwÁwÀiÈzÐZ]ÐY^Ð^_Ð`ðô	÷
ð ×!Ñ! "§'¡'Ö*ñO'	+÷8
ð 
ús   Ä
A/F Æ F)	éÿÿÿÿrJ   c                 ó„  •— t        | t        j                  «      r™t        | j                  t        «      r~t        | j                  j
                  x}‰j                  «      rQ|‰vrL ‰‰‰«      5  t        j                   |«       ‰¬«      ‰|<   d d d «       t        j                  d|‰|   «       y y y y y # 1 sw Y   Œ(xY w)N©Útracerúexpr_to_proxy[%s] = %s)r   r8   ÚSymIntr   r   r   rV   r   ÚProxyro   rp   )	ÚsymintÚcbÚsrS   r&   r\   r!   rB   r‰   s	      €€€€€€r   Úmatch_symbolz5insert_deferred_runtime_asserts.<locals>.match_symbol!  sª   ø€ ä" 6¬5¯<©<Ô8Ü& v§{¡{´GÔ<Ü&¨F¯K©K×,<Ñ,<Ð'< q¸e¿l¹lÔKØ ]Ñ2á4°RÐ9LÓMñ MÜ/1¯x©x¹»ÀVÔ/L˜M¨!Ñ,÷MäŸ	™	Ð":¸A¸}ÈQÑ?OÕPð	 3ð Lð =ð 9÷
Mð Mús   Á/ B6Â6B?c                  ó   •— ‰ S r   © r   s   €r   rH   z1insert_deferred_runtime_asserts.<locals>.<lambda>,  s   ø€ °D€ r   c                  ó„   •— ‰ j                  t        j                  j                  j                  j
                  ‰‰f«      S r   )ru   r8   rv   rw   Úsym_sizeÚint©rƒ   Úir   s   €€€r   rH   z1insert_deferred_runtime_asserts.<locals>.<lambda>1  s/   ø€  E×$7Ñ$7Ü %§	¡	§¡× 7Ñ 7× ;Ñ ;¸dÀA¸Yó%€ r   c                  ó„   •— ‰ j                  t        j                  j                  j                  j
                  ‰‰f«      S r   )ru   r8   rv   rw   Ú
sym_strider•   r–   s   €€€r   rH   z1insert_deferred_runtime_asserts.<locals>.<lambda>9  s/   ø€ ¨×(;Ñ(;Ü$)§I¡I§N¡N×$=Ñ$=×$AÑ$AÀDÈ!À9ó)"€ r   c                  ó‚   •— ‰ j                  t        j                  j                  j                  j
                  ‰f«      S r   )ru   r8   rv   rw   Úsym_storage_offsetry   )rƒ   r   s   €€r   rH   z1insert_deferred_runtime_asserts.<locals>.<lambda>?  s-   ø€  E×$7Ñ$7Ü %§	¡	§¡× AÑ A× IÑ IÈDÈ7ó%€ r   c                  ó4   •— ‰j                   D ]  } | ‰vsŒ y y©NTF)r,   )Úsymbolr\   Úsym_exprs    €€r   Úhas_new_untracked_symbolszBinsert_deferred_runtime_asserts.<locals>.has_new_untracked_symbolsf  s(   ø€ Ø"*×"7Ñ"7ò (˜Ø!¨Ò6Ù#'ð(ð !r   Úunbacked_bindingsc                  ó<   •— ‰j                  «       D ]  } | ‰vsŒ y yr�   )rq   )ri   r\   Úresolved_unbacked_bindingss    €€r   Úhas_new_unbacked_bindingszBinsert_deferred_runtime_asserts.<locals>.has_new_unbacked_bindingsu  s+   ø€ Ø9×>Ñ>Ó@ò (˜Ø mÒ3Ù#'ð(ð !r   )rD   rE   zCSE node %s -> %s for expr %srˆ   c                 ó>  •— |dk(  r| S t        |«      dk\  �r8t        |d   ‰«      �r(t        |d   t        j                  «      �r
|d   j                  dk(  rW ‰‰j                  t        j                  j                  j                  j                  | |d   j                  f«      |dd  «      S |d   j                  dk(  rW ‰‰j                  t        j                  j                  j                  j                  | |d   j                  f«      |dd  «      S  ‰‰j                  |d   j                  | |d   j                  f«      |dd  «      S t        |d   ‰«      r* ‰‰j                  |d   j                  | f«      |dd  «      S t        |d   t        j                  «      r9 ‰‰j                  t        j                  | |d   j                  f«      |dd  «      S t        |d   ‰«      r ‰‰j                  ‰| f«      |dd  «      S t        |d   ‰«      r9 ‰‰j                  t        j                   | |d   j"                  f«      |dd  «      S t        |d   ‰«      r/ ‰‰j                  t$        | |d   j&                  f«      |dd  «      S t)        d|› �«      ‚)Nr’   r`   r   rJ   ÚsizeÚstridezunrecognized keypath )ra   r   rK   ÚSequenceKeyr#   ru   r8   rv   rw   r”   r•   Úidxr™   rI   ÚoperatorÚgetitemÚfloordivÚdivisorrO   Ú
inner_nameÚAssertionError)	r   Úkeypathr(   r*   r+   r-   r)   Úgorƒ   s	     €€€€€€€r   r±   z+insert_deferred_runtime_asserts.<locals>.goµ  s¼  ø€ Ø" bš=Ø#'˜Kä ›L¨AÓ-Ü *¨7°1©:°}Õ EÜ *¨7°1©:´v×7IÑ7IÕ Jà& q™zŸ™°&Ò8Ù')Ø$)×$7Ñ$7Ü(-¯	©	¯©×(?Ñ(?×(CÑ(CØ)-¨w°q©z¯~©~Ð(>ó%&ð %,¨A¨B Kó("ð !"ð  ' q™zŸ™°(Ò:Ù')Ø$)×$7Ñ$7Ü(-¯	©	¯©×(AÑ(A×(EÑ(EØ)-¨w°q©z¯~©~Ð(>ó%&ð %,¨A¨B Kó("ð !"ñ $&Ø %× 1Ñ 1Ø$+¨A¡J§O¡O°d¸GÀA¹J¿N¹NÐ5Kó!"ð !(¨¨ ó	$ð ô (¨°©
°MÔBÙ#%Ø %× 1Ñ 1°'¸!±*·/±/ÀDÀ7Ó KÈWÐUVÐUWÈ[ó$ð ô (¨°©
´F×4FÑ4FÔGÙ#%Ø %× 3Ñ 3Ü$,×$4Ñ$4°t¸WÀQ¹Z¿^¹^Ð6Ló!"ð !(¨¨ ó	$ð ô (¨°©
°MÔBÙ#%Ø %× 3Ñ 3Ø$DÀtÀgó!"ð !(¨¨ ó	$ð ô (¨°©
°KÔ@á#%Ø %× 3Ñ 3Ü$,×$5Ñ$5¸¸gÀa¹j×>PÑ>PÐ7Qó!"ð !(¨¨ ó	$ð ô (¨°©
°NÔCÙ#%Ø %× 3Ñ 3Ü$+¨d°G¸A±J×4IÑ4IÐ-Jó!"ð !(¨¨ ó	$ð ô #1Ð3HÈÈ	Ð1RÓ"SÐSr   rŠ   c                 óJ   •— | ‰‰ fv ry 	 t        | «      S # t        $ r Y y w xY wr   )r•   Ú	TypeError)r�   r/   s    €r   Úconvertz0insert_deferred_runtime_asserts.<locals>.convert?  s5   ø€ Ø ¨&¨Ð 1Ñ1Ø#'ð(Ü#& q£6˜MøÜ(ò (Ù#'ð(ús   ‹
 –	"¡"rj   rk   rl   z%deleting unused reified symbol for %s)NN)XrB   Ú(torch._export.passes._node_metadata_hookr&   Ú%torch.fx.experimental.symbolic_shapesr'   r(   r)   r*   r+   r,   r-   r.   Útorch.utils._sympy.numbersr/   Útorch.utils._sympy.referencer0   r1   Útorch.utils._sympy.value_rangesr2   Údeferred_runtime_assertsÚcopyrƒ   r   ÚproxyÚGraphAppendingTracerÚgraph_code_logrp   r
   ÚsetÚnodesr;   rz   r7   Úboolr   r8   r   rN   Údictr   ÚlistÚ	enumerateÚinserting_beforer   r   r9   r¦   r   r§   Ústorage_offsetÚpoprM   Ú_checkrv   rw   rx   ry   rA   r   Ú
erase_nodeÚusersÚgetÚ	functoolsÚpartialr   Úreplace_all_uses_withro   r?   ÚlogicÚboolalgrW   rŒ   Úsym_constrain_rangeÚsym_constrain_range_for_sizeÚitemsrt   Ú	size_likeru   Ú_check_is_sizeÚvar_to_rangeÚis_intÚupperÚsysÚmaxsizeÚlowerÚ _default_unspecified_value_rangeÚissubsetrV   )=r!   r"   r#   r$   r.   r0   r1   r2   ÚplaceholdersÚfirst_non_placeholderrC   r…   rÀ   r   r�   Útr�   Úassert_exprr=   r    r¤   Ú	hash_nodeÚdefsr¡   r°   Úi0r{   Úvrr´   Úmin_valÚgeÚmax_valÚler   r¼   r]   r(   r*   r+   r-   r'   rg   rS   r&   r^   r�   r)   r‚   r\   r,   r±   rƒ   r—   r/   r   r„   r£   rŸ   rB   r‰   rR   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ð;ð 
õ	;ô: &)£U€MÜ69³eÐ á*0Ñ&Ð6V€Hõ#ð,	
¨ð 	
¼õ 	
÷(+÷ (+ôT �—‘Ó€EÜ˜U 3 B˜ZÓ(ó [)‰ˆˆ4ð ×#Ñ#Ø ¨Ñ4ˆE�!�a‘%ŠLÐ:Oó
ñ W	)ð ˜Ñ$Ü&8¸Ó&>Ð>�]ÐK÷	Qñ 	Qñ ˜]«LÔ9Ü =Ð0˜a´%·,±,Ô?Ü )¨!¯&©&«(Ó 3ò ™˜˜1Ù$Øõõðô )¨Ô+Ü$-¨a¯h©h«jÓ$9ò ™D˜A˜qÙ(Ø !õ!"õðñ %Ø×,Ñ,Ó.ôôð Ð,Ò,Ù# M×$5Ñ$5°d¸BÓ$?Ô@ð �{‰{Ü—‘Ü—	‘	—‘×-Ñ-×5Ñ5ðñ ð
 —I‘I˜a‘L DÒ(Ü'3°D·I±I¸a±LÓ'AÐA˜ÀmÑSà#Ð/Ù5°kÔBð Ÿ)™) A™,�CØ—H‘H×'Ñ'¨Ô-Ü! #¤r§w¡wÔ/¸¿	º	ØŸ™×+Ñ+¨CÕ0à!×%Ñ% kÔ2ð
 —‘˜=Ó(Ü!-¨dÓ!3Ð3�XÑ@õ!ñ .GØ˜tŸy™yŸ}™}Ð-@À"ÓEó.Ð*ð 2Ð=Ð=Ð=õ!ð  Ñ-á8¸Ô>á 9Ô ;á3Ô5Ù7Øôñ 5ØÜ%×-Ñ-Ø 3Ø,0¯I©I¯M©M¸-Ó,HØ04·	±	·±Ð>OÓ0Pôóñ ]ñ 7DÀMÐS[Ó6\˜M¨(Ñ3÷]ð !.¨hÑ 7× <Ñ <�IØ×.Ñ.¨yÔ9Ø—H‘H×'Ñ'¨Ô-Ü—I‘IØ7¸¸yÈ(õð
  ]Ñ2¼:Ø˜uŸ|™|¨U¯[©[×-@Ñ-@×-LÑ-LÐMô<ô /1¯h©h°tÀFÔ.K�M (Ñ+ð �{‰{Ü—	‘	—‘×2Ñ2×:Ñ:Ü—	‘	—‘×;Ñ;×CÑCðñ ð —‘×#Ñ# DÔ)àˆDñ %>Ø˜4Ÿ9™9Ÿ=™=Ð)<Ó=ó%ð Ð ð ð #4×"9Ñ"9Ó";ò LQ‘J�A�wØ—K‘K ”N÷@Tò @TðD  Ò-Ù4°RÐ9LÓMñ Ü/1¯x©xÙ " 4¨Ó 1¸&ô0˜M¨!Ñ,÷ô Ÿ	™	Ð":¸A¸}ÈQÑ?OÕPðYLQð\ ó n)�Ø#×'Ñ'¨¨BÓ/�ðP Ð5Ñ5Øà˜×,Ñ,Ñ,ÙØ×+Ñ+Ü!ŸI™IŸN™N×GÑG×OÑOØ*¨2Ñ.×3Ñ3Ð5õð
 ×+Ñ+Ü!×0Ñ0°=ÀÑ3D×3IÑ3IÐ2Kôð ×+Ñ+¨BÑ/�Ø—9’9 §¡¬S¯[©[¸1©_Ò!<ñ % R§X¡X¨vÓ6�BØ ×AÑAÓC×LÑLÈRÕPô
(ð & bÑ)×.Ñ.×5Ñ5Ø;ó<ñ 5ØÜ%×-Ñ-Ø 3Ø,0¯I©I¯M©M¸-Ó,HØ04·	±	·±Ð>OÓ0Pôóñ Añ ,3°2·8±8Ó+<Ð < ÐIÙ%2°=À"ÈÁ-Ó%P×%UÑ%U Ø %× 3Ñ 3Ü$)§I¡I§N¡N×$AÑ$A×$IÑ$Ià(*Ø*RÐSUÐY`ÑS`ÐRaÐakÐlnÐkoÐopÐ(qð%&ô!"ð !.× 1Ñ 1°"¸±-Ô @Ù+2°2·8±8Ó+<Ð < ÐIÙ%2°=À"ÈÁ-Ó%P×%UÑ%U Ø %× 3Ñ 3Ü$)§I¡I§N¡N×$AÑ$A×$IÑ$Ià(*Ø*RÐSUÐY`ÑS`ÐRaÐakÐlnÐkoÐopÐ(qð%&ô!"ð !.× 1Ñ 1°"¸±-Ô @÷7Að: -×0Ñ0°Ô4Ù# CÖ(ñ]n)÷SW	)ñ W	)ð	[)ð|
 %×*Ñ*Ó,ò ,‰ˆˆeä�t˜UŸ\™\Õ*Ø—
‘
—‘ Ó.Ø—J‘J×$Ó$ä�I‰IÐ=¸tÔDØ�H‰H×Ñ §
¡
Õ+ñ,÷Q]ñ ]ú÷bñ ú÷lAð Aú÷s	W	)ñ W	)ús^   ÈJ(h>ÓhÓFh>Ù#	h>Ù,"h%	ÚF-h>à;Dh2	å$h>èh"èh>è%h/è*h>è2h;è7h>è>i	)F)*rÌ   Úloggingrª   rÙ   Útypingr   r   r   rB   r¶   r   r8   Útorch.utils._pytreeÚutilsÚ_pytreerK   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__ro   Ú_loggingÚgetArtifactLoggerr¾   r7   rN   r   r   rÁ   r   r’   r   r   ú<module>rú      s  ðã Û Û Û 
ß /Ñ /ñ Ûæ>à€Hã ß $Ð $Ý Ý 6Ý 1Ý 2Ý ;Ý 2Ý -ð -Ð
-€à€g×Ñ˜Ó!€Ø—‘×1Ñ1°(¸LÓI€ð
˜RŸW™Wð 
¨°#©ó 
ð�r—w‘wð  8¨LÑ#9ó ñ  dÔ+ð
 ñ	,Øð,àð,ð ð,ð ð	,ð
 
ò,ó ,ñ,r   