
    ^j                        d Z ddlZddlZddlZddlmZmZ ddlmZm	Z	m
Z
 ddlmZ ddlmZmZmZ ddlmZmZ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m Z m!Z! ddl"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ ddl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6m7Z7m8Z8 ddl9m:Z: ddl;m<Z< e	rddl=m>Z> ddl?m@Z@ ddlAmBZB de2deCfdZDde2deCfdZE G d de2      ZF G d de2      ZG G d deF      ZH G d  d!e2      ZI G d" d#eI      ZJ G d$ d%eI      ZK G d& d'eI      ZLe6eMz  ZN G d( d)ej                  j                  eNe2f         ZQ G d* d+eF      ZRy),aI  
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)

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. Set-related classes live
in sets.py.
    N)CallableIterator)AnyTYPE_CHECKINGUnion)
MappingKey   )graph_break_hints	polyfills	variables)create_call_functioncreate_call_methodcreate_dup_topcreate_instruction)raise_observed_exceptionraise_type_errorunimplemented)GuardBuilderinstall_guard)
AttrSourceDictGetItemSourceis_constant_sourceis_from_local_source)	_item_debug_reprcmp_name_to_op_mapping
dict_items	dict_keysdict_valuesistyperaise_args_mismatchtracked_reprunpack_iterable   )AttributeMutationExistingAttributeMutationNewAttrMutationKindNO_SUCH_SUBOBJValueMutationNewVariableTracker)ConstantVariable)HashableTrackeris_hashableraise_unhashable)
vt_getitem)SetVariable)	PyCodegen)InstructionTranslatorBase)UserFunctionVariableobjreturnc                 >    t        | j                         t              S N)
issubclasspython_typedict)r3   s    h/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_dynamo/variables/dicts.pypydict_checkr;   Q   s    coo'..    c                     	 | j                         }t        |t        t        t
        t        f      S # t        $ r Y yw xY w)z3PyAnySet_Check(other) || PyDictViewSet_Check(other)F)r8   NotImplementedErrorr7   set	frozensetr   r   )r3   ts     r:   _is_set_or_dictviewrB   V   s?    OO a#y)Z@AA  s   2 	>>c                       e Zd ZeZej                  Zej                  Z	dhe
j                  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dde
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dddde
dee
   deee
f   deedf   de
fdZdefdZdefdZde
dz  de
defdZ d?d Z!d?d!Z"defd"Z#ddd#e
de
fd$Z$ddd#e
de
fd%Z%d#e
de
dz  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
fd,Z*ddd-e
de
fd.Z+ddde
fd/Z,ddd0ed)ee
   deee
f   de
f
 fd1Z-dddee
   fd2Z.	 dAdede
d3ede
fd4Z/dede
de
fd5Z0ddd+e
de
dz  de
f fd6Z1ddde
fd7Z2ddd0ede3fd8Z4dede
f fd9Z5defd:Z6dddeeef   fd;Z7ddde
d<ede
fd=Z8ddd0ef fd>Z9 xZ:S )BConstDictVariableuser_clsitemskwargsr4   Nc           	      0   d|v r|j                  d       d|v r|j                  d       t        	|   d
i | t        t	        fd|j                         D              st        d      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r6   )
isinstancer)   ).0xvHashables      r:   	<genexpr>z-ConstDictVariable.__init__.<locals>.<genexpr>}   s?      
 1 q?H56 /1o./
s   14zZAll keys must be VariableTracker or HashableTracker and all values must be VariableTrackerkeyr+   r4   c                 0    t        |       r| S  |       S r6   )rL   )rR   rP   s    r:   make_hashablez1ConstDictVariable.__init__.<locals>.make_hashable   s     %S(33F#Fr<   T )popsuper__init__r+   allrF   AssertionErrorr   r)   _get_dict_cls_from_user_clssourcer   rJ   copyrI   rE   )
selfrF   rE   rG   rT   dict_clsrN   rO   rP   	__class__s
           @r:   rX   zConstDictVariable.__init__k   s    v%JJ'(#v-JJ/0"6""  
 
 

 !9 
	G(99:	G	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rt        d|       |t        j                  u rt         }|S )Nc              3   ,   K   | ]  }|v s|  y wr6   rU   )rM   baseaccepted_dict_typess     r:   rQ   z@ConstDictVariable._get_dict_cls_from_user_cls.<locals>.<genexpr>   s      T=P5Ps   	zUnexpected dict_cls: )r9   collectionsOrderedDictdefaultdictnext__mro__rZ   )r^   rE   r_   rd   s      @r:   r[   z-ConstDictVariable._get_dict_cls_from_user_cls   s    #[%<%<k>U>UV **H  !)!1!1 H .. #8
!CDD {...Hr<   c                     | j                   j                         D ci c].  \  }}|j                  j                         |j                         0 c}}S c c}}w r6   )rF   vtas_proxyr^   krO   s      r:   rl   zConstDictVariable.as_proxy   s<    :>**:J:J:LM$!Q-MMM   3Ac                     g }| j                   j                         D ];  \  }}t        |j                        }t        |      }|j                  | d|        = ddj	                  |      z   dz   S N: {, })rF   r   rk   appendjoinr^   rF   rn   rO   key_strval_strs         r:   
debug_reprzConstDictVariable.debug_repr   sq    JJ$$& 	2DAq&qtt,G&q)GLLG9Bwi01	2 TYYu%%++r<   c                     | j                   j                         D ci c].  \  }}|j                  j                         |j                         0 c}}S c c}}w r6   )rF   rk   as_python_constantrm   s      r:   r}   z$ConstDictVariable.as_python_constant   sP     

((*
1 DD##%q';';'==
 	
 
ro   txr1   c           
         | j                   j                         D cg c]*  \  }}t        ||j                         dt        ||       , }}}t        j                  |ddj                  |      z   dz         S c c}}w rq   )rF   r!   rk   r)   buildrw   )r^   r~   rR   valuerF   s        r:   	repr_implzConstDictVariable.repr_impl   s~     #jj..0
U B'(<E+B*CD
 
 $$Rtyy/?)?#)EFF	
s   /A;c                     | j                          | j                  j                         D ci c]   \  }}|j                  j                         |" c}}S c c}}w r6   )install_dict_keys_match_guardrF   rk   r}   rm   s      r:   keys_as_python_constantz)ConstDictVariable.keys_as_python_constant   sE    **,9=9I9I9KLA'')1,LLLs   %Ac                     | j                   S r6   rE   r^   s    r:   r8   zConstDictVariable.python_type   s    }}r<   rk   c                     t        |t              st        dt        |             t	        |      syt        |      }|| j                  v xr( t        | j                  |   t        j                         S )NzExpected VariableTracker, got F)	rL   r)   rZ   typer,   r+   rF   r   DeletedVariable)r^   rk   rR   s      r:   __contains__zConstDictVariable.__contains__   sn    "o. #A$r(!LMM 2b!djj  
JJsOY66*
 &
 	
r<   tree_map_fnr2   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)rF   rI   rJ   r\   mutation_type)realizerL   rD   lenrF   _tree_map_fallbackrv   r   KeyErrorcall_tree_maprk   cloner(   )r^   r~   r   r   r   r   other_dicts	candidatenew_items_hashedkey_trackerr   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keypath.c                    g }|D ]v  }|j                         }t        |t              r+t        |j                        t        | j                        k7  r| j                  ||||||      c S |j                  |       x  t        | j                               }	| j                  j	                         D ]o  \  }
}g }|D ]!  }	 |j                  |j                  |
          # |
j                  j                         }|t        |      fz   }|j                  ||||||      |	|
<   q |	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 r   )r   rL   rD   r   rF   _tree_map_with_path_fallbackrv   r   r   rk   r}   r   call_tree_map_with_pathr   r(   )r^   r~   r   r   r   r   r   r   r   r   r   r   r   	key_constchild_keypathr   s                   r:   call_tree_map_with_path_branchz0ConstDictVariable.call_tree_map_with_path_branch  s    02 	*I!))+Ii):;s@TZZ@! 88VT?G  y)	* ,4

+-"&**"2"2"4 	K46N( 	")))//+*FG $99;I#z)'<&>>M,1,I,I-[)	,  0"
 NN,[99"
 "

 zz"1#'*,  
 	
)   <<K "
s    E(FFFc                 V    t        d | j                  j                         D              S )Nc              3   R   K   | ]  }t        |t        j                          ! y wr6   )rL   r   r   )rM   rN   s     r:   rQ   z(ConstDictVariable.len.<locals>.<genexpr>?  s%      
=>
1i7788
s   %')sumrF   valuesr   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r6   )is_new_itemrI   getrk   )rM   rR   r   r^   s      r:   rQ   z2ConstDictVariable.has_new_items.<locals>.<genexpr>D  s?      2
U T0044SVV<eD2
s   AA)rJ   anyrF   r   s   `r:   has_new_itemszConstDictVariable.has_new_itemsC  s7    ** 
c 2
"jj..02
 /
 	
r<   r   otherc                     |rS|j                         rC|j                         r3t        |j                               t        |j                               k7  S t        |      t        |      k7  S r6   )is_realizedidr   )r^   r   r   s      r:   r   zConstDictVariable.is_new_itemI  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arg)rF   rI   r   rk   r   rJ   append_outputr   )r^   codegennum_argsrR   r   items         r:   reconstruct_kvs_into_new_dictz/ConstDictVariable.reconstruct_kvs_into_new_dictQ  s    ****, 	JC&&**3662De,0K0KA	 	0(KLr<   c                 "   | j                   t        j                  u rj                  fd       | j	                         rj                  g t        dd      t                      j                  |        j                  t                      j                  d       | j                         j                  g t        d      t        d             y | j                         j                  t        dd             y | j	                         rej                  t        dd      t               g       j                  |        | j                         j                  t        d	d             y | j                         y )
Nc                  n     j                   j                  t               j                  d      g      S )Nrf   )extend_outputcreate_load_python_modulere   create_load_attrr   s   r:   <lambda>z/ConstDictVariable.reconstruct.<locals>.<lambda>a  s3    --99+F00? r<   r   Fupdater#   POP_TOPr   r   DICT_UPDATE)rE   re   rf   add_push_null_contains_self_referencer   r   r   	add_cacher   load_methodr   r   r   r^   r   s    `r:   reconstructzConstDictVariable.reconstruct]  sf   ==K333!! ,,.%%-a7&( !!$'%%n&67##H-227;%%+A.*95 227;%%&:1e&DE,,.%%*;A>&( !!$'227;%%&8A&NO 227;r<   c                     t        | j                  t        j                        s| j	                         rt
        ddj                  fd| j                  j                         D               dS )Nrs   rt   c              3      K   | ]6  \  }}|j                   j                         d |j                          8 yw)rr   N)rk   reconstruct_pycode)rM   rn   rO   r   s      r:   rQ   z7ConstDictVariable.reconstruct_pycode.<locals>.<genexpr>  sF       Eimijlm!8!8!A B"QEYEYZaEbDcd  Es   <?ru   )r7   rE   re   rf   r   r>   rw   rF   r   s    `r:   r   z$ConstDictVariable.reconstruct_pycode  s{    t}}k&=&=>,,.%%DII  Equq{q{  rB  rB  rD  E  E  F  FH  I  	Ir<   r   c                 x    t        |      }|| j                  vrt        t        ||g       | j                  |   S )Nargs)r+   rF   r   r   )r^   r~   r   rR   s       r:   'getitem_const_raise_exception_if_absentz9ConstDictVariable.getitem_const_raise_exception_if_absent  s6     c"djj $Xr>zz#r<   c                     t        |      }|| 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 dictKey z>Check if the key exists in the dictionary before accessing it.gb_typecontextexplanationhints)r+   rF   r   r   r
   
USER_ERROR)r^   r~   r   rR   msgs        r:   getitem_constzConstDictVariable.getitem_const  so     c"djj #CII;.GHC/syyk*T&11	 zz#r<   c                 T    t        |      }|| j                  vry | j                  |   S r6   )r+   rF   )r^   r   rR   s      r:   maybe_getitem_constz%ConstDictVariable.maybe_getitem_const  s)    c"djj zz#r<   c                 F   || vrt        d| d      t        |      }t        | j                  j	                               j                  |      }t        | j                  j	                               |   }t        |t        j                        r|j                          y y )Nr   z not found in dict)rZ   r+   tuplerF   keysindexrI   rL   r   LazyVariableTrackerr   )r^   r   rR   r   original_key_vts        r:   realize_key_vtz ConstDictVariable.realize_key_vt  s    d? 4u,>!?@@c"djjoo'(..s3 3 3 8 8 :;EBoy'D'DE##% Fr<   c                 n    | j                   r)t        | j                  t        j                               y y r6   )r\   r   
make_guardr   DICT_KEYS_MATCHr   s    r:   r   z/ConstDictVariable.install_dict_keys_match_guard  s%    ;;$//,*F*FGH r<   r   c           	         | j                   sy |j                  j                  j                  |       ry |d   | v }|d   j                   |d   j	                         rm|rt        |       j                  nt        |       j                  }t        | j                  t        j                  ||d   j                                            y |d   j                   r(|r| j                  |d          y | j                          y y )Nr   )rR   )r\   outputside_effectsis_modifiedis_python_constantr   CONTAINS_GUARDNOT_CONTAINS_GUARDr   r   	functoolspartialr}   r   r   )r^   r~   r   containsguard_fns        r:   install_dict_contains_guardz-ConstDictVariable.install_dict_contains_guard  s    " {{99!!--d37d?7>>!d1g&@&@&B-5T
))4:;X;X  %%  G668 !W^^##DG,224	 r<   rR   c                 &    | j                  ||      S r6   )r   r^   r~   rR   s      r:   mp_subscript_implz#ConstDictVariable.mp_subscript_impl  s     ;;BDDr<   r   c                     t        |      st        |d|j                          d       | j                  ||g       || v }t	        j
                  ||      S )Nunhashable type: '')r,   r   python_type_namer   r)   r   )r^   r~   r   r   s       r:   sq_containszConstDictVariable.sq_contains  sX     4 R#5d6K6K6M5Na!PQ((dV44<$$R22r<   c                 >   ddl m} | j                  rlt        | j                        sWt	        | j                  t        j                               |j                  j                  j                  | j                          || j                  j                               S )Nr#   )DictIterator)iterr  r\   r   r   r   r   r   r   guard_on_key_orderaddrF   r   )r^   r~   r  s      r:   tp_iter_implzConstDictVariable.tp_iter_impl  sa    &;;1$++>$//,*F*FGHII((,,T[[9DJJOO-..r<   namec                    ddl m} t        }|dk(  rz |j                  |t        g|i |}|j
                  j                  j                  |        | j                  j                  |j                         t        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                         t)        t+        | j                  j-                                     D cg c]  }|j.                   }	}t1        j2                  |	t5                     S |dk(  r|s|r&t        ||dt        |       dt        |       d       | j                          | j                  r/|j
                  j                   j#                  | j                         |s|rt7        t8        |       t;        |       S |dk(  rn| j                          |s|r&t        ||dt        |       dt        |       d       | j=                  | j                  j?                         t5               d       S |dk(  r}t        |      dvrt        ||dt        |       d
       |d   | vr:| jA                  ||       t        |      dk(  rt        j                  d       S |d   S | jC                  ||d         S |dk(  r| jE                         rt        |      dvrt        ||dt        |       d
       |d   | vr5| jA                  ||       t        |      dk(  rt7        tF        |       |d   S d| _$        |j
                  j                  j                  |        | j                  jK                   ||d               S |dk(  r| jE                         rt        |      rt        ||       | j                  st7        tF        |dg       | j                  jM                         \  }}
d| _$        |j
                  j                  j                  |        t1        jN                  |j.                  |
g      S |dk(  r|s|r&t        ||dt        |       dt        |       d       d| _$        |j
                  j                  j                  |        | j                  jQ                          t        j                  d       S |dk(  r| jE                         r | j                          t        |      dkD  rt        ||dt        |       d
       |s|r%|j
                  j                  j                  |        |rF|d   }tS        |tT              r6|j                          | j                  j                  |j                         ntS        |t0        jV                  tX        f      rf|j[                  |d      j]                         rF|j_                  |dg i       }ta        ||      D ]"  }tc        |||      | j                   ||      <   $ nute        ta        ||            D ]]  \  }}ta        ||      }t        |      dk7  r#t7        tf        |d| dt        |       dg       |d   | j                   ||d         <   _ |j                         D ].  \  }}
|
| j                   |ti        jj                  ||            <   0 t        j                  d       S |d k(  r	| jE                         rt        |      dvr&t        ||d!t        |       dt        |       d       | j                          |st        |      dkD  r&t        ||d"t        |       dt        |       d       | jm                  |d         }||S t        |      dk(  rt        j                  d       }n|d   }|j
                  j                  j                  |        || j                   ||d         <   |S tn        |   ||||      S c c}w )#Nr#   )DictBuiltinVariablerX   rF   0 args and 0 kwargs
 args and  kwargsr   z0 argsz args__reversed__r   r   r]   )rF   r   r\   r   )r#   r	   z1 or 2 argsr   rV   Tpopitemzpopitem(): dictionary is emptyr   clearr   zat most 1 argsr	   z$dictionary update sequence element #z has length z; 2 is required
setdefaultz1 or 2 args and 0 kwargszat most 2 args and 0 kwargs)8 r  r+   call_custom_dictr9   r   r   mutationrF   r   r*   creater    r   r   r\   r  r  DictItemsVariableDictKeysVariablereversedlistr   rk   r   ListIteratorVariabler(   r   	TypeErrorDictValuesVariabler   r]   r   r   
is_mutabler   rJ   rV   r  TupleVariabler  rL   rD   UserDefinedObjectVariableMappingProxyVariablecall_obj_hasattrr}   call_methodr"   r.   	enumerate
ValueErrorr)   r   r   rW   )r^   r~   r  r   rG   r  rP   temp_dict_vtrn   reversed_keysrO   r   r   rR   idxr   pairr   rN   r`   s                      r:   r!  zConstDictVariable.call_method  s?    	*":?.??D#)L II""++D1JJl001#**400W_v#)4ykCK=@	 ..0{{		,,00=$T**V^4y#Bh3t9+U8KL..0{{		,,00=#D))^# v#)4ykCK=@	 ..0{{		,,00=+3D9J4K+LMaQTTMMM11-=-?  Xv#)4ykCK=@	 ..0{{		,,00=v(B7%d++V^..0v#)4ykCK=@	 ::jjoo'7G7IRV    U]4y&#BmD	{%=PQAwd"00T:t9>+22488Aw%%b$q'22U]t04y&#BmD	{%=PQAwd"00T:t9>,Xr:Aw*.D'II""++D1::>>(47"344Y4??#4 4y#B-::(8 ::%%'DAq*.D'II""++D1**ADD!955W_v#)4ykCK=@	 +/D'II""++D1JJ#**400X$//"3
 ..04y1}#B.>3t9+U@STv		&&//5Qe%67 779JJ%%ekk2"<<>RS ..r6:MMO ,,RR@D.r48 O4>r5#4N

8C=1O &/r5/I%J @	T.r48t9>4 * "%((+uLT?%T&" 9=Q

8DG#45@  G1EF

8O$9$9"a$@ABG#**400\!doo&74y&#.4ykCK=@	 ..0TQ#14ykCK=@	 ,,T!W5E t9>(//5AQA		&&//501

8DG,-7&r4v>>C Ns   :d;c                 t    | j                          | j                  D cg c]  }|j                   c}S c c}w r6   )r   rF   rk   )r^   r~   rN   s      r:   unpack_var_sequencez%ConstDictVariable.unpack_var_sequence  s,     	**,"jj))))s   5reversec                     |r|| fn| |f\  }}t        |      r6t        |      r+|j                  |dg i       }|j                  |d|gi        |S t        j                  t              S )Nr]   r   )r;   r!  r*   r  NotImplemented)r^   r~   r   r*  self_other_news          r:   
nb_or_implzConstDictVariable.nb_or_impl  sh     *1tUmv<#7##BB7COOB6(B7J&&~66r<   c                 0    | j                  |d|gi        | S Nr   )r!  )r^   r~   r   s      r:   nb_inplace_or_implz$ConstDictVariable.nb_inplace_or_impl  s     	Xw3r<   c                    | j                         st        | 	  |||      S t        |      st	        ||       | j                          t        |      }|j                  j                  j                  |        |D|| j                  vr!t        t        ||j                         g       d| _        | j                  |= n|| j                  |<   t        j                   d       S )Nr   T)r  rW   mp_ass_subscript_implr,   r-   r   r+   r   r   r  rF   r   r   r}   rJ   r*   r  )r^   r~   rR   r   hkeyr`   s        r:   r5  z'ConstDictVariable.mp_ass_subscript_impl  s      70S%@@ 3S"%**,s#
		''-=4::%(2S=S=S=U<VW*.D'

4 $DJJt&&t,,r<   c                 t    | j                          t        j                  |t        | j                              S )z Mapping length for dict objects.)r   r)   r   r   rF   r^   r~   s     r:   	mp_lengthzConstDictVariable.mp_length  s)    **,$$RTZZ99r<   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r6   r   )rM   rA   r^   s     r:   rQ   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   r9   re   rf   rg   hasattrrE   r*   r  r   r
   SUPPORTABLE)r^   r~   r  r   s   `   r:   r   z"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 )NrU   )r   rW   r   )r^   rG   r`   s     r:   r   zConstDictVariable.clone6  s!    **,w}&v&&r<   c                      yNFrU   r   s    r:   r,   zConstDictVariable.is_hashable:      r<   c                 F    ddl m}  ||d| j                          d       y Nr	   )r   r   r   excr   r   r^   r~   r   s      r:   	hash_implzConstDictVariable.hash_impl=  #    *1$2G2G2I1J!LMr<   opc                    ddl m} ddlm} |dvrt	        j
                  t              S t        |t              sIt        ||      r$|j                  t        d      |j                  }nt	        j
                  t              S |j                  |t        j                        j                  || |gi       }|dk(  r%t        j                  ||j!                                S |S )Nr#   SourcelessBuilder)UserDefinedDictVariable)__eq____ne__zexpected _base_vt to be setrO  )builderrL  user_definedrM  r*   r  r,  rL   rD   _base_vtrZ   r   dict___eq__call_functionr)   r   r}   )r^   r~   r   rI  rL  rM  	eq_results          r:   richcompare_implz"ConstDictVariable.richcompare_implB  s    
 	/9))#**>::%!23 %!89>>)()FGG'..~>>%,,R1F1FGUUur
	 >"((1M1M1O-OPPr<   c                 v    |dk(  r$t        j                  || j                               S t        |   ||      S )Nr`   )r)   r   r8   rW   var_getattrr^   r~   r  r`   s      r:   rX  zConstDictVariable.var_getattr_  s9    ;"((T-=-=-?@@w"2t,,r<   r   r0   r4   Nr4   NF);__name__
__module____qualname__r9   _cpython_typer   DICT_CONTAINSr   DICT_NOT_CONTAINSr   r)   _nonvar_fieldsr   r   rX   r[   rl   strr{   r}   r   r   r8   boolr   r  r   r   r   intr   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r!  r)  r0  r3  r5  r9  r*   r   r   r,   rG  rV  rX  __classcell__r`   s   @r:   rD   rD   _   s   M!//N%77 			'	'N )!O_45)! )! 	)!
 
)!VD T (N$sCx. N,C ,
DcN 
G7 GO GMc?.B)C MT 
 
4 
0
'0
 ,0
  	0

 ?#0
 c?230
 
0
d4
'4
 ,4
  	4

 ?#4
 c?234
 sCx4
 
4
l
S 


t 
&$t+&4C&	&
M-<^IS I-4C	-4C	" ?T;Q &/ &d &I(5-(559/5J(5	(5TE'E E 
	E3-35D3	3/: / /Z?'Z? Z? ?#	Z?
 S/)*Z? 
Z?x*-*	o	* 	77 7 	7
 
7  
	-'- - %	-
 
-2:7 :O :

-
58
	
2'c 'o 'T N7 NE#t)<L N
-6EKN	:-9 - - -r<   rD   c            
       4    e Zd Zej                  Zdededdf fdZde	fdZ
dddeeef   fd	Zddde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e   deeef   def
dZdddefdZdddedefdZdddefdZdddededefdZdddedef fdZ xZS )r  dv_dictrG   r4   Nc                     t        |   di | t        |t              st	        dt        |             || _        y )N Expected ConstDictVariable, got rU   )rW   rX   rL   rD   rZ   r   rj  r^   rj  rG   r`   s      r:   rX   zMappingProxyVariable.__init__j  s<    "6"'#45 #CDM?!STTr<   c                 "    t         j                  S r6   )typesMappingProxyTyper   s    r:   r8   z MappingProxyVariable.python_typep  s    %%%r<   r~   r1   c                 8    | j                   j                  |      S r6   )rj  rG  r8  s     r:   rG  zMappingProxyVariable.hash_impls  s     ||%%b))r<   c                 8    | j                   j                  |      S r6   )rj  r)  r8  s     r:   r)  z(MappingProxyVariable.unpack_var_sequencex  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 )Nrp  )r   r   ro  r   r   s   r:   r   z2MappingProxyVariable.reconstruct.<locals>.<lambda>  s4    G))55e<,,-?@ r<   r#   F)r\   r   r
   r=  r   rj  r   r   )r^   r   r   s    ` r:   r   z MappingProxyVariable.reconstruct}  s    ;;<T[[M JL L  ?"4;;-0Y&22	 		
 	21e<=r<   c                     | j                   rG|j                  j                  j                         r"d}t	        dd| j                    d|ddg       y y y )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 mutationrt  z, Dict mutation detectedzNAvoid modifying dictionaries that might be referenced by mapping proxy objectszROr avoid using the mapping proxy objects after modifying its underlying dictionaryr   )r\   r   r   has_existing_dict_mutationr   )r^   r~   r   s      r:   _check_mutation_guardz*MappingProxyVariable._check_mutation_guard  s\    ;;29911LLN7  G"4;;-/GHdh	 O;r<   rR   c                 \    | j                  |       | j                  j                  ||      S r6   )rx  rj  r   r   s      r:   r   z&MappingProxyVariable.mp_subscript_impl  s)     	""2&||--b#66r<   r  r   c                 `    | j                  |       | j                  j                  ||||      S r6   )rx  rj  r!  )r^   r~   r  r   rG   s        r:   r!  z MappingProxyVariable.call_method  s-     	""2&||''D$??r<   c                 8    | j                   j                  |      S r6   )rj  r  r8  s     r:   r  z!MappingProxyVariable.tp_iter_impl  s    ||((,,r<   r   c                 :    | j                   j                  ||      S r6   rj  r   r^   r~   r   s      r:   r   z MappingProxyVariable.sq_contains       ||''D11r<   c                 8    | j                   j                  |      S r6   )rj  r9  r8  s     r:   r9  zMappingProxyVariable.mp_length  s    ||%%b))r<   r   rI  c                 8    ddl m}  ||| j                  ||      S )Nr#   )generic_richcompare)object_protocolr  rj  )r^   r~   r   rI  r  s        r:   rV  z%MappingProxyVariable.richcompare_impl  s    
 	9"2t||UB??r<   c                     | j                         t        j                  u r0t        j                  ||t        j                  j
                  v       S t        |   ||      S r6   )r8   ro  rp  r)   r   __dict__rW   r   rY  s      r:   r   z%MappingProxyVariable.call_obj_hasattr  sR     !7!77"((TU5K5K5T5T-TUUw'D11r<   rZ  )r~   r1   r4   N)r]  r^  r_  ro  rp  r`  rD   r   rX   r   r8   r   rf  re  rG  r  r)   r)  r   rx  r   rd  r9   r!  r  r   r9  rV  r*   r   rg  rh  s   @r:   r  r  e  sr   **M 1 S T &T &*7 *E#t)<L *
4-4	o	4
>6,7'7 7 
	7@'@ @ ?#	@
 S/)*@ 
@-: - -2-25D2	2*7 *O *@-@6E@KN@	@2-2582	2 2r<   r  c                   .    e Zd ZddZdddee   ddfdZy)	NNModuleHooksDictVariabler4   Nc                      y r6   rU   r   s    r:   r   z7NNModuleHooksDictVariable.install_dict_keys_match_guard      r<   r~   r1   r   c                      y r6   rU   r^   r~   r   s      r:   r   z5NNModuleHooksDictVariable.install_dict_contains_guard       	r<   r[  )r]  r^  r_  r   r  r)   r   rU   r<   r:   r  r    s)    -59/5J	r<   r  c            
           e Zd ZU dZdZedz  ed<   dededdf fdZ	e
defd       Zdefd	Zd
ddeeef   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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fdZ	 dd
ddededefdZ	 dd
ddededefdZ	 dd
ddededefdZ	 dd
ddededefdZ xZ S )DictViewVariablezu
    Models _PyDictViewObject

    This is an "abstract" class. Subclasses will override kv and the items method
    Nkvrj  rG   r4   c                     t        |   di | | j                  dvrt        d| j                        t	        |t
              st        dt        |             || _        y )N)r   r   rF   z4Expected kv to be 'keys', 'values', or 'items', got rl  rU   )rW   rX   r  rZ   rL   rD   r   rj  rm  s      r:   rX   zDictViewVariable.__init__  sf    "6"7755 FtwwkR  '#45 #CDM?!STTr<   c                     | j                   t        d       t        | j                  j                  | j                                S )Nzkv must not be None)r  rZ   getattrrj  rF   r   s    r:   
view_itemszDictViewVariable.view_items  s7    77? !6773wt||))477355r<   c                      yr@  rU   r   s    r:   r,   zDictViewVariable.is_hashable  rA  r<   r~   r1   c                 F    ddl m}  ||d| j                          d       y rC  rD  rF  s      r:   rG  zDictViewVariable.hash_impl  rH  r<   c                     t         r6   )r>   r   s    r:   view_items_vtzDictViewVariable.view_items_vt  s
     "!r<   c                     | j                   S r6   )r  r8  s     r:   r)  z$DictViewVariable.unpack_var_sequence  s     !!!r<   c                     | j                   t        d       || j                         |j                  | j                          |j	                  d       y )Nz#kv must not be None for reconstructr   )r  rZ   rj  r   r!  r   s     r:   r   zDictViewVariable.reconstruct  sC    77? !FGGDGG$Ar<   r  c                     | j                   t        d      || j                         j                  v rt	        j
                  d      S t	        j
                  d      S )Nz(kv must not be None for call_obj_hasattrTF)r  rZ   r8   r  r*   r  )r^   r~   r  s      r:   r   z!DictViewVariable.call_obj_hasattr  sR     77? !KLL4##%...#**400&&u--r<   c                    | j                   dk(  r>dj                  fd| j                  D              }t        j                  d| d      S | j                   dk(  r>dj                  fd| j                  D              }t        j                  d| d      S dj                  fd	| j                  D              }t        j                  d
| d      S )Nr   rt   c              3   J   K   | ]  }t        |j                          y wr6   r!   rk   )rM   rR   r~   s     r:   rQ   z-DictViewVariable.repr_impl.<locals>.<genexpr>(  s     R3l2svv6Rs    #dict_keys([])r   c              3   6   K   | ]  }t        |        y wr6   )r!   )rM   r   r~   s     r:   rQ   z-DictViewVariable.repr_impl.<locals>.<genexpr>+  s     S%l2u5Ss   dict_values([c              3   r   K   | ].  \  }}d t        |j                         dt        |       d 0 yw)(rt   )Nr  )rM   rR   r   r~   s      r:   rQ   z-DictViewVariable.repr_impl.<locals>.<genexpr>-  s@      
U R()LU,C+DAF
s   47dict_items([)r  rw   r  r)   r   )r^   r~   rF   s    ` r:   r   zDictViewVariable.repr_impl&  s    77fIIR$//RRE"(({5'-DEE77hIIS4??SSE"((}UG2-FGG		 
"oo
 
 $$R<wb)ABBr<   r   c           
         |dk(  r|s|r&t        ||dt        |       dt        |       d       | j                  j                  rXt	        | j                  j                        s9|j
                  j                  j                  | j                  j                         t        j                  t        t        | j                              t                     S t        | =  ||||      S )Nr  r	  r
  r  r  )r    r   rj  r\   r   r   r  r  r   r  r  r  r  r(   rW   r!  r^   r~   r  r   rG   r`   s        r:   r!  zDictViewVariable.call_method3  s     >!v#)4ykCK=@	 ||""+=dll>Q>Q+R		,,001D1DE11Xd0012.0  w"2tT6::r<   c                 T    t        j                  |t        | j                              S )z&Sequence length for dict view objects.)r)   r   r   r  r8  s     r:   	sq_lengthzDictViewVariable.sq_lengthK  s    $$RT__)=>>r<   r   r*  c                     t        j                  |t              j                  || gi       }|j	                  |d|gi        |S r2  r)   r   r?   rT  r!  r^   r~   r   r*  ss        r:   r0  zDictViewVariable.nb_or_implO  s@     !!"c*88dVRH	b(UGR0r<   c                     |r|| fn| |f\  }}t        j                  |t              j                  ||gi       }|j	                  |d|gi        |S )Ndifference_updater  )r^   r~   r   r*  r-  r.  r  s          r:   nb_subtract_implz!DictViewVariable.nb_subtract_implZ  sV     *1tUmv!!"c*88eWbI	b-x<r<   c                     t        j                  |t              j                  || gi       }|j	                  |d|gi        |S )Nintersection_updater  r  s        r:   nb_and_implzDictViewVariable.nb_and_implf  sA     !!"c*88dVRH	b/%"=r<   c                     t        j                  |t              j                  || gi       }|j	                  |d|gi        |S )Nsymmetric_difference_updater  r  s        r:   nb_xor_implzDictViewVariable.nb_xor_implq  sA     !!"c*88dVRH	b7%"Er<   rZ  r\  )!r]  r^  r_  __doc__r  rd  __annotations__rD   r   rX   propertyr  re  r,   r   rf  rG  r  r)   r  r)  r   r*   r   r   r9   r!  r  r0  r  r  r  rg  rh  s   @r:   r  r    s    Bd
 1 S T  6C 6 6
T N7 NE#t)<L N
 "tO4 " "
"-"	o	"
.-.58.	.C7 CO C;'; ; ?#	;
 S/)*; 
;0?7 ?O ? 		'	 	 		
 
	 	
'
 
 	

 

  		'	 	 		
 
	 		'	 	 		
 
	r<   r  c            
            e Zd Ze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fdZdefd	Zddd
edefdZddd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 xZS )r  r   r4   c                 ,    t        | j                        S r6   )r?   r  r   s    r:   	set_itemszDictKeysVariable.set_items  s    4??##r<   c                 T    | j                   D cg c]  }|j                   c}S c c}w r6   )r  rk   )r^   rN   s     r:   r  zDictKeysVariable.view_items_vt  s      #oo....s   %c                     t         S r6   )r   r   s    r:   r8   zDictKeysVariable.python_type  s    r<   r~   r1   c                 "   ddl m} | j                  j                  rXt	        | j                  j                        s9|j
                  j                  j                  | j                  j                          || j                  j                        S )Nr#   )DictKeysIterator)	r  r  rj  r\   r   r   r  r  rF   )r^   r~   r  s      r:   r  zDictKeysVariable.tp_iter_impl  s[    *<<'9$,,:M:M'NII((,,T\\-@-@A 2 233r<   c                     | j                   syg }| j                   D ](  }t        |j                        }|j                  |       * ddj	                  |      z   dz   S )Nzdict_keys([])r  rt   r  r  r   rk   rv   rw   )r^   rF   rn   ry   s       r:   r{   zDictKeysVariable.debug_repr  sY    "!E__ &*1440W%& !499U#33d::r<   r   c                 :    | j                   j                  ||      S r6   r}  r~  s      r:   r   zDictKeysVariable.sq_contains  r  r<   r   rI  c                     ddl m} t        |      st        j                  t
              S |j	                  |t        j                        j                  ||j	                  |t        |         | |gi       S Nr#   rK  
rP  rL  rB   r*   r  r,  r   dictview_richcomparerT  r   r^   r~   r   rI  rL  s        r:   rV  z!DictKeysVariable.richcompare_impl  q     	/"5)#**>:: ''	..

-!((-CB-GH
 

	
r<   r  r   rG   c                     |dv r6t        | j                  |      } ||d   j                        }t        |      S t        |   ||||      S N)__and____iand____xor____ixor__r   r  r  r/   rW   r!  )r^   r~   r  r   rG   mrr`   s          r:   r!  zDictKeysVariable.call_method  sX      
 
 -A$q'##$Aq>!w"2tT6::r<   )r]  r^  r_  r   r`  r  r  r?   r)   r  r  r  r   r8   r  rd  r{   r   rV  r9   r!  rg  rh  s   @r:   r  r  }  s   M	B$3/ $ $ /tO4 / /T 4: 4 4;C ;2-25D2	2
-
6E
KN
	
0;'; ; ?#	;
 S/)*; 
; ;r<   r  c                        e Zd ZeZdZdZdZdZdZ	dZ
dZdZdZdefdZdddeeef   f fdZedee   fd       Zdefd	Zdddefd
ZdddededefdZdefdZ xZS )r  r   Nr4   c                      y)NTrU   r   s    r:   r,   zDictValuesVariable.is_hashable  s    r<   r~   r1   c                 *    t         t        |   |      S r6   )rW   r  rG  )r^   r~   r`   s     r:   rG  zDictValuesVariable.hash_impl  s    %t6r::r<   c                 ,    t        | j                        S r6   )r  r  r   s    r:   r  z DictValuesVariable.view_items_vt  s    DOO$$r<   c                     t         S r6   )r   r   s    r:   r8   zDictValuesVariable.python_type  s    r<   c                 "   ddl m} | j                  j                  rXt	        | j                  j                        s9|j
                  j                  j                  | j                  j                          || j                  j                        S )Nr#   )DictValuesIterator)	r  r  rj  r\   r   r   r  r  rF   )r^   r~   r  s      r:   r  zDictValuesVariable.tp_iter_impl  s[    ,<<'9$,,:M:M'NII((,,T\\-@-@A!$,,"4"455r<   r   rI  c                 $    ddl m}  || |||      S )Nr#   )object_richcompare)r  r  )r^   r~   r   rI  r  s        r:   rV  z#DictValuesVariable.richcompare_impl  s     	8!$E266r<   c                     | j                   syg }| j                   D ]  }t        |      }|j                  |         ddj                  |      z   dz   S )Nzdict_values([])r  rt   r  )r  r   rv   rw   )r^   rF   rO   rz   s       r:   r{   zDictValuesVariable.debug_repr  sU    $!E__ &*1-W%& #TYYu%55<<r<   )r]  r^  r_  r   r`  r  r0  r3  r  nb_inplace_subtract_implr  nb_inplace_and_implr  nb_inplace_xor_implre  r,   r   rf  rG  r  r  r)   r  r   r8   r  rd  rV  r{   rg  rh  s   @r:   r  r    s    M  
B J#KKT ;7 ;E#t)<L ; %tO4 % %T 6: 6 67-76E7KN7	7=C =r<   r  c            
            e Zd ZeZdZeded   fd       Zede	e
   fd       ZdefdZdefdZdd	d
e
de
fdZdd	de
dede
fdZdd	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  rF   r4   r+   c           
          | j                   D ch c]/  \  }}t        t        j                  |j                  |g            1 c}}S c c}}w r6   )r  r+   r   r  rk   rm   s      r:   r  zDictItemsVariable.set_items  sD     
1 I33QTT1I>?
 	
 
s   4Ac                     | j                   D cg c]&  \  }}t        j                  |j                  |g      ( c}}S c c}}w r6   )r  r   r  rk   rm   s      r:   r  zDictItemsVariable.view_items_vt$  s5     @DOtq!	''q	2OOOs   +?c                     t         S r6   )r   r   s    r:   r8   zDictItemsVariable.python_type)  s    r<   c                     | j                   syg }| j                   D ]=  \  }}t        |j                        }t        |      }|j                  d| d| d       ? ddj	                  |      z   dz   S )Nzdict_items([])r  rt   r  r  r  r  rx   s         r:   r{   zDictItemsVariable.debug_repr,  sv    #!E 81*1440*1-q	G9A678 "DIIe$44t;;r<   r~   r1   r   c                    ddl m} t        |      st        |d|j	                          d       t        |t        j                        rt        |j                        dk(  r|j                  \  }}t        |      }|| j                  j                  vrt        j                  |d      S | j                  j                  |   }t        j                  ||j                  |            S  || j                  ||      S )Nr	   )iter_containsr   r   F)utilsr  r,   r   r   rL   r   r  r   rF   r+   rj  r)   r   is_python_equalr  )r^   r~   r   r  rR   valkey_htstoreds           r:   r   zDictItemsVariable.sq_contains7  s     	*4 R#5d6K6K6M5Na!PQ dI334TZZA9MzzHC$S)FT\\///&,,R77\\''/F"((S-@-@-HIIT//r::r<   r   rI  c                     ddl m} t        |      st        j                  t
              S |j	                  |t        j                        j                  ||j	                  |t        |         | |gi       S r  r  r  s        r:   rV  z"DictItemsVariable.richcompare_implK  r  r<   c                 "   ddl m} | j                  j                  rXt	        | j                  j                        s9|j
                  j                  j                  | j                  j                          || j                  j                        S )Nr#   )DictItemsIterator)	r  r  rj  r\   r   r   r  r  rF   )r^   r~   r  s      r:   r  zDictItemsVariable.tp_iter_implc  s[    +<<'9$,,:M:M'NII((,,T\\-@-@A !3!344r<   r  r   rG   c                     |dv r6t        | j                  |      } ||d   j                        }t        |      S t        |   ||||      S r  r  )r^   r~   r  r   rG   fn_hdlret_valr`   s          r:   r!  zDictItemsVariable.call_methodj  sY      
 
 T^^T2FT!W../Gw''w"2tT6::r<   )r]  r^  r_  r   r`  r  r  r?   r  r  r)   r  r   r8   rd  r{   r   rV  r  r9   r!  rg  rh  s   @r:   r  r    s   M	B
301 
 
 PtO4 P PT 	<C 	<;-;5D;	;(
-
6E
KN
	
05: 5 5;'; ; ?#	;
 S/)*; 
; ;r<   r  c            	           e Zd ZdZededeeef   fd       Z	edddedeeef   fd       Z
dedddd	fd
ZdedefdZdeeef   fdZdedefdZdededd	fdZdedd	fdZdedefdZdefdZdee   fdZy	)SideEffectsProxyDictzm
    A proxy dict that allows us to track mutations to the dict using side
    effects table as storage.
    rk   r4   c                    t        | t        j                        ri S t        | t        j                        rt
        j                  | j                        S | j                         }|t        urAt        | t        j                        r| j                  d      S t        j                  |d      S t        ddt        |        dt        |        g t         j"                         y )Nr  z-unsupported variable type for __dict__ accesszVariableTracker type: z.Dynamo does not know how to get __dict__ from r   )r   r   NestedUserFunctionVariablerL   LocalGeneratorFunctionVariabler  get_example_value_dictrk   get_real_python_backed_valuer'   r  _getattr_staticobject__getattribute__r   r   r
   
DYNAMO_BUG)rk   r   s     r:   r  z+SideEffectsProxyDict.get_example_value_dict  s    "i::; IIDDE'>>ruuEE335EN*b)"E"EF--j99!225*EEK4T"XJ?"PQUVXQYPZ [*55	r<   r~   r1   c                 t   t        |t        j                        r| j                  j                  j                  |dt        j                        r| j                  j                  j                  |d      }t        |t              rxi }|j                  j                         D ]W  \  }}	 |j                  j                         }t        t"              s"t        dd|dg t        j$                         |||<   Y |S t&        j)                  |      }|j                         D ci c]J  \  }}|t+        j,                  | ||j.                  xr  t1        t3        |j.                  d      |            L c}}S # t        $ r/ t        dd|j                   dg t        j                          Y w xY wc c}}w )	Nr  z#non-constant key in object __dict__zkey=z@Dynamo expects object __dict__ replacement keys to be constants.r   z!non-string key in object __dict__z2Dynamo expects object __dict__ keys to be strings.)r\   )rL   r   r  r   r   has_pending_mutation_of_attrr&   GENERIC_SETATTR	load_attrrD   rF   rk   r}   r>   r   r
   r=  rd  r   r  r  r)   r   r\   r   r   )r~   rk   dict_vtresultrR   r   	key_valueexample_value_dicts           r:   get_value___dict__z'SideEffectsProxyDict.get_value___dict__  s    	33
ii$$AA
,<<
 ii,,66r:FG'#45")--"5"5"7 .JC$'FF$=$=$?	 &i5%$G&*9-$8(\"A$5$@$@"A	 ).F9%#.$ 
 2HHL 1668
 U &&yy N%jJ&GM	 
 	
- / %$I&*366(O(j"B$5$A$A"B	,
s   )E9&AF495F10F1r   Nc                 v    || _         |j                  j                  | _        | j                  ||      | _        y r6   )r   r   r   r  	item_dict)r^   r   r~   s      r:   rX   zSideEffectsProxyDict.__init__  s/    	II2200T:r<   rR   c                 ^    t         }t        ||      r|j                  j                         S |S r6   )r+   r   rk   r}   )r^   rR   Hashers      r:   _maybe_unwrap_keyz&SideEffectsProxyDict._maybe_unwrap_key  s(     .4S&.Asvv((*JsJr<   c           	         | j                   j                  j                  | j                  i       j	                         D ci c]=  \  }}| j                   j                  | j                  |t        j                        r||? c}}S c c}}w r6   )r   store_attr_mutationsr   r   rF   r  r&   INSTANCE_DICTr^   r  r   s      r:   side_effects_tablez'SideEffectsProxyDict.side_effects_table  s{      $00EEII		2 eg	
e   ==		4!1!?!?	 %K
 	
 
s   ABc                     | j                  |      }| j                  j                  | j                  |t        j
                        r(| j                  j                  | j                  |d      S | j                  |   S NT)
deleted_ok)r
  r   r  r   r&   r  r   r  r^   rR   r  s      r:   __getitem__z SideEffectsProxyDict.__getitem__  sk    %%c*99IIt-;;
 $$..tyy$4.PP~~d##r<   r   c                     | j                  |      }t        |t              st        dt	        |             | j
                  j                  | j                  ||       y )NzExpected str key, got )r
  r   rd  rZ   r   r   store_instance_dict_attrr   )r^   rR   r   r  s       r:   __setitem__z SideEffectsProxyDict.__setitem__  sO    %%c*dC  #9$t*!FGG22499dEJr<   c                     | j                  |      }| j                  j                  | j                  |t	        j
                                y r6   )r
  r   r  r   r   r   r  s      r:   __delitem__z SideEffectsProxyDict.__delitem__  s:    %%c*22IItY668	
r<   c                 0   | j                  |      }| j                  j                  | j                  |t        j
                        rC| j                  j                  | j                  |d      }t        |t        j                         S || j                  v S r  )r
  r   r  r   r&   r  r   rL   r   r   r  )r^   rR   r  r   s       r:   r   z!SideEffectsProxyDict.__contains__  s    %%c*99IIt-;;
 %%//		4D/QE!%)B)BCCCt~~%%r<   c                 &    t        d | D              S )Nc              3       K   | ]  }d   yw)r#   NrU   )rM   _s     r:   rQ   z/SideEffectsProxyDict.__len__.<locals>.<genexpr>  s     #1#s   )r   r   s    r:   __len__zSideEffectsProxyDict.__len__  s    #d###r<   c              #   `  K   t         }| j                         }|j                         D ]=  \  }}t        |t        j
                        r! |t        j                  |             ? | j                  j                         D ]'  \  }}||vs |t        j                  |             ) y wr6   )	r+   r  rF   rL   r   r   r*   r  r  )r^   r	  drn   rO   s        r:   __iter__zSideEffectsProxyDict.__iter__  s      ##%GGI 	5DAq!Y667)00344	5
 NN((* 	9DAqz-44Q788	9s   BB. B.)r]  r^  r_  r  staticmethodr)   r9   rd  r  r  r  rX   kVr
  r  r  r  r  re  r   rf  r  r   r+   r!  rU   r<   r:   r  r    s%   
 ? tCK7H  2 /
'/
-</
	c?"	#/
 /
b;_ ;2M ;RV ;
KR KC K	
Do)=$> 	
$r $o $Kr K/ Kd K
r 
d 
& &t &$ $
9(?3 
9r<   r  c            
           e Zd ZdZedddedd fd       Zdedddeddf fd	Zd
e	deddfdZ
d
e	ddfdZd
e	defdZd
e	defdZd
e	deg 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Zdddee   ddfdZ xZS )DunderDictVariablezrepresents object.__dict__r~   r1   rk   r4   c                     |j                   r
t               n	t               }|j                   xr t        |j                   d      } | ||||      S )Nr  )r~   r   r\   )r\   r$   r%   r   )clsr~   rk   r  r\   s        r:   r  zDunderDictVariable.create  sK     35)),.AUAW@z"))Z@"	
 	
r<   rG   Nc                 H    t        |   i fi | t        ||      | _        y r6   )rW   rX   r  rF   )r^   rk   r~   rG   r`   s       r:   rX   zDunderDictVariable.__init__(  s%     	&v&)"b1
r<   r  r   c                 "    || j                   |<   y r6   rF   r  s      r:   setitemzDunderDictVariable.setitem1  s     

4r<   c                 V    | j                  |      st        |      | j                  |= y r6   )r   r   rF   r^   r  s     r:   delitemzDunderDictVariable.delitem4  s$    }}T"4. JJtr<   c                      | j                   |   S r6   r*  r-  s     r:   getitemzDunderDictVariable.getitem9  s    zz$r<   c                     || j                   v S r6   r*  r-  s     r:   r   zDunderDictVariable.contains<  s    tzz!!r<   defaultc                 v    | j                  |      r| j                  |      S  |       }|| j                  |<   |S r6   )r   r0  rF   )r^   r  r2  r   s       r:   getitem_or_defaultz%DunderDictVariable.getitem_or_default?  s9    
 ==<<%%IE$DJJtLr<   r   c           
          |dk(  rS|s|r&t        ||dt        |       dt        |       d       t        t        | j                        t               d       S t        |   ||||      S )Nr]   r	  r
  r  )r   r\   )r    r   rD   r9   rF   r(   rW   r!  r  s        r:   r!  zDunderDictVariable.call_methodK  su     6>v#)4ykCK=@	 %TZZ 0@0B4  w"2tT6::r<   c                      y r6   rU   r   s    r:   r   z0DunderDictVariable.install_dict_keys_match_guarda  r  r<   c                      y r6   rU   r  s      r:   r   z.DunderDictVariable.install_dict_contains_guardd  r  r<   r[  )r]  r^  r_  r  classmethodr)   r  r   rX   rd  r+  r.  r0  re  r   r   r4  r  r9   r!  r   r   rg  rh  s   @r:   r%  r%    sH   $
'
 
 
	
 
22 (2 	2
 
2!C ! !D !C D 
 C  O  "S "T "

 "o-.
 
	
;'; ; ?#	;
 S/)*; 
;,-59/5J	r<   r%  )Sr  re   r   ro  collections.abcr   r   typingr   r   r   torch.utils._pytreer   r  r
   r   r   bytecode_transformationr   r   r   r   rE  r   r   r   guardsr   r   r\   r   r   r   r   r  r   r   r   r   r   r   r    r!   r"   rc   r$   r%   r&   r'   r(   r)   constantr*   hashabler+   r,   r-   r  r.   setsr/   torch._dynamo.codegenr0   torch._dynamo.symbolic_convertr1   	functionsr2   re  r;   rB   rD   r  r  r  r  r  r  rd  r#  abcMutableMappingr  r%  rU   r<   r:   <module>rF     sP  &    . , , * 6 6  L K 0 
 
 
  ' D D '  /H//o /$ /
B_ B BC- C-Lw2? w2t 1 P PfR;' R;jB=) B=Jd;( d;N sQ9;??99"o:MN Q9hR* Rr<   