
    /jvC                     (   d Z ddlZddlZddlmZ ddlmZmZmZm	Z	m
Z
mZ ddlmZmZ ddlZddlmZmZ ddlmZmZ dd	lmZmZ dd
lmZmZmZmZmZmZ ddl m!Z!m"Z" e
rddl#m$Z$ ddl%m&Z&  G d de"          Z' e'd          Z( G d de"          Z)dS )a  
Constant and enum variable tracking in Dynamo.

This module is fundamental to Dynamo's ability to track and propagate constant
values during compilation, ensuring proper handling of Python literals and
maintaining type safety through the compilation process.
    N)Sequence)AnyLiteralOptionaloverloadTYPE_CHECKINGUnion)Neveroverride)
AttrSourceGetItemSource   )graph_break_hints	variables)raise_observed_exceptionunimplemented)cmp_name_to_op_mappingcommon_constant_typesistypenpraise_args_mismatchraise_on_overridden_hash   )ValueMutationNewVariableTracker)InstructionTranslator)UserFunctionVariablec                       e Zd ZdZeedddefd                        Zeededd fd                        Zeede	de	de
fd                        Zede	de	de
fd	            Zde	de	ddf fd
Zde	fdZdefdZde	fdZded         fdZdefdZde	defdZdefdZedee
         fd            Zddde
de
fdZededefd            Zed-dedeeef         dz  defd            Zded         dee
         fdZdddede
fdZ ddded ee
         deee
f         de
f
 fd!Z!ddd"d#d$e
d%e"e
         d&eee
f         de
f fd'Z#e$dddedd fd(            Z%ded         fd)Z&defd*Z'd+edefd,Z( xZ)S ).ConstantVariablea  
    Variable tracker for Python literals and basic immutable types, with automatic
    routing support for collection types (lists, tuples, sets, etc.).

    The create() method intelligently constructs appropriate variable types for
    nested collections.
    valueNreturnc                     d S N r    s    e/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/torch/_dynamo/variables/constant.pycreatezConstantVariable.create.   s    &)c    c                     d S r#   r$   r%   s    r&   r'   zConstantVariable.create2   s    363r(   kwargsc                     d S r#   r$   )r    r*   s     r&   r'   zConstantVariable.create7   s    >Acr(   c                 
   |                     d          }t          | t                    rd | D             }t          j        |fi |S t          | t
                    rd | D             }t          j        |fi |S t          | t                    r?| j        | j	        | j
        f}t          d |D                       }t          j        |fi |S t          | t          t          f          rg }t          |           D ]H\  }}|rt          ||          nd}|                    t"                              ||                     It          j                            t+          |                     |fi |S t#          | fi |S )aV  
        Create a `ConstantVariable` based on the given value, and supports
        automatic routing for collection types like `tuple` (in which case we'd
        create `ConstantVariable` for the leaf items).

        NOTE: the caller must install the proper guards if needed; most often
        the guard will be `CONSTANT_MATCH`.
        sourcec                 B    g | ]}t                               |          S r$   r   r'   .0xs     r&   
<listcomp>z+ConstantVariable.create.<locals>.<listcomp>I   '    ???A%,,Q//???r(   c                 B    g | ]}t                               |          S r$   r/   r0   s     r&   r3   z+ConstantVariable.create.<locals>.<listcomp>L   r4   r(   c              3   J   K   | ]}t                               |          V  d S r#   r/   )r1   args     r&   	<genexpr>z*ConstantVariable.create.<locals>.<genexpr>P   s1      #W#WS$4$;$;C$@$@#W#W#W#W#W#Wr(   Nr-   )get
isinstancesetr   SetVariable	frozensetFrozensetVariableslicestartstopsteptupleSliceVariablelist	enumerater   appendr   r'   BaseListVariablecls_fortype)	r    r*   r-   items
slice_argsslice_args_varsir2   item_sources	            r&   r'   zConstantVariable.create;   s    H%% eS!! 	T?????E(99&999y)) 	T?????E.u?????u%% 	T+uz5:>J##W#WJ#W#W#WWWO*?EEfEEEe}-- 
	TE!%((  1:@JmFA666d$++* ,      -55d5kkBB5SSFSSS00000r(   c                 *    t                      j        di | t                              |          sJ dt	          |           d            t
          5t          |t
          j                  r|                                | _	        d S || _	        d S )Nz7
Cannot construct `ConstantVariable` for value of type a`  .

This failure likely due to PyTorch-internal use of `ConstantVariable` on
non-literal python values, please try using `VariableTracker.build` instead. If
you believe it's a necessary and legitimate use case (the value is immutable and
can't easily be represented with another `VariableTracker` class), please add
its type to `common_constant_types`.
r$   )
super__init__r   is_base_literalrK   r   r;   numberitemr    selfr    r*   	__class__s      r&   rS   zConstantVariable.__init__`   s    ""6"""//66 	 	 97;E{{9 9 9 	 	6 >j	::>DJJJDJJJr(   c                     | j         S r#   r%   rX   s    r&   as_proxyzConstantVariable.as_proxyp   
    zr(   c                 f    dt          | j                  j         dt          | j                   dS )NzConstantVariable(z: ))rK   r    __name__reprr[   s    r&   __repr__zConstantVariable.__repr__s   s2    S4
#3#3#<SSTZ@P@PSSSSr(   c                     | j         S r#   r%   r[   s    r&   as_python_constantz#ConstantVariable.as_python_constantv   r]   r(   Tc                     dS NTr$   r[   s    r&   is_python_constantz#ConstantVariable.is_python_constanty       tr(   c                 D    t          | j        t          t          f          S r#   )r;   r    intboolr[   s    r&   is_symnode_likez ConstantVariable.is_symnode_like|   s    $*sDk222r(   valuesc                     | j         |v S r#   r%   )rX   rm   s     r&   is_constant_matchz"ConstantVariable.is_constant_match   s    zV##r(   c                     | j         d u S r#   r%   r[   s    r&   is_constant_nonez!ConstantVariable.is_constant_none   s    zT!!r(   c                 .    |                      d          S )zz
        Need this when adding a BaseListVariable and a ConstantVariable together.
        Happens in detectron2.
        N)tx)unpack_var_sequencer[   s    r&   rL   zConstantVariable.items   s     ''4'000r(   rs   r   r7   c                 p    t                               | j        |                                                   S r#   )r   r'   r    rd   )rX   rs   r7   s      r&   getitem_constzConstantVariable.getitem_const   s2      &&Js--//0
 
 	
r(   objc                 .    t          |           t          v S r#   )rK   r   )rw   s    r&   rT   z ConstantVariable.is_base_literal   s    Cyy111r(   cachec                 (   i t          |           v rdS t          |           t          t          t          t
          t          j        fv r-| t          |           <   t          fd| D                       S t          
                    |           S )NTc              3   N   K   | ]}t                               |          V   d S r#   )r   
is_literal)r1   r2   ry   s     r&   r8   z.ConstantVariable.is_literal.<locals>.<genexpr>   s4      JJ'221e<<JJJJJJr(   )idrK   rF   rD   r<   r>   torchSizeallr   rT   )rw   ry   s    `r&   r|   zConstantVariable.is_literal   s    =Ec77e499uc9ejAAA E"S''NJJJJcJJJJJJ//444r(   c                 t    	 d |                                  D             S # t          $ r}t          |d }~ww xY w)Nc                 B    g | ]}t                               |          S r$   r/   r0   s     r&   r3   z8ConstantVariable.unpack_var_sequence.<locals>.<listcomp>   s'    RRR1$++A..RRRr(   )rd   	TypeErrorNotImplementedError)rX   rs   es      r&   rt   z$ConstantVariable.unpack_var_sequence   sN    	-RR8O8O8Q8QRRRR 	- 	- 	-%1,	-s     
727namec                     t          | j        |          st          t          ||g           t	          | j        |          }t          |          rt          |S )Nargs)hasattrr    r   AttributeErrorgetattrcallabler   )rX   rs   r   members       r&   const_getattrzConstantVariable.const_getattr   sZ    tz4(( 	F$^RtfEEEET**F 	&%%r(   r   c                    ddl m |dk    rPt          | j        t                    r6t          j        t          j                                      || g||          S |dk    rt          | j        t                    r|st          |          dk    r2t          ||dt          |           dt          |           d           |d                             |          }	 d	 |D             }t                              | j                            |                    S # t          $ r' t!                                          ||||          cY S w xY w|d
k    rLt          | j        t                    r2ddlm}  ||                     |          t+                                S t-          fd|D                       rNt
          j                            ||                                 | j                                      ||||          S 	 d |D             }d |                                D             }	n4# t          $ r' t!                                          ||||          cY S w xY wt3          | j        t                    ry|t          j        v rkt7          | j        |          }
	 t                               |
|i |	          S # t8          $ r(}t;          t=          |          |           Y d }~n"d }~ww xY wt3          | j        t>          t@          f          rtC          | j        |          r|s|s	 t                               t7          | j        |                                S # tD          tF          f$ rS}t;          t=          |          |tI          tK          t          j        |j&                                       Y d }~nd }~ww xY wtC          tN          |          rBt          |          dk    r.|d         (                                r|d         }t7          tN          |          }t3          |tR          j*        tR          j+        tR          j,        f          r;|j-        .                    d|| j        |fi           }                    |||          S 	 t                               || j        |                    S # t8          $ rS}t;          t=          |          |tI          tK          t          j        |j&                                       Y d }~nd }~ww xY wnt3          | j        t^                    r;|dk    r5t7          | j        |          }
t                               |
|i |	          S t=          | j                  t`          u rx|t`          j        v rjt7          | j        |          }
	 t                               |
|i |	          S # t8          $ r'}t;          t=          |          |           Y d }~nd }~ww xY w|dk    rz|sx|sv	 t                              t          | j                            S # tb          $ r<}t;          t=          |          |tI          |j&                             Y d }~nd }~ww xY w|dk    rt          |          dk    r|d         (                                r	 t                              te          | j        |d         3                                                    S # t8          $ rS}t;          t=          |          |tI          tK          t          j        |j&                                       Y d }~nd }~ww xY w|dk    rt          |          dk    r|d         (                                r|rJ |d         3                                }	 || j        v }t                              |          S # tb          $ rS}t;          t=          |          |tI          tK          t          j        |j&                                       Y d }~nd }~ww xY wt!                                          ||||          S )Nr   SymNodeVariableformatjoinz1 args and 0 kwargsz
 args and z kwargsr   c                 6    g | ]}|                                 S r$   rd   r0   s     r&   r3   z0ConstantVariable.call_method.<locals>.<listcomp>   s$    JJJQ1133JJJr(   __iter__)ListIteratorVariable)mutation_typec              3   8   K   | ]}t          |          V  d S r#   )r;   )r1   r2   r   s     r&   r8   z/ConstantVariable.call_method.<locals>.<genexpr>   s-      <<!z!_--<<<<<<r(   c                 6    g | ]}|                                 S r$   r   )r1   as     r&   r3   z0ConstantVariable.call_method.<locals>.<listcomp>   s$    ???Q!..00???r(   c                 >    i | ]\  }}||                                 S r$   r   )r1   kvs      r&   
<dictcomp>z0ConstantVariable.call_method.<locals>.<dictcomp>   s*    QQQ$!QAq3355QQQr(   r   call_functiondecode__len__	__round____contains__)4tensorr   r   r    strr   BuiltinVariabler   r   lenr   force_unpack_var_sequencer   r'   r   r   rR   call_methodlistsr   rt   r   anyr\   rL   r;   __dict__r   	Exceptionr   rK   floatrj   r   OverflowError
ValueErrorrF   mapr   operatorrg   r~   SymBoolSymFloatSymIntoutputcreate_proxybytescomplexr   roundrd   )rX   rs   r   r   r*   arg_unpacked	arg_constr   
const_argsconst_kwargsmethodr   exc
add_targetopproxysearchresultr   rY   s                     @r&   r   zConstantVariable.call_method   s    	,+++++8tz3 7 7,SZ88FFTMDM6   V^^tz3 7 7^ Ta#)4yy@@CKK@@@	    7<<R@@LCJJ\JJJ	'..tzy/I/IJJJ& C C Cww**2tT6BBBBBCZF4:s$;$; 433333''((,,<L<N<N    <<<<t<<<<< 	2,33DMMOOTZ k"dD&112	???$???JQQ&,,..QQQLL" 	? 	? 	?77&&r4v>>>>>	? dj#&& .	643<+?+?TZ..F6'..vvz/R\/R/RSSS 6 6 6(a"555555556
UCL11 (	6gdj$6O6O (	6 F +223L74:t3L3L3N3NOOO%z2   ,S		!#&6&=sx"H"HII         $''IINNG..00 # (]
Xt,, M   I22'dj*-Er E +11"eZHHH/66rr$*j7Q7QRRR$   0 GGRd37G7NPQPV3W3W.X.X         
E** 	6tx/?/?TZ..F#**66:+N+N+NOOO$*((TW5E-E-ETZ..F6'..vvz/R\/R/RSSS 6 6 6(a"555555556 9dfI'..s4:??? I I I(a"4<<HHHHHHHHHI[  SYY!^^Q8R8R8T8T^'..$*d1g&@&@&B&BCC      (GGRd3/?/F+O+O&P&P         ^##D		Q47;U;U;W;W:!W//11F4:-'..v666   (GGRd3/?/F+O+O&P&P         ww""2tT6:::s   "=D   .EE*H; ;.I,+I,-K 
K?K::K??4M4 4OA	OO*(S 
T0A	T++T0W( (
X2XX'+Y 
Z1ZZA\ 
]2A	]--]2"_* *
a4A	aatree_map_fnr   map_fnresttree_map_kwargsc           
         | j         |                    d          }|L	 t          |                                          }n_# t          $ r |                     |||||          cY S w xY wt          t          |dd           dd          }|                    d           }|r|                    || g|i           S |D ]1}	|		                                s|                     |||||          c S 2| 
                                S t          | j         t          t          t          t          t          t           t"          j        f          r|                    || g|i           S t'                                          |||||          S )Nnone_is_leaffn
__module__ optree)r    r:   rk   rd   r   _tree_map_fallbackr   
startswithr   rq   cloner;   rj   r   r   r   r   r~   dtyperR   call_tree_map)rX   rs   r   r   r   r   none_is_leaf_varr   tree_map_moduleotherrY   s             r&   r   zConstantVariable.call_tree_map1  s    :.22>BB+	#'(8(K(K(M(M#N#NLL*   22#'     #*Kt44lB# # $3#=#=h#G#GG $++BrBBB!  E 1133 #66'" +       zz||#dj3tWc5%+"VWW 	?''TMDM2>>>ww$$
 
 	
s   !A #A)(A)c                 j    t          | j        |          }t          j                            |          S r#   )r   r    r   r   r'   )rX   rs   r   r   s       r&   call_obj_hasattrz!ConstantVariable.call_obj_hasattre  s,     T**)00888r(   c                     dS rf   r$   r[   s    r&   is_python_hashablez#ConstantVariable.is_python_hashablel  rh   r(   c                 *    t          | j                  S r#   )hashr    r[   s    r&   get_python_hashz ConstantVariable.get_python_hasho  s    DJr(   r   c                     ddl m} t          ||          r*|                                 |                                k    S t          |t
                    o)|                                 |                                k    S )Nr   r   )r   r   r;   rd   evaluate_exprr   )rX   r   r   s      r&   is_python_equalz ConstantVariable.is_python_equalr  s    ++++++e_-- 	F**,,0C0C0E0EEEuo.. H''))U-E-E-G-GG	
r(   r#   )*r`   r   __qualname____doc__r   staticmethodr
   r'   rk   r   r   rS   r\   r   rb   rd   r   rg   rl   ro   rq   propertyrF   rL   rv   objectrT   dictrj   r|   r   rt   r   r   r   r   r   r   r   r   r   __classcell__rY   s   @r&   r   r   %   sq         )d)u))) \ X)6d61666 \ X6 AcASA_AAA \ XA"1c "1S "1_ "1 "1 "1 \"1Hc S T       #    T# T T T TC    GDM    3 3 3 3 3$ $ $ $ $ $"$ " " " " 1tO, 1 1 1 X1
)
0?
	
 
 
 
 2V 2 2 2 2 \2 	5 	5 	5tCK'84'? 	54 	5 	5 	5 \	5-23-	o	- - - - 7 s     {;#{; {; ?#	{;
 S/)*{; 
{; {; {; {; {; {;z2
#2
 ,2
  	2

 '2
 c?232
 
2
 2
 2
 2
 2
 2
h 9)9149	9 9 9 X9GDM             	
V 	
 	
 	
 	
 	
 	
 	
 	
 	
r(   r   c            	       &    e Zd ZdZdeej        ej        f         deddf fdZ	e
deded	edd fd
            Zdeej        ef         fdZdefdZdeej        ej        f         fdZdddedefdZded         fdZdefdZdedefdZ xZS )EnumVariablezVariableTracker for enum.Enum and enum.IntEnum instances

    Provides specialized handling for Python enum types, supporting
    both standard Enum and IntEnum with proper value tracking and comparison.
    r    r*   r!   Nc                 H     t                      j        di | || _        d S )Nr$   )rR   rS   r    rW   s      r&   rS   zEnumVariable.__init__  s+    ""6"""


r(   cls_typevalue_vtoptionsc           
      F   |                                 r:t          |          D ]*}|j        |                                k    r | |fi |c S +t	          dd| dt          |           d| dt          |           dg t
          j        t
          j                   d S )Nz!Failed to construct Enum variablezvalue: z, allowed enum values: zAttempted to construct an Enum value that is non-constant (e.g. int, string) or is not an acceptable value for the Enum. Acceptable values for Enum `z`: .)gb_typecontextexplanationhints)rg   rF   r    rd   r   r   
USER_ERRORSUPPORTABLE)clsr   r   r   r   s        r&   r'   zEnumVariable.create  s     &&(( 	2x.. 2 2<8#>#>#@#@@@3v1111111 A7OhOOtH~~OOJ+3J J8<XJ J J R%0Q3D3PQ	
 	
 	
 	
 	
 	
r(   c                 l    t          | j        t                    rt          | j                  S | j        S r#   )r;   r    rj   r[   s    r&   r\   zEnumVariable.as_proxy  s,    dj#&& 	#tz??"zr(   c                 2    dt          | j                   dS )NzEnumVariable(r_   )rK   r    r[   s    r&   rb   zEnumVariable.__repr__  s    2tDJ//2222r(   c                     | j         S r#   r%   r[   s    r&   rd   zEnumVariable.as_python_constant  r]   r(   rs   r   r   c                    t          | j        |          st          |t          v rt	          j        | |          S t          | j        |          }| j        ot          | j        |          }t          j
        |||          S )Nr9   )r   r    r   r   r   GetAttrVariabler   r-   r   r   build)rX   rs   r   r   r-   s        r&   var_getattrzEnumVariable.var_getattr  s|    tz4(( 	&%%))),T4888T**>DK!>!>$R????r(   Tc                 0    t          | j        |            dS rf   )r   r    r[   s    r&   r   zEnumVariable.is_python_hashable  s     T222tr(   c                 D    t          |                                           S r#   )r   rd   r[   s    r&   r   zEnumVariable.get_python_hash  s    D++--...r(   r   c                     t          |t                    o)|                                 |                                k    S r#   )r;   r   rd   )rX   r   s     r&   r   zEnumVariable.is_python_equal  s:    uo.. H''))U-E-E-G-GG	
r(   )r`   r   r   r   r	   enumEnumIntEnumr   rS   classmethodr   r'   rj   r\   r   rb   rd   r  r   r   r   r   rk   r   r   r   s   @r&   r   r     s        eDIt|$;<  PT       

&5
@C
	
 
 
 [
 %	3/    
3# 3 3 3 3E$)T\*A$B    @5 @S @_ @ @ @ @GDM    / / / / /
V 
 
 
 
 
 
 
 
 
r(   r   )*r   r  r   collections.abcr   typingr   r   r   r   r   r	   typing_extensionsr
   r   r~   torch._dynamo.sourcer   r   r   r   r   r   r   r   utilsr   r   r   r   r   r   baser   r   torch._dynamo.symbolic_convertr   	functionsr   r   CONSTANT_VARIABLE_NONEr   r$   r(   r&   <module>r     s      $ $ $ $ $ $ I I I I I I I I I I I I I I I I - - - - - - - -  : : : : : : : : + + + + + + + + 9 9 9 9 9 9 9 9                4 3 3 3 3 3 3 3  0DDDDDD//////V
 V
 V
 V
 V
 V
 V
 V
r
 *)$// ;
 ;
 ;
 ;
 ;
? ;
 ;
 ;
 ;
 ;
r(   