Ë
    P/æj�m  ã                   óº  — 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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jF                  jI                  e!d«      Z%dejL                  dee'   fd„Z(dejL                  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ÚDictÚOptionalÚSetÚ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    úa/root/repos/pocs/video-evals/.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— ddl Š7ddlmŠ* ddlmŠ'mŠ"mŠ-mŠ#mŠ$m	Š0m
Š%m} ddlmŠ4 ddlmŠ& ddlm} |j$                  j'                  «       Š6‰ j(                  Š2t*        j-                  dt/        d	|› �‰ d
¬«      «       i Š/t1        «       }d}‰2j2                  D ]&  Š5‰5j4                  dk7  r‰5} n|j7                  ‰5«       Œ( dt8        j:                  dt<        fˆ'ˆ7fd„}dŠ8‰2j2                  D ]$  Š5d‰5j>                  v rdŠ8 nd‰5j>                  v sŒ$ n 	 	 d+dt@        j8                  j:                  dtB        tD           dtB        tF        tD        tH        f      ddfˆ8fd„Š)t1        «       Š,t1        «       Š.ˆ&ˆ+fd„Š+dddt<        fˆ7fd„Š(ˆ'ˆ(ˆ)ˆ*ˆ+ˆ,ˆ.ˆ/ˆ0ˆ ˆ2ˆ6fd„}	tK        ‰2j2                  «      }
tM        |
dd «      D �]›  \  Š3Š5‰2jO                  ‰5|vr|
‰3dz      n|«      5  ‰5|v rÂtQ        ‰5«      x}�µˆ)ˆ*ˆ/ˆ ˆ7fd„} ||ˆ5fd„«       tS        |x}t@        jT                  «      r„tM        |jW                  «       «      D ]  \  Š3} ||ˆ2ˆ3ˆ5fd„«       Œ tY        |«      sJtM        |j[                  «       «      D ]  \  Š3} ||ˆ2ˆ3ˆ5fd„«       Œ  ||j]                  «       ˆ2ˆ5fd „«       ‰5|k(  r |	‰6j_                  dg «      «       ‰5j`                  t@        jb                  t@        jd                  jf                  jh                  jj                  fv rµ‰5jl                  d   d
k(  s&to        ‰5jl                  d   «      x}‰/v s
|�t ‰(|«      rl‰5jl                  d   }‰ j(                  jq                  ‰5«       tS        |t8        j:                  «      r9|jr                  s-‰ j(                  jq                  |«       n‰,j7                  |«       ‰5j4                  dk7  �r‘to        ‰5«      x}��ƒ|j                  ‰/ju                  «       z
  } ||‰5j>                  jw                  d!i «      «      ju                  «       ‰/ju                  «       z
  }|‰/v s
 |‰5«      rÆ|sÄ|sÂ |‰5«      rf ‰*‰ ty        jz                  ‰)‰5j>                  jw                  d«      ‰5j>                  jw                  d«      ¬"«      «      5   ‰+‰/|«      ‰/|<   ddd«       ‰/|   j|                  }‰5j                  |«       ‰ j(                  jq                  ‰5«       t€        j-                  d#‰5||«       nR|‰/vrNtS        |‰7j‚                  ‰7j„                  j†                  jˆ                  f«      st9        jŠ                  ‰5«      ‰/|<   ‰5j`                  t@        jd                  jf                  jŒ                  jj                  t@        jd                  jf                  jŽ                  jj                  fv r‰ j(                  jq                  ‰5«       g } ||‰5j>                  jw                  d!«      «      x}r„|j‘                  «       D ]q  \  }}|j“                  |«       ˆ"ˆ#ˆ$ˆ%ˆ-ˆ1ˆ2fd$„Š1|‰/vsŒ' ‰*‰ ‰)«      5  t9        jŠ                   ‰1‰5|«      «      ‰/|<   ddd«       t€        j-                  d%|‰/|   «       Œs |D �]¸  }‰6j_                  |g «      }|‰.v rŒ||j”                  v r}|rM‰2j—                  t@        jd                  jf                  jŽ                  jj                  ‰/|   j|                  f«       n.‰2j—                  t@        j˜                  ‰/|   j|                  f«       |jš                  |   }|jœ                  r3|jž                  t         j¢                  dz
  k(  r ||j¤                  ‰4«      }|j§                  «       j©                  |«      �sŒˆ4fd&„}‰/|   j|                  j`                  ‰-k7  �rj ‰*‰ ty        jz                  ‰)‰5j>                  jw                  d«      ‰5j>                  jw                  d«      ¬"«      «      5   ||j¤                  «      x}�t ‰+‰/||k\  «      j|                  }‰2j—                  t@        jd                  jf                  jh                  jj                  |d'||k\  › d(|› d)�f«       ‰,j7                  ||k\  «        ||jž                  «      x}�t ‰+‰/||k  «      j|                  }‰2j—                  t@        jd                  jf                  jh                  jj                  |d'||k  › d(|› d)�f«       ‰,j7                  ||k  «       ddd«       ‰.j7                  |«        |	|«       �Œ» 	 ddd«       �Œž ‰/j‘                  «       D ]ˆ  \  } }!tS        | ‰7jª                  «      sŒ|!j|                  j4                  dk7  sŒ7|!j|                  jr                  rŒNt€        j-                  d*| «       ‰ j(                  jq                  |!j|                  «       ŒŠ y# 1 sw Y   �ŒCxY w# 1 sw Y   �Œ™xY w# 1 sw Y   ŒçxY w# 1 sw Y   �Œkx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)Ú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)r5   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                 ó>  •— | j                   D �cg c]3  }t        |t        j                  j                  «      rt        |«      n|‘Œ5 }}	  | j                  |Ž | j                  ‰<   |�|| j                  d<   |�|| j                  d<   y y c c}w # t        $ r Y Œ4w xY w)NrE   rF   )	rB   r   r9   r	   r8   r   Útargetr   ÚNotImplementedError)r   rE   rF   r>   Ú	fake_argsÚval_keys        €r   Ú_node_metadata_hookz<insert_deferred_runtime_asserts.<locals>._node_metadata_hookŸ   s«   ø€ ð —y‘yö
àô (2°#´u·x±x·}±}Ô'EÔ˜sÔ#È3ÑNð
ˆ	ð 
ð	Ø!, §¡¨iÐ!8ˆD�I‰I�gÑð Ð"Ø'2ˆD�I‰I�mÑ$ØÐ&Ø+:ˆD�I‰IÐ'Ò(ð 'ùò
øô #ò 	ñ ð		ús   �8BÁ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)rC   rN   r@   rO   Úsympy.logic.boolalgrP   Útorch.utils._sympy.interprQ   rR   r   rB   )Úexpr_to_proxyr    rN   r@   rO   rP   rQ   rR   r>   r2   Ú_sympy_interps            €€r   rV   z6insert_deferred_runtime_asserts.<locals>._sympy_interp¸   sŠ   ø€ ç1Ñ1Ý3çNð �=Ñ Ø  Ñ&Ð&ä�d˜W f¨f°kÐBÔCÙÐ 7¸ÈÓMÐMñ 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)ÚlenrB   ÚfuncÚLessThanÚGreaterThanr   rO   r@   )r    ÚlhsÚrhsrC   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)Né   zinserting runtime assert %s)Úkeyú(Runtime assertion failed for expression ú
 on node 'ú')r    rY   r.   ÚnextÚiterÚlogÚdebugÚkeysÚminÚstrÚ
setdefaultÚappendr   Úcall_functionr9   ÚopsÚatenÚ_assert_scalarÚdefaultÚadd)ÚrasÚraÚfvsÚmissingÚi1Úresr)   r_   rL   r(   rV   Úadded_assertsÚconstrained_unbacked_symbolsrU   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)	éÿÿÿÿra   c                 ó€  •— t        | t        j                  «      r—t        | j                  t        «      r|t        | j                  j
                  x}‰j                  «      rO|‰vrJ ‰‰‰«      5  t        j                   |«       «      ‰|<   d d d «       t        j                  d|‰|   «       y y y y y # 1 sw Y   Œ(xY w)Núexpr_to_proxy[%s] = %s)r   r9   ÚSymIntr   r   r    rO   r	   ÚProxyrh   ri   )ÚsymintÚcbÚsrL   r(   rU   r#   rC   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ñ >Ü/1¯x©x¹»«~˜M¨!Ñ,÷>äŸ	™	Ð":¸A¸}ÈQÑ?OÕPð	 3ð Lð =ð 9÷
>ð >ús   Á/B4Â4B=c                  ó   •— ‰ S r   © r   s   €r   ú<lambda>z1insert_deferred_runtime_asserts.<locals>.<lambda>  s   ø€ °D€ r   c                  ó„   •— ‰ j                  t        j                  j                  j                  j
                  ‰‰f«      S r   )ro   r9   rp   rq   Úsym_sizeÚint©r}   Úir   s   €€€r   r‹   z1insert_deferred_runtime_asserts.<locals>.<lambda>$  s/   ø€  E×$7Ñ$7Ü %§	¡	§¡× 7Ñ 7× ;Ñ ;¸dÀA¸Yó%€ r   c                  ó„   •— ‰ j                  t        j                  j                  j                  j
                  ‰‰f«      S r   )ro   r9   rp   rq   Ú
sym_striderŽ   r�   s   €€€r   r‹   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   )ro   r9   rp   rq   Úsym_storage_offsetrs   )r}   r   s   €€r   r‹   z1insert_deferred_runtime_asserts.<locals>.<lambda>2  s-   ø€  E×$7Ñ$7Ü %§	¡	§¡× AÑ A× IÑ IÈDÈ7ó%€ r   Úunbacked_bindings)rE   rF   zCSE node %s -> %s for expr %sc                 ó>  •— |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Š   rX   r   ra   ÚsizeÚstridezunrecognized keypath )rY   r   ÚpytreeÚSequenceKeyr%   ro   r9   rp   rq   r�   rŽ   Úidxr’   Úcall_methodÚoperatorÚgetitemÚfloordivÚdivisorÚgetattrÚ
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‡   r1   s    €r   Úconvertz0insert_deferred_runtime_asserts.<locals>.convert&  s5   ø€ Ø ¨&¨Ð 1Ñ1Ø#'ð(Ü#& q£6˜MøÜ(ò (Ù#'ð(ús   ‹
 –	"¡"rc   rd   re   z%deleting unused reified symbol for %s)NN)VrC   Ú(torch._export.passes._node_metadata_hookr(   Ú%torch.fx.experimental.symbolic_shapesr)   r*   r+   r,   r-   r.   r/   r0   Útorch.utils._sympy.numbersr1   Útorch.utils._sympy.referencer2   Útorch.utils._sympy.value_rangesr3   Údeferred_runtime_assertsÚcopyr}   Úgraph_code_logri   r   ÚsetÚnodesr<   rt   r	   r8   Úboolr   r9   r   rl   r   r   ÚlistÚ	enumerateÚinserting_beforer   r   r:   r—   r
   r˜   Ústorage_offsetÚpoprH   Ú_checkrp   rq   rr   rs   rB   r!   Ú
erase_nodeÚusersrj   ÚgetÚ	functoolsÚpartialr   Úreplace_all_uses_withrh   r@   ÚlogicÚboolalgrP   r„   Úsym_constrain_rangeÚsym_constrain_range_for_sizeÚitemsrn   Ú	size_likero   Ú_check_is_sizeÚvar_to_rangeÚis_intÚupperÚsysÚmaxsizeÚlowerÚ _default_unspecified_value_rangeÚissubsetrO   )9r#   r$   r%   r&   r0   r3   ÚplaceholdersÚfirst_non_placeholderrD   r   r²   r   rˆ   Útr‡   Úassert_exprr>   Úsym_exprÚnew_untracked_symbolsÚnew_unbacked_bindingsÚ	hash_nodeÚdefsr•   r¤   Úi0ru   Úvrr¨   Úmin_valÚgeÚmax_valÚler    Úproxyr*   r,   r-   r/   r2   r)   r_   rL   r(   rV   r{   r+   r|   rU   r.   r¥   r}   r�   r1   r   r~   rC   rK   s9   `                                 @@@@@@@@@@@@@@@@@@@@@@@r   r   r   6   si	  ÿÿÿ€ óP åP÷	÷ 	ó 	õ 2ÝDÝ;ð ×6Ñ6×;Ñ;Ó=€MØ�H‰H€EÜ×ÑØÜØ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Ð õ#ð,	
¨ð 	
¼õ 	
÷(+÷ (+ôT �—‘Ó€EÜ˜U 3 B˜ZÓ(ó O)‰ˆˆ4ð ×#Ñ#Ø ¨Ñ4ˆE�!�a‘%ŠLÐ:Oó
ñ K	)ð ˜Ñ$Ü&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Ñ@ð )1×(=Ñ(=À×@RÑ@RÓ@TÑ(TÐ%ñ
 .Ø! 4§9¡9§=¡=Ð1DÀbÓ#Ióç‘d“fØ#×(Ñ(Ó*ñ+ð &ð  Ñ-á8¸Ô>á 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«n�M (Ñ+ð �{‰{Ü—	‘	—‘×2Ñ2×:Ñ:Ü—	‘	—‘×;Ñ;×CÑCðñ ð —‘×#Ñ# DÔ)àˆDñ %>Ø˜4Ÿ9™9Ÿ=™=Ð)<Ó=ó%ð Ð ð ð #4×"9Ñ"9Ó";ò JQ‘J�A�wØ—K‘K ”N÷@Tò @TðD  Ò-Ù4°RÐ9LÓMñ KÜ/1¯x©x¹¸4ÀÓ8IÓ/J˜M¨!Ñ,÷KäŸ	™	Ð":¸A¸}ÈQÑ?OÕPðUJQðX ó 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)÷{K	)ñ K	)ð	O)ðd
 %×*Ñ*Ó,ò ,‰ˆˆeä�t˜UŸ\™\Õ*Ø—
‘
—‘ Ó.Ø—J‘J×$Ó$ä�I‰IÐ=¸tÔDØ�H‰H×Ñ §
¡
Õ+ñ,÷M]ñ ]ú÷bKñ Kú÷hAð Aú÷[	K	)ñ K	)ús^   Ç4K	h1Ò=hÓ
Fh1Ù	h1Ù! h	ÚF-h1à.Dh%	ä?$h1èhèh1èh"èh1è%h.è*h1è1h;	)F),r½   Úloggingr�   rÊ   Útypingr   r   r   r   r   rC   rª   r   r9   Útorch.utils._pytreeÚutilsÚ_pytreer™   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__rh   Ú_loggingÚgetArtifactLoggerr°   r8   rl   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Ô+ð
 ñ	f,Øðf,àðf,ð ðf,ð ð	f,ð
 
òf,ó ,ñf,r   