§
    Ÿ²ÅjÉr  ã                   óº  — 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j#         $                    e!d¦  «        Z%dej&        dee'         fd„Z(dej&        ded         fd„Z) ed¬¦  «        	 ddedede'de*ddf
d„¦   «         Z+dS )é    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                 ó^   — d| j         v r| j         d         S d| j         v r| j         d         S dS )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    úOC:\Projects\Historical\venv\Lib\site-packages\torch/fx/passes/runtime_assert.pyÚ_get_example_valuer   "   s=   € ð
 ˜$œ)Ð#Ð#ØŒy˜Ô)Ð)Ø	�$”)Ð	Ð	ØŒy˜ÔÐàˆtó    ú
sympy.Exprc                 óf   — t          | ¦  «        }t          |t          ¦  «        r|j        j        S d S ©N)r   Ú
isinstancer   r   Úexpr)r   r   s     r   Ú_get_sym_valr!   /   s0   € Ý
˜TÑ
"Ô
"€CÝ�#•|Ñ$Ô$ð ØŒxŒ}ÐØˆ4r   T)Úis_backward_compatibleFÚ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                             ¦   «         Š7‰ j        Š3t,          j                             ‰3¦  «        Š;t2                               dt7          d	|› �‰ d
¬¦  «        ¦  «         i Š0t9          ¦   «         }d}	‰3j        D ]&Š6‰6j        dk    r‰6}	 n|                     ‰6¦  «         Œ'dt,          j         dtB          fˆ(ˆ:fd„}
dŠ<‰3j        D ]Š6d‰6j"        v rdŠ< nd‰6j"        v r 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‰3 *                    ‰6|vr|‰4dz            n|	¦  «        5  ‰6|v rçtW          ‰6¦  «        x}�Öˆ*ˆ+ˆ0ˆ ˆ:ˆ;fd„} ||ˆ6fd„¦  «         tY          |x}tF          j-        ¦  «        r¡tS          | .                    ¦   «         ¦  «        D ]\  Š4} ||ˆ3ˆ4ˆ6fd„¦  «         Œt_          |¦  «        sZtS          | 0                    ¦   «         ¦  «        D ]\  Š4} ||ˆ3ˆ4ˆ6fd„¦  «         Œ || 1                    ¦   «         ˆ3ˆ6fd „¦  «         ‰6|	k    r |‰7 2                    dg ¦  «        ¦  «         ‰6j3        tF          j4        tF          j5        j6        j7        j8        fv r´‰6j9        d         d
k    s+tu          ‰6j9        d         ¦  «        x}‰0v s|�n ‰)|¦  «        rc‰6j9        d         }‰ j         ;                    ‰6¦  «         tY          |t,          j         ¦  «        r!|j<        s‰ j         ;                    |¦  «         n‰-                     |¦  «         ‰6j        dk    �rŠtu          ‰6¦  «        xŠ9��xˆ0ˆ9fd!„} ||‰6j"         =                    d"i ¦  «        ¦  «        Š8‰8€J ‚ˆ0ˆ8fd#„}‰9‰0v s |
‰6¦  «        rñ |¦   «         sç |¦   «         sÝ |
‰6¦  «        rx ‰+‰ t}          j?        ‰*‰6j"         =                    d¦  «        ‰6j"         =                    d¦  «        ¬$¦  «        ¦  «        5   ‰,‰0‰9¦  «        ‰0‰9<   ddd¦  «         n# 1 swxY w Y   ‰0‰9         j@        }‰6 A                    |¦  «         ‰ j         ;                    ‰6¦  «         t„                               d%‰6|‰9¦  «         nC‰9‰0vr?tY          ‰9‰:jC        ‰:jD        jE        jF        f¦  «        st-          jG        ‰6‰;¬&¦  «        ‰0‰9<   ‰6j3        tF          j5        j6        jH        j8        tF          j5        j6        jI        j8        fv r‰ j         ;                    ‰6¦  «         g } ||‰6j"         =                    d"¦  «        ¦  «        x}r§| J                    ¦   «         D ]’\  }}| K                    |¦  «         ˆ$ˆ%ˆ&ˆ'ˆ.ˆ2ˆ3fd'„Š2|‰0vri ‰+‰ ‰*¦  «        5  t-          jG         ‰2‰6|¦  «        ‰;¬&¦  «        ‰0|<   ddd¦  «         n# 1 swxY w Y   t„                               d(|‰0|         ¦  «         Œ“|D �]“}‰7 2                    |g ¦  «        }|‰/v rŒ||jL        v rj|r<‰3 M                    tF          j5        j6        jI        j8        ‰0|         j@        f¦  «         n,‰3 M                    tF          jN        ‰0|         j@        f¦  «         |jO        |         }|jP        r)|jQ        t¤          jS        dz
  k    r ||jT        ‰5¦  «        }| U                    ¦   «          V                    |¦  «        �s}ˆ5fd)„}‰0|         j@        j3        ‰.k    �ra ‰+‰ t}          j?        ‰*‰6j"         =                    d¦  «        ‰6j"         =                    d¦  «        ¬$¦  «        ¦  «        5   ||jT        ¦  «        x}�j ‰,‰0||k    ¦  «        j@        }‰3 M                    tF          j5        j6        j7        j8        |d*||k    › d+|› d,�f¦  «         ‰-                     ||k    ¦  «          ||jQ        ¦  «        x}�j ‰,‰0||k    ¦  «        j@        } ‰3 M                    tF          j5        j6        j7        j8        | d*||k    › d+| › d,�f¦  «         ‰-                     ||k    ¦  «         ddd¦  «         n# 1 swxY w Y   ‰/                     |¦  «          ||¦  «         �Œ•	 ddd¦  «         n# 1 swxY w Y   �ŒŠ‰0 J                    ¦   «         D ]p\  }!}"tY          |!‰:jW        ¦  «        rV|"j@        j        dk    rF|"j@        j<        s:t„                               d-|!¦  «         ‰ j         ;                    |"j@        ¦  «         ŒqdS )/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o?t          |‰j        ¦  «         o) ‰|¦  «         o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  — | ]\}t          |t          j        ¦  «        o=t          t          |¦  «        t          j        t          j        f¦  «        o
|j        d k    V — Œ]dS )r6   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>’   sw   è è € ð ð ð õ ˜3¥¤Ñ(Ô(ð ,ÝÕ1°#Ñ6Ô6½¼ÅuÄzÐ8RÑSÔSð,à”F˜mÒ+ðð ð ð ð ð r   )r!   r   ÚNumberÚanyÚargs)r   r   r)   Úsympys     €€r   Ú _is_intermediate_tensor_sym_callzIinsert_deferred_runtime_asserts.<locals>._is_intermediate_tensor_sym_callˆ   s‚   ø€ õ ! Ñ&Ô&Ð&ˆS¨tÐ3ð 	Ý˜s E¤LÑ1Ô1Ð1ð	ð 8Ð7¸Ñ<Ô<Ð<ð	õ ð ð ð  œ9ð	ñ ô ñ ô ð	
r   r   r   Ústack_traceÚnn_module_stackc                 óº   •— t          j        d„ | j        ¦  «        }	  | j        |Ž | j        ‰<   n# t
          $ r Y nw xY w|�
|| j        d<   |�|| j        d<   d S d S )Nc                 ób   — t          | t          j        j        ¦  «        rt	          | ¦  «        n| S r   )r   r:   r	   r9   r   )r?   s    r   ú<lambda>zNinsert_deferred_runtime_asserts.<locals>._node_metadata_hook.<locals>.<lambda>©   s+   € Ý+5°c½5¼8¼=Ñ+IÔ+IÐRÕ" 3Ñ'Ô'Ð'Èsð r   rF   rG   )ÚpytreeÚtree_maprC   Útargetr   ÚNotImplementedError)r   rF   rG   Ú	fake_argsÚval_keys       €r   Ú_node_metadata_hookz<insert_deferred_runtime_asserts.<locals>._node_metadata_hook£   s›   ø€ õ
 ”Oðð ð ŒIñ	
ô 
ˆ	ð	Ø!, ¤¨iÐ!8ˆDŒI�gÑÐøÝ"ð 	ð 	ð 	ð ˆDð		øøøð
 Ð"Ø'2ˆDŒI�mÑ$ØÐ&Ø+:ˆDŒIÐ'Ñ(Ð(Ð(ð 'Ð&s   ž1 ±
>½>c                 óä   •‡ — ddl m}m}m} ddlm} ddlm}m} |‰ v r‰ |         S t          |||||f¦  «        r |‰‰ |¦  «        S  |‰ˆ	ˆ fd„|j
        D ¦   «         |¦  «        ‰ |<   ‰ |         S )Nr   )ÚIntegerrA   ÚSymbol)ÚBooleanAtom)Ú_run_sympy_handlerÚsympy_interpc                 ó(   •— g | ]} ‰‰|¦  «        ‘ŒS © rY   )r>   r?   Ú_sympy_interpÚexpr_to_proxys     €€r   ú
<listcomp>zJinsert_deferred_runtime_asserts.<locals>._sympy_interp.<locals>.<listcomp>Ñ   s%   ø€ ÐDÐDÐD°3ˆ]ˆ]˜=¨#Ñ.Ô.ÐDÐDÐDr   )rD   rS   rA   rT   Úsympy.logic.boolalgrU   Útorch.utils._sympy.interprV   rW   r   rC   )
r[   r    rS   rA   rT   rU   rV   rW   ÚAnalysisrZ   s
   `       €€r   rZ   z6insert_deferred_runtime_asserts.<locals>._sympy_interpÀ   sÛ   øø€ à1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ø3Ð3Ð3Ð3Ð3Ð3àNÐNÐNÐNÐNÐNÐNÐNð �=Ð Ð Ø  Ô&Ð&å�d˜W f¨f°kÐBÑCÔCð 	?Ø�< ¨-¸Ñ>Ô>Ð>ð 1Ð0ØØDÐDÐDÐDÐD¸$¼)ÐDÑDÔDØñ
ô 
ˆ�dÑð
 ˜TÔ"Ð"r   r    r   c                 ó  •— t          | j        ¦  «        dk    s| j        ‰j        ‰j        fvrdS | j        \  }}t          |‰j        ¦  «        rt          |‰j        ¦  «        p)t          |‰j        ¦  «        ot          |‰j        ¦  «        S )Né   F)ÚlenrC   ÚfuncÚLessThanÚGreaterThanr   rT   rA   )r    ÚlhsÚrhsrD   s      €r   Ú_is_bound_expr_for_symbolzBinsert_deferred_runtime_asserts.<locals>._is_bound_expr_for_symbolÖ   sˆ   ø€ õ ˆtŒy‰>Œ>˜QÒÐ $¤)°E´NÀEÔDUÐ3VÐ"VÐ"VØ�5Ø”9‰ˆˆSÝ˜3 ¤Ñ-Ô-ÐOµ*¸SÀ%Ä,Ñ2OÔ2Oð 
Ý�s˜EœLÑ)Ô)ÐK­j¸¸e¼lÑ.KÔ.Kð	
r   c                 ó(  •— | D �]Œ}|j         ‰v set          |j         j        ¦  «        dk    r8t          t	          |j         j        ¦  «        ¦  «        ‰v r ‰|j         ¦  «        s ‰|j         ¦  «        rŒrt
                               d|j         ¦  «          ‰|j         ¦  «        }|‰                     ¦   «         z
  }|r@t          |t          ¬¦  «        }‰ 
                    |g ¦  «                             |¦  «         Œû ‰	‰‰¦  «        5   ‰
‰|j         ¦  «        j        }‰                     t          j        j        j        j        |d|j         › d|› d�f¦  «         d d d ¦  «         n# 1 swxY w Y   ‰                     |j         ¦  «         �ŒŽd S )Né   zinserting runtime assert %s)Úkeyú(Runtime assertion failed for expression ú
 on node 'ú')r    rb   r.   ÚnextÚiterÚlogÚdebugÚkeysÚminÚstrÚ
setdefaultÚappendr   Úcall_functionr:   ÚopsÚatenÚ_assert_scalarÚdefaultÚadd)ÚrasÚraÚfvsÚmissingÚi1Úresr)   rh   rQ   r(   rZ   Úadded_assertsÚconstrained_unbacked_symbolsr[   r.   r#   ÚgraphÚras_by_symbols         €€€€€€€€€€€€r   Úadd_runtime_assertsz<insert_deferred_runtime_asserts.<locals>.add_runtime_assertsá   sÿ  ø€ Øð '	+ñ '	+ˆBð ”˜=Ð(Ð(õ ˜œÔ,Ñ-Ô-°Ò2Ð2Ý�T "¤'Ô"6Ñ7Ô7Ñ8Ô8Ð<XÐXÐXØ1Ð1°"´'Ñ:Ô:ð Yð 7Ð6°r´wÑ?Ô?ð	 Yð å�IŠIÐ3°R´WÑ=Ô=Ð=à�,˜rœwÑ'Ô'ˆCØ˜M×.Ò.Ñ0Ô0Ñ0ˆGØð +Ý˜¥cÐ*Ñ*Ô*�ð ×(Ò(¨¨RÑ0Ô0×7Ò7¸Ñ;Ô;Ð;Ð;ð -Ð,¨RÐ1DÑEÔEð 
ð 
Ø'˜-¨°r´wÑ?Ô?ÔD�CØ×'Ò'Ýœ	œÔ5Ô=ð  Ø`ÀrÄwÐ`Ð`ÐZ]Ð`Ð`Ð`ðñ	ô ð ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð ×!Ò! "¤'Ñ*Ô*Ð*Ñ*ðO'	+ð '	+s   ÄAE+Å+E/	Å2E/	éÿÿÿÿrj   c                 ó˜  •— t          | t          j        ¦  «        r¨t          | j        t          ¦  «        r�t          | j        j        x}‰j        ¦  «        rq|‰vro ‰‰‰¦  «        5  t          j         |¦   «         ‰¬¦  «        ‰|<   d d d ¦  «         n# 1 swxY w Y   t           
                    d|‰|         ¦  «         d S d S d S d S d S )N©Útracerúexpr_to_proxy[%s] = %s)r   r:   ÚSymIntr   r   r    rT   r	   ÚProxyrq   rr   )	ÚsymintÚcbÚsrQ   r(   r[   r#   rD   rŒ   s	      €€€€€€r   Úmatch_symbolz5insert_deferred_runtime_asserts.<locals>.match_symbol  sB  ø€ å" 6­5¬<Ñ8Ô8ðQå& v¤{µGÑ<Ô<ðQõ '¨F¬KÔ,<Ð'< q¸e¼lÑKÔKðQð  ]Ð2Ð2à4Ð4°RÐ9LÑMÔMð Mð MÝ/1¬x¸¸¹¼ÀVÐ/LÑ/LÔ/L˜M¨!Ñ,ðMð Mð Mñ Mô Mð Mð Mð Mð Mð Mð Møøøð Mð Mð Mð MåŸ	š	Ð":¸A¸}ÈQÔ?OÑPÔPÐPÐPÐPðQð Qð Qð Qð Qð Qð 3Ð2s   Á'"BÂBÂBc                  ó   •— ‰ S r   rY   r   s   €r   rJ   z1insert_deferred_runtime_asserts.<locals>.<lambda>'  s   ø€ °D€ r   c                  óf   •— ‰                       t          j        j        j        j        ‰‰f¦  «        S r   )rx   r:   ry   rz   Úsym_sizeÚint©r†   Úir   s   €€€r   rJ   z1insert_deferred_runtime_asserts.<locals>.<lambda>,  s*   ø€  E×$7Ò$7Ý %¤	¤Ô 7Ô ;¸dÀA¸Yñ%ô %€ r   c                  óf   •— ‰                       t          j        j        j        j        ‰‰f¦  «        S r   )rx   r:   ry   rz   Ú
sym_strider—   r˜   s   €€€r   rJ   z1insert_deferred_runtime_asserts.<locals>.<lambda>4  s*   ø€ ¨×(;Ò(;Ý$)¤I¤NÔ$=Ô$AÀDÈ!À9ñ)"ô )"€ r   c                  ód   •— ‰                       t          j        j        j        j        ‰f¦  «        S r   )rx   r:   ry   rz   Úsym_storage_offsetr|   )r†   r   s   €€r   rJ   z1insert_deferred_runtime_asserts.<locals>.<lambda>:  s(   ø€  E×$7Ò$7Ý %¤	¤Ô AÔ IÈDÈ7ñ%ô %€ r   c                  ó*   •— ‰j         D ]	} | ‰vr dS Œ
dS ©NTF)r.   )Úsymbolr[   Úsym_exprs    €€r   Úhas_new_untracked_symbolszBinsert_deferred_runtime_asserts.<locals>.has_new_untracked_symbolsa  s1   ø€ Ø"*Ô"7ð (ð (˜Ø!¨Ð6Ð6Ø#' 4 4ð 7à ˜5r   Úunbacked_bindingsc                  óD   •— ‰                      ¦   «         D ]	} | ‰vr dS Œ
dS rŸ   )rs   )rk   r[   Úresolved_unbacked_bindingss    €€r   Úhas_new_unbacked_bindingszBinsert_deferred_runtime_asserts.<locals>.has_new_unbacked_bindingsp  s:   ø€ Ø9×>Ò>Ñ@Ô@ð (ð (˜Ø mÐ3Ð3Ø#' 4 4ð 4à ˜5r   )rF   rG   zCSE node %s -> %s for expr %sr‹   c                 óä  •— |dk    r| S t          |¦  «        dk    �r5t          |d         ‰¦  «        �rt          |d         t          j        ¦  «        rþ|d         j        dk    rN ‰‰                     t          j        j        j	        j
        | |d         j        f¦  «        |dd …         ¦  «        S |d         j        dk    rN ‰‰                     t          j        j        j        j
        | |d         j        f¦  «        |dd …         ¦  «        S  ‰‰                     |d         j        | |d         j        f¦  «        |dd …         ¦  «        S t          |d         ‰¦  «        r4 ‰‰                     |d         j        | f¦  «        |dd …         ¦  «        S t          |d         t          j        ¦  «        r? ‰‰                     t          j        | |d         j        f¦  «        |dd …         ¦  «        S t          |d         ‰¦  «        r) ‰‰                     ‰| f¦  «        |dd …         ¦  «        S t          |d         ‰¦  «        r? ‰‰                     t          j        | |d         j        f¦  «        |dd …         ¦  «        S t          |d         ‰¦  «        r: ‰‰                     t$          | |d         j        f¦  «        |dd …         ¦  «        S t)          d|› �¦  «        ‚)NrY   ra   r   rj   ÚsizeÚstridezunrecognized keypath )rb   r   rK   ÚSequenceKeyr%   rx   r:   ry   rz   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°  sE  ø€ Ø" bš=˜=Ø#'˜Kå ™LœL¨AÒ-Ñ-Ý *¨7°1¬:°}Ñ EÔ Eñ .å *¨7°1¬:µvÔ7IÑ JÔ Jð .ð  ' qœzœ°&Ò8Ð8Ø') rØ$)×$7Ò$7Ý(-¬	¬Ô(?Ô(CØ)-¨w°q¬z¬~Ð(>ñ%&ô %&ð %,¨A¨B¨B¤Kñ("ô ("ð !"ð  ' qœzœ°(Ò:Ð:Ø') rØ$)×$7Ò$7Ý(-¬	¬Ô(AÔ(EØ)-¨w°q¬z¬~Ð(>ñ%&ô %&ð %,¨A¨B¨B¤Kñ("ô ("ð !"ð $& 2Ø %× 1Ò 1Ø$+¨A¤J¤O°d¸GÀA¼J¼NÐ5Kñ!"ô !"ð !(¨¨¨¤ñ	$ô $ð õ (¨°¬
°MÑBÔBð "TØ#% 2Ø %× 1Ò 1°'¸!´*´/ÀDÀ7Ñ KÔ KÈWÐUVÐUWÐUWÌ[ñ$ô $ð õ (¨°¬
µFÔ4FÑGÔGð TØ#% 2Ø %× 3Ò 3Ý$,Ô$4°t¸WÀQ¼Z¼^Ð6Lñ!"ô !"ð !(¨¨¨¤ñ	$ô $ð õ (¨°¬
°MÑBÔBð TØ#% 2Ø %× 3Ò 3Ø$DÀtÀgñ!"ô !"ð !(¨¨¨¤ñ	$ô $ð õ (¨°¬
°KÑ@Ô@ð Tà#% 2Ø %× 3Ò 3Ý$,Ô$5¸¸gÀa¼jÔ>PÐ7Qñ!"ô !"ð !(¨¨¨¤ñ	$ô $ð õ (¨°¬
°NÑCÔCð TØ#% 2Ø %× 3Ò 3Ý$+¨d°G¸A´JÔ4IÐ-Jñ!"ô !"ð !(¨¨¨¤ñ	$ô $ð õ #1Ð1RÈÐ1RÐ1RÑ"SÔ"SÐSr   r�   c                 óX   •— | ‰‰ fv rd S 	 t          | ¦  «        S # t          $ r Y d S w xY wr   )r—   Ú	TypeError)r’   r1   s    €r   Úconvertz0insert_deferred_runtime_asserts.<locals>.convert:  sL   ø€ Ø ¨&¨Ð 1Ð1Ð1Ø#' 4ð(Ý#& q¡6¤6˜MøÝ(ð (ð (ð (Ø#' 4 4ð(øøøs   Œ ›
)¨)rl   rm   rn   z%deleting unused reified symbol for %s)NN)XrD   Ú(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   r3   Útorch.utils._sympy.value_rangesr4   Údeferred_runtime_assertsÚcopyr†   r	   ÚproxyÚGraphAppendingTracerÚgraph_code_logrr   r   ÚsetÚnodesr=   r}   r9   Úboolr   r:   r   ru   r   r   ÚlistÚ	enumerateÚinserting_beforer   r   r;   r¨   r
   r©   Ústorage_offsetÚpoprM   Ú_checkry   rz   r{   r|   rC   r!   Ú
erase_nodeÚusersÚgetÚ	functoolsÚpartialr   Úreplace_all_uses_withrq   rA   ÚlogicÚboolalgrU   r�   Úsym_constrain_rangeÚsym_constrain_range_for_sizeÚitemsrw   Ú	size_likerx   Ú_check_is_sizeÚvar_to_rangeÚis_intÚupperÚsysÚmaxsizeÚlowerÚ _default_unspecified_value_rangeÚissubsetrT   )=r#   r$   r%   r&   r0   r2   r3   r4   ÚplaceholdersÚfirst_non_placeholderrE   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)   rh   rQ   r(   rZ   r„   r+   r…   r[   r.   rµ   r†   r™   r1   r   r‡   r¥   r¡   rD   rŒ   rP   s=   `                                  @@@@@@@@@@@@@@@@@@@@@@@@@@r   r   r   6   së  øøøøøøøøøøøøøøøøøøøøøøøøøøø€ ðP €L€L€LàPÐPÐPÐPÐPÐPð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 2Ð1Ð1Ð1Ð1Ð1ðð ð ð ð ð ð ð ð <Ð;Ð;Ð;Ð;Ð;ð Ô6×;Ò;Ñ=Ô=€MØŒH€EÝŒX×*Ò*¨5Ñ1Ô1€FÝ×ÒØÝØ9°4Ð9Ð9¸2Àtð	
ñ 	
ô 	
ñô ð ð 13€MÝ‘5”5€LØ ÐØ”ð #ð #ˆØŒ7�mÒ#Ð#Ø$(Ð!ØˆEà×Ò˜TÑ"Ô"Ð"Ð"ð
­r¬wð 
½4ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð& €GØ”ð ð ˆØ˜dœiÐ'Ð'Ø%ˆGØˆEØ�d”iÐÐØˆEð  ð
 &*Ø48ð;ð ;ÝŒhŒmð;å�c”]ð;õ "¥$¥s­C x¤.Ô1ð;ð 
ð	;ð ;ð ;ð ;ð ;ð ;õ0 &)¡U¤U€MÝ69±e´eÐ à*0ÐVÐ&Ð&Ð6V€Hð#ð #ð #ð #ð #ð #ð,	
¨ð 	
½ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð(+ð (+ð (+ð (+ð (+ð (+ð (+ð (+ð (+ð (+ð (+ð (+ð (+ð (+ð (+ð (+õT �”ÑÔ€EÝ˜U 3 B 3œZÑ(Ô(ð [)ñ [)‰ˆˆ4ð ×#Ò#Ø ¨Ð4Ð4ˆE�!�a‘%ŒLˆLÐ:Oñ
ô 
ð W	)ð W	)ð ˜Ð$Ð$Ý&8¸Ñ&>Ô&>Ð>�]ÐKð	Qð 	Qð 	Qð 	Qð 	Qð 	Qð 	Qð 	Qð 	Qð 	Qð �˜]¨L¨L¨L¨LÑ9Ô9Ð9Ý =Ð0˜aµ%´,Ñ?Ô?ð Ý )¨!¯&ª&©(¬(Ñ 3Ô 3ð ð ™˜˜1Ø$˜Øðð ð ð ð ð ñô ð ð õ )¨Ñ+Ô+ð Ý$-¨a¯hªh©j¬jÑ$9Ô$9ð ð ™D˜A˜qØ(˜LØ !ð!"ð !"ð !"ð !"ð !"ð !"ñô ð ð ð %˜Ø×,Ò,Ñ.Ô.ðð ð ð ð ñô ð ð Ð,Ò,Ð,Ø#Ð# M×$5Ò$5°d¸BÑ$?Ô$?Ñ@Ô@Ð@ð Œ{Ý”Ý”	”Ô-Ô5ðð ð ð
 ”I˜a”L DÒ(Ð(Ý'3°D´I¸a´LÑ'AÔ'AÐA˜ÀmÐSÐSà#Ð/Ø5Ð5°kÑBÔBð 0ð œ) Aœ,�CØ”H×'Ò'¨Ñ-Ô-Ð-Ý! #¥r¤wÑ/Ô/ð 1¸¼	ð 1Øœ×+Ò+¨CÑ0Ô0Ð0øà!×%Ò% kÑ2Ô2Ð2ð
 ”˜=Ò(Ñ(Ý!-¨dÑ!3Ô!3Ð3�XÑ@ð!ð !ð !ð !ð !ð !ð .GÐ-FØ˜tœyŸ}š}Ð-@À"ÑEÔEñ.ô .Ð*ð 2Ð=Ð=Ð=ð!ð !ð !ð !ð !ð !ð  Ð-Ð-à8Ð8¸Ñ>Ô>ð .ð !:Ð 9Ñ ;Ô ;ð	 .ð 4Ð3Ñ5Ô5ð .ð 8Ð7Øñô ð ]ð 5Ð4ØÝ%Ô-Ø 3Ø,0¬I¯MªM¸-Ñ,HÔ,HØ04´	·²Ð>OÑ0PÔ0Pðñ ô ñô ð ]ð ]ð 7D°mÀMÐS[Ñ6\Ô6\˜M¨(Ñ3ð]ð ]ð ]ñ ]ô ]ð ]ð ]ð ]ð ]ð ]ð ]øøøð ]ð ]ð ]ð ]ð !.¨hÔ 7Ô <�IØ×.Ò.¨yÑ9Ô9Ð9Ø”H×'Ò'¨Ñ-Ô-Ð-Ý—I’IØ7¸¸yÈ(ñô ð ð ð
  ]Ð2Ð2½:Ø˜uœ|¨U¬[Ô-@Ô-LÐMñ<ô <Ð2õ /1¬h°tÀFÐ.KÑ.KÔ.K�M (Ñ+ð Œ{Ý”	”Ô2Ô:Ý”	”Ô;ÔCðð ð ð ”×#Ò# DÑ)Ô)Ð)àˆDð %>Ð$=Ø˜4œ9Ÿ=š=Ð)<Ñ=Ô=ñ%ô %ð Ð ð OQð #4×"9Ò"9Ñ";Ô";ð LQð LQ‘J�A�wØ—K’K ‘N”N�Nð@Tð @Tð @Tð @Tð @Tð @Tð @Tð @Tð @Tð @Tð @TðD  Ð-Ð-Ø4Ð4°RÐ9LÑMÔMð ð Ý/1¬xØ "  4¨Ñ 1Ô 1¸&ð0ñ 0ô 0˜M¨!Ñ,ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ Ÿ	š	Ð":¸A¸}ÈQÔ?OÑPÔPÐPøàð n)ñ n)�Ø#×'Ò'¨¨BÑ/Ô/�ðP Ð5Ð5Ð5Øà˜Ô,Ð,Ð,Øð Ø×+Ò+Ý!œIœNÔGÔOØ*¨2Ô.Ô3Ð5ñô ð ð ð
 ×+Ò+Ý!Ô0°=ÀÔ3DÔ3IÐ2Kñô ð ð Ô+¨BÔ/�Ø”9ð 7 ¤­S¬[¸1©_Ò!<Ð!<ð %˜ R¤X¨vÑ6Ô6�BØ ×AÒAÑCÔC×LÒLÈRÑPÔPñ /Að
(ð (ð (ð (ð (ð & bÔ)Ô.Ô5Ø;ò<ñ <ð 5Ð4ØÝ%Ô-Ø 3Ø,0¬I¯MªM¸-Ñ,HÔ,HØ04´	·²Ð>OÑ0PÔ0Pðñ ô ñô ð Að Að ,3¨7°2´8Ñ+<Ô+<Ð < ÐIØ%2 ]°=À"ÈÂ-Ñ%PÔ%PÔ%U Ø %× 3Ò 3Ý$)¤I¤NÔ$AÔ$Ià(*Ø(qÐSUÐY`ÒS`Ð(qÐ(qÐlnÐ(qÐ(qÐ(qð%&ñ!"ô !"ð !"ð !.× 1Ò 1°"¸²-Ñ @Ô @Ð @Ø+2¨7°2´8Ñ+<Ô+<Ð < ÐIØ%2 ]°=À"ÈÂ-Ñ%PÔ%PÔ%U Ø %× 3Ò 3Ý$)¤I¤NÔ$AÔ$Ià(*Ø(qÐSUÐY`ÒS`Ð(qÐ(qÐlnÐ(qÐ(qÐ(qð%&ñ!"ô !"ð !"ð !.× 1Ò 1°"¸²-Ñ @Ô @Ð @ð7Að Að Añ Aô Að Að Að Að Að Að Aøøøð Að Að Að Að: -×0Ò0°Ñ4Ô4Ð4Ø#Ð# CÑ(Ô(Ð(Ñ(ð]n)ðSW	)ð W	)ð W	)ñ W	)ô W	)ð W	)ð W	)ð W	)ð W	)ð W	)ð W	)øøøð W	)ð W	)ð W	)ð W	)ùðt
 %×*Ò*Ñ,Ô,ð ,ð ,‰ˆˆeå�t˜Uœ\Ñ*Ô*ð	,à”
” Ò.Ð.Ø”JÔ$ð /õ �IŠIÐ=¸tÑDÔDÐDØŒH×Ò ¤
Ñ+Ô+Ð+øð,ð ,s‚   È'Ke:Ó,TÓ<e:ÔTÔe:ÔTÔE(e:Ù8$Z(	Úe:Ú(Z,Ú,e:Ú/Z,Ú0Fe:à;C9e 	ä4e:å eåe:åeå%e:å:e>	æe>	)F),rÏ   Úloggingr­   rÜ   Útypingr   r   r   r   r   rD   rº   r   r:   Ú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__rq   Ú_loggingÚgetArtifactLoggerrÂ   r9   ru   r   r!   rÅ   r   rY   r   r   ú<module>rý      s%  ðà Ð Ð Ð Ø €€€Ø €€€Ø 
€
€
€
Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :ð ð Ø€L€L€Là>Ð>Ð>Ð>Ð>Ð>Ð>à€Hà €€€Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø -Ð -Ð -Ð -Ð -Ð -ð -Ð
-€à€gÔ˜Ñ!Ô!€Ø”×1Ò1°(¸LÑIÔI€ð
˜RœWð 
¨°#¬ð 
ð 
ð 
ð 
ð�r”wð  8¨LÔ#9ð ð ð ð ð € dÐ+Ñ+Ô+ð
 ð	z,ð z,Øðz,àðz,ð ðz,ð ð	z,ð
 
ðz,ð z,ð z,ñ ,Ô+ðz,ð z,ð z,r   