
    ^j                     j   U 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ZddlZddl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mZ ddlmZmZmZ ddlmZmZmZ ddlZddlmZ ddlmZ ddlmZ d	d
lm Z m!Z!m"Z"m#Z# d	dl$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, d	dl-m.Z.m/Z/ d	dl0m1Z1 d	dl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 d	dl9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZK ddlLmMZMmNZNmOZOmPZPmQZQ ddlRmSZSmTZT ddlUmVZVmWZWmXZXmYZY ddlZm[Z[ ddl\m]Z]m^Z^m_Z_m`Z`maZa ddlbmcZcmdZd ddlemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZumvZvmwZwmxZxmyZy ddlzm{Z{m|Z| ddl}m~Z~mZmZmZmZ ddlmZmZmZ erddlmZ ddlmZ  ej                  e      Ze	j                  e	j                  e	j                   e	j"                  e	j$                  e	j&                  e	j(                  e	j*                  e	j,                  e	j.                  e	j0                  e	j2                  e	j4                  e	j4                  e	j6                  e	j8                  e	j:                  e	j<                  e	j>                  e	j@                  e	jB                  e	jD                  e	jF                  e	jH                  e	jJ                  e	jL                  iZe eddh      e eddh      e edd h      iZeeee   f   ed!<   e
jb                  d"k\  r ed#h      ee<   ed$ej*                  ej*                  geQdz  f   ZeeQ   eeeQ   d%f   z  Ze	jl                  d&e	jn                  d'e	jp                  d(e	jr                  d)e	jt                  d*e	jv                  d+iZeed%ef   ef   ed,<   e	j@                  e	j&                  e	jz                  e	j*                  e	j.                  e	j2                  e	j                  e	jp                  e	jt                  e	jv                  e	jr                  e	jn                  e	jl                  e	j"                  e	j>                  e	j$                  e	j4                  e	j(                  e	j,                  e	j0                  e	j                  e	j                   fZe	jD                  e	jH                  e	jL                  e	jB                  e	jJ                  e	jF                  fZe	j                  fZe	j8                  e	j<                  e	j6                  e	j:                  e	j                  fZe	j                  e	j                  e	j                  e	j                  e	j                  fZeWeXe|efZeeeQ   d%f   ed-<   i aeed%ef   ed%ef   f   ed.<   i aeed%ef   ed%ef   f   ed/<    eͫ       ZdDd1Z G d2 d3eQ      Z G d4 d5eЫ      Z G d6 d7eЫ      Z G d8 d9eЫ      Z G d: d;eЫ      Z G d< d=eЫ      Z G d> d?eЫ      Z G d@ dAeЫ      Zej                  dBd$d0ej                  d   fdC       Zy)Ea\  
Built-in function and type variable tracking for TorchDynamo's symbolic execution.

This module contains variable tracker classes for Python built-in functions, types,
and operations during graph compilation. It handles symbolic execution of:

- Built-in functions (len, getattr, isinstance, etc.)
- Type constructors (int, float, str, list, dict, etc.)
- Built-in operators and methods
- Special Python constructs (super, hasattr, etc.)

Key classes:
- BuiltinVariable: Tracks built-in functions and handles their execution
- TypeVariable: Manages type constructor calls and type checking
- SuperVariable: Handles super() calls in class hierarchies

These variable trackers ensure that built-in Python operations are correctly
handled during symbolic execution, either by executing them directly when safe
or by creating appropriate graph nodes when needed.
    N)defaultdictOrderedDict)CallableIterableSequence)AnyNoReturnTYPE_CHECKING)is_sparse_any)BaseTorchFunctionMode)is_traceable_wrapper_subclass   )configgraph_break_hints	polyfills	variables)ObservedAttributeErrorObservedUserStopIterationraise_observed_exceptionraise_type_errorunimplementedUnsupported	UserErrorUserErrorType)GuardBuilderinstall_guard)DummyModule)
AttrSourceGetItemSourceGlobalSourceis_constant_sourceSource
TypeSource)check_constant_argscheck_numpy_ndarray_argscheck_unspec_or_constant_argscheck_unspec_python_argsdict_methodsextract_fake_example_valueget_fake_valueguard_if_dynis_tensor_getset_descriptoris_wrapper_or_member_descriptoristypenumpy_operator_wrapperproxy_args_kwargsraise_args_mismatchspecialize_symnodestr_methodstensortype_to_dtypeunpack_iterable   )#AsPythonConstantNotImplementedErrorAttrMutationKindNO_SUCH_SUBOBJValueMutationNewVariableTracker)ConstantVariableFakeIdVariable)ConstDictVariableDictItemsVariableDictKeysVariableDictViewVariableis_hashable)BaseListVariableListIteratorVariableListVariableTupleIteratorVariableTupleVariable)NullVariableStringFormatVariable)
binary_iop	binary_opgeneric_absgeneric_boolgeneric_floatgeneric_getitergeneric_inplace_multiplygeneric_intgeneric_lengeneric_multiplygeneric_neggeneric_posgeneric_reprgeneric_strmaybe_get_python_typepysequence_checkvt_add
vt_getitemvt_identity_comparevt_inplace_add)FrozensetVariableSetVariable)FakeItemVariablesupported_comparison_opsSymNodeVariableTensorVariableUnspecializedPythonVariable)is_data_descriptorUserDefinedObjectVariableUserDefinedVariable)	PyCodegen)InstructionTranslatorBase__new__
from_bytesfromhexhex"_BUILTIN_CONSTANT_FOLDABLE_METHODS      from_numberrj   .__eq____ne____lt____le____gt____ge___OPERATOR_TO_DUNDER_SET_LIKE_OP_SUPPORTBUILTIN_TO_TENSOR_FN_MAPBUILTIN_TO_TENSOR_RFN_MAPreturnc                  r  	
 t        t              dkD  ry d  G fddt              } t        j                  d      t        j                  d      	t        j                  dt        j
                        t        j                  dt        j
                        
 |        5  fdt        ffdt        f	fdt        f
fd	t        ffd
t        fg}|D ]-  \  }}|D ]#  } ||       t        d|       t        |<   % / 	fdt        f
fdt        ffdt        fg}t        j                  t        j                  t        j                  h}|D ]?  \  }}|D ]5  }||v r ||       t        d|       t        |   k7  s-t         |<   7 A 	 d d d        y # 1 sw Y   y xY w)Nr   c                   X    e Zd ZdZ	 	 d
dedef   dedee   deeef   dz  def
 fd	Z	y)8populate_builtin_to_tensor_fn_map.<locals>.GetMethodModez
        Mode to extract the correct methods from torch function invocations
        (Used to get the correct torch.Tensor methods from builtins)
        Nfunc.typesargskwargsr~   c                 $    |xs i }| ||i |S N )selfr   r   r   r   most_recent_funcs        j/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_dynamo/variables/builtin.py__torch_function__zKpopulate_builtin_to_tensor_fn_map.<locals>.GetMethodMode.__torch_function__  s$     \rF#(((    )r   N)
__name__
__module____qualname____doc__r   r   r   dictstrr   )r   s   r   GetMethodModer     s_    	 #%,0
	)38$
	) 
	) 3-	
	)
 cNT)
	) 
	)r   r   r6   )dtypec                      |       S r   r   )oinp0s    r   <lambda>z3populate_builtin_to_tensor_fn_map.<locals>.<lambda>*  s    qw r   c                      |       S r   r   r   inp0_ints    r   r   z3populate_builtin_to_tensor_fn_map.<locals>.<lambda>+  s    q{ r   c                      |       S r   r   )r   r   inp1s    r   r   z3populate_builtin_to_tensor_fn_map.<locals>.<lambda>,  s    qt} r   c                      |       S r   r   )r   r   inp1_ints    r   r   z3populate_builtin_to_tensor_fn_map.<locals>.<lambda>-  s    q8, r   c                      | d      S Nr   r   r   s    r   r   z3populate_builtin_to_tensor_fn_map.<locals>.<lambda>.  s    q1~ r   z,most_recent_func is None after setup for op c                      | d      S Nr6   r   )r   r   s    r   r   z3populate_builtin_to_tensor_fn_map.<locals>.<lambda><  s    !At* r   c                      | d      S r   r   )r   r   s    r   r   z3populate_builtin_to_tensor_fn_map.<locals>.<lambda>?      qH~ r   c                      | d      S r   r   r   s    r   r   z3populate_builtin_to_tensor_fn_map.<locals>.<lambda>@  r   r   z4most_recent_func is None after setup for reverse op )lenr|   r   torchonesint32un_ops
un_int_opsbin_opsbin_int_opstensor_and_int_opsAssertionErroroperatormatmulimatmulgetitemr}   )r   setups_and_oplistssetup_fnop_listoprsetups_and_oplistsrskipsr   r   r   r   r   s          @@@@@r   !populate_builtin_to_tensor_fn_mapr   
  s   
#$q( 	26)- )$ ::a=D::a=Dzz!5;;/Hzz!5;;/H	 &E'"J/$g.,k:%'9:N
 "4 	@Hg @#+(FrdK  0@(,@	@ % &{3%'9:O
 //8#3#3X5E5EF!4 
	EHg 	E<#+(NrdS  $'?'CC4D-b1	E
	E9&E &E &Es   'C.F-F--F6c            
            e Zd ZU dZdZeed<   edededd fd       Z	defdZ
dd	Zd
ddedefdZd
ddedefdZd
ddeeef   fdZd
ddededefdZ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 )BaseBuiltinVariablea  
    Common base class for all builtin variable trackers (BuiltinVariable,
    DictBuiltinVariable, IterBuiltinVariable, and future specialized builtins).

    Provides shared implementations for guard installation, hasattr tracing,
    and Python-level hashability/equality.

    Specialized subclasses (e.g. DictBuiltinVariable) set `_fn` as a class
    attribute. BuiltinVariable stores the callable on the instance as `self.fn`
    and overrides as_python_constant / reconstruct / var_getattr accordingly.
    N_fnvaluesourcer~   c                 d    t        |j                  t        j                                | |      S Nr   r   
make_guardr   BUILTIN_MATCHclsr   r   s      r   create_with_sourcez&BaseBuiltinVariable.create_with_source`  s&    f''(B(BCD&!!r   c                     | j                   S r   )r   r   s    r   as_python_constantz&BaseBuiltinVariable.as_python_constante  s    xxr   c                     | j                         j                  }||j                  j                  v rt	        d      |j                  |j                  |d             y )Nshadowed globalTadd)r   r   tx	f_globalsr   append_outputcreate_load_globalr   codegennames      r   reconstructzBaseBuiltinVariable.reconstructh  sR    &&(117::''' !233g8848HIr   r   rj   r   c                     | j                   xr t        | j                   |      }t        | j                  |d       }t	        j
                  | ||t        |      |      S d |      S )Npy_typer   )r   r   getattrr   r   GetAttrVariabletype)r   r   r   r   attrs        r   var_getattrzBaseBuiltinVariable.var_getattrn  se     >DKK!>txxt,(($d.>T
QW
 	
DHQW
 	
r   c                 ^    t        j                  |t        | j                         |            S r   )r;   buildhasattrr   )r   r   r   s      r   call_obj_hasattrz$BaseBuiltinVariable.call_obj_hasattrw  s'     $$R1H1H1JD)QRRr   c                 8    t        | j                               dfS NF)hashr   )r   r   s     r   	hash_implzBaseBuiltinVariable.hash_impl|  s    D++-.55r   otherr   c                 $    ddl m}  || |||      S )Nr6   ) python_constant_richcompare_impl)object_protocolr   )r   r   r   r   r   s        r   richcompare_implz$BaseBuiltinVariable.richcompare_impl  s     	F/b%DDr   c                 f    t        |t              xr  | j                         |j                         u S r   )
isinstancer   r   r   r   s     r   is_python_equalz#BaseBuiltinVariable.is_python_equal  s1    %!45 
##%)A)A)CC	
r   r   r   c                    |dk(  rNt        |      dk(  r?|s<|d   }| j                         t        u rMt        |t        j
                        r3t        j                  |t        j                  |j                              S | j                         t        u rt        |t        j                        r3t        j                  |t        j                  |j                              S |j                         rUt        |j                         t              r7t        j                  |t        j                  |j                                     S t        ||      S t        | =  ||||      S )N__repr__r6   r   )r   r   objectr   r   rg   r;   r   r   r   r   UserDefinedClassVariableis_python_constantrW   supercall_method)r   r   r   r   r   arg	__class__s         r   r   zBaseBuiltinVariable.call_method  s    :#d)q.q'C&&(F2zY888 ',,R1KLL&&(D0c9#E#EF*00T]]3995MNN))+
**,d1 +00DMM#*@*@*BC   C((w"2tT6::r   r   ri   r~   N)r   r   r   r   r   r   __annotations__classmethodr"   r   r   r   r   r;   r   r<   r   tupleintboolr   r   r   r   listr   r   __classcell__r   s   @r   r   r   Q  s4   
 CO"s "F "?T " "C J
-
58
	
S-S58S	S
67 6E#t)<L 6E'E E 	E
 
E
V 
 

;'; ; ?#	;
 S/)*; 
; ;r   r   c                   j    e Zd ZU dZ e       Zdhej                  Zede	de
dd fd       Zeej                  deede	f      fd              Zdefd	Zeej                  deede	f      fd
              Zeej                  deedef   eee   edef   f   f   fd              Zeej                  deedef   eeeee   ef   ef      f   fd              Zedede	f   dee   dedee   dz  fd       ZdefdZ e ee!e"e#ee$h      Z%e e	   e&d<   de	de	ddf fdZ'defdZ(de	fdZ)de	fdZ*	 ddddededefdZ+de	f fdZ,ddZ-d ededefd!Z.d edefd"Z/d#ee   defd$Z0d ededefd%Z1ed ee   deeef   deee	   eee	f   f   fd&       Z2d ee   deeef   defd'Z3edede	f   d#ee   d(ededee   eeef   gedz  f   fd)       Z4ed*e5jl                  defd+       Z7eddd,e5jp                  d-ededz  fd.       Z9ddded edededz  f
d/Z:ddd e	defd0Z;ddd edefd1Z<edddefd2       Z=ddd ee   deeef   dedz  fd3Z>i Z?eeedf   edee   eeef   gef   f   e&d4<   ddd ee   deeef   defd5Z@ddd6ed ee   deeef   def
 fd7ZAddd8ededz  fd9ZBddd8ededz  fd:ZCddd8ededz  fd;ZDddd8edefd<ZEddd8ededz  fd=ZFddd8ededz  fd>ZGd? ZHddd ededz  fd@ZIdddAee   defdBZJdddCedz  dDedz  dedz  fdEZKeIZLeIZMddd8edefdFZNddd8edefdGZOddd8edefdHZPddd8ed ededef
dIZQddd ededz  fdJZRd ededefdKZSddd edefdLZTddd e	de	defdMZUddd edededz  fdNZVddd8ededz  fdOZWdPe	d edededz  fdQZXddd8ededz  fdRZYddd ededefdSZZddd ededefdTZ[ddd ededefdUZ\ddd ededefdVZ]ddd ededefdWZ^ddd8edXedefdYZ_dddZed[edefd\Z`dddCedDedefd]Zaddd edefd^Zbddded_ededef
d`ZcdddedaedefdbZdddd6edefdcZeddddedeedefdfZfddddedefdgZgddddedefdhZhddddedededz  fdiZidddCedefdjZjdddked ededef
dlZkddd edefdmZldddnedefdoZmdddpedqedefdrZndddpedqedefdsZodddCedDededz  fdtZpdddCedDededz  fduZqdddCedDededz  fdvZrdddCedDededz  fdwZsdddCedDededz  fdxZtdddCedDededz  fdyZudddCedDededz  fdzZvdddCedDededz  fd{ZwdddCedDededz  fd|ZxdddCedDededz  fd}ZydddCedDededz  fd~ZzdddCedDededz  fdZ{dddCedDededz  fdZ|dddCedDededz  fdZ}dddCedDededz  fdZ~dddCedDededz  fdZdddCedDededz  fdZdddCedDededz  fdZdddCedDededz  fdZdddCedDededz  fdZdddCedDededz  fdZdddCedDededz  fdZdddCedDededz  fdZdddCededz  fdZdddCedDedefdZdedefdZ xZS )BuiltinVariablea  
    A VariableTracker that represents a built-in value (functions and operators).
    A lot of the code here assumes it will be a function object.

    The BuiltinVariable class wraps Python built-in functions (like len, isinstance, etc.)
    and operators (like +, -, *, etc.) to enable symbolic execution during tracing. This allows
    Dynamo to properly handle these operations when converting Python code to FX graphs while
    maintaining correct semantics and enabling optimizations.
    fnr   r   r~   c                 f    t        |j                  t        j                                | ||      S r   r   r   s      r   r   z"BuiltinVariable.create_with_source  s(    f''(B(BCD5((r   .c                  v   h t         t        t        t        t        t
        t        t        t        t        t        t        t        t        t        t        t         t"        t$        t&        t(        t*        t,        t.        t.        j                  t0        t2        t4        j                   t4        j6                  t4        j8                  t4        j:                  t4        j<                  t4        j>                  t4        j(                  t4        j@                  t4        jB                  t4        jD                  t4        jF                  t4        jH                  t4        jJ                  t4        jL                  t4        jN                  t4        jP                  t4        jR                  t4        jT                  t4        jV                  t4        jX                  t4        jZ                  t4        j\                  t4        j^                  t4        j`                  t4        jb                  t4        jd                  t4        jf                  t4        jh                  t4        jj                  t4        jl                  t4        jn                  t4        jp                  t4        jr                  t4        jt                  t4        jv                  } ddl<m=} | j}                   |j~                                | j}                  d t        j                  j                         D               | S )Nr6   )rb   c              3   h   K   | ]*  }t        |t        t        j                              s'| , y wr   )r   r   mathsqrt.0xs     r   	<genexpr>z;BuiltinVariable._constant_fold_functions.<locals>.<genexpr>  s!     W
1d499o8V1Ws   (22)Babsallanyasciibinr  callablechrcomplexdivmodfloatformatr   rn   r   r   maxminoctordpowreprroundr   sumr   r   posnegnot_truthinvertmulr   floordivtruedivmodr   subr   length_hintlshiftrshiftand_or_xoripowimulr   	ifloordivitruedivimodiaddisubilshiftirshiftiandixoriorindextensorrb   updatevaluesr  __dict__)fnsrb   s     r   _constant_fold_functionsz(BuiltinVariable._constant_fold_functions  s   ?(
?(
?(
 ?(
 	?(

 ?(
 ?(
 ?(
 ?(
 ?(
 ?(
 ?(
 ?(
 ?(
 ?(
 ?(
  !?(
" #?(
$ %?(
& '?(
( )?(
* +?(
, -?(
. /?(
0 1?(
2 JJ3?(
4 5?(
6 7?(
8 LL9?(
: LL;?(
< LL=?(
> MM??(
@ NNA?(
B OOC?(
D LLE?(
F LLG?(
H OOI?(
J K?(
L M?(
N LLO?(
P LLQ?(
R LLS?(
T U?(
V   W?(
X OOY?(
Z OO[?(
\ MM]?(
^ LL_?(
` LLa?(
b MMc?(
d MMe?(
f g?(
h i?(
j k?(
l MMm?(
n MMo?(
p MMq?(
r s?(
t u?(
v MMw?(
x MMy?(
z LL{?(
| NN}?(
@ 	5

2+2245

Wdmm224WW
r   c                 :    | j                   | j                         v S r   )r  rF  r   s    r   can_constant_fold_throughz)BuiltinVariable.can_constant_fold_through  s    ww$77999r   c                     h t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                   t         j"                  t         j$                  t         j&                  t         j(                  t         j*                  t         j,                  t         j.                  t         j0                  t         j2                  t         j4                  t         j6                  t         j8                  t         j:                  t         j<                  t         j>                  t         j@                  t         jB                  t         jD                  t         jF                  t         jH                  t         jJ                  t         jL                  t         jN                  } | S r   )(r   r  r$  r%  r&  r(  r   r)  r   r*  r+  r,  r   ltgtgeleneeqr-  r.  r/  r0  r1  r2  r3  r4  r5  r   r6  r7  r   r8  r9  r:  r;  r<  r=  r>  r?  rE  s    r   _fx_graph_functionsz#BuiltinVariable._fx_graph_functions  sQ   (
LL(
LL(
 LL(
 MM	(

 OO(
 LL(
 LL(
 OO(
 (
 (
 LL(
 LL(
 KK(
 KK(
 KK(
  KK!(
" KK#(
$ KK%(
& LL'(
(   )(
* OO+(
, OO-(
. MM/(
0 LL1(
2 LL3(
4 MM5(
6 MM7(
8 9(
: ;(
< =(
> ?(
@ MMA(
B MMC(
D MME(
F G(
H I(
J MMK(
L MMM(
N LLO(
R 
r   c                  ~    t         g dt        j                  ft        j                   g dt        j                  fi} | S )N)__pow____rpow____ipow__)r   r   r4  rP  s    r   _binopszBuiltinVariable._binops9  s5     5x}}ELL>N	U
 
r   c                     ddl m ddlm ddlm ddlm ddlm	 i } t        j                         j                         D ]~  \  }\  }}g | |<   g | |<   |\  }}}||ddd	d
t        dt        dt        dt        dt        ffd}| |   j                  t        f|f       | |   j                  t        f|f       |ddd	d
t        dt        dt        dt        f
d}| |   j                  t        f|f       | |   j                  t        f|f       |ddd	d
t        dt        dt         dt"        f   dt        f
d}	| |   j                  t$        t        f|	f       | |   j                  t        t$        f|	f       | |   j                  t$        t        f|	f       | |   j                  t        t$        f|	f        dt         dt"        f   dt&        t(        t(        t*        t*        f   t,        f      ffd}
t/        j0                         D ]9  }t3        |      st5        d| d      || v rt5        d|        |
|      | |<   ; | S )Nr6   )BaseUserFunctionVariableNNModuleVariable)supported_const_comparison_ops)BaseTorchVariable)rh   )forward_namereverse_namer   rj   abr]  r^  r~   c                p    t        |      r|j                  | ||gi       S |j                  | ||gi       S r   )r   r   )r   r_  r`  r]  r^  rh   s        r   user_defined_handlerz=BuiltinVariable._binop_handlers.<locals>.user_defined_handlero  s>    , a!45==\A3CC==\A3CCr   )r]  c                ,    |j                  | ||gi       S r   r   )r   r_  r`  r]  s       r   user_defined_inplace_handlerzEBuiltinVariable._binop_handlers.<locals>.user_defined_inplace_handler  s     }}RsB??r   r  r  .c          
      p    ddl m}  ||  | j                  j                  d|gt	        ||gi              S Nr6   wrap_fx_proxycall_function)builderrj  outputcreate_proxyr0   )r   r_  r`  r  rj  s        r   dynamic_handlerz8BuiltinVariable._binop_handlers.<locals>.dynamic_handler  sC     3$*BII**'.?A.K r   r   c           	      ^   
 dddt         dt         dt         f fd}t        t        f|fg} t        v rt        t        f|fg}t               }|j	                  t
        t         f|j                  ft         t
        f|j                  fg       t            
dddt         dt         dt         f
fd}|j                  t         t         f|f       |S t        t        f|fg} j                         v r: j                  j                  d      r  t               d       dddt         dt         dt         ffd	}|}|}t        t
        t        t        f}|j	                  |t        f|ft        |f|fg       t               }|j	                  t        t         f|j                  ft         t        f|j                  ft
        t         f|j                  ft         t
        f|j                  fg       ddd
t         dt         dt         d z  f fd}	|j                  t         t         f|	f       |S )Nr   rj   r_  r`  r~   c                     	 t        j                  |  |j                  |j                              S # t        $ r4}t	        t        |      | t        |j                               Y d }~y d }~ww xY w)Nr   )r;   r   r   	TypeErrorr   r   r  r   )r   r_  r`  excr   s       r   compare_by_valuezYBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.compare_by_value  s\    *00R5IJJ  ,S	!#((^ s   04 	A1*A,,A1c                 &    ddl m}  || ||      S )Nr6   generic_richcompare)r   rx  )r   r_  r`  rx  dunders       r   handlerzPBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.handler  s    
 E.r1a@@r   is_c                 0    t        j                  |       S r   )r;   r   )r   r_  r`  none_results      r   neverzNBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.never  s    
 +00[AAr   leftrightc                     t        ||      }|y |j                         }t        j                  | j                  dk(  r|      S |       S )Nr{  )r]   r   r;   r   r   )r   r  r  resultis_samer   s        r   	handle_iszRBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.handle_isC  sY    
 1u=F~#$779G*00r{{e';G EL r   )r;   r<   rz   r  extendrc   _comparison_with_symnodeappendrC  r   
startswithr   rd   rD   r>   _comparison_with_tensor)r   ru  r  op_varrz  r~  obj_op_nonenone_op_objtypes_that_are_never_noner  ry  r}  r\  rX  rZ  rh   r[  s   `         @@r   create_cmp_op_handlersz?BuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers  s   
/
4C
HW
 
( $%568HIJ  ((
 '(89;KL ), -o>";;
 -o>";;	  -R0A3A&A 'A %	A A7KL(*:;=MNOF3::<<AWAWB !40B3B&B 'B %	B $# ##$$',%%	-)  78HI'
 ./HI'	 ), ,_="::
 -n="::
 -o>";;
 -o>";;*3) + %t+	 A9MNMr   zcomparison op z is not callablezduplicate handler for op )	functionsrX  	nn_modulerZ  rA  r[  r   r\  user_definedrh   r  rV  itemsr;   r   r  r   r   rc   r  r   _TrackersType_HandlerCallbackrb   rC  r  r   )op_handlersr   magic_method_namesin_place_opr]  r^  inplace_namerb  re  ro  r  r\  rX  rZ  rh   r[  s              @@@@@r   _binop_handlerszBuiltinVariable._binop_handlersK  s   $ 	8/:,5 -/ $$&,,.Z	 
- KO')K$7I4L, %1$0D/D"D #D
 "D "D !D6 O""%79MN O""!#679MN %1@/@"@ #@
 "@ !@ $++%79UV $++!#679UV *,/" #
 S#X& !  O""!?3_E O""!?3_E
 $++!?3_E $++!?3_EqZ	|O	c"O	%m]:;=MMNOO	 O	b +113 	9BB<$~bT9I%JKK[ $'@%EFF4R8KO	9 r   r   a_typeb_typeNc                     t         j                         j                  |       }|y g }|D ]3  \  \  }}}t        ||      st        ||      s#|j	                  |       5 |S r   )r  r  get
issubclassr  )r   r  r  handlersmatchestype1type2rz  s           r   _find_binop_handlerz#BuiltinVariable._find_binop_handler]  si     #22488<'/ 	(#NUEG&%(Z-Fw'	( r   c                 :    | j                   | j                         v S r   )r  rQ  r   s    r   can_insert_in_graphz#BuiltinVariable.can_insert_in_graphk  s    ww$22444r   MUST_USE_SPECIALIZEDr   c                 l    || j                   v rt        d|d      t        |   di | || _        y )Nz!Use the specialized VT class for z9, not BuiltinVariable. E.g. DictBuiltinVariable for dict.r   )r  r   r   __init__r  )r   r  r   r   s      r   r  zBuiltinVariable.__init__t  sH    *** 3B6 :5 6  	"6"r   c                     | j                   d}n| j                   j                  }| j                  j                   d| dS )NNone())r  r   r   )r   r   s     r   r   zBuiltinVariable.__repr__}  s=    77?D77##D..))*!D633r   c                     | j                   S r   rf  r   s    r   r   z"BuiltinVariable.as_python_constant      wwr   c                     | j                   S r   rf  r   s    r   get_real_python_backed_valuez,BuiltinVariable.get_real_python_backed_value  r  r   r   rj   r   reversec                    t        | j                  t              st        j                  |t
              S 	 |j                         }t        | j                        j                  | j                  |      }|t
        u rt        j                  |t
              S t        j                  ||      S # t        $ r t        j                  |t
              cY S w xY wr   )	r   r  r   r;   r   NotImplementedr   NotImplementedError__or__)r   r   r   r  	other_valr  s         r   
nb_or_implzBuiltinVariable.nb_or_impl  s     $''4("((^<<	=002I dgg%%dggy9^#"((^<<$$R00 # 	="((^<<	=s   B- -#CCc                     t         t        j                   t        t        j                  t        t        j
                  i}| j                  |v r|| j                     S t        | !         S r   )	r  r   r   int64r  float64r  r   as_proxy)r   DTYPEr   s     r   r  zBuiltinVariable.as_proxy  sO    %**5==

 77e>!w!!r   c                 0   | j                   j                  }| j                   j                  dk7  r"t        d| j                   j                         ||j                  j
                  v rt        d      |j                  |j                  |d             y )NbuiltinszExpected builtins module, got r   Tr   )r  r   r   r   r   r   r   r   r   s      r   r   zBuiltinVariable.reconstruct  s}    ww77+ #A$''BTBTAU!VWW7::''' !233g8848HIr   r   c                     t        ||      S r   )r$   r   r   r   s      r   constant_argszBuiltinVariable.constant_args  s    "400r   c                 x    d}|D ]2  }t        |t        j                        r y|xs |j                         }4 |S r   )r   r   r   	is_tensor)r   r   
any_tensorr   s       r   tensor_argszBuiltinVariable.tensor_args  sA    
 	7C#y889#6s}}J	7 r   	arg_typesc                     d}|D ]<  }t        |t        j                        r y|xs t        |t        j                        }> |S r   )r  r   r   rd   )r   r  r  arg_types       r   tensor_args_typez BuiltinVariable.tensor_args_type  sJ    
! 	VH(I$=$=>#Uz(I<T<T'UJ	V r   c                    g }g }t        j                  ||j                               D ]5  }|j                         r|j	                  |       %|j	                  |       7 t        d |D              xr  | j                  | S )Nc              3   b   K   | ]'  }|j                   t        |j                         nd ) y wr   )r   r!   )r  ts     r   r  zBBuiltinVariable.python_and_tensor_constant_only.<locals>.<genexpr>  s0      
 -.HH,@qxx(eK
s   -/)	itertoolschainrC  r  r  r  r  )r   r   r   r  non_tensor_argsis         r   python_and_tensor_constant_onlyz/BuiltinVariable.python_and_tensor_constant_only  s     v}}7 	*A{{}""1%&&q)		*
  
 
 
 3 !d  /2	3r   c                     | D cg c]  }|j                          c}|j                         D ci c]  \  }}||j                          c}}fS c c}w c c}}w r   )r   r  )r   r   r  kvs        r   unwrap_unspec_args_kwargsz)BuiltinVariable.unwrap_unspec_args_kwargs  sX     1551$$&528,,.8
*.!QAq##%%8
 
 	
5 8
s
   AAc                 >    | j                         xr t        ||      S r   )rH  r&   r  s      r   has_constant_handlerz$BuiltinVariable.has_constant_handler  s'     --/ 
4Q&5
 	
r   
has_kwargsc           
      ~    ddl mm t               g D cg c]  }t	        |      s| }}|rt        fd|D              sfdS t        j                   D cg c]  }t	        |      rt        n| c}      dddt        t           dt        t        t        f   d	t        d z  ffd
}|S t        j                         rHt	         t              s t        u r0dddt        t           dt        t        t        f   d	t        f fd}|S j!                         ri t"        j$                  u rt	        d   t&        j(                        r:j+                        rj,                  S rj/                  j,                         t1              dk(  rmskt        j2                   g snRt1              dk(  r\  j/                  fd       n+dddt4        dt4        d	t4        ffd}j/                  |       t7        d j8                   d       rDdddt        t           dt        t        t        f   d	t        d z  f fd}j/                  |       j;                         rt        d D              r4s2dddt        t           dt        t        t        f   d	t        d z  f fd}	n1dddt        t           dt        t        t        f   d	t        d z  f fd}	j/                  |	       dt        t           d	d f fdt1              dk(  rfdS t1              dk(  r8\  dddt        t           dt        t        t        f   d	t        d z  ffd}
|
S dddt        t           dt        t        t        f   d	t        d z  ffd}
|
S c c}w c c}w )Nr6   )LazyConstantVariableLazyVariableTrackerc              3   6   K   | ]  }t        |        y wr   )r  )r  r  r  s     r   r  z0BuiltinVariable._make_handler.<locals>.<genexpr>  s     Oqz!%9:O   c           
          j                  | |D cg c],  }t        |      rt        |      s|j                         n|. c}|      S c c}w r   )rk  r   realize)r   r   r   r_  r  r  objs       r   r   z/BuiltinVariable._make_handler.<locals>.<lambda>  sa    0A0A "&
  &a)<= *1.B C 		  
1 s   1A
r   rj   r   r   r~   c                     |D ]d  }t        |      s|j                         t        us'j                  | |D cg c]   }t        |      r|j	                         n|" c}|      c S   | ||      S c c}w r   )r   get_handler_type_for_dispatchr<   rk  r  )r   r   r   r_  r  r  inner_handlerr  s        r   lazy_constant_handlerz<BuiltinVariable._make_handler.<locals>.lazy_constant_handler  s    
  A!!%9:::<DTT#&#4#4 "
 .2	!" )* (2!5I'J %&IIK)*%+!" !'	$ 	 %Rv66!"s   %A5c                     t         u r:t        d |D              s(t        dt        |      dg t        j
                         t        j                  ||      S )Nc              3   |   K   | ]4  }|j                         xr t        |j                         t               6 y wr   )r   r   r   r   r  s     r   r  zWBuiltinVariable._make_handler.<locals>.create_exception_class_object.<locals>.<genexpr>9  s:      4 ((*Vz!:N:N:PRU/VV4s   :<zassert with non-string messagez1Dynamo only supports asserts with string messagesgb_typecontextexplanationhints)r   r  r   r   r   SUPPORTABLEr   ExceptionVariable)r   r   r   r  s      r   create_exception_class_objectzDBuiltinVariable._make_handler.<locals>.create_exception_class_object4  s^    
 ' 4!4 1 " @ #D	$W> 1 = =>	 !222tVDDr   r   r   c                      | g| S r   r   )r   r   _binop_handlers      r   r   z/BuiltinVariable._make_handler.<locals>.<lambda>[  s    M"4Lt4L r   r  c                 2    D ]  } || g| }|s|c S  y r   r   )r   r   r  r  rvbinop_handlerss        r   call_binop_handlersz:BuiltinVariable._make_handler.<locals>.call_binop_handlers^  s.     - &]T]#%I&  r   call_c                    	  | g|i |S # t         $ r 	  t        j                        j                  | g|i |  # t         $ rk}j	                  ||      }|sLt
        j                  d|       t        dd d| d| dj                   g t        j                         Y d }~Y y d }~ww xY wt        $ r/}j	                  ||      }|s |j                          Y d }~y d }~ww xY w)Nz1incorrect arg count %s %s and no constant handlerz"invalid call to builtin op handlerzinvalid args to z:  z/Encountered TypeError when trying to handle op r  )rs  inspect	signaturebindr  logwarningr   r   r   	DIFFICULTr   remove_from_stats)	r   r   r   er  rt  r  r  self_handlers	         r   call_self_handlerz8BuiltinVariable._make_handler.<locals>.call_self_handlerm  s   
,'<T<V<<  <)),7<<RQ$Q&Q   % /2/G/Gf/U,3KK S , !
 *(L*:<.4&PQRXQY(Z.]^`^i^i]j,k&D(9(C(C&D	 -  # ,+.+C+CD&+Q(/))++,s?    	C1)AC1	B7A B2,C12B77C1%C,,C1c              3   <   K   | ]  }t        |t                y wr   )r  r<   r  s     r   r  z0BuiltinVariable._make_handler.<locals>.<genexpr>  s     GJq"23G   c                 l   	  |D cg c]  }|j                          c} }t        j                  |       S c c}w # t        $ r4}t        t        |      | t	        |j
                               Y d }~Sd }~wt        $ r0}t        dd d| dg t        j                  |       Y d }~d }~ww xY w)Nrr  constant fold exceptionattempted to run function  with arguments 7Encountered exception when attempting to constant fold.r  r  r  r  from_exc)r   	Exceptionr   r   r  r   r7   r   r   
DYNAMO_BUGr;   r   )r   r   r   r  resrt  r  s         r   constant_fold_handlerz<BuiltinVariable._make_handler.<locals>.constant_fold_handler  s     >BCa224C" +00S99! D$ 0 I!%chh 
 ? %$=&@DTUYTZ$[(a"A$5$@$@"A%( s-   ? :? ? 	B3*A77B3&B..B3c                    t        ||      rk	  |D cg c]  }|j                          c}i |j                         D ci c]  \  }}||j                          c}}}t        j                  |       S y c c}w c c}}w # t        $ r0}t	        dd d| dg t
        j                  |       Y d }~Vd }~wt        $ r4}t        t        |      | t        |j                               Y d }~d }~ww xY w)Nr  r  r  r	  r
  rr  )r&   r   r  r7   r   r   r  r  r   r   r  r   r;   r   )	r   r   r   r  r  r  r  rt  r  s	           r   r  z<BuiltinVariable._make_handler.<locals>.constant_fold_handler  s    5T6B"$BF!GQ!"6"6"8!G# KQ,,.#"BF!QAq';';'=$=#"#C(  /44R==) "H#"  C )(A*DRDHXY]X^(_,e&E(9(D(D&E),   ) 4 $S	 "%)#((^ s?   B A:B A?B :B 	C9&B99C9*C44C9c                     | D cg c]  }|j                          }}t        ddj                   d d dj                   d| d ddj                   d| d	j                   d
ddg       y c c}w )Nz Failed to trace builtin operatorzbuiltin r  z4Dynamo does not know how to trace builtin operator `z` with argument types z (has_kwargs r  zAvoid calling builtin `z?. Consider using an equivalent alternative function/method to `z`.zIf you are attempting to call a logging function (e.g. `print`), you can try adding it to `torch._dynamo.config.reorderable_logging_functions`.z"Please report an issue to PyTorch.r  )python_type_namer   r   )r   r   real_arg_typesr  r  r  s      r   call_unimplementedz9BuiltinVariable._make_handler.<locals>.call_unimplemented  s    @DEc224ENE:"2;;-q1ZLIRSUS^S^R_ `''5&6mJ<qR .bkk]:PQ_P` aTTVT_T_S``bde8 Fs   A7c                      |      S r   r   )r   r   r   r  s      r   r   z/BuiltinVariable._make_handler.<locals>.<lambda>  s    ,>t,D r   c                 4     | ||      }|r|S  |       |S r   r   )r   r   r   r  r  rz  s       r   builtin_dispatchz7BuiltinVariable._make_handler.<locals>.builtin_dispatch  s(    
 Rv.I"4(	r   c                 J    d }D ]  } || ||      }|s|c S   |       |S r   r   )r   r   r   r  r  r  r  s        r   r  z7BuiltinVariable._make_handler.<locals>.builtin_dispatch  s>    
 " "BBf-B!	" #4(	r   )lazyr  r  r  r  r  _make_handlerr<   r  r;   r   r   r  isclassBaseExceptionGeneratorExitr  r   r   r   rd   r  _handle_insert_op_in_graphr  r   r  r   r   r   rH  )r  r  r  r  
lazy_typesr  r  r  r  r  r  r  r  r  r  r  rz  r  r  r  r  s   ```        @@@@@@@@@@r   r  zBuiltinVariable._make_handler  s     	Db!+-!*QAj<O.PaQ
QOJOO
 
$ ,99 ' )316J(K$QRR M7/7?+7 S/127 !4'	7( )(??2r=) ]"E/E?+E S/12E !	E$ 10""$("""y|Y-E-EF##I.555 > >? y>Qz,@@PiPN!^$)#1  LM 3 ;> CF    34seBKK=$94@$/$?+$ S/12$ !4'	$L OO-.((*GYGG":3:/: !o!56: %t+	:8 3 /  !o!56  %t+	 > OO12	T/%: 	t 	  x=ADD]a!JW	/	?+	 S/12	 !4'		4  /?+ S/12 !4'	  e R4s   N5N50N:
nodec                 6   t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                   ft#        fdt        j$                  |       D              S )Nc              3      K   | ]Y  }t        |      xrG t        |t        j                         xs* t        |j                  t        t
        t        t        f       [ y wr   )r   astConstantr   r  r   r  r  )r  childallowed_nodess     r   r  z>BuiltinVariable._constant_eval_numeric_expr.<locals>.<genexpr>  sZ      
  um, ucll33 HekkD#ug+FG
s   AA")r#  
Expressionr$  UnaryOpBinOpUAddUSubInvertAddSubMultDivFloorDivModBitOrBitXorBitAndr  walk)r   r&  s    @r   _constant_eval_numeric_exprz+BuiltinVariable._constant_eval_numeric_expr	  s     NNLLKKIIHHHHJJGGGGHHGGLLGGIIJJJJ!
$  
 $
 
 	
r   treefilenamec           	         t        d t        j                  |      D              ry t        j                  |       	 t        j                  |      }t        j                   |       S # t
        $ rv t        j                  |      sY y 	 t        t        ||d      di ii       }n@# t        $ r4}t        t        |      | t        |j                               Y d }~nd }~ww xY wY w xY w)Nc              3   P   K   | ]  }t        |t        j                           y wr   )r   r#  Call)r  r%  s     r   r  z8BuiltinVariable._constant_eval_result.<locals>.<genexpr>*  s     Guz%*Gs   $&eval__builtins__rr  )r  r#  r6  fix_missing_locationsliteral_eval
ValueErrorr  r7  r=  compiler  r   r   r  r   r;   r   )r   r8  r9  r  rt  s        r   _constant_eval_resultz%BuiltinVariable._constant_eval_result&  s     GGG!!$'	M%%d+F $$R00  
	M">>tDMD(F3#R(
  M(cBT#((^LLM
	Ms;   A( (C'	B$#C'$	C!-*CC'C!!C'&C'c                 H   |s|ry |j                         sy |j                         }t        |t              sy 	 t	        j
                  |j                         d      }| j                  |d      S # t        $ r'}t        t        ||j                  g       Y d }~>d }~ww xY w)Nr=  )moderr  z<torch._dynamo.eval>)r   r   r   r   r#  parsestripSyntaxErrorr   msgrC  )r   r   r   r   r   
source_strr8  rt  s           r   	call_evalzBuiltinVariable.call_eval<  s     6((*..0
*c*	F99Z--/f=D ))"d4JKK  	F$["CGG9EE	Fs   %A1 1	B!:BB!c                     t        |      dk(  r| j                  |      S t        |      dk7  rt        dt        |             	 |d   j                  |d      S # t        $ r t        t        |       Y y w xY w)Nr   r6   z vars() expected 1 argument, got rD  )r   _call_frame_locals_snapshotr   r   r   r   rs  r   r   r   s      r   	call_varszBuiltinVariable.call_varsR  su    t9>33B77t9> #CCI;!OPP	47&&r:66% 	4$Y3	4s   A A76A7c                 `    t        |      dk7  rt        t        |       | j                  |      S r   )r   r   rs  rM  rN  s      r   call_localszBuiltinVariable.call_locals]  s*     t9>$Y3//33r   c                    t        | j                  j                        t        | j                               z  }t        | j                               }i }| j                  j                         D ]  \  }}||vr||v r%| j                  j                  j                  |      }t        j                  t        |      st        |t        j                        ri||t        j                   |      <    t#        |t$        t'                     S Nmutation_type)setf_codeco_varnamescell_and_freevarssymbolic_localsr  rm  side_effects	load_cellr   __instancecheck__rI   r   r   DeletedVariabler<   creater>   r   r:   )r   frame_local_namesrY  frame_localsr   r   s         r   rM  z+BuiltinVariable._call_frame_locals_snapshotd  s    		 5 56R=Q=Q=S9TT 4 4 67--335 		@KD%,,((		..88?%%lE:jy00? :?L)0067		@ !*,
 	
r   c           
         ddl m}m} |r# | j                  g ||j	                          sy ddl m} ddlm}m}  ||||      r|j                  s}t                |d   j                         sL| j                  t        v rt        | j                     }	nt        | j                     }	|d   }
|d   |d<   |
|d<   n t        | j                     }	n| j                  }	|j                  ||	      } |||||      S | j                  }	  | j                   |i |r(ddlm} ddlm}  ||| ||j*                        ||      S |t,        v r0t/        |d   t0        j2                        rt,        |   }|d   |d   g}|t4        j6                  u rLt/        |d   t8              r9t:        j<                  }|d   t0        j>                  jA                  |d      |d   g}tC        ||      r[tE        d	 |D              sI |jF                  jH                  d
tK        |      gtM        ||       } |t0        jN                  ||      S |tP        v r>tS        |      dk(  r0tE        d |D              rddl*m+}  |||d   |d   tP        |         S  |jF                  jH                  d
|gtM        ||       }tE        d |D              r |tX        ||      S t[        ||      rb| j]                  ||      \  }} ||i |}tE        d t_        j`                  ||j	                               D              } |tb        ||||      S te        d |D              rt9        j                  ||d       S |t4        jf                  u r>t/        |d   t0        jb                        r!ti        |      }|d   jk                         |d<    |||      S # tl        $ r9 to        dd|  d| d| d| j                   dg tp        jr                         Y y w xY w)Nr6   )rj  wrap_fx_proxy_clsSourcelessBuilder)can_dispatch_torch_functiondispatch_torch_functionr   r   )	unique_id)invoke_and_store_as_constantc              3   >   K   | ]  }t        |      t        u   y wr   )r   rd   r  r   s     r   r  z=BuiltinVariable._handle_insert_op_in_graph.<locals>.<genexpr>  s       B03S	^+Bs   rk  c              3   ^   K   | ]%  }t        |t        j                  t        f        ' y wr   )r   r   rd   rc   r  r_  s     r   r  z=BuiltinVariable._handle_insert_op_in_graph.<locals>.<genexpr>  s-       #1y'?'?&QRRs   +-rw  c              3   <   K   | ]  }t        |t                y wr   r   ra   rk  s     r   r  z=BuiltinVariable._handle_insert_op_in_graph.<locals>.<genexpr>  s     E:c#34Er  c              3   h   K   | ]*  }t        |t        j                        r|j                   , y wr   r   r   re   need_unwrapr  s     r   r  z=BuiltinVariable._handle_insert_op_in_graph.<locals>.<genexpr>  ,      "!!Y%J%JK MM"   02)	raw_valuerr  c              3   <   K   | ]  }t        |t                y wr   r   rc   r  s     r   r  z=BuiltinVariable._handle_insert_op_in_graph.<locals>.<genexpr>  s     BZ?3Br  z,unimplemented builtin op on tensor argumentszpartial tensor op: r  z3Dynamo does not know how to trace builtin operator z with tensor argumentsr  ):rl  rj  rc  r  rC  re  torch_functionrf  rg  exportr   r  r  r}   r|   r_  r  bytecode_transformationrh  r  ri  r   IN_PLACE_DESUGARING_MAPr   r   r<   r   r   rc   r   selectr;   r   r%   r  rm  rn  r/   r0   NumpyNdarrayVariablerz   r   r   rx  ra   r'   r  r  r  re   r  r+  r  r   r  r   r   r  )r   r   r   r   rj  rc  re  rf  rg  r   tmpfn_varr  rh  ri  proxyrx  _args_kwargsru  rr  s                        r   r  z*BuiltinVariable._handle_insert_op_in_graphy  s    	>*$**CDC6==?C 	/X 'r48 9913Aw((*ww";;8A7@q'C"1gDG!DG3DGG<Dww&--b$7F*2vtVDDWWl	3t33TDVD?C3Ibkk2D&  ,,Q332 -R0Qa)X%%%*T!Wo*N \\G--33B:G (f5c B7;B ? /		..#*2. 'tV4 ))G)GUSS ))IN ! 
 A*Qa*=b*A  +BII** #40E
 EEE($ 
 *$7!%!?!?f!Mw11	! "&__T6==?C"  )/' +  BTBB&--b%>> )))jGYBB/  :D"1g88:DG$R//" 	F-dV1TF!F8DQRVRYRYQZZpq6)556		s;   9N: ?C<N: <AN: AN: 
A-N: 8(N: !AN: :?O<;O<call_function_handler_cachec                 8   |rK|j                         D ci c]  \  }}||j                          }}}| j                  gd |D        d}n| j                  gd |D        }| j                  j	                  |      }|sL| j                  | j                  |D cg c]  }t        |       c}t        |            x| j                  |<   }|2t        d| j                   d|D cg c]  }t        |       c}        ||||      S c c}}w c c}w c c}w )Nc              3   2   K   | ]  }t        |        y wr   r   r  s     r   r  z0BuiltinVariable.call_function.<locals>.<genexpr>'       4!d1g4   Tc              3   2   K   | ]  }t        |        y wr   r  r  s     r   r  z0BuiltinVariable.call_function.<locals>.<genexpr>)  r  r  zNo handler found for z with args )	r  r  r  r  r  r  r   r  r   )	r   r   r   r   r  r  keyrz  r  s	            r   rk  zBuiltinVariable.call_function  s    17@Aan@F@77;4t4;d;C7754t45C2266s;>B>P>P40a$q'0$v,? D,,S1G ? 'yd<ST!W<S;TU  r4(( A 1 =Ts   DD
'Dr   c                 b   | j                   t        u r|dk(  rt        |      dk7  rt        dt        |             t        |      dk7  rt        dt        |             |\  }}}|j	                         }t        |t              rH|j                  j                  j                  |      r#|j                         r|j                  |||      S |dk(  r| j                   t        u rbt        |      dk(  rTt        |      dk7  rt        dt        |             |j                  j                  j                  | |d   |dd  |	      S | j                   t        u rt        |      d
k(  r|st        |d   t              rC|d   j                   t        u r.t        ||d         }t!        j"                  |t%                     S |j                  j                  j                  | |d   |dd  |	      S |t&        j)                  | j                   d      v rt+        d |D              rt+        d |j-                         D              rl	 t/        | j                   |      }	 |	d |D        i |j1                         D 
ci c]  \  }
}|
|j3                          c}}
}t5        j6                  ||      S | j                   t        u r$|dk(  rt         jB                  jE                  d       S | j                   tF        tH        t>        t        fv rut        |d   t         j                        r>|d   jJ                  t        d      |d   jJ                  jM                  |||dd  |      S |d   jM                  |||dd  |      S | j                   tN        u rZt        |      dk\  rLt/        | j                   |d       }|tP        v r-t        |d   tB              r|d   jM                  |||dd  |      S | j                   tR        u r\t        |      dk\  rNt        |d   tB              r;t5        j6                  | t/        tR        |      |d   j3                                     S |dk(  rt        |      dk(  r|stU        ||d         S |dk(  rt        |      dk(  r|stW        ||d         S |dk(  r"t        |      dk(  r|stX        |   ||||      S |dk(  rt        |      dk(  r|st[        ||d         S |dk(  rt        |      dk(  r|st]        ||d         S |dk(  rt        |      dk(  r|st_        ||d         S |dk(  rt        |      dk(  r|sta        ||d         S tX        |   ||||      S c c}}
w # t8        $ r5}t;        t=        |      |t?        |j@                               Y d }~d }~ww xY w)N__setattr__rq   z'object.__setattr__ expects 3 args, got r   z*object.__setattr__ expects no kwargs, got rk   r6   z&object.__new__ expects no kwargs, got r   r   rT  r   c              3   <   K   | ]  }|j                           y wr   r   rm  s     r   r  z.BuiltinVariable.call_method.<locals>.<genexpr>l  s     8a1'')8r  c              3   <   K   | ]  }|j                           y wr   r  r  r  s     r   r  z.BuiltinVariable.call_method.<locals>.<genexpr>l  s       A+,$$&Ar  c              3   <   K   | ]  }|j                           y wr   )r   rm  s     r   r  z.BuiltinVariable.call_method.<locals>.<genexpr>r  s     ?Q!..0?r  rr  r  z3UserDefinedObjectVariable._base_vt must not be None__len____str__r   __iter____neg____pos____abs__)1r  r   r   r   r  r   rg   rm  r[  is_attribute_mutationr   method_setattr_standardtrack_new_user_defined_objectr   r  r5   r   rH   r:   ro   r  r  rC  r   r  r   r;   r   r  r   r   r  r   r<   r_  rV  	frozenset_base_vtr   r   r3   r  rS   rX   r   rP   rU   rV   rM   )r   r   r   r   r   r  name_varval	init_argsr  r  r  r  r   resolved_fnr   s                  r   r   zBuiltinVariable.call_method6  sk    77f!64yA~$=c$i[I  6{a$@VN  "&C3++-C3 9:II**@@E//1222xEE9ww& SY!^v;!#(@VN  yy--KKGH	 L   ww%CIN6d1g7DGJJ%<O /DG <I$22!1A1C  yy--KKGH	 L   599$''2FF8488S A06A > $/B?$?AGPA1a2244PC +00S99 77f!3--44T::77sItU33$q'9#F#FG7##+(M  Aw''33Bd12hOOAw**2tT!"XvFF77c>c$i1n!$''46Kk)d1g'787..r4ab6JJ77eD	Q$q'#34&,,,t,T!W-G-G-IJ  9Ta r47++9Tar47++:#d)q.7&r4v>>:#d)q. #2tAw//9Ta r47++9Ta r47++9Ta r47++w"2tT6::O Q ! ,Q!!&&\ s*   4U0 ;U*U0 *U0 0	V.9*V))V.r   c                     t        ||      S r   )rR   r   r   r   s      r   call_intzBuiltinVariable.call_int       2s##r   c                     t        ||      S r   )rO   r  s      r   
call_floatzBuiltinVariable.call_float  s     R%%r   c                     t        ||      S r   )rN   r  s      r   	call_boolzBuiltinVariable.call_bool  s     B$$r   c                      ddl m}  |||      S )Nr6   )generic_hash)r   r  )r   r   r   r  s       r   	call_hashzBuiltinVariable.call_hash  s     	2B$$r   c                     t        ||      S r   )rW   r  s      r   	call_reprzBuiltinVariable.call_repr  s     B$$r   c                 d   t        |t        j                  t        j                  f      rt	        |j
                        dk(  rt        j                  |d      S t	        |j
                        dk(  r.t        t              j                  ||j
                  d   gi       S t        j                  t        |j
                              }t        t              j                  ||gi       S t        |t        j                        r)t        j                  |t        |j                              S t        |t        j                        r6t!        |j"                  d      r|j"                  j$                  }nUt!        |j"                  d      r|j"                  j&                  }n(t)        dt        |      dg t*        j,                         t/        |j"                        j$                  t0        j$                  u r	 t        j                  |              S t5              r't)        d	dt/        |j"                         d
dg       y |j6                  }	 t        j                  ||      }|j                  ||gi       S y # t2        $ r Y y w xY w# t8        $ r t:        j=                  dd       Y y w xY w)Nr    r6   r  r   z+failed to call str() on user defined objectz5User defined object has no __str__ or __repr__ methodr  z0Attempted to a str() method implemented in C/C++z5 has a C/C++ based str method. This is not supported.zWrite the str method in Pythonz%Failed to create UserFunctionVariableT)exc_info)r   r   r  "UserDefinedExceptionObjectVariabler   r   r;   r   r  r   rk  rH   r  UserFunctionVariabler  rg   r   r   r  r   r   r   
USER_ERRORr   r   AttributeErrorr-   __func__r   r  r  )r   r   r   	tuple_var
str_methodbound_methoduser_func_variables          r   call_strzBuiltinVariable.call_str  s2    (()*V*VW
 388}!&,,R44SXX!#&s+99"sxx{mRPP%33DNC	&s+99"yk2NN cI::<"((S[99iAACsyy), YY..
J/ YY//
IH W9-889	 CII&&&..8 *00Z\BB 1<N#'		?"33h i;<	*   *22 )8)>)>r<)P& *77SE2FF3 &   $ &  KK GRVKW s$   8I= J =	J	J	 J/.J/c                    dt         fd}t        j                  j                  j                  s	 |||       	 |d   j                         }t        |dd  |      rKt        j                  g|dd  D cg c]  }|j                          c} }t        j                  ||      S  |||       y # t        $ r  |||       Y xw xY wc c}w )Nr~   c                 N    t        dd|  d| dg t        j                         y )NzInvalid call to __build_class__z&Non-constant args to __build_class__: r  zCannot trace class definition: the class body function is unsupported or the base class argument are not compile-time constantsr  r   r   r  )r   r   s     r   failz2BuiltinVariable.call___build_class__.<locals>.fail  s2    9@axP ^6)556	r   r   r6   )r	   r   _dynamor   enable_trace_load_build_classget_functionr  r$   r  __build_class__r   r;   r   )r   r   r   r   r  r  r_  rs           r   call___build_class__z$BuiltinVariable.call___build_class__  s    	( 	 }}##AAv	a%%'B tABx0((26qr(;Q!&&(;A #((Q//v # 	v	 <s   B0 3C
0CCc                    t        |      dk(  r!t        ||d         }| j                  ||      S t        |      dk(  r| j                  ||d   |d         S t        |      dkD  r| j                  |t	        |            S y )Nr6   r   r   )r   r5   _call_min_max_seq_call_min_max_binaryr  )r   r   r   r  s       r   _call_min_maxzBuiltinVariable._call_min_max3  s     t9>#BQ0E))"e44Y!^,,Ra$q'BBY]))"d4j99r   r  c                     t        |      dk  rt        d      t        |      dk(  r|d   S t        j                  t        j                  | j
                  |      |      S )Nr   z,_call_min_max_seq requires at least one itemr6   )r   r   	functoolsreducepartialr  )r   r   r  s      r   r  z!BuiltinVariable._call_min_max_seq?  sV     u:? !OPPu:?8O	 1 1$2K2KR PRWXXr   r_  r`  c                 ~   ||y | j                  ||      r.|j                         s||}}|j                         st        d      t        |t              r5t        j                  t        j                        j                  ||gi       }t        |t              st        |t              rLddlm}  |t        |      | |j                  j                  d| j                   gt#        ||gi              S |j%                         rt        |t
        j&                        r$dd l}t        j*                  |j,                        }n#t        j                  t        j.                        }| j                   t0        u rd|ind|i}|j                  ||g|      }nt        |t
        j&                        rIdd l}t0        |j2                  t4        |j6                  i| j                      }	t        j*                  |	      }nLt0        t        j2                  t4        t        j6                  i| j                      }
t        j                  |
      }|j                  |||gi       }t9        d	 ||fD              rt;        d
 ||fD              rt
        j                  j=                  |      S |j%                         r|j?                         }n|j@                  }| j                   t0        u rt1        |j@                  |      }nt5        |j@                  |      }t;        d ||fD              }t
        jB                  j=                  |||      S |S t        |t              st        |t              rs| j                   t0        u rt        jD                  nt        jF                  } |j                  j                  d|gt#        ||gi        }t        jH                  ||d       S t        |tJ              rTt        |tJ              rD| j!                  |j?                         |j?                               }tM        jN                  ||      S y )Nz1Expected at least one tensor argument for min/maxr6   rc  rk  )r   r  r   r  r  c              3   p   K   | ].  }t        |t        j                  t        j                  f       0 y wr   )r   r   re   r<   )r  r  s     r   r  z7BuiltinVariable._call_min_max_binary.<locals>.<genexpr>  s9      	  !==!22	s   46c              3   <   K   | ]  }t        |t                y wr   ro  )r  r  s     r   r  z7BuiltinVariable._call_min_max_binary.<locals>.<genexpr>  s     KSz#'78Kr  c              3   h   K   | ]*  }t        |t        j                        r|j                   , y wr   rq  r  s     r   r  z7BuiltinVariable._call_min_max_binary.<locals>.<genexpr>  rs  rt  )(r  r  r   r   ra   r   TorchInGraphFunctionVariabler   rA  rk  rc   rl  rc  r   rm  rn  r  r0   r   r}  numpyNumpyVariableclipclampr  maximumr  minimumr  r  from_tensor_variabler   ru  re   sym_maxsym_minr_  r<   r;   r   )r   r   r_  r`  rc  npr  r   r  np_fntorch_fnraw_braw_resrr  py_fnr  r   s                    r   r  z$BuiltinVariable._call_min_max_binaryI  s    9	 Aq!;;=!1;;=$G 
 !-.::5<<HVVR
 !_-A1O6(G0"))00' +Aq626  ##%a!?!?@&"009B"??LB(,3%eQZ))"qc6:a!?!?@& "**c2::>twwGE"007B #U]]CGPH"??IB))"q!fb9  	 Q	 	 KQFKK$55JJ6RR'')002EKKE77c>!!++u5G!!++u5G! "V" 
 !<<QQ  ?+z!_/M%)WW^EMME*BII**):Aq62)FE #))"eT::+,A?O1PGG$$&$$&E #((U33r   c                     t        ||      S r   )rM   r  s      r   call_abszBuiltinVariable.call_abs  r  r   c                     t        ||      S r   )rV   r  s      r   call_poszBuiltinVariable.call_pos  r  r   c                 :    t        |      }|j                  |      S r   )r2   nb_index_implr  s      r   
call_indexzBuiltinVariable.call_index  s    
 !%  $$r   c                     ddl m} |j                  |t              j	                  ||t        j                  |d      gi       }|j	                  |t        |      |      S )Nr6   rd  	__round__)rl  re  r_  r   rk  r;   r   r  )r   r   r   r   r   re  round_methods          r   
call_roundzBuiltinVariable.call_round  sZ     	/ )//G<JJo++B<=r
 ))"d4j&AAr   c                     t        |i       rt        j                  t        |            S  | j                  | r2t        fd|D              }t        j                  t        |            S y )Nc              3   \   K   | ]#  }t        j                  t        |             % y wr   )r;   r   r+   )r  r   r   s     r   r  z-BuiltinVariable.call_range.<locals>.<genexpr>  s#     V#..r<3DEVs   ),)r&   r   RangeVariabler  _dynamic_argsr   rN  s    ` r   
call_rangezBuiltinVariable.call_range  s]     )r2**4:66T&VQUVVD**4:66r   c                 j    t        d |D              xs  t        d |j                         D              S )Nc              3   <   K   | ]  }t        |t                y wr   rw  r  s     r   r  z0BuiltinVariable._dynamic_args.<locals>.<genexpr>  s     @a:a1@r  c              3   <   K   | ]  }t        |t                y wr   rw  r  s     r   r  z0BuiltinVariable._dynamic_args.<locals>.<genexpr>  s      H
/0Jq/*H
r  )r  rC  r  s      r   r  zBuiltinVariable._dynamic_args  s7    @4@@ 
C H
4:MMOH
 E
 	
r   c                     dt        |      cxk  rdk  sn t        |dt        |              t        j                  t	        |      |      S )Nr6      z(slice expected at least 1 argument, got )r   r   r   SliceVariabler  rN  s      r   
call_slicezBuiltinVariable.call_slice  sC     CI!!R#KCPTI;!WX&&tDz266r   c           
          ddl m}  || |j                  j                  d| j                  gt        ||             S rh  )rl  rj  rm  rn  r  r0   )r   r   r   r   rj  s        r   
_dyn_proxyzBuiltinVariable._dyn_proxy  sC     	+"BII""+<T6+J
 	
r   c                    |r#t        || j                  j                   d       t        |      dk(  rt	        g t                     S t        |      dkD  r.t        || j                  j                   dt        |              |d   }t        |t              r|j                         t        u r|S t        ||d         }t	        |t                     S )Nz() takes no keyword argumentsr   rT  r6   z" expected at most 1 argument, got )
r   r  r   r   rH   r:   r   python_typer   r5   )r   r   r   r   r  r  s         r   
call_tuplezBuiltinVariable.call_tuple  s     77##$$AB t9> 3C3EFFY]77##$$Fs4ykR
 1gc=)coo.?5.HJDG,U2B2DEEr   c           
         ddl m}m} ddlm} t        |t        j                  |||f      rt        j                  j                  d      S t        |t              r)t        j                  |t        |j                              S t        |t        t        t         t"        t$        t&        t(        f      rt        j                  j                  d      S y )Nr6   )rX  FunctoolsPartialVariablerY  TF)r  rX  r   r  rZ  r   r   r   r<   r_  rh   r;   r   r  r   rc   rJ   rd   rF   rH   rE   )r   r   r   rX  r   rZ  s         r   call_callablezBuiltinVariable.call_callable  s     	R/22(( 	
 --44T::01"((Xcii-@AA $$
 --44U;;r   r  c                 V    t        |      dk(  r|d   S t        dd| d| ddg       y )	Nr   r6   zbad args to builtin cast()z	got args r  z0Dynamo expects exactly 2 args to builtin cast().z3Ensure your call to cast() has exactly 2 arguments.r  )r   r   )r   r  r   r   s       r   	call_castzBuiltinVariable.call_cast<  s<     t9>7N0vQvh/JHI		
r   c                 v   t        |t        j                        r)t        j                  |t        |j                              S t        |t              r)t        j                  |t        |j                              S |j                         r-t        j                  |t        |j                                     S y r   )r   r   r   r;   r   dirr   r  r  r   r   r  s      r   call_dirzBuiltinVariable.call_dirI  s     c9==>"((S^<<c?+"((S[99!!#"((S1G1G1I-JKKr   c                 4   t        |      dk(  r't        j                  t               t	                     S t        |      dkD  rt        |dt        |              n|rt        |d       t        g t	                     }|j                  |d|d   g|       |S )Nr   rT  r6   z%set expected at most 1 argument, got z set() takes no keyword argumentsrB  )r   r   r`   rV  r:   r   r   )r   r   r   r   ss        r   call_setzBuiltinVariable.call_setU  s     t9>((>N>PQQY]7D	{C 2
 *:*<=	b(T!WIv6r   c                 f   t        |      dk(  r't        j                  t               t	                     S t        |      dkD  rt        |dt        |              n|rt        |d       t        |d   t        j                        r|d   S t        ||d         }t        |t	                     }|S )Nr   rT  r6   z+frozenset expected at most 1 argument, got z&frozenset() takes no keyword arguments)r   r   r_   rV  r:   r   r.   r5   )r   r   r   r   r  fss         r   call_frozensetzBuiltinVariable.call_frozensetm  s     t9>..suDTDVWWY]=c$i[I 8
 $q'96677NDG,u4D4FG	r   c                 v   |r,t        |      dk(  rd|v st        |ddt        |       d       |j                  dt        j                  d            }g }|D ]  }|j                  t        ||              t        |t                     }t        j                  ||j                         t                     S )	Nr6   strictzip1 kwargs (`strict`) kwargsFrT  r  rU  )r   r1   popr<   r_  r  rP   rH   r:   r   ZipVariabler   )r   r   r   r   r  r  r   	iter_argss           r   call_zipzBuiltinVariable.call_zip  s     K1$V);#)6{m7+	 H&6&=&=e&DE 	3CLLS12	3!%7G7IJ	$$,,.*,
 	
r   c                      t        ||d         S r   )rS   r   r   r   r   s       r   call_lenzBuiltinVariable.call_len  s     2tAw''r   c                 (    t        ||d   |d         S Nr   r6   )r\   r  s       r   call_getitemzBuiltinVariable.call_getitem  s     "d1gtAw//r   isinstance_type_varc           	         	 j                         }|j                         }t        t        j                        rAj                  5dt        dt        d	t        ffd
}t        j                  | ||            S t        t        j                        rJt        j                  t         j"                        r&t        dd d| ddg t        j$                         t        t        j                        rRd|j&                  j(                  v r:t        j                  ||j&                  j+                  |j                              S t        t        j,                        r t        j                  |t        |            S t        |t.              st1        t3        |dd             r|f}nht        |t         j4                        rt7        j8                  |      }n8t        |t:              rt=        d |D              r|}nt?        t@        |dg       	 tC              }t        j                  ||      S # t        $ r- t        dd d| dd g t        j                         Y _w xY w# t@        $ r v }Y ^w xY w)Nz6builtin isinstance() cannot determine type of argumentzisinstance(, r  z=Dynamo doesn't have a rule to determine the type of argument r  
tensor_vartensor_typer~   c                     dt         dt        ffdt        |      t        u rt	        fd|D              S  |      S )Ntyr~   c                 >   | t         vr~j                         j                  j                  d   }t	        |      r2| t
        j                  j                  j                  u rt        ||       S t        j                         |       S t         |    }j                  |v S )Nexample_value)r4   r  r   metar   r   nn	parameter	Parameterr   r  r  r   )r#  example_valdtypesr   s      r   
check_typezOBuiltinVariable.call_isinstance.<locals>._tensor_isinstance.<locals>.check_type  s    !44&)lln&9&9&>&>&O9+F "ehh&8&8&B&B B
 $.k2#>>#-coo.?#DD04F99..r   c              3   .   K   | ]  } |        y wr   r   )r  r#  r,  s     r   r  zNBuiltinVariable.call_isinstance.<locals>._tensor_isinstance.<locals>.<genexpr>  s     D"z"~Ds   )r   r  r   r   r  )r   r!  r,  r   s     @r   _tensor_isinstancez;BuiltinVariable.call_isinstance.<locals>._tensor_isinstance  sA    /3 /4 /$ $-DDDD%k22r   z<isinstance() called on user defined object with C extensionszeUser-defined object with C extensions can have torch.Tensor attributes; intentionally graph breaking.r]  c              3   l   K   | ],  }t        |t              xs t        t        |d d             . yw)r]  N)r   r   r  r   )r  tps     r   r  z2BuiltinVariable.call_isinstance.<locals>.<genexpr>	  s6      8
 r4 THWR9Ld-S$TT8
s   24z?isinstance() arg 2 must be a type, a tuple of types, or a unionrr  )"r  r  r   r   r  r   r   r   rd   r   r;   r   r  r   rg   r   r   MemberDescriptorTyper  r   rD  r]  !UserDefinedExceptionClassVariabler   r  r   	UnionTypetypingget_argsr   r  r   rs  r  )	r   r   r   r  r  isinstance_typer.  isinstance_type_tupler  s	     `      r   call_isinstancezBuiltinVariable.call_isinstance  sp   	(H .@@Bc93349N3+3:=334 #((-?_-UVV c9>>?JIIu11E
 V%cU"_,=Q?<6)556 sI??@#'@'@'I'II"(());;OSYYW 
 c9FFG"((Z/-RSS ot,O%8$?1
 &5$6!9$*OOO$D!/C 8
%8
 5
 %4!$U
	4 X'<=C $$R--A # 	P%cU"-@,AC[\_[`a5)445	 	|  	433C	4s#   H= I6 =2I32I36JJleft_tyright_tyc                 "    ddl m}  ||||      S )z,Checks if first arg is subclass of right argr6   )generic_issubclass)r   r<  )r   r   r9  r:  r<  s        r   call_issubclasszBuiltinVariable.call_issubclass	  s     	8!"gx88r   c                 .    t        j                  ||      S r   )r   SuperVariabler   r   r_  r`  s       r   
call_superzBuiltinVariable.call_super'	  s     &&q!,,r   c                    |d   }	 |j                  |      S # t        $ r t        |      dk(  r|d   cY S  t        $ rD}t	        |t
        j                        r$|j                          |j                  d   cY d }~S  d }~ww xY w)Nr   r   r6   )	next_variabler   r   r   r   r   rD   r  r  )r   r   r   r   exs        r   	call_nextzBuiltinVariable.call_next,	  s     1g
	$$R((( 	4yA~Aw 	#y99:$$&yy|#		s%    B	B8A>7B=A>>Bseqsc                 4   t        |      dk(  rt        t        |dg       t        j                  d      }|rt
        j                  dk\  rRt        |      dk(  rd|v st        |dd	t        |       d
       |j                  dt        j                  d            }nt        |ddt        |       d
       |D cg c]  }t        ||       }}t        |t                     }t        j                  |||j                         t                     S c c}w )Nr   z'map() must have at least two arguments.rr  Frp   r6   r  mapr  r  z0 kwargsrT  r  )r   r   rs  r<   r_  sysversion_infor1   r  rP   rH   r:   r   MapVariabler   )	r   r   r  rF  r   r  seq	iterablesr  s	            r   call_mapzBuiltinVariable.call_map<	  s    t9>$?@ "((/7*Fq(X-?'-v;-w/	  H.>.E.Ee.LM#6{m7+	 :>>#_R->	>!);K;MN	$$,,.*,	
 	
 ?s   <DrL  c                 V    t        j                  |t        ||      t                     S rS  )r   FilterVariablerP   r:   )r   r   r  rL  s       r   call_filterzBuiltinVariable.call_filterf	  s*     ''B$*,
 	
r   c                    | j                   xr t        | j                   |      }|dk(  r+t        j                  || j                  j
                  |      S | j                  t        u r9	 t        | j                  |      }t              st        j                  |||      S t        | j                  |d       }t        j                  | ||t        |      |      S d |      S # t        $ r t        t        |       Y w xY w)Nr   r   )r   r   r;   r   r  r   r   r   r  r   r  r   r   r   )r   r   r   r   r   r   s         r   r   zBuiltinVariable.var_getattro	  s     >DKK!>:"((TWW-=-=vFF77f=. E?&,,R??twwd+(($d.>T
QW
 	
DHQW
 	
 " =(<=s   (C# #C?>C?r  r  c                 ,    |j                  |d|gi       S )N__delattr__rd  )r   r   r  r  s       r   call_delattrzBuiltinVariable.call_delattr	  s     r=8*bAAr   c                    	 |j                         }|j                  xr t        |j                        }|2t        |t        j                        r|j                  r|j                  }|t        j                  u r5|j                  j                  dt              }t!        t#        |      d      }t%        j&                  |||      S # t        $ r+}t        t        j                  t        |      d      d d }~ww xY w)Nunknown_python_type)	case_namer  Tensor)r  r  r   r   INVALID_INPUTr   r   r#   r   r   rg   
cls_sourcer   rY  rm  install_global_by_idr   r    r;   r   )r   r   r  r   errorr   r   s          r   	call_typezBuiltinVariable.call_type	  s    	oo'G 6
3:: 6N3	 C CD^^Fell"9911"e<DT 2H=F$$R&99' # 	++E
/ 		s   C 	C;&C66C;c                 j   t        |      }t        j                  |dt              }|t	        |d|j
                   d       |t        ur|j                  |dg i       S t        |      st	        |d       t        j                  t        j                  j                        j                  ||gi       S )N__reversed__'z' object is not reversiblez)argument to reversed() must be a sequence)rY   r  getattr_static_MISSING_SENTINELr   r   r   rZ   r   r  r   r  reversed_sequence_iteratorrk  )r   r   r  obj_typereversed_attrs        r   call_reversedzBuiltinVariable.call_reversed	  s     )-  ..n&7
  R1X%6%6$77Q!RS 11??2~r2>>)R!LM--99

-SE2
&	'r   c                     t        |t        j                        s?t        j                  t	        ||      t                     }|j                  |dg |       |S y )NrT  sort)r   r   rd   rF   r5   r:   r   )r   r   r  r   list_vars        r   call_sortedzBuiltinVariable.call_sorted	  sR     #y778 --C(.0H   VR8Or   c                     t        ||      S r   )rU   )r   r   r_  s      r   call_negzBuiltinVariable.call_neg	  s     2q!!r   _format_stringc                 x    |j                         }t        |      }t        j                  |t	        |      |      S r   )r   r   rJ   r_  r  )r   r   rn  r   r   format_strings         r   call_formatzBuiltinVariable.call_format	  s5     '99;M*#**=$t*fMMr   c                 f   t        |      dk7  r t        t        |dt        |       dg       |d   }|j                  |      }|X|j                  r6|j                         }|$t        |j                  j                  |             t        j                  ||      S t        t        |            S )Nr6   z!id() takes exactly one argument (z given)rr  r   )r   r   rs  get_idr   get_id_guard_typer   r   r;   r   r=   id)r   r   r   r   real_id
guard_types         r   call_idzBuiltinVariable.call_id	  s     t9>$9#d)GLM
 1g**R.zz 224
)!#**"7"7
"CD"((W55bg&&r   r  c                 L    t        dd| dddgt        j                         y )Nzcopy.deepcopy()zcopy.deepcopy(r  z'Dynamo does not support copy.deepcopy()zAvoid calling copy.deepcopy()r  r  )r   r   r  s      r   call_deepcopyzBuiltinVariable.call_deepcopy	  s4     	%$QCq)A/"..		
r   r  r  c                    ddl m} ddlm} | j                  }|t
        j                  t
        j                  fv r|j                         xrk |j                         xrY t        t        |j                         j                              t        t        |j                         j                              k(  }|t
        j                  u rt        j                  ||      S t        j                  ||       S ||vrEt        d|j                    d| d| dd|j                    d	| d| g t"        j$                  
       t'        |t(              rnt'        |t(              r^|j*                  xr |j*                  D|j*                  |j*                  k7  r+	 t-        j.                  |j*                  |j*                         |j                         r|n|}|j4                  j7                  d||j                         |j                         fi       }	 |t9        |      ||	      S # t0        $ rI t        d|j                    d| d| dd| d| d|j                    dg t"        j2                  
       Y w xY w)Nr6   r  %supported_tensor_comparison_op_valuesz unsupported Tensor comparison opr  r  r  *Dynamo does not support the comparison op z with Tensor arguments r  z8failed to broadcast when attempting Tensor comparison opz.Dynamo was unable to broad cast the arguments z, when attempting to trace the comparison op .rk  )rl  rc  rA  r}  r  r   r{  is_notr  ru  r)   r  r   r;   r   r   r   r   r  r   rd   sizer   broadcast_shapesRuntimeErrorr  rm  rn  r   )
r   r   r  r  rc  r}  r   	is_result
tensor_clsr  s
             r   r  z'BuiltinVariable._comparison_with_tensor
  s?    	/AWW(,,00  IOO%I1$--/2F2FGH01A1F1FGHI  X\\!&,,R;;&,,RY??:::;;-qbq9H V))-b96)556 t^,5.1)uzz6		UZZ'
&&tyy%**= "^^-T5
		&&R$--/5>>3C!Db
 !
 	
   V!{{m1TF"UG1="PQUPVVXY^X_ `BBD++a!Q9-889s   *H! !AI32I3c           
         ddl m} | j                  }||vrEt        d|j                   d| d| dd|j                   d| d| g t
        j                  	       t        |t              r|n|}t        |t        t        t        f      s%t        j                  | |t               d             S |j                  j                  d
||j!                         |j!                         fi       }t        j"                  ||d       S )Nr6   r|  z!unsupported SymNode comparison opr  r  r  r~  z with SymNode arguments r  rk  sym_num)rA  r}  r  r   r   r   r  r   rc   r<   rd   r;   r   r   rm  rn  r  r_  )r   r   r  r  r}  r   non_symnoder  s           r   r  z(BuiltinVariable._comparison_with_symnode=
  s    	BWW::;;;-qbq9H V**.r%:6)556  *$@ed/+;^L
 #((R$-?@@		&&R$--/5>>3C!Db
 %%
 	
r   c                      t        |||dd      S )Nnb_xor^rL   r@  s       r   call_xorzBuiltinVariable.call_xord
       Q8S11r   c                 "    t        |||ddd      S )Nnb_inplace_xorr  z^=rK   r@  s       r   	call_ixorzBuiltinVariable.call_ixori
       "a$4hEEr   c                     t        |||      S r   )rT   r@  s       r   call_mulzBuiltinVariable.call_muln
  s      Aq))r   c                     t        |||      S r   )rQ   r@  s       r   	call_imulzBuiltinVariable.call_imuls
  s     (Aq11r   c                      t        |||dd      S )Nnb_subtract-r  r@  s       r   call_subzBuiltinVariable.call_subx
  s     Q=#66r   c                 "    t        |||ddd      S )Nnb_inplace_subtractr  z-=r  r@  s       r   	call_isubzBuiltinVariable.call_isub}
  s     "a$9=$OOr   c                     t        |||      S r   )r[   r@  s       r   call_addzBuiltinVariable.call_add
  s     b!Qr   c                     t        |||      S r   )r^   r@  s       r   	call_iaddzBuiltinVariable.call_iadd
  s     b!Q''r   c                      t        |||dd      S )Nnb_and&r  r@  s       r   	call_and_zBuiltinVariable.call_and_
  r  r   c                 "    t        |||ddd      S )Nnb_inplace_andr  z&=r  r@  s       r   	call_iandzBuiltinVariable.call_iand
  r  r   c                      t        |||dd      S )Nnb_or|r  r@  s       r   call_or_zBuiltinVariable.call_or_
  s     Q7C00r   c                 "    t        |||ddd      S )Nnb_inplace_orr  z|=r  r@  s       r   call_iorzBuiltinVariable.call_ior
  s     "aOWdCCr   c                      t        |||dd      S )N	nb_lshiftz<<r  r@  s       r   call_lshiftzBuiltinVariable.call_lshift
       Q;55r   c                 "    t        |||ddd      S )Nnb_inplace_lshiftr  z<<=r  r@  s       r   call_ilshiftzBuiltinVariable.call_ilshift
       "a$7eLLr   c                      t        |||dd      S )N	nb_rshiftz>>r  r@  s       r   call_rshiftzBuiltinVariable.call_rshift
  r  r   c                 "    t        |||ddd      S )Nnb_inplace_rshiftr  z>>=r  r@  s       r   call_irshiftzBuiltinVariable.call_irshift
  r  r   c                      t        |||dd      S )Nnb_floor_dividez//r  r@  s       r   call_floordivzBuiltinVariable.call_floordiv
  s     Q#4d;;r   c                 "    t        |||ddd      S )Nnb_inplace_floor_divider  z//=r  r@  s       r   call_ifloordivzBuiltinVariable.call_ifloordiv
  s     "a$=?PRWXXr   c                      t        |||dd      S )Nnb_true_divide/r  r@  s       r   call_truedivzBuiltinVariable.call_truediv
  s     Q#3S99r   c                 "    t        |||ddd      S )Nnb_inplace_true_divider  z/=r  r@  s       r   call_itruedivzBuiltinVariable.call_itruediv
  s     "a$<>NPTUUr   c                      t        |||dd      S )Nnb_remainder%r  r@  s       r   call_modzBuiltinVariable.call_mod
  s     Q>377r   c                 "    t        |||ddd      S )Nnb_inplace_remainderr  z%=r  r@  s       r   	call_imodzBuiltinVariable.call_imod
  s     "a$:NDQQr   c                      t        |||dd      S )N	nb_divmodzdivmod()r  r@  s       r   call_divmodzBuiltinVariable.call_divmod
  s    
 Q;
;;r   c           
      
   t        |t              rMt        j                  | |j                  j                  dt
        j                  gt        |gi        d       S t        |t              r|j                  }t        |t        t        t        f      r,t        j                  |t        |j                         dk(        S t        |t"              r3| j%                  ||      }t        j                  ||j&                         S y )Nrk  r  r   )r   rc   r_  rm  rn  r   r&  r0   rA   dv_dictrF   r>   r`   r;   r   r   r  rg   r  r   )r   r   r_  bool_results       r   	call_not_zBuiltinVariable.call_not_
  s     a)"))&		&&#X]]5FsB5O   a)*		Aa,(9;GH"((S\Q->??a23..Q/K"((1B1B-BCCr   c                 "    ddl m}  ||||      S )Nr6   )generic_contains)r   r  )r   r   r_  r`  r  s        r   call_containszBuiltinVariable.call_contains
  s     	6Aq))r   c                 j    t        |t        j                        xr | j                  |j                  u S r   )r   r   r  r  r   s     r   r   zBuiltinVariable.is_python_equal
  s'    %!:!:;S588@SSr   )Fr   )r   r   r   r   r   	_SENTINELr;   _nonvar_fieldsr   r   r"   r   staticmethodr  cacherV  r   rF  r  rH  rQ  r   r   r  r   rV  r   r  r  r  r  r  r  r   r   itersetattrr  r   r  r   r   r  r  r  r   r  r  r  r  r  r  r  r#  ASTr7  r'  rC  rK  rO  rQ  rM  r  r  rk  r   r  r  r  r  r  r  r  r  r  r  call_mincall_maxr  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  r  r8  r=  rA  rE  rN  rQ  r   rU  r^  rg  rk  rm  rq  rx  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  s   @r   r  r    s    I		'	'N
 )s )F )?P ) ) __Ec(38*<&= E  EN:4 : __*Xc3h%7!8 *  *X __TfuT#Yf0E%EFF     __NTf)!# !	"	
		 N  N` S#X(,_(=GK		$	& 5T 5
 ,5	wtW5,)C. 3 # $ 4# 4C c  	1'1 1 	1
 
1."# "J1? 1o 1RV 1 T $t*  3$30?3	3 
?#
-1#2F-G
	tCy$sCx.(	)
 

)
37_8L3M
	
 a S#Xa +/:a CGa 	'!o%&	

 	$	 
a  a F	 
#'' 
d 
 
8 1'1/2~~1IL1	4	1 1*L'L  L 	L
 "L 
4	L,	47 	4 	4 	44-46E4	4 
(C 
 
 
(W'W ?#W S/)*	W
 
4	WF 	  fck+_%S/)*
 	
	
" 
)') ?#) S/)*	)
 
)0D;'D; D; ?#	D;
 S/)*D; 
D;L$-$4C$	4	$
&-&4C&	4	&
%-%4C%	4	%%-%4C%	%%-%4C%	4	%
?-?4C?	4	?B4
-
6E
	4	
Y-Y6:?6KY	Ym'm T!m T!	m
 
4	m^ HH$-$4C$	$
$-$4C$	$
%-%4C%	%B'B B 	B
 "B 
B	-	6E		4		
? 
o 
RV 

7-76E7	7

-

69

EH

	

F'F F "	F
 
4	F6 - 4C 	4	 D

,
8G
	4	

-
4C
	4	
'  "	
 
0'  "	
 
6
'
 
 "	

 

4('( ( "	(
 
(0'0 0 "	0
 
0h.'h. h. -	h.
 
h.T	9'	9 !	9 "		9
 
	9---2A-FU-	-
-6E	 (
'(
 (
 	(

 "(
 
(
T
-
3B
IX
	

-
58
	
&B'B B "	B
 
B:-:4C:	:4'-'4C'	'<'  "	
 
4	"-"2A"	"
	N'	N (	N 		N
 "	N 
	N'-'6E'	'*
-
2A
	
8
'8
 8
 	8

 
8
t%
'%
 %
 	%

 
%
N2-22A2FU2	4	2
F-F2AFFUF	4	F
*-*2A*FU*	4	*
2-22A2FU2	4	2
7-72A7FU7	4	7
P-P2APFUP	4	P
 - 2A FU 	4	 
(-(2A(FU(	4	(
2-22A2FU2	4	2
F-F2AFFUF	4	F
1-12A1FU1	4	1
D-D2ADFUD	4	D
6-62A6FU6	4	6
M-M2AMFUM	4	M
6-62A6FU6	4	6
M-M2AMFUM	4	M
<-<2A<FU<	4	<
Y-Y2AYFUY	4	Y
:-:2A:FU:	4	:
V-V2AVFUV	4	V
8-82A8FU8	4	8
R-R2ARFUR	4	R
<-<2A<FU<	4	<-2A	4	.*-*2A*FU*	*TV T Tr   r  c                        e Zd ZdZeZefdededdf fdZde	fdZ
dd	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edd	ded
ededef
d       Zedd	ded
ededef
d       Z xZS )DictBuiltinVariablez4Variable tracker for the `dict` builtin constructor.r   r   r~   Nc                 P    |t         urt        d|       t        |   di | y )Nz,DictBuiltinVariable value must be dict, got r   )r   r   r   r  r   r   r   r   s      r   r  zDictBuiltinVariable.__init__   /     #OPUw!WXX"6"r   c                      y)NzDictBuiltinVariable()r   r   s    r   r   zDictBuiltinVariable.__repr__      &r   r   rj   r   c                 >    t        j                  |t        g|i |S r   )r  call_custom_dictr   r  s       r   rk  z!DictBuiltinVariable.call_function  s!     #33BNtNvNNr   r   c                 x   |dk(  r]|r[t        i t        t                     }t        |d   t              r|S |j
                  j                  j                  | |d   g |      S |dk(  rt	        j                  |t        g|i |S t        t        |d       }||t        v rt        |d   t        j                        r>|d   j                  t        d      |d   j                  j                  |||dd  |      S t        |d   t               r|d   j                  |||dd  |      S t         | =  ||||      S )Nrk   rT  r   r  fromkeyszJUserDefinedDictVariable._base_vt must not be None for dict method dispatchr6   )r>   r   r:   r   r  rm  r[  r  call_custom_dict_fromkeysr   r(   r   UserDefinedDictVariabler  r   r   r   )r   r   r   r   r   dict_vtr  r   s          r   r   zDictBuiltinVariable.call_method  s]    9
 ,BDTDVWd1g':;"Nyy--KKG	 L   :&@@D#)  dD$/"{l'B$q'9#D#DE7##+(d  Aw''33Bd12hOODG%67Aw**2tT!"XvFFw"2tT6::r   user_clsc                    t        |      }| j                  t        j                  | t        j
                        t        j                  | |      g||      S r   )r  inline_user_function_returnr;   r   r   construct_dict)r   r  r   r   	args_lists        r   r  z$DictBuiltinVariable.call_custom_dict9  sQ     J	--!!"i&>&>?""2x0=9=
 	
r   c          
          t         t        t        hvrKt        dj                   d| d| dj                   dj                   ddj                   dg	       |rqt        us t        |      d
k7  st        |      d
k7  sd|vr3t         j                   ddt        |       dt        |       d       g ||j                  d      }t        |      dk(  r't         j                   ddt        |       d       t        |      d
k(  rg |t        j                  d       }t        |      dk7  r't         j                   ddt        |       d       |\  }}dt         t        t        f   dt        f fd}t        |t               r?|D cg c]  }t        j                   |       }} |t         j                  ||            S t         |      x}	r:t         |	      }
t!        d |
D              r |t         j                  |
|            S t        dj                   d| d| dj                   dddg	       y c c}w )Nz$Unsupported dict type for fromkeys()z.fromkeys(): r  zFailed to call z.fromkeys() because z5 is not any type of dict, OrderedDict, or defaultdictzEnsure z0 is a type of dict, OrderedDict, or defaultdict.r  r6   r   z	.fromkeysz1 args and 1 kwargs (`value`)z
 args and r  r   zat least 1 argsz argsr   z2 argsr  r~   c                    t         u rddlm} ddlm} j
                  j                  j                  |j                  t              |j                  t               g       }t        ||      st        dt        |             t        | t         t                     |_        |S t         u rddlm} ddlm} j
                  j                  j                  |j                  t              |j                  t               g       }t        ||      st        dt        |             t        | t               	      |_        |S t        | t               	      S )
Nr6   rd  )OrderedDictVariabler  z"Expected OrderedDictVariable, got )r  rU  )DefaultDictVariablez"Expected DefaultDictVariable, got rT  )r   rl  re  r  r  rm  r[  r  r_  r   r   r   r   r>   r:   r  r   r  )r  re  r  r  r  r   r  s        r   _make_resultzCDictBuiltinVariable.call_custom_dict_fromkeys.<locals>._make_result|  sM    ;&6=//MM%,,R6%,,R=	 N  "&*=>(<T&\NK  #4("2"4#
 [(6=//MM%,,R6%,,R=	 N  "&*=>(<T&\NK  #4)9);# (>N>PQQr   c              3   2   K   | ]  }t        |        y wr   rB   r  s     r   r  z@DictBuiltinVariable.call_custom_dict_fromkeys.<locals>.<genexpr>  s     0a;q>0r  zfailed to call dict.fromkeys()zo.fromkeys() because arguments could not be automatically converted to a list, or some dict key is not hashable.z(Manually convert the argument to a list.zEnsure all keys are hashable.)r   r   r   r   r   r   r1   r  r<   r_  r;   r   r   r  rP   r5   r  )r   r  r   r   r   r   r  r  arg_listiteratorkeyss   ``         r   r  z-DictBuiltinVariable.call_custom_dict_fromkeysH  s    D+{;;>#,,-]4&&J-h.?.?-@@T$$%%Z\ h//00`a  +t9>v;!#&(#(()334ykCK=@	 0T/6::g./Dt9>$$%Y/!t9+U#	 t9>9T9+22489Dt9>$$%Y/t9+U#	 
U*	R89*	R*	RX c4 >AB--b!4BHBh >??(S11X1"2x0D0400#DMM$$>??4(()tfAfXF)(*;*;)< =0 0 ;/
	
 Cs   I)r   r   r   r   r   r   r   r   r  r   r   r  r;   rk  r   r  r  r  r  r  s   @r   r  r  
  sC   >
C%) #d #S #T #
'# 'O'O ?#O S/)*	O
 
O';''; '; ?#	';
 S/)*'; 
';R 
'

 	

 "
 

 
 q
'q
q
 	q

 "q
 
q
 q
r   r  c                   l     e Zd ZdZeZefdededdf fdZdefdZ	dd	d
e
e   deeef   defdZ xZS )IterBuiltinVariablez(Variable tracker for the `iter` builtin.r   r   r~   Nc                 P    |t         urt        d|       t        |   di | y )Nz,IterBuiltinVariable value must be iter, got r   )r  r   r   r  r  s      r   r  zIterBuiltinVariable.__init__  r  r   c                      y)NzIterBuiltinVariable()r   r   s    r   r   zIterBuiltinVariable.__repr__  r  r   r   rj   r   c                     |st        t        |dg       t        |      dk(  rt        ||d         S t	        j
                  t        j                  j                        j                  |||      S )Nz(iter expected at least 1 argument, got 0rr  r6   r   )
r   rs  r   rP   r   r  r   r  callable_iteratorrk  r  s       r   rk  z!IterBuiltinVariable.call_function  si     $@A t9>"2tAw//11""44mBf-.r   )r   r   r   r   r  r   r   r  r   r   r  r;   r   rk  r  r  s   @r   r  r    sn    2
C$( #c #C #D #
'# '.'. ?#. S/)*	.
 
.r   r  c                        e Zd ZdZeZefdededdf fdZdefdZ	dd	d
e
e   deeef   defdZdd	d
e
e   deeef   defdZ xZS )GetAttrBuiltinVariablez+Variable tracker for the `getattr` builtin.r   r   r~   Nc                 P    |t         urt        d|       t        |   di | y )Nz2GetAttrBuiltinVariable value must be getattr, got r   )r   r   r   r  r  s      r   r  zGetAttrBuiltinVariable.__init__  4     DUGL  	"6"r   c                      y)NzGetAttrBuiltinVariable()r   r   s    r   r   zGetAttrBuiltinVariable.__repr__      )r   r   rj   r   c           	      8   ddl m t        fd|D              r+|D cg c]   }t        |      r|j	                         n|" }}	 | j                  |||      S c c}w # t        $ r t        ||      s 	 t        |D cg c]  }|j                          nc c}w c} }n^# t        $ r t        t        |        t        $ r  t        $ r0}t        t        |      |t        |j                                 d }~ww xY wt#        j$                  ||      cY S w xY w)Nr6   r  c              3   6   K   | ]  }t        |        y wr   r   r  r_  r  s     r   r  z7GetAttrBuiltinVariable.call_function.<locals>.<genexpr>       @az!01@r  rr  )r  r  r  r   r  _call_getattrr   r&   r   r   r  r   r7   r  r   r  r   r;   r   )r   r   r   r   r_  r  rt  r  s          @r   rk  z$GetAttrBuiltinVariable.call_function  s
    	.@4@@RVMNz!-@A		qHD 	5%%b$77	
  	5 1v>	 4"Ha1#7#7#9"H"HI! (<6  (cBT#((^L #((V44!	5sG   %AA   D7	B" B

B"!D"+C=+C88C==DDc                 >   |d   }|d   }t        |      dkD  r|d   nd }|j                         st        dd| d| d| ddd	g
       |j                         }|j	                         r|dk(  rd}|j
                  j                  j                  |      rht        |t        j                        rN|dv rJ|j                  r>|j
                  j                  j                  |      rt        dd| d| d| ddg 
       |j
                  j                  j                  ||      rt        |t        j                        s&|j
                  j                  j                  ||      S |j
                  j                  j                  ||t         j"                        rh|j
                  j                  j                  ||d      }|j%                  |      }	t        |t        j&                        s|	t(        u st+        |	      s|S |H|j-                  ||      }
|
2|
j/                  dd      st1        d|
       |
j                         s|S |S |j2                  xr t5        |j2                  |      }|dv r	 |j                         }t        |t6              r|dk(  rat9        |j:                        D cg c]*  \  }}t=        j>                  |||xr tA        ||            , }}}t        jB                  ||      S |dk(  r!t=        j>                  ||jD                  |      S |dk(  r t=        j>                  ||jF                        S t        |t        jJ                        r|jM                  ||      S t        |t        jN                  t        jP                  t        jR                  t        jT                  t        jV                  t        jX                  t        j                  f      r!t        |t        j                        r]t[        |j\                  j^                  t`        jb                        r/td        jf                  r|dv rt        dd| d| dd| dg
       |j	                         r|ji                         jj                  jl                  d    }t        |tn        jp                        rFts        |      r;|jt                  rtd        jv                  st        d!d"d#g tx        jz                  
       	 |jM                  ||      S t        |t        j                        r	 t        |j\                  |      }t        |tn        j                  j                  tn        j                  j                  f      r@tn        j                  j                  j                  |      rt        j                  ||      S t        j~                  |||      S t        |t              r|j                  s||j\                  j                  vrt        |j\                  |      }n|j\                  j                  |   }td        j                  r'|j                  j                  |j\                  ||       t=        j>                  |||      S 	 |jM                  ||      S c c}}w # tH        $ r Y aw xY w# t|        $ r  tH        $ r t        j~                  |||      cY S w xY w# t        $ r t        t        |        w xY w# tH        $ r t        j~                  |||      cY S w xY w)$Nr   r6   r   z)getattr() with non-constant name argumentzgetattr(r  r  z:getattr() with non-constant name argument is not supportedz1Ensure the name argument of getattr() is a stringr  _gradgrad)named_parameters
parametersnamed_buffersbuffersnamed_modulesmodulesz,getattr() on nn.Module with pending mutationzPIntentionally graph breaking on getattr() on a nn.Module with a pending mutationT)
deleted_okFz2hasattr_var must be a constant True or False, got >   __base__	__bases__	__flags__r"  r   r!  r#  )assertNotWarnsassertWarnsRegexassertWarnszFailed to trace unittest methodzfunction: unittest.TestCase.z3Dynamo does not know how to trace unittest method `z` zAvoid calling `TestCase.z%`. Please report an issue to PyTorch.r%  zAttempted to wrap sparse Tensorr  z-torch.compile does not support sparse Tensors)Pr   r   r   r   r  rm  r[  r  r   r   UnspecializedNNModuleVariableis_state_mutatedhas_pending_mutationhas_pending_mutation_of_attrrg   	load_attrr8   INSTANCE_DICTlookup_class_mro_attrr^  r9   rf   r   is_constant_matchr   r   r   r   	enumerater"  r;   r   r   rH   r!  r#  r  rZ  r   rd   NamedTupleVariabler<   r  DistributedVariabler   r  r   r   unittestTestCaser   enable_trace_unittestr  r   r&  r   rY  r   ry  capture_sparse_computer   SPARSE_TENSORr7   r   r  r   r  r   _opsOpOverloadPacket
OpOverloadr  trace_rulesis_aten_op_or_tensor_methodr   is_torchrD  replay_record_enabledexec_recorderrecord_module_access)r   r   r   r   r  r  defaultr   r   	type_attrhasattr_varr   r  r`  
tuple_argsfake_valmembers                    r   r  z$GetAttrBuiltinVariable._call_getattr  sD    1g7 Y]$q'**,C"3%r(2gYa@XJK	 **, ==?twD99!!77<#yFFG ,,		..CCCH! N"*3%r$r'! D%2  99!!>>sDIc9#F#FGyy--77TBByy%%BBT+99 		..88dt8T55d;	!%)B)BC/7I)7T L..r48K&"44T5A(L[MZ  #557"N<
3::t <99..0eT*{*
 )2%//(B	& !%1 ,11 "Av'J-2J&
 &  )66z&QQz).44RPP{*.44RII c9556??2t,,((,,**----2233
 3	 C CDsyy22H4E4EF00 =:4&A"UVZU[[] ^24& 9= =	 }}<<>..33ODx6%h/YYf.K.K! A "$S@ 1 ? ?@	Kr400 YCCD D1
 44ejj6K6KL--++GGO ==fVTT 00d6JJ[)||t399+=+== D1++D1++  55ciivN"((VV<<Kr400C& ' l 7  & K 00d6JJK " (<. ' K 00d6JJKs`   4=Z 1/Z Z :%Z  $Z 6Z* #[ [8 Z 	Z'&Z'**[[[58!\\)r   r   r   r   r   r   r   r  r   r   r  r;   r   rk  r  r  r  s   @r   r  r    s    5
C$+ #c #s #t #*# *5'5 ?#5 S/)*	5
 
5@qK'qK ?#qK S/)*	qK
 
qKr   r  c                   l     e Zd ZdZeZefdededdf fdZdefdZ	dd	d
e
e   deeef   defdZ xZS )HasAttrBuiltinVariablez+Variable tracker for the `hasattr` builtin.r   r   r~   Nc                 P    |t         urt        d|       t        |   di | y )Nz2HasAttrBuiltinVariable value must be hasattr, got r   )r   r   r   r  r  s      r   r  zHasAttrBuiltinVariable.__init__  r  r   c                      y)NzHasAttrBuiltinVariable()r   r   s    r   r   zHasAttrBuiltinVariable.__repr__  r  r   r   rj   r   c                    ddl m t        fd|D              r+|D cg c]   }t        |      r|j	                         n|" }}t        |      dk7  s|rt        t        |       |\  }}|j                         st        t        |       |j                  ||j                               }|7t        dd| d| dd	|j                          g t        j                  
       |S c c}w )Nr6   r  c              3   6   K   | ]  }t        |        y wr   r  r  s     r   r  z7HasAttrBuiltinVariable.call_function.<locals>.<genexpr>  r  r  r   zhasattr() on unsupported typezhasattr(r  r  z#hasattr() is not supported on type r  )r  r  r  r   r  r   r   rs  r   r   r   r   r  r   r  )	r   r   r   r   r_  r  r   r  r  s	           @r   rk  z$HasAttrBuiltinVariable.call_function  s     	.@4@@RVMNz!-@A		qHD  t9>V$Y3	T&&($Y3%%b$*A*A*CD>7"3%r$q1A#BVBVBXAYZ6)556	 !s   %C')r   r   r   r   r   r   r   r  r   r   r   r;   r   rk  r  r  s   @r   rG  rG    sn    5
C$+ #c #s #t #*# *' ' S/)*	
 
r   rG  c                        e Zd ZdZeZefdededdf fdZdefdZ	dd	d
e
e   deeef   defdZdd	dededededz  f
dZ xZS )SetAttrBuiltinVariablez+Variable tracker for the `setattr` builtin.r   r   r~   Nc                 P    |t         urt        d|       t        |   di | y )Nz2SetAttrBuiltinVariable value must be setattr, got r   )r  r   r   r  r  s      r   r  zSetAttrBuiltinVariable.__init__  r  r   c                      y)NzSetAttrBuiltinVariable()r   r   s    r   r   zSetAttrBuiltinVariable.__repr__  r  r   r   rj   r   c           
        	 ddl m	 t        	fd|D              r+|D cg c]   }t        |	      r|j	                         n|" }}t        |      dk7  s|rt        t        |       |\  }}}| j                  ||||      }||S t        dd| d| d| dd	|j                          g t        j                  
       y c c}w )Nr6   r  c              3   6   K   | ]  }t        |        y wr   r  r  s     r   r  z7SetAttrBuiltinVariable.call_function.<locals>.<genexpr>  r  r  rq   zsetattr() on unsupported typesetattr(r  r  z#setattr() is not supported on type r  )r  r  r  r   r  r   r   rs  _call_setattrr   r  r   r  )
r   r   r   r   r_  r  r  r  r  r  s
            @r   rk  z$SetAttrBuiltinVariable.call_function  s     	.@4@@RVMNz!-@A		qHD  t9>V$Y3!Xs##BXs;M3se2hZr#a8=c>R>R>T=UV2%112		
s   %C r  r  r  c                 R	   t        |t        j                  t        j                  t        j                  t        j
                  t        j                  f      r|j                  |d||gi       S |j                  j                  j                  |      r|j                         rs|j                         }|j                         r)ddlm} |dk(  r+t!        dd| d| d| dd	g t"        j$                  
       n|dk(  r|j&                  t!        dd| d| d| dddg
       n3|j(                  |j(                  k7  rt!        dd| d| d| dddg
       |j                  j*                  D cg c]  }|j&                  |j&                  k(  s|  }}|D ]'  }|j                  j*                  j-                  |       ) t/        |      5  t1        j2                         5   || |j                  j4                  dt0        j6                  j8                  gt;        ||gi              }	d d d        d d d        dt0        j6                  dt0        j6                  fd}
|j                  j5                  d|
	j=                         fi         |
|j=                         j>                  j@                  d          |	S |dv rd}n)tC        |      rt!        dd| d| d| ddd| dg
       |j                  j                  jE                  |||       |S t        |t        jF                        r?|j                  jI                         s#t!        dd| ddgt"        jJ                  
       |j                         rt        |t        jL                        rtO        |j=                         j>                  |      }	 |jQ                  ||j                               }||j                         rptO        |j=                         j>                  |      }tW        jX                  |jZ                  d      }||u r(|t0        j\                  j^                  j`                  u r|S |jc                  |       y c c}w # 1 sw Y   KxY w# 1 sw Y   PxY w# tR        tT        f$ r d }Y w xY w) Nr  r6   ri  requires_gradz!setattr() on Tensor.requires_gradrR  r  r  zsetattr() on Tensor.requires_grad not supported. Mutating requires_grad can introduce a new leaf from non-leaf or vice versa in the middle of the graph, which AOTAutograd does not currently know how to handle.r  dataz&Failed to mutate tensor data attributezVDynamo only supports mutating `.data` of tensor created outside `torch.compile` regionzWDon't mutate `.data` on this tensor, or move the mutation out of `torch.compile` regionz9Failed to mutate tensor data attribute to different dtypezPDynamo only supports mutating `.data` of tensor to a new one with the same dtyperk  r  r~   c                     | j                   }|dkD  r|dz
  }t        j                  j                  j	                  | f|f       | S r  )_versionr   _C	_autograd_unsafe_set_version_counter)r  versions     r   _lower_version_count_by_1zGSetAttrBuiltinVariable._call_setattr.<locals>._lower_version_count_by_1q  s>    "#**"Q;&-kG**FFtgZX r   r%  )r  r  r  zFailed to set tensor attributez6Dynamo doesn't support setting these tensor attributeszDon't mutate attribute 'z@' on tensors, or move the mutation out of `torch.compile` regionz#nn.Module mutation in HigherOrderOpznn.Module: zPInplace modifying nn.Module params/buffers inside HigherOrderOps is not allowed.z<Remove the mutation or move it outside of the HigherOrderOp.)2r   r   r  rg   NestedUserFunctionVariabler  TracebackVariabler   rm  r[  r  r   r   r  rl  rj  r   r   r  r   r   tracked_fakesremovedynamo_disable_gradr   no_gradrn  rY  set_r0   r  r   r&  r,   
store_attrrZ  is_root_tracerFUNDAMENTALrd   r*   r   r  r   r  rb  module_typer'  Moduler  convert_to_unspecialized)r   r   r  r  r  r   rj  tf	to_removeoutr]  assigning_fake_valgetattr_varexisting_fake_attrmod_setattrs                  r   rS  z$SetAttrBuiltinVariable._call_setattr  sy    --3344++++	
 ??2}xorJJII""88=++-..0D}}2?*! C"*3%r$r#a @%l ? 1 = => V^ zz)%$L&.se2dV2cU!$D)P!M#	 cii/%$_&.se2dV2cU!$D)J!M#	" &(YY%<%<!!		SZZ@W!I ! ( ;		//66r:; -R0 	%--/ 	+2BII22 / % 1 1 "3C:r!B	 	!U\\ !ell ! II**'1)	 .clln.A.A.F.F.WX J.. "D06 " @"*3%r$r#a @$\6tf =N N	 II""--c4=JY77899++-A)#/ rV*66	 **,Y--2 &4CLLN4G4G%L"'"%//"h6Q6Q6S"TK *{/D/D/F)78L8L8N8S8SUW)X& #*"8"8-"XK*.@@'588??+F+FF**((,A!	 	 	 	R '(>? '"&K'sC   4Q3Q3R%A
Q8/R? R 8R	=RRR&%R&)r   r   r   r   r  r   r   r  r   r   r   r;   r   rk  rS  r  r  s   @r   rM  rM    s    5
C$+ #c #s #t #*# *
'
 '
 S/)*	

 

2d'd d "	d
 d 
4	dr   rM  c            
            e Zd ZdZeZefdededdf fdZde	fdZ
dd	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 xZS )ListBuiltinVariablez4Variable tracker for the `list` builtin constructor.r   r   r~   Nc                 P    |t         urt        d|       t        |   di | y )Nz,ListBuiltinVariable value must be list, got r   )r  r   r   r  r  s      r   r  zListBuiltinVariable.__init__  r  r   c                      y)NzListBuiltinVariable()r   r   s    r   r   zListBuiltinVariable.__repr__  r  r   r   rj   r   c                 (   |rt        |d       t        |      dk(  rt        g t                     S t        |      dkD  rt        |dt        |              |d   }|j                  r{t        |j                        set        |t              r4t        |j                  j                  t        j                               n!t        |t        j                  t        j                  f      st        |t        t        j                   t        j"                  f      r/|j$                  j&                  j)                  |j                         t        |t        j*                        r3t        |j                  j                  t        j,                               nLt        |t        j.                        s2t        |j                  j                  t        j0                               t        g t                     }|j3                  |d|d   gi        |S )Nz!list() takes no keyword argumentsr   rT  r6   z&list expected at most 1 argument, got r  )r   r   rF   r:   r   r!   r   rG   r   r   r   TUPLE_ITERATOR_LENr   IteratorVariableLocalGeneratorObjectVariabler>   OrderedSetVariableDictKeySetVariablerm  guard_on_key_orderr   MappingProxyVariableMAPPING_KEYS_CHECKr'  SEQUENCE_LENGTHr   )r   r   r   r   r  lsts         r   rk  z!ListBuiltinVariable.call_function  s    3 t9>2B2DEEY]8TD
 1g::0<#45cjj33L4S4STU++Y-S-ST )!44!44 II0044SZZ@c9#A#AB!

--l.M.MN $C)P)PQ!#**"7"78T8T"UV2-=-?@HtAwi4
r   r   c                    |dk(  rit        |      dk(  r[|sYt        g t                     }t        |d   t              r|S |j
                  j                  j                  | |d   |dd  |      S t        | %  ||||      S )Nrk   r6   rT  r   r  )
r   rF   r:   r   rs  rm  r[  r  r   r   )r   r   r   r   r   list_vtr   s         r   r   zListBuiltinVariable.call_method  s     94yA~f&r9I9KLd1g':;"Nyy--KKGH	 L   w"2tT6::r   )r   r   r   r   r  r   r   r   r  r   r   r;   r   rk  r   r  r  s   @r   rs  rs    s    >
C%) #d #S #T #
'# '.'. ?#. S/)*	.
 
.`;'; ; ?#	;
 S/)*; 
; ;r   rs  r   c              #      K   ddl m} |j                  | d      }	 |j                  |        d  |j	                  |        y # |j	                  |        w xY ww)Nr6   )GradModeVariableF)r  r  r_  enterexit)r   r  gmvs      r   rb  rb    sD     "

!
!"e
,C		"s   AA AAA)r~   N)r   r#  r  
contextlibr  r  r  loggingr  r   rI  r   r4  r2  collectionsr   r   collections.abcr   r   r   r   r	   r
   r   torch._subclasses.meta_utilsr   torch.overridesr   torch.utils._python_dispatchr   r  r   r   r   r   rt  r   r   r   r   r   r   r   r   guardsr   r   replay_recordr   r   r   r   r    r!   r"   r#   utilsr$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   baser7   r8   r9   r:   r;   constantr<   r=   dictsr>   r?   r@   rA   hashablerC   listsrD   rE   rF   rG   rH   miscrI   rJ   r   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   setsr_   r`   rA  ra   rb   rc   rd   re   r  rf   rg   rh   torch._dynamo.codegenri   torch._dynamo.symbolic_convertrj   	getLoggerr   r  r9  r   r:  r-  r5  r)  r6  r*  r7  r+  r8  r,  r   r;  r/  r<  r0  r4  r   r=  r1  r?  r2  r>  r3  r{  r   r  r  r  ro   r   r   r   r   rJ  r  r  r   r  rO  rN  rJ  rM  rK  rL  rz   r   r   r   r(  r   r   r   r  r$  r%  r&  r.  r   r{   r|   r}   r   rc  r   r   r  r  r  r  rG  rM  rs  contextmanagerIteratorrb  r   r   r   <module>r     sw  *          
    0 8 8 / /  6 1 F > >	 	 	 1 '     (  7  "  5     , 1   /Hg! MM8<<MM8<<MM8<<))x''MM8<<h&&hoohooMM8<<MM8==LL(,,MM8<< " I|,	-)Y-
.	9i'(B "Dy~)=$> 
 w2;]O2L&w/  &**fjj9?T;QQ  _%d?.CS.H(IIKKKKKKKKKKKK6 T(38,c12  LLLLOOLLLLKKKKKKKKKKKKLLMMMMMMMMMM-4 MMLLLLMMMMLL oo
 OOOO  LLLLLLMM
 	; eD1367  JL $xS18CH3EEF K KM 4c 2HS#X4F FG L
 H DENU;/ U;pO%T) O%TdJ
- 
D!.- !.H`K0 `KF(0 (VL0 L^P;- P;h 7 FOOD<Q  r   