Ë
    ÄÓ^jÇƒ  ã                   ó¾  — d dl Z d dlZd dlZd dlZd dlm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jF                  jI                  e!d«      Z%dejL                  de'dz  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)ÚCallable)Ú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    úi/var/www/ramen.bs-engineer-server.com/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‡:‡;‡<‡=‡>‡?‡@‡A‡B‡C— ddl Š?ddlmŠ1 ddlmŠ-mŠ.mŠ6m}m} ddl	m
Š9 ddlm}m} ddlm} |j                   j#                  «       Š<‰ j$                  Š7t&        j(                  j+                  ‰7«      Š@t,        j/                  dt1        d	|› �‰ d
¬«      «       i Š5t3        «       }	d}
‰7j4                  D ]&  Š:‰:j6                  dk7  r‰:}
 n|	j9                  ‰:«       Œ( dt&        j:                  dt<        fˆ.ˆ?fd„}dŠB‰7j4                  D ]$  Š:d‰:j>                  v rdŠB nd‰:j>                  v sŒ$ n 	 	 	 	 d>dt@        j&                  j:                  dtB        dz  dtD        tB        tF        f   dz  dtD        tB        tF        f   dz  dt<        ddfˆBfd„Š0t3        «       Š3t3        «       Š4|r|n|Š+dtD        ‰?jH                  t&        jJ                  f   d‰?jH                  dt&        jJ                  fˆ+ˆ2fd„Š2dddt<        fˆ?fd„Š/t@        jL                  t@        jN                  t@        jP                  jR                  jN                  jT                  f}dŠ;dt&        j:                  dtF        fd„}dt&        j:                  dtF        dtV        d   dtB        fˆ fd „Š,dt&        j:                  dt<        fˆ;fd!„}dt&        j:                  dtF        dtV        d   ddfˆ,ˆ7ˆ;fd"„}t3        «       ŠA‰7j4                  D ]\  Š:‰:jX                  |v sŒ |‰:«      sŒ |‰:«      }t[        |t&        j:                  «      sŒ>t]        |«      }|€ŒL‰Aj9                  |«       Œ^ d#t^        |   ddfˆ.ˆ/ˆ0ˆ1ˆ2ˆ3ˆ4ˆ5ˆ6ˆ ˆ7ˆ:ˆ<ˆAfd$„}t_        ‰7j4                  «      }ta        |dd% «      D �]‘  \  Š8Š:‰7jc                  ‰:|	vr|‰8d&z      n|
«      5  ‰:|	v rçte        ‰:«      x}�Úd'tf        d(th        g t&        j:                  f   ddfˆ-ˆ0ˆ1ˆ5ˆ ˆ:ˆ?ˆ@fd)„} ||ˆ:fd*„«       t[        |x}t@        jj                  «      r„ta        |jm                  «       «      D ]  \  Š8} ||ˆ7ˆ8ˆ:fd+„«       Œ to        |«      sJta        |jq                  «       «      D ]  \  Š8} ||ˆ7ˆ8ˆ:fd,„«       Œ  ||js                  «       ˆ7ˆ:fd-„«       ‰:|
k(  r |‰<ju                  dg «      «       ‰:jX                  |v �rp |‰:«      }t[        |t&        j:                  «      rt]        |«      nd}|d
k(  r`|}‰ j$                  jw                  ‰:«       t[        |t&        j:                  «      �r|jx                  sø‰ j$                  jw                  |«       nÜ |‰:«      rX‰:jX                  t@        jP                  jR                  jN                  jT                  ur
 |‰:||«       |�Ž‰3j9                  |«       n||�g|‰5v rc|‰3v r_|}‰ j$                  jw                  ‰:«       t[        |t&        j:                  «      r;|jx                  s/‰ j$                  jw                  |«       n|�‰3j9                  |«       ‰:j6                  dk7  �r•t]        ‰:«      xŠ>��‡dt<        fˆ5ˆ>fd.„} ||‰:j>                  j{                  d/i «      «      Š=dt<        fˆ5ˆ=fd0„}‰>‰5v s |‰:«      rê |«       sã |«       sÜ |‰:«      r€ ‰1‰ t}        j~                  ‰0‰:j>                  j{                  d«      ‰:j>                  j{                  d«      ‰:j>                  j{                  d«      ¬1«      «      5   ‰2‰5‰>«      ‰5‰><   ddd«       ‰5‰>   j€                  }‰:jƒ                  |«       ‰ j$                  jw                  ‰:«       t„        j/                  d2‰:|‰>«       nT‰>‰5vrPt[        ‰>‰?j†                  ‰?jˆ                  jŠ                  jŒ                  f«      st'        jJ                  ‰:‰@¬3«      ‰5‰><   ‰:jX                  t@        jP                  jR                  jŽ                  jT                  t@        jP                  jR                  j�                  jT                  fv r‰ j$                  jw                  ‰:«       g } ||‰:j>                  j{                  d/«      «      x}�r!|j“                  «       D �]  \  }}|j•                  |«       d4t@        j–                  dt&        j:                  t˜        z  fˆ2ˆ5fd5„}|‰5vsŒK ‰1‰ t}        j~                  ‰0‰:j>                  j{                  d«      ‰:j>                  j{                  d«      ‰:j>                  j{                  d«      ¬1«      «      5  t'        jJ                  ‰7j›                  ‰:t�        |«      |¬6«      ‰@¬3«      ‰5|<   ddd«       t„        j/                  d7|‰5|   «       �Œ |D �]g  } ‰<ju                  | g «      }!| ‰4v rŒ|jž                  |    ŠC‰Cj                   r3‰Cj¢                  t¤        j¦                  d&z
  k(  r |‰Cj¨                  ‰9«      ŠC|j«                  «       j­                  ‰C«      �sÆd8tF        dt˜        t®        z  dz  fˆ9ˆ?ˆCfd9„}" ‰1‰ t}        j~                  ‰0‰:j>                  j{                  d«      ‰:j>                  j{                  d«      ‰:j>                  j{                  d«      ¬1«      «      5   |"‰Cj¨                  «      x}#�†| |#k\  }$|$‰Av r‰3j9                  |$«       nk ‰2‰5|$«      j€                  }%‰7j±                  t@        jP                  jR                  jN                  jT                  |%d:|$› d;|%› d<�f«       ‰3j9                  |$«        |"‰Cj¢                  «      x}&�†| |&k  }'|'‰Av r‰3j9                  |'«       nk ‰2‰5|'«      j€                  }(‰7j±                  t@        jP                  jR                  jN                  jT                  |(d:|'› d;|(› d<�f«       ‰3j9                  |'«       ddd«       ‰4j9                  | «        ||!«       �Œj 	 ddd«       �Œ” ‰5j“                  «       D ]ˆ  \  })}*t[        |)‰?j²                  «      sŒ|*j€                  j6                  dk7  sŒ7|*j€                  jx                  rŒNt„        j/                  d=|)«       ‰ j$                  jw                  |*j€                  «       ŒŠ y# 1 sw Y   �Œ’xY w# 1 sw Y   �ŒIxY w# 1 sw Y   ŒçxY w# 1 sw Y   �	Œax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.  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 compiler-generated asserts 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
    add bound checks at the end of this pass when an equivalent explicit assert
    is not already present in the graph.
    r   N)Ú_set_node_metadata_hook)Ú_get_placeholder_exprÚ#_has_uninterpretable_sympy_functionÚfree_symbolsÚresolve_unbacked_bindingsÚRuntimeAssert)Ú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)r2   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   r6   r   r5   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_methodúExpected str target, got r   é   rB   rC   rD   )ÚpytreeÚtree_mapr?   Útargetr9   r   ÚstrÚAssertionErrorÚtypeÚgetattrr   ÚNotImplementedError)r   rB   rC   rD   rE   Ú	fake_argsrN   Ú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-Úexpr_to_proxyr   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)r@   rY   r=   rZ   Úsympy.logic.boolalgr[   Útorch.utils._sympy.interpr\   r]   r   r?   )rW   r   rY   r=   rZ   r[   r\   r]   r;   ÚAnalysisÚ_sympy_interps            €€r   ra   z6insert_deferred_runtime_asserts.<locals>._sympy_interpÏ   s‹   ø€ ÷ 	2Ñ1Ý3çNð �=Ñ Ø  Ñ&Ð&ä�d˜W f¨f°kÐBÔCÙ ¨-¸Ó>Ð>ñ 1ØØ:>¿)¹)ÖD°3‰]˜=¨#Õ.ÒDØó
ˆ�dÑð
 ˜TÑ"Ð"ùò Es   ÁA.
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)Úlenr?   ÚfuncÚLessThanÚGreaterThanr   rZ   r=   )r   ÚlhsÚrhsr@   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   Ú_fx_runtime_assert_preservec                 ó¢   — | j                   r| j                   d   S | j                  j                  d| j                  j                  d«      «      S )Nr   ÚcondÚself)r?   ÚkwargsÚgetr   s    r   Ú_assertion_conditionz=insert_deferred_runtime_asserts.<locals>._assertion_conditionû   s9   € Ø�9Š9Ø—9‘9˜Q‘<ÐØ�{‰{�‰˜v t§{¡{§¡°vÓ'>Ó?Ð?r   rm   Úassert_exprc                 óâ  •— dt         g t        f   dt        d z  fd„}d }t        | j                  «      dkD  r| j                  d   }nS| j
                  t        j                  u r| j                  j                  d«      }n| j                  j                  d«      }t        |t        «      r|S t        |t        j                  «      r¡|j                  dk(  r’‰}t        |j
                  t        «      s!t        dt        |j
                  «      › �«      ‚|j
                  j!                  d	«      D ]  }t#        ||«      }Œ t%        |«      r ||«      }|�|S t        |t        «      r|S d
|› d|› d�S )NÚfnr   c                 óD  — t        | dd «      }|�-|j                  dk7  s|j                  dk7  s|j                  dk7  ry h d£}t	        j
                  | «      D �cg c]  }|j                  |vr|‘Œ }}t        |«      dk(  r>|d   j                  dk(  r,t        |d   j                  t        «      r|d   j                  S t        |«      dk(  rP|d   j                  dk(  r>t        |d   j                  t        «      r!|d   j                  dk(  r|d   j                  S y c c}w )	NÚ__code__r   >   ÚNOPÚCACHEÚRESUMEÚEXTENDED_ARGÚCOPY_FREE_VARSrK   ÚRETURN_CONSTrc   Ú
LOAD_CONSTÚRETURN_VALUE)rR   Úco_argcountÚco_posonlyargcountÚco_kwonlyargcountÚdisÚget_instructionsÚopnamerd   r   ÚargvalrO   )rt   ÚcodeÚignored_opnamesÚinstÚinstructionss        r   Ústatic_string_from_callablez`insert_deferred_runtime_asserts.<locals>._assertion_message.<locals>.static_string_from_callable  s!  € Ü˜2˜z¨4Ó0ˆDà�Ø×#Ñ# qÒ(Ø×*Ñ*¨aÒ/Ø×)Ñ)¨QÒ.àòˆOô  ×0Ñ0°Ó4öàØ—;‘; oÑ5ò ðˆLð ô �LÓ! QÒ&Ø  ‘O×*Ñ*¨nÒ<Ü˜|¨A™×5Ñ5´sÔ;à# A‘×-Ñ-Ð-ä�LÓ! QÒ&Ø  ‘O×*Ñ*¨lÒ:Ü˜|¨A™×5Ñ5´sÔ;Ø  ‘O×*Ñ*¨nÒ<à# A‘×-Ñ-Ð-Øùò%s   ÁDrK   ÚmessageÚ
assert_msgÚget_attrrJ   ú.ú(Runtime assertion failed for expression ú
 on node 'ú')r   ÚobjectrO   rd   r?   rN   r6   Ú_checkro   rp   r   r   r5   r9   rP   rQ   ÚsplitrR   Úcallable)	r   rm   rr   rŠ   ÚmsgÚattrÚatomÚ
static_msgr"   s	           €r   Ú_assertion_messagez;insert_deferred_runtime_asserts.<locals>._assertion_message   sB  ø€ ð%	¬H°R¼°ZÑ,@ð %	ÄSÈ4ÁZó %	ðN ˆÜˆt�y‰y‹>˜AÒØ—)‘)˜A‘,‰CØ�[‰[œEŸL™LÑ(Ø—+‘+—/‘/ )Ó,‰Cà—+‘+—/‘/ ,Ó/ˆCä�cœ3ÔØˆJÜ�cœ2Ÿ7™7Ô#¨¯©°*Ò(<ØˆDÜ˜cŸj™j¬#Ô.Ü$Ð'@ÄÀcÇjÁjÓAQÐ@RÐ%SÓTÐTØŸ
™
×(Ñ(¨Ó-ò +�Ü˜t TÓ*‘ð+ä˜Œ~Ù8¸Ó>�
ØÐ)Ø%Ð%Ü˜$¤Ô$Ø�Ø9¸+¸ÀjÐQUÐPVÐVWÐXÐXr   c                 ó  •— | j                   t        j                  t        j                  fv ry| j                   t        j                  j
                  j                  j                  u xr | j                  j                  ‰«      du S ©NT)	rN   r6   r“   Ú_assert_scalarÚopsÚatenÚdefaultr   rp   )r   Úpreserve_runtime_assert_keys    €r   Ú_is_user_runtime_assertz@insert_deferred_runtime_asserts.<locals>._is_user_runtime_assertB  sb   ø€ Ø�;‰;œ5Ÿ<™<¬×)=Ñ)=Ð>Ñ>Øà�K‰Kœ5Ÿ9™9Ÿ>™>×8Ñ8×@Ñ@Ð@ò CØ—	‘	—‘Ð9Ó:¸dÐBð	
r   c           
      óŽ  •— ‰j                  | «      5  ‰j                  t        j                  j                  j
                  j                  | ‰| ||«      f«      }|j                  j                  | j                  «       d|j                  ‰<   d d d «       | j                  «       ‰j                  | «       y # 1 sw Y   Œ,xY wrœ   )Úinserting_beforeÚcall_functionr6   rž   rŸ   r�   r    r   ÚupdateÚreplace_all_uses_withÚ
erase_node)r   rm   rr   Únew_noderš   Úgraphr¡   s       €€€r   Ú_replace_with_aten_assertzBinsert_deferred_runtime_asserts.<locals>._replace_with_aten_assertJ  s¦   ø€ ð ×#Ñ# DÓ)ñ 	>Ø×*Ñ*Ü—	‘	—‘×-Ñ-×5Ñ5ØÑ)¨$°°kÓBÐCóˆHð �M‰M× Ñ  §¡Ô+Ø9=ˆH�M‰MÐ5Ñ6÷	>ð 	×"Ñ" 8Ô,Ø×Ñ˜Õ÷	>ð 	>ús   “A=B;Â;CÚrasc                 ór  •— | D �]$  }|j                   ‰v r‰j                  |j                   «       Œ.|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
  }|r4t        |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)NrK   zinserting runtime assert %s)ÚkeyrB   rC   rD   ©rB   rC   rD   r�   r�   r‘   )r   Úaddrd   r*   ÚnextÚiterÚlogÚdebugÚkeysÚminrO   Ú
setdefaultÚappendÚ	functoolsÚpartialr   rp   r   r¥   r6   rž   rŸ   r�   r    )r¬   ÚraÚfvsÚmissingÚi1Úresr)   rj   rV   r'   ra   Úadded_assertsÚconstrained_unbacked_symbolsrW   r*   r"   rª   r   Úras_by_symbolÚuser_assert_exprss         €€€€€€€€€€€€€€r   Úadd_runtime_assertsz<insert_deferred_runtime_asserts.<locals>.add_runtime_asserts`  sÐ  ø€ Øó 5	+ˆBØ�w‰wÐ+Ñ+Ø×!Ñ! "§'¡'Ô*Øð —‘˜=Ñ(ô ˜Ÿ™×,Ñ,Ó-°Ò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^Ð^_Ð`ðô	÷ð, ×!Ñ! "§'¡'Ö*ñk5	+÷>ð ús   ÆA/H-È-H6	éÿÿÿÿrK   ÚsymintÚcbc                 ó@  •— 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)NrB   rC   rD   r¯   ©Útracerúexpr_to_proxy[%s] = %s)r   r6   ÚSymIntr   r   rZ   r¹   rº   r   rp   r   ÚProxyr³   r´   )rÆ   rÇ   Úsr(   rV   r'   rW   r"   r   r@   rÊ   s      €€€€€€€€r   Úmatch_symbolz5insert_deferred_runtime_asserts.<locals>.match_symbol©  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   rH   z1insert_deferred_runtime_asserts.<locals>.<lambda>Á  s   ø€ °D€ r   c                  ó(   •— ‰ j                  ‰‰«      S r   )Úcreate_size_node©rª   Úir   s   €€€r   rH   z1insert_deferred_runtime_asserts.<locals>.<lambda>Ç  s   ø€  E×$:Ñ$:¸4ÀÓ$C€ r   c                  ó(   •— ‰ j                  ‰‰«      S r   )Úcreate_stride_noderÔ   s   €€€r   rH   z1insert_deferred_runtime_asserts.<locals>.<lambda>Í  s   ø€ ¨×(@Ñ(@ÀÀqÓ(I€ r   c                  ó&   •— ‰ j                  ‰«      S r   )Úcreate_storage_offset_node)rª   r   s   €€r   rH   z1insert_deferred_runtime_asserts.<locals>.<lambda>Ñ  s   ø€  E×$DÑ$DÀTÓ$J€ r   c                  ó4   •— ‰j                   D ]  } | ‰vsŒ y y)NTF)r*   )ÚsymbolrW   Ú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)rP   )r®   rW   Ú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   r¯   zCSE node %s -> %s for expr %srÉ   Údc                 óŽ   •—  ‰‰| j                   j                  «      }t        |t        j                  «      r|j                   S |S r   )r   r   r   r   rÍ   )râ   Úpra   rW   s     €€r   Ú_lower_symint_divisorz>insert_deferred_runtime_asserts.<locals>._lower_symint_divisorY  s3   ø€ Ù)¨-¸¿¹¿¹ÓE˜Ü)3°A´r·x±xÔ)@˜qŸv™vÐGÀaÐGr   )Úlower_symintrË   rÎ   c                 óÎ   •— | ‰j                   ‰j                    ‰‰ fv ry 	 ‰j                  rt        | «      S ‰j                  rt	        | «      S 	 y # t
        t        f$ r Y y w xY wr   )ÚooÚis_intÚintÚis_floatÚfloatÚ	TypeErrorÚOverflowError)rÎ   r-   r@   Úvrs    €€€r   Úconvertz0insert_deferred_runtime_asserts.<locals>.convert©  sk   ø€ Ø §¡¨E¯H©H¨9°f¸v¸gÐ FÑFØ#'ð(Ø!ŸyšyÜ'*¨1£v Ø!Ÿ{š{Ü',¨Q£x ð  +ð  $øô !*¬=Ð9ò (Ù#'ð(ús   ¢A ¹A ÁA$Á#A$r�   r�   r‘   z%deleting unused reified symbol for %s)NNNF)Zr@   Ú(torch._export.passes._node_metadata_hookr'   Ú%torch.fx.experimental.symbolic_shapesr(   r)   r*   r+   r,   Útorch.utils._sympy.numbersr-   Útorch.utils._sympy.referencer.   r/   Útorch.utils._sympy.value_rangesr0   Údeferred_runtime_assertsÚcopyrª   r   ÚproxyÚGraphAppendingTracerÚgraph_code_logr´   r   ÚsetÚnodesr9   r°   r5   Úboolr   r6   rO   Údictr   ÚExprrÍ   r“   r�   rž   rŸ   r    r   rN   r   r    ÚlistÚ	enumerater¤   r   r’   r   r7   Úsizer	   ÚstrideÚstorage_offsetÚpopr¨   Úusersrp   r¹   rº   r   r§   r³   r=   ÚlogicÚboolalgr[   Úsym_constrain_rangeÚsym_constrain_range_for_sizeÚitemsr¸   rÌ   rê   Ú_resolve_unbacked_bindingÚtupleÚvar_to_rangeré   ÚupperÚsysÚmaxsizeÚlowerÚ _default_unspecified_value_rangeÚissubsetrì   r¥   rZ   )Dr"   r#   r$   r%   r+   r,   r.   r/   r0   ÚplaceholdersÚfirst_non_placeholderrA   Úassert_targetsrq   r¢   r«   rm   rr   rÄ   rü   r   rÏ   ÚtrÎ   r;   rÝ   rá   Ú	hash_nodeÚdefsrÞ   Úkeypathrå   Úi0r¬   rð   Úmin_valÚge_exprÚgeÚmax_valÚle_exprÚler   rø   r`   rš   r(   r)   rj   rV   r'   ra   rÀ   rÁ   rW   r*   rª   rÕ   r-   r   r¡   rÂ   rà   rÜ   r@   rÊ   rÃ   rU   rï   sD   `                                          @@@@@@@@@@@@@@@@@@@@@@@@@r   r   r   6   sä  ÿÿÿù€ óR å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ð#Ü˜EŸJ™J¬¯©Ð0Ñ1ð#Ø9>¿¹ð#ä	�‰ö#ð4	
¨ð 	
¼õ 	
ô 	�‰Ü×ÑÜ�	‰	�‰×%Ñ%×-Ñ-ð€Nð
 #@Ðð@¤2§7¡7ð @¬só @ð
@YÜ�g‰gð@YÜ ð@YÜ/7¸Ñ/Eð@Yä	õ@YðD
¤b§g¡gð 
´$õ 
ðÜ�g‰gðÜ ðÜ/7¸Ñ/Eðà	÷ô *-«ÐØ—‘ò 7ˆØ�;‰;˜.Ò(Ñ-DÀTÕ-JÙ'¨Ó-ˆDÜ˜$¤§¡Õ(Ü*¨4Ó0�ØÑ*Ø%×)Ñ)¨+Õ6ð7ð6+¤ mÑ!4ð 6+¸÷ 6+÷ 6+ò 6+ôp �—‘Ó€EÜ˜U 3 B˜ZÓ(ó E)‰ˆˆ4ð ×#Ñ#Ø ¨Ñ4ˆE�!�a‘%ŠLÐ:Oó
ñ A	)ð ˜Ñ$Ü&8¸Ó&>Ð>�]ÐKðQ¬ð Q´X¸bÄ"Ç'Á'¸kÑ5Jð QÈt÷ Qô Qñ0 ˜]«LÔ9ä =Ð0˜a´%·,±,Ô?Ü )¨!¯&©&«(Ó 3ò ™˜˜1Ù$ØÝCõðô
 )¨Ô+Ü$-¨a¯h©h«jÓ$9ò ™D˜A˜qÙ(Ø !Ý Iõðñ
 %Ø×,Ñ,Ó.ÜJôð Ð,Ò,Ù# M×$5Ñ$5°d¸BÓ$?Ô@ð �{‰{˜nÒ,Ù+¨DÓ1�Ü4>¸tÄRÇWÁWÔ4Mœl¨4Ô0ÐSW�Ø˜4’<Ø�CØ—H‘H×'Ñ'¨Ô-Ü! #¤r§w¡wÕ/¸¿	º	ØŸ™×+Ñ+¨CÕ0á.¨tÔ4ØŸ;™;¬e¯i©i¯n©n×.KÑ.K×.SÑ.SÑSÙ5°d¸DÀ+ÔNØ&Ð2Ø)×-Ñ-¨kÕ:à#Ð/Ø'¨=Ñ8Ø'¨=Ñ8à"˜ØŸ™×+Ñ+¨DÔ1Ü% c¬2¯7©7Ô3¸C¿IºIØŸH™H×/Ñ/°Õ4à&Ð2Ø)×-Ñ-¨kÔ:ð
 —‘˜=Ó(Ü!-¨dÓ!3Ð3�XÑ@ð!´4ö !ñ .GØ˜tŸy™yŸ}™}Ð-@À"ÓEó.Ð*ð!´4ö !ð  Ñ-á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´·±ð HÄ"Ç'Á'ÌCÁ-ö Hð  Ò-Ù4ØÜ%×-Ñ-Ø 3Ø,0¯I©I¯M©M¸-Ó,HØ04·	±	·±Ð>OÓ0Pð (,§y¡y§}¡}°XÓ'>ôó
ñ ô 02¯x©xØ %× ?Ñ ?Ø$(Ü$)¨'£NØ1Fð !@ó !"ð
 (.ô0˜M¨!Ñ,÷ô& Ÿ	™	Ð":¸A¸}ÈQÑ?OÖPð;Qð> ó k)�Ø#×'Ñ'¨¨BÓ/�ðP Ð5Ñ5Øà×+Ñ+¨BÑ/�Ø—9’9 §¡¬S¯[©[¸1©_Ò!<ñ % R§X¡X¨vÓ6�BØ ×AÑAÓC×LÑLÈRÕPð

$¤3ð 
$¬3´©;¸Ñ+=÷ 
$ñ 1ØÜ!×)Ñ)Ø/Ø(,¯	©	¯©°mÓ(DØ,0¯I©I¯M©MÐ:KÓ,Lð $(§9¡9§=¡=°Ó#:ôó
ñ &;ñ (/¨r¯x©xÓ'8Ð8˜GÐEØ&(¨G¡m˜GØ&Ð*;Ñ;Ø -× 1Ñ 1°'Õ :á%2°=À'Ó%J×%OÑ%O Ø %× 3Ñ 3Ü$)§I¡I§N¡N×$AÑ$A×$IÑ$Ià(*Ø*RÐSZÐR[Ð[eÐfhÐeiÐijÐ(kð%&ô!"ð !.× 1Ñ 1°'Ô :Ù'.¨r¯x©xÓ'8Ð8˜GÐEØ&(¨G¡m˜GØ&Ð*;Ñ;Ø -× 1Ñ 1°'Õ :á%2°=À'Ó%J×%OÑ%O Ø %× 3Ñ 3Ü$)§I¡I§N¡N×$AÑ$A×$IÑ$Ià(*Ø*RÐSZÐR[Ð[eÐfhÐeiÐijÐ(kð%&ô!"ð !.× 1Ñ 1°'Ô :÷M&;ðP -×0Ñ0°Ô4Ù# CÖ(ñWk)÷mA	)ñ A	)ð	E)ðP
 %×*Ñ*Ó,ò ,‰ˆˆeä�t˜UŸ\™\Õ*Ø—
‘
—‘ Ó.Ø—J‘J×$Ó$ä�I‰IÐ=¸tÔDØ�H‰H×Ñ §
¡
Õ+ñ,÷Cñ ú÷|ñ ú÷n&;ð &;ú÷qA	)ñ A	)ús_   Ï	M0s<Ü9sÝF4s<ã;A+s<å&6s#	æD9s<ëD5s0	ð
$s<ós ós<ó#s-ó(s<ó0s9ó5s<ó<t	)F),r‚   r¹   Úloggingr  Úcollections.abcr   Útypingr   r   r   r@   rò   r   r6   Útorch.utils._pytreeÚutilsÚ_pytreerL   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ú   r5   rO   r   r    rý   r   rÑ   r   r   ú<module>r4     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   