Ë
    M²j×z  ã                   ó²  — 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%dz  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_verboseÚ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/html/ia-enhanced/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	Š2m
Š(m} ddlmŠ6 ddlm}m} ddlm} |j&                  j)                  «       Š8‰ j*                  Š4t,        j.                  j1                  ‰4«      Š<t2        j5                  dt7        d	|› �‰ d
¬«      «       i Š1t9        «       }d}	‰4j:                  D ]&  Š7‰7j<                  dk7  r‰7}	 n|j?                  ‰7«       Œ( dt,        j@                  dtB        fˆ*ˆ;fd„}
dŠ=‰4j:                  D ]$  Š7d‰7jD                  v rdŠ= nd‰7jD                  v sŒ$ n 	 	 	 	 d1dtF        j,                  j@                  dtH        dz  dtJ        tH        tL        f   dz  dtJ        tH        tL        f   dz  dtB        ddfˆ=fd„Š,t9        «       Š/t9        «       Š0|r|n|Š$ˆ$ˆ.fd„Š.dddtB        fˆ;fd„Š+ˆ*ˆ+ˆ,ˆ-ˆ.ˆ/ˆ0ˆ1ˆ2ˆ ˆ4ˆ7ˆ8fd„}tO        ‰4j:                  «      }tQ        |dd «      D �]r  \  Š5Š7‰4jS                  ‰7|vr|‰5dz      n|	«      5  ‰7|v rÅtU        ‰7«      x}�¸ˆ)ˆ,ˆ-ˆ1ˆ ˆ7ˆ;ˆ<fd„} ||ˆ7fd„«       tW        |x}tF        jX                  «      r„tQ        |j[                  «       «      D ]  \  Š5} ||ˆ4ˆ5ˆ7fd „«       Œ t]        |«      sJtQ        |j_                  «       «      D ]  \  Š5} ||ˆ4ˆ5ˆ7fd!„«       Œ  ||ja                  «       ˆ4ˆ7fd"„«       ‰7|	k(  r |‰8jc                  dg «      «       ‰7jd                  tF        jf                  tF        jh                  jj                  jl                  jn                  fv r¾‰7jp                  r‰7jp                  d   n‰7jr                  ju                  d#«      }|d
k(  stw        |«      x}‰1v rc|‰/v r_|}‰ j*                  jy                  ‰7«       tW        |t,        j@                  «      r9|jz                  s-‰ j*                  jy                  |«       n‰/j?                  |«       ‰7j<                  dk7  �r‡tw        ‰7«      xŠ:��yˆ1ˆ:fd$„} ||‰7jD                  ju                  d%i «      «      Š9ˆ1ˆ9fd&„}‰:‰1v s |
‰7«      rê |«       sã |«       sÜ |
‰7«      r€ ‰-‰ t}        j~                  ‰,‰7jD                  ju                  d«      ‰7jD                  ju                  d«      ‰7jD                  ju                  d«      ¬'«      «      5   ‰.‰1‰:«      ‰1‰:<   ddd«       ‰1‰:   j€                  }‰7jƒ                  |«       ‰ j*                  jy                  ‰7«       t„        j5                  d(‰7|‰:«       nT‰:‰1vrPtW        ‰:‰;j†                  ‰;jˆ                  jŠ                  jŒ                  f«      st-        jŽ                  ‰7‰<¬)«      ‰1‰:<   ‰7jd                  tF        jh                  jj                  j�                  jn                  tF        jh                  jj                  j’                  jn                  fv r‰ j*                  jy                  ‰7«       g } ||‰7jD                  ju                  d%«      «      x}rç|j•                  «       D ]Ô  \  }}|j—                  |«       ˆ%ˆ&ˆ'ˆ(ˆ3ˆ4fd*„Š3|‰1vsŒ& ‰-‰ t}        j~                  ‰,‰7jD                  ju                  d«      ‰7jD                  ju                  d«      ‰7jD                  ju                  d«      ¬'«      «      5  t-        jŽ                   ‰3‰7|«      ‰<¬)«      ‰1|<   ddd«       t„        j5                  d+|‰1|   «       ŒÖ |D �]*  }‰8jc                  |g «      }|‰0v rŒ|j˜                  |   }|jš                  r3|jœ                  tž        j                   dz
  k(  r ||j¢                  ‰6«      }|j¥                  «       j§                  |«      �s‰ˆ6fd,„} ‰-‰ t}        j~                  ‰,‰7jD                  ju                  d«      ‰7jD                  ju                  d«      ‰7jD                  ju                  d«      ¬'«      «      5   ||j¢                  «      x}�t ‰.‰1||k\  «      j€                  }‰4j©                  tF        jh                  jj                  jl                  jn                  |d-||k\  › d.|› d/�f«       ‰/j?                  ||k\  «        ||jœ                  «      x} �t ‰.‰1|| k  «      j€                  }!‰4j©                  tF        jh                  jj                  jl                  jn                  |!d-|| k  › d.|!› d/�f«       ‰/j?                  || k  «       ddd«       ‰0j?                  |«        ||«       �Œ- 	 ddd«       �Œu ‰1j•                  «       D ]ˆ  \  }"}#tW        |"‰;jª                  «      sŒ|#j€                  j<                  dk7  sŒ7|#j€                  jz                  rŒNt„        j5                  d0|"«       ‰ j*                  jy                  |#j€                  «       ŒŠ y# 1 sw Y   �ŒxY w# 1 sw Y   �ŒxY w# 1 sw Y   ŒçxY w# 1 sw Y   �ŒBxY w)2a  
    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Ú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_stackÚcustomÚskip_valc                 óà  •— |s¨t        j                  d„ | j                  «      }	 | j                  }| j                  dk(  rYt        | j                  t        «      s!t        dt        | j                  «      › �«      ‚t        |d   | j                  «      }|dd  } ||Ž | j                  ‰<   |�|| j                  d<   |�|| 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)   € Ü/9¸#¼u¿x¹x¿}¹}Ô/MÔ& sÓ+ð ØSVð r   Úcall_methodzExpected str target, got r   é   rD   rE   rF   )ÚpytreeÚtree_maprA   Útargetr;   r   ÚstrÚAssertionErrorÚtypeÚgetattrr   ÚNotImplementedError)r   rD   rE   rF   rG   Ú	fake_argsrO   Úval_keys          €r   Ú_node_metadata_hookz<insert_deferred_runtime_asserts.<locals>._node_metadata_hook§   sû   ø€ ñ ÜŸ™ñð —	‘	ó	ˆIðØŸ™�Ø—7‘7˜mÒ+Ü% d§k¡k´3Ô7Ü,Ø7¼¸T¿[¹[Ó8IÐ7JÐKóð ô % Y¨q¡\°4·;±;Ó?�FØ )¨!¨" �IÙ%+¨YÐ%7�—	‘	˜'Ñ"ð Ð"Ø'2ˆD�I‰I�mÑ$ØÐ&Ø+:ˆD�I‰IÐ'Ñ(ØÐØ"(ˆD�I‰I�hÒð øô 'ò ñ ð	ús   ¦BC! Ã!	C-Ã,C-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   rY   r?   rZ   Úsympy.logic.boolalgr[   Útorch.utils._sympy.interpr\   r]   r   rA   )Úexpr_to_proxyr   rY   r?   rZ   r[   r\   r]   r=   ÚAnalysisÚ_sympy_interps            €€r   rb   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   rZ   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                 ó  •— | 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                  |«       Œý ‰	‰t        j                  ‰‰j                  j                  d«      ‰j                  j                  d«      ‰j                  j                  d«      ¬«      «      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)NrL   zinserting runtime assert %s)ÚkeyrD   rE   rF   ©rD   rE   rF   ú(Runtime assertion failed for expression ú
 on node 'ú')r   re   r,   ÚnextÚiterÚlogÚdebugÚkeysÚminrP   Ú
setdefaultÚappendÚ	functoolsÚpartialr   Úgetr   Úcall_functionr8   ÚopsÚatenÚ_assert_scalarÚdefaultÚadd)ÚrasÚraÚfvsÚmissingÚi1Úresr(   rk   rW   r&   rb   Úadded_assertsÚconstrained_unbacked_symbolsr`   r,   r!   Úgraphr   Úras_by_symbols         €€€€€€€€€€€€€r   Úadd_runtime_assertsz<insert_deferred_runtime_asserts.<locals>.add_runtime_assertsò   s®  ø€ Øó 2	+ˆ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¸Õ;ñ -ØÜ×%Ñ%Ø+Ø$(§I¡I§M¡M°-Ó$@Ø(,¯	©	¯©Ð6GÓ(Hð  $Ÿy™yŸ}™}¨XÓ6ôó
ñ ñ (¨°r·w±wÓ?×DÑD�Cà×'Ñ'ÜŸ	™	Ÿ™×5Ñ5×=Ñ=ð  ØFÀrÇwÁwÀiÈzÐZ]ÐY^Ð^_Ð`ðô	÷ð, ×!Ñ! "§'¡'Ö*ñe2	+÷8ð ús   Å,A/HÈH	éÿÿÿÿrL   c                 ó@  •— t        | t        j                  «      r÷t        | j                  t        «      rÜt         ‰| j                  «      x}‰	j
                  «      r³|‰vr® ‰‰t        j                  ‰‰j                  j                  d«      ‰j                  j                  d«      ‰j                  j                  d«      ¬«      «      5  t        j                   |«       ‰
¬«      ‰|<   d d d «       t        j                  d|‰|   «       y y y y y # 1 sw Y   Œ(xY w)NrD   rE   rF   rn   ©Útracerúexpr_to_proxy[%s] = %s)r   r8   ÚSymIntr   r   rZ   rz   r{   r   r|   r   ÚProxyrt   ru   )ÚsymintÚcbÚsr'   rW   r&   r`   r!   r   rB   r‘   s      €€€€€€€€r   Úmatch_symbolz5insert_deferred_runtime_asserts.<locals>.match_symbol8  sõ   ø€ ä" 6¬5¯<©<Ô8Ü& v§{¡{´GÔ<Ü&Ù!6°v·{±{Ó!CÐC˜AÀUÇ\Á\ôð  ]Ñ2á4ØÜ%×-Ñ-Ø 3Ø,0¯I©I¯M©M¸-Ó,HØ04·	±	·±Ð>OÓ0Pð (,§y¡y§}¡}°XÓ'>ôó
ñ Mô 02¯x©x¹»ÀVÔ/L˜M¨!Ñ,÷Mô Ÿ	™	Ð":¸A¸}ÈQÑ?OÕPð 3ðð =ð 9÷Mð Mús   Ã DÄDc                  ó   •— ‰ S r   © r   s   €r   rJ   z1insert_deferred_runtime_asserts.<locals>.<lambda>P  s   ø€ °D€ r   c                  ó„   •— ‰ j                  t        j                  j                  j                  j
                  ‰‰f«      S r   )r}   r8   r~   r   Úsym_sizeÚint©r‹   Úir   s   €€€r   rJ   z1insert_deferred_runtime_asserts.<locals>.<lambda>V  s/   ø€  E×$7Ñ$7Ü %§	¡	§¡× 7Ñ 7× ;Ñ ;¸dÀA¸Yó%€ r   c                  ó„   •— ‰ j                  t        j                  j                  j                  j
                  ‰‰f«      S r   )r}   r8   r~   r   Ú
sym_strider�   rž   s   €€€r   rJ   z1insert_deferred_runtime_asserts.<locals>.<lambda>^  s/   ø€ ¨×(;Ñ(;Ü$)§I¡I§N¡N×$=Ñ$=×$AÑ$AÀDÈ!À9ó)"€ r   c                  ó‚   •— ‰ j                  t        j                  j                  j                  j
                  ‰f«      S r   )r}   r8   r~   r   Úsym_storage_offsetr�   )r‹   r   s   €€r   rJ   z1insert_deferred_runtime_asserts.<locals>.<lambda>d  s-   ø€  E×$7Ñ$7Ü %§	¡	§¡× AÑ A× IÑ IÈDÈ7ó%€ r   Úcondc                  ó4   •— ‰j                   D ]  } | ‰vsŒ y y)NTF)r,   )Úsymbolr`   Úsym_exprs    €€r   Úhas_new_untracked_symbolszBinsert_deferred_runtime_asserts.<locals>.has_new_untracked_symbols‰  s(   ø€ à"*×"7Ñ"7ò (˜Ø!¨Ò6Ù#'ð(ð !r   Úunbacked_bindingsc                  ó:   •— ‰€t        d«      ‚‰D ]  } | ‰vsŒ y y)Nz"resolved_unbacked_bindings is NoneTF)rQ   )rm   r`   Úresolved_unbacked_bindingss    €€r   Úhas_new_unbacked_bindingszBinsert_deferred_runtime_asserts.<locals>.has_new_unbacked_bindings—  s4   ø€ Ø1Ð9Ü,Ð-QÓRÐRØ9ò (˜Ø mÒ3Ù#'ð(ð !r   rn   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…|d   j                  dk(  rI ‰‰j                  t        j                  j                  j                  j                  | f«      |dd  «      S  ‰‰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                  t        j$                  | dd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š   rd   r   rL   ÚsizeÚstrideÚstorage_offsetzunrecognized keypath )re   r   rM   ÚSequenceKeyr#   r}   r8   r~   r   rœ   r�   Úidxr¡   rK   r£   r�   ÚoperatorÚgetitemÚsym_iteÚfloordivÚdivisorrS   Ú
inner_namerQ   )r   Úkeypathr)   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Ø& 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Ù#%Ø %× 3Ñ 3Ü$,×$4Ñ$4°t¸WÀQ¹Z¿^¹^Ð6Ló!"ð !(¨¨ ó	$ð ô (¨°©
°MÔBÙ#%Ø %× 3Ñ 3´E·M±MÀDÈ!ÈQÀ<Ó PØ '¨¨ ó$ð ô (¨°©
°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>.convertu  s5   ø€ Ø ¨&¨Ð 1Ñ1Ø#'ð(Ü#& q£6˜MøÜ(ò (Ù#'ð(ús   ‹
 –	"¡"ro   rp   rq   z%deleting unused reified symbol for %s)NNNF)VrB   Ú(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_logru   r
   ÚsetÚnodesr;   r‚   r7   Úboolr   r8   rP   Údictr   ÚlistÚ	enumerateÚinserting_beforer   r   r9   r®   r   r¯   r°   ÚpoprO   Ú_checkr~   r   r€   r�   rA   Úkwargsr|   r   Ú
erase_nodeÚusersrz   r{   r   Úreplace_all_uses_withrt   r?   ÚlogicÚboolalgr[   r”   Úsym_constrain_rangeÚsym_constrain_range_for_sizeÚitemsry   Úvar_to_rangeÚis_intÚupperÚsysÚmaxsizeÚlowerÚ _default_unspecified_value_rangeÚissubsetr}   rZ   )>r!   r"   r#   r$   r.   r0   r1   r2   ÚplaceholdersÚfirst_non_placeholderrC   r�   rÉ   r   r˜   Útr—   r¤   Úassert_exprr=   r¨   r¬   Ú	hash_nodeÚdefsr©   r¹   Úi0rƒ   Úvrr½   Úmin_valÚgeÚmax_valÚler   rÅ   ra   r)   r*   r+   r-   r'   r(   rk   rW   r&   rb   r‰   rŠ   r`   r,   rº   r‹   rŸ   r/   r   rŒ   r«   r§   rB   r‘   rV   s>   `                                   @@@@@@@@@@@@@@@@@@@@@@@@@@r   r   r   6   sp	  ÿÿÿú€ ó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ÒÙðð #'Ø15Ø(,Øñ")Ü�h‰h�m‰mð")ä˜4‘Zð")ô œc¤3˜h™¨$Ñ.ð")ô ”Sœ#�X‘ Ñ%ð	")ô
 ð")ð 
õ")ôJ &)£U€MÜ69³eÐ á*0Ñ&Ð6V€Hõ#ð,	
¨ð 	
¼õ 	
÷3+÷ 3+ð 3+ôj �—‘Ó€EÜ˜U 3 B˜ZÓ(ó v)‰ˆˆ4ð ×#Ñ#Ø ¨Ñ4ˆE�!�a‘%ŠLÐ:Oó
ñ r	)ð ˜Ñ$Ü&8¸Ó&>Ð>�]ÐK÷Qó Qñ0 ˜]«LÔ9ä =Ð0˜a´%·,±,Ô?Ü )¨!¯&©&«(Ó 3ò ™˜˜1Ù$Øõõðô )¨Ô+Ü$-¨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Ù7Øôñ 5ØÜ%×-Ñ-Ø 3Ø,0¯I©I¯M©M¸-Ó,HØ04·	±	·±Ð>OÓ0Pð (,§y¡y§}¡}°XÓ'>ôó
ñ ñ 7DØ -Ø (ó7˜M¨(Ñ3÷ð  !.¨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Ó";ò ^Q‘J�A�wØ—K‘K ”N÷HTñ HTðT  Ò-Ù4ØÜ%×-Ñ-Ø 3Ø,0¯I©I¯M©M¸-Ó,HØ04·	±	·±Ð>OÓ0Pð (,§y¡y§}¡}°XÓ'>ôó
ñ ô 02¯x©xÙ " 4¨Ó 1¸&ô0˜M¨!Ñ,÷ô Ÿ	™	Ð":¸A¸}ÈQÑ?OÕPð}^Qð@ ó _)�Ø#×'Ñ'¨¨BÓ/�ðP Ð5Ñ5Øà×+Ñ+¨BÑ/�Ø—9’9 §¡¬S¯[©[¸1©_Ò!<ñ % R§X¡X¨vÓ6�BØ ×AÑAÓC×LÑLÈRÕPô
(ñ 1ØÜ!×)Ñ)Ø/Ø(,¯	©	¯©°mÓ(DØ,0¯I©I¯M©MÐ:KÓ,Lð $(§9¡9§=¡=°Ó#:ôó
ñ =ñ (/¨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Ö(ñ_)÷gr	)ñ r	)ð	v)ðr %×*Ñ*Ó,ò ,‰ˆˆeä�t˜UŸ\™\Õ*Ø—
‘
—‘ Ó.Ø—J‘J×$Ó$ä�I‰IÐ=¸tÔDØ�H‰H×Ñ §
¡
Õ+ñ,÷mñ ú÷Hñ ú÷\=ð =ú÷c
r	)ñ r	)ús_   È5K	i	Ó>h#ÔFi	ÚA+i	Ü"h0	Ü'Di	áDh=	å$i	è#h-è(i	è0h:è5i	è=iéi	é	i	)F)*rz   Úloggingr³   rÝ   Útypingr   r   r   rB   r¿   r   r8   Útorch.utils._pytreeÚutilsÚ_pytreerM   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__rt   Ú_loggingÚgetArtifactLoggerrÇ   r7   rP   r   r   rÊ   r   rš   r   r   ú<module>rþ      s  ðã Û Û Û 
ß /Ñ /ñ Ûæ>à€Hã ß $Ð $Ý Ý 6Ý 1Ý 2Ý ;Ý 2Ý -ð -Ð
-€à€g×Ñ˜Ó!€Ø—‘×1Ñ1°(Ð<PÓQ€ð
˜RŸW™Wð 
¨¨t©ó 
ð�r—w‘wð  8¨LÑ#9ó ñ  dÔ+ð
 ñ	q	,Øðq	,àðq	,ð ðq	,ð ð	q	,ð
 
òq	,ó ,ñq	,r   