
    iz                     D   d 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	m
Z
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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( ddl)m*Z* e
rddl+m,Z, ddl-m.Z. ddl/m0Z0 dede1fdZ2	 d2de&de	d   ddfdZ3de&de1fdZ4 G d de&      Z5 G d de&      Z6 G d  d!e5      Z7 G d" d#e5      Z8 G d$ d%e5      Z9 G d& d'e9      Z: G d( d)e9      Z; G d* d+e&      Z< G d, d-e<      Z= G d. d/e<      Z> G d0 d1e<      Z?y)3a  
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)Sequence)AnyOptionalTYPE_CHECKINGUnion   )graph_break_hints	polyfills	variables)create_call_functioncreate_instruction)raise_observed_exceptionunimplemented)GuardBuilderinstall_guard)is_constant_sourceis_from_local_source)cmp_name_to_op_mapping
dict_items	dict_keysdict_valuesistyperaise_args_mismatchspecialize_symnode   )ValueMutationNewVariableTracker)ConstantVariable)ListIteratorVariable)	PyCodegenInstructionTranslator)UserFunctionVariableobjreturnc                 L    t        |       j                  j                  dd      S )N__instancecheck__F)type__dict__get)r$   s    W/var/www/html/engine/venv/lib/python3.12/site-packages/torch/_dynamo/variables/dicts.pywas_instancecheck_overrider,   ;   s     9!!"5u==    argtxr"   c                     |ddl m}  |j                         }	 | j                         }t        t        |t        d|dt        | j                                      g       y # t        $ r t        |       }Y Pw xY w)Nr   r!   zunhashable type: z and variable tracker = args)
torch._dynamo.symbolic_convertr"   
current_txpython_type	Exceptionr(   r   	TypeErrorr   realize)r.   r/   r"   arg_types       r+   raise_unhashabler:   ?   s     
zH-"--/??$ 
#H</GS[[]H[G\]
  9s   A% %A<;A<xc                     t        | t        j                        r!| j                         s| j	                         ry| j                         S )NT)
isinstancer   LazyVariableTrackeris_realizedis_hashableis_python_hashable)r;   s    r+   r@   r@   V   s8     	1i334MMO!!r-   c                   X    e Zd Zej                  Zdhej                  Z G d d      Ze	fde	eef   de
deddf fdZde
de
fd	Zde	eef   fd
ZdefdZde	eef   fdZde	eef   fdZde
fdZdedefdZdddddedee   de	eef   defdZdefdZdefdZdee   dedefdZd.dZd.dZddd edefd!Zddd edefd"Z d edee   fd#Z!d eddfd$Z"d/d%Z#ddd&e$e   ddfd'Z%ddd(ed&e$e   de	eef   def
 fd)Z&ddde$e   fd*Z'ddd(ede(fd+Z)dedef fd,Z*d- Z+ xZ,S )0ConstDictVariableuser_clsc                   8    e Zd ZdZdeddfdZdefdZ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
        vtr%   Nc                 T    t        |      }t        |      st        |       || _        y N)r   r@   r:   rG   )selfrG   s     r+   __init__z+ConstDictVariable._HashableTracker.__init__s   s$    #B'B r? $DGr-   c                 ,   t        | j                  t        j                        rW| j                  j	                         s=| j                  j                         r#t        | j                  j                               S | j                  j                         S )a  
            Computes the hash value for the wrapped VariableTracker.

            For unrealized LazyVariableTrackers, uses the hash of the original value
            to avoid realizing the tracker and inserting unnecessary guards.
            For all other cases, delegates to the VariableTracker's get_python_hash method.

            Returns:
                The hash value of the underlying variable tracker
            )	r=   rG   r   r>   r?   r@   hashoriginal_valueget_python_hashrJ   s    r+   __hash__z+ConstDictVariable._HashableTracker.__hash__|   sc     477I$A$AB++-GG'')DGG2245577**,,r-   c                 ~    | j                   |j                   u ry| j                   j                  |j                         S )a  
            Checks equality between two _HashableTracker instances.

            Delegates to the VariableTracker's is_python_equal method to compare
            the underlying variable trackers for Python-level equality.

            Args:
                other: Another _HashableTracker instance to compare with

            Returns:
                True if the underlying variable trackers are Python-equal, False otherwise
            T)rG   is_python_equalrJ   others     r+   __eq__z)ConstDictVariable._HashableTracker.__eq__   s0     ww%(("77**58844r-   )
__name__
__module____qualname____doc__r   rK   intrQ   boolrV    r-   r+   _HashableTrackerrF   l   s2    		 	4 		-c 	-&	54 	5r-   r^   itemskwargsr%   Nc           	      2   d|v r|j                  d       d|v r|j                  d       t        	|   d	i | t        j                  t        fd|j                         D              sJ dt        t        df   ddffd}| j                  |      } ||j                         D ci c]  \  }} ||      | c}}      | _        | j                  rt        | j                         nd| _        |j                         | _        || _        y c c}}w )
Noriginal_itemsshould_reconstruct_allc              3   l   K   | ]+  \  }}t        |t        f      xr t        |t               - y wrI   )r=   r   ).0r;   vHashables      r+   	<genexpr>z-ConstDictVariable.__init__.<locals>.<genexpr>   s?      
 1 q?H56 /1o./
s   14keyrF   r%   c                 0    t        |       r| S  |       S rI   )r=   )ri   rg   s    r+   make_hashablez1ConstDictVariable.__init__.<locals>.make_hashable   s     %S(33F#Fr-   Tr]   )popsuperrK   rC   r^   allr_   r   r   _get_dict_cls_from_user_clssourcer   rc   copyrb   rD   )
rJ   r_   rD   r`   rk   dict_clsr;   rf   rg   	__class__s
           @r+   rK   zConstDictVariable.__init__   s    v%JJ'(#v-JJ/0"6"$55  
 
 
 	
 
	G(LLM	G1	G
 33H=u{{}Mtq!}Q/2MN
 6:[[$T[[11d 	# $jjl  Ns   -D
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rI   r]   )re   baseaccepted_dict_typess     r+   rh   z@ConstDictVariable._get_dict_cls_from_user_cls.<locals>.<genexpr>   s      T=P5Ps   	)dictcollectionsOrderedDictdefaultdictnext__mro__)rJ   rD   rr   rw   s      @r+   ro   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 rI   )r_   rG   as_proxyrJ   krf   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rG   
debug_repr)re   r   rf   s      r+   rh   z/ConstDictVariable.debug_repr.<locals>.<genexpr>   s7      =AQ144??$%R'78s   :<})joinr_   rP   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 rI   )r_   rG   as_python_constantr   s      r+   r   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 rI   )install_dict_keys_match_guardr_   rG   r   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 rI   rD   rP   s    r+   r5   zConstDictVariable.python_type   s    }}r-   rG   c                     t        |t              sJ t        j                  }|j	                         xrD  ||      | j
                  v xr. t        | j
                   ||         t        j                         S rI   )r=   r   rC   r^   rA   r_   r   DeletedVariable)rJ   rG   rg   s      r+   __contains__zConstDictVariable.__contains__   sj    "o...$55!!# T

*Ttzz(2,79R9RSS	
r-   r/   r"   tree_map_fnr#   map_fnresttree_map_kwargsc           
         g }|D ]u  }|j                         }t        |t              r+t        |j                        t        | j                        k7  r| j                  |||||      c S |j                  |       w  t        | j                               }| j                  j	                         D ]E  \  }	}
g }|D ]!  }	 |j                  |j                  |	          # |
j                  |||||      ||	<   G |D 	ci c]  }	|	j                  ||	    }}	| j                  ||dd t                     S # t        $ r | j                  |||||      cY c c S w xY wc c}	w )NT)r_   rb   rc   rp   mutation_type)r8   r=   rC   lenr_   _tree_map_fallbackappendr(   KeyErrorcall_tree_maprG   cloner   )rJ   r/   r   r   r   r   other_dicts	candidatenew_items_hashedkey_trackervaluesibling_leavesupdated_original_itemss                r+   call_tree_map_branchz&ConstDictVariable.call_tree_map_branch   s    02 	*I!))+Ii):;s@TZZ@! ..VT?  y)	* ,4

+-"&**"2"2"4 	K46N( 	")))//+*FG -2,?,?-[)	&  0"
 NN,[99"
 "

 zz"1#'*,  
 	
#   22K "
s   ?D4=E4EEc                 V    t        d | j                  j                         D              S )Nc              3   R   K   | ]  }t        |t        j                          ! y wrI   )r=   r   r   )re   r;   s     r+   rh   z(ConstDictVariable.len.<locals>.<genexpr>/  s%      
=>
1i7788
s   %')sumr_   valuesrP   s    r+   r   zConstDictVariable.len.  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rI   )is_new_itemrb   r*   rG   )re   ri   r   rJ   s      r+   rh   z2ConstDictVariable.has_new_items.<locals>.<genexpr>4  s?      2
U T0044SVV<eD2
s   AA)rc   anyr_   rP   s   `r+   has_new_itemszConstDictVariable.has_new_items3  s7    ** 
c 2
"jj..02
 /
 	
r-   r   rU   c                     |rS|j                         rC|j                         r3t        |j                               t        |j                               k7  S t        |      t        |      k7  S rI   )r?   idr8   )rJ   r   rU   s      r+   r   zConstDictVariable.is_new_item9  sQ     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r.   )r_   rb   r*   rG   r   rc   append_outputr   )rJ   codegennum_argsri   r   items         r+   reconstruct_kvs_into_new_dictz/ConstDictVariable.reconstruct_kvs_into_new_dictA  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 )Nrz   extend_outputcreate_load_python_modulery   create_load_attrr   s   r+   <lambda>z/ConstDictVariable.reconstruct.<locals>.<lambda>Q  s3    --99+F00? r-   r   F)rD   ry   rz   add_push_nullr   r   r   rJ   r   s    `r+   reconstructzConstDictVariable.reconstructM  s\    ==K333!! ..w7!!"6q%"@A..w7r-   r.   c                 ,   t         j                  |      }|| j                  vr3	 dt        |       d|j	                         }t        t        ||g       | j                  |   S # t
        $ r$ t        j                  dt        |             }Y Nw xY w)NzDict key lookup failed for z%. Debug representation of the key is r1   )
rC   r^   r_   strr   r6   r   creater   r   )rJ   r/   r.   ri   error_messages        r+   'getitem_const_raise_exception_if_absentz9ConstDictVariable.getitem_const_raise_exception_if_absent]  s      005djj 1#c( <::=..:J9MO  %XrHzz#   0 7 71#c(<!s   A& &*BB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)rC   r^   r_   r   r   r	   
USER_ERROR)rJ   r/   r.   ri   msgs        r+   getitem_constzConstDictVariable.getitem_constn  su      005djj #CII;.GHC/syyk*T&11	 zz#r-   c                 h    t         j                  |      }|| j                  vry | j                  |   S rI   )rC   r^   r_   )rJ   r.   ri   s      r+   maybe_getitem_constz%ConstDictVariable.maybe_getitem_const  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 rI   )rC   r^   tupler_   keysindexrb   r=   r   r>   r8   )rJ   r.   ri   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 rI   )rp   r   
make_guardr   DICT_KEYS_MATCHrP   s    r+   r   z/ConstDictVariable.install_dict_keys_match_guard  s%    ;;$//,*F*FGH r-   r2   c           	         | j                   sy |j                  j                  j                  |       ry |d   | v }|d   j                   i|d   j	                         rVt        | j                  t        j                  t        |       j                  |d   j                         |                    y |d   j                   r(|r| j                  |d          y | j                          y y )Nr   )ri   invert)rp   outputside_effectsis_modifiedis_python_constantr   r   	functoolspartialr(   CONTAINS_GUARDr   r   r   )rJ   r/   r2   containss       r+   install_dict_contains_guardz-ConstDictVariable.install_dict_contains_guard  s    " {{99!!--d37d?7>>!d1g&@&@&B%%T
11 G668#+| !W^^##DG,224	 r-   namec           
         ddl m}m} t        j                  }|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        ||dt        |       d       | j!                  ||d         S |dk(  r|s|r&t        ||d	t        |       d
t        |       d       | j#                          | j$                  r/|j                  j&                  j)                  | j$                         t+        |       S |dk(  r{t        |      rt        ||dt        |       d       | j#                          | j$                  r/|j                  j&                  j)                  | j$                         t-        |       S |dk(  r|s|r&t        ||d	t        |       d
t        |       d       | j#                          | j$                  r/|j                  j&                  j)                  | j$                         |s|rt/        t0        |       t3        |       S |dk(  rn| j#                          |s|r&t        ||d	t        |       d
t        |       d       | j5                  | j                  j7                         t9               d       S |dk(  r_|s|r&t        ||d	t        |       d
t        |       d       | j#                           |j                  t        | j                              S |dk(  r| j;                         r|xr t=        |d         }	|	st?        |d   |       | j#                          |st        |      dk7  r&t        ||dt        |       d
t        |       d       |j                  j                  j                  |        |d   | j                   ||d         <    |j                  d       S |dk(  r| j;                         r|xr t=        |d         }	|	rr| j#                          d| _         |j                  j                  j                  |        | j                  jC                   ||d                 |j                  d       S tD        |   ||||      S |dk(  rt        |      dvrt        ||dt        |       d       |xr t=        |d         }	|	st?        |d   |       |d   | vr7| jI                  ||       t        |      dk(  r |j                  d       S |d   S | jK                  ||d         S |dk(  r| j;                         rt        |      dvrt        ||dt        |       d       |xr t=        |d         }	|	st?        |d   |       |d   | vr5| jI                  ||       t        |      dk(  rt/        tL        |       |d   S d| _         |j                  j                  j                  |        | j                  jO                   ||d               S |dk(  r| j;                         rtQ        | jR                  t              r;tQ        | jR                  tT        jV                        st        |      rt        ||       | j                  s% |j                  d      }
t/        tL        ||
g       | jR                  tT        jV                  u rt        |      dk(  sd|v rt        |      dk(  r'|d   jY                         r|d   j[                         }n@|j]                  d      x}r!|jY                         r|j[                         }nt        ||       | j                  j_                        \  }}n| j                  j_                         \  }}d| _         |j                  j                  j                  |        t        j`                  |jb                  |g      S |d k(  r|s|r&t        ||d	t        |       d
t        |       d       d| _         |j                  j                  j                  |        | j                  je                           |j                  d       S |d!k(  rM| j;                         r<| j#                          t        |      dk(  }t        |      dkD  }|s|r|j                  j                  j                  |        |rktg        |d   t              r|d   j#                          |d   }n|ji                  |t        |d         }| j                  j                  |j                         |rT|j                         D ci c]  \  }} | |j                  |            |  }}}| j                  j                  |        |j                  d       S tD        |   ||||      S |d"k(  rt        |      s&t        ||d#t        |       d
t        |       d       |xr t=        |d         }	|	st?        |d   |       | jI                  ||       |d   | v } |j                  |      S |d$k(  r*| j;                         rt        |      dvr&t        ||d%t        |       d
t        |       d       |xr t=        |d         }	|	st?        |d   |       | j#                          |st        |      dkD  r&t        ||d&t        |       d
t        |       d       | jk                  |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t/        tL        |       d}t        |      dk(  r&|d   jY                         r|d   j[                         }|r6d|v r2|d   jY                         r|j]                  d      j[                         } ||d         }| j                  jm                  ||        |j                  d       S |d(k(  rqto        | t              rat        |      dk7  rt        ||dt        |       d       t        jp                  tr        jt                        jw                  || |d   gi       S |d)k(  r/ |j                  | jG                  |d(||      jx                         S |d*k(  r[t        |      dk7  rt        ||dt        |       d       |d   }to        |t        t
        jz                  f      sLd+| j}                         j~                   d,|j}                         j~                   d-}t/        t0        ||g       | jR                  |jR                  h}t        d. |D              rtT        jV                  nt        }| j#                          | j5                  | j                  j7                         t9               d |/      }|d   j#                          |j                  j                  |d   j                         |S |d0k(  r| jG                  |d!||       | S |d1k(  rt| j$                  rDt        | j$                        s/|j                  j&                  j)                  | j$                         t        | j                  |      t9               2      S tD        |   ||||      S c c}}w )3Nr   )BuiltinVariabler   rK   __getitem__1 args argsr   r_   0 args and 0 kwargs
 args and  kwargsr   z0 argsr   rq   )r_   r   rp   __len____setitem__r   z2 args and 0 kwargs__delitem__Tr*   )r   r   z1 or 2 argsrl   popitemzpopitem(): dictionary is emptyr1   last)r   clearupdater   zmore than 1 args and 0 kwargs
setdefaultz1 or 2 args and 0 kwargszat most 2 args and 0 kwargsmove_to_endrV   __ne____or__z$unsupported operand type(s) for |: 'z'and ''c              3   P   K   | ]  }t        |t        j                           y wrI   )
issubclassry   rz   )re   ts     r+   rh   z0ConstDictVariable.call_method.<locals>.<genexpr>   s     J!z![%<%<=J   $&)r_   r   rp   rD   __ior____iter__r   )D r   r   rC   r^   r   rx   	call_dictr   r   mutationr_   r   r   r   r   r   r   rp   guard_on_key_orderaddDictItemsVariableDictKeysVariabler   r7   DictValuesVariabler   rq   r   
is_mutabler@   r:   rc   r   rm   call_methodr   r   r   rl   r  rD   ry   rz   r   r   r*   r   TupleVariablerG   r   r=   call_custom_dictr   r   r   r#   r
   dict___eq__call_functionr   UserDefinedDictVariabler5   rW   r   r   r   unpack_var_sequence)rJ   r/   r   r2   r`   r   r   rg   temp_dict_vtarg_hashabler   r   rf   r   has_arg
has_kwargsdict_vtkwargs_hashabler   r   r;   ri   rU   err_msgtsrD   new_dict_vtrs   s                              r+   r  zConstDictVariable.call_method  s    	8$55:D944T:DD#L II""++D1JJl001*#**400]"4yA~#Bh3t9+U8KL??DGLLW_v#)4ykCK=@	 ..0{{		,,00=$T**V^4y#Bh3t9+U8KL..0{{		,,00=#D))Xv#)4ykCK=@	 ..0{{		,,00=v(B7%d++V^..0v#)4ykCK=@	 ::jjoo'7G7IRV    Yv#)4ykCK=@	 ..0*#**3tzz?;;]"t'88KQ$8L a"-..0Ta#)4ykCK=@	 II""++D1,0GDJJxQ()*#**400]"t'88KQ$8L224.2+		&&//5

&&xQ'89.'..t44w*2tT6BBU]4y&#BmD	{%=PQ8KQ$8L a"-Awd"00T:t9>2+22488Aw%%b$q'22U]t04y&#BmD	{%=PQ8KQ$8L 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>d1g&@&@&B7557D!::f--a-13G3G3I//1D'D1zz))t)41zz))+1*.D'II""++D1**ADD!955W_v#)4ykCK=@	 +/D'II""++D1JJ*#**400X$//"3 ..0$i1nGVqJ*		&&//5!$q'+<= Q==?59!W"1"B"B2tTRSW"UJJ%%gmm4 %+LLN' Aq !!8!1!8!8!;<a?'O ' JJ%%o6.'..t44w*2tT6BB^#t9#34ykCK=@	  8KQ$8L a"-,,R6Aw$H*#**844\!doo&74y&#.4ykCK=@	  8KQ$8L a"-..0TQ#14ykCK=@	 ,,T!W5E t9>/(//5AQA		&&//501

8DG,-]"..0II""++D1Awd"(26D4yA~$q'"<"<">Aw113&F*vf~/P/P/Rzz&)<<>47#CJJ""3T"2*#**400X&##
 4yA~#Bh3t9+U8KL11)2G2GHVVT47OR  X*#**$$R4@FFF  X4yA~#Bh3t9+U8KLGE& )9+L+LM ;4;K;K;M;V;V:W X!--/889<  )BgYG --0B JrJJ ''  ..0**jjoo'.0!	 % K G113$$T!W]]3YR48KZ{{#5dkk#B		,,00='((,<L<N  7&r4v>>g's   (#}+c                 t    | j                          | j                  D cg c]  }|j                   c}S c c}w rI   )r   r_   rG   )rJ   r/   r;   s      r+   r  z%ConstDictVariable.unpack_var_sequence  s*    **,"jj))))s   5c                     t         fdt        t        j                  t        j                  fD              rRt         j                  |      rt        j                  d      S  j                  t        u rt        j                  d      S d j                   d}t        dd j                   |dgt        j                  	       y )
Nc              3   :   K   | ]  }j                   |u   y wrI   r   )re   r  rJ   s     r+   rh   z5ConstDictVariable.call_obj_hasattr.<locals>.<genexpr>&  s"      
 MMQ
s   TFzhasattr on z is not supportedzunsupported hasattr operationzClass z+Consider using a regular dictionary insteadr   )r   rx   ry   rz   r{   hasattrrD   r   r   r   r	   SUPPORTABLE)rJ   r/   r   r   s   `   r+   call_obj_hasattrz"ConstDictVariable.call_obj_hasattr!  s    
  
K33[5L5LM
 
 t}}d+'..t44}}$'..u55DMM?*;<3T]]O,="..		
r-   c                 B    | j                          t        |   di |S Nr]   )r   rm   r   )rJ   r`   rs   s     r+   r   zConstDictVariable.clone:  s!    **,w}&v&&r-   c                      y)zP
        Dictionaries are mutable and therefore not hashable in Python.
        Fr]   rP   s    r+   rA   z$ConstDictVariable.is_python_hashable>       r-   r   r    r%   Nr%   N)-rW   rX   rY   r   DICT_CONTAINSr   r   _nonvar_fieldsr^   rx   r(   r   rK   ro   r   r   r   r   r   r5   r\   r   r   r   r[   r   r   r   r   r   r   r   r   r   r   r   listr   r  r  r   r%  r   rA   __classcell__rs   s   @r+   rC   rC   d   s   !//N 			'	'N
25 25n %!O_45%! %! 	%!
 
%!ND T &N$sCx. N
C 

DcN 
Mc?.B)C MT 
 
4 
0
#0
 ,0
  	0

 '0
 c?230
 
0
d
S 


t 
&o.&7F&	&
M8 )0?	")0?	" 8O;T &/ &d &I&5)&515o1F&5	&5Pa?#a? a? ?#	a?
 S/)*a? 
a?F*&= *$BW *
)
14
	
2'c 'o 'r-   rC   c            
            e Zd Zdededdf fdZdefdZdddee	   fd	Z
dd
Zdddedee	   deee	f   de	f
dZdddedef fdZ xZS )MappingProxyVariabledv_dictr`   r%   Nc                 V    t        |   di | t        |t              sJ || _        y r'  )rm   rK   r=   rC   r3  rJ   r3  r`   rs   s      r+   rK   zMappingProxyVariable.__init__G  s+    "6"'#4555r-   c                 "    t         j                  S rI   )typesMappingProxyTyperP   s    r+   r5   z MappingProxyVariable.python_typeL  s    %%%r-   r/   r"   c                 8    | j                   j                  |      S rI   )r3  r  rJ   r/   s     r+   r  z(MappingProxyVariable.unpack_var_sequenceO  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 )Nr8  )r   r   r7  r   r   s   r+   r   z2MappingProxyVariable.reconstruct.<locals>.<lambda>c  s4    G))55e<,,-?@ r-   r   F)rp   r   r	   r$  r   r3  r   r   )rJ   r   r   s    ` r+   r   z MappingProxyVariable.reconstructR  s    ;;<T[[M JL L  ?"4;;-0Y&22	 		
 	21e<=r-   r   r2   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 mutationr<  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   )rp   r   r   has_existing_dict_mutationr   r3  r  )rJ   r/   r   r2   r`   r   s         r+   r  z MappingProxyVariable.call_methodm  ss     ;;29911LLN7  G"4;;-/GHdh	 ||''D$??r-   c                     | j                         t        j                  u r/t        j                  |t        j                  j
                  v       S t        |   ||      S rI   )r5   r7  r8  r   r   r)   rm   r%  )rJ   r/   r   rs   s      r+   r%  z%MappingProxyVariable.call_obj_hasattr  sP     !7!77#**453I3I3R3R+RSSw'D11r-   r*  )rW   rX   rY   rC   r   rK   r(   r5   r.  r   r  r   r   rx   r  r   r%  r/  r0  s   @r+   r2  r2  E  s     1 S T 
&T &4&= 4$BW 4>6@#@ @ ?#	@
 S/)*@ 
@:2)2142	2 2r-   r2  c                   .    e Zd ZddZdddee   ddfdZy)	NNModuleHooksDictVariabler%   Nc                      y rI   r]   rP   s    r+   r   z7NNModuleHooksDictVariable.install_dict_keys_match_guard  s    r-   r/   r"   r2   c                      y rI   r]   rJ   r/   r2   s      r+   r   z5NNModuleHooksDictVariable.install_dict_contains_guard  s     	r-   r+  )rW   rX   rY   r   r.  r   r   r]   r-   r+   rB  rB    s)    )15o1F	r-   rB  c                        e Zd Z	 ddeeef   dedee   deddf
 fdZde	f fdZ
def fd	Zed
ede	fd       Zdddedee   deeef   def
 fdZddZ xZS )DefaultDictVariableNr_   rD   default_factoryr`   r%   c                     t        |   ||fi | |t        j                  u sJ |t	        j
                  d       }|| _        y rI   )rm   rK   ry   r{   r   r   rH  )rJ   r_   rD   rH  r`   rs   s        r+   rK   zDefaultDictVariable.__init__  sK     	3F3;22222".55d;O.r-   c                 t    | j                   t        t        t        fvr| j                  syt
        |          S )NF)rH  r.  r   rx   r_   rm   r   rJ   rs   s    r+   r   z&DefaultDictVariable.is_python_constant  s1     eT'::4::w)++r-   c                 z    | j                   J d| j                   j                          dt        |           dS )Nzdefaultdict(r   ))rH  r   rm   rK  s    r+   r   zDefaultDictVariable.debug_repr  sF    ##///4//::<=R@R@T?UUVW	
r-   r.   c                     t        | t        j                        r"| j                  t        t
        t        t        fv S t        | t        j                  j                  t        j                  j                  f      S rI   )r=   r   r   fnr.  r   rx   set	functionsBaseUserFunctionVariablePolyfilledFunctionVariabler   s    r+   is_supported_argz$DefaultDictVariable.is_supported_arg  s]    c944566dE4555''@@''BB r-   r/   r"   r   r2   c                    |dk(  rt        |      dk7  rt        ||dt        |       d       |d   | v r| j                  ||d         S t        | j                  t
              r-| j                  j                  t        t        ||d   g       y | j                  j                  |g i       }t        | -  |d|d   |g|       |S t        | -  ||||      S )Nr   r   r   r   r   r1   r   )r   r   r   r   rH  r   r   r   r   r  rm   r  )rJ   r/   r   r2   r`   default_varrs   s         r+   r  zDefaultDictVariable.call_method  s     = 4yA~#Bh3t9+U8KLAw$))"d1g66 4//1AB,,22:,Xra	J"&"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   rH  r   r   r   r   s    `r+   r   zDefaultDictVariable.reconstruct  sJ    	
 	$$%**7321e<=r-   rI   r*  )rW   rX   rY   rx   r   r(   r   r   rK   r\   r   r   r   staticmethodrT  r.  r  r   r/  r0  s   @r+   rG  rG    s    
 6:	/O_45/ / "/2	/
 / 
/,D ,
C 
 
o 
$ 
 
?#? ? ?#	?
 S/)*? 
?8>r-   rG  c            
       0    e Zd ZdZej
                  Zdee   de	ddf fdZ
defdZeded   fd	       Zedefd
       Zde	fdZdefdZde	fdZddZddde	dee   deeef   def
dZdddedee   deeef   def
 fdZdddedefdZddZ xZS )SetVariablez.We model a sets as dictionary with None valuesr_   r`   r%   Nc                 v    t         j                  |t        j                               }t	        |   |fi | y rI   )rx   fromkeysr[  _default_valuerm   rK   )rJ   r_   r`   rs   s      r+   rK   zSetVariable.__init__  s0     e[%?%?%AB)&)r-   c                 l    | j                   syddj                  d | j                   D              z   dz   S )Nzset()r   ,c              3   P   K   | ]  }|j                   j                            y wrI   r   re   r   s     r+   rh   z)SetVariable.debug_repr.<locals>.<genexpr>       !H!$$//"3!Hr  r   r_   r   rP   s    r+   r   zSetVariable.debug_repr  s/    zz!HTZZ!HHH3NNr-   rF   c                 H    t        | j                  j                               S rI   )rP  r_   r   rP   s    r+   	set_itemszSetVariable.set_items  s    4::??$%%r-   c                  ,    t        j                  d       S rI   )r   r   r]   r-   r+   r^  zSetVariable._default_value  s      &&t,,r-   c                 p    | j                   D ch c]  }|j                  j                          c}S c c}w rI   )rf  rG   r   rJ   r   s     r+   r   zSetVariable.as_proxy  s$    )-8A888   !3c                     t         S rI   )rP  rP   s    r+   r5   zSetVariable.python_type  s    
r-   c                 p    | j                   D ch c]  }|j                  j                          c}S c c}w rI   )rf  rG   r   ri  s     r+   r   zSetVariable.as_python_constant  s'    37>>Ba'')BBBrj  c                     |j                  | j                  D cg c]  }|j                   c}       |j                  t	        dt        | j                                     y c c}w )N	BUILD_SETr   )foreachrf  rG   r   r   r   rJ   r   r;   s      r+   r   zSetVariable.reconstruct  sE    t~~6!670#dnnBUVW 7s   A$r/   r"   rO  r2   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)Nr1   )r   r_   r6   r   r(   r.  mapr   r   r2   r   build)
rJ   r/   rO  r2   r`   r;   r   rf   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   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|i |}|j                  j                  j                  |        | j                  j                          | j                  j                  |j                         t        j                   d       S |dk(  rS|st#        |      dk7  r&t%        ||dt#        |       dt#        |       d	       d
}|d   t&        j)                         g}n|dk(  rd|s|r&t%        ||dt#        |       dt#        |       d	       	 | j*                  j-                         j.                  }t:        | y  ||g|       |S |dk(  ro|st#        |      dk7  r&t%        ||dt#        |       dt#        |       d	       t        j>                  t@        jB                        jE                  || |d   gi       S |dk(  rS|rt%        ||dt#        |       d	       t        j>                  t@        jF                        jE                  || g|i       S |dk(  rS|rt%        ||dt#        |       d	       t        j>                  t@        jH                        jE                  || g|i       S |dk(  rS|rt%        ||dt#        |       d	       t        j>                  t@        jJ                        jE                  || g|i       S |dk(  rS|rt%        ||dt#        |       d	       t        j>                  t@        jL                        jE                  || g|i       S |dk(  rS|rt%        ||dt#        |       d	       t        j>                  t@        jN                        jE                  || g|i       S |dk(  rm|st#        |      dk7  r&t%        ||dt#        |       dt#        |       d	       t        j>                  t@        jP                        jE                  || g|i       S |dk(  rm|st#        |      dk7  r&t%        ||dt#        |       dt#        |       d	       t        j>                  t@        jR                        jE                  || g|i       S |dk(  rc| jU                         rS|rt%        ||dt#        |       d	       t        j>                  t@        jV                        jE                  || g|i       S |dk(  ra|st#        |      dk7  r&t%        ||dt#        |       dt#        |       d	       |d   | vrt3        t0        ||       t:        | y  |d||      S |dk(  re|st#        |      dk7  r&t%        ||dt#        |       dt#        |       d	       |d   | v rt:        | y  |d||      S t        j                   d       S |dv rt#        |      dk7  rt%        ||dt#        |       d       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 | 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 | 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_differencerK   r  r   z1 args and 0 kwargsr   r   r   r   rl   r   r1   ry  r{  z0 kwargsintersection_updaterz  r|  zExpect: 0 kwargs, Actual: difference_updater}  symmetric_difference_updater   removediscard)r   )issubset
issupersetr   r   )__and__r   __xor____sub__z unsupported operand type(s) for z: 'z' and 'r   )__iand__r  __ixor____isub__rV   F)8utilsrx  r5   rP  rv  getattrr   r   call_setr   r   r	  r_   r   r   r   r   r   r   r[  r^  rf  rl   rG   r   r   r.  rr  r2   rm   r  r#   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ger8   r   r*   r=   UserDefinedSetVariablepython_type_namer7   r   NotImplemented)rJ   r/   r   r2   r`   rx  py_typetemp_set_vtresulteoprU   mr   rrs   s                  r+   r  zSetVariable.call_method1  sG	    	0  $D&1  "c)&&(G((WWd-CT6RR:A)33C8AA"VtVvVKII""++D1JJJJk//0#**400U]Ta#)4ykCK=@	 !DG[779:DU]#)4ykCK=@	*...*<*<*>*A*A GD6(F;M\!Ta#)4ykCK=@	 11((mBtAw45 ^##BjS[M:QR11**mBr23 **#BjS[M:QR1111mBr23 W_#BjS[M:QR11)2E2EFTTTMDM2  \!# :3v;-wO 11((mBr23 ((#BjS[M:QR11//mBr23 ++Ta#)4ykCK=@	 1122mBr23 22Ta#)4ykCK=@	 1199mBr23 X$//"3#BjS[M:QR11)2F2FGUUTMDM2  XTa#)4ykCK=@	 Awd"(2DA7&r5$??YTa#)4ykCK=@	 Aw$w*2udFCC'..T:://4yA~#Bh3t9+U8KL %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::y  (btC0@0G0G,P'Q s   $d8 8	f	=ff	r.   c                     t        d      )NzIllegal to getitem on a set)RuntimeError)rJ   r/   r.   s      r+   r   zSetVariable.getitem_const  s     899r-   c                      y rI   r]   rP   s    r+   r   z)SetVariable.install_dict_keys_match_guard      r-   r*  r+  )rW   rX   rY   rZ   r   SET_CONTAINSr   r.  r   r   rK   r   r   propertyrP  rf  rY  r^  r   r(   r5   r   r   rx   rv  r  r   r   r/  r0  s   @r+   r[  r[    s^   8!..N*O$* * 
	*OC O &3CD & & -O - -9# 9T CC CX.#. . ?#	.
 S/)*. 
.&P;#P; P; ?#	P;
 S/)*P; 
P;d:):0?:	:
r-   r[  c            
            e Zd ZdefdZeded   fd       ZdefdZ	de
fdZddZdd	d
edee   deeef   def
 fdZd Zd Zd Z xZS )FrozensetVariabler%   c                 l    | j                   syddj                  d | j                   D              z   dz   S )Nzfrozenset()r   r`  c              3   P   K   | ]  }|j                   j                            y wrI   r   rb  s     r+   rh   z/FrozensetVariable.debug_repr.<locals>.<genexpr>  rc  r  r   rd  rP   s    r+   r   zFrozensetVariable.debug_repr  s/    zz !HTZZ!HHH3NNr-   rF   c                 6    | j                   j                         S rI   )r_   r   rP   s    r+   rf  zFrozensetVariable.set_items  s    zz  r-   c                     t         S rI   )	frozensetrP   s    r+   r5   zFrozensetVariable.python_type      r-   c                     t        | j                  D ch c]  }|j                  j                          c}      S c c}w rI   )r  rf  rG   r   ri  s     r+   r   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)ro  rf  rG   r   r   r   rp  s    ` r+   r   zFrozensetVariable.reconstruct  sR    t~~6!67	
 	21e<= 7s   A%r/   r"   r   r2   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  rl   r   r  r  r   Illegal call_method z on a frozensetrK   )rq   r|  r{  r}  )r  r   r   rm   r  r  r_   )rJ   r/   r   r2   r`   r  rs   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-   c                      y)zB
        Frozensets are immutable and hashable in Python.
        Tr]   rP   s    r+   rA   z$FrozensetVariable.is_python_hashableE  s     r-   c                 4    t        | j                               S rI   )rM   r   rP   s    r+   rO   z!FrozensetVariable.get_python_hashK  s    D++-..r-   c                 D    | j                         |j                         k(  S rI   )r   rT   s     r+   rS   z!FrozensetVariable.is_python_equalN  s    &&(E,D,D,FFFr-   r*  )rW   rX   rY   r   r   r  rP  rf  r(   r5   r   r   r   r.  r   rx   r  rA   rO   rS   r/  r0  s   @r+   r  r    s    OC O !3CD ! !T NC N	>;#; ; ?#	;
 S/)*; 
;8/Gr-   r  c            
            e Zd ZdefdZddZdddee   ddfdZe	de
fd	       Zdefd
Zde
fdZdddedee   deeef   def
 fdZ xZS )DictKeySetVariabler%   c                 l    | j                   syddj                  d | j                   D              z   dz   S )Nzdict_keys([])zdict_keys([r`  c              3   P   K   | ]  }|j                   j                            y wrI   r   rb  s     r+   rh   z0DictKeySetVariable.debug_repr.<locals>.<genexpr>X  s     (Oq):(Or  z])rd  rP   s    r+   r   zDictKeySetVariable.debug_reprS  s4    zz" (ODJJ(O OORVVr-   Nc                      y rI   r]   rP   s    r+   r   z0DictKeySetVariable.install_dict_keys_match_guard[  r  r-   r/   r"   r2   c                      y rI   r]   rE  s      r+   r   z.DictKeySetVariable.install_dict_contains_guard_  s     	r-   c                     | j                   S rI   )r_   rP   s    r+   rf  zDictKeySetVariable.set_itemse  s    zzr-   c                     t         S rI   r   rP   s    r+   r5   zDictKeySetVariable.python_typei  r  r-   c                     t         j                  | j                  D ch c]  }|j                  j	                          c}d       j                         S c c}w rI   )rx   r]  rf  rG   r   r   ri  s     r+   r   z%DictKeySetVariable.as_python_constantl  s>    }}04?1QTT$$&?

$&	?s   !Ar   r`   c                 N    |dv rt        d| d      t        | 	  ||||      S )Nr  r  z on a dict_keys)r  rm   r  rJ   r/   r   r2   r`   rs   s        r+   r  zDictKeySetVariable.call_methodq  s9     II!5dV?KLLw"2tT6::r-   r+  )rW   rX   rY   r   r   r   r.  r   r   r  r   rf  r(   r5   r   rx   r  r/  r0  s   @r+   r  r  R  s    C )15o1F	 3  T C 
	;#	; 	; ?#		;
 S/)*	; 
	; 	;r-   r  c            
            e Zd ZU dZdZee   ed<   dede	ddf fdZ
ede	fd       Zedee   fd	       Zd
ddee   fdZddZd
ddedefdZd
ddedee   deeef   def
 fdZ xZS )DictViewVariablezu
    Models _PyDictViewObject

    This is an "abstract" class. Subclasses will override kv and the items method
    Nkvr3  r`   r%   c                 v    t        |   di | | j                  dv sJ t        |t              sJ || _        y )N)r   r   r_   r]   )rm   rK   r  r=   rC   r3  r5  s      r+   rK   zDictViewVariable.__init__  s>    "6"ww5555'#4555r-   c                 |    | j                   J  t        | j                  j                  | j                                S rI   )r  r  r3  r_   rP   s    r+   
view_itemszDictViewVariable.view_items  s2    ww"""3wt||))477355r-   c                     t         rI   )NotImplementedErrorrP   s    r+   view_items_vtzDictViewVariable.view_items_vt  s
     "!r-   r/   r"   c                     | j                   S rI   )r  r:  s     r+   r  z$DictViewVariable.unpack_var_sequence  s    !!!r-   c                     | j                   J  || j                         |j                  | j                          |j                  d       y )Nr   )r  r3  load_methodr  r   s     r+   r   zDictViewVariable.reconstruct  s>    ww"""DGG$Ar-   r   c                     | j                   J || j                         j                  v rt        j                  d      S t        j                  d      S )NTF)r  r5   r)   r   r   )rJ   r/   r   s      r+   r%  z!DictViewVariable.call_obj_hasattr  sM     ww"""4##%...#**400&&u--r-   r2   c                     |dk(  r| j                   j                  ||||      S |dk(  rt        | j                  t	                     S t
        |   ||||      S )Nr   r  r  )r3  r  r   r  r   rm   r  s        r+   r  zDictViewVariable.call_method  sd     9<<++BdFCCZ'""2B2D  w"2tT6::r-   r*  )rW   rX   rY   rZ   r  r   r   __annotations__rC   r   rK   r  r  r.  r   r  r  r   r   r%  rx   r  r/  r0  s   @r+   r  r  }  s     B 1 S T  6C 6 6 "tO4 " "
"&= "$BW ".).14.	.;#; ; ?#	;
 S/)*; 
; ;r-   r  c            
            e Zd ZdZedee   fd       Zedee   fd       Z	de
fdZddded	ee   d
eeef   def
 fdZ xZS )r  r   r%   c                 ,    t        | j                        S rI   )rP  r  rP   s    r+   rf  zDictKeysVariable.set_items  s    4??##r-   c                 T    | j                   D cg c]  }|j                   c}S c c}w rI   )r  rG   )rJ   r;   s     r+   r  zDictKeysVariable.view_items_vt  s      #oo....s   %c                     t         S rI   r  rP   s    r+   r5   zDictKeysVariable.python_type  r  r-   r/   r"   r   r2   r`   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   )r3  r  r  rf  r[  r   r=   r  r   r   r  rm   )rJ   r/   r   r2   r`   r  r  rs   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-   )rW   rX   rY   r  r  rP  r   rf  r.  r  r(   r5   r   rx   r  r/  r0  s   @r+   r  r    s    	B$3/ $ $ /tO4 / /T ;#; ; ?#	;
 S/)*; 
; ;r-   r  c                   8    e Zd ZdZedee   fd       ZdefdZ	y)r  r   r%   c                 ,    t        | j                        S rI   )r.  r  rP   s    r+   r  z DictValuesVariable.view_items_vt  s    DOO$$r-   c                     t         S rI   )r   rP   s    r+   r5   zDictValuesVariable.python_type  s    r-   N)
rW   rX   rY   r  r  r.  r   r  r(   r5   r]   r-   r+   r  r    s1    	B%tO4 % %T r-   r  c            
       v     e Zd ZdZedee   fd       ZdefdZ	ddde
dee   d	ee
ef   def
 fd
Zd Z xZS )r  r_   r%   c                     | j                   D cg c]&  \  }}t        j                  |j                  |g      ( c}}S c c}}w rI   )r  r   r  rG   r   s      r+   r  zDictItemsVariable.view_items_vt  s5     @DOtq!	''q	2OOOs   +?c                     t         S rI   )r   rP   s    r+   r5   zDictItemsVariable.python_type  s    r-   r/   r"   r   r2   r`   c                 *   |dk(  r|t        |      dk7  rt        ||dt        |       d       t        |d   t              r,| j                  j                  |d|d   j                  gi       S t        j                  d      S t        |   ||||      S )NrV   r   r   r   r   F)	r   r   r=   r  r3  r  r   r   rm   r  s        r+   r  zDictItemsVariable.call_method  s     84yA~#Bh3t9+U8KL$q'#45||//HtAw>OQSTT#**511w"2tT6::r-   c                      y)zC
        Dictionary item views are not hashable in Python.
        Fr]   rP   s    r+   rA   z$DictItemsVariable.is_python_hashable  r)  r-   )rW   rX   rY   r  r  r.  r   r  r(   r5   r   rx   r  rA   r/  r0  s   @r+   r  r    s~    	BPtO4 P PT ;#; ; ?#	;
 S/)*; 
;"r-   r  rI   )@rZ   ry   r   r  r7  collections.abcr   typingr   r   r   r   r  r	   r
   r   bytecode_transformationr   r   ru  r   r   guardsr   r   rp   r   r   r  r   r   r   r   r   r   r   rv   r   r   constantr   listsr   torch._dynamo.codegenr    r3   r"   rQ  r#   r\   r,   r:   r@   rC   r2  rB  rG  r[  r  r  r  r  r  r  r]   r-   r+   <module>r     sI  (     $ 6 6 6 6 N 9 0 =   4 & ' /D/>C >D >
 CG	&'>?	."? "t "^ ^BJ2? J2Z 1 P>+ P>lW# WtBG BGJ(; (;V8; 8;v,;' ,;^	) 	 (  r-   