
    9jr                     r   d 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 ddlmZmZ dd	l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 ddlm Z m!Z! ddl"m#Z# ddl$m%Z%m&Z&m'Z' e	rddl(m)Z) ddl*m+Z+ ddl,m-Z-  G d de!      Z. G d de!      Z/ G d de.      Z0 G d de.      Z1 G d de.      Z2y)a  
Set-related variable tracking classes for PyTorch Dynamo.

This module implements variable tracking for different types of set-like objects:
- Regular Python sets (set)
- Frozen sets (frozenset)
- Ordered sets (torch.utils._ordered_set.OrderedSet)
- Dictionary key sets (dict_keys views used as sets)

These classes are responsible for tracking set operations during graph compilation,
maintaining proper guards for set mutations and element existence checks.

The implementation uses a special HashableTracker wrapper to handle set elements
while preserving proper aliasing semantics. Sets are modeled internally as
dictionaries with None values.
    N)IterableSequence)AnyLiteralTYPE_CHECKING
OrderedSet   )	polyfills	variables)create_call_functioncreate_instruction)raise_observed_exception)GuardBuilderinstall_guard)
AttrSourceis_constant_sourceis_from_local_source)cmp_name_to_op_mappingistyperaise_args_mismatch   )ValueMutationNewVariableTracker)ConstantVariable)HashableTrackeris_hashableraise_unhashable)	PyCodegen)InstructionTranslator)BuiltinVariablec            
           e Zd ZdZeZej                  Zej                  Z
deeez     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e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de!e   fdZ"dedef fdZ#defdZ$dddef fdZ%dddede&f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
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defd&Z. xZ/S ))SetVariablez2Represents a Python set during symbolic execution.itemskwargsreturnNc                 $   d|v r|j                  d       d|v r|j                  d       t        |   di | g }|D ]L  }t        |t              r|j                  |       %|j                  t	        |j                                      N t        j                  |t        j                               | _        | j                  rt        | j                         nd| _        t        j                  |t        j                               | _        y )Noriginal_itemsshould_reconstruct_allT )popsuper__init__
isinstancer   appendrealizedictfromkeysr#   _default_valuer$   sourcer   r)   r(   )selfr$   r%   hashable_itemsitem	__class__s        \/media/conek/DATA/Code/OCR/venv/lib/python3.12/site-packages/torch/_dynamo/variables/sets.pyr-   zSetVariable.__init__7   s     v%JJ'(#v-JJ/0"6"
  	GD$0%%d+ %%odlln&EF	G ]]>;3M3M3OP
59[[$T[[11d 	# #mmK668
    c                 0   | j                   syg }| j                   D ]b  }t        |t              r|j                  n|}t	        |d      rt        |j                        n|j                         }|j                  |       d ddj                  |      z   dz   S )Nzset()value{,})
r$   r.   r   vthasattrreprr<   
debug_reprr/   join)r5   r$   vr@   val_strs        r9   rC   zSetVariable.debug_reprX   s|    zz!EZZ &'?;QTT,3B,@$rxx.bmmoW%& %(3..r:   r   c                 H    t        | j                  j                               S Nsetr$   keysr5   s    r9   	set_itemszSetVariable.set_itemsc       4::??$%%r:   c                  ,    t        j                  d       S rH   )r   creater*   r:   r9   r3   zSetVariable._default_valueg   s      &&t,,r:   c                 p    | j                   D ch c]  }|j                  j                          c}S c c}w rH   )rM   r@   as_proxyr5   ks     r9   rR   zSetVariable.as_proxyl   s$    )-8A888   !3c                     t         S rH   )rJ   rL   s    r9   python_typezSetVariable.python_typeo   s    
r:   c                 p    | j                   D ch c]  }|j                  j                          c}S c c}w rH   )rM   r@   as_python_constantrS   s     r9   rY   zSetVariable.as_python_constantr   s'    37>>Ba'')BBBrU   c                     |j                  | j                  D cg c]  }|j                   c}       |j                  t	        dt        | j                                     y c c}w )N	BUILD_SETarg)foreachrM   r@   append_outputr   lenr5   codegenxs      r9   reconstructzSetVariable.reconstructu   sE    t~~6!670#dnnBUVW 7s   A$r@   c                     t        |t              sJ t        |      syt        |      }|| j                  v xr( t        | j                  |   t
        j                         S NF)r.   r   r   r   r$   r   DeletedVariable)r5   r@   keys      r9   __contains__zSetVariable.__contains__y   s[    "o...2b!djj  
JJsOY66*
 &
 	
r:   c                 V    t        d | j                  j                         D              S )Nc              3   R   K   | ]  }t        |t        j                          ! y wrH   )r.   r   rg   ).0rc   s     r9   	<genexpr>z"SetVariable.len.<locals>.<genexpr>   s%      
=>
1i7788
s   %')sumr$   valuesrL   s    r9   r`   zSetVariable.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rH   )is_new_itemr(   getr@   )rl   rh   r<   r5   s      r9   rm   z,SetVariable.has_new_items.<locals>.<genexpr>   s?      2
U T0044SVV<eD2
s   AA)r)   anyr$   rL   s   `r9   has_new_itemszSetVariable.has_new_items   s7    ** 
c 2
"jj..02
 /
 	
r:   r<   otherc                     |rS|j                         rC|j                         r3t        |j                               t        |j                               k7  S t        |      t        |      k7  S rH   )is_realizedidr0   )r5   r<   rv   s      r9   rr   zSetVariable.is_new_item   sQ     U&&(U->->-@emmo&"U]]_*===%yBuI%%r:   txr    c                 T    | j                   D cg c]  }|j                   c}S c c}w rH   )r$   r@   )r5   rz   rc   s      r9   unpack_var_sequencezSetVariable.unpack_var_sequence   s    "jj))))s   %c                 "    t        |   di |S Nr*   )r,   cloner5   r%   r8   s     r9   r   zSetVariable.clone   s    w}&v&&r:   c                      yrf   r*   rL   s    r9   is_python_hashablezSetVariable.is_python_hashable   s    r:   namec                 v    |dk(  r$t        j                  || j                               S t        |   ||      S )Nr8   )r   buildrW   r,   var_getattr)r5   rz   r   r8   s      r9   r   zSetVariable.var_getattr   s9    ;"((T-=-=-?@@w"2t,,r:   c                 J    t        j                  |t        t        |            S rH   )r   r   rA   rJ   )r5   rz   r   s      r9   call_obj_hasattrzSetVariable.call_obj_hasattr   s     $$Rd);<<r:   argsc           	         | 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 y y )Nr   )rh   )r4   outputside_effectsis_modifiedis_python_constanttypeCONTAINS_GUARDNOT_CONTAINS_GUARDr   
make_guard	functoolspartialrY   )r5   rz   r   containsguard_fns        r9   install_set_contains_guardz&SetVariable.install_set_contains_guard   s     {{99!!--d37d?7>>!d1g&@&@&B-5T
))4:;X;X  %%  G668	 'C!r:   fnc                 t   	  || 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        $ r4}	t        t	        |	      |t        |	j                               Y d }	~	Yd }	~	ww xY w)Nr   )	rY   r$   	Exceptionr   r   listr   r   r   )
r5   rz   r   r   r%   rc   rT   rE   resexcs
             r9   _fast_set_methodzSetVariable._fast_set_method   s    	I37-$-@Q!&&(@9?HA1a**,,HC $$R-- AH 	I$T#YchhHH	Is2   	A: A/A: A4A: /A: :	B7*B22B7c                    ddl m} ddlm} |dv rM |||      rD| j	                         t
        u r.| j	                         }| j                  |t        ||      ||      S ddlm	}m
}	 |dk(  r |j                  |t
              j                  |g|i |}
|j                  j                  j                  |        | j                   j#                          | j                   j%                  |
j                          t'        j                  d       S |dk(  r|st)        |      dk7  r&t+        ||d	t)        |       d
t)        |       d       t-        |d         st/        |d   |       |j                  j                  j                  |        t0        j3                         | j                   t5        |d         <   t'        j                  d       S |dk(  r|s|r&t+        ||dt)        |       d
t)        |       d       	 | j6                  j9                         j:                  }d| _"        |j                  j                  j                  |        | j                   j9                  t5                     |S |dk(  rl|st)        |      dk7  r&t+        ||d	t)        |       d
t)        |       d       |j                  |tF        jH                        jK                  || |d   gi       S |dk(  r`|rt+        ||dt)        |       d       |j                  |tF        jL                        jK                  || g|d| jO                         i      S |dk(  rP|rt+        ||dt)        |       d       |j                  |tF        jP                        jK                  || g|i       S |dk(  r`|rt+        ||dt)        |       d       |j                  |tF        jR                        jK                  || g|d| jO                         i      S |dk(  r`|rt+        ||dt)        |       d       |j                  |tF        jT                        jK                  || g|d| jO                         i      S |dk(  rP|rt+        ||dt)        |       d       |j                  |tF        jV                        jK                  || g|i       S |dk(  rz|st)        |      dk7  r&t+        ||d	t)        |       d
t)        |       d       |j                  |tF        jX                        jK                  || g|d| jO                         i      S |dk(  rj|st)        |      dk7  r&t+        ||d	t)        |       d
t)        |       d       |j                  |tF        jZ                        jK                  || g|i       S |dk(  r`| j]                         rP|rt+        ||dt)        |       d       |j                  |tF        j^                        jK                  || g|i       S |dk(  r|st)        |      dk7  r&t+        ||d	t)        |       d
t)        |       d       |d   | vrt?        t<        ||       d| _"        |j                  j                  j                  |        | j                   j9                  t5        |d                t'        j                  d       S |dk(  r|st)        |      dk7  r&t+        ||d	t)        |       d
t)        |       d       |d   | v rSd| _"        |j                  j                  j                  |        | j                   j9                  t5        |d                t'        j                  d       S |dv rt)        |      dk7  rt+        ||d t)        |       d!       t`        jb                  t`        jd                  d}|d   jg                         }ti        |t0              s(|j                  |t
              jK                  ||gi       }|j                  ||jk                  |            jK                  || |gi       S |d"v rddddd"jk                  |      }tm        |d   t0        tn        jp                  ||	f      s<t?        tr        |d#| d$| ju                          d%|d   ju                          d&g       |J | jw                  ||||      S |d'v rd(d)d*d+d'jk                  |      }tm        |d   t0        tn        jp                  ||	f      s<t?        tr        |d#| d$|d   ju                          d%| ju                          d&g       |J |d   jw                  ||| g|      S |d,v rtm        |d   t0        tn        jp                  ||	f      s<t?        tr        |d#| d$| ju                          d%|d   ju                          d&g       ddddd,jk                  |      }|J | jw                  ||||       | S |d-k(  rztm        |d   t0        tn        jp                  ||	f      st'        j                  d.      S | jw                  |d||      }ty        jz                  |t)        |j6                        dk(        S |d/k(  r5| jw                  |d-||      }ty        jz                  ||j|                         S |t~        v rytm        |d   t0        tn        jp                  ||	f      sty        jz                  |t              S ty        jz                  |t        |   | j6                  |d   j6                              S |d0k(  rt)        |      s&t+        ||d1t)        |       d
t)        |       d       |rt-        |d         st/        |d   |       | j                  ||       |d   | v }ty        jz                  ||      S |d2k(  rS|s|r&t+        ||dt)        |       d
t)        |       d       ty        jz                  |t)        | j                               S |d3k(  r^|s|r&t+        ||dt)        |       d
t)        |       d       | j                  | j                   j                         t               d 4      S |d5k(  r|s|r&t+        ||dt)        |       d
t)        |       d       d| _"        |j                  j                  j                  |        | j                   j#                          t'        j                  d       S |d6k(  rwdd7lEmF} | j                  rDt        | j                        s/|j                  j                  j                  | j                          || j                  |      t               8      S t        |   ||||      S # t<        $ r0}t?        t<        |tA        |jB                               Y d }~d }~ww xY w)9Nr
   )check_constant_argsr   )SourcelessBuilder)
isdisjointunionintersection
differencesymmetric_difference)DictItemsVariableDictKeysVariabler-   addz1 args and 0 kwargs
 args and  kwargsr   r+   z0 args and 0 kwargsr   Tr   r   z0 kwargsclsintersection_updater   r   zExpect: 0 kwargs, Actual: difference_updater   symmetric_difference_updateupdateremovediscard)issubset
issupersetz1 argsz args)__and____or____xor____sub__z unsupported operand type(s) for z: 'z' and '')__rand____ror____rxor____rsub__r   r   r   r   )__iand____ior____ixor____isub____eq__F__ne__ri   zmore than 1 args and 0 kwargs__len__copy)r$   mutation_typer4   clear__iter__)ListIteratorVariabler   )Mutilsr   builderr   rW   rJ   r   getattrdictsr   r   rP   call_setr   r   mutationr$   r   r   r   r`   r   r   r   r#   r3   r   rM   r+   r@   KeyErrorr   r   r   r)   r   set_isdisjointcall_functionset_intersectionpython_type_varset_intersection_update	set_unionset_differenceset_difference_updateset_symmetric_differenceset_symmetric_difference_update
is_mutable
set_updateoperatorleger0   r   rs   r.   r   UserDefinedSetVariable	TypeErrorpython_type_namecall_methodr   r   r<   r   NotImplementedr   r   r   r   listsr   r4   r   guard_on_key_orderr   r|   r,   )r5   rz   r   r   r%   r   r   py_typer   r   temp_set_vtresulteoprv   mr	eq_resultr   r   r8   s                       r9   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#**400U]Ta#)4ykCK=@	 tAw' a"-II""++D13>3M3M3ODJJtAw/0#**400U]#)4ykCK=@	J*...*<*<*>*A*A +/D'II""++D1JJNN?623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*.D'II""++D1JJNN?4734#**400YTa#)4ykCK=@	 Aw$.2+		&&//5

tAw78#**400//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  Q44%$	 ):4&DDYDYD[C\\cdhijdkd|d|d~c  @A  B = =##B488DD%#%%	
 c$i  Q44%$	 ):4&DGD\D\D^C__fgkg|g|g~f  @A  B = =7&&r1tff==DDQ44%$	 ):4&DDYDYD[C\\cdhijdkd|d|d~c  @A  B 2#9/	
 c$i  = =RD&1KXQ44%$	 (..u55  %;T6JA"((S-=-BCCX((XtVDI"((-@AA++Q44%$	 ',,R@@"((&t,T^^T!W=N=NO  ^#t9#34ykCK=@	 [a1 a"-++B5Aw$H"((X66Yv#)4ykCK=@	 #((S_==V^v#)4ykCK=@	 ::jjoo'7G7IRV    W_v#)4ykCK=@	 +/D'II""++D1JJ#**400Z3{{#5dkk#B		,,00='((,<L<N  w"2tT6::E	  J(2DLIIJs   >$v 	w%wwc                 4    t        j                  t              S rH   )r   r!   rJ   rL   s    r9   r   zSetVariable.python_type_var/  s    ((--r:   r]   c                     t        d      )NzIllegal to getitem on a set)RuntimeError)r5   rz   r]   s      r9   getitem_constzSetVariable.getitem_const2  s     899r:   c                 T    t        j                  |t        | j                              S rH   )r   r   r`   rM   )r5   rz   s     r9   	sq_lengthzSetVariable.sq_length7  s    $$RT^^)<==r:   rb   r   r&   Nr&   r!   )0__name__
__module____qualname____doc__rJ   _cpython_typer   SET_CONTAINSr   SET_NOT_CONTAINSr   r   r   r   r   r-   strrC   propertyrM   staticmethodr3   rR   r   rW   rY   rd   boolri   intr`   ru   rr   r   r|   r   r   r   r   r   r   r1   r   r   r   r   r   __classcell__r8   s   @r9   r#   r#   .   sa   < M!..N%66
/9:
 
 
	
B	/C 	/ &301 & & -O - -9# 9T CC CX
 
4 

S 


t 
&$t+&4C&	&*&= *$BW *'c 'o 'D -5 -S -
=)=14=	=
)15o1F	..#. . ?#	.
 S/)*. 
. _;#_; _; ?#	_;
 S/)*_; 
_;B.:):0?:	:
>3 > >r:   r#   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 )OrderedSetClassVariabler%   r&   Nc                 $    t        |   di | y r~   )r,   r-   r   s     r9   r-   z OrderedSetClassVariable.__init__<  s    "6"r:   c                     t         S rH   r   rL   s    r9   rY   z*OrderedSetClassVariable.as_python_constant?      r:   rz   r    r   c           
          |dk(  rNddl m} | j                  rt        | j                  |      }nd } || |t	        t        t        |            |      S t        | !  ||      S )N__new__r   )GetAttrVariable)r   r4   )	miscr  r4   r   r   r   r	   r,   r   )r5   rz   r   r  attr_sourcer8   s        r9   r   z#OrderedSetClassVariable.var_getattrB  s`    9-{{(d;""dDT)B$CK  7&r400r:   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   rJ   r.   r#   r   r,   )r5   rz   r   r   r%   r  resolved_fnr8   s          r9   r   z#OrderedSetClassVariable.call_methodP  s     	)94yA~#=4ykCK=A //BRBTUUc4(+%*T!Wi>S>S*T7&&r4ab6BBw"2tT6::r:   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   )r5   rz   r   r%   r$   s        r9   r   z%OrderedSetClassVariable.call_functionj  sy     t9q=F1t9+ZF}G= t9>EG55b9E++EAQASTTr:   )r   r   r   r   r-   r   r	   rY   r   r   r   r   r1   r   r   r   r  r  s   @r9   r  r  ;  s    # # #DC$9 15 1S 1_ 1;#; ; ?#	;
 S/)*; 
;4U#U 'U S/)*	U
 
Ur:   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                 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OrderedSet([])r<   zOrderedSet([r>   ])r$   rA   r@   rB   r<   rC   r/   rD   r5   r$   rT   key_strs       r9   rC   zOrderedSetVariable.debug_repr  s{    zz#!EZZ &(/g(>D$ADDOODU  W%	&
 "CHHUO3d::r:   c                     t        | j                  D cg c]  }|j                  j                          c}      S c c}w rH   )r	   rM   r@   rY   rS   s     r9   rY   z%OrderedSetVariable.as_python_constant  s,    dnnM144224MNNM   !<c                     t         S rH   r   rL   s    r9   rW   zOrderedSetVariable.python_type  r  r:   c                     t               S rH   )r  rL   s    r9   r   z"OrderedSetVariable.python_type_var  s    &((r:   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_fromrb   s   r9   <lambda>z0OrderedSetVariable.reconstruct.<locals>.<lambda>  s    G,,-GV r:   
BUILD_LISTr\   r   F)	add_push_nullr^   rM   r@   r_   r   r`   extend_outputr   ra   s    ` r9   rd   zOrderedSetVariable.reconstruct  so    V	
 	t~~6!6703t~~CVWX21e<= 7s   Br   )r   r   r   r   rC   r	   r   rY   r   rW   r  r   rd   r*   r:   r9   r  r    sG    
;C 
;OJsO OT*S/2 )!8 )>r:   r  c            
            e Zd Ze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=   r>   r?   r  r  s       r9   rC   zFrozensetVariable.debug_repr  s{    zz !EZZ &(/g(>D$ADDOODU  W%	&
 %(3..r:   r   c                 H    t        | j                  j                               S rH   rI   rL   s    r9   rM   zFrozensetVariable.set_items  rN   r:   c                     t         S rH   )	frozensetrL   s    r9   rW   zFrozensetVariable.python_type  s    r:   c                 4    t        j                  t              S rH   )r   r!   r/  rL   s    r9   r   z!FrozensetVariable.python_type_var  s    ((33r:   c                     t        | j                  D ch c]  }|j                  j                          c}      S c c}w rH   )r/  rM   r@   rY   rS   s     r9   rY   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   r9   r&  z/FrozensetVariable.reconstruct.<locals>.<lambda>  s%    G))..{; r:   r'  r\   r   F)r(  r^   rM   r@   r)  r   r`   r   ra   s    ` r9   rd   zFrozensetVariable.reconstruct  sq    	
 	t~~6!67"<S5HI%a/	
 7s   Brz   r    r   r   r%   c                     |dv rt        d| d      |dk(  rt        j                  d       S |dv r't        |   ||||      }t        |j                        S t        |   ||||      S )Nr   r+   r   r   r   r   Illegal call_method z on a frozensetr-   )r   r   r   r   )r   r   rP   r,   r   r+  r$   )r5   rz   r   r   r%   r   r8   s         r9   r   zFrozensetVariable.call_method  s     II!5dV?KLLZ#**400 
 
 #BdF;A$QWW--w"2tT6::r:   Tc                      y)zB
        Frozensets are immutable and hashable in Python.
        Tr*   rL   s    r9   r   z$FrozensetVariable.is_python_hashable  s     r:   c                 4    t        | j                               S rH   )hashrY   rL   s    r9   get_python_hashz!FrozensetVariable.get_python_hash  s    D++-..r:   rv   c                 h    t        |t              xr! | j                         |j                         k(  S rH   )r.   r   rY   )r5   rv   s     r9   is_python_equalz!FrozensetVariable.is_python_equal  s1    uo. H'')U-E-E-GG	
r:   r   r   )r   r   r   r/  r   r   rC   r  rJ   rM   r   rW   r   r   rY   rd   r   r   r1   r   r   r   r  r;  objectr  r=  r  r  s   @r9   r+  r+    s    M
/C 
/ &301 & &T 4NC N
 ;#; ; ?#	;
 S/)*; 
;,GDM / /
V 
 
r:   r+  c            
            e Zd Zdef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([r>   r  r  r  s       r9   rC   zDictKeySetVariable.debug_repr  s{    zz"!EZZ &(/g(>D$ADDOODU  W%	&
 !388E?2T99r:   rz   r    r   Nc                      y rH   r*   )r5   rz   r   s      r9   r   z-DictKeySetVariable.install_set_contains_guard   s     	r:   c                     | j                   S rH   )r$   rL   s    r9   rM   zDictKeySetVariable.set_items  s    zzr:   c                     ddl m} |S )Nr
   )	dict_keys)r   rE  )r5   rE  s     r9   rW   zDictKeySetVariable.python_type
  s    %r:   c                     t         j                  | j                  D ch c]  }|j                  j	                          c}d       j                         S c c}w rH   )r1   r2   rM   r@   rY   rK   rS   s     r9   rY   z%DictKeySetVariable.as_python_constant  s>    }}04?1QTT$$&?

$&	?s   !Ar   r%   c                 N    |dv rt        d| d      t        | 	  ||||      S )Nr6  r7  z on a dict_keys)r   r,   r   )r5   rz   r   r   r%   r8   s        r9   r   zDictKeySetVariable.call_method  s9     II!5dV?KLLw"2tT6::r:   )r   r   r   r   rC   r   r   r   r  r   rM   r   rW   rY   r1   r   r  r  s   @r9   r@  r@    s    
:C 
:)15o1F	 3  T 
C 
	;#	; 	; ?#		;
 S/)*	; 
	; 	;r:   r@  )3r   r   r   collections.abcr   r   typingr   r   r   torch.utils._ordered_setr	    r   r   bytecode_transformationr   r   r   r   guardsr   r   r4   r   r   r   r   r   r   r   baser   r   constantr   hashabler   r   r   torch._dynamo.codegenr   torch._dynamo.symbolic_convertr    torch._dynamo.variables.builtinr!   r#   r  r  r+  r@  r*   r:   r9   <module>rT     s   "   . . . / # N * 0 I I G G 3 & D D /D?J>/ J>ZBUo BUJ> >@P
 P
f*; *;r:   