
    [Th                        S r SSKrSSKrSSKrSSKJrJr  SSKJr  SSK	J
r
Jr  SSKJrJr  SSKJrJr  SS	KJrJr  SS
KJr  SSKJrJrJrJr  SSKJrJr  SSKJ r   \(       a  SSK!J"r"  S r# " S S\5      r$ " S S\5      r% " S S\$5      r& " S S\$5      r' " S S\$5      r( " S S\(5      r) " S S\(5      r* " S S \5      r+ " S! S"\+5      r, " S# S$\+5      r-g)%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                    [        U [        R                  5      (       a+  U R                  5       (       d  U R	                  5       (       a  g[        U [        R
                  5      (       a5  U R                  5       R                  R                  R                  S5      S L$ [        U [        R                  5      (       a  [        S U R                   5       5      $ [        U [        R                  [        R                  [        R                  [        R                   [        R"                  R$                  [        R&                  [        R(                  [        R*                  R,                  [        R.                  [        R0                  [        R2                  [        R4                  [        R6                  [        R8                  [        R:                  45      $ )NTexample_valuec              3   8   #    U  H  n[        U5      v   M     g 7fN)is_hashable).0es     U/var/www/auris/envauris/lib/python3.13/site-packages/torch/_dynamo/variables/dicts.py	<genexpr>is_hashable.<locals>.<genexpr>C   s     37a;q>>7s   )
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4MMOO!Y--.. zz|  %%))/:$FF	Ay..	/	/3177333))))**&&&&??....,,**77//66((22))
 	
    c                   :  ^  \ rS rSrS1\R
                  kr " S S5      r\4S\\\4   SS4U 4S jjjrS	 r	S
 r
S rS rS rS\4S jrS rS rS rS rSSS\4S jrSSS\4S jrS\4S jrS\4S jrS rS r      S!U 4S jjrS rS rU 4S jrS rU =r$ )"ConstDictVariable[   user_clsc                   Z    \ rS rSrSrSS jr\S 5       rS r\	S 5       r
S	S S\4S
 jrSrg)"ConstDictVariable._HashableTrackera   a"  
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                 z    [        U5      n[        U5      (       d  [        S[        U5       SU 35        Xl        g )NzDict key of type z. Key: )r   r   r   typevt)selfrK   s     r!   __init__+ConstDictVariable._HashableTracker.__init__h   s6    #B'B r?? 1$r(72$GHGr@   c                   ^ [        U R                  [        R                  5      (       aX  U R                  R	                  5       (       d9  U R                  R                  5       (       a  U R                  R                  5       $ [        U R                  [        R                  5      (       a3  U R                  R                  5       R                  R                  S   nU$ [        U R                  [        R                  5      (       a;  [        R                  m[        U4S jU R                  R                   5       5      nU$ [        U R                  [        R                   5      (       a  U R                  R"                  $ [        U R                  [        R$                  5      (       a  U R                  R"                  $ [        U R                  [        R&                  5      (       a  U R                  R)                  5       $ [        U R                  [        R*                  5      (       a6  [        R                  mT" U R                  R,                  5      R.                  $ U R                  R1                  5       nU$ )Nr   c              3   H   >#    U  H  nT" U5      R                   v   M     g 7fr   )underlying_value)r   r    Hashables     r!   r"   FConstDictVariable._HashableTracker.underlying_value.<locals>.<genexpr>}   s     N1(1+66s   ")r$   rK   r   r%   r&   r   original_valuer'   r(   r)   r*   r,   rB   _HashableTrackertupler.   r8   valuer9   r4   get_functionr>   referent_vtrQ   as_python_constant)rL   r?   rR   s     @r!   rQ   3ConstDictVariable._HashableTracker.underlying_valueq   s    477I$A$ABB++--GG''))ww--//$''9#;#;<<GG$$&++00A  H DGGY%<%<==,==NNN H DGGY%?%?@@ww}}$DGGY%L%LMMww}}$DGGY%C%CDDww++--DGGY%>%>??,== 3 34EEEGG..0Hr@   c                 ,    [        U R                  5      $ r   )hashrQ   rL   s    r!   __hash__+ConstDictVariable._HashableTracker.__hash__   s    --..r@   c                 &  ^ [        U 5      [        U5      :w  a  g[        U [        5      (       aL  [        R                  m[        U 5      [        U5      :H  =(       a    [        U4S j[        X5       5       5      $ [        U 5      (       a  XL $ X:H  $ )NFc              3   J   >#    U  H  u  pTR                  X5      v   M     g 7fr   )_eq_impl)r   uvrR   s      r!   r"   >ConstDictVariable._HashableTracker._eq_impl.<locals>.<genexpr>   s$      08AH%%a++	s    #)	rJ   r$   rV   rB   rU   lenr-   zipr   )abrR   s     @r!   rc   +ConstDictVariable._HashableTracker._eq_impl   s{     Aw$q'!Au%%,==1vQ' C 08;A	0 -  vvr@   otherc                 <   [         R                  n[        X5      (       d+  [        R                  " U5      (       d   [        U5      5       e[        X5      (       a&  UR                  U R                  UR                  5      $ UR                  U R                  U5      $ r   )rB   rU   r$   r   
is_literalrJ   rc   rQ   )rL   rl   rR   s      r!   __eq__)ConstDictVariable._HashableTracker.__eq__   s    (99He..2B2M2Me2T2T UT %**(()>)>@V@VWW $$T%:%:EBBr@   )rK   rH   N)__name__
__module____qualname____firstlineno____doc__rM   propertyrQ   r_   staticmethodrc   boolro   __static_attributes__ r@   r!   rU   rF   a   sP    		 
	 
	4	/ 
	 
			C D 		C 		Cr@   rU   r.   rH   Nc                   >^ SU;   a  UR                  S5        SU;   a  UR                  S5        [        TU ]  " S0 UD6  [        R                  m[        U4S jUR                  5        5       5      (       d   eU4S jnUR                  5        VVs0 s H  u  pVU" U5      U_M     snnU l        [        U R                  5      (       + U l	        UR                  5       U l        X l        g s  snnf )Noriginal_itemsshould_reconstruct_allc              3   z   >#    U  H0  u  p[        U[        T45      =(       a    [        U[        5      v   M2     g 7fr   )r$   r   )r   r?   re   rR   s      r!   r"   -ConstDictVariable.__init__.<locals>.<genexpr>   s<      
 & q?H56 /1o./%s   8;c                 :   > [        U T5      (       a  U $ T" U 5      $ r   )r$   )keyrR   s    r!   make_hashable1ConstDictVariable.__init__.<locals>.make_hashable   s    $S(333F#Fr@   r{   )popsuperrM   rB   rU   r-   r.   r   sourcer~   copyr}   rD   )	rL   r.   rD   kwargsr   r?   re   rR   	__class__s	          @r!   rM   ConstDictVariable.__init__   s     v%JJ'(#v-JJ/0"6"$55  
 
 
 
 	
 
	G 7<kkmDmdamA&)mD
 +?t{{*K&K##jjl  Es   C-c                     U R                   R                  5        VVs0 s H.  u  pUR                  R                  5       UR                  5       _M0     snn$ s  snnf r   )r.   rK   r(   rL   kre   s      r!   r(   ConstDictVariable.as_proxy   s@    :>**:J:J:LM:L$!-:LMMM   5Ac                 n    SSR                  S U R                  R                  5        5       5      -   S-   $ )N{, c              3      #    U  H4  u  pUR                   R                  5        S UR                  5        3v   M6     g7f)z: NrK   
debug_repr)r   r   re   s      r!   r"   /ConstDictVariable.debug_repr.<locals>.<genexpr>   s4      EWTQ144??$%R'78EWs   <>})joinr.   r^   s    r!   r   ConstDictVariable.debug_repr   s?    ii EIZZEUEUEW  		
r@   c                     U R                   R                  5        VVs0 s H.  u  pUR                  R                  5       UR                  5       _M0     snn$ s  snnf r   )r.   rK   rZ   r   s      r!   rZ   $ConstDictVariable.as_python_constant   sS     

((*
* DD##%q';';'==*
 	
 
r   c                     U R                  5         U R                  R                  5        VVs0 s H   u  pUR                  R                  5       U_M"     snn$ s  snnf r   )install_dict_keys_match_guardr.   rK   rZ   r   s      r!   keys_as_python_constant)ConstDictVariable.keys_as_python_constant   sI    **,9=9I9I9KL9K'')1,9KLLLs   'Ac                     U R                   $ r   )rD   r^   s    r!   python_typeConstDictVariable.python_type   s    }}r@   c                    [        U[        5      (       d   e[        R                  n[	        U5      =(       aN    U" U5      U R
                  ;   =(       a2    [        U R
                  U" U5         [        R                  5      (       + $ r   )r$   r   rB   rU   r   r.   r   DeletedVariable)rL   rK   rR   s      r!   __contains__ConstDictVariable.__contains__   sh    "o....$55O T

*Ttzz(2,79R9RSS	
r@   c           	          [        U R                  R                  5        Vs/ s H&  n[        U[        R
                  5      (       a  M$  UPM(     sn5      $ s  snf r   )rg   r.   valuesr$   r   r   rL   r?   s     r!   rg   ConstDictVariable.len   sN     **,,A!!Y%>%>? ,
 	
s   #A	Ac                    ^  T R                   (       a  g[        U 4S jT R                  R                  5        5       5      $ )NTc              3      >#    U  H<  u  pTR                  TR                  R                  UR                  5      U5      v   M>     g 7fr   )is_new_itemr}   r+   rK   )r   r   rW   rL   s      r!   r"   2ConstDictVariable.has_new_items.<locals>.<genexpr>   s?      
0
 T0044SVV<eDD0s   AA)r~   anyr.   r^   s   `r!   has_new_itemsConstDictVariable.has_new_items   s6    && 
"jj..0
 
 	
r@   c                     U(       a]  UR                  5       (       aH  UR                  5       (       a3  [        UR                  5       5      [        UR                  5       5      :g  $ [        U5      [        U5      :g  $ r   )r&   idrealize)rL   rW   rl   s      r!   r   ConstDictVariable.is_new_item   sU    U&&((U->->-@-@emmo&"U]]_*===%yBuI%%r@   c                 H  ^ U R                   [        R                  L a  TR                  U4S j5        SnU R                  R	                  5        Hr  u  p4U R
                  R                  UR                  5      nU R                  XT5      (       d  U R                  (       d  MS  T" UR                  5        T" U5        US-  nMt     U R                   [        R                  L a'  TR                  [        SUS9/[        SS5      Q5        g TR                  [        SUS95        g )Nc                  n   > T R                  T R                  [        5      T R                  S5      /5      $ )NOrderedDict)extend_outputcreate_load_python_modulecollectionscreate_load_attrcodegens   r!   <lambda>/ConstDictVariable.reconstruct.<locals>.<lambda>  s1    --99+F00?r@   r   r   	BUILD_MAPargF)rD   r   r   add_push_nullr.   r}   r+   rK   r   r~   r   r
   r	   append_output)rL   r   num_argsr   rW   items    `    r!   reconstructConstDictVariable.reconstruct  s    ==K333!! ****,JC&&**3662D,,0K0K0KA - ==K333!!&{A)!U3 !!"4[h"OPr@   txr   r   c                     [         R                  U5      nX0R                  ;  a  [        [        U5        U R                  U   $ r   )rB   rU   r.   r   KeyErrorrL   r   r   r   s       r!   'getitem_const_raise_exception_if_absent9ConstDictVariable.getitem_const_raise_exception_if_absent%  s6      005jj $Xr2zz#r@   c                     [         R                  U5      nX0R                  ;  a  [        SUR                   35        U R                  U   $ )Nzdict KeyError: )rB   rU   r.   r   rW   r   s       r!   getitem_constConstDictVariable.getitem_const-  s=    005jj OCII;78zz#r@   c                 j    [         R                  U5      nX R                  ;  a  g U R                  U   $ r   )rB   rU   r.   )rL   r   r   s      r!   maybe_getitem_const%ConstDictVariable.maybe_getitem_const3  s-    005jj zz#r@   c                 L   X;   d   e[         R                  U5      n[        U R                  R	                  5       5      R                  U5      n[        U R                  R	                  5       5      U   n[        U[        R                  5      (       a  UR                  5         g g r   )rB   rU   rV   r.   keysindexr}   r$   r   r%   r   )rL   r   r   r   original_key_vts        r!   realize_key_vt ConstDictVariable.realize_key_vt9  s    {{005djjoo'(..s3 3 3 8 8 :;EBoy'D'DEE##% Fr@   c                 x    U R                   (       a)  [        U R                  [        R                  5      5        g g r   )r   r   
make_guardr   DICT_KEYS_MATCHr^   s    r!   r   /ConstDictVariable.install_dict_keys_match_guardB  s%    ;;$//,*F*FGH r@   c           
         SSK Jn  U R                  (       d  g UR                  R                  R                  U 5      (       a  g US   U ;   nUS   R                  cc  [        US   U5      (       aO  [        U R                  [        R                  " [        R                  US   R                  U(       + S95      5        g US   R                  (       a-  U(       a  U R                  US   5        g U R                  5         g g )Nr   r   r   )r   invert) r   r   outputside_effectsis_modifiedr$   r   r   	functoolspartialr   DICT_CONTAINSrW   r   r   )rL   r   argsr   containss        r!   install_dict_contains_guard-ConstDictVariable.install_dict_contains_guardF  s     	'{{99!!--d337d?7>>!ja:J&K&K%%$22 GMM#+| !W^^##DG,224	 r@   c           
         > SSK JnJnJn  [        R
                  nU=(       a    [        US   5      n	US:X  a  [        R                  " [        5      R                  " U/UQ70 UD6n
UR                  R                  R                  U 5        U R                  R                  U
R                  5        UR                  " S 5      $ US:X  a%  [!        U5      S:X  d   eU R#                  XS   5      $ US:X  a  U(       d  U(       a   eU R%                  5         U R&                  (       a=  UR                  R(                  R+                  U R&                  R-                  5       5        U" U R                  R                  5        VVs/ s H  u  pU" UR.                  U/5      PM     snn5      $ US:X  ay  U R%                  5         U R&                  (       a=  UR                  R(                  R+                  U R&                  R-                  5       5        U(       d  U(       a   e[1        U 5      $ US:X  ay  U R%                  5         U R&                  (       a=  UR                  R(                  R+                  U R&                  R-                  5       5        U(       d  U(       a   e[3        U 5      $ US	:X  aQ  U R%                  5         U(       d  U(       a   eU R5                  U R                  R7                  5       [9        5       S S
9$ US:X  aE  U(       d  U(       a   eU R%                  5         UR                  " [!        U R                  5      5      $ US:X  a  U	(       a  U R;                  5       (       az  U R%                  5         U(       d  [!        U5      S:X  d   eUR                  R                  R                  U 5        US   U R                  U" US   5      '   UR                  " S 5      $ US:X  a  U	(       a  U R;                  5       (       ar  U R%                  5         SU l        UR                  R                  R                  U 5        U R                  R?                  U" US   5      5        UR                  " S 5      $ US;   a[  [!        U5      S;   aL  US   U ;  aC  U RA                  X5        [!        U5      S:X  a  US:X  a  [C        [D        U5        U" S 5      $ US   $ US:X  al  U	(       ae  U R;                  5       (       aP  SU l        UR                  R                  R                  U 5        U R                  RG                  U" US   5      5      $ US:X  aX  SU l        UR                  R                  R                  U 5        U R                  RI                  5         UR                  " S 5      $ US:X  Gal  U R;                  5       (       GaV  U R%                  5         [!        U5      S:H  n[!        U5      S:  nU(       d  U(       Ga  UR                  R                  R                  U 5        U(       ap  [K        US   [        5      (       a  US   R%                  5         US   nOURM                  U[        US   5      nU R                  R                  UR                  5        U(       aV  UR                  5        VVs0 s H  u  pU" UR                  " U5      5      U_M      nnnU R                  R                  U5        UR                  " S 5      $ [N        TU ]  XX45      $ US;   a  US   U ;   a  U RS                  XS   5      $ US:X  a:  [!        U5      S:X  a+  U RA                  X5        US   U ;   nUR                  " U5      $ US:X  a  U	(       a  U R;                  5       (       a  U R%                  5         U(       a   e[!        U5      S::  d   eU RU                  US   5      nUb  U$ [!        U5      S:X  a  UR                  " S 5      nOUS   nUR                  R                  R                  U 5        UU R                  U" US   5      '   U$ US:X  a  U R%                  5         U(       d  [!        U5      S:X  d   eUR                  R                  R                  U 5        U" US   5      nU R                  U   nU R                  RG                  U5        UU R                  U'   UR                  " S 5      $ [N        TU ]  XX45      $ s  snnf s  snnf )Nr   )r/   r   r,   r   rM   __getitem__r.   r   r   r   )r.   mutation_typer   __len____setitem__r   __delitem__T)r   r+   )r   r   r   clearupdate)r+   __getattr__r   
setdefaultmove_to_end)+r   r/   r   r,   rB   rU   r   r   dict	call_dictr   r   mutationr.   r   createrg   r   r   r   guard_on_key_orderaddnamerK   DictKeysVariableDictValuesVariablecloner   r   
is_mutabler~   r   r   r   r   r   r   r$   call_custom_dictr   call_methodr   r   )rL   r   r   r   r   r/   r   r,   rR   arg_hashabletemp_dict_vtr   re   has_arg
has_kwargsdict_vtr   rW   r?   r   valr   s                        r!   r  ConstDictVariable.call_methodm  sU    	GF$554DG 4:$44T:DD#L II""++D1JJl001#**400]"t9>!>??GLLW_''..0{{		,,001A1A1CD 6:jj6F6F6HI6Hdaay)6HI  V^..0{{		,,001A1A1CD''#D))X..0{{		,,001A1A1CD''%d++V^..0''::jjoo'7G7IRV    Y''..0#**3tzz?;;]"|8I8I..0#d)q.00II""++D1,0GDJJxQ()#**400]"|8I8I..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]|0A0A*.D'II""++D1::>>(47"344W_*.D'II""++D1JJ#**400X$//"3"3 ..0$i1nGVqJ*		&&//5!$q'+<== Q==?"&q'"1"B"B2tTRSW"UJJ%%gmm4 %+LLN$2DA !!1!8!8!;<a?$2   JJ%%f-'..t44w*2TBB++Q4%%bq'22^#D	Q,,R6Aw$H#**844\!lt7H7H..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&r>>c JRs    d
8%d
c                     U R                  5         U R                  R                  5        Vs/ s H  o"R                  PM     sn$ s  snf r   )r   r.   r   rK   )rL   r   r?   s      r!   unpack_var_sequence%ConstDictVariable.unpack_var_sequence  s5    **,"jjoo/0//000s   Ac                     U R                   [        L aE  X R                   R                  ;   a  [        R                  " S5      $ [        R                  " S5      $ [        SU R                    S35        g )NTFzhasattr on z is not supported)rD   r   __dict__r   r   r   )rL   r   r   s      r!   call_obj_hasattr"ConstDictVariable.call_obj_hasattr	  sX     ==D }}---'..t44#**511DMM?2CDEr@   c                 D   > U R                  5         [        TU ]  " S0 UD6$ Nr{   )r   r   r  )rL   r   r   s     r!   r  ConstDictVariable.clone  s!    **,w}&v&&r@   )r.   r}   r~   rD   r   zlist[VariableTracker]r   zdict[str, VariableTracker]rH   r   ) rr   rs   rt   ru   r   _nonvar_fieldsrU   r   rM   r(   r   rZ   r   r   ry   r   rg   r   r   r   r   r   r   r   r   r   r  r  r  r  rz   __classcell__r   s   @r!   rB   rB   [   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@   rB   c                   f   ^  \ rS rSrS\SS4U 4S jjrS rS rS\S	   S
\	\
S	4   SS	4S jrSrU =r$ )MappingProxyVariablei  dv_dictrH   Nc                 `   > [         TU ]  " S0 UD6  [        U[        5      (       d   eXl        g r  )r   rM   r$   rB   r  rL   r  r   r   s      r!   rM   MappingProxyVariable.__init__  s,    "6"'#45555r@   c                 8    U R                   R                  U5      $ r   )r  r  )rL   r   s     r!   r  (MappingProxyVariable.unpack_var_sequence  s    ||//33r@   c                    ^ U R                   (       a  [        S5        TR                  U4S j5        T" U R                  5        TR	                  [        SS5      5        g )NzgCan't reconstruct an existing mapping variable because the connection to the original dict will be lostc                  n   > T R                  T R                  [        5      T R                  S5      /5      $ )NMappingProxyType)r   r   typesr   r   s   r!   r   2MappingProxyVariable.reconstruct.<locals>.<lambda>)  s2    G))55e<,,-?@r@   r   F)r   r   r   r  r   r	   rL   r   s    `r!   r    MappingProxyVariable.reconstruct!  sQ    ;;D 		
 	21e<=r@   r   r   r   c                     U R                   (       a4  UR                  R                  R                  5       (       a  [	        S5        U R
                  R                  XX45      $ )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.)r   r   r   has_existing_dict_mutationr   r  r  )rL   r   r   r   r   s        r!   r   MappingProxyVariable.call_method3  sI     ;;29911LLNN7 ||''$??r@   r  )rr   rs   rt   ru   rB   rM   r  r   listr   strr  rz   r  r  s   @r!   r  r    s_     1  
4>$@ $%	@
 S++,@ 
@ @r@   r  c                        \ rS rSrS rS rSrg)NNModuleHooksDictVariableiG  c                     g r   r{   r^   s    r!   r   7NNModuleHooksDictVariable.install_dict_keys_match_guardI      r@   c                     g r   r{   rL   r   r   s      r!   r   5NNModuleHooksDictVariable.install_dict_contains_guardL  r4  r@   r{   N)rr   rs   rt   ru   r   r   rz   r{   r@   r!   r1  r1  G  s    r@   r1  c                   t   ^  \ rS rSrSS	U 4S jjjrU 4S jrU 4S jr\S 5       r      S
U 4S jjr	Sr
U =r$ )DefaultDictVariableiP  c                 ^   > [         TU ]  " X40 UD6  U[        R                  L d   eX0l        g r   )r   rM   r   defaultdictdefault_factory)rL   r.   rD   r<  r   r   s        r!   rM   DefaultDictVariable.__init__Q  s/    3F3;22222.r@   c                    > U R                   [        [        [        4;  a  U R                  (       d  g[
        TU ]  5       $ )NF)r<  r.  rV   r   r.   r   is_python_constantrL   r   s    r!   r?  &DefaultDictVariable.is_python_constantV  s1     eT'::4::w)++r@   c                 ^   > SU R                   R                  5        S[        TU ]  5        S3$ )Nzdefaultdict(r   ))r<  r   r   r@  s    r!   r   DefaultDictVariable.debug_repr]  s4    4//::<=R@R@T?UUVW	
r@   c                     [        U [        R                  5      (       a#  U R                  [        [
        [        [        4;   $ [        U [        R                  R                  5      $ r   )
r$   r   r/   fnr.  rV   r   set	functionsBaseUserFunctionVariabler   s    r!   is_supported_arg$DefaultDictVariable.is_supported_argb  sF    c9445566dE4555c9#6#6#O#OPPr@   c                 0  > US:X  a  [        U5      S:X  d   eUS   U ;   a  U R                  XS   5      $ U R                  c  [        US    5      eU R                  R	                  U/ 0 5      n[
        TU ]  USUS   U4U5        U$ [
        TU ]  XX45      $ )Nr   r   r   r   )rg   r   r<  r   call_functionr   r  )rL   r   r   r   r   default_varr   s         r!   r  DefaultDictVariable.call_methodi  s     = t9>!>Aw$))"1g66''/"d1gY00"&"6"6"D"DRR"PKG'MDG[+A6 '&7&r>>r@   )r<  r   rq   r  )rr   rs   rt   ru   rM   r?  r   rx   rJ  r  rz   r  r  s   @r!   r9  r9  P  sU    / /
,

 Q Q? &	?
 -? 
? ?r@   r9  c                      ^  \ rS rSrSrS\\   SS4U 4S jjrS r\	S 5       r
\S	 5       rS
 rS rS rS rS\\   S\\\4   SS4U 4S jjrSSS\4S jrS rS rSrU =r$ )SetVariablei  z-We model a sets as dictonary with None valuesr.   rH   Nc                 x   > [         R                  U[        R                  5       5      n[        TU ]  " U40 UD6  g r   )r   fromkeysrQ  _default_valuer   rM   rL   r.   r   r   s      r!   rM   SetVariable.__init__  s0    
 e[%?%?%AB)&)r@   c                     U R                   (       d  gSSR                  S U R                   R                  5        5       5      -   S-   $ )Nzset()r   ,c              3   T   #    U  H  oR                   R                  5       v   M      g 7fr   r   r   r   s     r!   r"   )SetVariable.debug_repr.<locals>.<genexpr>       !O=N$$//"3"3=N   &(r   r.   r   r   r^   s    r!   r   SetVariable.debug_repr  s7    zz!OTZZ__=N!OOORUUUr@   c                 H    [        U R                  R                  5       5      $ r   )rG  r.   r   r^   s    r!   	set_itemsSetVariable.set_items  s    4::??$%%r@   c                  .    [         R                  " S 5      $ r   )r   r   r{   r@   r!   rT  SetVariable._default_value  s      &&t,,r@   c                 t    U R                    Vs1 s H  oR                  R                  5       iM     sn$ s  snf r   )ra  rK   r(   rL   r   s     r!   r(   SetVariable.as_proxy  s&    )-8A888   #5c                     [         $ r   )rG  r^   s    r!   r   SetVariable.python_type  s    
r@   c                 t    U R                    Vs1 s H  oR                  R                  5       iM     sn$ s  snf r   ra  rK   rZ   rf  s     r!   rZ   SetVariable.as_python_constant  )    37>>B>a'')>BBBrh  c                     UR                  U R                   Vs/ s H  o"R                  PM     sn5        UR                  [	        S[        U R                  5      S95        g s  snf )N	BUILD_SETr   )foreachra  rK   r   r
   rg   rL   r   r?   s      r!   r   SetVariable.reconstruct  sG    t~~6~!~670#dnnBUVW 7s   A#r   r   r   c                 &  > US:X  a7  U(       a   e[        U5      S:X  d   eSnUS   [        R                  5       4nGOUS:X  aJ  U(       a   eU(       a   eU R                  R	                  5       R
                  n[        TU ]  XU4U5        U$ US:X  aS  U(       a   e[        U5      S:X  d   e[        R                  " [        R                  5      R                  XUS   /0 5      $ US:X  aS  U(       a   e[        U5      S:X  d   e[        R                  " [        R                  5      R                  XUS   /0 5      $ US:X  aS  U(       a   e[        U5      S:X  d   e[        R                  " [        R                  5      R                  XUS   /0 5      $ US	:X  aS  U(       a   e[        U5      S:X  d   e[        R                  " [        R                  5      R                  XUS   /0 5      $ US
:X  aw  [        U5      S:X  ah  U R!                  5       (       aS  U(       a   e[        U5      S:X  d   e[        R                  " [        R"                  5      R                  XUS   /0 5      $ US:X  a?  U(       a   e[        U5      S:X  d   eUS   U ;  a  [%        S5        [        TU ]  USX45      $ US:X  aH  U(       a   e[        U5      S:X  d   eUS   U ;   a  [        TU ]  USX45      $ [&        R(                  " S S9$ [        TU ]  XX45      $ )Nr   r   r   r   r   
isdisjointintersectionunion
differencer   removezkey does not existdiscard)rW   )rg   rQ  rT  ra  r   rK   r   r  r   r4   r   set_isdisjointrM  set_intersection	set_unionset_differencer  
set_updater   r   r   )rL   r   r   r   r   resultr   s         r!   r  SetVariable.call_method  s    5=:t9>!> DG[779:DU]:O8^^''),,FG6)V<M\!:t9>!>11((mBtAw45 ^#:t9>!>11**mBtAw45 W_:t9>!>11)2E2EFTT47OR  \!:t9>!>11((mBtAw45 X#d)q.T__5F5F:t9>!>11)2F2FGUU47OR  X:t9>!>Awd"237&r5$??Y:t9>!>Aw$w*2udCC'..T::w"2T::r@   r   r   r   c                     [        S5      e)NzIllegal to getitem on a set)RuntimeError)rL   r   r   s      r!   r   SetVariable.getitem_const  s    899r@   c                     g r   r{   r^   s    r!   r   )SetVariable.install_dict_keys_match_guard      r@   c                     g r   r{   r6  s      r!   r   'SetVariable.install_dict_contains_guard  r  r@   r{   )rr   rs   rt   ru   rv   r.  r   rM   r   rw   ra  rx   rT  r(   r   rZ   r   r   r/  r  r   r   r   rz   r  r  s   @r!   rQ  rQ    s    7*O$* 
	*V & & - -9CX?; ?#	?;
 S/)*?; 
?;B: 7 :o : r@   rQ  c                      ^  \ rS rSrS\\   SS4U 4S jjrS r\S 5       r	S r
S	 rS
 rS\\   S\\\4   SS4U 4S jjrSrU =r$ )FrozensetVariablei  r.   rH   Nc                 (   > [         TU ]  " U40 UD6  g r   r   rM   rU  s      r!   rM   FrozensetVariable.__init__      
 	)&)r@   c                     U R                   (       d  gSSR                  S U R                   R                  5        5       5      -   S-   $ )Nzfrozenset()r   rX  c              3   T   #    U  H  oR                   R                  5       v   M      g 7fr   r   rZ  s     r!   r"   /FrozensetVariable.debug_repr.<locals>.<genexpr>  r\  r]  r   r^  r^   s    r!   r   FrozensetVariable.debug_repr  s7    zz !OTZZ__=N!OOORUUUr@   c                 6    U R                   R                  5       $ r   )r.   r   r^   s    r!   ra  FrozensetVariable.set_items  s    zz  r@   c                     [         $ r   )	frozensetr^   s    r!   r   FrozensetVariable.python_type      r@   c                 t    U R                    Vs1 s H  oR                  R                  5       iM     sn$ s  snf r   rl  rf  s     r!   rZ   $FrozensetVariable.as_python_constant  rn  rh  c                    ^ TR                  U R                   Vs/ s H  o"R                  PM     sn5        TR                  U4S j5        TR	                  [        SS5      5        g s  snf )Nc                  F   > T R                  T R                  S5      /5      $ )Nr  )r   create_load_globalr   s   r!   r   /FrozensetVariable.reconstruct.<locals>.<lambda>  s#    G))..{;r@   r   F)rq  ra  rK   r   r   r	   rr  s    ` r!   r   FrozensetVariable.reconstruct  sT    t~~6~!~67	
 	21e<= 7s   A(r   r   r   c                 N   > US;   a  [        SU S35      e[        TU ]	  XX45      $ )Nr   r   r   ry  rz  r   Illegal call_method z on a frozensetr  r   r  rL   r   r   r   r   r   s        r!   r  FrozensetVariable.call_method  5     II!5dV?KLLw"2T::r@   r{   )rr   rs   rt   ru   r.  r   rM   r   rw   ra  r   rZ   r   r   r/  r  rz   r  r  s   @r!   r  r    s    *O$* 
	*V ! !C	>	; ?#		;
 S/)*	; 
	; 	;r@   r  c                      ^  \ rS rSrS\\   SS4U 4S jjrS r\S 5       r	S r
S	 rS
\\   S\\\4   SS4U 4S jjrSrU =r$ )DictKeySetVariablei(  r.   rH   Nc                 (   > [         TU ]  " U40 UD6  g r   r  rU  s      r!   rM   DictKeySetVariable.__init__)  r  r@   c                     U R                   (       d  gSSR                  S U R                   R                  5        5       5      -   S-   $ )Nzdict_keys([])zdict_keys([rX  c              3   T   #    U  H  oR                   R                  5       v   M      g 7fr   r   rZ  s     r!   r"   0DictKeySetVariable.debug_repr.<locals>.<genexpr>6  s     H6G44??,,6Gr]  z])r^  r^   s    r!   r   DictKeySetVariable.debug_repr0  sA    zz" ((Hdjjoo6GHHIr@   c                     U R                   $ r   )r.   r^   s    r!   ra  DictKeySetVariable.set_items:  s    zzr@   c                     [         $ r   r   r^   s    r!   r   DictKeySetVariable.python_type>  r  r@   c                     [         R                  U R                   Vs1 s H  oR                  R	                  5       iM     snS 5      R                  5       $ s  snf r   )r   rS  ra  rK   rZ   r   rf  s     r!   rZ   %DictKeySetVariable.as_python_constantA  s@    }}04?1TT$$&?

$&	?s   #Ar   r   r   c                 N   > US;   a  [        SU S35      e[        TU ]	  XX45      $ )Nr  r  z on a dict_keysr  r  s        r!   r  DictKeySetVariable.call_methodF  r  r@   r{   )rr   rs   rt   ru   r.  r   rM   r   rw   ra  r   rZ   r   r/  r  rz   r  r  s   @r!   r  r  (  sy    *O$* 
	*  
	; ?#		;
 S/)*	; 
	; 	;r@   r  c                      ^  \ rS rSr% SrSr\\   \S'   S\	SS4U 4S jjr
\S 5       r\S	 5       rS
 rS rS\S   S\\S4   SS4U 4S jjrSrU =r$ )DictViewVariableiR  zi
Models _PyDictViewObject

This is an "abstract" class. Subclasses will override kv and the items method
Nkvr  rH   c                    > [         TU ]  " S0 UD6  U R                  S;   d   e[        U[        5      (       d   eXl        g )N)r   r   r{   )r   rM   r  r$   rB   r  r  s      r!   rM   DictViewVariable.__init__[  s?    "6"ww,,,,'#45555r@   c                 `    [        U R                  R                  U R                  5      " 5       $ r   )getattrr  r.   r  r^   s    r!   
view_itemsDictViewVariable.view_itemsa  s     t||))477355r@   c                     [         er   )NotImplementedErrorr^   s    r!   view_items_vtDictViewVariable.view_items_vte  s
     "!r@   c                 ^   ^  U 4S jnT R                    Vs/ s H
  o2" U5      PM     sn$ s  snf )Nc                 @   > TR                   S:X  a  U R                  $ U $ )Nr   )r  rK   )r?   rL   s    r!   unwrap4DictViewVariable.unpack_var_sequence.<locals>.unwrapl  s    77f,1443!3r@   )r  )rL   r   r  r?   s   `   r!   r  $DictViewVariable.unpack_var_sequencek  s*    	4 $(??3?aq	?333s   *c                     U" U R                   5        UR                  U R                  5        UR                  S5        g )Nr   )r  load_methodr  r  r(  s     r!   r   DictViewVariable.reconstructq  s.    DGG$Ar@   r   r   r   c                 h   > US:X  a  U R                   R                  XX45      $ [        TU ]  XX45      $ )Nr   )r  r  r   r  s        r!   r  DictViewVariable.call_methodv  s6     9<<++BdCCw"2T::r@   r-  )rr   rs   rt   ru   rv   r  r   r/  __annotations__rB   rM   rw   r  r  r  r   r.  r   r  rz   r  r  s   @r!   r  r  R  s     B 1   6 6 " "
4
	; $%		;
 S++,	; 
	; 	;r@   r  c                   r   ^  \ rS rSrSr\S 5       r\S 5       rS rS\	S   S\
\S4   S	S4U 4S
 jjrSrU =r$ )r   i  r   c                 ,    [        U R                  5      $ r   )rG  r  r^   s    r!   ra  DictKeysVariable.set_items  s    4??##r@   c                 X    U R                    Vs/ s H  oR                  PM     sn$ s  snf r   )r  rK   r   s     r!   r  DictKeysVariable.view_items_vt  s"     #oo.oo...s   'c                     [         $ r   r  r^   s    r!   r   DictKeysVariable.python_type  r  r@   r   r   r   rH   c                 b  > US:X  a  U R                   R                  XX45      $ U[        ;   as  [        US   [        [
        45      (       d  [        R                  " [        5      $ [        R                  " [        U   " U R                  US   R                  5      5      $ [        TU ]  XX45      $ )Nr   r   )r  r  r   r$   rQ  r   r   r   NotImplementedra  r   r  s        r!   r  DictKeysVariable.call_method  s     >!<<++BdCC))d1g5E'FGG'..~>>#**&t,T^^T!W=N=NO  w"2T::r@   r{   )rr   rs   rt   ru   r  rw   ra  r  r   r.  r   r/  r  rz   r  r  s   @r!   r   r     sl    	B$ $ / /; $%	;
 S++,; 
; ;r@   r   c                   .    \ rS rSrSr\S 5       rS rSrg)r  i  r   c                 ,    [        U R                  5      $ r   )r.  r  r^   s    r!   r   DictValuesVariable.view_items_vt  s    DOO$$r@   c                     [         $ r   )r   r^   s    r!   r   DictValuesVariable.python_type  s    r@   r{   N)	rr   rs   rt   ru   r  rw   r  r   rz   r{   r@   r!   r  r    s    	B% %r@   r  ).rv   r   r   r&  typingr   r   torch._subclasses.fake_tensorr   r   r   r   bytecode_transformationr	   r
   excr   r   guardsr   r   r   r   utilsr   r   r   r   baser   r   constantr   torch._dynamo.symbolic_convertr   r   rB   r  r1  r9  rQ  r  r  r  r   r  r{   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@   