
    i                     
   d Z ddlZ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 ddlmZ ddlmZ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 ddlmZ ddlmZmZm Z m!Z!m"Z"m#Z#m$Z$ ddl%m&Z&m'Z' ddl(m)Z) erddl*m+Z+ ddl,m-Z- d Z.d+dZ/d Z0 G d de'      Z1 G d de'      Z2 G d de1      Z3 G d de1      Z4 G d de1      Z5 G d d e5      Z6 G d! d"e5      Z7 G d# d$e'      Z8 G d% d&e8      Z9 G d' d(e8      Z: G d) d*e8      Z;y),a  
Dictionary-related variable tracking classes for PyTorch Dynamo.

This module implements variable tracking for different types of dictionary-like objects:
- Regular Python dictionaries (dict)
- Ordered dictionaries (collections.OrderedDict)
- Default dictionaries (collections.defaultdict)
- Dictionary views (keys and values)
- Sets and frozensets (implemented internally using dictionaries)

These classes are responsible for tracking dictionary operations during graph compilation,
maintaining proper guards for dictionary mutations and key existence checks. They handle
dictionary creation, modification, key/value access, and view operations while ensuring
correct behavior in the compiled code through appropriate guard installation.

The implementation uses a special _HashableTracker wrapper to handle dictionary keys
while preserving proper aliasing semantics. Sets are implemented as dictionaries with
None values for efficiency and code reuse.
    N)Hashable)OptionalTYPE_CHECKING)is_fake   )graph_break_hints	polyfills	variables)create_call_functioncreate_instruction)raise_observed_exceptionunimplemented_v2)GuardBuilderinstall_guard)is_from_local_source)cmp_name_to_op_mapping
dict_items	dict_keysdict_valuesistyperaise_args_mismatchspecialize_symnode   )ValueMutationNewVariableTrackerConstantVariable)	PyCodegenInstructionTranslatorc                 L    t        |       j                  j                  dd      S )N__instancecheck__F)type__dict__get)objs    W/var/www/html/engine/venv/lib/python3.12/site-packages/torch/_dynamo/variables/dicts.pywas_instancecheck_overrider(   =   s     9!!"5u==    c           
          |ddl m}  |j                         }t        t        |t        dt        |              g       y )Nr   r   zunhashable type: args)torch._dynamo.symbolic_convertr    
current_txr   	TypeErrorr   r#   )argtxr    s      r'   raise_unhashabler2   A   s?    	zH-"--/2-0A$s).MNOr)   c                 Z   t        | t        j                        r!| j                         s| j	                         ryt        | t        j
                        r5| j                         j                  j                  j                  d      d uS t        | t        j                        rt        d | j                  D              S t        | t        j                        r*t        d | j                  j                         D              S t        | t        j                         ryt#        | j$                        sdt'        j(                  | j$                  d      t*        j,                  u r4t        | j$                  t*              rt        | j$                  t.              S t        | t        j0                  t        j2                  t        j4                  t        j6                  t        j8                  t        j:                  t        j<                  t        j>                  t        j@                  jB                  t        jD                  t        jF                  t        jH                  t        jJ                  t        jL                  t        jN                  t        jP                  t        jR                  f      S )NTexample_valuec              3   2   K   | ]  }t        |        y wNis_hashable.0es     r'   	<genexpr>zis_hashable.<locals>.<genexpr>]   s     3a;q>3   c              3   2   K   | ]  }t        |        y wr6   r7   r9   s     r'   r<   zis_hashable.<locals>.<genexpr>_   s     =a;q>=r=   __hash__)*
isinstancer
   LazyVariableTrackeris_realizedr8   TensorVariableas_proxynodemetar%   TupleVariableallitemsFrozenDataClassVariablefieldsvaluesUserDefinedObjectVariabler(   valueinspectgetattr_staticintr?   py_HashableBuiltinVariableSymNodeVariabler   EnumVariableFrozensetVariableUserDefinedClassVariableUserFunctionVariableSkipFunctionVariablemiscNumpyVariableNNModuleVariableUnspecializedNNModuleVariableMethodWrapperVariableTorchInGraphFunctionVariableTypingVariableFunctoolsPartialVariableWeakRefVariable TorchHigherOrderOperatorVariable)xs    r'   r8   r8   K   s    	1i334MMO!Y--. zz|  %%))/:$FF	Ay..	/3177333	Ay88	9=188??+<===1i99:*1773""177J73<<Gqww$!'';//))))**&&++22....,,**77//66((22))::#
 	
r)   c                   N    e Zd Zej                  Zdhej                  Z G d d      Ze	fde	eef   ddf fdZ
d Zd	 Zd
 Zd Zd Zd ZdefdZdefdZdefdZd Zd Zd!dZdddefdZdddefdZdefdZdefdZd Zd Z	 	 	 	 	 	 d" fdZd Z d Z! fd Z" xZ#S )#ConstDictVariableuser_clsc                   N    e Zd ZdZd
dZed        Zd Zed        Z	dd de
fd	Zy)"ConstDictVariable._HashableTrackeraB  
        Auxiliary opaque internal class that wraps a VariableTracker and makes it hashable
        This should not be seen or touched by anything outside of ConstDictVariable and its children
        Note that it's also fine to put VTs into dictionaries and sets, but doing so does not take into account aliasing
        returnNc                 T    t        |      }t        |      st        |       || _        y r6   )r   r8   r2   vt)selfrl   s     r'   __init__z+ConstDictVariable._HashableTracker.__init__   s$    #B'B r? $DGr)   c                    t        | j                  t        j                        rN| j                  j	                         s4| j                  j                         r| j                  j                         S t        | j                  t        j                        r3| j                  j                         j                  j                  d   }|S t        | j                  t        j                        r:t        j                  t        fd| j                  j                  D              }|S t        | j                  t        j                         r| j                  j"                  S t        | j                  t        j$                        r| j                  j"                  S t        | j                  t        j&                        r| j                  j)                         S t        | j                  t        j*                        r6t        j                   | j                  j,                        j.                  S t        | j                  t        j0                        rt        j                  | j                  j2                  j                         D ci c]  \  }}| |      j.                   }}}t        j0                  j5                  | j                  j7                         |      S t        | j                  t        j8                        r| j                  j"                  S | j                  j;                         }|S c c}}w )Nr4   c              3   B   K   | ]  } |      j                     y wr6   )underlying_value)r:   r;   r   s     r'   r<   zFConstDictVariable._HashableTracker.underlying_value.<locals>.<genexpr>   s     N1(1+66Ns   )r@   rl   r
   rA   rB   r8   original_valuerC   rD   rE   rF   rG   rf   _HashableTrackertuplerI   r\   rN   r]   rX   get_functionrb   referent_vtrq   rJ   rK   HashWrapperpython_typerM   as_python_constant)rm   rd   kvfields_valuesr   s        @r'   rq   z3ConstDictVariable._HashableTracker.underlying_value   s=    477I$A$AB++-GG'')ww--//$''9#;#;<GG$$&++00A: H9 DGGY%<%<=,==NNN4 H3 DGGY%?%?@ww}}$DGGY%L%LMww}}$DGGY%C%CDww++--DGGY%>%>?,== 3 34EEEDGGY%F%FG,==@D@T@T@V!8<1Ax{333! ! !88DDGG'')=  DGGY%H%HI ww}}$GG..0H!s   L>c                 ,    t        | j                        S r6   )hashrq   rm   s    r'   r?   z+ConstDictVariable._HashableTracker.__hash__   s    --..r)   c                 
   t        |       t        |      k7  ryt        | t              rGt        j                  t        |       t        |      k(  xr t        fdt        | |      D              S t        |       r| |u S | |k(  S )NFc              3   H   K   | ]  \  }}j                  ||        y wr6   )_eq_impl)r:   ur{   r   s      r'   r<   z>ConstDictVariable._HashableTracker._eq_impl.<locals>.<genexpr>   s'      0041H%%a+0s   ")	r#   r@   rt   rf   rs   lenrH   zipr   )abr   s     @r'   r   z+ConstDictVariable._HashableTracker._eq_impl   s|     Aw$q'!Au%,==1vQ' C 08;Aq	0 -  AvAvr)   otherc                     t         j                  }t        ||      s%t        j                  |      sJ t        |             t        ||      r&|j                  | j                  |j                        S |j                  | j                  |      S r6   )rf   rs   r@   r   
is_literalr#   r   rq   )rm   r   r   s      r'   __eq__z)ConstDictVariable._HashableTracker.__eq__   s    (99HeX.2B2M2Me2T UT %*(()>)>@V@VWW $$T%:%:EBBr)   rj   N)__name__
__module____qualname____doc__rn   propertyrq   r?   staticmethodr   boolr    r)   r'   rs   ri      sQ    		 
%	 
%	N	/ 
	 
			C D 		C 		Cr)   rs   rI   rj   Nc           	         d|v r|j                  d       d|v r|j                  d       t        	|   di | t        j                  t        fd|j                         D              sJ fd}| j                  |      } ||j                         D ci c]  \  }} ||      | c}}      | _        t        | j                         | _
        |j                         | _        || _        y c c}}w )Noriginal_itemsshould_reconstruct_allc              3   l   K   | ]+  \  }}t        |t        f      xr t        |t               - y wr6   )r@   r   )r:   rd   r{   r   s      r'   r<   z-ConstDictVariable.__init__.<locals>.<genexpr>   s?      
 1 q?H56 /1o./
s   14c                 0    t        |       r| S  |       S r6   )r@   )keyr   s    r'   make_hashablez1ConstDictVariable.__init__.<locals>.make_hashable   s    $S(33F#Fr)   r   )popsuperrn   rf   rs   rH   rI   _get_dict_cls_from_user_clsr   sourcer   copyr   rg   )
rm   rI   rg   kwargsr   dict_clsrd   r{   r   	__class__s
           @r'   rn   zConstDictVariable.__init__   s     v%JJ'(#v-JJ/0"6"$55  
 
 
 	
 
	G 33H=u{{}Mtq!}Q/2MN
 +?t{{*K&K##jjl  Ns   C3
c                     t         t        j                  t        j                  f|v r|}nt	        fd|j
                  D              }|v sJ |       |t        j                  u rt         }|S )Nc              3   ,   K   | ]  }|v s|  y wr6   r   )r:   baseaccepted_dict_typess     r'   r<   z@ConstDictVariable._get_dict_cls_from_user_cls.<locals>.<genexpr>  s      T=P5Ps   	)dictcollectionsOrderedDictdefaultdictnext__mro__)rm   rg   r   r   s      @r'   r   z-ConstDictVariable._get_dict_cls_from_user_cls   s{    #[%<%<k>U>UV **H  !)!1!1 H ..88. {...Hr)   c                     | j                   j                         D ci c].  \  }}|j                  j                         |j                         0 c}}S c c}}w r6   )rI   rl   rD   rm   rz   r{   s      r'   rD   zConstDictVariable.as_proxy  s<    :>**:J:J:LM$!Q-MMM   3Ac                 n    ddj                  d | j                  j                         D              z   dz   S )N{, c              3   |   K   | ]4  \  }}|j                   j                          d |j                           6 yw)z: Nrl   
debug_repr)r:   rz   r{   s      r'   r<   z/ConstDictVariable.debug_repr.<locals>.<genexpr>  s7      =AQ144??$%R'78s   :<})joinrI   r   s    r'   r   zConstDictVariable.debug_repr  s?    ii EIZZEUEUEW  		
r)   c                     | j                   j                         D ci c].  \  }}|j                  j                         |j                         0 c}}S c c}}w r6   )rI   rl   ry   r   s      r'   ry   z$ConstDictVariable.as_python_constant  sP     

((*
1 DD##%q';';'==
 	
 
r   c                     | j                          | j                  j                         D ci c]   \  }}|j                  j                         |" c}}S c c}}w r6   )install_dict_keys_match_guardrI   rl   ry   r   s      r'   keys_as_python_constantz)ConstDictVariable.keys_as_python_constant%  sE    **,9=9I9I9KLA'')1,LLLs   %Ac                     | j                   S r6   )rg   r   s    r'   rx   zConstDictVariable.python_type)  s    }}r)   c                     t        |t              sJ t        j                  }t	        |      xrD  ||      | j
                  v xr. t        | j
                   ||         t        j                         S r6   )r@   r   rf   rs   r8   rI   r
   DeletedVariable)rm   rl   r   s      r'   __contains__zConstDictVariable.__contains__,  se    "o...$55O T

*Ttzz(2,79R9RSS	
r)   c                 V    t        d | j                  j                         D              S )Nc              3   R   K   | ]  }t        |t        j                          ! y wr6   )r@   r
   r   )r:   rd   s     r'   r<   z(ConstDictVariable.len.<locals>.<genexpr>6  s%      
=>
1i7788
s   %')sumrI   rL   r   s    r'   r   zConstDictVariable.len5  s)     
BF**BSBSBU
 
 	
r)   c                 x      j                   xs, t         fd j                  j                         D              S )Nc              3      K   | ]<  \  }}j                  j                  j                  |j                        |       > y wr6   )is_new_itemr   r%   rl   )r:   r   rN   rm   s      r'   r<   z2ConstDictVariable.has_new_items.<locals>.<genexpr>;  s?      2
U T0044SVV<eD2
s   AA)r   anyrI   r   s   `r'   has_new_itemszConstDictVariable.has_new_items:  s7    ** 
c 2
"jj..02
 /
 	
r)   c                     |rS|j                         rC|j                         r3t        |j                               t        |j                               k7  S t        |      t        |      k7  S r6   )rB   idrealize)rm   rN   r   s      r'   r   zConstDictVariable.is_new_item@  sO    U&&(U->->-@emmo&"U]]_*===%yBuI%%r)   c                 J   d}| j                   j                         D ]h  \  }}| j                  j                  |j                        }| j	                  ||      s| j
                  sJ ||j                          ||       |dz  }j |j                  t        d|             y )Nr   r   	BUILD_MAPr0   )rI   r   r%   rl   r   r   append_outputr   )rm   codegennum_argsr   rN   items         r'   reconstruct_kvs_into_new_dictz/ConstDictVariable.reconstruct_kvs_into_new_dictF  s    ****, 	JC&&**3662De,0K0KA	 	0(KLr)   c                     | j                   t        j                  u rAj                  fd       | j	                         j                  t        dd             y | j	                         y )Nc                  n     j                   j                  t               j                  d      g      S )Nr   extend_outputcreate_load_python_moduler   create_load_attrr   s   r'   <lambda>z/ConstDictVariable.reconstruct.<locals>.<lambda>V  s3    --99+F00? r)   r   F)rg   r   r   add_push_nullr   r   r   rm   r   s    `r'   reconstructzConstDictVariable.reconstructR  s\    ==K333!! ..w7!!"6q%"@A..w7r)   r1   r    r0   c                     t         j                  |      }|| j                  vrt        t        |       | j                  |   S r6   )rf   rs   rI   r   KeyError)rm   r1   r0   r   s       r'   'getitem_const_raise_exception_if_absentz9ConstDictVariable.getitem_const_raise_exception_if_absentb  s8      005djj $Xr2zz#r)   c                     t         j                  |      }|| j                  vr=d|j                   d}t	        dd|j                   |dgt
        j                         | j                  |   S )NzDictionary key z not found during tracingzkey not found in dictzKey z>Check if the key exists in the dictionary before accessing it.gb_typecontextexplanationhints)rf   rs   rI   rN   r   r   
USER_ERROR)rm   r1   r0   r   msgs        r'   getitem_constzConstDictVariable.getitem_constj  ss    005djj #CII;.GHC/syyk*T&11	 zz#r)   c                 h    t         j                  |      }|| j                  vry | j                  |   S r6   )rf   rs   rI   )rm   r0   r   s      r'   maybe_getitem_constz%ConstDictVariable.maybe_getitem_consty  s/    005djj zz#r)   c                 @   || v sJ t         j                  |      }t        | j                  j	                               j                  |      }t        | j                  j	                               |   }t        |t        j                        r|j                          y y r6   )rf   rs   rt   rI   keysindexr   r@   r
   rA   r   )rm   r0   r   r   original_key_vts        r'   realize_key_vtz ConstDictVariable.realize_key_vt  s~    d{{005djjoo'(..s3 3 3 8 8 :;EBoy'D'DE##% Fr)   c                 n    | j                   r)t        | j                  t        j                               y y r6   )r   r   
make_guardr   DICT_KEYS_MATCHr   s    r'   r   z/ConstDictVariable.install_dict_keys_match_guard  s%    ;;$//,*F*FGH r)   c           	         ddl m} | j                  sy |j                  j                  j                  |       ry |d   | v }|d   j                  at        |d   |      rRt        | j                  t        j                  t        |       j                  |d   j                  |                    y |d   j                  r(|r| j                  |d          y | j                          y y )Nr   r   r   )r   invert) r   r   outputside_effectsis_modifiedr@   r   r   	functoolspartialr#   CONTAINS_GUARDrN   r   r   )rm   r1   r,   r   containss        r'   install_dict_contains_guardz-ConstDictVariable.install_dict_contains_guard  s     	'{{99!!--d37d?7>>!ja:J&K%%T
11 GMM#+| !W^^##DG,224	 r)   c           	         ddl m}m} t        j                  }|xr t        |d         }|dk(  r t        j                  t              j                  |g|i |}	|j                  j                  j                  |        | j                  j                  |	j                          |j                  d       S |dk(  r/t        |      dk7  rt!        ||       | j#                  ||d         S |dk(  rf|s|rt!        ||       | j%                          | j&                  r/|j                  j(                  j+                  | j&                         t-        |       S |dk(  rmt        |      rt!        ||       | j%                          | j&                  r/|j                  j(                  j+                  | j&                         t/        |       S |dk(  rz|s|rt!        ||       | j%                          | j&                  r/|j                  j(                  j+                  | j&                         |s|rt1        t2        |       t5        |       S |d	k(  rT| j%                          |s|rt!        ||       | j7                  | j                  j9                         t;               d 
      S |dk(  rE|s|rt!        ||       | j%                           |j                  t        | j                              S |dk(  r| j=                         r|st?        |d          | j%                          |st        |      dk(  sJ |j                  j                  j                  |        |d   | j                   ||d         <    |j                  d       S |dk(  r|r| j=                         rr| j%                          d| _         |j                  j                  j                  |        | j                  jC                   ||d                 |j                  d       S |dk(  r|t        |      dvrt!        ||       |st?        |d          |d   | vr7| jE                  ||       t        |      dk(  r |j                  d       S |d   S | jG                  ||d         S |dk(  r| j=                         rt        |      dvrt!        ||       |st?        |d          |d   | vr5| jE                  ||       t        |      dk(  rt1        tH        |       |d   S d| _         |j                  j                  j                  |        | j                  jK                   ||d               S |dk(  r| j=                         rtM        | jN                  t              r;tM        | jN                  tP        jR                        st        |      rt!        ||       | j                  s% |j                  d      }
t1        tH        ||
g       | jN                  tP        jR                  u rt        |      dk(  sd|v rt        |      dk(  rtU        |d   |      r|d   jV                  }n8|jY                  d      x}rtU        ||      r|jV                  }nt!        ||       | j                  j[                        \  }}n| j                  j[                         \  }}d| _         |j                  j                  j                  |        t        j\                  |j^                  |g      S |dk(  rh|s|rt!        ||       d| _         |j                  j                  j                  |        | j                  ja                           |j                  d       S |dk(  rM| j=                         r<| j%                          t        |      dk(  }t        |      dkD  }|s|r|j                  j                  j                  |        |rktU        |d   t              r|d   j%                          |d   }n|jc                  |t        |d         }| j                  j                  |j                         |rT|j                         D ci c]  \  }} | |j                  |            |  }}}| j                  j                  |        |j                  d       S td        |   ||||      S |dk(  rRt        |      st!        ||       |st?        |d          | jE                  ||       |d   | v } |j                  |      S |dk(  r| j=                         rt        |      dvrt!        ||       |st?        |d          | j%                          |rJ t        |      dk  sJ | ji                  |d         }||S t        |      dk(  r |j                  d       }n|d   }|j                  j                  j                  |        || j                   ||d         <   |S |dk(  r| j%                          |j                  j                  j                  |        |d   | vrt1        tH        |       d}t        |      dk(  rtU        |d   |      r|d   jV                  }|r.d|v r*tU        |d   |      r|jY                  d      jV                  } ||d         }| j                  jk                  ||        |j                  d       S |dk(  rctm        | t              rSt        |      dk7  rt!        ||       t        jn                  tp        jr                        ju                  || |d   gi       S |dk(  r/ |j                  | jg                  |d||      jV                         S |dk(  rCt        |      dk(  sJ |d   }tm        |t        t        jv                  f      sLd | jy                         jz                   d!|jy                         jz                   d"}
t1        t2        ||
g       | jN                  |jN                  h}t}        d# |D              rtP        jR                  nt        }| j%                          | j7                  | j                  j9                         t;               d |$      }|d   j%                          |j                  j                  |d   j                         |S |d%k(  r| jg                  |d||       | S td        |   ||||      S c c}}w )&Nr   )rS   r   r   rn   __getitem__rI   r   rL   r   )rI   mutation_typer   __len____setitem__r   __delitem__Tr%   )r   r   r   popitemzpopitem(): dictionary is emptyr+   last)r  clearupdater   
setdefaultmove_to_endr   __ne____or__z$unsupported operand type(s) for |: 'z'and ''c              3   P   K   | ]  }t        |t        j                           y wr6   )
issubclassr   r   )r:   ts     r'   r<   z0ConstDictVariable.call_method.<locals>.<genexpr>  s     J!z![%<%<=J   $&)rI   r  r   rg   __ior__)?r   rS   r   rf   rs   r8   r
   r   	call_dictr   r   mutationrI   r	  creater   r   r   r   r   guard_on_key_orderaddDictItemsVariableDictKeysVariabler   r/   DictValuesVariablecloner   r   
is_mutabler2   r   r  r   r   r   r   r  rg   r   r   r@   rN   r%   r  rG   rl   r  call_custom_dictr   call_methodr   r  r   rX   r	   dict___eq__call_functionUserDefinedDictVariablerx   r   r   )rm   r1   namer,   r   rS   r   r   arg_hashabletemp_dict_vtr   r  r{   rz   has_arg
has_kwargsdict_vtr   rN   rd   r   r   tsrg   new_dict_vtr   s                            r'   r  zConstDictVariable.call_method  s    	8$554DG 4:D944T:DD#L II""++D1JJl001*#**400]"4yA~#B-??DGLLW_v#B-..0{{		,,00=$T**V^4y#B-..0{{		,,00=#D))Xv#B-..0{{		,,00=v(B7%d++V^..0v#B-::jjoo'7G7IRV    Yv#B-..0*#**3tzz?;;]"t'8 a)..0#d)q.00II""++D1,0GDJJxQ()*#**400]"|8I..0*.D'II""++D1JJ""8DG#45*#**400U]4y&#B- a)Awd"00T:t9>2+22488Aw%%b$q'22U]t04y&#B- a)Awd"00T:t9>,Xr:Aw*.D'II""++D1::>>(47"344Y4??#44==$/"4==+2I2IJI#B-::-&--.NO(2SEB}} 7 77D	Q&F"2t9>ja:J&K7==D!::f--a-:aAQ3R77D'D1zz))t)41zz))+1*.D'II""++D1**ADD!955W_v#B-*.D'II""++D1JJ*#**400X$//"3 ..0$i1nGVqJ*		&&//5!$q'+<= Q==?"&q'"1"B"B2tTRSW"UJJ%%gmm4 %+LLN Aq !!8!1!8!8!;<a?F  JJ%%f-.'..t44w*2tT6BB^#t9#B- a),,R6Aw$H*#**844\!doo&74y&#B- a)..0:t9>!>,,T!W5E t9>/(//5AQA		&&//501

8DG,-]"..0II""++D1Awd"(26D4yA~*T!W6F"GAw}} f$vf~/?@zz&)//47#CJJ""3T"2*#**400X&##
 4yA~#B-11)2G2GHVVT47OR  X*#**$$R4@FFF  Xt9>!>GE& )9+L+LM ;4;K;K;M;V;V:W X!--/889<  )BcUC --0B JrJJ ''  ..0**jjoo'.0!	 % K G113$$T!W]]3YR48K7&r4v>>s   /#tc                     | j                          | j                  j                         D cg c]  }|j                   c}S c c}w r6   )r   rI   r   rl   )rm   r1   rd   s      r'   unpack_var_sequencez%ConstDictVariable.unpack_var_sequence  s1    **,"jjoo/0000s   Ac                 &   | j                   t        u rB|| j                   j                  v rt        j                  d      S t        j                  d      S d| j                    d}t        dd| j                    |dgt        j                         y )	NTFzhasattr on z is not supportedzunsupported hasattr operationzClass z+Consider using a regular dictionary insteadr   )rg   r   r$   r   r  r   r   SUPPORTABLE)rm   r1   r#  r   s       r'   call_obj_hasattrz"ConstDictVariable.call_obj_hasattr  s     ==D t}}---'..t44#**511DMM?*;<3T]]O,="..		
r)   c                 B    | j                          t        |   di |S Nr   )r   r   r  )rm   r   r   s     r'   r  zConstDictVariable.clone  s!    **,w}&v&&r)   r   r   r,   zlist[VariableTracker]r   zdict[str, VariableTracker]rj   r   )$r   r   r   r   DICT_CONTAINSr   r   _nonvar_fieldsrs   r   rn   r   rD   r   ry   r   rx   r   r   rQ   r   r   r   r   r   r   r   r   r   r   r   r  r,  r/  r  __classcell__r   s   @r'   rf   rf      s;   !//N 			'	'N
SC SCp !!O_45!!
 
!!F&N

M
$ 

S 


t 
&
M8 )0? 7 o  &/ &I%5Ni? &	i?
 -i? 
i?V	1
&' 'r)   rf   c                   `     e Zd Zdeddf fdZd Zd ZddZded	   d
e	e
d	f   dd	fdZ xZS )MappingProxyVariabledv_dictrj   Nc                 V    t        |   di | t        |t              sJ || _        y r1  )r   rn   r@   rf   r:  rm   r:  r   r   s      r'   rn   zMappingProxyVariable.__init__  s+    "6"'#4555r)   c                 "    t         j                  S r6   )typesMappingProxyTyper   s    r'   rx   z MappingProxyVariable.python_type  s    %%%r)   c                 8    | j                   j                  |      S r6   )r:  r,  rm   r1   s     r'   r,  z(MappingProxyVariable.unpack_var_sequence  s    ||//33r)   c                    | j                   r=d| j                    d}t        dd| j                    |dgt        j                         j	                  fd        | j
                         j                  t        dd	             y )
Nz*Preexisting MappingProxyVariable (source: zS) cannot be reconstructed because the connection to the original dict will be lost.z%mapping proxy cannot be reconstructedSource: zCUse a mapping proxy constructed in the same `torch.compile` region.r   c                  n     j                   j                  t               j                  d      g      S )Nr?  )r   r   r>  r   r   s   r'   r   z2MappingProxyVariable.reconstruct.<locals>.<lambda>  s4    G))55e<,,-?@ r)   r   F)r   r   r   r.  r   r:  r   r   )rm   r   r   s    ` r'   r   z MappingProxyVariable.reconstruct  s    ;;<T[[M JL L  ?"4;;-0Y&22	 		
 	21e<=r)   r,   r   r   c                     | j                   rE|j                  j                  j                         r!d}t	        dd| j                    d|ddg       | j
                  j                  ||||      S )Na  A dict has been modified while we have an existing mappingproxy object. A mapping proxy object, as the name suggest, proxies a mapping object (usually a dict). If the original dict object mutates, it is reflected in the proxy object as well. For an existing proxy object, we do not know the original dict it points to. Therefore, for correctness we graph break when there is dict mutation and we are trying to access a proxy object.z-mapping proxy affected by dictionary mutationrC  z, Dict mutation detectedzNAvoid modifying dictionaries that might be referenced by mapping proxy objectszROr avoid using the mapping proxy objects after modifying its underlying dictionaryr   )r   r   r   has_existing_dict_mutationr   r:  r  )rm   r1   r#  r,   r   r   s         r'   r  z MappingProxyVariable.call_method"  ss     ;;29911LLN7  G"4;;-/GHdh	 ||''D$??r)   r2  )r   r   r   rf   rn   rx   r,  r   listr   strr  r6  r7  s   @r'   r9  r9    s^     1  
&4>6@ $%	@
 S++,@ 
@r)   r9  c                       e Zd Zd Zd Zy)NNModuleHooksDictVariablec                      y r6   r   r   s    r'   r   z7NNModuleHooksDictVariable.install_dict_keys_match_guardB      r)   c                      y r6   r   rm   r1   r,   s      r'   r   z5NNModuleHooksDictVariable.install_dict_contains_guardE  rL  r)   N)r   r   r   r   r   r   r)   r'   rJ  rJ  @  s    r)   rJ  c                   d     e Zd Zdd fdZ fdZ fdZed        Z	 	 	 	 	 	 d	 fdZd Z	 xZ
S )
DefaultDictVariablec                 ^    t        |   ||fi | |t        j                  u sJ || _        y r6   )r   rn   r   r   default_factory)rm   rI   rg   rR  r   r   s        r'   rn   zDefaultDictVariable.__init__J  s3    3F3;22222.r)   c                 t    | j                   t        t        t        fvr| j                  syt
        |          S )NF)rR  rG  rt   r   rI   r   is_python_constantrm   r   s    r'   rT  z&DefaultDictVariable.is_python_constantO  s1     eT'::4::w)++r)   c                 ^    d| j                   j                          dt        |           dS )Nzdefaultdict(r   ))rR  r   r   rU  s    r'   r   zDefaultDictVariable.debug_reprV  s4    4//::<=R@R@T?UUVW	
r)   c                     t        | t        j                        r"| j                  t        t
        t        t        fv S t        | t        j                  j                        S r6   )
r@   r
   rS   fnrG  rt   r   set	functionsBaseUserFunctionVariabler   s    r'   is_supported_argz$DefaultDictVariable.is_supported_arg[  sC    c944566dE4555c9#6#6#O#OPPr)   c                 ,   |dk(  r}t        |      dk(  sJ |d   | v r| j                  ||d         S | j                  t        |d          | j                  j	                  |g i       }t
        |   |d|d   |f|       |S t
        |   ||||      S )Nr  r   r   r  )r   r   rR  r   r!  r   r  )rm   r1   r#  r,   r   default_varr   s         r'   r  zDefaultDictVariable.call_methodb  s     = t9>!>Aw$))"d1g66''/"d1gY00"&"6"6"D"DRR"PKG'MDG[+A6 '&7&r4v>>r)   c                     j                  fd        | j                         | j                         j                  t	        dd             y )Nc                  n     j                   j                  t               j                  d      g      S )Nr   r   r   s   r'   r   z1DefaultDictVariable.reconstruct.<locals>.<lambda>}  s3    G))55kB,,]; r)   r   F)r   rR  r   r   r   r   s    `r'   r   zDefaultDictVariable.reconstructz  sJ    	
 	$$%**7321e<=r)   r6   r   r3  )r   r   r   rn   rT  r   r   r]  r  r   r6  r7  s   @r'   rP  rP  I  sP    /
,

 Q Q? &	?
 -? 
?0>r)   rP  c                        e Zd ZdZej
                  Zdee   ddf fdZ	d Z
ed        Zed        Zd	 Zd
 Zd ZddZd Zdee   deeef   ddf fdZdddefdZd Z fdZ xZS )SetVariablez.We model a sets as dictionary with None valuesrI   rj   Nc                 v    t         j                  |t        j                               }t	        |   |fi | y r6   )r   fromkeysrc  _default_valuer   rn   rm   rI   r   r   s      r'   rn   zSetVariable.__init__  s0    
 e[%?%?%AB)&)r)   c                     | j                   syddj                  d | j                   j                         D              z   dz   S )Nzset()r   ,c              3   P   K   | ]  }|j                   j                            y wr6   r   r:   rz   s     r'   r<   z)SetVariable.debug_repr.<locals>.<genexpr>       !O!$$//"3!Or  r   rI   r   r   r   s    r'   r   zSetVariable.debug_repr  s7    zz!OTZZ__=N!OOORUUUr)   c                 H    t        | j                  j                               S r6   )rZ  rI   r   r   s    r'   	set_itemszSetVariable.set_items  s    4::??$%%r)   c                  ,    t        j                  d       S r6   )r   r  r   r)   r'   rf  zSetVariable._default_value  s      &&t,,r)   c                 p    | j                   D ch c]  }|j                  j                          c}S c c}w r6   )ro  rl   rD   rm   rz   s     r'   rD   zSetVariable.as_proxy  s$    )-8A888   !3c                     t         S r6   )rZ  r   s    r'   rx   zSetVariable.python_type  s    
r)   c                 p    | j                   D ch c]  }|j                  j                          c}S c c}w r6   )ro  rl   ry   rr  s     r'   ry   zSetVariable.as_python_constant  s'    37>>Ba'')BBBrs  c                     |j                  | j                  D cg c]  }|j                   c}       |j                  t	        dt        | j                                     y c c}w )N	BUILD_SETr   )foreachro  rl   r   r   r   rm   r   rd   s      r'   r   zSetVariable.reconstruct  sE    t~~6!670#dnnBUVW 7s   A$c                    	  || g|D cg c]  }|j                          c}i |j                         D ci c]  \  }}||j                          c}}}t        j                  |      S c c}w c c}}w # t        $ rL}	t        t	        |	      |t        t        t        j                  |	j                                     Y d }	~	qd }	~	ww xY w)Nr+   )ry   rI   	Exceptionr   r#   rG  mapr   r  r,   r   build)
rm   r1   rY  r,   r   rd   rz   r{   resexcs
             r'   _fast_set_methodzSetVariable._fast_set_method  s    	37-$-@Q!&&(@9?HA1a**,,HC $$R-- AH 	$S	2D-=-D-Dchh)O$P 	s3   	A: A/A: A4A: /A: :	CAC

Cr,   r   r   c                 >   ddl m} |dv rM |||      rD| j                         t        u r.| j                         }| j	                  |t        ||      ||      S |dk(  r t        j                  t              j                  |g|| }|j                  j                  j                  |        | j                  j                          | j                  j                  |j                         t        j                   d       S |dk(  r;|rJ t#        |      dk7  rt%        ||       d}|d   t&        j)                         f}nv|d	k(  rB|rJ |rJ 	 | j*                  j-                         j.                  }t:        | y  ||f|       |S |dk(  rWt#        |      dk7  rt%        ||       |rJ t        j>                  t@        jB                        jE                  || |d   gi       S |dk(  r;|rJ t        j>                  t@        jF                        jE                  || g|i       S |dk(  r;|rJ t        j>                  t@        jH                        jE                  || g|i       S |dk(  r;|rJ t        j>                  t@        jJ                        jE                  || g|i       S |dk(  r;|rJ t        j>                  t@        jL                        jE                  || g|i       S |dk(  r;|rJ t        j>                  t@        jN                        jE                  || g|i       S |dk(  rUt#        |      dk7  rt%        ||       |rJ t        j>                  t@        jP                        jE                  || g|i       S |dk(  rUt#        |      dk7  rt%        ||       |rJ t        j>                  t@        jR                        jE                  || g|i       S |dk(  rK| jU                         r;|rJ t        j>                  t@        jV                        jE                  || g|i       S |dk(  r?|rJ t#        |      dk(  sJ |d   | vrt3        t0        ||
       t:        | y  |d	||      S |dk(  rC|rJ t#        |      dk(  sJ |d   | v rt:        | y  |d	||      S t        j                   d       S |dv rt#        |      dk7  rt%        ||       tX        jZ                  tX        j\                  d}
|d   j_                         }ta        |t&              s+t        j                  t              jE                  ||gi       }t        j                  |
jc                  |            jE                  || |gi       S |dv rdddddjc                  |      }te        |d   t&        t        jf                  f      sQt        j                   d| d| ji                          d|d   ji                          d      }t3        tj        ||g
       | j=                  ||||      S |dv rte        |d   t&        t        jf                  f      sQt        j                   d| d| ji                          d|d   ji                          d      }t3        tj        ||g
       dddddjc                  |      }| j=                  ||||       | S |dk(  rwte        |d   t&        t        jf                  f      st        j                   d      S | j=                  |d||      }t        j                   t#        |j*                        dk(        S |tl        v rute        |d   t&        t        jf                  f      st        j                   tn              S t        j                   tm        |   | j*                  |d   j*                              S t:        | y  ||||      S # t0        $ rH}	t3        t0        |t5        t7        t        j                   |	j8                              
       Y d }	~	d }	~	ww xY w) Nr   )check_constant_args)
isdisjointunionintersection
differencesymmetric_differencern   r  r   r  r   r   r+   r  r  intersection_updater  r  difference_updater  symmetric_difference_updater	  removediscard)rN   )issubset
issuperset)__and__r  __xor____sub__z unsupported operand type(s) for z: 'z' and 'r  )__iand__r  __ixor____isub__r   F)8utilsr  rx   rZ  r  getattrr
   rS   call_setr   r   r  rI   r  r	  r   r  r   r   rc  rf  ro  r   rl   r   r   rG  r|  r,   r   r  rX   r	   set_isdisjointr!  set_intersectionset_intersection_update	set_unionset_differenceset_difference_updateset_symmetric_differenceset_symmetric_difference_updater  
set_updateoperatorleger   r   r%   r@   UserDefinedSetVariablepython_type_namer/   r   NotImplemented)rm   r1   r#  r,   r   r  py_typetemp_set_vtresultr;   opr   mr   rr   s                  r'   r  zSetVariable.call_method  s    	0  $D&1  "c)&&(G((WWd-CT6RR:A)33C8AA"UtUfUKII""++D1JJJJk//0#**400U]:4yA~#B- DG[779:DU]:O8++-00
 GD6)V<M\!4yA~#B-:11((mBtAw45 ^#:11**mBr23 **:1111mBr23 W_:11)2E2EFTTTMDM2  \!:11((mBr23 ((:11//mBr23 ++4yA~#B-:1122mBr23 224yA~#B-:1199mBr23 X$//"3:11)2F2FGUUTMDM2  X:t9>!>Awd"(2DA7&r5$??Y:t9>!>Aw$w*2udFCC'..T:://4yA~#B- %KK&kkB GOO%E%-!11#6DDR%RTU,,RVVD\:HHT5M2  @@)!1'	
 c$i  d1gY5U5U'VW&--6tfC@U@U@W?XX_`def`g`x`x`z_{{|} )BcUC##B488DDd1gY5U5U'VW&--6tfC@U@U@W?XX_`def`g`x`x`z_{{|} )BcUC1#9/	
 c$i  RD&1KXd1gY5U5U'VW'..u55  %;T6JA#**3q{{+;q+@AA++d1gY5U5U'VW'..~>>#**&t,T^^T!W=N=NO  w"2tT6::u  (btC0@0G0G,P'Q s   $_ 	`=``r1   r    r0   c                     t        d      )NzIllegal to getitem on a set)RuntimeError)rm   r1   r0   s      r'   r   zSetVariable.getitem_consth  s    899r)   c                      y r6   r   r   s    r'   r   z)SetVariable.install_dict_keys_match_guardk      r)   c                 &    t         |   ||       y r6   )r   r   )rm   r1   r,   r   s      r'   r   z'SetVariable.install_dict_contains_guardo  s    +B5r)   r2  )r   r   r   r   r   SET_CONTAINSr   rG  r   rn   r   r   ro  r   rf  rD   rx   ry   r   r  r   rH  r  r   r   r   r6  r7  s   @r'   rc  rc    s    8!..N*O$* 
	*V & & - -9CX
.e; ?#	e;
 S/)*e; 
e;N: 7 :o :6 6r)   rc  c                        e Zd Zdee   ddf fdZd Zed        Zd Z	d Z
dd	Zd
ee   deeef   ddf fdZ xZS )rV   rI   rj   Nc                 &    t        |   |fi | y r6   r   rn   rg  s      r'   rn   zFrozensetVariable.__init__t      
 	)&)r)   c                     | j                   syddj                  d | j                   j                         D              z   dz   S )Nzfrozenset()r   ri  c              3   P   K   | ]  }|j                   j                            y wr6   r   rk  s     r'   r<   z/FrozensetVariable.debug_repr.<locals>.<genexpr>  rl  r  r   rm  r   s    r'   r   zFrozensetVariable.debug_repr{  s7    zz !OTZZ__=N!OOORUUUr)   c                 6    | j                   j                         S r6   )rI   r   r   s    r'   ro  zFrozensetVariable.set_items  s    zz  r)   c                     t         S r6   )	frozensetr   s    r'   rx   zFrozensetVariable.python_type      r)   c                     t        | j                  D ch c]  }|j                  j                          c}      S c c}w r6   )r  ro  rl   ry   rr  s     r'   ry   z$FrozensetVariable.as_python_constant  s,    T^^L!$$113LMMLs   !<c                     j                  | j                  D cg c]  }|j                   c}       j                  fd       j	                  t        dd             y c c}w )Nc                  F     j                   j                  d      g      S )Nr  )r   create_load_globalr   s   r'   r   z/FrozensetVariable.reconstruct.<locals>.<lambda>  s%    G))..{; r)   r   F)rx  ro  rl   r   r   r   ry  s    ` r'   r   zFrozensetVariable.reconstruct  sR    t~~6!67	
 	21e<= 7s   A%r,   r   r   c                     |dv rt        d| d      |dk(  rt        j                  d       S |dv r't        |   ||||      }t        |j                        S t        |   ||||      S )Nr  r   r	  r  r  r  Illegal call_method z on a frozensetrn   )r   r  r  r  )r  r   r  r   r  rV   rI   )rm   r1   r#  r,   r   r  r   s         r'   r  zFrozensetVariable.call_method  s     II!5dV?KLLZ $**400 
 
 #BdF;A$QWW--w"2tT6::r)   r2  )r   r   r   rG  r   rn   r   r   ro  rx   ry   r   r   rH  r  r6  r7  s   @r'   rV   rV   s  s    *O$* 
	*V ! !N	>; ?#	;
 S/)*; 
; ;r)   rV   c                        e Zd Zdee   ddf fdZd Zd Zd Ze	d        Z
d	 Zd
 Zdee   deeef   ddf fdZ xZS )DictKeySetVariablerI   rj   Nc                 &    t        |   |fi | y r6   r  rg  s      r'   rn   zDictKeySetVariable.__init__  r  r)   c                     | j                   syddj                  d | j                   j                         D              z   dz   S )Nzdict_keys([])zdict_keys([ri  c              3   P   K   | ]  }|j                   j                            y wr6   r   rk  s     r'   r<   z0DictKeySetVariable.debug_repr.<locals>.<genexpr>  s     H144??,Hr  z])rm  r   s    r'   r   zDictKeySetVariable.debug_repr  sA    zz" ((Hdjjoo6GHHIr)   c                      y r6   r   r   s    r'   r   z0DictKeySetVariable.install_dict_keys_match_guard  r  r)   c                      y r6   r   rN  s      r'   r   z.DictKeySetVariable.install_dict_contains_guard  r  r)   c                     | j                   S r6   )rI   r   s    r'   ro  zDictKeySetVariable.set_items  s    zzr)   c                     t         S r6   r   r   s    r'   rx   zDictKeySetVariable.python_type  r  r)   c                     t         j                  | j                  D ch c]  }|j                  j	                          c}d       j                         S c c}w r6   )r   re  ro  rl   ry   r   rr  s     r'   ry   z%DictKeySetVariable.as_python_constant  s>    }}04?1QTT$$&?

$&	?s   !Ar,   r   r   c                 N    |dv rt        d| d      t        | 	  ||||      S )Nr  r  z on a dict_keys)r  r   r  rm   r1   r#  r,   r   r   s        r'   r  zDictKeySetVariable.call_method  s9     II!5dV?KLLw"2tT6::r)   )r   r   r   rG  r   rn   r   r   r   r   ro  rx   ry   r   rH  r  r6  r7  s   @r'   r  r    s    *O$* 
	*  
	; ?#		;
 S/)*	; 
	; 	;r)   r  c                        e Zd ZU dZdZee   ed<   deddf fdZ	e
d        Ze
d        Zd	 Zdd
Zd Zded   deedf   ddf fdZ xZS )DictViewVariablezu
    Models _PyDictViewObject

    This is an "abstract" class. Subclasses will override kv and the items method
    Nkvr:  rj   c                 v    t        |   di | | j                  dv sJ t        |t              sJ || _        y )N)r   rL   rI   r   )r   rn   r  r@   rf   r:  r<  s      r'   rn   zDictViewVariable.__init__  s>    "6"ww5555'#4555r)   c                 `     t        | j                  j                  | j                               S r6   )r  r:  rI   r  r   s    r'   
view_itemszDictViewVariable.view_items  s"    3wt||))477355r)   c                     t         r6   )NotImplementedErrorr   s    r'   view_items_vtzDictViewVariable.view_items_vt  s
     "!r)   c                     | j                   S r6   )r  rA  s     r'   r,  z$DictViewVariable.unpack_var_sequence  s    !!!r)   c                      || j                          |j                  | j                         |j                  d       y )Nr   )r:  load_methodr  r  r   s     r'   r   zDictViewVariable.reconstruct  s.    DGG$Ar)   c                     || j                         j                  v rt        j                  d      S t        j                  d      S )NTF)rx   r$   r   r  )rm   r1   r#  s      r'   r/  z!DictViewVariable.call_obj_hasattr  s;    4##%...#**400&&u--r)   r,   r   r   c                 n    |dk(  r| j                   j                  ||||      S t        |   ||||      S )Nr  )r:  r  r   r  s        r'   r  zDictViewVariable.call_method  s>     9<<++BdFCCw"2tT6::r)   r2  )r   r   r   r   r  r   rH  __annotations__rf   rn   r   r  r  r,  r   r/  rG  r   r  r6  r7  s   @r'   r  r    s     B 1   6 6 " "
"
.
	; $%		;
 S++,	; 
	; 	;r)   r  c                   f     e Zd ZdZed        Zed        Zd Zded   de	e
df   ddf fd	Z xZS )
r  r   c                 ,    t        | j                        S r6   )rZ  r  r   s    r'   ro  zDictKeysVariable.set_items  s    4??##r)   c                 T    | j                   D cg c]  }|j                   c}S c c}w r6   )r  rl   )rm   rd   s     r'   r  zDictKeysVariable.view_items_vt  s      #oo....s   %c                     t         S r6   r  r   s    r'   rx   zDictKeysVariable.python_type#  r  r)   r,   r   r   rj   c                    |dk(  r| j                   j                  ||||      S |dv r6t        | j                  |      } ||d   j                        }t	        |      S |t
        v rkt        |d   t        t        f      st        j                  t              S t        j                  t        |   | j                  |d   j                              S t        |   ||||      S )Nr   )r  r  r  r  r  r  r  r  r   )r:  r  r  ro  rc  r   r@   r  r   r  r  r   )rm   r1   r#  r,   r   r  r  r   s          r'   r  zDictKeysVariable.call_method&  s     >!<<++BdFCC 	
 	
 -A$q'##$Aq>!))d1g5E'FG'..~>>#**&t,T^^T!W=N=NO  w"2tT6::r)   )r   r   r   r  r   ro  r  rx   rG  r   rH  r  r6  r7  s   @r'   r  r    sl    	B$ $ / /; $%	;
 S++,; 
; ;r)   r  c                   &    e Zd ZdZed        Zd Zy)r  rL   c                 ,    t        | j                        S r6   )rG  r  r   s    r'   r  z DictValuesVariable.view_items_vtJ  s    DOO$$r)   c                     t         S r6   )r   r   s    r'   rx   zDictValuesVariable.python_typeN  s    r)   Nr   r   r   r  r   r  rx   r   r)   r'   r  r  F  s    	B% %r)   r  c                   &    e Zd ZdZed        Zd Zy)r  rI   c                     | j                   D cg c]&  \  }}t        j                  |j                  |g      ( c}}S c c}}w r6   )r  r
   rG   rl   r   s      r'   r  zDictItemsVariable.view_items_vtU  s5     @DOtq!	''q	2OOOs   +?c                     t         S r6   )r   r   s    r'   rx   zDictItemsVariable.python_typeZ  s    r)   Nr  r   r)   r'   r  r  R  s     	BP Pr)   r  r6   )<r   r   r   rO   r  r>  collections.abcr   rR   typingr   r   torch._subclasses.fake_tensorr   r   r   r	   r
   bytecode_transformationr   r   r  r   r   guardsr   r   r   r   r  r   r   r   r   r   r   r   r   r   r   constantr   torch._dynamo.codegenr   r-   r    r(   r2   r8   rf   r9  rJ  rP  rc  rV   r  r  r  r  r  r   r)   r'   <module>r     s  (      3 * 1 6 6 N < 0 )   4 & /D>2
jw	' w	'tC@? C@L 1 =>+ =>Fd6# d6N=; =;@/; /;d/; /;d,;' ,;^	) 		( 	r)   