
    Vh                        d Z ddlZddlZddlZddlmZmZ ddl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mZ dd
lmZ ddl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 Z# G d de      Z$ G d de      Z% G d de$      Z& G d de$      Z' G d de$      Z( G d de(      Z) G d de(      Z* G d d e      Z+ G d! d"e+      Z, G d# d$e+      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)OptionalTYPE_CHECKING)is_fake   )	polyfills	variables)create_call_functioncreate_instruction)raise_observed_exceptionunimplemented)GuardBuilderinstall_guard)is_from_local_source)cmp_name_to_op_mapping	dict_keysdict_valuesspecialize_symnode   )ValueMutationNewVariableTrackerConstantVariable)InstructionTranslatorc                    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                  t        j                  t        j                  t        j                   t        j"                  j$                  t        j&                  t        j(                  t        j*                  j,                  t        j.                  t        j0                  t        j2                  t        j4                  t        j6                  t        j8                  t        j:                  f      S )NTexample_valuec              3   2   K   | ]  }t        |        y wN)is_hashable).0es     M/home/dcms/DCMS/lib/python3.12/site-packages/torch/_dynamo/variables/dicts.py	<genexpr>zis_hashable.<locals>.<genexpr>C   s     3a;q>3s   )
isinstancer   LazyVariableTrackeris_realizedr   TensorVariableas_proxynodemetagetTupleVariableallitemsBuiltinVariableSymNodeVariabler   EnumVariableuser_definedUserDefinedClassVariableUserFunctionVariableSkipFunctionVariablemiscNumpyVariableNNModuleVariableUnspecializedNNModuleVariableMethodWrapperVariableTorchInGraphFunctionVariableTypingVariableFunctoolsPartialVariableWeakRefVariable)xs    r!   r   r   1   s.    	1i334MMO!Y--. zz|  %%))/:$FF	Ay..	/3177333))))**&&&&??....,,**77//66((22))
 	
    c                       e Zd 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efdZd Zd Zd Z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                 r    t        |      }t        |      st        dt        |       d|        || _        y )NzDict key of type z. Key: )r   r   r   typevt)selfrH   s     r!   __init__z+ConstDictVariable._HashableTracker.__init__h   s6    #B'B r? 1$r(72$GH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 | j                  j1                         }|S )Nr   c              3   B   K   | ]  } |      j                     y wr   )underlying_value)r   r    Hashables     r!   r"   zFConstDictVariable._HashableTracker.underlying_value.<locals>.<genexpr>}   s     N1(1+66Ns   )r#   rH   r   r$   r%   r   original_valuer&   r'   r(   r)   r+   rA   _HashableTrackertupler-   r7   valuer8   r3   get_functionr=   referent_vtrM   as_python_constant)rI   r>   rN   s     @r!   rM   z3ConstDictVariable._HashableTracker.underlying_valueq   s    477I$A$AB++-GG'')ww--//$''9#;#;<GG$$&++00A  H DGGY%<%<=,==NNN H DGGY%?%?@ww}}$DGGY%L%LMww}}$DGGY%C%CDww++--DGGY%>%>?,== 3 34EEEGG..0Hr?   c                 ,    t        | j                        S r   )hashrM   rI   s    r!   __hash__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r   )_eq_impl)r   uvrN   s      r!   r"   z>ConstDictVariable._HashableTracker._eq_impl.<locals>.<genexpr>   s'      0041H%%a+0s   ")	rG   r#   rQ   rA   rP   lenr,   zipr   )abrN   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 r   )rA   rP   r#   r   
is_literalrG   r\   rM   )rI   rc   rN   s      r!   __eq__z)ConstDictVariable._HashableTracker.__eq__   s    (99HeX.2B2M2Me2T UT %*(()>)>@V@VWW $$T%:%:EBBr?   rE   N)__name__
__module____qualname____doc__rJ   propertyrM   rY   staticmethodr\   boolrf    r?   r!   rP   rD   a   sP    		 
	 
	4	/ 
	 
			C D 		C 		Cr?   rP   r-   rE   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                         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r   )r#   r   )r   r>   r^   rN   s      r!   r"   z-ConstDictVariable.__init__.<locals>.<genexpr>   s?      
 1 q?H56 /1o./
s   14c                 0    t        |       r| S  |       S r   )r#   )keyrN   s    r!   make_hashablez1ConstDictVariable.__init__.<locals>.make_hashable   s    $S(33F#Fr?   ro   )popsuperrJ   rA   rP   r,   r-   r   sourcerr   copyrq   rB   )	rI   r-   rB   kwargsrv   r>   r^   rN   	__class__s	          @r!   rJ   zConstDictVariable.__init__   s     v%JJ'(#v-JJ/0"6"$55  
 
 
 	
 
	G 7<kkmDdamA&)D
 +?t{{*K&K##jjl  Es   Cc                     | j                   j                         D ci c].  \  }}|j                  j                         |j                         0 c}}S c c}}w r   )r-   rH   r'   rI   kr^   s      r!   r'   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rH   
debug_repr)r   r   r^   s      r!   r"   z/ConstDictVariable.debug_repr.<locals>.<genexpr>   s7      =AQ144??$%R'78s   :<})joinr-   rX   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 r   )r-   rH   rU   r~   s      r!   rU   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 r   )install_dict_keys_match_guardr-   rH   rU   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 r   )rB   rX   s    r!   python_typezConstDictVariable.python_type   s    }}r?   c                     t        |t              sJ t        j                  }t	        |      xrD  ||      | j
                  v xr. t        | j
                   ||         t        j                         S r   )r#   r   rA   rP   r   r-   r   DeletedVariable)rI   rH   rN   s      r!   __contains__zConstDictVariable.__contains__   se    "o...$55O T

*Ttzz(2,79R9RSS	
r?   c           	          t        | j                  j                         D cg c]  }t        |t        j
                        s|  c}      S c c}w r   )r_   r-   valuesr#   r   r   rI   r>   s     r!   r_   zConstDictVariable.len   sI     **,!!Y%>%>? 
 	
s   #Ac                 v      j                   ryt         fd j                  j                         D              S )NTc              3      K   | ]<  \  }}j                  j                  j                  |j                        |       > y wr   )is_new_itemrq   r*   rH   )r   ru   rR   rI   s      r!   r"   z2ConstDictVariable.has_new_items.<locals>.<genexpr>   s?      
U T0044SVV<eD
s   AA)rr   anyr-   rX   s   `r!   has_new_itemszConstDictVariable.has_new_items   s6    && 
"jj..0
 
 	
r?   c                     |rS|j                         rC|j                         r3t        |j                               t        |j                               k7  S t        |      t        |      k7  S r   )r%   idrealize)rI   rR   rc   s      r!   r   zConstDictVariable.is_new_item   sO    U&&(U->->-@emmo&"U]]_*===%yBuI%%r?   c                 8   | j                   t        j                  u rj                  fd       d}| j                  j	                         D ]h  \  }}| j
                  j                  |j                        }| j                  ||      s| j                  sJ |j                          |       |dz  }j | j                   t        j                  u r*j                  t        d|      gt        dd             y j                  t        d|             y )Nc                  n     j                   j                  t               j                  d      g      S )NOrderedDict)extend_outputcreate_load_python_modulecollectionscreate_load_attrcodegens   r!   <lambda>z/ConstDictVariable.reconstruct.<locals>.<lambda>  s3    --99+F00? r?   r   r   	BUILD_MAPargF)rB   r   r   add_push_nullr-   rq   r*   rH   r   rr   r   r
   r	   append_output)rI   r   num_argsru   rR   items    `    r!   reconstructzConstDictVariable.reconstruct  s    ==K333!! ****, 	JC&&**3662De,0K0KA	 ==K333!!&{A)!U3 !!"4[h"OPr?   txr   r   c                     t         j                  |      }|| j                  vrt        t        |       | j                  |   S r   )rA   rP   r-   r   KeyErrorrI   r   r   ru   s       r!   'getitem_const_raise_exception_if_absentz9ConstDictVariable.getitem_const_raise_exception_if_absent%  s8      005djj $Xr2zz#r?   c                     t         j                  |      }|| j                  vrt        d|j                          | j                  |   S )Nzdict KeyError: )rA   rP   r-   r   rR   r   s       r!   getitem_constzConstDictVariable.getitem_const-  s?    005djj OCII;78zz#r?   c                 h    t         j                  |      }|| j                  vry | j                  |   S r   )rA   rP   r-   )rI   r   ru   s      r!   maybe_getitem_constz%ConstDictVariable.maybe_getitem_const3  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 r   )rA   rP   rQ   r-   keysindexrq   r#   r   r$   r   )rI   r   ru   r   original_key_vts        r!   realize_key_vtz ConstDictVariable.realize_key_vt9  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 r   )ry   r   
make_guardr   DICT_KEYS_MATCHrX   s    r!   r   z/ConstDictVariable.install_dict_keys_match_guardB  s%    ;;$//,*F*FGH r?   c           	         ddl m} | j                  sy |j                  j                  j                  |       ry |d   | v }|d   j                  \t        |d   |      rMt        | j                  t        j                  t        j                  |d   j                  |                    y |d   j                  r(|r| j                  |d          y | j                          y y )Nr   r   r   )ru   invert) r   ry   outputside_effectsis_modifiedr#   r   r   	functoolspartialr   DICT_CONTAINSrR   r   r   )rI   r   argsr   containss        r!   install_dict_contains_guardz-ConstDictVariable.install_dict_contains_guardF  s     	'{{99!!--d37d?7>>!ja:J&K%%$22 GMM#+| !W^^##DG,224	 r?   c           
         ddl m}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k(  sJ | j#                  ||d         S |dk(  r|s|rJ | j%                          | j&                  r=|j                  j(                  j+                  | j&                  j-                                 || j                  j                         D cg c]  \  }} ||j.                  |g       c}}      S |dk(  rj| j%                          | j&                  r=|j                  j(                  j+                  | j&                  j-                                |s|rJ t1        |       S |dk(  rj| j%                          | j&                  r=|j                  j(                  j+                  | j&                  j-                                |s|rJ t3        |       S |d	k(  rJ| j%                          |s|rJ | j5                  | j                  j7                         t9               d 
      S |dk(  r;|s|rJ | j%                           |j                  t!        | j                              S |dk(  r|	r| j;                         rt| 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                  j?                   ||d                 |j                  d       S |dv rVt!        |      dv rI|d   | vrB| jA                  ||       t!        |      dk(  r|dk(  rtC        tD        |        |d       S |d   S |dk(  rb|	r`| j;                         rPd| _        |j                  j                  j                  |        | j                  jG                   ||d               S |dk(  rXd| _        |j                  j                  j                  |        | j                  jI                           |j                  d       S |dk(  rM| j;                         r<| j%                          t!        |      dk(  }t!        |      dkD  }|s|r|j                  j                  j                  |        |rktK        |d   t              r|d   j%                          |d   }n|jM                  |t        |d         }| j                  j                  |j                         |rT|j                         D ci c]  \  }} | |j                  |            |  }}}| j                  j                  |        |j                  d       S tN        |   ||||      S |dv r|d   | v r| jS                  ||d         S |dk(  r9t!        |      dk(  r+| jA                  ||       |d   | v } |j                  |      S |dk(  r|	r| j;                         r| j%                          |rJ t!        |      dk  sJ | jU                  |d         }||S t!        |      dk(  r |j                  d       }n|d   }|j                  j                  j                  |        || j                   ||d         <   |S |dk(  r| j%                          |st!        |      dk(  sJ |j                  j                  j                  |         ||d         }| j                  |   }| j                  jG                  |       || j                  |<    |j                  d       S tN        |   ||||      S c c}}w c c}}w )Nr   )r.   r   r+   r   rJ   __getitem__r-   r   r   rz   )r-   mutation_typery   __len____setitem__r   __delitem__T)rw   r*   )r   r   rw   clearupdate)r*   __getattr__r   
setdefaultmove_to_end)+r   r.   r   r+   rA   rP   r   r   dict	call_dictr   r   mutationr-   r   creater_   r   r   ry   guard_on_key_orderaddnamerH   DictKeysVariableDictValuesVariableclonerz   r   
is_mutablerr   r   r   r   r   rw   r   r#   call_custom_dictrx   call_methodr   r   )rI   r   r   r   r{   r.   r   r+   rN   arg_hashabletemp_dict_vtr   r^   has_arg
has_kwargsdict_vtr   rR   r>   ru   valr|   s                        r!   r   zConstDictVariable.call_methodm  sn    	GF$554DG 4:D944T:DD#L II""++D1JJl001*#**400]"t9>!>??DGLLW_''..0{{		,,001A1A1CD 6:jj6F6F6HIdaay)I  V^..0{{		,,001A1A1CD''#D))X..0{{		,,001A1A1CD''%d++V^..0''::jjoo'7G7IRV    Y''..0*#**3tzz?;;]"|8I..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^#D	V(;Qt@S,,R64yA~5=,Xr:'--AwU]|0A*.D'II""++D1::>>(47"344W_*.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++Q4%%b$q'22^#D	Q,,R6Aw$H*#**844\!lt7H..0:t9>!>,,T!W5E t9>/(//5AQA		&&//501

8DG,-]"..0#d)q.00II""++D147#C**S/CJJNN3!DJJsO*#**4007&r4v>>c JRs   )a
#ac                     | j                          | j                  j                         D cg c]  }|j                   c}S c c}w r   )r   r-   r   rH   )rI   r   r>   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 t        d| j                    d       y )NTFzhasattr on z is not supported)rB   r   __dict__r   r   r   )rI   r   r   s      r!   call_obj_hasattrz"ConstDictVariable.call_obj_hasattr	  sZ     ==D t}}---'..t44#**511DMM?2CDEr?   c                 B    | j                          t        |   di |S Nro   )r   rx   r   )rI   r{   r|   s     r!   r   zConstDictVariable.clone  s!    **,w}&v&&r?   r   zlist[VariableTracker]r{   zdict[str, VariableTracker]rE   r   )rh   ri   rj   r   _nonvar_fieldsrP   r   rJ   r'   r   rU   r   r   rn   r   r_   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__r|   s   @r!   rA   rA   [   s   		'	'N
FC FCV  !O_45 !
 
 !DN

M
$ 


&QB)0? 7 o  &/ &I%5NV? &	V?
 -V? 
V?p1F' 'r?   rA   c                   X     e Zd Zdeddf fdZd Zd Zded   d	ee	df   ddfd
Z
 xZS )MappingProxyVariabledv_dictrE   Nc                 V    t        |   di | t        |t              sJ || _        y r   )rx   rJ   r#   rA   r   rI   r   r{   r|   s      r!   rJ   zMappingProxyVariable.__init__  s+    "6"'#4555r?   c                 8    | j                   j                  |      S r   )r   r   )rI   r   s     r!   r   z(MappingProxyVariable.unpack_var_sequence  s    ||//33r?   c                     | j                   rt        d       j                  fd        | j                         j	                  t        dd             y )NzgCan't reconstruct an existing mapping variable because the connection to the original dict will be lostc                  n     j                   j                  t               j                  d      g      S )NMappingProxyType)r   r   typesr   r   s   r!   r   z2MappingProxyVariable.reconstruct.<locals>.<lambda>)  s4    G))55e<,,-?@ r?   r   F)ry   r   r   r   r   r	   rI   r   s    `r!   r   z MappingProxyVariable.reconstruct!  sQ    ;;D 		
 	21e<=r?   r   r   r{   c                     | j                   r/|j                  j                  j                         rt	        d       | 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.)ry   r   r   has_existing_dict_mutationr   r   r   )rI   r   r   r   r{   s        r!   r   z MappingProxyVariable.call_method3  sJ     ;;29911LLN7 ||''D$??r?   )rh   ri   rj   rA   rJ   r   r   listr   strr   r   r   s   @r!   r   r     sY     1  
4>$@ $%	@
 S++,@ 
@r?   r   c                       e Zd Zd Zd Zy)NNModuleHooksDictVariablec                      y r   ro   rX   s    r!   r   z7NNModuleHooksDictVariable.install_dict_keys_match_guardI      r?   c                      y r   ro   rI   r   r   s      r!   r   z5NNModuleHooksDictVariable.install_dict_contains_guardL  r  r?   N)rh   ri   rj   r   r   ro   r?   r!   r  r  G  s    r?   r  c                   ^     e Zd Zdd fdZ fdZ fdZed        Z	 	 	 	 	 	 d fdZ xZ	S )	DefaultDictVariablec                 ^    t        |   ||fi | |t        j                  u sJ || _        y r   )rx   rJ   r   defaultdictdefault_factory)rI   r-   rB   r  r{   r|   s        r!   rJ   zDefaultDictVariable.__init__Q  s3    3F3;22222.r?   c                 t    | j                   t        t        t        fvr| j                  syt
        |          S )NF)r  r  rQ   r   r-   rx   is_python_constantrI   r|   s    r!   r  z&DefaultDictVariable.is_python_constantV  s1     eT'::4::w)++r?   c                 ^    d| j                   j                          dt        |           dS )Nzdefaultdict(r   ))r  r   rx   r  s    r!   r   zDefaultDictVariable.debug_repr]  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 r   )
r#   r   r.   fnr  rQ   r   set	functionsBaseUserFunctionVariabler   s    r!   is_supported_argz$DefaultDictVariable.is_supported_argb  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   r  r   call_functionrx   r   )rI   r   r   r   r{   default_varr|   s         r!   r   zDefaultDictVariable.call_methodi  s     = t9>!>Aw$))"d1g66''/"d1gY00"&"6"6"D"DRR"PKG'MDG[+A6 '&7&r4v>>r?   r   rg   r   )
rh   ri   rj   rJ   r  r   rm   r  r   r   r   s   @r!   r  r  P  sP    /
,

 Q Q? &	?
 -? 
? ?r?   r  c                        e Zd Zd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 Zdee   deeef   ddf fdZdddefdZd Zd Z xZS )SetVariablez-We model a sets as dictonary with None valuesr-   rE   Nc                 v    t         j                  |t        j                               }t	        |   |fi | y r   )r   fromkeysr  _default_valuerx   rJ   rI   r-   r{   r|   s      r!   rJ   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r   r   r   r   s     r!   r"   z)SetVariable.debug_repr.<locals>.<genexpr>       !O!$$//"3!O   $&r   r-   r   r   rX   s    r!   r   zSetVariable.debug_repr  s7    zz!OTZZ__=N!OOORUUUr?   c                 H    t        | j                  j                               S r   )r  r-   r   rX   s    r!   	set_itemszSetVariable.set_items  s    4::??$%%r?   c                  ,    t        j                  d       S r   )r   r   ro   r?   r!   r!  zSetVariable._default_value  s      &&t,,r?   c                 p    | j                   D ch c]  }|j                  j                          c}S c c}w r   )r+  rH   r'   rI   r   s     r!   r'   zSetVariable.as_proxy  s$    )-8A888   !3c                     t         S r   )r  rX   s    r!   r   zSetVariable.python_type  s    
r?   c                 p    | j                   D ch c]  }|j                  j                          c}S c c}w r   r+  rH   rU   r.  s     r!   rU   zSetVariable.as_python_constant  '    37>>Ba'')BBBr/  c                     |j                  | j                  D cg c]  }|j                   c}       |j                  t	        dt        | j                                     y c c}w )N	BUILD_SETr   )foreachr+  rH   r   r
   r_   rI   r   r>   s      r!   r   zSetVariable.reconstruct  sE    t~~6!670#dnnBUVW 7s   A$r   r{   r   c                    |dk(  r1|rJ t        |      dk(  sJ d}|d   t        j                         f}n|dk(  rA|rJ |rJ | j                  j	                         j
                  }t        |   |||f|       |S |dk(  rM|rJ t        |      dk(  sJ t        j                  t        j                        j                  || |d   gi       S |dk(  rM|rJ t        |      dk(  sJ t        j                  t        j                        j                  || |d   gi       S |dk(  rM|rJ t        |      dk(  sJ t        j                  t        j                        j                  || |d   gi       S |d	k(  rM|rJ t        |      dk(  sJ t        j                  t        j                        j                  || |d   gi       S |d
k(  rkt        |      dk(  r]| j!                         rM|rJ t        |      dk(  sJ t        j                  t        j"                        j                  || |d   gi       S |dk(  r8|rJ t        |      dk(  sJ |d   | vrt%        d       t        |   |d||      S |dk(  rC|rJ t        |      dk(  sJ |d   | v rt        |   |d||      S t'        j(                  d       S t        |   ||||      S )Nr   r   r   r   rw   
isdisjointintersectionunion
differencer   removezkey does not existdiscard)rR   )r_   r  r!  r+  rw   rH   rx   r   r   r3   r   set_isdisjointr  set_intersection	set_unionset_differencer   
set_updater   r   r   )rI   r   r   r   r{   resultr|   s         r!   r   zSetVariable.call_method  s    5=:t9>!> DG[779:DU]:O8^^''),,FGD6)V<M\!:t9>!>11((mBtAw45 ^#:t9>!>11**mBtAw45 W_:t9>!>11)2E2EFTTT47OR  \!:t9>!>11((mBtAw45 X#d)q.T__5F:t9>!>11)2F2FGUUT47OR  X:t9>!>Awd"237&r5$??Y:t9>!>Aw$w*2udFCC'..T::w"2tT6::r?   r   r   r   c                     t        d      )NzIllegal to getitem on a set)RuntimeError)rI   r   r   s      r!   r   zSetVariable.getitem_const  s    899r?   c                      y r   ro   rX   s    r!   r   z)SetVariable.install_dict_keys_match_guard      r?   c                      y r   ro   r	  s      r!   r   z'SetVariable.install_dict_contains_guard  rH  r?   )rh   ri   rj   rk   r  r   rJ   r   rl   r+  rm   r!  r'   r   rU   r   r   r  r   r   r   r   r   r   s   @r!   r  r    s    7*O$* 
	*V & & - -9CX?; ?#	?;
 S/)*?; 
?;B: 7 :o :r?   r  c                   ~     e Zd Zdee   ddf fdZd Zed        Zd Z	d Z
d	 Zd
ee   deeef   ddf fdZ xZS )FrozensetVariabler-   rE   Nc                 &    t        |   |fi | y r   rx   rJ   r"  s      r!   rJ   zFrozensetVariable.__init__      
 	)&)r?   c                     | j                   syddj                  d | j                   j                         D              z   dz   S )Nzfrozenset()r   r$  c              3   P   K   | ]  }|j                   j                            y wr   r   r&  s     r!   r"   z/FrozensetVariable.debug_repr.<locals>.<genexpr>  r'  r(  r   r)  rX   s    r!   r   zFrozensetVariable.debug_repr  s7    zz !OTZZ__=N!OOORUUUr?   c                 6    | j                   j                         S r   )r-   r   rX   s    r!   r+  zFrozensetVariable.set_items  s    zz  r?   c                     t         S r   )	frozensetrX   s    r!   r   zFrozensetVariable.python_type      r?   c                 p    | j                   D ch c]  }|j                  j                          c}S c c}w r   r2  r.  s     r!   rU   z$FrozensetVariable.as_python_constant  r3  r/  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 )NrS  )r   create_load_globalr   s   r!   r   z/FrozensetVariable.reconstruct.<locals>.<lambda>  s%    G))..{; r?   r   F)r6  r+  rH   r   r   r	   r7  s    ` r!   r   zFrozensetVariable.reconstruct  sR    t~~6!67	
 	21e<= 7s   A%r   r{   r   c                 N    |dv rt        d| d      t        | 	  ||||      S )Nr   rw   r   r=  r>  r   Illegal call_method z on a frozensetrF  rx   r   rI   r   r   r   r{   r|   s        r!   r   zFrozensetVariable.call_method  9     II!5dV?KLLw"2tT6::r?   )rh   ri   rj   r  r   rJ   r   rl   r+  r   rU   r   r   r  r   r   r   s   @r!   rK  rK    s    *O$* 
	*V ! !C	>	; ?#		;
 S/)*	; 
	; 	;r?   rK  c                   x     e Zd Zdee   ddf f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 )DictKeySetVariabler-   rE   Nc                 &    t        |   |fi | y r   rM  r"  s      r!   rJ   zDictKeySetVariable.__init__)  rN  r?   c                     | j                   syddj                  d | j                   j                         D              z   dz   S )Nzdict_keys([])zdict_keys([r$  c              3   P   K   | ]  }|j                   j                            y wr   r   r&  s     r!   r"   z0DictKeySetVariable.debug_repr.<locals>.<genexpr>6  s     H144??,Hr(  z])r)  rX   s    r!   r   zDictKeySetVariable.debug_repr0  sA    zz" ((Hdjjoo6GHHIr?   c                     | j                   S r   )r-   rX   s    r!   r+  zDictKeySetVariable.set_items:  s    zzr?   c                     t         S r   r   rX   s    r!   r   zDictKeySetVariable.python_type>  rT  r?   c                     t         j                  | j                  D ch c]  }|j                  j	                          c}d       j                         S c c}w r   )r   r   r+  rH   rU   r   r.  s     r!   rU   z%DictKeySetVariable.as_python_constantA  s>    }}04?1QTT$$&?

$&	?s   !Ar   r{   r   c                 N    |dv rt        d| d      t        | 	  ||||      S )NrZ  r[  z on a dict_keysr\  r]  s        r!   r   zDictKeySetVariable.call_methodF  r^  r?   )rh   ri   rj   r  r   rJ   r   rl   r+  r   rU   r   r  r   r   r   s   @r!   r`  r`  (  sy    *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
 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   rE   c                 v    t        |   di | | j                  dv sJ t        |t              sJ || _        y )N)r   r   ro   )rx   rJ   rk  r#   rA   r   r   s      r!   rJ   zDictViewVariable.__init__[  s>    "6"ww,,,,'#4555r?   c                 `     t        | j                  j                  | j                               S r   )getattrr   r-   rk  rX   s    r!   
view_itemszDictViewVariable.view_itemsa  s"    3wt||))477355r?   c                     t         r   )NotImplementedErrorrX   s    r!   view_items_vtzDictViewVariable.view_items_vte  s
     "!r?   c                 X      fd} j                   D cg c]
  } ||       c}S c c}w )Nc                 >    j                   dk(  r| j                  S | S )Nr   )rk  rH   )r>   rI   s    r!   unwrapz4DictViewVariable.unpack_var_sequence.<locals>.unwrapl  s    77f,1443!3r?   )ro  )rI   r   ru  r>   s   `   r!   r   z$DictViewVariable.unpack_var_sequencek  s&    	4 $(??3aq	333s   'c                      || j                          |j                  | j                         |j                  d       y )Nr   )r   load_methodrk  r   r   s     r!   r   zDictViewVariable.reconstructq  s.    DGG$Ar?   r   r   r{   c                 n    |dk(  r| j                   j                  ||||      S t        |   ||||      S )Nr   )r   r   rx   r]  s        r!   r   zDictViewVariable.call_methodv  s>     9<<++BdFCCw"2tT6::r?   )rh   ri   rj   rk   rk  r   r  __annotations__rA   rJ   rl   ro  rr  r   r   r  r   r   r   r   s   @r!   rj  rj  R  s     B 1   6 6 " "
4
	; $%		;
 S++,	; 
	; 	;r?   rj  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 r   )r  ro  rX   s    r!   r+  zDictKeysVariable.set_items  s    4??##r?   c                 T    | j                   D cg c]  }|j                   c}S c c}w r   )ro  rH   r   s     r!   rr  zDictKeysVariable.view_items_vt  s      #oo....s   %c                     t         S r   rf  rX   s    r!   r   zDictKeysVariable.python_type  rT  r?   r   r   r{   rE   c                 T   |dk(  r| j                   j                  ||||      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   NotImplementedr+  rx   r]  s        r!   r   zDictKeysVariable.call_method  s     >!<<++BdFCC))d1g5E'FG'..~>>#**&t,T^^T!W=N=NO  w"2tT6::r?   )rh   ri   rj   rk  rl   r+  rr  r   r  r   r  r   r   r   s   @r!   r   r     sl    	B$ $ / /; $%	;
 S++,; 
; ;r?   r   c                   &    e Zd ZdZed        Zd Zy)r   r   c                 ,    t        | j                        S r   )r  ro  rX   s    r!   rr  z DictValuesVariable.view_items_vt  s    DOO$$r?   c                     t         S r   )r   rX   s    r!   r   zDictValuesVariable.python_type  s    r?   N)rh   ri   rj   rk  rl   rr  r   ro   r?   r!   r   r     s    	B% %r?   r   ).rk   r   r   r   typingr   r   torch._subclasses.fake_tensorr   r   r   r   bytecode_transformationr	   r
   excr   r   guardsr   r   ry   r   utilsr   r   r   r   baser   r   constantr   torch._dynamo.symbolic_convertr   r   rA   r   r  r  r  rK  r`  rj  r   r   ro   r?   r!   <module>r     s   (    * 1 # N 9 0 ) V V 3 & D'
Ty' y'x-@? -@` 1 /?+ /?jq# qh,; ,;^'; ';T-; -;`;' ;B	) 	r?   