§
    ŠŠtjÇƒ  ã                   ó¸  — 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j#         $                    e!d¦  «        Z%dej&        de'dz  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)Ú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                 ó^   — 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    ú\/var/www/html/CA-Chatbot/venv/lib/python3.11/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‡:‡;‡<‡=‡>‡?‡@‡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        Š7t&          j                             ‰7¦  «        Š@t,                               dt1          d	|› �‰ d
¬¦  «        ¦  «         i Š5t3          ¦   «         }	d}
‰7j        D ]&Š:‰:j        dk    r‰:}
 n|	                     ‰:¦  «         Œ'dt&          j        dt<          fˆ.ˆ?fd„}dŠB‰7j        D ]Š:d‰:j        v rdŠB nd‰:j        v r 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          ‰?j$        t&          j%        f         d‰?j$        dt&          j%        fˆ+ˆ2fd„Š2dddt<          fˆ?fd„Š/t@          j&        t@          j'        t@          j(        j)        j'        j*        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‰7j        D ]aŠ:‰:j,        |v rV |‰:¦  «        rK |‰:¦  «        }t[          |t&          j        ¦  «        r&t]          |¦  «        }|�‰A                     |¦  «         Œbd$t^          |         ddfˆ.ˆ/ˆ0ˆ1ˆ2ˆ3ˆ4ˆ5ˆ6ˆ ˆ7ˆ:ˆ<ˆAfd%„}t_          ‰7j        ¦  «        }ta          |dd&…         ¦  «        D �]Å\  Š8Š:‰7 1                    ‰:|	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@          j5        ¦  «        r¡ta          | 6                    ¦   «         ¦  «        D ]\  Š8} ||ˆ7ˆ8ˆ:fd,„¦  «         Œto          |¦  «        sZta          | 8                    ¦   «         ¦  «        D ]\  Š8} ||ˆ7ˆ8ˆ:fd-„¦  «         Œ || 9                    ¦   «         ˆ7ˆ:fd.„¦  «         ‰:|
k    r |‰< :                    dg ¦  «        ¦  «         ‰:j,        |v �r_ |‰:¦  «        }t[          |t&          j        ¦  «        rt]          |¦  «        nd}|d
k    rX|}‰ j         ;                    ‰:¦  «         t[          |t&          j        ¦  «        r!|j<        s‰ j         ;                    |¦  «         nË |‰:¦  «        rG‰:j,        t@          j(        j)        j'        j*        ur |‰:||¦  «         |�‰3                     |¦  «         ny|�`|‰5v r\|‰3v rX|}‰ j         ;                    ‰:¦  «         t[          |t&          j        ¦  «        r!|j<        s‰ j         ;                    |¦  «         n|�‰3                     |¦  «         ‰:j        dk    �r±t]          ‰:¦  «        xŠ>��Ÿdt<          fˆ5ˆ>fd/„} ||‰:j         =                    d0i ¦  «        ¦  «        Š=dt<          fˆ5ˆ=fd1„}‰>‰5v s |‰:¦  «        �r |¦   «         �s  |¦   «         sö |‰:¦  «        r‘ ‰1‰ t}          j?        ‰0‰:j         =                    d¦  «        ‰:j         =                    d¦  «        ‰:j         =                    d¦  «        ¬2¦  «        ¦  «        5   ‰2‰5‰>¦  «        ‰5‰><   ddd¦  «         n# 1 swxY w Y   ‰5‰>         j@        }‰: A                    |¦  «         ‰ j         ;                    ‰:¦  «         t„                               d3‰:|‰>¦  «         nC‰>‰5vr?t[          ‰>‰?jC        ‰?jD        jE        jF        f¦  «        st'          j%        ‰:‰@¬4¦  «        ‰5‰><   ‰:j,        t@          j(        j)        jG        j*        t@          j(        j)        jH        j*        fv r‰ j         ;                    ‰:¦  «         g } ||‰:j         =                    d0¦  «        ¦  «        x}�r<| I                    ¦   «         D �]&\  }}| J                    |¦  «         d5t@          jK        dt&          j        t˜          z  fˆ2ˆ5fd6„}|‰5vrà ‰1‰ t}          j?        ‰0‰:j         =                    d¦  «        ‰:j         =                    d¦  «        ‰:j         =                    d¦  «        ¬2¦  «        ¦  «        5  t'          j%        ‰7 M                    ‰:t�          |¦  «        |¬7¦  «        ‰@¬4¦  «        ‰5|<   ddd¦  «         n# 1 swxY w Y   t„                               d8|‰5|         ¦  «         �Œ(|D �]f} ‰< :                    | g ¦  «        }!| ‰4v rŒ|jO        |          ŠC‰CjP        r)‰CjQ        t¤          jS        d'z
  k    r |‰CjT        ‰9¦  «        ŠC| U                    ¦   «          V                    ‰C¦  «        �sÃd9tF          dt˜          t®          z  dz  fˆ9ˆ?ˆCfd:„}" ‰1‰ t}          j?        ‰0‰:j         =                    d¦  «        ‰:j         =                    d¦  «        ‰:j         =                    d¦  «        ¬2¦  «        ¦  «        5   |"‰CjT        ¦  «        x}#�~| |#k    }$|$‰Av r‰3                     |$¦  «         n^ ‰2‰5|$¦  «        j@        }%‰7 X                    t@          j(        j)        j'        j*        |%d;|$› d<|%› d=�f¦  «         ‰3                     |$¦  «          |"‰CjQ        ¦  «        x}&�~| |&k    }'|'‰Av r‰3                     |'¦  «         n^ ‰2‰5|'¦  «        j@        }(‰7 X                    t@          j(        j)        j'        j*        |(d;|'› d<|(› d=�f¦  «         ‰3                     |'¦  «         ddd¦  «         n# 1 swxY w Y   ‰4                     | ¦  «          ||!¦  «         �Œh	 ddd¦  «         n# 1 swxY w Y   �ŒÇ‰5 I                    ¦   «         D ]p\  })}*t[          |)‰?jY        ¦  «        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.  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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 )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>�   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   FÚstack_traceÚnn_module_stackÚcustomÚskip_valc                 ó¶  •— |s¯t          j        d„ | j        ¦  «        }	 | j        }| j        dk    rct          | j        t          ¦  «        s$t          dt          | j        ¦  «        › �¦  «        ‚t          |d         | j        ¦  «        }|dd …         } ||Ž | j
        ‰<   n# t          $ r Y nw xY w|�
|| j
        d<   |�
|| j
        d<   |�|| j
        d<   d S d S )	Nc                 ób   — t          | t          j        j        ¦  «        rt	          | ¦  «        n| 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¼}Ñ/MÔ/MÐVÕ& 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˜mÒ+Ð+Ý% d¤kµ3Ñ7Ô7ð Ý,ØK½¸T¼[Ñ8IÔ8IÐKÐKñô ð õ % Y¨q¤\°4´;Ñ?Ô?�FØ )¨!¨"¨"¤�IØ%+ V¨YÐ%7�”	˜'Ñ"Ð"øÝ&ð ð ð ð �ð	øøøð
 Ð"Ø'2ˆDŒI�mÑ$ØÐ&Ø+:ˆDŒIÐ'Ñ(ØÐØ"(ˆDŒI�hÑÐÐð Ðs    BB# Â#
B0Â/B0Ú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  |‰ˆ	ˆ fd„|j
        D ¦   «         |¦  «        ‰ |<   ‰ |         S )Nr   )ÚIntegerr=   ÚSymbol)ÚBooleanAtom)Ú_run_sympy_handlerÚsympy_interpc                 ó(   •— g | ]} ‰‰|¦  «        ‘ŒS © r_   )r:   r;   Ú_sympy_interprW   s     €€r   ú
<listcomp>zJinsert_deferred_runtime_asserts.<locals>._sympy_interp.<locals>.<listcomp>ä   s%   ø€ ÐDÐDÐD°3ˆ]ˆ]˜=¨#Ñ.Ô.ÐDÐDÐDr   )r@   rY   r=   rZ   Úsympy.logic.boolalgr[   Útorch.utils._sympy.interpr\   r]   r   r?   )
rW   r   rY   r=   rZ   r[   r\   r]   ÚAnalysisr`   s
   `       €€r   r`   z6insert_deferred_runtime_asserts.<locals>._sympy_interpÏ   sÝ   øø€ ð 	2Ð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   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)Ú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‰>Œ>˜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   Ú_fx_runtime_assert_preservec                 ó�   — | j         r| j         d         S | j                             d| j                             d¦  «        ¦  «        S )Nr   ÚcondÚself)r?   ÚkwargsÚgetr   s    r   Ú_assertion_conditionz=insert_deferred_runtime_asserts.<locals>._assertion_conditionû   s<   € ØŒ9ð 	 Ø”9˜Q”<ÐØŒ{�Š˜v t¤{§¢°vÑ'>Ô'>Ñ?Ô?Ð?r   rp   Úassert_exprc                 óö  •— dt           g t          f         dt          d z  fd„}d }t          | j        ¦  «        dk    r| j        d         }nH| j        t          j        u r| j         	                    d¦  «        }n| j         	                    d¦  «        }t          |t          ¦  «        r|S t          |t          j        ¦  «        r­|j        dk    r¢‰}t          |j        t          ¦  «        s$t          dt          |j        ¦  «        › �¦  «        ‚|j                             d	¦  «        D ]}t#          ||¦  «        }Œt%          |¦  «        r ||¦  «        }|�|S t          |t          ¦  «        r|S d
|› d|› d�S )NÚfnr   c                 ó"  ‡— t          | dd ¦  «        }|�!|j        dk    s|j        dk    s|j        dk    rd S h d£Šˆfd„t	          j        | ¦  «        D ¦   «         }t          |¦  «        dk    r>|d         j        dk    r-t          |d         j	        t          ¦  «        r|d         j	        S t          |¦  «        dk    rO|d         j        dk    r>t          |d         j	        t          ¦  «        r|d         j        d	k    r|d         j	        S d S )
NÚ__code__r   >   ÚNOPÚCACHEÚRESUMEÚEXTENDED_ARGÚCOPY_FREE_VARSc                 ó&   •— g | ]}|j         ‰v¯|‘ŒS r_   )Úopname)r:   ÚinstÚignored_opnamess     €r   ra   ztinsert_deferred_runtime_asserts.<locals>._assertion_message.<locals>.static_string_from_callable.<locals>.<listcomp>  s0   ø€ ð ð ð àØ”; oÐ5Ð5ð à5Ð5Ð5r   rK   ÚRETURN_CONSTrf   Ú
LOAD_CONSTÚRETURN_VALUE)rR   Úco_argcountÚco_posonlyargcountÚco_kwonlyargcountÚdisÚget_instructionsrg   r€   r   ÚargvalrO   )rw   ÚcodeÚinstructionsr‚   s      @r   Ústatic_string_from_callablez`insert_deferred_runtime_asserts.<locals>._assertion_message.<locals>.static_string_from_callable  s=  ø€ Ý˜2˜z¨4Ñ0Ô0ˆDà�ØÔ# qÒ(Ð(ØÔ*¨aÒ/Ð/ØÔ)¨QÒ.Ð.à�tðð ð ˆOðð ð ð åÔ0°Ñ4Ô4ðñ ô ˆLõ �LÑ!Ô! QÒ&Ð&Ø  ”OÔ*¨nÒ<Ð<Ý˜|¨AœÔ5µsÑ;Ô;ð =ð $ A”Ô-Ð-å�LÑ!Ô! QÒ&Ð&Ø  ”OÔ*¨lÒ:Ð:Ý˜|¨AœÔ5µsÑ;Ô;ð ;à  ”OÔ*¨nÒ<Ð<à# A”Ô-Ð-Ø�4r   rK   ÚmessageÚ
assert_msgÚget_attrrJ   ú.ú(Runtime assertion failed for expression ú
 on node 'ú')r   ÚobjectrO   rg   r?   rN   r6   Ú_checkrr   rs   r   r   r5   r9   rP   rQ   ÚsplitrR   Úcallable)	r   rp   ru   rŽ   ÚmsgÚattrÚatomÚ
static_msgr"   s	           €r   Ú_assertion_messagez;insert_deferred_runtime_asserts.<locals>._assertion_message   sŽ  ø€ ð%	­H°R½°ZÔ,@ð %	ÅSÈ4ÁZð %	ð %	ð %	ð %	ðN ˆÝˆtŒy‰>Œ>˜AÒÐØ”)˜A”,ˆCˆCØŒ[�EœLÐ(Ð(Ø”+—/’/ )Ñ,Ô,ˆCˆCà”+—/’/ ,Ñ/Ô/ˆCå�c�3ÑÔð 	ØˆJÝ�c�2œ7Ñ#Ô#ð 	¨¬°*Ò(<Ð(<ØˆDÝ˜cœj­#Ñ.Ô.ð UÝ$Ð%SÅÀcÄjÑAQÔAQÐ%SÐ%SÑTÔTÐTØœ
×(Ò(¨Ñ-Ô-ð +ð +�Ý˜t TÑ*Ô*��Ý˜‰~Œ~ð &Ø8Ð8¸Ñ>Ô>�
ØÐ)Ø%Ð%Ý˜$¥Ñ$Ô$ð Ø�ØX¸+ÐXÐXÐQUÐXÐXÐXÐXr   c                 óÂ   •— | j         t          j        t          j        fv rdS | j         t          j        j        j        j        u o| j                             ‰¦  «        du S ©NT)	rN   r6   r—   Ú_assert_scalarÚopsÚatenÚdefaultr   rs   )r   Úpreserve_runtime_assert_keys    €r   Ú_is_user_runtime_assertz@insert_deferred_runtime_asserts.<locals>._is_user_runtime_assertB  sU   ø€ ØŒ;�5œ<­Ô)=Ð>Ð>Ð>Ø�4àŒK�5œ9œ>Ô8Ô@Ð@ð CØ”	—’Ð9Ñ:Ô:¸dÐBð	
r   c           
      ó€  •— ‰                      | ¦  «        5  ‰                     t          j        j        j        j        | ‰| ||¦  «        f¦  «        }|j                             | j        ¦  «         d|j        ‰<   d d d ¦  «         n# 1 swxY w Y   |  	                    |¦  «         ‰ 
                    | ¦  «         d S r    )Úinserting_beforeÚcall_functionr6   r¢   r£   r¡   r¤   r   ÚupdateÚreplace_all_uses_withÚ
erase_node)r   rp   ru   Únew_noderž   Úgraphr¥   s       €€€r   Ú_replace_with_aten_assertzBinsert_deferred_runtime_asserts.<locals>._replace_with_aten_assertJ  sÿ   ø€ ð ×#Ò# DÑ)Ô)ð 	>ð 	>Ø×*Ò*Ý”	”Ô-Ô5ØÐ)Ð)¨$°°kÑBÔBÐCñô ˆHð ŒM× Ò  ¤Ñ+Ô+Ð+Ø9=ˆHŒMÐ5Ñ6ð	>ð 	>ð 	>ñ 	>ô 	>ð 	>ð 	>ð 	>ð 	>ð 	>ð 	>øøøð 	>ð 	>ð 	>ð 	>ð 	×"Ò" 8Ñ,Ô,Ð,Ø×Ò˜ÑÔÐÐÐs   —A&B	Â	BÂBÚrasc                 ó.  •— | D �]}|j         ‰v r‰                     |j         ¦  «         Œ'|j         ‰v set          |j         j        ¦  «        dk    r8t	          t          |j         j        ¦  «        ¦  «        ‰v r ‰|j         ¦  «        s ‰|j         ¦  «        rŒ–t                               d|j         ¦  «          ‰|j         ¦  «        }|‰                     ¦   «         z
  }|rAt          |t          ¬¦  «        }‰                     |g ¦  «                             |¦  «         �Œ  ‰	‰t          j        ‰‰j                             d¦  «        ‰j                             d¦  «        ‰j                             d¦  «        ¬¦  «        ¦  «        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 )NrK   zinserting runtime assert %s)ÚkeyrB   rC   rD   ©rB   rC   rD   r“   r”   r•   )r   Úaddrg   r*   ÚnextÚiterÚlogÚdebugÚkeysÚminrO   Ú
setdefaultÚappendÚ	functoolsÚpartialr   rs   r   r©   r6   r¢   r£   r¡   r¤   )r°   ÚraÚfvsÚmissingÚi1Úresr)   rm   rV   r'   r`   Ú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`  sx  ø€ Øð 5	+ñ 5	+ˆBØŒwÐ+Ð+Ð+Ø×!Ò! "¤'Ñ*Ô*Ð*Øð ”˜=Ð(Ð(õ ˜œÔ,Ñ-Ô-°Ò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¸Ñ;Ô;Ð;Ñ;ð -Ð,ØÝÔ%Ø+Ø$(¤I§M¢M°-Ñ$@Ô$@Ø(,¬	¯ªÐ6GÑ(HÔ(Hð  $œyŸ}š}¨XÑ6Ô6ðñ ô ñ
ô 
ð ð ð (˜-¨°r´wÑ?Ô?ÔD�Cà×'Ò'Ýœ	œÔ5Ô=ð  Ø`ÀrÄwÐ`Ð`ÐZ]Ð`Ð`Ð`ðñ	ô ð ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð, ×!Ò! "¤'Ñ*Ô*Ð*Ñ*ðk5	+ð 5	+s   ÆAG.Ç.G2	Ç5G2	éÿÿÿÿrK   ÚsymintÚcbc                 ó^  •— t          | t          j        ¦  «        �r
t          | j        t          ¦  «        ròt           ‰| j        ¦  «        x}‰	j        ¦  «        rÏ|‰vrÍ ‰‰t          j        ‰‰j         	                    d¦  «        ‰j         	                    d¦  «        ‰j         	                    d¦  «        ¬¦  «        ¦  «        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 )NrB   rC   rD   r³   ©Útracerúexpr_to_proxy[%s] = %s)r   r6   ÚSymIntr   r   rZ   r½   r¾   r   rs   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Ô8ñQå& v¤{µGÑ<Ô<ðQõ 'Ø!6Ð!6°v´{Ñ!CÔ!CÐC˜AÀUÄ\ñô ðQð  ]Ð2Ð2à4Ð4ØÝ%Ô-Ø 3Ø,0¬I¯MªM¸-Ñ,HÔ,HØ04´	·²Ð>OÑ0PÔ0Pð (,¤y§}¢}°XÑ'>Ô'>ðñ ô ñ
ô 
ð Mð Mõ 02¬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   Ã
"C8Ã8C<Ã?C<c                  ó   •— ‰ S r   r_   r   s   €r   rH   z1insert_deferred_runtime_asserts.<locals>.<lambda>Á  s   ø€ °D€ r   c                  ó0   •— ‰                       ‰‰¦  «        S r   )Úcreate_size_node©r®   Úir   s   €€€r   rH   z1insert_deferred_runtime_asserts.<locals>.<lambda>Ç  s   ø€  E×$:Ò$:¸4ÀÑ$CÔ$C€ r   c                  ó0   •— ‰                       ‰‰¦  «        S r   )Úcreate_stride_noder×   s   €€€r   rH   z1insert_deferred_runtime_asserts.<locals>.<lambda>Í  s   ø€ ¨×(@Ò(@ÀÀqÑ(IÔ(I€ r   c                  ó.   •— ‰                       ‰¦  «        S r   )Úcreate_storage_offset_node)r®   r   s   €€r   rH   z1insert_deferred_runtime_asserts.<locals>.<lambda>Ñ  s   ø€  E×$DÒ$DÀTÑ$JÔ$J€ r   c                  ó*   •— ‰j         D ]	} | ‰vr dS Œ
dS )NTF)r*   )ÚsymbolrW   Úsym_exprs    €€r   Úhas_new_untracked_symbolszBinsert_deferred_runtime_asserts.<locals>.has_new_untracked_symbolsþ  s1   ø€ à"*Ô"7ð (ð (˜Ø!¨Ð6Ð6Ø#' 4 4ð 7à ˜5r   Úunbacked_bindingsc                  óB   •— ‰€t          d¦  «        ‚‰D ]	} | ‰vr dS Œ
dS )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  sC   ø€ Ø1Ð9Ý,Ð-QÑRÔRÐRØ9ð (ð (˜Ø mÐ3Ð3Ø#' 4 4ð 4à ˜5r   r³   zCSE node %s -> %s for expr %srÍ   Údc                 óv   •—  ‰‰| j         j        ¦  «        }t          |t          j        ¦  «        r|j         n|S r   )r   r   r   r   rÑ   )rå   Úpr`   rW   s     €€r   Ú_lower_symint_divisorz>insert_deferred_runtime_asserts.<locals>._lower_symint_divisorY  s5   ø€ Ø)˜M¨-¸¼¼ÑEÔE˜Ý)3°Aµr´xÑ)@Ô)@ÐG˜qœv˜vÀaÐGr   )Úlower_symintrÏ   rÒ   c                 óÀ   •— | ‰j         ‰j          ‰‰ fv rd S 	 ‰j        rt          | ¦  «        S ‰j        rt	          | ¦  «        S n# t
          t          f$ r Y d S w xY wd S r   )ÚooÚis_intÚintÚis_floatÚfloatÚ	TypeErrorÚOverflowError)rÒ   r-   r@   Úvrs    €€€r   Úconvertz0insert_deferred_runtime_asserts.<locals>.convert©  s„   ø€ Ø ¤¨E¬H¨9°f¸v¸gÐ FÐFÐFØ#' 4ð(Ø!œyð .Ý'*¨1¡v¤v Ø!œ{ð 0Ý',¨Q¡x¤x ð0øå )­=Ð9ð (ð (ð (Ø#' 4 4ð(øøøà#˜ts   ™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¬   Úusersrs   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_targetsrt   r¦   r¯   rp   ru   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û   rd   rž   r(   r)   rm   rV   r'   r`   rÄ   rÅ   rW   r*   r®   rØ   r-   r   r¥   rÆ   rã   rß   r@   rÎ   rÇ   rU   rò   sD   `                                          @@@@@@@@@@@@@@@@@@@@@@@@@r   r   r   6   så  øøøøøøøøøøøøøøøøøøøøøøøøøø€ ðR €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ð  ð #'Ø15Ø(,Øð")ð ")ÝŒhŒmð")å˜4‘Zð")õ �c¥3˜hœ¨$Ñ.ð")õ •S�#�X” Ñ%ð	")õ
 ð")ð 
ð")ð ")ð ")ð ")ð ")ð ")õJ &)¡U¤U€MÝ69±e´eÐ à*0ÐVÐ&Ð&Ð6V€Hð#Ý˜EœJ­¬Ð0Ô1ð#Ø9>¼ð#å	Œð#ð #ð #ð #ð #ð #ð #ð4	
¨ð 	
½ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
õ 	ŒÝÔÝŒ	ŒÔ%Ô-ð€Nð
 #@Ðð@¥2¤7ð @­sð @ð @ð @ð @ð
@YÝŒgð@YÝ ð@YÝ/7¸Ô/Eð@Yå	ð@Yð @Yð @Yð @Yð @Yð @YðD
¥b¤gð 
µ$ð 
ð 
ð 
ð 
ð 
ð 
ðÝŒgðÝ ðÝ/7¸Ô/Eðà	ðð ð ð ð ð ð ð õ *-©¬ÐØ”ð 7ð 7ˆØŒ;˜.Ð(Ð(Ð-DÐ-DÀTÑ-JÔ-JÐ(Ø'Ð'¨Ñ-Ô-ˆDÝ˜$¥¤Ñ(Ô(ð 7Ý*¨4Ñ0Ô0�ØÐ*Ø%×)Ò)¨+Ñ6Ô6Ð6øð6+¥ mÔ!4ð 6+¸ð 6+ð 6+ð 6+ð 6+ð 6+ð 6+ð 6+ð 6+ð 6+ð 6+ð 6+ð 6+ð 6+ð 6+ð 6+ð 6+ð 6+ð 6+ð 6+õp �”ÑÔ€EÝ˜U 3 B 3œZÑ(Ô(ð E)ñ E)‰ˆˆ4ð ×#Ò#Ø ¨Ð4Ð4ˆE�!�a‘%ŒLˆLÐ:Oñ
ô 
ð A	)ð A	)ð ˜Ð$Ñ$Ý&8¸Ñ&>Ô&>Ð>�]ÐKðQ­ð QµX¸bÅ"Ä'¸kÔ5Jð QÈtð Qð Qð Qð Qð Qð Qð Qð Qð Qð Qð Qð Qð Qð0 �˜]¨L¨L¨L¨LÑ9Ô9Ð9å =Ð0˜aµ%´,Ñ?Ô?ð Ý )¨!¯&ª&©(¬(Ñ 3Ô 3ð ð ™˜˜1Ø$˜ØØCÐCÐCÐCÐCÐCñô ð ð õ )¨Ñ+Ô+ð 	Ý$-¨a¯hªh©j¬jÑ$9Ô$9ð ð ™D˜A˜qØ(˜LØ !Ø IÐ IÐ IÐ IÐ IÐ Iñô ð ð ð %˜Ø×,Ò,Ñ.Ô.ØJÐJÐJÐJÐJñô ð ð Ð,Ò,Ð,Ø#Ð# M×$5Ò$5°d¸BÑ$?Ô$?Ñ@Ô@Ð@ð Œ{˜nÐ,Ñ,Ø+Ð+¨DÑ1Ô1�Ý4>¸tÅRÄWÑ4MÔ4MÐW�l¨4Ñ0Ô0Ð0ÐSW�Ø˜4’<�<Ø�CØ”H×'Ò'¨Ñ-Ô-Ð-Ý! #¥r¤wÑ/Ô/ð 1¸¼	ð 1Øœ×+Ò+¨CÑ0Ô0Ð0øà.Ð.¨tÑ4Ô4ð ;Øœ;­e¬i¬nÔ.KÔ.SÐSÐSØ5Ð5°d¸DÀ+ÑNÔNÐNØ&Ð2Ø)×-Ò-¨kÑ:Ô:Ð:øà#Ð/Ø'¨=Ð8Ð8Ø'¨=Ð8Ð8à"˜Øœ×+Ò+¨DÑ1Ô1Ð1Ý% c­2¬7Ñ3Ô3ð 5¸C¼Ið 5ØœH×/Ò/°Ñ4Ô4Ð4øà&Ð2Ø)×-Ò-¨kÑ:Ô:Ð:ð
 ”˜=Ò(Ñ(Ý!-¨dÑ!3Ô!3Ð3�XÑ@ð!µ4ð !ð !ð !ð !ð !ð !ð !ð .GÐ-FØ˜tœyŸ}š}Ð-@À"ÑEÔEñ.ô .Ð*ð!µ4ð !ð !ð !ð !ð !ð !ð !ð  Ð-Ð-à8Ð8¸Ñ>Ô>ñ .ð !:Ð 9Ñ ;Ô ;ñ	 .ð 4Ð3Ñ5Ô5ð .ð 8Ð7Øñô ð ð 5Ð4ØÝ%Ô-Ø 3Ø,0¬I¯MªM¸-Ñ,HÔ,HØ04´	·²Ð>OÑ0PÔ0Pð (,¤y§}¢}°XÑ'>Ô'>ðñ ô ñ
ô 
ð ð ð 7D°mØ -Ø (ñ7ô 7˜M¨(Ñ3ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð  !.¨hÔ 7Ô <�IØ×.Ò.¨yÑ9Ô9Ð9Ø”H×'Ò'¨Ñ-Ô-Ð-Ý—I’IØ7ØØ!Ø ñ	ô ð ð ð  ]Ð2Ð2½:ØØ”\ 5¤;Ô#6Ô#BÐCñ<ô <Ð2õ /1¬h°tÀFÐ.KÑ.KÔ.K�M (Ñ+ð Œ{Ý”	”Ô2Ô:Ý”	”Ô;ÔCðð ð ð ”×#Ò# DÑ)Ô)Ð)àˆDð %>Ð$=Ø˜4œ9Ÿ=š=Ð)<Ñ=Ô=ñ%ô %ð Ð ñ  Qð #4×"9Ò"9Ñ";Ô";ð Qñ Q‘J�A�wØ—K’K ‘N”N�NðHµ´ð HÅ"Ä'ÍCÁ-ð Hð Hð Hð Hð Hð Hð Hð  Ð-Ð-Ø4Ð4ØÝ%Ô-Ø 3Ø,0¬I¯MªM¸-Ñ,HÔ,HØ04´	·²Ð>OÑ0PÔ0Pð (,¤y§}¢}°XÑ'>Ô'>ðñ ô ñ
ô 
ð ð õ 02¬xØ %× ?Ò ?Ø$(Ý$)¨'¡N¤NØ1Fð !@ñ !"ô !"ð
 (.ð0ñ 0ô 0˜M¨!Ñ,ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ& Ÿ	š	Ð":¸A¸}ÈQÔ?OÑPÔPÐPùàð k)ñ k)�Ø#×'Ò'¨¨BÑ/Ô/�ðP Ð5Ð5Ð5ØàÔ+¨BÔ/�Ø”9ð 7 ¤­S¬[¸1©_Ò!<Ð!<ð %˜ R¤X¨vÑ6Ô6�BØ ×AÒAÑCÔC×LÒLÈRÑPÔPñ 7;ð

$¥3ð 
$­3µ©;¸Ñ+=ð 
$ð 
$ð 
$ð 
$ð 
$ð 
$ð 
$ð 
$ð 1Ð0ØÝ!Ô)Ø/Ø(,¬	¯ª°mÑ(DÔ(DØ,0¬I¯MªMÐ:KÑ,LÔ,Lð $(¤9§=¢=°Ñ#:Ô#:ðñ ô ñ
ô 
ð &;ð &;ð (/ w¨r¬xÑ'8Ô'8Ð8˜GÐEØ&(¨G¢m˜GØ&Ð*;Ð;Ð;Ø -× 1Ò 1°'Ñ :Ô :Ð :Ð :à%2 ]°=À'Ñ%JÔ%JÔ%O Ø %× 3Ò 3Ý$)¤I¤NÔ$AÔ$Ià(*Ø(kÐSZÐ(kÐ(kÐfhÐ(kÐ(kÐ(kð%&ñ!"ô !"ð !"ð !.× 1Ò 1°'Ñ :Ô :Ð :Ø'. w¨r¬xÑ'8Ô'8Ð8˜GÐEØ&(¨G¢m˜GØ&Ð*;Ð;Ð;Ø -× 1Ò 1°'Ñ :Ô :Ð :Ð :à%2 ]°=À'Ñ%JÔ%JÔ%O Ø %× 3Ò 3Ý$)¤I¤NÔ$AÔ$Ià(*Ø(kÐSZÐ(kÐ(kÐfhÐ(kÐ(kÐ(kð%&ñ!"ô !"ð !"ð !.× 1Ò 1°'Ñ :Ô :Ð :ðM&;ð &;ð &;ñ &;ô &;ð &;ð &;ð &;ð &;ð &;ð &;øøøð &;ð &;ð &;ð &;ðP -×0Ò0°Ñ4Ô4Ð4Ø#Ð# CÑ(Ô(Ð(Ñ(ðWk)ðmA	)ð A	)ð A	)ñ A	)ô A	)ð A	)ð A	)ð A	)ð A	)ð A	)ð A	)øøøð A	)ð A	)ð A	)ð A	)ùðH
 %×*Ò*Ñ,Ô,ð ,ð ,‰ˆˆeå�t˜Uœ\Ñ*Ô*ð	,à”
” Ò.Ð.Ø”JÔ$ð /õ �IŠIÐ=¸tÑDÔDÐDØŒH×Ò ¤
Ñ+Ô+Ð+øð,ð ,s‚   Î+Np;Ý] Ýp;Ý ]$Ý$p;Ý']$Ý(G$p;å=f	æ	p;æfæp;æfæD7p;ëD!p	ï5p;ðpðp;ðpð	%p;ð;p?	ñp?	)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>r7     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°(Ð<PÑQÔQ€ð
˜RœWð 
¨¨t©ð 
ð 
ð 
ð 
ð�r”wð  8¨LÔ#9ð ð ð ð ð € dÐ+Ñ+Ô+ð
 ð	q
,ð q
,Øðq
,àðq
,ð ðq
,ð ð	q
,ð
 
ðq
,ð q
,ð q
,ñ ,Ô+ðq
,ð q
,ð q
,r   