
    iy                       d Z ddl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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 dd
lmZmZ ddlm Z m!Z!m"Z" ddl#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* ddl+m,Z,m-Z- ddl.m/Z/m0Z0 erddl1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8 de	de9fdZ:	 d7de-ded   ddfdZ;de-de9fdZ< G d de-      Z= G d d e-      Z> G d! d"e=      Z? G d# d$e=      Z@ G d% d&e=      ZA G d' d(e-      ZB G d) d*eA      ZC G d+ d,eA      ZD G d- d.eA      ZE G d/ d0e-      ZF G d1 d2eF      ZG G d3 d4eF      ZH G d5 d6eF      ZIy)8a  
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)IterableSequence)AnyLiteralOptionalTYPE_CHECKINGUnion
OrderedSet   )graph_break_hints	polyfills	variables)create_call_functioncreate_call_methodcreate_dup_topcreate_instruction)raise_observed_exceptionunimplemented)GuardBuilderinstall_guard)
AttrSourceis_constant_sourceis_from_local_source)cmp_name_to_op_mapping
dict_items	dict_keysdict_valuesistyperaise_args_mismatchspecialize_symnode   )ValueMutationNewVariableTracker)CONSTANT_VARIABLE_NONEConstantVariable)	PyCodegenInstructionTranslator)BuiltinVariable)UserFunctionVariableobjreturnc                 L    t        |       j                  j                  dd      S )N__instancecheck__F)type__dict__get)r,   s    n/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/torch/_dynamo/variables/dicts.pywas_instancecheck_overrider4   B   s     9!!"5u==    argtxr)   c                    ddl m} |ddlm}  |j                         }	 | j                         }t        t        ||j                  |d|dt        | j                                      g       y # t        $ r t        |       }Y Ww xY w)Nr"   SourcelessBuilderr   r(   zunhashable type: z and variable tracker = args)builderr:   torch._dynamo.symbolic_convertr)   
current_txpython_type	Exceptionr0   r   	TypeErrorcreaterealize)r6   r7   r:   r)   arg_types        r3   raise_unhashablerF   F   s     +	zH-"--/??$ 
$$#H</GS[[]H[G\]
	  9s   A2 2B	B	xc                     t        | t        j                        r!| j                         s| j	                         ry| j                         S )NT)
isinstancer   LazyVariableTrackeris_realizedis_hashableis_python_hashable)rG   s    r3   rL   rL   `   s8     	1i334MMO!!r5   c                   ^    e Zd Zej                  Zdhej                  Z G d d      Ze	fde	eef   de
deddf fdZde
de
fd	Zde	eef   fd
ZdefdZde	eef   fdZde	eef   fdZde
fdZdedefdZdddddedee   de	eef   defdZdefdZdefdZdee   dedefdZd.dZd.dZddd edefd!Zddd edefd"Z d edee   fd#Z!d eddfd$Z"d/d%Z#ddd&e$e   ddfd'Z%ddd(ed&e$e   de	eef   def
 fd)Z&ddde$e   fd*Z'ddd(ede(fd+Z)dedef fd,Z*defd-Z+ xZ,S )0ConstDictVariableuser_clsc                   <    e Zd ZdZdeddfdZdefdZdede	fdZ
y)	"ConstDictVariable._HashableTrackeraB  
        Auxiliary opaque internal class that wraps a VariableTracker and makes it hashable
        This should not be seen or touched by anything outside of ConstDictVariable and its children
        Note that it's also fine to put VTs into dictionaries and sets, but doing so does not take into account aliasing
        vtr-   Nc                 T    t        |      }t        |      st        |       || _        y N)r!   rL   rF   rS   )selfrS   s     r3   __init__z+ConstDictVariable._HashableTracker.__init__}   s$    #B'B r? $DGr5   c                 ,   t        | j                  t        j                        rW| j                  j	                         s=| j                  j                         r#t        | j                  j                               S | j                  j                         S )a  
            Computes the hash value for the wrapped VariableTracker.

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

            Returns:
                The hash value of the underlying variable tracker
            )	rI   rS   r   rJ   rK   rL   hashoriginal_valueget_python_hashrV   s    r3   __hash__z+ConstDictVariable._HashableTracker.__hash__   sc     477I$A$AB++-GG'')DGG2245577**,,r5   otherc                     t        |t        j                        sy| j                  |j                  u ry| j                  j	                  |j                        S )a  
            Checks equality between two _HashableTracker instances.

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

            Args:
                other: Another _HashableTracker instance to compare with

            Returns:
                True if the underlying variable trackers are Python-equal, False otherwise
            FT)rI   rO   _HashableTrackerrS   is_python_equalrV   r^   s     r3   __eq__z)ConstDictVariable._HashableTracker.__eq__   sD     e%6%G%GHww%(("77**58844r5   )__name__
__module____qualname____doc__r$   rW   intr]   objectboolrc    r5   r3   r`   rR   v   s9    		 	4 		-c 	-&	5 	54 	5r5   r`   itemskwargsr-   Nc           	      2   d|v r|j                  d       d|v r|j                  d       t        	|   d	i | t        j                  t        fd|j                         D              sJ dt        t        df   ddffd}| j                  |      } ||j                         D ci c]  \  }} ||      | c}}      | _        | j                  rt        | j                         nd| _        |j                         | _        || _        y c c}}w )
Noriginal_itemsshould_reconstruct_allc              3   l   K   | ]+  \  }}t        |t        f      xr t        |t               - y wrU   )rI   r$   ).0rG   vHashables      r3   	<genexpr>z-ConstDictVariable.__init__.<locals>.<genexpr>   s?      
 1 q?H56 /1o./
s   14keyrR   r-   c                 0    t        |       r| S  |       S rU   )rI   )rv   rt   s    r3   make_hashablez1ConstDictVariable.__init__.<locals>.make_hashable   s     %S(33F#Fr5   Trk   )popsuperrW   rO   r`   allrl   r	   r$   _get_dict_cls_from_user_clssourcer   rp   copyro   rP   )
rV   rl   rP   rm   rx   dict_clsrG   rs   rt   	__class__s
           @r3   rW   zConstDictVariable.__init__   s    v%JJ'(#v-JJ/0"6"$55  
 
 
 	
 
	G(LLM	G1	G
 33H=u{{}Mtq!}Q/2MN
 6:[[$T[[11d 	# $jjl  Ns   -D
c                     t         t        j                  t        j                  f|v r|}nt	        fd|j
                  D              }|v sJ |       |t        j                  u rt         }|S )Nc              3   ,   K   | ]  }|v s|  y wrU   rk   )rr   baseaccepted_dict_typess     r3   ru   z@ConstDictVariable._get_dict_cls_from_user_cls.<locals>.<genexpr>   s      T=P5Ps   	)dictcollectionsOrderedDictdefaultdictnext__mro__)rV   rP   r   r   s      @r3   r|   z-ConstDictVariable._get_dict_cls_from_user_cls   s{    #[%<%<k>U>UV **H  !)!1!1 H ..88. {...Hr5   c                     | j                   j                         D ci c].  \  }}|j                  j                         |j                         0 c}}S c c}}w rU   )rl   rS   as_proxyrV   krs   s      r3   r   zConstDictVariable.as_proxy   s<    :>**:J:J:LM$!Q-MMM   3Ac                    g }| j                   j                         D ]  \  }}t        |j                  d      rt        |j                  j                        n|j                  j                         }t        |d      rt        |j                        n|j                         }|j                  | d|         ddj                  |      z   dz   S )Nvaluez: {, }rl   hasattrrS   reprr   
debug_reprappendjoinrV   rl   r   rs   key_strval_strs         r3   r   zConstDictVariable.debug_repr   s    JJ$$& 	2DAq*1!$$*@d144::&addooFWG'.q'':d177mGLLG9Bwi01	2 TYYu%%++r5   c                     | j                   j                         D ci c].  \  }}|j                  j                         |j                         0 c}}S c c}}w rU   )rl   rS   as_python_constantr   s      r3   r   z$ConstDictVariable.as_python_constant   sP     

((*
1 DD##%q';';'==
 	
 
r   c                     | j                          | j                  j                         D ci c]   \  }}|j                  j                         |" c}}S c c}}w rU   )install_dict_keys_match_guardrl   rS   r   r   s      r3   keys_as_python_constantz)ConstDictVariable.keys_as_python_constant   sE    **,9=9I9I9KLA'')1,LLLs   %Ac                     | j                   S rU   rP   r\   s    r3   r@   zConstDictVariable.python_type   s    }}r5   rS   c                     t        |t              sJ t        j                  }|j	                         xrD  ||      | j
                  v xr. t        | j
                   ||         t        j                         S rU   )rI   r$   rO   r`   rM   rl   r   DeletedVariable)rV   rS   rt   s      r3   __contains__zConstDictVariable.__contains__   sj    "o...$55!!# T

*Ttzz(2,79R9RSS	
r5   r7   r)   tree_map_fnr+   map_fnresttree_map_kwargsc           
         g }|D ]u  }|j                         }t        |t              r+t        |j                        t        | j                        k7  r| j                  |||||      c S |j                  |       w  t        | j                               }| j                  j	                         D ]E  \  }	}
g }|D ]!  }	 |j                  |j                  |	          # |
j                  |||||      ||	<   G |D 	ci c]  }	|	j                  ||	    }}	| j                  ||dd t                     S # t        $ r | j                  |||||      cY c c S w xY wc c}	w )NT)rl   ro   rp   r}   mutation_type)rD   rI   rO   lenrl   _tree_map_fallbackr   r0   KeyErrorcall_tree_maprS   cloner#   )rV   r7   r   r   r   r   other_dicts	candidatenew_items_hashedkey_trackerr   sibling_leavesupdated_original_itemss                r3   call_tree_map_branchz&ConstDictVariable.call_tree_map_branch  s    02 	*I!))+Ii):;s@TZZ@! ..VT?  y)	* ,4

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

 zz"1#'*,  
 	
#   22K "
s   ?D4=E4EEc                 V    t        d | j                  j                         D              S )Nc              3   R   K   | ]  }t        |t        j                          ! y wrU   )rI   r   r   )rr   rG   s     r3   ru   z(ConstDictVariable.len.<locals>.<genexpr>:  s%      
=>
1i7788
s   %')sumrl   valuesr\   s    r3   r   zConstDictVariable.len9  s)     
BF**BSBSBU
 
 	
r5   c                 x      j                   xs, t         fd j                  j                         D              S )Nc              3      K   | ]<  \  }}j                  j                  j                  |j                        |       > y wrU   )is_new_itemro   r2   rS   )rr   rv   r   rV   s      r3   ru   z2ConstDictVariable.has_new_items.<locals>.<genexpr>?  s?      2
U T0044SVV<eD2
s   AA)rp   anyrl   r\   s   `r3   has_new_itemszConstDictVariable.has_new_items>  s7    ** 
c 2
"jj..02
 /
 	
r5   r   r^   c                     |rS|j                         rC|j                         r3t        |j                               t        |j                               k7  S t        |      t        |      k7  S rU   )rK   idrD   )rV   r   r^   s      r3   r   zConstDictVariable.is_new_itemD  sQ     U&&(U->->-@emmo&"U]]_*===%yBuI%%r5   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r6   )rl   ro   r2   rS   r   rp   append_outputr   )rV   codegennum_argsrv   r   items         r3   reconstruct_kvs_into_new_dictz/ConstDictVariable.reconstruct_kvs_into_new_dictL  s    ****, 	JC&&**3662De,0K0KA	 	0(KLr5   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 )Nr   extend_outputcreate_load_python_moduler   create_load_attrr   s   r3   <lambda>z/ConstDictVariable.reconstruct.<locals>.<lambda>\  s3    --99+F00? r5   r   Fupdater"   POP_TOPr   r   DICT_UPDATE)rP   r   r   add_push_null_contains_self_referencer   r   r   	add_cacher   load_methodr   r   r   rV   r   s    `r3   reconstructzConstDictVariable.reconstructX  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;r5   r6   c                 ,   t         j                  |      }|| j                  vr3	 dt        |       d|j	                         }t        t        ||g       | j                  |   S # t
        $ r$ t        j                  dt        |             }Y Nw xY w)NzDict key lookup failed for z%. Debug representation of the key is r;   )
rO   r`   rl   strr   rA   r&   rC   r   r   )rV   r7   r6   rv   error_messages        r3   'getitem_const_raise_exception_if_absentz9ConstDictVariable.getitem_const_raise_exception_if_absent  s      005djj 1#c( <::=..:J9MO  %XrHzz#   0 7 71#c(<!s   A& &*BBc                     t         j                  |      }|| j                  vr=d|j                   d}t	        dd|j                   |dgt
        j                         | j                  |   S )NzDictionary key z not found during tracingzkey not found in dictzKey z>Check if the key exists in the dictionary before accessing it.gb_typecontextexplanationhints)rO   r`   rl   r   r   r   
USER_ERROR)rV   r7   r6   rv   msgs        r3   getitem_constzConstDictVariable.getitem_const  su      005djj #CII;.GHC/syyk*T&11	 zz#r5   c                 h    t         j                  |      }|| j                  vry | j                  |   S rU   )rO   r`   rl   )rV   r6   rv   s      r3   maybe_getitem_constz%ConstDictVariable.maybe_getitem_const  s/    005djj zz#r5   c                 @   || v sJ t         j                  |      }t        | j                  j	                               j                  |      }t        | j                  j	                               |   }t        |t        j                        r|j                          y y rU   )rO   r`   tuplerl   keysindexro   rI   r   rJ   rD   )rV   r6   rv   r   original_key_vts        r3   realize_key_vtz ConstDictVariable.realize_key_vt  s~    d{{005djjoo'(..s3 3 3 8 8 :;EBoy'D'DE##% Fr5   c                 n    | j                   r)t        | j                  t        j                               y y rU   )r}   r   
make_guardr   DICT_KEYS_MATCHr\   s    r3   r   z/ConstDictVariable.install_dict_keys_match_guard  s%    ;;$//,*F*FGH r5   r<   c           	         | j                   sy |j                  j                  j                  |       ry |d   | v }|d   j                   i|d   j	                         rVt        | j                  t        j                  t        |       j                  |d   j                         |                    y |d   j                   r(|r| j                  |d          y | j                          y y )Nr   )rv   invert)r}   outputside_effectsis_modifiedis_python_constantr   r   	functoolspartialr0   CONTAINS_GUARDr   r   r   )rV   r7   r<   containss       r3   install_dict_contains_guardz-ConstDictVariable.install_dict_contains_guard  s    " {{99!!--d37d?7>>!d1g&@&@&B%%T
11 G668#+| !W^^##DG,224	 r5   namec           
      L   ddl m}m} ddlm} t
        j                  }|dk(  rz |j                  |t              j                  |g|i |}	|j                  j                  j                  |        | j                  j                  |	j                         t        S |dk(  r=t!        |      dk7  rt#        ||dt!        |       d       | j%                  ||d         S |d	k(  r|s|r&t#        ||d
t!        |       dt!        |       d       | j'                          | j(                  r/|j                  j*                  j-                  | j(                         t/        |       S |dk(  r{t!        |      rt#        ||dt!        |       d       | j'                          | j(                  r/|j                  j*                  j-                  | j(                         t1        |       S |dk(  r|s|r&t#        ||d
t!        |       dt!        |       d       | j'                          | j(                  r/|j                  j*                  j-                  | j(                         |s|rt3        t4        |       t7        |       S |dk(  rn| j'                          |s|r&t#        ||d
t!        |       dt!        |       d       | j9                  | j                  j;                         t=               d       S |dk(  r_|s|r&t#        ||d
t!        |       dt!        |       d       | j'                           |j                  t!        | j                              S |dk(  r| j?                         r|xr tA        |d         }
|
stC        |d   |       | j'                          |st!        |      dk7  r&t#        ||dt!        |       dt!        |       d       |j                  j                  j                  |        |d   | j                   ||d         <   t        S |dk(  r| j?                         r|xr tA        |d         }
|
rf| j'                          d| _"        |j                  j                  j                  |        | j                  jG                   ||d                t        S tH        |   ||||      S |dk(  rt!        |      dvrt#        ||dt!        |       d       |xr tA        |d         }
|
stC        |d   |       |d   | vr+| jM                  ||       t!        |      dk(  rt        S |d   S | jO                  ||d         S |dk(  r| j?                         rt!        |      dvrt#        ||dt!        |       d       |xr tA        |d         }
|
stC        |d   |       |d   | vr5| jM                  ||       t!        |      dk(  rt3        tP        |       |d   S d| _"        |j                  j                  j                  |        | j                  jS                   ||d               S |dk(  r| j?                         rtU        | jV                  t              r;tU        | jV                  tX        jZ                        st!        |      rt#        ||       | j                  s% |j                  d      }t3        tP        ||g       | jV                  tX        jZ                  u rt!        |      dk(  sd|v rt!        |      dk(  r'|d   j]                         r|d   j_                         }n@|ja                  d      x}r!|j]                         r|j_                         }nt#        ||       | j                  jc                         \  }}n| j                  jc                         \  }}d| _"        |j                  j                  j                  |        te        jf                  |jh                  |g      S |d!k(  rv|s|r&t#        ||d
t!        |       dt!        |       d       d| _"        |j                  j                  j                  |        | j                  jk                          t        S |d"k(  rB| j?                         r1| j'                          t!        |      dk(  }t!        |      dkD  }|s|r|j                  j                  j                  |        |rltm        |d   t
              r|d   j'                          |d   }n |jn                  |t        |d         }| j                  j                  |j                         |rT|j                         D ci c]  \  }} | |j                  |            |  }}}| j                  j                  |       t        S tH        |   ||||      S |d#k(  rt!        |      s&t#        ||d$t!        |       dt!        |       d       |xr tA        |d         }
|
stC        |d   |       | jM                  ||       |d   | v } |j                  |      S |d%k(  r| j?                         rt!        |      dvr&t#        ||d&t!        |       dt!        |       d       |xr tA        |d         }
|
stC        |d   |       | j'                          |st!        |      dkD  r&t#        ||d't!        |       dt!        |       d       | jq                  |d         }||S t!        |      dk(  rt        }n|d   }|j                  j                  j                  |        || j                   ||d         <   |S |d(k(  r| j'                          |j                  j                  j                  |        |d   | vrt3        tP        |       d}t!        |      dk(  r&|d   j]                         r|d   j_                         }|r6d|v r2|d   j]                         r|ja                  d      j_                         } ||d         }| j                  js                  ||        t        S |d)k(  rntu        | t
              r^t!        |      dk7  rt#        ||dt!        |       d       |j                  |tv        jx                        j{                  || |d   gi       S |d*k(  r/ |j                  | jK                  |d)||      j|                         S |d+k(  rlt!        |      dk7  rt#        ||dt!        |       d       |d   }tu        |t
        td        j~                  td        j                  f      r| jV                  t        ur| jV                  }| }n tm        |t
              sJ |jV                  }|}|j'                          |j9                  | j                  j;                         t=               d |,      }|d   j'                          |j                  j                  |d   j                         |S d-| j                         j                   d.|j                         j                   d/}t3        t4        ||g       y |d0k(  r| jK                  |d"||       | S |d1k(  rwdd2lCmD} | j(                  rDt        | j(                        s/|j                  j*                  j-                  | j(                          || j                  |      t=               3      S tH        |   ||||      S c c}}w )4Nr"   )r*   r&   r9   rW   __getitem__1 args argsr   rl   0 args and 0 kwargs
 args and  kwargsr   z0 argsr   r~   )rl   r   r}   __len____setitem__r   z2 args and 0 kwargs__delitem__Tr2   )r"   r   z1 or 2 argsry   popitemzpopitem(): dictionary is emptyr;   last)r  clearr   r   zmore than 1 args and 0 kwargs
setdefaultz1 or 2 args and 0 kwargszat most 2 args and 0 kwargsmove_to_endrc   __ne____or__)rl   r   r}   rP   z$unsupported operand type(s) for |: 'z'and ''__ior____iter__ListIteratorVariabler   )G r*   r&   r=   r:   rO   r`   rC   r   	call_dictr   r   mutationrl   r   r%   r   r    r   r   r}   guard_on_key_orderaddDictItemsVariableDictKeysVariabler   rB   DictValuesVariabler   r~   r#   
is_mutablerL   rF   rp   r  rz   call_methodr   r   r   ry   
issubclassrP   r   r   r   r   r2   r  r   TupleVariablerS   r  rI   call_custom_dictr   r  r   r   dict___eq__call_functionr   UserDefinedDictVariableDefaultDictVariabler@   rd   listsr  r   unpack_var_sequence)rV   r7   r  r<   rm   r*   r&   r:   rt   temp_dict_vtarg_hashabler   r  rs   r   has_arg
has_kwargsdict_vtkwargs_hashabler   r   rG   rv   r^   rP   to_cpynew_dict_vterr_msgr  r   s                                r3   r"  zConstDictVariable.call_method  s    	8.$55:G,33B=GG#L II""++D1JJl001))]"4yA~#Bh3t9+U8KL??DGLLW_v#)4ykCK=@	 ..0{{		,,00=$T**V^4y#Bh3t9+U8KL..0{{		,,00=#D))Xv#)4ykCK=@	 ..0{{		,,00=v(B7%d++V^..0v#)4ykCK=@	 ::jjoo'7G7IRV    Yv#)4ykCK=@	 ..0*#**3tzz?;;]"t'88KQ$8L a"-..0Ta#)4ykCK=@	 II""++D1,0GDJJxQ()))]"t'88KQ$8L224.2+		&&//5

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

8DG,-]"..0II""++D1Awd"(26D4yA~$q'"<"<">Aw113&F*vf~/P/P/Rzz&)<<>47#CJJ""3T"2))X&##
 4yA~#Bh3t9+U8KL$++B	0E0EFTTT47OR  X*#**$$R4@FFF  X4yA~#Bh3t9+U8KLGE& %5511 ==,#}}H!F%e->???$~~H"F446$ll**//+"2"4%	 +  Q557!!((a7"" ;4;K;K;M;V;V:W X!--/889<  )BgYGYR48KZ3{{#5dkk#B		,,00='((,<L<N  7&r4v>>{'s   0#| c                 t    | j                          | j                  D cg c]  }|j                   c}S c c}w rU   )r   rl   rS   )rV   r7   rG   s      r3   r+  z%ConstDictVariable.unpack_var_sequenceR  s*    **,"jj))))s   5c                     t         fdt        t        j                  t        j                  fD              rRt         j                  |      rt        j                  d      S  j                  t        u rt        j                  d      S d j                   d}t        dd j                   |dgt        j                  	       y )
Nc              3   :   K   | ]  }j                   |u   y wrU   r   )rr   trV   s     r3   ru   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   r   r   r   r   r   rP   r&   rC   r   r   SUPPORTABLE)rV   r7   r  r   s   `   r3   call_obj_hasattrz"ConstDictVariable.call_obj_hasattrV  s    
  
K33[5L5LM
 
 t}}d+'..t44}}$'..u55DMM?*;<3T]]O,="..		
r5   c                 B    | j                          t        |   di |S Nrk   )r   rz   r   rV   rm   r   s     r3   r   zConstDictVariable.cloneo  s!    **,w}&v&&r5   c                      y)zP
        Dictionaries are mutable and therefore not hashable in Python.
        Frk   r\   s    r3   rM   z$ConstDictVariable.is_python_hashables       r5   r   r'   r-   Nr-   N)-rd   re   rf   r   DICT_CONTAINSr   r$   _nonvar_fieldsr`   r   r0   r   rW   r|   r   r   r   r   r   r@   rj   r   r   r   rh   r   r   r   r   r   r   r   r   r   r   r   listr   r"  r+  r&   r:  r   rM   __classcell__r   s   @r3   rO   rO   n   s   !//N 			'	'N
45 45r %!O_45%! %! 	%!
 
%!ND T &N$sCx. N,C ,
DcN 
Mc?.B)C MT 
 
4 
0
#0
 ,0
  	0

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


t 
&o.&7F&	&
M-<^)0?	")0?	" 8O;T &/ &d &I&5)&515o1F&5	&5Pl?#l? l? ?#	l?
 S/)*l? 
l?\*&= *$BW *
)
14
	
2'c 'o 'D r5   rO   c            
            e Zd Zdededdf fdZdefdZdddee	   fd	Z
dd
Zdddedee	   deee	f   de	f
dZdddedef fdZ xZS )MappingProxyVariabledv_dictrm   r-   Nc                 V    t        |   di | t        |t              sJ || _        y r<  )rz   rW   rI   rO   rI  rV   rI  rm   r   s      r3   rW   zMappingProxyVariable.__init__|  s+    "6"'#4555r5   c                 "    t         j                  S rU   )typesMappingProxyTyper\   s    r3   r@   z MappingProxyVariable.python_type  s    %%%r5   r7   r)   c                 8    | j                   j                  |      S rU   )rI  r+  rV   r7   s     r3   r+  z(MappingProxyVariable.unpack_var_sequence  s    ||//33r5   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 )NrN  )r   r   rM  r   r   s   r3   r   z2MappingProxyVariable.reconstruct.<locals>.<lambda>  s4    G))55e<,,-?@ r5   r"   F)r}   r   r   r9  r   rI  r   r   )rV   r   r   s    ` r3   r   z MappingProxyVariable.reconstruct  s    ;;<T[[M JL L  ?"4;;-0Y&22	 		
 	21e<=r5   r  r<   c                     | j                   rE|j                  j                  j                         r!d}t	        dd| j                    d|ddg       | j
                  j                  ||||      S )Na  A dict has been modified while we have an existing mappingproxy object. A mapping proxy object, as the name suggest, proxies a mapping object (usually a dict). If the original dict object mutates, it is reflected in the proxy object as well. For an existing proxy object, we do not know the original dict it points to. Therefore, for correctness we graph break when there is dict mutation and we are trying to access a proxy object.z-mapping proxy affected by dictionary mutationrR  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   rI  r"  )rV   r7   r  r<   rm   r   s         r3   r"  z MappingProxyVariable.call_method  ss     ;;29911LLN7  G"4;;-/GHdh	 ||''D$??r5   c                     | j                         t        j                  u r/t        j                  |t        j                  j
                  v       S t        |   ||      S rU   )r@   rM  rN  r&   rC   r1   rz   r:  rV   r7   r  r   s      r3   r:  z%MappingProxyVariable.call_obj_hasattr  sP     !7!77#**453I3I3R3R+RSSw'D11r5   r@  )rd   re   rf   rO   r   rW   r0   r@   rD  r$   r+  r   r   r   r"  r&   r:  rE  rF  s   @r3   rH  rH  z  s     1 S T 
&T &4&= 4$BW 4>6@#@ @ ?#	@
 S/)*@ 
@:2)2142	2 2r5   rH  c                   .    e Zd ZddZdddee   ddfdZy)	NNModuleHooksDictVariabler-   Nc                      y rU   rk   r\   s    r3   r   z7NNModuleHooksDictVariable.install_dict_keys_match_guard  s    r5   r7   r)   r<   c                      y rU   rk   rV   r7   r<   s      r3   r   z5NNModuleHooksDictVariable.install_dict_contains_guard  s     	r5   rA  )rd   re   rf   r   rD  r$   r   rk   r5   r3   rY  rY    s)    )15o1F	r5   rY  c                        e Zd Z	 ddeeef   dedee   deddf
 fdZde	f fdZ
def fd	Zed
ede	fd       Zdddedee   deeef   def
 fdZdddedef fdZddZ xZS )r)  Nrl   rP   default_factoryrm   r-   c                 n    t        |   ||fi | |t        j                  u sJ |t        }|| _        y rU   )rz   rW   r   r   r%   r^  )rV   rl   rP   r^  rm   r   s        r3   rW   zDefaultDictVariable.__init__  s@     	3F3;22222"4O.r5   c                 t    | j                   t        t        t        fvr| j                  syt
        |          S )NF)r^  rD  r   r   rl   rz   r   rV   r   s    r3   r   z&DefaultDictVariable.is_python_constant  s1     eT'::4::w)++r5   c                 z    | j                   J d| j                   j                          dt        |           dS )Nzdefaultdict(r   ))r^  r   rz   ra  s    r3   r   zDefaultDictVariable.debug_repr  sF    ##///4//::<=R@R@T?UUVW	
r5   r6   c                     t        | t        j                  t        j                  j                  t        j                  j
                  f      xs* t        | t        j                        xr | j                  d u S rU   )rI   r   r*   	functionsBaseUserFunctionVariablePolyfilledFunctionVariabler&   r   r   s    r3   is_supported_argz$DefaultDictVariable.is_supported_arg  se    ))##<<##>>
 Q i889Ocii4>O	Qr5   r7   r)   r  r<   c                    |dk(  rt        |      dk7  rt        ||dt        |       d       |d   | v r| j                  ||d         S t        | j                  t
              r-| j                  j                  t        t        ||d   g       y | j                  j                  |g i       }t        | -  |d|d   |g|       |S |dk(  r| j                  rt        |      d	k7  rt        ||d
t        |       d       t        |d   t
              r[|d   j                  dk(  rI| j                  |d         r5|j                  j                  j!                  |        |d   | _        t"        S t        | -  ||||      S |dk(  rat        |      dk7  rt        ||dt        |       d       t%        j&                  t(        j*                        j                  || |d   gi       S t        | -  ||||      S )Nr  r"   r  r  r   r;   r
  __setattr__r   z2 argsr^  rc   )r   r    r   r   r^  r&   r   r   r   r'  rz   r"  r!  rh  r   r   r  r%   r   r+   r   r&  )rV   r7   r  r<   rm   default_varr   s         r3   r"  zDefaultDictVariable.call_method  s    = 4yA~#Bh3t9+U8KLAw$))"d1g66 4//1AB,,22:,Xra	J"&"6"6"D"DRR"PKG'MDG[+A6 '&]"t4yA~#Bh3t9+U8KL tAw 01d1gmmGX6X''Q0		&&//5'+Aw$--7&r4v>>X4yA~#Bh3t9+U8KL11)2G2GHVVT47OR  7&r4v>>r5   c                 F    |dk(  r| j                   S t        | 	  ||      S )Nr^  )r^  rz   var_getattrrW  s      r3   rm  zDefaultDictVariable.var_getattr&  s,    
 $$'''w"2t,,r5   c                    j                  fd        | j                         j                  g t        dd      t	                      j                  |        j                  t	                      j                  d       | j                         j                  g t        d      t        d             y )Nc                  n     j                   j                  t               j                  d      g      S )Nr   r   r   s   r3   r   z1DefaultDictVariable.reconstruct.<locals>.<lambda>2  s3    G))55kB,,]; r5   r"   Fr   r   )r   r^  r   r   r   r   r   r   r   r   r   r   s    `r3   r   zDefaultDictVariable.reconstruct/  s    	
 	$$%%a/ 	
 	$n./H%**73#A&"9-	
r5   rU   r@  )rd   re   rf   r   r$   r0   r   r   rW   rj   r   r   r   staticmethodrh  rD  r"  rm  r   rE  rF  s   @r3   r)  r)    s    
 6:	/O_45/ / "/2	/
 / 
/,D ,
C 
 Qo Q$ Q Q,?#,? ,? ?#	,?
 S/)*,? 
,?\-#- - 
	-
r5   r)  c            
       8    e Zd ZdZej
                  Zdee   de	ddf fdZ
defdZeded   fd	       Zedefd
       Zde	fdZdefdZde	fdZddZddde	dee   deeef   def
dZdddedee   deeef   def
 fdZddZdddedefdZddZ xZS )SetVariablez.We model a sets as dictionary with None valuesrl   rm   r-   Nc                    g }|D ]M  }t        |t        j                        r|j                  |       /|j                  |j	                                O t
        j                  |t        j                               }t        | (  |fi | y rU   )rI   rO   r`   r   rD   r   fromkeysrr  _default_valuerz   rW   )rV   rl   rm   realized_itemsr   r   s        r3   rW   zSetVariable.__init__U  s{      	6D$ 1 B BC%%d+ %%dlln5	6 nk.H.H.JK)&)r5   c                 D   | j                   syg }| j                   D ]l  }t        |t        j                        r|j                  n|}t        |d      rt        |j                        n|j                         }|j                  |       n ddj                  |      z   dz   S )Nzset()r   r   ,r   )rl   rI   rO   r`   rS   r   r   r   r   r   r   )rV   rl   rs   rS   r   s        r3   r   zSetVariable.debug_reprk  s    zz!EZZ &'+<+M+MNQTTTU,3B,@$rxx.bmmoW%& %(3..r5   rR   c                 H    t        | j                  j                               S rU   )setrl   r   r\   s    r3   	set_itemszSetVariable.set_itemsv  s    4::??$%%r5   c                      t         S rU   )r%   rk   r5   r3   ru  zSetVariable._default_valuez  s
     &%r5   c                 p    | j                   D ch c]  }|j                  j                          c}S c c}w rU   )r{  rS   r   rV   r   s     r3   r   zSetVariable.as_proxy  s$    )-8A888   !3c                     t         S rU   )rz  r\   s    r3   r@   zSetVariable.python_type  s    
r5   c                 p    | j                   D ch c]  }|j                  j                          c}S c c}w rU   )r{  rS   r   r~  s     r3   r   zSetVariable.as_python_constant  s'    37>>Ba'')BBBr  c                     |j                  | j                  D cg c]  }|j                   c}       |j                  t	        dt        | j                                     y c c}w )N	BUILD_SETr   )foreachr{  rS   r   r   r   rV   r   rG   s      r3   r   zSetVariable.reconstruct  sE    t~~6!670#dnnBUVW 7s   A$r7   r)   fnr<   c                    	  || g|D cg c]  }|j                          c}i |j                         D ci c]  \  }}||j                          c}}}t        j                  |      S c c}w c c}}w # t        $ rL}	t        t	        |	      |t        t        t        j                  |	j                                     Y d }	~	qd }	~	ww xY w)Nr;   )r   rl   rA   r   r0   rD  mapr&   rC   r<   r$   build)
rV   r7   r  r<   rm   rG   r   rs   resexcs
             r3   _fast_set_methodzSetVariable._fast_set_method  s    	37-$-@Q!&&(@9?HA1a**,,HC $$R-- AH 	$S	2D-=-D-Dchh)O$P 	s3   	A: A/A: A4A: /A: :	CAC

Cr  c                    ddl m} ddlm} |dv rM |||      rD| j	                         t
        u r.| j	                         }| j                  |t        ||      ||      S |dk(  r |j                  |t
              j                  |g|i |}|j                  j                  j                  |        | j                  j                          | j                  j                  |j                         t         S |dk(  rS|st#        |      dk7  r&t%        ||dt#        |       d	t#        |       d
       d}|d   t&        j)                         g}n|dk(  rd|s|r&t%        ||dt#        |       d	t#        |       d
       	 | j*                  j-                         j.                  }	t<        | }  ||	g|       |	S |dk(  rl|st#        |      dk7  r&t%        ||dt#        |       d	t#        |       d
       |j                  |t@        jB                        jE                  || |d   gi       S |dk(  r`|rt%        ||dt#        |       d
       |j                  |t@        jF                        jE                  || g|d| jI                         i      S |dk(  rP|rt%        ||dt#        |       d
       |j                  |t@        jJ                        jE                  || g|i       S |dk(  r`|rt%        ||dt#        |       d
       |j                  |t@        jL                        jE                  || g|d| jI                         i      S |dk(  r`|rt%        ||dt#        |       d
       |j                  |t@        jN                        jE                  || g|d| jI                         i      S |dk(  rP|rt%        ||dt#        |       d
       |j                  |t@        jP                        jE                  || g|i       S |dk(  rz|st#        |      dk7  r&t%        ||dt#        |       d	t#        |       d
       |j                  |t@        jR                        jE                  || g|d| jI                         i      S |dk(  rj|st#        |      dk7  r&t%        ||dt#        |       d	t#        |       d
       |j                  |t@        jT                        jE                  || g|i       S |dk(  r`| jW                         rP|rt%        ||dt#        |       d
       |j                  |t@        jX                        jE                  || g|i       S |dk(  ra|st#        |      dk7  r&t%        ||dt#        |       d	t#        |       d
       |d   | vrt3        t0        ||       t<        | }  |d||      S |dk(  rU|st#        |      dk7  r&t%        ||dt#        |       d	t#        |       d
       |d   | v rt<        | }  |d||      S t         S |dv rt#        |      dk7  rt%        ||dt#        |       d        tZ        j\                  tZ        j^                  d}|d   ja                         }tc        |t&              s(|j                  |t
              jE                  ||gi       }|j                  ||je                  |            jE                  || |gi       S |d!v rddddd!je                  |      }tg        |d   t&        th        jj                  f      sQt9        j                  d"| d#| jm                          d$|d   jm                          d%      }t3        tn        ||g       |J | j?                  ||||      S |d&v rtg        |d   t&        th        jj                  f      sQt9        j                  d"| d#| jm                          d$|d   jm                          d%      }t3        tn        ||g       ddddd&je                  |      }|J | j?                  ||||       | S |d'k(  rwtg        |d   t&        th        jj                  f      st9        j                  d(      S | j?                  |d||      }t9        j                  t#        |j*                        dk(        S |tp        v rutg        |d   t&        th        jj                  f      st9        j                  tr              S t9        j                  tq        |   | j*                  |d   j*                              S t<        | }  ||||      S # t0        $ rH}
t3        t0        |t5        t7        t8        j                  |
j:                                     Y d }
~
d }
~
ww xY w))Nr   )check_constant_argsr"   r9   )
isdisjointunionintersection
differencesymmetric_differencerW   r  z1 args and 0 kwargsr  r  r
  r   ry   r  r;   r  r  z0 kwargsclsintersection_updater  r  zExpect: 0 kwargs, Actual: difference_updater  symmetric_difference_updater   removediscard)issubset
issupersetr  r  )__and__r  __xor____sub__z unsupported operand type(s) for z: 'z' and 'r  )__iand__r  __ixor____isub__rc   F):utilsr  r=   r:   r@   rz  r  getattrrC   call_setr   r   r  rl   r  r   r%   r   r    rr  ru  r{  ry   rS   r   r   rD  r  r&   r<   rz   r"  r   set_isdisjointr'  set_intersectionpython_type_varset_intersection_update	set_unionset_differenceset_difference_updateset_symmetric_differenceset_symmetric_difference_updater!  
set_updateoperatorlegerD   r   r2   rI   r   UserDefinedSetVariablepython_type_namerB   r   NotImplemented)rV   r7   r  r<   rm   r  r:   py_typetemp_set_vtresulteopr^   mr   rr   s                   r3   r"  zSetVariable.call_method  s	    	0.  $D&1  "c)&&(G((WWd-CT6RR:D+222s;DD#K II""++D1JJJJk//0))U]Ta#)4ykCK=@	 !DG[779:DU]#)4ykCK=@	*...*<*<*>*A*A GD6(F;M\!Ta#)4ykCK=@	 %++B	0H0HIWWT47OR  ^##BjS[M:QR$++I..m,,./ **#BjS[M:QR$++I55mBr23 W_#BjS[M:QR$++B	0C0CDRR,,./ 
 \!# :3v;-wO %++B	0H0HIWW,,./ 
 ((#BjS[M:QR$++I33mBr23 ++Ta#)4ykCK=@	 %++I66m,,./ 22Ta#)4ykCK=@	 %++I==mBr23 X$//"3#BjS[M:QR$++B	0D0DESSTMDM2  XTa#)4ykCK=@	 Awd"(2DA7&r5$??YTa#)4ykCK=@	 Aw$w*2udFCC--//4yA~#Bh3t9+U8KL %KK&kkB GOO%E%-)00S9GGUGUWX$++Bt=KKT5M2  @@)!1'	
 c$i  d1gY5U5U'VW&--6tfC@U@U@W?XX_`def`g`x`x`z_{{|} )BcUC= =##B488DDd1gY5U5U'VW&--6tfC@U@U@W?XX_`def`g`x`x`z_{{|} )BcUC1#9/	
 c$i  = =RD&1KXd1gY5U5U'VW'..u55  %;T6JA#**3q{{+;q+@AA++d1gY5U5U'VW'..~>>#**&t,T^^T!W=N=NO  w"2tT6::Q  (btC0@0G0G,P'Q s    $d; ;	f=ffc                 4    t        j                  t              S rU   )r   r*   rz  r\   s    r3   r  zSetVariable.python_type_var  s    ((--r5   r6   c                     t        d      )NzIllegal to getitem on a set)RuntimeError)rV   r7   r6   s      r3   r   zSetVariable.getitem_const  s     899r5   c                      y rU   rk   r\   s    r3   r   z)SetVariable.install_dict_keys_match_guard      r5   r@  r-   r*   rA  )rd   re   rf   rg   r   SET_CONTAINSr   r   r$   r   rW   r   r   propertyrz  r{  rp  ru  r   r0   r@   r   r   rD  r   r  r"  r  r   r   rE  rF  s   @r3   rr  rr  P  sa   8!..N*(* * 
	*,	/C 	/ &3CD & & &O & &9# 9T CC CX.#. . ?#	.
 S/)*. 
.&_;#_; _; ?#	_;
 S/)*_; 
_;B.:):0?:	:
r5   rr  c            
            e Zd Zdeddf fdZdeee      fdZdddede	f fd	Z
ddded
ee	   deee	f   de	f
 fdZddd
ee	   deee	f   ddfdZ xZS )OrderedSetClassVariablerm   r-   Nc                 $    t        |   di | y r<  )rz   rW   r=  s     r3   rW   z OrderedSetClassVariable.__init__  s    "6"r5   c                     t         S rU   r
   r\   s    r3   r   z*OrderedSetClassVariable.as_python_constant      r5   r7   r)   r  c                     |dk(  r6ddl m} | j                  rt        | j                  |      }nd } || ||      S t        |   ||      S )N__new__r"   )GetAttrVariable)r}   )miscr  r}   r   rz   rm  )rV   r7   r  r  attr_sourcer   s        r3   rm  z#OrderedSetClassVariable.var_getattr  sK    9-{{(d;""4kBB7&r400r5   r<   c           
      ~   ddl m} |dk(  rUt        |      dk7  s|r&t        ||dt        |       dt        |       d       t	        j
                  g t                     S t        t        |      }||v r7t        |d	   t        j                        r|d	   j                  |||dd  |      S t        | -  ||||      S )
Nr"   )set_methodsr  r   z'OrderedSet.__new__ only accepts one argr  r  r  r   )builtinr  r   r    r   OrderedSetVariabler#   r  rz  rI   rr  r"  rz   )rV   r7   r  r<   rm   r  resolved_fnr   s          r3   r"  z#OrderedSetClassVariable.call_method  s     	)94yA~#=4ykCK=A //BRBTUUc4(+%*T!Wi>S>S*T7&&r4ab6BBw"2tT6::r5   r  c           
          t        |      dkD  s|r&t        |ddt        |       dt        |       d       t        |      dk(  rg }n|d   j                  |      }t        j                  |t                     S )Nr"   r   zOrderedSet only accepts one argr  r  r   r  )r   r    force_unpack_var_sequencer   r  r#   )rV   r7   r<   rm   rl   s        r3   r'  z%OrderedSetClassVariable.call_function  sy     t9q=F1t9+ZF}G= t9>EG55b9E++EAQASTTr5   )rd   re   rf   r   rW   r0   r   r   r   r$   rm  rD  r   r"  r   r'  rE  rF  s   @r3   r  r    s    # # #DC$9 
15 
1S 
1_ 
1;#; ; ?#	;
 S/)*; 
;4U#U 'U S/)*	U
 
Ur5   r  c                   V    e Zd ZdefdZdee   fdZdeee      fdZ	de
fdZddZy)	r  r-   c                 6   | j                   syg }| j                   D ]e  \  }}t        |j                  d      rt        |j                  j                        n|j                  j                         }|j                  |       g ddj                  |      z   dz   S )NzOrderedSet([])r   zOrderedSet([rx  ])r   )rV   rl   r   rs   r   s        r3   r   zOrderedSetVariable.debug_repr  s    zz#!E

 &1(/g(>D$ADDOODU  W%	&
 "CHHUO3d::r5   c                     t        | j                  D cg c]  }|j                  j                          c}      S c c}w rU   )r   r{  rS   r   r~  s     r3   r   z%OrderedSetVariable.as_python_constant  s,    dnnM144224MNNM   !<c                     t         S rU   r
   r\   s    r3   r@   zOrderedSetVariable.python_type  r  r5   c                     t               S rU   )r  r\   s    r3   r  z"OrderedSetVariable.python_type_var  s    &((r5   Nc                 2   j                  fd       j                  | j                  D cg c]  }|j                   c}       j	                  t        dt        | j                                     j                  t        dd             y c c}w )Nc                  (     j                  dd      S )Nztorch.utils._ordered_setr   )load_import_fromr   s   r3   r   z0OrderedSetVariable.reconstruct.<locals>.<lambda>  s    G,,-GV r5   
BUILD_LISTr   r"   F)	r   r  r{  rS   r   r   r   r   r   r  s    ` r3   r   zOrderedSetVariable.reconstruct  so    V	
 	t~~6!6703t~~CVWX21e<= 7s   Br@  )rd   re   rf   r   r   r   r   r   r0   r@   r  r  r   rk   r5   r3   r  r    sG    
;C 
;OJsO OT*S/2 )!8 )>r5   r  c            
            e Zd ZdefdZeded   fd       ZdefdZ	ddZ
defdZddZd	d
dedee   deeef   def
 fdZded   fdZdefdZdedefdZ xZS )FrozensetVariabler-   c                 0   | j                   syg }| j                   D ]b  }t        |j                  d      rt        |j                  j                        n|j                  j                         }|j                  |       d ddj                  |      z   dz   S )Nzfrozenset()r   r   rx  r   r   rV   rl   r   r   s       r3   r   zFrozensetVariable.debug_repr  s{    zz !EZZ &(/g(>D$ADDOODU  W%	&
 %(3..r5   rR   c                 6    | j                   j                         S rU   )rl   r   r\   s    r3   r{  zFrozensetVariable.set_items  s    zz  r5   c                     t         S rU   )	frozensetr\   s    r3   r@   zFrozensetVariable.python_type      r5   c                 4    t        j                  t              S rU   )r   r*   r  r\   s    r3   r  z!FrozensetVariable.python_type_var  s    ((33r5   c                     t        | j                  D ch c]  }|j                  j                          c}      S c c}w rU   )r  r{  rS   r   r~  s     r3   r   z$FrozensetVariable.as_python_constant  s,    T^^L!$$113LMMLr  c                    j                  fd       j                  | j                  D cg c]  }|j                   c}       j	                  t        dt        | j                              gt        dd             y c c}w )Nc                  F     j                   j                  d      g      S )Nr  )r   create_load_globalr   s   r3   r   z/FrozensetVariable.reconstruct.<locals>.<lambda>  s%    G))..{; r5   r  r   r"   F)r   r  r{  rS   r   r   r   r   r  s    ` r3   r   zFrozensetVariable.reconstruct
  sq    	
 	t~~6!67"<S5HI%a/	
 7s   Br7   r)   r  r<   rm   c                     |dv rt        d| d      |dk(  rt        S |dv r't        |   ||||      }t	        |j
                        S t        |   ||||      S )Nr  ry   r   r  r  r  Illegal call_method z on a frozensetrW   )r~   r  r  r  )r  r%   rz   r"  r  rl   )rV   r7   r  r<   rm   r  r   s         r3   r"  zFrozensetVariable.call_method  s|     II!5dV?KLLZ *) 
 
 #BdF;A$QWW--w"2tT6::r5   Tc                      y)zB
        Frozensets are immutable and hashable in Python.
        Trk   r\   s    r3   rM   z$FrozensetVariable.is_python_hashable6  s     r5   c                 4    t        | j                               S rU   )rY   r   r\   s    r3   r[   z!FrozensetVariable.get_python_hash<  s    D++-..r5   r^   c                 h    t        |t              xr! | j                         |j                         k(  S rU   )rI   r$   r   rb   s     r3   ra   z!FrozensetVariable.is_python_equal?  s1    uo. H'')U-E-E-GG	
r5   r  r@  )rd   re   rf   r   r   r  rz  r{  r0   r@   r  r   r   r   rD  r$   r   r"  r   rM   rh   r[   ri   rj   ra   rE  rF  s   @r3   r  r    s    
/C 
/ !3CD ! !T 4NC N
 ;#; ; ?#	;
 S/)*; 
;8GDM / /
V 
 
r5   r  c            
            e Zd ZdefdZddZdddee   ddfdZe	de
fd	       Zdefd
Zde
fdZdddedee   deeef   def
 fdZ xZS )DictKeySetVariabler-   c                 0   | j                   syg }| j                   D ]b  }t        |j                  d      rt        |j                  j                        n|j                  j                         }|j                  |       d ddj                  |      z   dz   S Nzdict_keys([])r   zdict_keys([rx  r  r   r  s       r3   r   zDictKeySetVariable.debug_reprG  s{    zz"!EZZ &(/g(>D$ADDOODU  W%	&
 !388E?2T99r5   Nc                      y rU   rk   r\   s    r3   r   z0DictKeySetVariable.install_dict_keys_match_guardS  r  r5   r7   r)   r<   c                      y rU   rk   r\  s      r3   r   z.DictKeySetVariable.install_dict_contains_guardW  s     	r5   c                     | j                   S rU   )rl   r\   s    r3   r{  zDictKeySetVariable.set_items]  s    zzr5   c                     t         S rU   r   r\   s    r3   r@   zDictKeySetVariable.python_typea  r  r5   c                     t         j                  | j                  D ch c]  }|j                  j	                          c}d       j                         S c c}w rU   )r   rt  r{  rS   r   r   r~  s     r3   r   z%DictKeySetVariable.as_python_constantd  s>    }}04?1QTT$$&?

$&	?s   !Ar  rm   c                 N    |dv rt        d| d      t        | 	  ||||      S )Nr  r  z on a dict_keys)r  rz   r"  )rV   r7   r  r<   rm   r   s        r3   r"  zDictKeySetVariable.call_methodi  s9     II!5dV?KLLw"2tT6::r5   rA  )rd   re   rf   r   r   r   rD  r$   r   r  r   r{  r0   r@   r   r   r"  rE  rF  s   @r3   r  r  F  s    
:C 
:)15o1F	 3  T C 
	;#	; 	; ?#		;
 S/)*	; 
	; 	;r5   r  c            
            e Zd ZU dZdZee   ed<   dede	ddf fdZ
ede	fd       Zedee   fd	       Zd
ddee   fdZddZd
ddedefdZd
ddedee   deeef   def
 fdZ xZS )DictViewVariablezu
    Models _PyDictViewObject

    This is an "abstract" class. Subclasses will override kv and the items method
    NkvrI  rm   r-   c                 v    t        |   di | | j                  dv sJ t        |t              sJ || _        y )N)r   r   rl   rk   )rz   rW   r   rI   rO   rI  rK  s      r3   rW   zDictViewVariable.__init__~  s>    "6"ww5555'#4555r5   c                 |    | j                   J  t        | j                  j                  | j                                S rU   )r   r  rI  rl   r\   s    r3   
view_itemszDictViewVariable.view_items  s2    ww"""3wt||))477355r5   c                     t         rU   )NotImplementedErrorr\   s    r3   view_items_vtzDictViewVariable.view_items_vt  s
     "!r5   r7   r)   c                     | j                   S rU   )r  rP  s     r3   r+  z$DictViewVariable.unpack_var_sequence  s    !!!r5   c                     | j                   J  || j                         |j                  | j                          |j                  d       y )Nr   )r   rI  r   r"  r   s     r3   r   zDictViewVariable.reconstruct  s>    ww"""DGG$Ar5   r  c                     | j                   J || j                         j                  v rt        j                  d      S t        j                  d      S )NTF)r   r@   r1   r&   rC   )rV   r7   r  s      r3   r:  z!DictViewVariable.call_obj_hasattr  sM     ww"""4##%...#**400&&u--r5   r<   c                    |dk(  r| j                   j                  ||||      S |dk(  r"ddlm}  || j                  t                     S |dk(  r#t        j                  | j                               S t        |   ||||      S )Nr	  r  r"   r  r  __repr__)
rI  r"  r*  r  r  r#   r&   rC   r   rz   rV   r7   r  r<   rm   r  r   s         r3   r"  zDictViewVariable.call_method  s     9<<++BdFCCZ3'""2B2D  Z#**4??+<==w"2tT6::r5   r@  )rd   re   rf   rg   r   r   r   __annotations__rO   r   rW   r  r  rD  r$   r  r+  r   r&   r:  r   r"  rE  rF  s   @r3   r  r  u  s     B 1 S T  6C 6 6 "tO4 " "
"&= "$BW ".).14.	.;#; ; ?#	;
 S/)*; 
; ;r5   r  c            
            e Zd ZdZedee   fd       Zedee   fd       Z	de
fdZdefdZddd	ed
ee   deeef   def
 fdZ xZS )r  r   r-   c                 ,    t        | j                        S rU   )rz  r  r\   s    r3   r{  zDictKeysVariable.set_items  s    4??##r5   c                 T    | j                   D cg c]  }|j                   c}S c c}w rU   )r  rS   )rV   rG   s     r3   r  zDictKeysVariable.view_items_vt  s      #oo....s   %c                     t         S rU   r  r\   s    r3   r@   zDictKeysVariable.python_type  r  r5   c                 0   | j                   syg }| j                   D ]b  }t        |j                  d      rt        |j                  j                        n|j                  j                         }|j                  |       d ddj                  |      z   dz   S r  r  r   rS   r   r   r   r   r   r  s       r3   r   zDictKeysVariable.debug_repr  s{    "!E__ &(/g(>D$ADDOODU  W%	&
 !388E?2T99r5   r7   r)   r  r<   rm   c                    |dk(  r| j                   j                  ||||      S |dv r6t        | j                  |      } ||d   j                        }t	        |      S |t
        v rkt        |d   t        t        f      st        j                  t              S t        j                  t        |   | j                  |d   j                              S t        |   ||||      S )Nr   )r  r  r  r  r  r  r  r  r   )rI  r"  r  r{  rr  r   rI   r  r&   rC   r  rz   )rV   r7   r  r<   rm   r  r  r   s          r3   r"  zDictKeysVariable.call_method  s     >!<<++BdFCC 	
 	
 -A$q'##$Aq>!))d1g5E'FG'..~>>#**&t,T^^T!W=N=NO  w"2tT6::r5   )rd   re   rf   r   r  rz  r$   r{  rD  r  r0   r@   r   r   r   r"  rE  rF  s   @r3   r  r    s    	B$3/ $ $ /tO4 / /T 
:C 
:;#; ; ?#	;
 S/)*; 
; ;r5   r  c                   D    e Zd ZdZedee   fd       ZdefdZ	de
fdZy)r   r   r-   c                 ,    t        | j                        S rU   )rD  r  r\   s    r3   r  z DictValuesVariable.view_items_vt  s    DOO$$r5   c                     t         S rU   )r   r\   s    r3   r@   zDictValuesVariable.python_type  s    r5   c                     | j                   syg }| j                   D ]D  }t        |d      rt        |j                        n|j	                         }|j                  |       F ddj                  |      z   dz   S )Nzdict_values([])r   zdict_values([rx  r  )r  r   r   r   r   r   r   )rV   rl   rs   r   s       r3   r   zDictValuesVariable.debug_repr  sh    $!E__ &+21g+>$qww-ALLNW%& #SXXe_4t;;r5   N)rd   re   rf   r   r  rD  r$   r  r0   r@   r   r   rk   r5   r3   r   r     s=    	B%tO4 % %T <C <r5   r   c            
            e Zd Z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e   d
ee
ef   def
 fdZded   fdZ xZS )r  rl   r-   c                     | j                   D cg c]&  \  }}t        j                  |j                  |g      ( c}}S c c}}w rU   )r  r   r$  rS   r   s      r3   r  zDictItemsVariable.view_items_vt  s5     @DOtq!	''q	2OOOs   +?c                     t         S rU   )r   r\   s    r3   r@   zDictItemsVariable.python_type  r  r5   c                    | j                   syg }| j                   D ]  \  }}t        |j                  d      rt        |j                  j                        n|j                  j                         }t        |d      rt        |j                        n|j                         }|j                  d| d| d        ddj                  |      z   dz   S )	Nzdict_items([])r   (r   rc  zdict_items([rx  r  r  r   s         r3   r   zDictItemsVariable.debug_repr  s    #!E 81(/g(>D$ADDOODU  ,31g+>$qww-ALLNq	G9A678 "CHHUO3d::r5   r7   r)   r  r<   rm   c                 x   |dk(  r|t        |      dk7  rt        ||dt        |       d       t        |d   t              r,| j                  j                  |d|d   j                  gi       S t        j                  d      S |dk(  r"ddlm	}  || j                  t               	      S t        |   ||||      S )
Nrc   r"   r  r  r   Fr  r  r  )r   r    rI   r  rI  r"  r&   rC   r*  r  r  r#   rz   r  s         r3   r"  zDictItemsVariable.call_method  s     84yA~#Bh3t9+U8KL$q'#45||//HtAw>OQSTT#**511Z3'""2B2D  w"2tT6::r5   Fc                      y)zC
        Dictionary item views are not hashable in Python.
        Frk   r\   s    r3   rM   z$DictItemsVariable.is_python_hashable4  r?  r5   )rd   re   rf   r   r  rD  r$   r  r0   r@   r   r   r   r"  r   rM   rE  rF  s   @r3   r  r    s    	BPtO4 P PT ;C ;;#; ; ?#	;
 S/)*; 
;.GEN r5   r  rU   )Jrg   r   r   r  rM  collections.abcr   r   typingr   r   r   r   r	   torch.utils._ordered_setr   r  r   r   r   bytecode_transformationr   r   r   r   r  r   r   guardsr   r   r}   r   r   r   r  r   r   r   r   r   r    r!   r   r#   r$   constantr%   r&   torch._dynamo.codegenr'   r>   r)   torch._dynamo.variables.builtinr*   re  r+   rj   r4   rF   rL   rO   rH  rY  r)  rr  r  r  r  r  r  r  r   r  rk   r5   r3   <module>r(     st  (     . ? ? / 6 6  : 0 I I   4 > /D?/>C >D >
 CG	&'>?	4"? "t "I IXJ2? J2Z 1 x
+ x
|z# zz	@Uo @UF> >@S
 S
l,; ,;^<; <;~8;' 8;v<) <,3( 3r5   