
    rhQ                        d Z ddlZddlZddlZddlZddlZddlmZ ddl	m
Z
mZ ddlmZ ddlmZmZmZ ddlmZmZ dd	lmZmZ dd
lmZmZ ddlmZ ddlmZmZm Z m!Z!m"Z"m#Z# ddl$m%Z%m&Z& ddl'm(Z( erddl)m*Z* ddl+m,Z, d Z-d Z.d,dZ/d Z0 G d de&      Z1 G d de&      Z2 G d de1      Z3 G d de1      Z4 G d de1      Z5 G d  d!e5      Z6 G d" d#e5      Z7 G d$ d%e&      Z8 G d& d'e8      Z9 G d( d)e8      Z: G d* d+e8      Z;y)-a  
Dictionary-related variable tracking classes for PyTorch Dynamo.

This module implements variable tracking for different types of dictionary-like objects:
- Regular Python dictionaries (dict)
- Ordered dictionaries (collections.OrderedDict)
- Default dictionaries (collections.defaultdict)
- Dictionary views (keys and values)
- Sets and frozensets (implemented internally using dictionaries)

These classes are responsible for tracking dictionary operations during graph compilation,
maintaining proper guards for dictionary mutations and key existence checks. They handle
dictionary creation, modification, key/value access, and view operations while ensuring
correct behavior in the compiled code through appropriate guard installation.

The implementation uses a special _HashableTracker wrapper to handle dictionary keys
while preserving proper aliasing semantics. Sets are implemented as dictionaries with
None values for efficiency and code reuse.
    N)Hashable)OptionalTYPE_CHECKING)is_fake   )graph_break_hints	polyfills	variables)create_call_functioncreate_instruction)raise_observed_exceptionunimplemented_v2)GuardBuilderinstall_guard)is_from_local_source)cmp_name_to_op_mapping
dict_items	dict_keysdict_valuesistypespecialize_symnode   )ValueMutationNewVariableTrackerConstantVariable)	PyCodegenInstructionTranslatorc           	      D    t        t        | t        d| d      g       y )Nzwrong number of arguments for z() callargs)r   	TypeErrorr   )txnames     p/var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/torch/_dynamo/variables/dicts.pyraise_args_mismatchr'   <   s%    
!?vWMNO    c                 L    t        |       j                  j                  dd      S )N__instancecheck__F)type__dict__get)objs    r&   was_instancecheck_overrider/   D   s     9!!"5u==r(   c           
          |ddl m}  |j                         }t        t        |t        dt        |              g       y )Nr   r   zunhashable type: r!   )torch._dynamo.symbolic_convertr   
current_txr   r#   r   r+   )argr$   r   s      r&   raise_unhashabler4   H   s?    	zH-"--/2-0A$s).MNOr(   c                    t        | t        j                        r!| j                         s| j	                         ryt        | t        j
                        r5| j                         j                  j                  j                  d      d uS t        | t        j                        rt        d | j                  D              S t        | t        j                        ryt        | j                        sdt!        j"                  | j                  d      t$        j&                  u r4t        | j                  t$              rt        | j                  t(              S t        | t        j*                  t        j,                  t        j.                  t        j0                  t        j2                  t        j4                  t        j6                  t        j8                  j:                  t        j<                  t        j>                  t        j@                  t        jB                  t        jD                  t        jF                  t        jH                  f      S )NTexample_valuec              3   2   K   | ]  }t        |        y wN)is_hashable).0es     r&   	<genexpr>zis_hashable.<locals>.<genexpr>d   s     3a;q>3s   __hash__)%
isinstancer
   LazyVariableTrackeris_realizedr9   TensorVariableas_proxynodemetar-   TupleVariableallitemsUserDefinedObjectVariabler/   valueinspectgetattr_staticintr=   py_HashableBuiltinVariableSymNodeVariabler   EnumVariableUserDefinedClassVariableUserFunctionVariableSkipFunctionVariablemiscNumpyVariableNNModuleVariableUnspecializedNNModuleVariableMethodWrapperVariableTorchInGraphFunctionVariableTypingVariableFunctoolsPartialVariableWeakRefVariable)xs    r&   r9   r9   R   s    	1i334MMO!Y--. zz|  %%))/:$FF	Ay..	/31773331i99:*1773""177J73<<Gqww$!'';//))))**&&22....,,**77//66((22))
 	
r(   c                   $    e Zd Zdhej                  Z G d d      Zefdeeef   ddf fdZd Zd	 Z	d
 Z
d Zd ZdefdZd Zd Zd Zd Zd dZdddefdZdddefdZdefdZdefdZd Zd Z	 	 	 	 	 	 d! fdZd Zd Z fdZ xZS )"ConstDictVariableuser_clsc                   N    e Zd ZdZd
dZed        Zd Zed        Z	dd 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
        returnNc                 T    t        |      }t        |      st        |       || _        y r8   )r   r9   r4   vt)selfre   s     r&   __init__z+ConstDictVariable._HashableTracker.__init__   s$    #B'B r? $DGr(   c                    t        | j                  t        j                        rN| j                  j	                         s4| j                  j                         r| j                  j                         S t        | j                  t        j                        r3| j                  j                         j                  j                  d   }|S t        | j                  t        j                        r:t        j                  t        fd| j                  j                  D              }|S t        | j                  t        j                         r| j                  j"                  S t        | j                  t        j$                        r| j                  j"                  S t        | j                  t        j&                        r| j                  j)                         S t        | j                  t        j*                        r6t        j                   | j                  j,                        j.                  S t        | j                  t        j0                        r| j                  j"                  S | j                  j3                         }|S )Nr6   c              3   B   K   | ]  } |      j                     y wr8   )underlying_value)r:   r;   r   s     r&   r<   zFConstDictVariable._HashableTracker.underlying_value.<locals>.<genexpr>   s     N1(1+66Ns   )r>   re   r
   r?   r@   r9   original_valuerA   rB   rC   rD   rE   r_   _HashableTrackertuplerG   rV   rI   rW   rR   get_functionr\   referent_vtrj   rH   as_python_constant)rf   r]   r   s     @r&   rj   z3ConstDictVariable._HashableTracker.underlying_value   s    477I$A$AB++-GG'')ww--//$''9#;#;<GG$$&++00A* H) DGGY%<%<=,==NNN$ H# DGGY%?%?@ww}}$DGGY%L%LMww}}$DGGY%C%CDww++--DGGY%>%>?,== 3 34EEEDGGY%H%HI ww}}$GG..0Hr(   c                 ,    t        | j                        S r8   )hashrj   rf   s    r&   r=   z+ConstDictVariable._HashableTracker.__hash__   s    --..r(   c                 
   t        |       t        |      k7  ryt        | t              rGt        j                  t        |       t        |      k(  xr t        fdt        | |      D              S t        |       r| |u S | |k(  S )NFc              3   H   K   | ]  \  }}j                  ||        y wr8   )_eq_impl)r:   uvr   s      r&   r<   z>ConstDictVariable._HashableTracker._eq_impl.<locals>.<genexpr>   s'      0041H%%a+0s   ")	r+   r>   rm   r_   rl   lenrF   zipr   )abr   s     @r&   rv   z+ConstDictVariable._HashableTracker._eq_impl   s|     Aw$q'!Au%,==1vQ' C 08;Aq	0 -  AvAvr(   otherc                     t         j                  }t        ||      s%t        j                  |      sJ t        |             t        ||      r&|j                  | j                  |j                        S |j                  | j                  |      S r8   )r_   rl   r>   r   
is_literalr+   rv   rj   )rf   r}   r   s      r&   __eq__z)ConstDictVariable._HashableTracker.__eq__   s    (99HeX.2B2M2Me2T UT %*(()>)>@V@VWW $$T%:%:EBBr(   rc   N)__name__
__module____qualname____doc__rg   propertyrj   r=   staticmethodrv   boolr    r(   r&   rl   rb      sP    		 
	 
	>	/ 
	 
			C D 		C 		Cr(   rl   rG   rc   Nc                    d|v r|j                  d       d|v r|j                  d       t        |   di | t        j                  t        fd|j                         D              sJ fd}|j                         D ci c]  \  }} ||      | c}}| _        t        | j                         | _	        |j                         | _        || _        y c c}}w )Noriginal_itemsshould_reconstruct_allc              3   l   K   | ]+  \  }}t        |t        f      xr t        |t               - y wr8   )r>   r   )r:   r]   rx   r   s      r&   r<   z-ConstDictVariable.__init__.<locals>.<genexpr>   s?      
 1 q?H56 /1o./
s   14c                 0    t        |       r| S  |       S r8   )r>   )keyr   s    r&   make_hashablez1ConstDictVariable.__init__.<locals>.make_hashable   s    $S(33F#Fr(   r   )popsuperrg   r_   rl   rF   rG   r   sourcer   copyr   r`   )	rf   rG   r`   kwargsr   r]   rx   r   	__class__s	          @r&   rg   zConstDictVariable.__init__   s     v%JJ'(#v-JJ/0"6"$55  
 
 
 	
 
	G 7<kkmDdamA&)D
 +?t{{*K&K##jjl  Es   Cc                     | j                   j                         D ci c].  \  }}|j                  j                         |j                         0 c}}S c c}}w r8   )rG   re   rB   rf   krx   s      r&   rB   zConstDictVariable.as_proxy   s<    :>**:J:J:LM$!Q-MMM   3Ac                 n    ddj                  d | j                  j                         D              z   dz   S )N{, c              3   |   K   | ]4  \  }}|j                   j                          d |j                           6 yw)z: Nre   
debug_repr)r:   r   rx   s      r&   r<   z/ConstDictVariable.debug_repr.<locals>.<genexpr>   s7      =AQ144??$%R'78s   :<})joinrG   rs   s    r&   r   zConstDictVariable.debug_repr   s?    ii EIZZEUEUEW  		
r(   c                     | j                   j                         D ci c].  \  }}|j                  j                         |j                         0 c}}S c c}}w r8   )rG   re   rp   r   s      r&   rp   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 r8   )install_dict_keys_match_guardrG   re   rp   r   s      r&   keys_as_python_constantz)ConstDictVariable.keys_as_python_constant
  sE    **,9=9I9I9KLA'')1,LLLs   %Ac                     | j                   S r8   )r`   rs   s    r&   python_typezConstDictVariable.python_type  s    }}r(   c                     t        |t              sJ t        j                  }t	        |      xrD  ||      | j
                  v xr. t        | j
                   ||         t        j                         S r8   )r>   r   r_   rl   r9   rG   r
   DeletedVariable)rf   re   r   s      r&   __contains__zConstDictVariable.__contains__  se    "o...$55O T

*Ttzz(2,79R9RSS	
r(   c           	          t        | j                  j                         D cg c]  }t        |t        j
                        s|  c}      S c c}w r8   )ry   rG   valuesr>   r
   r   rf   r]   s     r&   ry   zConstDictVariable.len  sI     **,!!Y%>%>? 
 	
s   #Ac                 v      j                   ryt         fd j                  j                         D              S )NTc              3      K   | ]<  \  }}j                  j                  j                  |j                        |       > y wr8   )is_new_itemr   r-   re   )r:   r   rI   rf   s      r&   r<   z2ConstDictVariable.has_new_items.<locals>.<genexpr>&  s?      
U T0044SVV<eD
s   AA)r   anyrG   rs   s   `r&   has_new_itemszConstDictVariable.has_new_items#  s6    && 
"jj..0
 
 	
r(   c                     |rS|j                         rC|j                         r3t        |j                               t        |j                               k7  S t        |      t        |      k7  S r8   )r@   idrealize)rf   rI   r}   s      r&   r   zConstDictVariable.is_new_item+  sO    U&&(U->->-@emmo&"U]]_*===%yBuI%%r(   c                 J   d}| j                   j                         D ]h  \  }}| j                  j                  |j                        }| j	                  ||      s| j
                  sJ ||j                          ||       |dz  }j |j                  t        d|             y )Nr   r   	BUILD_MAPr3   )rG   r   r-   re   r   r   append_outputr   )rf   codegennum_argsr   rI   items         r&   reconstruct_kvs_into_new_dictz/ConstDictVariable.reconstruct_kvs_into_new_dict1  s    ****, 	JC&&**3662De,0K0KA	 	0(KLr(   c                     | j                   t        j                  u rAj                  fd       | j	                         j                  t        dd             y | j	                         y )Nc                  n     j                   j                  t               j                  d      g      S )NOrderedDictextend_outputcreate_load_python_modulecollectionscreate_load_attrr   s   r&   <lambda>z/ConstDictVariable.reconstruct.<locals>.<lambda>A  s3    --99+F00? r(   r   F)r`   r   r   add_push_nullr   r   r   rf   r   s    `r&   reconstructzConstDictVariable.reconstruct=  s\    ==K333!! ..w7!!"6q%"@A..w7r(   r$   r   r3   c                     t         j                  |      }|| j                  vrt        t        |       | j                  |   S r8   )r_   rl   rG   r   KeyError)rf   r$   r3   r   s       r&   'getitem_const_raise_exception_if_absentz9ConstDictVariable.getitem_const_raise_exception_if_absentM  s8      005djj $Xr2zz#r(   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)r_   rl   rG   rI   r   r   
USER_ERROR)rf   r$   r3   r   msgs        r&   getitem_constzConstDictVariable.getitem_constU  ss    005djj #CII;.GHC/syyk*T&11	 zz#r(   c                 h    t         j                  |      }|| j                  vry | j                  |   S r8   )r_   rl   rG   )rf   r3   r   s      r&   maybe_getitem_constz%ConstDictVariable.maybe_getitem_constd  s/    005djj zz#r(   c                 @   || v sJ t         j                  |      }t        | j                  j	                               j                  |      }t        | j                  j	                               |   }t        |t        j                        r|j                          y y r8   )r_   rl   rm   rG   keysindexr   r>   r
   r?   r   )rf   r3   r   r   original_key_vts        r&   realize_key_vtz ConstDictVariable.realize_key_vtj  s~    d{{005djjoo'(..s3 3 3 8 8 :;EBoy'D'DE##% Fr(   c                 n    | j                   r)t        | j                  t        j                               y y r8   )r   r   
make_guardr   DICT_KEYS_MATCHrs   s    r&   r   z/ConstDictVariable.install_dict_keys_match_guards  s%    ;;$//,*F*FGH r(   c           	         ddl m} | j                  sy |j                  j                  j                  |       ry |d   | v }|d   j                  \t        |d   |      rMt        | j                  t        j                  t        j                  |d   j                  |                    y |d   j                  r(|r| j                  |d          y | j                          y y )Nr   r   r   )r   invert) r   r   outputside_effectsis_modifiedr>   r   r   	functoolspartialr   DICT_CONTAINSrI   r   r   )rf   r$   r"   r   containss        r&   install_dict_contains_guardz-ConstDictVariable.install_dict_contains_guardw  s     	'{{99!!--d37d?7>>!ja:J&K%%$22 GMM#+| !W^^##DG,224	 r(   c           	         ddl m}m} t        j                  }|xr t        |d         }|dk(  r t        j                  t              j                  |g|i |}	|j                  j                  j                  |        | j                  j                  |	j                          |j                  d       S |dk(  r%t        |      dk(  sJ | j!                  ||d         S |dk(  r\|s|rJ | j#                          | j$                  r/|j                  j&                  j)                  | j$                         t+        |       S |dk(  r\| j#                          | j$                  r/|j                  j&                  j)                  | j$                         |s|rJ t-        |       S |dk(  r\| j#                          | j$                  r/|j                  j&                  j)                  | j$                         |s|rJ t/        |       S |d	k(  rJ| j#                          |s|rJ | j1                  | j                  j3                         t5               d 
      S |dk(  r;|s|rJ | j#                           |j                  t        | j                              S |dk(  r| j7                         r|st9        |d          | j#                          |st        |      dk(  sJ |j                  j                  j                  |        |d   | j                   ||d         <    |j                  d       S |dk(  r|r| j7                         rr| j#                          d| _        |j                  j                  j                  |        | j                  j=                   ||d                 |j                  d       S |dv rVt        |      dv rI|d   | vrB| j?                  ||       t        |      dk(  r|dk(  rtA        tB        |        |d       S |d   S |dk(  rb|r`| j7                         rPd| _        |j                  j                  j                  |        | j                  jE                   ||d               S |dk(  rXd| _        |j                  j                  j                  |        | j                  jG                           |j                  d       S |dk(  rM| j7                         r<| j#                          t        |      dk(  }
t        |      dkD  }|
s|r|j                  j                  j                  |        |
rktI        |d   t              r|d   j#                          |d   }n|jK                  |t        |d         }| j                  j                  |j                         |rT|j                         D ci c]  \  }} | |j                  |            |  }}}| j                  j                  |        |j                  d       S tL        |   ||||      S |dv r|d   | v r| jQ                  ||d         S |dk(  rIt        |      dk(  r;|st9        |d          | j?                  ||       |d   | v } |j                  |      S |dk(  r|r| j7                         r| j#                          |rJ t        |      dk  sJ | jS                  |d         }||S t        |      dk(  r |j                  d       }n|d   }|j                  j                  j                  |        || j                   ||d         <   |S |dk(  r| j#                          |st        |      dk(  sJ |j                  j                  j                  |         ||d         }| j                  |   }| j                  jE                  |       || j                  |<    |j                  d       S |dk(  rt        |      dk(  sJ tI        |d   t              s*tU        d|d   jW                         jX                   d      | j#                          | j1                  | j                  j3                         t5               d 
      }|d   j#                          |j                  j                  |d   j                         |S tL        |   ||||      S c c}}w )Nr   )rN   r   r   rg   __getitem__rG   r   r   r   )rG   mutation_typer   __len____setitem__r   __delitem__T)r   r-   )r   r   r   clearupdate)r-   __getattr__r   
setdefaultmove_to_end__or__z/unsupported operand type(s) for |: 'dict' and '')-r   rN   r   r_   rl   r9   r
   dict	call_dictr   r   mutationrG   r   createry   r   r   r   guard_on_key_orderaddDictItemsVariableDictKeysVariableDictValuesVariablecloner   r   
is_mutabler4   r   r   r   r   r   r   r   r>   call_custom_dictr   call_methodr   r   r#   r   r   )rf   r$   r%   r"   r   rN   r   r   arg_hashabletemp_dict_vthas_arg
has_kwargsdict_vtr   rx   r   rI   r]   r   valnew_dict_vtr   s                        r&   r  zConstDictVariable.call_method  s    	8$554DG 4:D944T:DD#L II""++D1JJl001*#**400]"t9>!>??DGLLW_''..0{{		,,00=$T**V^..0{{		,,00=''#D))X..0{{		,,00=''%d++V^..0''::jjoo'7G7IRV    Y''..0*#**3tzz?;;]"t'8 a)..0#d)q.00II""++D1,0GDJJxQ()*#**400]"|8I..0*.D'II""++D1JJ""8DG#45*#**400^#D	V(;Qt@S,,R64yA~5=,Xr:'--AwU]|0A*.D'II""++D1::>>(47"344W_*.D'II""++D1JJ*#**400X$//"3 ..0$i1nGVqJ*		&&//5!$q'+<= Q==?"&q'"1"B"B2tTRSW"UJJ%%gmm4 %+LLN Aq !!8!1!8!8!;<a?F  JJ%%f-.'..t44w*2tT6BB++Q4%%b$q'22^#D	Q a),,R6Aw$H*#**844\!lt7H..0:t9>!>,,T!W5E t9>/(//5AQA		&&//501

8DG,-]"..0#d)q.00II""++D147#C**S/CJJNN3!DJJsO*#**400Xt9>!>d1g'89Ed1gFYFYF[FdFdEeefg  ..0**jjoo'7G7IRV % K G113$$T!W]]37&r4v>>ys   #cc                     | j                          | j                  j                         D cg c]  }|j                   c}S c c}w r8   )r   rG   r   re   )rf   r$   r]   s      r&   unpack_var_sequencez%ConstDictVariable.unpack_var_sequenceK  s1    **,"jjoo/0000s   Ac                 &   | j                   t        u rB|| j                   j                  v rt        j                  d      S t        j                  d      S d| j                    d}t        dd| j                    |dgt        j                         y )	NTFzhasattr on z is not supportedzunsupported hasattr operationzClass z+Consider using a regular dictionary insteadr   )r`   r   r,   r   r   r   r   SUPPORTABLE)rf   r$   r%   r   s       r&   call_obj_hasattrz"ConstDictVariable.call_obj_hasattrO  s     ==D t}}---'..t44#**511DMM?*;<3T]]O,="..		
r(   c                 B    | j                          t        |   di |S Nr   )r   r   r  )rf   r   r   s     r&   r  zConstDictVariable.cloneb  s!    **,w}&v&&r(   r   r   r"   zlist[VariableTracker]r   zdict[str, VariableTracker]rc   r   )r   r   r   r   _nonvar_fieldsrl   r   rg   rB   r   rp   r   r   r   r   ry   r   r   r   r   r   r   r   r   r   r   r  r  r  r  __classcell__r   s   @r&   r_   r_      s   		'	'N
KC KC`  !O_45 !
 
 !DN

M
$ 


&
M8 )0? 7 o  &/ &I%5Nk? &	k?
 -k? 
k?Z1
&' 'r(   r_   c                   `     e Zd Zdeddf fdZd Zd ZddZded	   d
e	e
d	f   dd	fdZ xZS )MappingProxyVariabledv_dictrc   Nc                 V    t        |   di | t        |t              sJ || _        y r  )r   rg   r>   r_   r  rf   r  r   r   s      r&   rg   zMappingProxyVariable.__init__i  s+    "6"'#4555r(   c                 "    t         j                  S r8   )typesMappingProxyTypers   s    r&   r   z MappingProxyVariable.python_typen  s    %%%r(   c                 8    | j                   j                  |      S r8   )r  r  rf   r$   s     r&   r  z(MappingProxyVariable.unpack_var_sequenceq  s    ||//33r(   c                    | j                   r=d| j                    d}t        dd| j                    |dgt        j                         j	                  fd        | j
                         j                  t        dd	             y )
Nz*Preexisting MappingProxyVariable (source: zS) cannot be reconstructed because the connection to the original dict will be lost.z%mapping proxy cannot be reconstructedSource: zCUse a mapping proxy constructed in the same `torch.compile` region.r   c                  n     j                   j                  t               j                  d      g      S )Nr!  )r   r   r   r   r   s   r&   r   z2MappingProxyVariable.reconstruct.<locals>.<lambda>  s4    G))55e<,,-?@ r(   r   F)r   r   r   r  r   r  r   r   )rf   r   r   s    ` r&   r   z MappingProxyVariable.reconstructt  s    ;;<T[[M JL L  ?"4;;-0Y&22	 		
 	21e<=r(   r"   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 mutationr%  z, Dict mutation detectedzNAvoid modifying dictionaries that might be referenced by mapping proxy objectszROr avoid using the mapping proxy objects after modifying its underlying dictionaryr   )r   r   r   has_existing_dict_mutationr   r  r  )rf   r$   r%   r"   r   r   s         r&   r  z MappingProxyVariable.call_method  ss     ;;29911LLN7  G"4;;-/GHdh	 ||''D$??r(   r  )r   r   r   r_   rg   r   r  r   listr   strr  r  r  s   @r&   r  r  g  s^     1  
&4>6@ $%	@
 S++,@ 
@r(   r  c                       e Zd Zd Zd Zy)NNModuleHooksDictVariablec                      y r8   r   rs   s    r&   r   z7NNModuleHooksDictVariable.install_dict_keys_match_guard      r(   c                      y r8   r   rf   r$   r"   s      r&   r   z5NNModuleHooksDictVariable.install_dict_contains_guard  r.  r(   N)r   r   r   r   r   r   r(   r&   r,  r,    s    r(   r,  c                   d     e Zd Zdd fdZ fdZ fdZed        Z	 	 	 	 	 	 d	 fdZd Z	 xZ
S )
DefaultDictVariablec                 ^    t        |   ||fi | |t        j                  u sJ || _        y r8   )r   rg   r   defaultdictdefault_factory)rf   rG   r`   r5  r   r   s        r&   rg   zDefaultDictVariable.__init__  s3    3F3;22222.r(   c                 t    | j                   t        t        t        fvr| j                  syt
        |          S )NF)r5  r)  rm   r   rG   r   is_python_constantrf   r   s    r&   r7  z&DefaultDictVariable.is_python_constant  s1     eT'::4::w)++r(   c                 ^    d| j                   j                          dt        |           dS )Nzdefaultdict(r   ))r5  r   r   r8  s    r&   r   zDefaultDictVariable.debug_repr  s4    4//::<=R@R@T?UUVW	
r(   c                     t        | t        j                        r"| j                  t        t
        t        t        fv S t        | t        j                  j                        S r8   )
r>   r
   rN   fnr)  rm   r   set	functionsBaseUserFunctionVariabler   s    r&   is_supported_argz$DefaultDictVariable.is_supported_arg  sC    c944566dE4555c9#6#6#O#OPPr(   c                 ,   |dk(  r}t        |      dk(  sJ |d   | v r| j                  ||d         S | j                  t        |d          | j                  j	                  |g i       }t
        |   |d|d   |f|       |S t
        |   ||||      S )Nr   r   r   r   )ry   r   r5  r   call_functionr   r  )rf   r$   r%   r"   r   default_varr   s         r&   r  zDefaultDictVariable.call_method  s     = t9>!>Aw$))"d1g66''/"d1gY00"&"6"6"D"DRR"PKG'MDG[+A6 '&7&r4v>>r(   c                     j                  fd        | j                         | j                         j                  t	        dd             y )Nc                  n     j                   j                  t               j                  d      g      S )Nr4  r   r   s   r&   r   z1DefaultDictVariable.reconstruct.<locals>.<lambda>  s3    G))55kB,,]; r(   r   F)r   r5  r   r   r   r   s    `r&   r   zDefaultDictVariable.reconstruct  sJ    	
 	$$%**7321e<=r(   r8   r   r  )r   r   r   rg   r7  r   r   r@  r  r   r  r  s   @r&   r2  r2    sP    /
,

 Q Q? &	?
 -? 
?0>r(   r2  c                        e Zd ZdZdee   ddf fdZd Zed        Z	e
d        Zd	 Zd
 Zd ZddZdee   deeef   ddf fdZdddefdZd Zd Z xZS )SetVariablez.We model a sets as dictionary with None valuesrG   rc   Nc                 v    t         j                  |t        j                               }t	        |   |fi | y r8   )r   fromkeysrG  _default_valuer   rg   rf   rG   r   r   s      r&   rg   zSetVariable.__init__  s0    
 e[%?%?%AB)&)r(   c                     | j                   syddj                  d | j                   j                         D              z   dz   S )Nzset()r   ,c              3   P   K   | ]  }|j                   j                            y wr8   r   r:   r   s     r&   r<   z)SetVariable.debug_repr.<locals>.<genexpr>       !O!$$//"3!O   $&r   rG   r   r   rs   s    r&   r   zSetVariable.debug_repr  s7    zz!OTZZ__=N!OOORUUUr(   c                 H    t        | j                  j                               S r8   )r=  rG   r   rs   s    r&   	set_itemszSetVariable.set_items
  s    4::??$%%r(   c                  ,    t        j                  d       S r8   )r   r   r   r(   r&   rJ  zSetVariable._default_value  s      &&t,,r(   c                 p    | j                   D ch c]  }|j                  j                          c}S c c}w r8   )rT  re   rB   rf   r   s     r&   rB   zSetVariable.as_proxy  s$    )-8A888   !3c                     t         S r8   )r=  rs   s    r&   r   zSetVariable.python_type  s    
r(   c                 p    | j                   D ch c]  }|j                  j                          c}S c c}w r8   rT  re   rp   rW  s     r&   rp   zSetVariable.as_python_constant  '    37>>Ba'')BBBrX  c                     |j                  | j                  D cg c]  }|j                   c}       |j                  t	        dt        | j                                     y c c}w )N	BUILD_SETr   )foreachrT  re   r   r   ry   rf   r   r]   s      r&   r   zSetVariable.reconstruct  sE    t~~6!670#dnnBUVW 7s   A$r"   r   r   c                 
   |dk(  r t        j                  t              j                  |g|| }|j                  j
                  j                  |        | j                  j                          | j                  j                  |j                         t        j                  d       S |dk(  r;|rJ t        |      dk7  rt        ||       d}|d   t        j                         f}n|dk(  rB|rJ |rJ 	 | j                   j#                         j$                  }t0        
| e  ||f|       |S |dk(  rM|rJ t        |      dk(  sJ t        j4                  t6        j8                        j;                  || |d   gi       S |d	k(  r;|rJ t        j4                  t6        j<                        j;                  || g|i       S |d
k(  r;|rJ t        j4                  t6        j>                        j;                  || g|i       S |dk(  r;|rJ t        j4                  t6        j@                        j;                  || g|i       S |dk(  r;|rJ t        j4                  t6        jB                        j;                  || g|i       S |dk(  r;|rJ t        j4                  t6        jD                        j;                  || g|i       S |dk(  rUt        |      dk7  rt        ||       |rJ t        j4                  t6        jF                        j;                  || g|i       S |dk(  rUt        |      dk7  rt        ||       |rJ t        j4                  t6        jH                        j;                  || g|i       S |dk(  rK| jK                         r;|rJ t        j4                  t6        jL                        j;                  || g|i       S |dk(  r?|rJ t        |      dk(  sJ |d   | vrt)        t&        ||       t0        
| e  |d||      S |dk(  rC|rJ t        |      dk(  sJ |d   | v rt0        
| e  |d||      S t        j                  d       S |dv rtN        jP                  tN        jR                  d}|d   jU                         }	tW        |	t              s+t        j                  t              j;                  ||	gi       }	t        j                  |jY                  |            j;                  || |	gi       S t0        
| e  ||||      S # t&        $ rH}t)        t&        |t+        t-        t        j                  |j.                                     Y d }~?d }~ww xY w)Nrg   r   r   r   r   r   r!   
isdisjointintersectionintersection_updateunion
differencedifference_updatesymmetric_differencesymmetric_difference_updater   removediscard)rI   )issubset
issuperset)-r
   rN   r=  call_setr   r   r   rG   r   r   r   r   ry   r'   rG  rJ  rT  r   re   r   r   r)  mapr"   r   r  rR   r	   set_isdisjointrB  set_intersectionset_intersection_update	set_unionset_differenceset_difference_updateset_symmetric_differenceset_symmetric_difference_updater  
set_updateoperatorleger   r   r-   )rf   r$   r%   r"   r   temp_set_vtresultr;   opr}   r   s             r&   r  zSetVariable.call_method   s3    :A)33C8AA"UtUfUKII""++D1JJJJk//0#**400U]:4yA~#B- DG[779:DU]:O8++-00
 GD6)V<M\!:t9>!>11((mBtAw45 ^#:11**mBr23 **:1111mBr23 W_:11)2E2EFTTTMDM2  \!:11((mBr23 ((:11//mBr23 ++4yA~#B-:1122mBr23 224yA~#B-:1199mBr23 X$//"3:11)2F2FGUUTMDM2  X:t9>!>Awd"(2DA7&r5$??Y:t9>!>Aw$w*2udFCC'..T:://$KK&kkB GOO%E%-!11#6DDR%RTU,,RVVD\:HHT5M2  w"2tT6::a  (btC0@0G0G,P'Q s   :$T 	U"=UU"r$   r   r3   c                     t        d      )NzIllegal to getitem on a set)RuntimeError)rf   r$   r3   s      r&   r   zSetVariable.getitem_const  s    899r(   c                      y r8   r   rs   s    r&   r   z)SetVariable.install_dict_keys_match_guard      r(   c                      y r8   r   r0  s      r&   r   z'SetVariable.install_dict_contains_guard  r  r(   r  )r   r   r   r   r)  r   rg   r   r   rT  r   rJ  rB   r   rp   r   r   r*  r  r   r   r   r  r  s   @r&   rG  rG    s    8*O$* 
	*V & & - -9CXj; ?#	j;
 S/)*j; 
j;X: 7 :o :r(   rG  c                        e Zd Zdee   ddf fdZd Zed        Zd Z	d Z
dd	Zd
ee   deeef   ddf fdZ xZS )FrozensetVariablerG   rc   Nc                 &    t        |   |fi | y r8   r   rg   rK  s      r&   rg   zFrozensetVariable.__init__      
 	)&)r(   c                     | j                   syddj                  d | j                   j                         D              z   dz   S )Nzfrozenset()r   rM  c              3   P   K   | ]  }|j                   j                            y wr8   r   rO  s     r&   r<   z/FrozensetVariable.debug_repr.<locals>.<genexpr>  rP  rQ  r   rR  rs   s    r&   r   zFrozensetVariable.debug_repr  s7    zz !OTZZ__=N!OOORUUUr(   c                 6    | j                   j                         S r8   )rG   r   rs   s    r&   rT  zFrozensetVariable.set_items  s    zz  r(   c                     t         S r8   )	frozensetrs   s    r&   r   zFrozensetVariable.python_type      r(   c                 p    | j                   D ch c]  }|j                  j                          c}S c c}w r8   r[  rW  s     r&   rp   z$FrozensetVariable.as_python_constant  r\  rX  c                     j                  | j                  D cg c]  }|j                   c}       j                  fd       j	                  t        dd             y c c}w )Nc                  F     j                   j                  d      g      S )Nr  )r   create_load_globalr   s   r&   r   z/FrozensetVariable.reconstruct.<locals>.<lambda>  s%    G))..{; r(   r   F)r_  rT  re   r   r   r   r`  s    ` r&   r   zFrozensetVariable.reconstruct  sR    t~~6!67	
 	21e<= 7s   A%r"   r   r   c                     |dv rt        d| d      |dk(  rt        j                  d       S t        |   ||||      S )Nr   r   r   rj  rk  r   Illegal call_method z on a frozensetrg   )r  r   r   r   r  rf   r$   r%   r"   r   r   s        r&   r  zFrozensetVariable.call_method  sT     II!5dV?KLLZ $**400w"2tT6::r(   r  )r   r   r   r)  r   rg   r   r   rT  r   rp   r   r   r*  r  r  r  s   @r&   r  r    s    *O$* 
	*V ! !C	>; ?#	;
 S/)*; 
; ;r(   r  c                   x     e Zd Zdee   ddf fdZd Zed        Zd Z	d Z
d	ee   d
eeef   ddf fdZ xZS )DictKeySetVariablerG   rc   Nc                 &    t        |   |fi | y r8   r  rK  s      r&   rg   zDictKeySetVariable.__init__  r  r(   c                     | j                   syddj                  d | j                   j                         D              z   dz   S )Nzdict_keys([])zdict_keys([rM  c              3   P   K   | ]  }|j                   j                            y wr8   r   rO  s     r&   r<   z0DictKeySetVariable.debug_repr.<locals>.<genexpr>  s     H144??,HrQ  z])rR  rs   s    r&   r   zDictKeySetVariable.debug_repr  sA    zz" ((Hdjjoo6GHHIr(   c                     | j                   S r8   )rG   rs   s    r&   rT  zDictKeySetVariable.set_items  s    zzr(   c                     t         S r8   r   rs   s    r&   r   zDictKeySetVariable.python_type  r  r(   c                     t         j                  | j                  D ch c]  }|j                  j	                          c}d       j                         S c c}w r8   )r   rI  rT  re   rp   r   rW  s     r&   rp   z%DictKeySetVariable.as_python_constant  s>    }}04?1QTT$$&?

$&	?s   !Ar"   r   r   c                 N    |dv rt        d| d      t        | 	  ||||      S )Nr  r  z on a dict_keys)r  r   r  r  s        r&   r  zDictKeySetVariable.call_method  s9     II!5dV?KLLw"2tT6::r(   )r   r   r   r)  r   rg   r   r   rT  r   rp   r   r*  r  r  r  s   @r&   r  r    sy    *O$* 
	*  
	; ?#		;
 S/)*	; 
	; 	;r(   r  c                        e Zd ZU dZdZee   ed<   deddf fdZ	e
d        Ze
d        Zd	 Zdd
Zded   deedf   ddf fdZ xZS )DictViewVariablezu
    Models _PyDictViewObject

    This is an "abstract" class. Subclasses will override kv and the items method
    Nkvr  rc   c                 v    t        |   di | | j                  dv sJ t        |t              sJ || _        y )N)r   r   rG   r   )r   rg   r  r>   r_   r  r  s      r&   rg   zDictViewVariable.__init__  s>    "6"ww5555'#4555r(   c                 `     t        | j                  j                  | j                               S r8   )getattrr  rG   r  rs   s    r&   
view_itemszDictViewVariable.view_items	  s"    3wt||))477355r(   c                     t         r8   )NotImplementedErrorrs   s    r&   view_items_vtzDictViewVariable.view_items_vt  s
     "!r(   c                     | j                   S r8   )r  r#  s     r&   r  z$DictViewVariable.unpack_var_sequence  s    !!!r(   c                      || j                          |j                  | j                         |j                  d       y )Nr   )r  load_methodr  r  r   s     r&   r   zDictViewVariable.reconstruct  s.    DGG$Ar(   r"   r   r   c                 n    |dk(  r| j                   j                  ||||      S t        |   ||||      S )Nr   )r  r  r   r  s        r&   r  zDictViewVariable.call_method  s>     9<<++BdFCCw"2tT6::r(   r  )r   r   r   r   r  r   r*  __annotations__r_   rg   r   r  r  r  r   r)  r   r  r  r  s   @r&   r  r    s     B 1   6 6 " "
"
	; $%		;
 S++,	; 
	; 	;r(   r  c                   f     e Zd ZdZed        Zed        Zd Zded   de	e
df   ddf fd	Z xZS )
r  r   c                 ,    t        | j                        S r8   )r=  r  rs   s    r&   rT  zDictKeysVariable.set_items*  s    4??##r(   c                 T    | j                   D cg c]  }|j                   c}S c c}w r8   )r  re   r   s     r&   r  zDictKeysVariable.view_items_vt.  s      #oo....s   %c                     t         S r8   r  rs   s    r&   r   zDictKeysVariable.python_type3  r  r(   r"   r   r   rc   c                 T   |dk(  r| j                   j                  ||||      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>   rG  r  r   r   NotImplementedrT  r   r  s        r&   r  zDictKeysVariable.call_method6  s     >!<<++BdFCC))d1g5E'FG'..~>>#**&t,T^^T!W=N=NO  w"2tT6::r(   )r   r   r   r  r   rT  r  r   r)  r   r*  r  r  r  s   @r&   r  r  '  sl    	B$ $ / /; $%	;
 S++,; 
; ;r(   r  c                   &    e Zd ZdZed        Zd Zy)r  r   c                 ,    t        | j                        S r8   )r)  r  rs   s    r&   r  z DictValuesVariable.view_items_vtL  s    DOO$$r(   c                     t         S r8   )r   rs   s    r&   r   zDictValuesVariable.python_typeP  s    r(   Nr   r   r   r  r   r  r   r   r(   r&   r  r  H  s    	B% %r(   r  c                   &    e Zd ZdZed        Zd Zy)r   rG   c                     | j                   D cg c]&  \  }}t        j                  |j                  |g      ( c}}S c c}}w r8   )r  r
   rE   re   r   s      r&   r  zDictItemsVariable.view_items_vtW  s5     @DOtq!	''q	2OOOs   +?c                     t         S r8   )r   rs   s    r&   r   zDictItemsVariable.python_type\  s    r(   Nr  r   r(   r&   r   r   T  s     	BP Pr(   r   r8   )<r   r   r   rJ   ry  r   collections.abcr   rM   typingr   r   torch._subclasses.fake_tensorr   r   r   r	   r
   bytecode_transformationr   r   excr   r   guardsr   r   r   r   utilsr   r   r   r   r   r   baser   r   constantr   torch._dynamo.codegenr   r1   r   r'   r/   r4   r9   r_   r  r,  r2  rG  r  r  r  r  r  r   r   r(   r&   <module>r     s  (      3 * 1 6 6 N < 0 )  4 & /D>.
ba' a'HC@? C@L 1 =>+ =>F\# \~5; 5;p'; ';T*; *;Z;' ;B	) 		( 	r(   