
    7hQ                        S r SSKrSSKrSSKrSSKrSSKrSSKJr  SSK	J
r
Jr  SSKJr  SSKJr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!J"r"J#r#  SSK$J%r%J&r&  SSK'J(r(  \(       a  SSK)J*r*  SSK+J,r,  S r-S r.S,S jr/S r0 " S S\&5      r1 " S S\&5      r2 " S S\15      r3 " S S\15      r4 " S S\15      r5 " S  S!\55      r6 " S" S#\55      r7 " S$ S%\&5      r8 " S& S'\85      r9 " S( S)\85      r: " S* S+\85      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)Hashable)OptionalTYPE_CHECKING)is_fake   )graph_break_hints	polyfills	variables)create_call_functioncreate_instruction)raise_observed_exceptionunimplemented_v2)GuardBuilderinstall_guard)is_from_local_source)cmp_name_to_op_mapping
dict_items	dict_keysdict_valuesistypespecialize_symnode   )ValueMutationNewVariableTrackerConstantVariable)	PyCodegenInstructionTranslatorc           	      >    [        [        U [        SU S35      /S9  g )Nzwrong number of arguments for z() callargs)r   	TypeErrorr   )txnames     W/var/www/fran/franai/venv/lib/python3.13/site-packages/torch/_dynamo/variables/dicts.pyraise_args_mismatchr'   <   s%    
!?vWMNO    c                 L    [        U 5      R                  R                  SS5      $ )N__instancecheck__F)type__dict__get)objs    r&   was_instancecheck_overrider/   D   s     9!!"5u==r(   c           
          Uc  SSK Jn  UR                  " 5       n[        [        U[        S[        U 5       35      /S9  g )Nr   r   zunhashable type: r!   )torch._dynamo.symbolic_convertr   
current_txr   r#   r   r+   )argr$   r   s      r&   raise_unhashabler4   H   s<    	zH"--/2-0A$s).MNOr(   c                    [        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                  5      (       a  [        U R                  5      (       dk  [         R"                  " U R                  S5      [$        R&                  L a9  [        U R                  [$        5      (       a  [        U R                  [(        5      $ [        U [        R*                  [        R,                  [        R.                  [        R0                  [        R2                  [        R4                  [        R6                  [        R8                  R:                  [        R<                  [        R>                  [        R@                  [        RB                  [        RD                  [        RF                  [        RH                  45      $ )NTexample_valuec              3   8   #    U  H  n[        U5      v   M     g 7fN)is_hashable).0es     r&   	<genexpr>is_hashable.<locals>.<genexpr>d   s     37a;q>>7s   __hash__)%
isinstancer
   LazyVariableTrackeris_realizedr9   TensorVariableas_proxynodemetar-   TupleVariableallitemsUserDefinedObjectVariabler/   valueinspectgetattr_staticintr>   py_HashableBuiltinVariableSymNodeVariabler   EnumVariableUserDefinedClassVariableUserFunctionVariableSkipFunctionVariablemiscNumpyVariableNNModuleVariableUnspecializedNNModuleVariableMethodWrapperVariableTorchInGraphFunctionVariableTypingVariableFunctoolsPartialVariableWeakRefVariable)xs    r&   r9   r9   R   s    	1i3344MMOO!Y--.. zz|  %%))/:$FF	Ay..	/	/31773331i99::*17733""177J73<<Gqww$$!'';//))))**&&22....,,**77//66((22))
 	
r(   c                   D  ^  \ 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 j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._HashableTracker   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                 \    [        U5      n[        U5      (       d  [        U5        Xl        g r8   )r   r9   r4   vt)selfrh   s     r&   __init__+ConstDictVariable._HashableTracker.__init__   s$    #B'B r?? $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                  [        R0                  5      (       a  U R                  R"                  $ U R                  R3                  5       nU$ )Nr6   c              3   H   >#    U  H  nT" U5      R                   v   M     g 7fr8   )underlying_value)r:   r;   r   s     r&   r<   FConstDictVariable._HashableTracker.underlying_value.<locals>.<genexpr>   s     N1(1+66s   ")r?   rh   r
   r@   rA   r9   original_valuerB   rC   rD   rE   rF   r`   _HashableTrackertuplerH   rW   rJ   rX   rS   get_functionr]   referent_vtrn   rI   as_python_constant)ri   r^   r   s     @r&   rn   3ConstDictVariable._HashableTracker.underlying_value   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DGGY%H%HII ww}}$GG..0Hr(   c                 ,    [        U R                  5      $ r8   )hashrn   ri   s    r&   r>   +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r8   )_eq_impl)r:   uvr   s      r&   r<   >ConstDictVariable._HashableTracker._eq_impl.<locals>.<genexpr>   s$      08AH%%a++	s    #)	r+   r?   rr   r`   rq   lenrG   zipr   )abr   s     @r&   r}   +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      $ r8   )r`   rq   r?   r   
is_literalr+   r}   rn   )ri   r   r   s      r&   __eq__)ConstDictVariable._HashableTracker.__eq__   s    (99He..2B2M2Me2T2T UT %**(()>)>@V@VWW $$T%:%:EBBr(   )rh   rf   N)__name__
__module____qualname____firstlineno____doc__rj   propertyrn   r>   staticmethodr}   boolr   __static_attributes__ r(   r&   rq   rd      sP    		 
	 
	>	/ 
	 
			C D 		C 		Cr(   rq   rH   rf   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r8   )r?   r   )r:   r^   r   r   s      r&   r<   -ConstDictVariable.__init__.<locals>.<genexpr>   s<      
 & q?H56 /1o./%s   8;c                 :   > [        U T5      (       a  U $ T" U 5      $ r8   )r?   )keyr   s    r&   make_hashable1ConstDictVariable.__init__.<locals>.make_hashable   s    $S(333F#Fr(   r   )popsuperrj   r`   rq   rG   rH   r   sourcer   copyr   rb   )	ri   rH   rb   kwargsr   r^   r   r   	__class__s	          @r&   rj   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 r8   )rH   rh   rC   ri   kr   s      r&   rC   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rh   
debug_repr)r:   r   r   s      r&   r<   /ConstDictVariable.debug_repr.<locals>.<genexpr>   s4      EWTQ144??$%R'78EWs   <>})joinrH   ry   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 r8   )rH   rh   ru   r   s      r&   ru   $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 r8   )install_dict_keys_match_guardrH   rh   ru   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                   $ r8   )rb   ry   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      (       + $ r8   )r?   r   r`   rq   r9   rH   r
   DeletedVariable)ri   rh   r   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 r8   )r   rH   valuesr?   r
   r   ri   r^   s     r&   r   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r8   )is_new_itemr   r-   rh   )r:   r   rJ   ri   s      r&   r<   2ConstDictVariable.has_new_items.<locals>.<genexpr>&  s?      
0
 T0044SVV<eDD0s   AA)r   anyrH   ry   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  $ r8   )rA   idrealize)ri   rJ   r   s      r&   r   ConstDictVariable.is_new_item+  sU    U&&((U->->-@-@emmo&"U]]_*===%yBuI%%r(   c                 Z   SnU R                   R                  5        Hr  u  p4U R                  R                  UR                  5      nU R	                  XT5      (       d  U R
                  (       d  MS  U" UR                  5        U" U5        US-  nMt     UR                  [        SUS95        g )Nr   r   	BUILD_MAPr3   )rH   r   r-   rh   r   r   append_outputr   )ri   codegennum_argsr   rJ   items         r&   reconstruct_kvs_into_new_dict/ConstDictVariable.reconstruct_kvs_into_new_dict1  s    ****,JC&&**3662D,,0K0K0KA - 	0(KLr(   c                    ^ U R                   [        R                  L aB  TR                  U4S j5        U R	                  T5        TR                  [        SS5      5        g U R	                  T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r   s   r&   <lambda>/ConstDictVariable.reconstruct.<locals>.<lambda>A  s1    --99+F00?r(   r   F)rb   r   r   add_push_nullr   r   r   ri   r   s    `r&   reconstructConstDictVariable.reconstruct=  s\    ==K333!! ..w7!!"6q%"@A..w7r(   r$   r   r3   c                     [         R                  U5      nX0R                  ;  a  [        [        U5        U R                  U   $ r8   )r`   rq   rH   r   KeyError)ri   r$   r3   r   s       r&   'getitem_const_raise_exception_if_absent9ConstDictVariable.getitem_const_raise_exception_if_absentM  s6      005jj $Xr2zz#r(   c                     [         R                  U5      nX0R                  ;  a:  SUR                   S3n[	        SSUR                   3US/[
        R                  QS9  U R                  U   $ )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)r`   rq   rH   rJ   r   r   
USER_ERROR)ri   r$   r3   r   msgs        r&   getitem_constConstDictVariable.getitem_constU  sq    005jj #CII;.GHC/syyk*T&11	 zz#r(   c                 j    [         R                  U5      nX R                  ;  a  g U R                  U   $ r8   )r`   rq   rH   )ri   r3   r   s      r&   maybe_getitem_const%ConstDictVariable.maybe_getitem_constd  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 r8   )r`   rq   rr   rH   keysindexr   r?   r
   r@   r   )ri   r3   r   r   original_key_vts        r&   realize_key_vt ConstDictVariable.realize_key_vtj  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 r8   )r   r   
make_guardr   DICT_KEYS_MATCHry   s    r&   r   /ConstDictVariable.install_dict_keys_match_guards  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_CONTAINSrJ   r   r   )ri   r$   r"   r   containss        r&   install_dict_contains_guard-ConstDictVariable.install_dict_contains_guardw  s     	'{{99!!--d337d?7>>!ja:J&K&K%%$22 GMM#+| !W^^##DG,224	 r(   c           	      8  > SSK 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  ak  U(       d  U(       a   eU R#                  5         U R$                  (       a/  UR                  R&                  R)                  U R$                  5        [+        U 5      $ US:X  ak  U R#                  5         U R$                  (       a/  UR                  R&                  R)                  U R$                  5        U(       d  U(       a   e[-        U 5      $ US:X  ak  U R#                  5         U R$                  (       a/  UR                  R&                  R)                  U R$                  5        U(       d  U(       a   e[/        U 5      $ US	:X  aQ  U R#                  5         U(       d  U(       a   eU R1                  U R                  R3                  5       [5        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 R7                  5       (       a  U(       d  [9        US   5        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 R7                  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 R?                  X5        [        U5      S:X  a  US:X  a  [A        [B        U5        U" S 5      $ US   $ US:X  al  U(       ae  U R7                  5       (       aP  SU l        UR                  R                  R                  U 5        U R                  RE                  U" US   5      5      $ US:X  aX  SU l        UR                  R                  R                  U 5        U R                  RG                  5         UR                  " S 5      $ US:X  Gal  U R7                  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  [I        US   [        5      (       a  US   R#                  5         US   nOURK                  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      $ [L        TU ]  XX45      $ US;   a  US   U ;   a  U RQ                  XS   5      $ US:X  aO  [        U5      S:X  a@  U(       d  [9        US   5        U R?                  X5        US   U ;   nUR                  " U5      $ US:X  a  U(       a  U R7                  5       (       a  U R#                  5         U(       a   e[        U5      S::  d   eU RS                  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                  RE                  U5        UU R                  U'   UR                  " S 5      $ US:X  a  [        U5      S:X  d   e[I        US   [        5      (       d*  [U        SUS   RW                  5       RX                   S35      eU R#                  5         U R1                  U R                  R3                  5       [5        5       S S
9nUS   R#                  5         UR                  R                  US   R                  5        U$ [L        TU ]  XX45      $ s  snnf )Nr   )rO   r   r   rj   __getitem__rH   r   r   r   )rH   mutation_typer   __len____setitem__r   __delitem__T)r   r-   )r   r   r   clearupdate)r-   __getattr__r   
setdefaultmove_to_end__or__z/unsupported operand type(s) for |: 'dict' and '')-r  rO   r   r`   rq   r9   r
   dict	call_dictr  r  mutationrH   r  creater   r   r   r   guard_on_key_orderaddDictItemsVariableDictKeysVariableDictValuesVariablecloner   r   
is_mutabler4   r   r  r  r   r   r   r  r?   call_custom_dictr   call_methodr   r   r#   r   r   )ri   r$   r%   r"   r   rO   r   r   arg_hashabletemp_dict_vthas_arg
has_kwargsdict_vtr   r   r  rJ   r^   r   valnew_dict_vtr   s                        r&   r)  ConstDictVariable.call_method  s    	8$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=$T**V^..0{{		,,00=''#D))X..0{{		,,00=''%d++V^..0''::jjoo'7G7IRV    Y''..0#**3tzz?;;]"t'8'8 a)..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 a),,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Xt9>!>d1g'899Ed1gFYFYF[FdFdEeefg  ..0**jjoo'7G7IRV % K G113$$T!W]]37&r>>ys   %fc                     U R                  5         U R                  R                  5        Vs/ s H  o"R                  PM     sn$ s  snf r8   )r   rH   r   rh   )ri   r$   r^   s      r&   unpack_var_sequence%ConstDictVariable.unpack_var_sequenceK  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n[        SSU R                    3US/[        R                  QS9  g )	NTFzhasattr on z is not supportedzunsupported hasattr operationzClass z+Consider using a regular dictionary insteadr   )rb   r  r,   r   r   r   r   SUPPORTABLE)ri   r$   r%   r   s       r&   call_obj_hasattr"ConstDictVariable.call_obj_hasattrO  s     ==D }}---'..t44#**511DMM?*;<3T]]O,="..		
r(   c                 D   > U R                  5         [        TU ]  " S0 UD6$ Nr   )r   r   r&  )ri   r   r   s     r&   r&  ConstDictVariable.cloneb  s!    **,w}&v&&r(   )rH   r   r   rb   r   r   r"   zlist[VariableTracker]r   zdict[str, VariableTracker]rf   r   )!r   r   r   r   r   _nonvar_fieldsrq   r  rj   rC   r   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r)  r3  r7  r&  r   __classcell__r   s   @r&   r`   r`      s    		'	'N
KC KC`  !O_45 !
 
 !  !DN

M
$ 


&
M8 )0? 7 o  &/ &I%5Nk? &	k?
 -k? 
k?Z1
&' 'r(   r`   c                   p   ^  \ rS rSrS\SS4U 4S jjrS rS rSS jrS	\	S
   S\
\S
4   SS
4S jrSrU =r$ )MappingProxyVariableig  dv_dictrf   Nc                 `   > [         TU ]  " S0 UD6  [        U[        5      (       d   eXl        g r:  )r   rj   r?   r`   rC  ri   rC  r   r   s      r&   rj   MappingProxyVariable.__init__i  s,    "6"'#45555r(   c                 "    [         R                  $ r8   )typesMappingProxyTypery   s    r&   r    MappingProxyVariable.python_typen  s    %%%r(   c                 8    U R                   R                  U5      $ r8   )rC  r3  ri   r$   s     r&   r3  (MappingProxyVariable.unpack_var_sequenceq  s    ||//33r(   c                    ^ U R                   (       a:  SU R                    S3n[        SSU R                    3US/[        R                  QS9  TR	                  U4S j5        T" U R
                  5        TR                  [        SS	5      5        g )
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   > T R                  T R                  [        5      T R                  S5      /5      $ )NrI  )r   r   rH  r   r   s   r&   r   2MappingProxyVariable.reconstruct.<locals>.<lambda>  s2    G))55e<,,-?@r(   r   F)r   r   r   r6  r   rC  r   r   )ri   r   r   s    ` r&   r    MappingProxyVariable.reconstructt  s    ;;<T[[M JL L  ?"4;;-0Y&22	 		
 	21e<=r(   r"   r   r   c                     U R                   (       aG  UR                  R                  R                  5       (       a  Sn[	        SSU R                    S3USS/S9  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.z-mapping proxy affected by dictionary mutationrO  z, Dict mutation detectedzNAvoid modifying dictionaries that might be referenced by mapping proxy objectszROr avoid using the mapping proxy objects after modifying its underlying dictionaryr   )r   r  r  has_existing_dict_mutationr   rC  r)  )ri   r$   r%   r"   r   r   s         r&   r)   MappingProxyVariable.call_method  sr     ;;29911LLNN7  G"4;;-/GHdh	 ||''$??r(   rC  r<  )r   r   r   r   r`   rj   r   r3  r   listr  strr)  r   r?  r@  s   @r&   rB  rB  g  sd     1  
&4>6@ $%	@
 S++,@ 
@ @r(   rB  c                        \ rS rSrS rS rSrg)NNModuleHooksDictVariablei  c                     g r8   r   ry   s    r&   r   7NNModuleHooksDictVariable.install_dict_keys_match_guard      r(   c                     g r8   r   ri   r$   r"   s      r&   r  5NNModuleHooksDictVariable.install_dict_contains_guard  r]  r(   r   N)r   r   r   r   r   r  r   r   r(   r&   rZ  rZ    s    r(   rZ  c                   z   ^  \ 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
SrU =r$ )DefaultDictVariablei  c                 ^   > [         TU ]  " X40 UD6  U[        R                  L d   eX0l        g r8   )r   rj   r   defaultdictdefault_factory)ri   rH   rb   re  r   r   s        r&   rj   DefaultDictVariable.__init__  s/    3F3;22222.r(   c                    > U R                   [        [        [        4;  a  U R                  (       d  g[
        TU ]  5       $ )NF)re  rW  rr   r  rH   r   is_python_constantri   r   s    r&   rh  &DefaultDictVariable.is_python_constant  s1     eT'::4::w)++r(   c                 ^   > SU R                   R                  5        S[        TU ]  5        S3$ )Nzdefaultdict(r   ))re  r   r   ri  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      $ r8   )
r?   r
   rO   fnrW  rr   r  set	functionsBaseUserFunctionVariabler   s    r&   is_supported_arg$DefaultDictVariable.is_supported_arg  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  )r   r   re  r   call_functionr   r)  )ri   r$   r%   r"   r   default_varr   s         r&   r)  DefaultDictVariable.call_method  s     = t9>!>Aw$))"1g66''/"d1gY00"&"6"6"D"DRR"PKG'MDG[+A6 '&7&r>>r(   c                    ^ TR                  U4S j5        T" U R                  5        U R                  T5        TR                  [	        SS5      5        g )Nc                  n   > T R                  T R                  [        5      T R                  S5      /5      $ )Nrd  r   r   s   r&   r   1DefaultDictVariable.reconstruct.<locals>.<lambda>  s1    G))55kB,,];r(   r   F)r   re  r   r   r   r   s    `r&   r   DefaultDictVariable.reconstruct  sJ    	
 	$$%**7321e<=r(   )re  r8   r   r=  )r   r   r   r   rj   rh  r   r   rs  r)  r   r   r?  r@  s   @r&   rb  rb    sZ    / /
,

 Q Q? &	?
 -? 
?0> >r(   rb  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S j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 dictionary with None valuesrH   rf   Nc                 x   > [         R                  U[        R                  5       5      n[        TU ]  " U40 UD6  g r8   )r  fromkeysr~  _default_valuer   rj   ri   rH   r   r   s      r&   rj   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r8   r   r:   r   s     r&   r<   )SetVariable.debug_repr.<locals>.<genexpr>       !O=N$$//"3"3=N   &(r   rH   r   r   ry   s    r&   r   SetVariable.debug_repr  s7    zz!OTZZ__=N!OOORUUUr(   c                 H    [        U R                  R                  5       5      $ r8   )rp  rH   r   ry   s    r&   	set_itemsSetVariable.set_items
  s    4::??$%%r(   c                  .    [         R                  " S 5      $ r8   )r   r   r   r(   r&   r  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 r8   )r  rh   rC   ri   r   s     r&   rC   SetVariable.as_proxy  s&    )-8A888   #5c                     [         $ r8   )rp  ry   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 r8   r  rh   ru   r  s     r&   ru   SetVariable.as_python_constant  )    37>>B>a'')>BBBr  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   )foreachr  rh   r   r   r   ri   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  a  [         R                  " [        5      R                  " U/UQUQ76 nUR                  R
                  R                  U 5        U R                  R                  5         U R                  R                  UR                  5        [        R                  " S 5      $ US:X  a@  U(       a   e[        U5      S:w  a  [        X5        SnUS   [        R                  5       4nGOjUS:X  aK  U(       a   eU(       a   e U R                   R#                  5       R$                  n[0        T
U ]e  XW4U5        U$ US:X  aS  U(       a   e[        U5      S:X  d   e[         R4                  " [6        R8                  5      R;                  XUS   /0 5      $ US	:X  a@  U(       a   e[         R4                  " [6        R<                  5      R;                  X/UQ0 5      $ US
:X  a@  U(       a   e[         R4                  " [6        R>                  5      R;                  X/UQ0 5      $ US:X  a@  U(       a   e[         R4                  " [6        R@                  5      R;                  X/UQ0 5      $ US:X  a@  U(       a   e[         R4                  " [6        RB                  5      R;                  X/UQ0 5      $ US:X  a@  U(       a   e[         R4                  " [6        RD                  5      R;                  X/UQ0 5      $ US:X  aZ  [        U5      S:w  a  [        X5        U(       a   e[         R4                  " [6        RF                  5      R;                  X/UQ0 5      $ US:X  aZ  [        U5      S:w  a  [        X5        U(       a   e[         R4                  " [6        RH                  5      R;                  X/UQ0 5      $ US:X  aU  U RK                  5       (       a@  U(       a   e[         R4                  " [6        RL                  5      R;                  X/UQ0 5      $ US:X  aB  U(       a   e[        U5      S:X  d   eUS   U ;  a  [)        [&        XS9  [0        T
U ]e  USX45      $ US:X  aH  U(       a   e[        U5      S:X  d   eUS   U ;   a  [0        T
U ]e  USX45      $ [        R                  " S S9$ US;   a  [N        RP                  [N        RR                  S.nUS   RU                  5       n	[W        U	[        5      (       d+  [         R                  " [        5      R;                  X/0 5      n	[         R                  " URY                  U5      5      R;                  XU	/0 5      $ [0        T
U ]e  XX45      $ ! [&         aE  n[)        [&        U[+        [-        [        R                  UR.                  5      5      S9   S nAGNS nAff = f)Nrj   r"  r   r  r   r   r!   
isdisjointintersectionintersection_updateunion
differencedifference_updatesymmetric_differencesymmetric_difference_updater  removediscard)rJ   )issubset
issuperset)-r
   rO   rp  call_setr  r  r  rH   r  r  r   r   r   r'   r~  r  r  r   rh   r   r   rW  mapr"   r   r)  rS   r	   set_isdisjointrv  set_intersectionset_intersection_update	set_unionset_differenceset_difference_updateset_symmetric_differenceset_symmetric_difference_updater'  
set_updateoperatorleger   r   r-   )ri   r$   r%   r"   r   temp_set_vtresultr;   opr   r   s             r&   r)  SetVariable.call_method   s    :#33C8AA"UtUfUKII""++D1JJJJk//0#**400U]:4yA~#B- DG[779:DU]:O8++-00
 G6)V<M\!:t9>!>11((mBtAw45 ^#:11**mBr23 **:1111mBr23 W_:11)2E2EFTTMDM2  \!:11((mBr23 ((:11//mBr23 ++4yA~#B-:1122mBr23 224yA~#B-:1199mBr23 X$//"3"3:11)2F2FGUUMDM2  X:t9>!>Awd"(2A7&r5$??Y:t9>!>Aw$w*2udCC'..T:://$KK&kkB GOO%E%--!11#6DDRRTU,,RVVD\:HH5M2  w"2T::a  (btC0@0G0G,P'Q s   $U/ /
V>9:V99V>r$   r   r3   c                     [        S5      e)NzIllegal to getitem on a set)RuntimeError)ri   r$   r3   s      r&   r   SetVariable.getitem_const  s    899r(   c                     g r8   r   ry   s    r&   r   )SetVariable.install_dict_keys_match_guard      r(   c                     g r8   r   r_  s      r&   r  'SetVariable.install_dict_contains_guard  r  r(   r   r<  )r   r   r   r   r   rW  r   rj   r   r   r  r   r  rC   r   ru   r   r  rX  r)  r   r   r  r   r?  r@  s   @r&   r~  r~    s    8*O$* 
	*V & & - -9CXj; ?#	j;
 S/)*j; 
j;X: 7 :o : 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
 jrS\\   S\\\4   SS4U 4S jjrSrU =r$ )FrozensetVariablei  rH   rf   Nc                 (   > [         TU ]  " U40 UD6  g r8   r   rj   r  s      r&   rj   FrozensetVariable.__init__      
 	)&)r(   c                     U R                   (       d  gSSR                  S U R                   R                  5        5       5      -   S-   $ )Nzfrozenset()r   r  c              3   T   #    U  H  oR                   R                  5       v   M      g 7fr8   r   r  s     r&   r<   /FrozensetVariable.debug_repr.<locals>.<genexpr>  r  r  r   r  ry   s    r&   r   FrozensetVariable.debug_repr  s7    zz !OTZZ__=N!OOORUUUr(   c                 6    U R                   R                  5       $ r8   )rH   r   ry   s    r&   r  FrozensetVariable.set_items  s    zz  r(   c                     [         $ r8   )	frozensetry   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 r8   r  r  s     r&   ru   $FrozensetVariable.as_python_constant  r  r  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)r  r  rh   r   r   r   r  s    ` r&   r   FrozensetVariable.reconstruct  sT    t~~6~!~67	
 	21e<= 7s   A(r"   r   r   c                    > US;   a  [        SU S35      eUS:X  a  [        R                  " S 5      $ [        TU ]  XX45      $ )Nr"  r   r  r  r  r  Illegal call_method z on a frozensetrj   )r  r   r   r   r)  ri   r$   r%   r"   r   r   s        r&   r)  FrozensetVariable.call_method  sP     II!5dV?KLLZ $**400w"2T::r(   r   r<  )r   r   r   r   rW  r   rj   r   r   r  r   ru   r   r  rX  r)  r   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  rH   rf   Nc                 (   > [         TU ]  " U40 UD6  g r8   r  r  s      r&   rj   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([r  c              3   T   #    U  H  oR                   R                  5       v   M      g 7fr8   r   r  s     r&   r<   0DictKeySetVariable.debug_repr.<locals>.<genexpr>  s     H6G44??,,6Gr  z])r  ry   s    r&   r   DictKeySetVariable.debug_repr  sA    zz" ((Hdjjoo6GHHIr(   c                     U R                   $ r8   )rH   ry   s    r&   r  DictKeySetVariable.set_items  s    zzr(   c                     [         $ r8   r   ry   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 r8   )r  r  r  rh   ru   r   r  s     r&   ru   %DictKeySetVariable.as_python_constant  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_keys)r  r   r)  r  s        r&   r)  DictKeySetVariable.call_method  s5     II!5dV?KLLw"2T::r(   r   )r   r   r   r   rW  r   rj   r   r   r  r   ru   r  rX  r)  r   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S jrS\S   S\\S4   SS4U 4S jjrSrU =r$ )DictViewVariablei  zi
Models _PyDictViewObject

This is an "abstract" class. Subclasses will override kv and the items method
NkvrC  rf   c                    > [         TU ]  " S0 UD6  U R                  S;   d   e[        U[        5      (       d   eXl        g )N)r   r   rH   r   )r   rj   r  r?   r`   rC  rE  s      r&   rj   DictViewVariable.__init__  s?    "6"ww5555'#45555r(   c                 `    [        U R                  R                  U R                  5      " 5       $ r8   )getattrrC  rH   r  ry   s    r&   
view_itemsDictViewVariable.view_items	  s     t||))477355r(   c                     [         er8   )NotImplementedErrorry   s    r&   view_items_vtDictViewVariable.view_items_vt  s
     "!r(   c                     U R                   $ r8   )r   rL  s     r&   r3  $DictViewVariable.unpack_var_sequence  s    !!!r(   c                     U" U R                   5        UR                  U R                  5        UR                  S5        g )Nr   )rC  load_methodr  r)  r   s     r&   r   DictViewVariable.reconstruct  s.    DGG$Ar(   r"   r   r   c                 h   > US:X  a  U R                   R                  XX45      $ [        TU ]  XX45      $ )Nr  )rC  r)  r   r  s        r&   r)  DictViewVariable.call_method  s6     9<<++BdCCw"2T::r(   rV  r<  )r   r   r   r   r   r  r   rX  __annotations__r`   rj   r   r  r   r3  r   rW  r  r)  r   r?  r@  s   @r&   r  r    s     B 1   6 6 " "
"
	; $%		;
 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      $ r8   )rp  r  ry   s    r&   r  DictKeysVariable.set_items*  s    4??##r(   c                 X    U R                    Vs/ s H  oR                  PM     sn$ s  snf r8   )r  rh   r   s     r&   r   DictKeysVariable.view_items_vt.  s"     #oo.oo...s   'c                     [         $ r8   r  ry   s    r&   r   DictKeysVariable.python_type3  r  r(   r"   r   r   rf   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   )rC  r)  r   r?   r~  r$  r   r   NotImplementedr  r   r  s        r&   r)  DictKeysVariable.call_method6  s     >!<<++BdCC))d1g5E'FGG'..~>>#**&t,T^^T!W=N=NO  w"2T::r(   r   )r   r   r   r   r  r   r  r   r   rW  r  rX  r)  r   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%  iH  r   c                 ,    [        U R                  5      $ r8   )rW  r  ry   s    r&   r    DictValuesVariable.view_items_vtL  s    DOO$$r(   c                     [         $ r8   )r   ry   s    r&   r   DictValuesVariable.python_typeP  s    r(   r   N	r   r   r   r   r  r   r   r   r   r   r(   r&   r%  r%  H  s    	B% %r(   r%  c                   .    \ rS rSrSr\S 5       rS rSrg)r#  iT  rH   c                     U R                    VVs/ s H'  u  p[        R                  " UR                  U/5      PM)     snn$ s  snnf r8   )r  r
   rF   rh   r   s      r&   r   DictItemsVariable.view_items_vtW  s7     @DOtq	''q	2OOOs   .Ac                     [         $ r8   )r   ry   s    r&   r   DictItemsVariable.python_type\  s    r(   r   Nr  r   r(   r&   r#  r#  T  s     	BP Pr(   r#  r8   )<r   r   r
  rK   r  rH  collections.abcr   rN   typingr   r   torch._subclasses.fake_tensorr   r  r   r	   r
   bytecode_transformationr   r   excr   r   guardsr   r   r   r   utilsr   r   r   r   r   r   baser   r   constantr   torch._dynamo.codegenr   r1   r   r'   r/   r4   r9   r`   rB  rZ  rb  r~  r  r  r  r$  r%  r#  r   r(   r&   <module>r)     s  (      3 * 1 6 6 N < 0 )  4 & /D>.
ba' a'HC@? C@L 1 =>+ =>F\# \~5; 5;p'; ';T*; *;Z;' ;B	) 		( 	r(   