
    9j                       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mZmZ ddlmZmZmZmZ ddl
mZmZmZ ddl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* d	dl+m,Z,m-Z- d	dl.m/Z/ d	dl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 d	dl7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZK ddlLmMZMmNZNmOZOmPZP ddlQmRZRmSZS ddlTmUZUmVZVmWZWmXZXmYZY ddlZm[Z[ ddl\m]Z]m^Z^m_Z_m`Z`maZambZbmcZc ddldmeZe ddlfmgZgmhZhmiZi ddljmkZkmlZlmmZmmnZnmoZo ddlpmqZqmrZrmsZsmtZt erddlumvZv ddlwmxZx  ej                  ez      Z{ej                  ej                  ej                  ej                  ej                   ej                  ej                  ej                  ej                  ej
                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                   ej"                  ej$                  ej&                  ej(                  iZe eddh      e eddh      e eddh      iZeeee   f   ed <   ej>                  d!k\  r ed"h      ee<   ed#e
j(                  e
j(                  gePdz  f   ZeeP   eeeP   d$f   z  ZejH                  e!jJ                  ejL                  e!jN                  ejP                  e!jR                  ejT                  e!jV                  ejX                  e!jZ                  ej\                  e!j^                  iZej                  ej                  ejb                  ej                  ej
                  ej                  ej                  ejP                  ejX                  ej\                  ejT                  ejL                  ejH                  ej                  ej                  ej                   ej                  ej                  ej                  ej                  ej                  ej                  fZej                   ej$                  ej(                  ej                  ej&                  ej"                  fZejh                  fZej                  ej                  ej                  ej                  ejl                  fZejp                  ejr                  ejt                  ejv                  ejx                  fZeWeXeiesfZeeeP   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'<   d6d)Z G d* d+eP      Z G d, d-e«      Z G d. d/e«      Z G d0 d1e«      Z G d2 d3e«      Zej                  d4d#d(e
j                  d   fd5       Zy)7a\  
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KeysViewSequence)AnycastTYPE_CHECKING)is_sparse_any)BaseTorchFunctionMode)is_traceable_wrapper_subclass   )configgraph_break_hints	polyfills	variables)ObservedAttributeErrorObservedUserStopIterationraise_observed_exception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cmp_name_to_op_mappingdict_methodsextract_fake_example_valuefrozenset_methods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set_methodsspecialize_symnodestr_methodstensortype_to_dtype   )#AsPythonConstantNotImplementedErrorNO_SUCH_SUBOBJValueMutationNewVariableTracker)ConstantVariableFakeIdVariable)ConstDictVariableDefaultDictVariableDictItemsVariableDictKeysVariableDictViewVariableis_hashable)BaseListVariableListIteratorVariableListVariableRangeVariableSizeVariableTupleIteratorVariableTupleVariable)NullVariable)FrozensetVariableOrderedSetClassVariableSetVariable)FakeItemVariablesupported_comparison_opsSymNodeVariableTensorVariableUnspecializedPythonVariable)MutableMappingVariableUserDefinedDictVariableUserDefinedObjectVariableUserDefinedVariable)	PyCodegen)InstructionTranslator__new__
from_bytesfromhexhex"_BUILTIN_CONSTANT_FOLDABLE_METHODS      from_numberr[   ._SET_LIKE_OP_SUPPORTBUILTIN_TO_TENSOR_FN_MAPBUILTIN_TO_TENSOR_RFN_MAPreturnc                  B  	
 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 ]  } ||       J t        |<    # 	fdt        f
fdt        ffdt        fg}t        j                  t        j                  t        j                  h}|D ]3  \  }}|D ])  }||v r ||       J t        |   k7  s!t        |<   + 5 	 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kwargsrh   c                 $    |xs i }| ||i |S N )selfrl   rm   rn   ro   most_recent_funcs        _/media/conek/DATA/Code/OCR/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#(((    )rr   N)
__name__
__module____qualname____doc__r   r	   r   dictstrrv   )rt   s   ru   GetMethodModerk      s_    	 #%,0
	)38$
	) 
	) 3-	
	)
 cNT)
	) 
	)rw   r~   r8   )dtypec                      |       S rq   rr   )oinp0s    ru   <lambda>z3populate_builtin_to_tensor_fn_map.<locals>.<lambda>  s    qw rw   c                      |       S rq   rr   r   inp0_ints    ru   r   z3populate_builtin_to_tensor_fn_map.<locals>.<lambda>  s    q{ rw   c                      |       S rq   rr   )r   r   inp1s    ru   r   z3populate_builtin_to_tensor_fn_map.<locals>.<lambda>  s    qt} rw   c                      |       S rq   rr   )r   r   inp1_ints    ru   r   z3populate_builtin_to_tensor_fn_map.<locals>.<lambda>  s    q8, rw   c                      | d      S Nr   rr   r   s    ru   r   z3populate_builtin_to_tensor_fn_map.<locals>.<lambda>  s    q1~ rw   c                      | d      S Nr8   rr   )r   r   s    ru   r   z3populate_builtin_to_tensor_fn_map.<locals>.<lambda>  s    !At* rw   c                      | d      S r   rr   )r   r   s    ru   r   z3populate_builtin_to_tensor_fn_map.<locals>.<lambda>"      qH~ rw   c                      | d      S r   rr   r   s    ru   r   z3populate_builtin_to_tensor_fn_map.<locals>.<lambda>#  r   rw   )lenrf   r   torchonesint32un_ops
un_int_opsbin_opsbin_int_opstensor_and_int_opsoperatormatmulimatmulgetitemrg   )r~   setups_and_oplistssetup_fnop_listoprsetups_and_oplistsrskipsr   r   r   r   rt   s          @@@@@ru   !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 @'333/?(,@	@ % &{3%'9:O
 //8#3#3X5E5EF!4 	EHg E<'333#'?'CC4D-b1E	E3 E  E  Es   'CF>FF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efdZdefdZdedefdZy)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sourcerh   c                 d    t        |j                  t        j                                | |      S Nr   r   
make_guardr   BUILTIN_MATCHclsr   r   s      ru   create_with_sourcez&BaseBuiltinVariable.create_with_source@  s&    f''(B(BCD&!!rw   c                     | j                   S rq   )r   rs   s    ru   as_python_constantz&BaseBuiltinVariable.as_python_constantE  s    xxrw   c                     | j                         j                  }||j                  j                  vsJ d       |j	                  |j                  |d             y )Nshadowed globalTadd)r   rx   tx	f_globalsappend_outputcreate_load_globalrs   codegennames      ru   reconstructzBaseBuiltinVariable.reconstructH  sR    &&(117::///B1BB/g8848HIrw   r   r[   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)rs   r   r   r   attrs        ru   var_getattrzBaseBuiltinVariable.var_getattrM  sc    >DKK!>txxt,(($d.>T
QW
 	
DHQW
 	
rw   c                 ^    t        j                  |t        | j                         |            S rq   )r<   buildhasattrr   )rs   r   r   s      ru   call_obj_hasattrz$BaseBuiltinVariable.call_obj_hasattrT  s'     $$R1H1H1JD)QRRrw   c                      y)NTrr   r   s    ru   is_python_hashablez&BaseBuiltinVariable.is_python_hashableY  s    rw   c                 4    t        | j                               S rq   )hashr   r   s    ru   get_python_hashz#BaseBuiltinVariable.get_python_hash\  s    D++-..rw   otherc                 f    t        |t              xr  | j                         |j                         u S rq   )
isinstancer   r   rs   r   s     ru   is_python_equalz#BaseBuiltinVariable.is_python_equal_  s1    %!45 
##%)A)A)CC	
rw   r   rZ   rh   N)rx   ry   rz   r{   r   r	   __annotations__classmethodr"   r   r   r   r}   r<   r   r=   r   boolr   intr   objectr   rr   rw   ru   r   r   1  s    
 CO"s "F "?T " "C J

5 
S 
_ 
S)S14S	S
D / /
V 
 
rw   r   c                   
    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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'de	f fdZ(d}dZ)dededefdZ*dedefdZ+dee   defdZ,dededefd Z-ede.e   deeef   deee	   eee	f   f   fd!       Z/de.e   deeef   defd"Z0e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%       Z1d&d$de	defd'Z2d&d$dedefd(Z3ed&d$defd)       Z4d&d$de.e   deeef   dedz  fd*Z5i Z6eeedf   ed$e.e   eeef   gef   f   e#d+<   d&d$de.e   deeef   defd,Z7d&d$d-edee   deeef   def
 fd.Z8d&d$d/ededz  fd0Z9d&d$d/ededz  fd1Z:d&d$d/ededz  fd2Z;d&d$d/ededz  fd3Z<d&d$d/ededz  fd4Z=d&d$dededz  fd5Z>d&d$d6e.e   defd7Z?d&d$d8edz  d9edz  dedz  fd:Z@e>ZAe>ZBd&d$d/edefd;ZCd&d$d/edefd<ZDd&d$d/edefd=ZEd&d$d/edededef
d>ZFd&d$dededz  fd?ZGdededefd@ZHd&d$dedefdAZId&d$de	de	defdBZJ	 d~d&d$dCedz  dedededz  f
dDZKd&d$dCedededef
dEZL	 d~d&d$dCedz  dedededz  f
dFZMeMZNd&d$d/ededz  fdGZOdHe	dedededz  fdIZPd&d$d/ededz  fdJZQd&d$dededefdKZRd&d$dededefdLZSd&d$dededefdMZTd&d$dededefdNZUd&d$dededefdOZVd&d$d/edPedefdQZWd&d$dRedSedefdTZXd&d$d8ed9edefdUZYd&d$dedefdVZZd&d$dCedWededz  fdXZ[d&d$dedYededef
dZZ\d&d$ded[edefd\Z]d&d$d-edefd]Z^	 d~d&d$dCed^ed_edz  dedz  f
d`Z_d&d$dCed^edaededz  f
dbZ`d&d$dCed^edefdcZad&d$dCedefddZbd&d$dCededz  fdeZcd&d$dCedededz  fdfZdd&d$d8ededz  fdgZed&d$dhedededef
diZfd&d$dedefdjZgd&d$dkedefdlZhd&d$dmednedefdoZid&d$dmednedefdpZjd&d$d8ed9ededz  fdqZkd&d$d8ed9ededz  fdrZld&d$d8ed9ededz  fdsZmd&d$d8ed9ededz  fdtZnd&d$d8ed9ededz  fduZod&d$d8ed9ededz  fdvZpd&d$d8ed9ededz  fdwZqd&d$d8ed9ededz  fdxZrd&d$d8ededz  fdyZsd&d$d8ed9edefdzZtd{edefd|Zu xZvS )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   rh   c                 f    t        |j                  t        j                                | ||      S r   r   r   s      ru   r   z"BuiltinVariable.create_with_sourcev  s(    f''(B(BCD5((rw   .c                  :   h t         t        t        t        t        t
        t        t        t        t        t        t        t        t        t        t        t         t"        t$        t$        j&                  t(        t*        t,        j                   t,        j.                  t,        j0                  t,        j2                  t,        j4                  t,        j6                  t,        j                  t,        j8                  t,        j:                  t,        j<                  t,        j>                  t,        j@                  t,        jB                  t,        jD                  t,        jF                  t,        jH                  t,        jJ                  t,        jL                  t,        jN                  t,        jP                  t,        jR                  t,        jT                  t,        jV                  t,        jX                  t,        jZ                  t,        j\                  t,        j^                  t,        j`                  t,        jb                  t,        jd                  t,        jf                  t,        jh                  t,        jj                  t,        jl                  t,        jn                  } ddl8m9} | ju                   |jv                                | ju                  d tx        jz                  jw                         D               | S )Nr8   )rR   c              3   h   K   | ]*  }t        |t        t        j                              s'| , y wrq   )r   r   mathsqrt.0xs     ru   	<genexpr>z;BuiltinVariable._constant_fold_functions.<locals>.<genexpr>  s!     W
1d499o8V1Ws   (22)>absallanyr   callablechrcomplexdivmodfloatr   r   r   maxminordpowreprroundr}   format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tensorrR   updatevaluesr   __dict__)fnsrR   s     ru   _constant_fold_functionsz(BuiltinVariable._constant_fold_functions{  sX   :(
:(
:(
 :(
 	:(

 :(
 :(
 :(
 :(
 :(
 :(
 :(
 :(
 :(
 :(
 :(
  !:(
" #:(
$ %:(
& ':(
( JJ):(
* +:(
, -:(
. LL/:(
0 LL1:(
2 LL3:(
4 MM5:(
6 NN7:(
8 OO9:(
: LL;:(
< LL=:(
> OO?:(
@ A:(
B C:(
D LLE:(
F LLG:(
H LLI:(
J K:(
L   M:(
N OOO:(
P OOQ:(
R MMS:(
T LLU:(
V LLW:(
X MMY:(
Z MM[:(
\ ]:(
^ _:(
` a:(
b MMc:(
d MMe:(
f MMg:(
h i:(
j k:(
l MMm:(
n MMo:(
p LLq:(
r NNs:(
v 	5

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

Wdmm224WW
rw   c                 :    | j                   | j                         v S rq   )r   r  r   s    ru   can_constant_fold_throughz)BuiltinVariable.can_constant_fold_through  s    ww$77999rw   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 rq   )(r   r   r   r   r   r   r   r   r   r  r  r  r   ltgtgeleneeqr  r  r  r  r  r	  r
  r  r  r   r  r  r   r  r  r  r  r  r  r  r  r  s    ru   _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 
rw   c                     t         j                  g dt         j                  ft         j                  g dt         j                  ft         j
                  g dt         j                  ft         j                  g dt         j                  ft         j                  g dt         j                  ft         j                  g dt         j                  ft        g dt         j                  ft         j                  g dt         j                  ft         j                  g dt         j                   ft         j"                  g d	t         j$                  ft         j&                  g d
t         j&                  fi} | S )N)__add____radd____iadd__)__sub____rsub____isub__)__mul____rmul____imul__)__truediv____rtruediv____itruediv__)__floordiv____rfloordiv____ifloordiv__)__mod____rmod____imod__)__pow____rpow____ipow__)
__lshift____rlshift____ilshift__)
__rshift____rrshift____irshift__)__xor____rxor____ixor__)r   r   r  r  r  r   r  r  r  r  r  r  r  r   r  r  r  r  r  r
  r'  s    ru   _binopszBuiltinVariable._binops  s     LL>NLL>NLL>N?!! B""  LL>N5x}}ELL>NOO<   OO<   LL>M/U
> 
rw   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d	d
t&        dt        dt        fd}
dd	d
t&        dt        dt        fd}t(        t(        f|ft(        t*        f|ft*        t(        f|ft*        t*        f|
ft*        t,        f|
ft,        t*        fd ft.        t&        t,        t0        ffd ft&        t&        fd fg}| t2        j4                     j7                  |       dd	d
t&        dt        dt"        fd}t.        t        f|ft*        t*        f|
ft*        t,        f|
fg}| t2        j8                     j7                  |       dd	dt        dt        dt        fd}t.        t,        f|ft*        t,        f|ft,        t.        f|ft,        t*        f|fg}| t2        j:                     j7                  |       dt         dt"        f   dt<        t>        t>        t@        t@        f   tB        f      ffd }tE        jF                         D ]   }tI        |      sJ || vsJ  ||      | |<   " | S )!Nr8   )BaseUserFunctionVariableNNModuleVariable)supported_const_comparison_ops)BaseTorchVariable)rY   )forward_namereverse_namer   r[   abrO  rP  rh   c                p    t        |      r|j                  | ||gi       S |j                  | ||gi       S rq   )r   call_method)r   rQ  rR  rO  rP  rY   s        ru   user_defined_handlerz=BuiltinVariable._binop_handlers.<locals>.user_defined_handler;  s>    , a!45==\A3CC==\A3CCrw   )rO  c                ,    |j                  | ||gi       S rq   rT  )r   rQ  rR  rO  s       ru   user_defined_inplace_handlerzEBuiltinVariable._binop_handlers.<locals>.user_defined_inplace_handler]  s     }}RsB??rw   r   r   .c          
      p    ddl m}  ||  | j                  j                  d|gt	        ||gi              S Nr8   wrap_fx_proxycall_function)builderr]  outputcreate_proxyr2   )r   rQ  rR  r   r]  s        ru   dynamic_handlerz8BuiltinVariable._binop_handlers.<locals>.dynamic_handlern  sC     3$*BII**'.?A.K rw   c                 R    t        g |j                  |j                  |             S rq   )rL   itemsunpack_var_sequencer   rQ  rR  s      ru   tuple_add_handlerz:BuiltinVariable._binop_handlers.<locals>.tuple_add_handler  s)     !!G177!GQ-B-B2-F!GHHrw   c                 R    t        g |j                  |j                  |             S rq   )rJ   rd  re  rf  s      ru   size_add_handlerz9BuiltinVariable._binop_handlers.<locals>.size_add_handler  s)       F!'' FA,A,A",E FGGrw   c                 R    t        g |j                  |       |j                        S rq   )rL   re  rd  rf  s      ru   r   z1BuiltinVariable._binop_handlers.<locals>.<lambda>  s/    ..r2" rw   c                 f    t        g |j                  |j                  |       t                     S Nmutation_type)rH   rd  re  r;   rf  s      ru   r   z1BuiltinVariable._binop_handlers.<locals>.<lambda>  s-    :agg: 5 5b 9:"2"4" rw   c                 T     t        |      g |j                  |j                        S rq   )r   rd  rf  s      ru   r   z1BuiltinVariable._binop_handlers.<locals>.<lambda>  s.    a" rw   c                     |j                         s|j                  |       sy |j                  |       }| j                  j                  j                  |       |j                  j                  |       |S rq   )is_immutablehas_unpack_var_sequencere  r`  side_effectsmutationrd  extend)r   rQ  rR  seqs       ru   list_iadd_handlerz:BuiltinVariable._binop_handlers.<locals>.list_iadd_handler  s[     ~~q'@'@'D''+CII""++A.GGNN3Hrw   lstconstc                 \   t        |t              s|j                         r||}}	 t        |t              sJ |j                  |j                  |j                         z  t                     S # t        $ r4}t        t        |      | t        |j                               Y d }~y d }~ww xY w)N)rd  rn  rn   )r   rF   is_python_constant	__class__rd  r   r;   MemoryErrorr   r   listrn   )r   rx  ry  excs       ru   expand_list_likez9BuiltinVariable._binop_handlers.<locals>.expand_list_like  s     c#349O9O9Q"CU!#'7888}}))e&>&>&@@"2"4 %    (Ichh s   AA. .	B+7*B&&B+r   c           	      J   
 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       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   r[   rQ  rR  rh   c                     	 t        j                  |  |j                  |j                              S # t        $ r4}t	        t        |      | t        |j                               Y d }~y d }~ww xY w)Nr{  )r<   r   r   	TypeErrorr   r   r  rn   )r   rQ  rR  r  r   s       ru   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    | j                  t        j                  | t                 ||gi       S rq   )inline_user_function_returnr<   r   polyfill_fn_mapping)r   rQ  rR  r   s      ru   handlerzPBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.handlerE  s8     99'--b2Eb2IJQPQFTV rw   is_c                 0    t        j                  |       S rq   )r<   r   )r   rQ  rR  none_results      ru   neverzNBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.neverW  s     +00[AArw   leftrightc                     ddl m}  |||      }|y |j                         }t        j                  | j
                  dk(  r|      S |       S )Nr8   )vt_identity_comparer  )object_protocolr  r   r<   r   rx   )r   r  r  r  resultis_samer   s         ru   	handle_iszRBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.handle_is  s]    
 E0u=F~#$779G*00r{{e';G EL rw   )r<   r=   r  r   ru  rS   _comparison_with_symnodeappendr  rx   
startswithr   rT   rF   r?   _comparison_with_tensor)r   r  r  op_varr  r  obj_op_nonenone_op_objtypes_that_are_never_noner  r  rN  rJ  rL  rY   rM  s   `         @ru   create_cmp_op_handlersz?BuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers  s   
+
0?
DS
 
( $%568HIJ  ((
 '(89;KL ), -o>";;
 -o>";;	/4CHW$ A7KL(*:;=MNOF3::<<AWAWB !40B/B4CBHWB$B
 $# ##$$',%%	-)  78HI'
 ./HI'	 ), ,_="::
 -n="::
 -o>";;
 -o>";;*/) + %t+	 A9MNMrw   )%	functionsrJ  	nn_modulerL  r  rM  r   rN  user_definedrY   r   rH  rd  r<   r}   r  r   r	   rS   rF   rJ   rL   r=   rH   rG   r   r   ru  r  r   r  tuple_TrackersType_HandlerCallbackrR   r  r   )op_handlersr   magic_method_namesin_place_oprO  rP  inplace_namerU  rX  rb  rg  ri  list_like_addition_handlersrw  list_like_iadd_handlersr  list_like_expansion_handlersr  rN  rJ  rL  rY   rM  s                     @@@@@ru   _binop_handlerszBuiltinVariable._binop_handlers  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	~	I'	I,<	IAP	I	I
	H'	H,<	HAP	H	H$ |, 
 }- 
 - 
 .!
  01!
 "=1 !%'79MN	 "#34W4
 	$z 	HLL!(()DE
	'
	,<
	AP
	
	 /!
 .!
  01!.
 	HMM"))*AB	'	.=	FU		0 ,-/?@-.0@A-/?@.0@A	
 	% 	HLL!(()EFH	c"H	%m]:;=MMNOH	 H	T +113 	9BB<<[(((4R8KO	9
 rw   r   a_typeb_typeNc                     t         j                         j                  |       }|y g }|D ]3  \  \  }}}t        ||      st        ||      s#|j	                  |       5 |S rq   )r   r  get
issubclassr  )r   r  r  handlersmatchestype1type2r  s           ru   _find_binop_handlerz#BuiltinVariable._find_binop_handler  si     #22488<'/ 	(#NUEG&%(Z-Fw'	( rw   c                 :    | j                   | j                         v S rq   )r   r(  r   s    ru   can_insert_in_graphz#BuiltinVariable.can_insert_in_graph  s    ww$22444rw   MUST_USE_SPECIALIZEDro   c                 d    || j                   vsJ d|d       t        |   di | || _        y )Nz!Use the specialized VT class for z9, not BuiltinVariable. E.g. DictBuiltinVariable for dict.rr   )r  super__init__r   )rs   r   ro   r}  s      ru   r  zBuiltinVariable.__init__  sH    222 	
/v 61 2	
2 	"6"rw   c                     | j                   d}n| j                   j                  }| j                  j                   d| dS )NNone())r   rx   r}  )rs   r   s     ru   __repr__zBuiltinVariable.__repr__  s=    77?D77##D..))*!D633rw   c                     | j                   S rq   rY  r   s    ru   r   z"BuiltinVariable.as_python_constant      wwrw   c                     | j                   S rq   rY  r   s    ru   get_real_python_backed_valuez,BuiltinVariable.get_real_python_backed_value  r  rw   c                     t         t        j                   t        t        j                  t        t        j
                  i}| j                  |v r|| j                     S t        | !         S rq   )	r   r   r   int64r   float64r   r  as_proxy)rs   DTYPEr}  s     ru   r  zBuiltinVariable.as_proxy  sO    %**5==

 77e>!w!!rw   c                     | j                   j                  }| j                   j                  dk(  sJ ||j                  j                  vsJ d       |j                  |j                  |d             y )Nbuiltinsr   Tr   )r   rx   ry   r   r   r   r   r   s      ru   r   zBuiltinVariable.reconstruct  se    wwww!!Z///7::///B1BB/g8848HIrw   rn   c                     t        ||      S rq   )r$   rs   rn   ro   s      ru   constant_argszBuiltinVariable.constant_args  s    "400rw   c                 x    d}|D ]2  }t        |t        j                        r y|xs |j                         }4 |S NF)r   r   r   	is_tensor)rs   rn   
any_tensorargs       ru   tensor_argszBuiltinVariable.tensor_args  sA    
 	7C#y889#6s}}J	7 rw   	arg_typesc                     d}|D ]<  }t        |t        j                        r y|xs t        |t        j                        }> |S r  )r  r   r   rT   )rs   r  r  arg_types       ru   tensor_args_typez BuiltinVariable.tensor_args_type  sJ    
! 	VH(I$=$=>#Uz(I<T<T'UJ	V rw   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     ru   r   zBBuiltinVariable.python_and_tensor_constant_only.<locals>.<genexpr>  s0      
 -.HH,@qxx(eK
s   -/)	itertoolschainr  r  r  r   r  )rs   rn   ro   r  non_tensor_argsis         ru   python_and_tensor_constant_onlyz/BuiltinVariable.python_and_tensor_constant_only  s     v}}7 	*A{{}""1%&&q)		*
  
 
 
 3 !d  /2	3rw   c                     | D cg c]  }|j                          c}|j                         D ci c]  \  }}||j                          c}}fS c c}w c c}}w rq   )r   rd  )rn   ro   r   kvs        ru   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 rq   )r  r&   r  s      ru   has_constant_handlerz$BuiltinVariable.has_constant_handler  s'     --/ 
4Q&5
 	
rw   
has_kwargsr[   c           	      J   	
 ddl m t               g t        fdD              r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&                         t+              dk(  rmskt        j,                   g 

snRt+        
      dk(  r
\  	j)                  	fd       n+dddt.        dt.        d	t.        f
fd}j)                  |       t1        d j2                   d       rDdddt4        t           dt        t        t        f   d	t        d z  f fd}j)                  |       j7                         rt9        d D              r4s2dddt4        t           dt        t        t        f   d	t        d z  f fd}n1dddt4        t           dt        t        t        f   d	t        d z  f fd}j)                  |       dt4        t           d	d f fdt+              dk(  rfdS t+              dk(  r8\  dddt4        t           dt        t        t        f   d	t        d z  ffd}|S dddt4        t           dt        t        t        f   d	t        d z  ffd}|S )Nr8   )LazyVariableTrackerc              3   6   K   | ]  }t        |        y wrq   )r  )r   r  r  s     ru   r   z0BuiltinVariable._make_handler.<locals>.<genexpr>"  s     Eaz!01Es   c                 l    j                  | |D cg c]  }|j                          c}|      S c c}w rq   )r^  realize)r   rn   ro   r  objs       ru   r   z/BuiltinVariable._make_handler.<locals>.<lambda>#  s-    C,=,=$/QQYY[/- /s   1
r   r[   rn   ro   rh   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rq   )r|  r   r   r}   r   s     ru   r   zWBuiltinVariable._make_handler.<locals>.create_exception_class_object.<locals>.<genexpr>4  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)AssertionErrorr   r   r}   r   SUPPORTABLEr   ExceptionVariable)r   rn   ro   r   s      ru   create_exception_class_objectzDBuiltinVariable._make_handler.<locals>.create_exception_class_object/  s^    
 ' 4!4 1 " @ #D	$W> 1 = =>	 !222tVDDrw   r   r   c                      | g| S rq   rr   )r   rn   _binop_handlers      ru   r   z/BuiltinVariable._make_handler.<locals>.<lambda>V  s    M"4Lt4L rw   r  c                 2    D ]  } || g| }|s|c S  y rq   rr   )r   rn   r  r   rvbinop_handlerss        ru   call_binop_handlersz:BuiltinVariable._make_handler.<locals>.call_binop_handlersY  s.     - &]T]#%I&  rw   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  )r  inspect	signaturebindr  logwarningr   rx   r   	DIFFICULTr   remove_from_stats)	r   rn   ro   er  r  r   r  self_handlers	         ru   call_self_handlerz8BuiltinVariable._make_handler.<locals>.call_self_handlerh  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rq   )r  r=   r   s     ru   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)Nr{  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  rn   r9   r   r   
DYNAMO_BUGr<   r   )r   rn   ro   r   resr  r   s         ru   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  r{  )r&   r   rd  r9   r   r   r  r  r   r   r  rn   r<   r   )	r   rn   ro   r   r  r  r  r  r   s	           ru   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   rx   )rn   r  real_arg_typesr  r   r  s      ru   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 rq   rr   )r   rn   ro   r  s      ru   r   z/BuiltinVariable._make_handler.<locals>.<lambda>  s    ,>t,D rw   c                 4     | ||      }|r|S  |       |S rq   rr   )r   rn   ro   r  r  r  s       ru   builtin_dispatchz7BuiltinVariable._make_handler.<locals>.builtin_dispatch  s(    
 Rv.I"4(	rw   c                 J    d }D ]  } || ||      }|s|c S   |       |S rq   rr   )r   rn   ro   r  r   r  r  s        ru   r"  z7BuiltinVariable._make_handler.<locals>.builtin_dispatch  s>    
 " "BBf-B!	" #4(	rw   )lazyr  r   r   r  isclassr  BaseExceptionGeneratorExitr  r<   r|   r}   r  r   r   r   rT   r  _handle_insert_op_in_graphr  r   r  r	   r   rx   r   r  r   )r   r  r  r  r   r  r  r"  r  r  r  r  r  r  r  r  s   ```     @@@@@@@@ru   _make_handlerzBuiltinVariable._make_handler  sM    	.b!+-E9EE  ??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 / 7: ?B    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	Xo%> 	4 	  x=ADD]a!JW	+	/	 S/12	 !4'		4  +/ S/12 !4'	  rw   r   c                     t        |      dk(  r| j                  |      S t        |      dk(  sJ 	 |d   j                  |d      S # t        $ r t	        t
        |       Y y w xY w)Nr   r8   r  )r   _call_frame_locals_snapshotr   r   r   r  rs   r   rn   s      ru   	call_varszBuiltinVariable.call_vars  sc    t9>33B774yA~~	47&&r:66% 	4$Y3	4s   A A"!A"c                 `    t        |      dk7  rt        t        |       | j                  |      S r   )r   r   r  r+  r,  s      ru   call_localszBuiltinVariable.call_locals  s*     t9>$Y3//33rw   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 rl  )setf_codeco_varnamescell_and_freevarssymbolic_localsrd  r`  rs  	load_cellr   __instancecheck__rM   r   r   DeletedVariabler=   creater?   r|   r;   )r   frame_local_namesr4  frame_localsr   r   s         ru   r+  z+BuiltinVariable._call_frame_locals_snapshot  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		@ !*,
 	
rw   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 |t4        jP                  u rDtS        |      dk(  r6|d   j                         r#|d   jU                  |dtW        |dd        |      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!tW        |      }|d   ji                         |d<    |||      S # tj        $ r9 tm        dd|  d| d| d| j                   dg tn        jp                         Y y w xY w)Nr8   )r]  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rq   )r   rT   r   r  s     ru   r   z=BuiltinVariable._handle_insert_op_in_graph.<locals>.<genexpr>z  s       B03S	^+Bs   r^  __eq__c              3   <   K   | ]  }t        |t                y wrq   r   rQ   rE  s     ru   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rq   r   r   rU   need_unwrapr   s     ru   r   z=BuiltinVariable._handle_insert_op_in_graph.<locals>.<genexpr>  ,      "!!Y%J%JK MM"   02)	raw_valuerK  c              3   <   K   | ]  }t        |t                y wrq   r   rS   r   s     ru   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  )9r_  r]  r=  r  r  r?  torch_functionr@  rA  exportr   r  r   rg   rf   r9  r  bytecode_transformationrB  r  rC  rx   IN_PLACE_DESUGARING_MAPr   r   r=   r   r   rS   r   selectr<   r   r%   r   r`  ra  r1   r2   NumpyNdarrayVariabler&  r   rT  r  rQ   r'   r  r  r  rU   r   r  r   NotImplementedErrorr   r   r  )rs   r   rn   ro   r]  r=  r?  r@  rA  rl   tmpfn_varr   rB  rC  proxy_args_kwargsrN  rK  s                       ru   r(  z*BuiltinVariable._handle_insert_op_in_graph*  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c	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X[[ SY!^Q8I8I8K Aw**2xd12hPP*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;   9O
 ?C<O
 <AO
 AO
 A-O
 (O
 1AO
 
?PPcall_function_handler_cachec           	         |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                  |<   }|J  ||||      S c c}}w c c}w )Nc              3   2   K   | ]  }t        |        y wrq   r   r   s     ru   r   z0BuiltinVariable.call_function.<locals>.<genexpr>       4!d1g4   Tc              3   2   K   | ]  }t        |        y wrq   r`  r   s     ru   r   z0BuiltinVariable.call_function.<locals>.<genexpr>  ra  rb  )rd  r  r   r]  r  r)  r   r   )	rs   r   rn   ro   r  r  keyr  r   s	            ru   r^  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 """r4(( A 1s   CC"
r   c                 n
   | j                   t        u r|dk(  rt        |      dk(  sJ t        |      dk(  sJ |\  }}}|j                         }t	        |t
              rH|j                  j                  j                  |      r#|j                         r|j                  |||      S |dk(  r| j                   t        u rKt        |      dk(  r=t        |      dk(  sJ |j                  j                  j                  | |d   |dd        S | j                   t        u rt        |      dk(  r|d   j                  |      r|st	        |d   t              rH|d   j                   t        u r3|d   j                  |      }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        u rt/        | j                   |      }|tH        v rt	        |d   t         jJ                        r5|d   jL                  J |d   jL                  jO                  |||dd  |      S t	        |d   t         jP                        r|d   jO                  |||dd  |      S | j                   tR        u rUt/        | j                   |      }|tT        v r7t	        |d   t         jV                        r|d   jO                  |||dd  |      S | j                   tX        u rYt        |      dk\  rKt/        | j                   |      }|tZ        v r-t	        |d   tB              r|d   jO                  |||dd  |      S | j                   t\        u r\t        |      dk\  rNt	        |d   tB              r;t5        j6                  | t/        t\        |      |d   j3                                     S |dk(  r"t        |      dk(  r|sddl/m0}  |||d         S tb        |   ||||      S c c}}
w # t8        $ r5}t;        t=        |      |t?        |j@                               Y d }~d }~ww xY w)N__setattr__rb   r   r\   r8   r   rm  rr   c              3   <   K   | ]  }|j                           y wrq   r|  r   rQ  s     ru   r   z.BuiltinVariable.call_method.<locals>.<genexpr>	  s     8a1'')8r  c              3   <   K   | ]  }|j                           y wrq   rh  r   r  s     ru   r   z.BuiltinVariable.call_method.<locals>.<genexpr>	  s       A+,$$&Ar  c              3   <   K   | ]  }|j                           y wrq   r   ri  s     ru   r   z.BuiltinVariable.call_method.<locals>.<genexpr>  s     ?Q!..0?r  r{  r  __len__generic_len)2r   r   r   r  r   rX   r`  rs  is_attribute_mutationr|  method_setattr_standardtrack_new_user_defined_objectr  has_force_unpack_var_sequencer   force_unpack_var_sequencer   rL   r;   r`   r  r   r  r   rd  r   r<   r   r  r   r   r  rn   r=   r9  r1  r4   UserDefinedSetVariable_base_vtrT  rP   	frozensetr+   rN   r}   r6   r   r  rp  r  )rs   r   r   rn   ro   r  name_varval	init_argsr   r  r  r  r  resolved_fnrp  r}  s                   ru   rT  zBuiltinVariable.call_method  s    77f!6t9>!>v;!###!%C3++-C3 9:II**@@E//1222xEE9ww& SY!^6{a'''yy--KK$q'48 
 5 ING99"=d1g7DGJJ%<O $Q A A" EI$22!1A1C  yy--KKGH  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::77c>!$''40Kk)d1gy'G'GH7++7777++77D$qr(FSSQ)>)>?7..r4ab6JJ77i!$''40K//d1gy'B'BC7..r4ab6JJ77c>c$i1n!$''40K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 5r47++w"2tT6::e Q ! ,Q!!&&\ s*   4S6 S0,S6 0S6 6	T4?*T//T4r  c                      ddl m}  |||      S )Nr8   )generic_int)r  r~  )rs   r   r  r~  s       ru   call_intzBuiltinVariable.call_intD  s     	12s##rw   c                      ddl m}  |||      S )Nr8   )generic_float)r  r  )rs   r   r  r  s       ru   
call_floatzBuiltinVariable.call_floatK  s     	3R%%rw   c                      ddl m}  |||      S )Nr8   )generic_bool)r  r  )rs   r   r  r  s       ru   	call_boolzBuiltinVariable.call_boolR  s     	2B$$rw   c                    t        |t        j                  t        j                  f      r	 t	        d |j
                  D              }t        |      dk(  r|j                  j                   d}nHt        |      dk(  r |j                  j                   d|d   d}n|j                  j                   |}t        j                  ||      S t        |t        j                        r|j                  j                  }t        |j                        j                  t         j                  u r)t        j                  ||      }|j#                  |g i       S t%        |      r't'        dd	t        |j                         d
dg       n6|j(                  }t        j                  ||      }|j#                  ||gi       S t        |t        j*                        rXt        |j                        j                  t        j                  u r)t        j                  |t-        |j                              S t        |t.        t0        t2        t4        t6        f      r$t        j                  ||j9                               S y# t        $ r Y yw xY w)z&Handle repr() on user defined objects.c              3   <   K   | ]  }|j                           y wrq   rm  ri  s     ru   r   z,BuiltinVariable.call_repr.<locals>.<genexpr>c  s     "La1#7#7#9"Lr  Nr   z()r8   r  r  z4Attempted to call repr() method implemented in C/C++ z6 has a C/C++ based repr method. This is not supported.zWrite the repr method in Pythonr  )r   r   r  "UserDefinedExceptionObjectVariabler  rn   rW  r   exc_typerx   r<   r   rX   r   r  r   r   r^  r/   r   __func__UserDefinedClassVariabler   rI   r?   r@   rO   rC   
debug_repr)rs   r   r  
const_argsr   repr_methodfn_vtbound_methods           ru   	call_reprzBuiltinVariable.call_reprZ  s    (()*V*VW
""L388"LL
 :!#<<0014ZA%<<001:a=2C1E<<001*@"((U33c9>>?)),,KCII''6??:'--b+>**2r2660=R#'		?"33i j<=	  +33'--b,?**2ub99c9==>CII''4==8&,,RciiAA!#' 	
 #((S^^-=>>S ' s   I: :	JJ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   r  r8   __str__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  r  r   rn   r<   r   r   r}   r^  rL   r  UserFunctionVariabler   rX   r   r   r  r  r   r   
USER_ERRORr   r   AttributeErrorr/   r  r  r  r  )rs   r   r  	tuple_var
str_methodr  user_func_variables          ru   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                 "   t        |      dk(  r:|d   j                  |      r&|d   j                  |      }| j                  ||      S t        |      dk(  r| j	                  ||d   |d         S t        |      dkD  r| j                  ||      S y )Nr8   r   r   )r   rt  ru  _call_min_max_seq_call_min_max_binary)rs   r   rn   rd  s       ru   _call_min_maxzBuiltinVariable._call_min_max  s     t9>d1gCCBGG55b9E))"e44Y!^,,Ra$q'BBY]))"d33rw   rd  c                     t        |      dkD  sJ t        |      dk(  r|d   S t        j                  t        j                  | j                  |      |      S Nr   r8   )r   	functoolsreducepartialr  )rs   r   rd  s      ru   r  z!BuiltinVariable._call_min_max_seq  sO     5zA~~u:?8O	 1 1$2K2KR PRWXXrw   rQ  rR  c                 l   ||y | j                  ||      r%|j                         s||}}|j                         sJ 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                  t.        u rd|ind|i}|j                  ||g|      }nt        |t        j$                        rIdd l}t.        |j0                  t2        |j4                  i| j                     }	t	        j(                  |	      }nLt.        t        j0                  t2        t        j4                  i| j                     }
t	        j
                  |
      }|j                  |||gi       }t7        d ||fD              rt9        d	 ||fD              rt        j                  j;                  |      S |j#                         r|j=                         }n|j>                  }| j                  t.        u rt/        |j>                  |      }nt3        |j>                  |      }t9        d
 ||fD              }t        j@                  j;                  |||      S |S t        |t              st        |t              rs| j                  t.        u rt        jB                  nt        jD                  } |j                  j                  d|gt!        ||gi        }t        jF                  ||d       S t        |tH              rTt        |tH              rD| j                  |j=                         |j=                               }tK        jL                  ||      S y )Nr8   r=  r^  )r   rZ  r   r   r   c              3   p   K   | ].  }t        |t        j                  t        j                  f       0 y wrq   )r   r   rU   r=   )r   r  s     ru   r   z7BuiltinVariable._call_min_max_binary.<locals>.<genexpr>  s9      	  !==!22	s   46c              3   <   K   | ]  }t        |t                y wrq   rH  )r   rz  s     ru   r   z7BuiltinVariable._call_min_max_binary.<locals>.<genexpr>)  s     KSz#'78Kr  c              3   h   K   | ]*  }t        |t        j                        r|j                   , y wrq   rJ  r   s     ru   r   z7BuiltinVariable._call_min_max_binary.<locals>.<genexpr>6  rL  rM  )'r  r  r   rQ   r   TorchInGraphFunctionVariabler   r  r^  rS   r_  r=  r   r`  ra  r   r2   r|  rV  numpyNumpyVariableclipclampr   maximumr   minimumr   r   from_tensor_variabler   rN  rU   sym_maxsym_minr9  r=   r<   r   )rs   r   rQ  rR  r=  npr   ro   r  np_fntorch_fnraw_braw_resrK  py_fnrZ  r   s                    ru   r  z$BuiltinVariable._call_min_max_binary  sz    9	 Aq!;;=!1;;= = !-.::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rw   c                     ddl m} |j                  |t              j	                  ||t        j                  |d      gi       }|j	                  |g i       S )Nr8   r>  __abs__r_  r?  r9  r   r^  r<   r   )rs   r   r  r?  
abs_methods        ru   call_abszBuiltinVariable.call_absT  V     	/ '--b':HHo++B	:;R

 ''B33rw   c                     ddl m} |j                  |t              j	                  ||t        j                  |d      gi       }|j	                  |g i       S )Nr8   r>  __pos__r  )rs   r   r  r?  
pos_methods        ru   call_poszBuiltinVariable.call_pos_  r  rw   c                 :    t        |      }|j                  |      S rq   )r5   nb_index_implrs   r   r  s      ru   
call_indexzBuiltinVariable.call_indexj  s    
 !%  $$rw   c                     ddl m} |j                  |t              j	                  ||t        j                  |d      gi       }|j	                  |||      S )Nr8   r>  	__round__r  )rs   r   r  rn   ro   r?  round_methods          ru   
call_roundzBuiltinVariable.call_roundr  sV     	/ )//G<JJo++B<=r
 ))"dF;;rw   c                     t        |i       rt        j                  |      S  | j                  | r)t	        fd|D              }t        j                  |      S y )Nc              3   \   K   | ]#  }t        j                  t        |             % y wrq   )r<   r   r-   )r   r  r   s     ru   r   z-BuiltinVariable.call_range.<locals>.<genexpr>  s#     V#..r<3DEVs   ),)r&   r   rI   _dynamic_argsr  r,  s    ` ru   
call_rangezBuiltinVariable.call_range  sU     )r2**400T&VQUVVD**400rw   c                 j    t        d |D              xs  t        d |j                         D              S )Nc              3   <   K   | ]  }t        |t                y wrq   rP  r   s     ru   r   z0BuiltinVariable._dynamic_args.<locals>.<genexpr>  s     @a:a1@r  c              3   <   K   | ]  }t        |t                y wrq   rP  r   s     ru   r   z0BuiltinVariable._dynamic_args.<locals>.<genexpr>  s      H
/0Jq/*H
r  )r   r  r  s      ru   r  zBuiltinVariable._dynamic_args  s7    @4@@ 
C H
4:MMOH
 E
 	
rw   c                 .    t        j                  ||      S rq   )r   SliceVariabler,  s      ru   
call_slicezBuiltinVariable.call_slice  s     &&tR00rw   c           
          ddl m}  || |j                  j                  d| j                  gt        ||             S r[  )r_  r]  r`  ra  r   r2   )rs   r   rn   ro   r]  s        ru   
_dyn_proxyzBuiltinVariable._dyn_proxy  sC     	+"BII""+<T6+J
 	
rw   r  c                 T   t        |t        j                        rJ  | j                  |i |r | j                  |g|i |S t        j
                  j                  | j                        }| |g t                     S |j                  |      r|j                  r^t        |j                        sHt        |t              r4t        |j                  j                  t        j                                nt#        |dd      r^t        |t$        t        j&                  t        j(                  f      r/|j*                  j,                  j/                  |j                         t        |t        j0                        r3t        |j                  j                  t        j2                               nLt        |t        j4                        s2t        |j                  j                  t        j6                                |t9        |j;                  |            t                     S y )Nrm  r   F)r   r   IteratorVariabler  r  rF   cls_forr   r;   rr  r   r!   rK   r   r   r   TUPLE_ITERATOR_LENr   r?   OrderedSetVariableDictKeySetVariabler`  guard_on_key_orderr   MappingProxyVariableMAPPING_KEYS_CHECKUnspecializedNNModuleVariableSEQUENCE_LENGTHr  re  rs   r   r  rn   ro   r   s         ru   _call_iter_tuple_listz%BuiltinVariable._call_iter_tuple_list  s    c9#=#=>>>4t.v."4??27777((009;.0  ((,zz"4SZZ"@c#89!

--l.M.MN sHe4-%88%88: 		4488D!#y'E'EF &JJ11,2Q2QR (Y-T-TU &JJ11,2N2NO S,,R01.0  rw   c                     t         j                  j                  | j                        } |t	        |j                  |            t                     S rl  )r   rF   r  r   r  ru  r;   r  s         ru   _call_iter_tuple_generatorz*BuiltinVariable._call_iter_tuple_generator  sD     ((009..r23*,
 	
rw   c                    t        |t        j                        rSt        j                  j	                  | j
                        } |t        |j                  |            t                     S t        |t        j                        s!t        |t              r(|j                  |      r | j                  ||g|i |S  | j                  ||g|i |S rl  )r   r   r  rF   r  r   r  ru  r;   LocalGeneratorObjectVariablerX   rt  r  r  r  s         ru   _call_tuple_listz BuiltinVariable._call_tuple_list  s     c9556,,44TWW=CS22267.0  YCCDs5611"524222sLTLVLL-4--b#GGGGrw   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&        f      rt        j                  j                  d      S y )Nr8   )rJ  FunctoolsPartialVariablerK  TF)r  rJ  r  r  rL  r   r   r  r=   r9  rY   r<   r   r   r   rS   rT   rH   rL   rG   )rs   r   r  rJ  r  rL  s         ru   call_callablezBuiltinVariable.call_callable  s     	R/22(( 	
 --44T::01"((Xcii-@AA $

 --44U;;rw   r  c                 V    t        |      dk(  r|d   S t        dd| d| ddg       y )	Nr   r8   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   )rs   r  rn   ro   s       ru   	call_castzBuiltinVariable.call_cast  s<     t9>7N0vQvh/JHI		
rw   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 rq   )r   r   r  r<   r   dirr   r   r   r|  r   r  s      ru   call_dirzBuiltinVariable.call_dir+  s     c9==>"((S^<<c?+"((S[99!!#"((S1G1G1I-JKKrw   c                    ddl m} |rJ |st        g t                     S t	        |      dk7  r t        t        |dt	        |       dg       |d   }t        |t        j                        r|j                  t                     S |j                  |      r&|j                  |      }t        |t                     S t        |t        j                        rt        |j                  t              rw|j!                  |d      }t        |t        j"                        rK|j%                  |||      }t        |t              r|S |j'                  |t(              j+                  ||      S t        t        |d	g       y )
Nr8   r>  rm  z&set() takes 1 positional argument but  were givenr{  r   __iter__z!failed to construct builtin set())r_  r?  rP   r;   r   r   r  r0   r   clonert  ru  r   rX   r   r   r   UserMethodVariabler  r9  r1  call_set)	rs   r   rn   ro   r?  r  rd  iter_fnouts	            ru   r  zBuiltinVariable.call_set7  sH    	/zr1A1CDDt9>$>s4ykUV
 1g#y,,-99+;+=9>>..r211"5Eu4D4FGGY@@AjIIxG
 oob*5G'9#?#?@44WdFKc;/J(//C8AA"cJJ 56	
rw   c                    |rJ |st        g       S t        |      dk7  r t        t        |dt        |       dg       |d   }t	        |t
        j                         r-t        |j                  D cg c]  }|j                   c}      S |j                  |      r|j                  |      }t        |      S t        t        |dg       y c c}w )Nr8   z,frozenset() takes 1 positional argument but r  r{  r   z'failed to construct builtin frozenset())
rN   r   r   r  r0   r   	set_itemsvtrt  ru  )rs   r   rn   ro   r  r   rd  s          ru   call_frozensetzBuiltinVariable.call_frozenset]  s     z$R((t9>$B3t9+[Y 1g#y223$CMM%Bqadd%BCC..r211"5E$U++ ;<	
	 &Cs   2Cc                    ddl m} |r,t        |      dk(  rd|v st        |ddt        |       d       |j	                  dt        j                  d            }|D cg c]*  }|j                  |t              j                  ||gi       , }}t        j                  ||j                         t                     S c c}w )	Nr8   r>  strictzip1 kwargs (`strict`) kwargsFr   rn  )r_  r?  r   r3   popr=   r9  iterr^  r   ZipVariabler   r;   )rs   r   rn   ro   r?  r   r  	iter_argss           ru   call_zipzBuiltinVariable.call_zipz  s     	/K1$V);#)6{m7+	 H&6&=&=e&DE 
 $$R.<<R#K
	 
 $$,,.*,
 	
	
s   /B=c                 &    ddl m}  |||d         S )Nr8   ro  r   )r  rp  )rs   r   rn   ro   rp  s        ru   call_lenzBuiltinVariable.call_len  s     	12tAw''rw   c                 .    ddl m}  |||d   |d         S )Nr8   )
vt_getitemr   )r  r  )rs   r   rn   ro   r  s        ru   call_getitemzBuiltinVariable.call_getitem  s     	0"d1gtAw//rw   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}n_t        |t         j4                        r|j6                  }n8t        |t8              rt;        d |D              r|}nt=        t>        |dg       	 tA              }t        j                  ||      S # t        $ r- t        dd d| dd g t        j                         Y Vw 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_typerh   c                     dt         dt        ffdt        |      t        u rt	        fd|D              S  |      S )Ntyrh   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)r7   r  nodemetar   r   nn	parameter	Parameterr   r  python_typer   )r  example_valdtypesr  s      ru   
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..rw   c              3   .   K   | ]  } |        y wrq   rr   )r   r  r   s     ru   r   zNBuiltinVariable.call_isinstance.<locals>._tensor_isinstance.<locals>.<genexpr>  s     D"z"~Ds   )r	   r   r   r  r   )r  r  r   r  s     @ru   _tensor_isinstancez;BuiltinVariable.call_isinstance.<locals>._tensor_isinstance  sA    /3 /4 /$ $-DDDD%k22rw   z<isinstance() called on user defined object with C extensionszeUser-defined object with C extensions can have torch.Tensor attributes; intentionally graph breaking.r7  c              3   l   K   | ],  }t        |t              xs t        t        |d d             . yw)r7  N)r   r   r   r   )r   tps     ru   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 unionr{  )!r  rW  r   r   r  r   r   r   rT   r   r<   r	   r   r   rX   r   rm   MemberDescriptorTyper  r}  r  r7  !UserDefinedExceptionClassVariabler   r   r   	UnionType__args__r  r   r   r  r  )	rs   r   r  r  r  isinstance_typer"  isinstance_type_tuplerz  s	     `      ru   call_isinstancezBuiltinVariable.call_isinstance  sm   	(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$3$<$<!/C 8
%8
 5
 %4!$U
	4 X'<=C $$R--A # 	P%cU"-@,AC[\_[`a5)445	 	|  	433C	4s#   H4 I- 42I*)I*-I=<I=left_tyright_tyc           	          	 |j                         }|j                         }t        j                  |t                    S # t        $ r* t        dd| d| dddgt        j                         Y Rw xY w)z,Checks if first arg is subclass of right argz(issubclass() with non-constant argumentszissubclass(r  r  z7issubclass() with non-constant arguments not supported.z#Make sure your arguments are types.r  )r   rW  r   r   r  r<   r   r  )rs   r   r,  r-  
left_ty_pyright_ty_pys         ru   call_issubclasszBuiltinVariable.call_issubclass	  s    	 335J"557K $$RJ)LMM # 		B%gYb
!<U9&11			s    A 0A54A5c                 .    t        j                  ||      S rq   )r   SuperVariablers   r   rQ  rR  s       ru   
call_superzBuiltinVariable.call_super-	  s     &&q!,,rw   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   r8   )	next_variabler   r   r   r   r   rF   r
  rd  )rs   r   rn   r  exs        ru   	call_nextzBuiltinVariable.call_next2	  s     1g
	$$R((( 	4yA~Aw 	#y99:$$&yy|#		s%    B	B8A>7B=A>>Br   c                 h    |j                         r"|j                         }|j                  ||      S y rq   )r|  r   r   )rs   r   r  r   r   s        ru   call_hasattrzBuiltinVariable.call_hasattrB	  s4     ""$**,D''D11rw   seqsc                    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]&  }|j                  |      r|j                  |      n|( }}t        j                  |||j                         t               	      S c c}w )
NFra   r8   r   mapr  r  z0 kwargsr  )r=   r9  sysversion_infor   r3   r  rr  re  r   MapVariabler   r;   )rs   r   r   r<  ro   r   rv  seq_lists           ru   call_mapzBuiltinVariable.call_mapJ	  s    "((/7*Fq(X-?'-v;-w/	  H.>.E.Ee.LM#6{m7+	 
 ,/+F+Fr+JC##B'PSS
 
 $$,,.*,	
 	
	
s   +C7rv  c                     |j                  |      r|j                  |      n|}t        j                  ||t	                     S rl  )rr  re  r   FilterVariabler;   )rs   r   r   rv  seq_or_lists        ru   call_filterzBuiltinVariable.call_filtero	  sH     ,/+F+Fr+JC##B'PS 	 ''*,
 	
rw   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)Nrx   r   )r   r   r<   r   r   rx   r   r   r  r   r   r   r   r   )rs   r   r   r   r   r   s         ru   r   zBuiltinVariable.var_getattr{	  s    >DKK!>:"((TWW-=-=vFF77f=. E?&,,R??twwd+(($d.>T
QW
 	
DHQW
 	
 " =(<=s   (C# #C?>C?ry  defaultc                    |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                  ||      r&|j                  j
                  j                  ||      S |=| j                  |||      }|&|j                  dd      sJ |j                         s|S |S |j                   xr t#        |j                   |      }|dv r	 |j                         }t        |t$              r|dk(  rat'        |j(                        D 	
cg c]*  \  }	}
t+        j,                  ||
|xr t/        ||	            , }}	}
t        j0                  ||      S |dk(  r!t+        j,                  ||j2                  |      S |dk(  r t+        j,                  ||j4                        S t        |t        j8                        r|j;                  ||      S t        |t        j<                  t        j>                  t        j@                  t        jB                  t        jD                  t        jF                  f      r!t        |t        jF                        r]tI        |jJ                  jL                  tN        jP                        r/tR        jT                  r|dv rt        dd| d| dd| dg       |j                         r|jW                         jX                  jZ                  d   }t        |t\        j^                        rFta        |      r;|jb                  rtR        jd                  st        dddg tf        jh                         	 |j;                  ||      S t        |t        jn                        r	 tq        |jJ                  |      }t        |t\        jv                  jx                  t\        jv                  jz                  f      r@t\        j|                  j~                  j                  |      rt        jn                  ||      S |t        v r"t        jl                  ||t%        |      |      S y t        |t              r|j                  s||jJ                  j                  vrtq        |jJ                  |      }n|jJ                  j                  |   }tR        j                  r'|j                  j                  |jJ                  ||       t+        j,                  |||      S 	 |j;                  ||      S c c}
}	w # t6        $ r Y ew xY w# tj        $ r  t6        $ r t        jl                  |||      cY S w xY w# tr        $ r tu        tr        |        w xY w# t6        $ r t        jl                  |||      cY S w xY w) Nz)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 mutationTF>   __base__	__bases__	__flags__rT  r   rS  rU  )assertRaisesRegex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 Tensorsr   )Hr|  r   r   r  r`  rs  rq  r   r   r  is_state_mutatedhas_pending_mutationhas_pending_mutation_of_attr	load_attrr;  is_constant_matchr   r   r   	enumeraterT  r<   r   r   rL   rS  rU  rW  rL  r   rT   r=   r@   DistributedVariabler  rX   r  r   r}  unittestTestCaser   enable_trace_unittestr  r  r  r   Tensorr   rR  capture_sparse_computer   SPARSE_TENSORr9   r   r  r   r  r   _opsOpOverloadPacket
OpOverload_dynamotrace_rulesis_aten_op_or_tensor_methodr(   r   is_torchr  replay_record_enabledexec_recorderrecord_module_access)rs   r   r  ry  rI  r   hasattr_varr   r   r  rR  
tuple_argsfake_valmembers                 ru   call_getattrzBuiltinVariable.call_getattr	  s    **,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99))33C>>++BX>K&"44T5AAA"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tF|F  [)||t399+=+== D1++D1++  55ciivN"((VV<<Kr400K& ' l 7  & K 00d6JJK " (<6 ' K 00d6JJKs`   =V= /V7?V= %V= ?$V= W 3W= %X 7V= =	W
	W
*W:9W:=X!X?>X?rz  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) Nrf  r8   r\  requires_gradz!setattr() on Tensor.requires_gradzsetattr(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 attributezVDyanmo 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 dtypezPDyanmo only supports mutating `.data` of tensor to a new one with the same dtyper^  r   rh   c                     | j                   }|dkD  r|dz
  }t        j                  j                  j	                  | f|f       | S r  )_versionr   _C	_autograd_unsafe_set_version_counter)r   versions     ru   _lower_version_count_by_1z?BuiltinVariable.call_setattr.<locals>._lower_version_count_by_1
  s>    "#**"Q;&-kG**FFtgZX rw   r  )rK  rL  rL  zFailed to set tensor attributez6Dyanmo 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@   rX   NestedUserFunctionVariabler  TracebackVariablerT  r`  rs  rq  r|  r   r  r_  r]  r   r   r  r   r   tracked_fakesremovedynamo_disable_gradr   no_gradra  rd  set_r2   r  r  r  r.   
store_attrrL  is_root_tracerFUNDAMENTALrT   r,   r   r  r   r  getattr_staticmodule_typer  Modulerf  convert_to_unspecialized)rs   r   r  ry  rz  r   r]  tf	to_remover  r  assigning_fake_valgetattr_varexisting_fake_attrmod_setattrs                  ru   call_setattrzBuiltinVariable.call_setattr3
  s{    --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&c                 ,    |j                  |d|gi       S )N__delattr__rW  )rs   r   r  ry  s       ru   call_delattrzBuiltinVariable.call_delattr
  s     r=8*bAArw   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  rd  )r  rW  r   r   INVALID_INPUTr}   r   r#   r   r   rX   
cls_sourcer   rd  r`  install_global_by_idr   r    r<   r   )rs   r   r  r   errorr   r   s          ru   	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                  |      r8t        t        |j                  |                  }t	        j
                  |      S y rq   )rr  r  reversedre  r   rL   )rs   r   r  rd  s       ru   call_reversedzBuiltinVariable.call_reversed
  s@     &&r*#"9"9""=>?E**511rw   c                     |j                  |      r^t        |t        j                        sDt        j                  |j                  |      t                     }|j                  |dg |       |S y )Nrm  sort)rt  r   r   rT   rH   ru  r;   rT  )rs   r   r  ro   list_vars        ru   call_sortedzBuiltinVariable.call_sorted  sh     ,,R0)):
 !----b1.0H   VR8Orw   c                    t        |t              r9t        j                  |t        j                  |j                               d       S t        |t              r0|j                  |d      j                  r|j                  |dg i       S y )Nsym_num__neg__)
r   rS   r9  r   r   r  rX   r   r   rT  )rs   r   rQ  s      ru   call_negzBuiltinVariable.call_neg  sv     a)"))qzz|,  q34""2y177==YB77 rw   _format_stringc                 z    |j                         }t        |      }t        j                  j	                  |||      S rq   )r   r}   r   StringFormatVariabler9  )rs   r   r  rn   ro   format_strings         ru   call_formatzBuiltinVariable.call_format(  s7     '99;M*--44]D&QQrw   c                    t        |      dkD  rft        |d   t        j                        rI|d   }|j                  j                  |j                        }t        j                  |t        |            S t        |      dk(  r7|d   j                         r$t        t        |d         }|j                  |      S t        |d   t        j                        r,t        j                  |t        |d   j                               S t        |      dk(  r|d   }t        |t        j"                  t        j$                  f      r|j&                  rt        |t        j"                        r3t)        |j&                  j+                  t,        j.                               n2t)        |j&                  j+                  t,        j0                               |j3                         }|t4        urt        j                  |t        |            S t7        t        |            S t9        dt;        |      d| dgt<        j>                         y )Nr   r8   zid() with unsupported argsz5Dynamo doesn't know how to trace id() call with args zkSupported args are Tensors, and functions/nn.Modules/user-defined objects from outside the compiled region.r  ) r   r   r   rL  r`  get_submodule
module_keyr<   r   idr  r
   rT   call_idr0   r  
fake_valuer  rX   r   r   r   r   CLASS_MATCHID_MATCHr  r:   r>   r   r}   r   r  )rs   r   rn   nn_mod_variabler  tensor_variabler  real_vals           ru   r  zBuiltinVariable.call_id3  s    t9q=ZQ1K1KL"1gO))))/*D*DEC"((RW55Y!^Q 1 1 3">47;O"**2..DGY??@"((RQ0B0B-CDDY!^q'C6677 ::!#y'I'IJ%cjj&;&;L<T<T&UV%cjj&;&;L<Q<Q&RS779H~-&,,RH>>!"S'**4D	STXSYZ8 '22		rw   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  )rs   r   r   s      ru   call_deepcopyzBuiltinVariable.call_deepcopy]  s4     	%$QCq)A/"..		
rw   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)Nr8   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 .r^  )r_  r=  r  r  r   r   r  is_notr  r  r*   r  r  r<   r   r   rx   r   r  r   rT   sizer   broadcast_shapesRuntimeErrorr  r`  ra  r   )
rs   r   r  r  r=  r  r   	is_result
tensor_clsrZ  s
             ru   r  z'BuiltinVariable._comparison_with_tensorj  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 )Nr8   r  z!unsupported SymNode comparison opr  r  r  r  z with SymNode arguments r  r^  r  )r  r  r   r   rx   r   r  r   rS   r=   rT   r<   r   r   r`  ra  r  r9  )rs   r   r  r  r  r   non_symnoderZ  s           ru   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
 %%
 	
rw   c           
      l   t        |t              rt        |t              ry |j                         r^|j                         rNt        j                  | |j
                  j                  dt        j                  gt        ||gi        d       S t        |t              r|j                  |d|gi       S y )Nr^  r  rE  )r   r=   is_symnode_likerS   r9  r`  ra  r   r
  r2   re   rT  r4  s       ru   call_xorzBuiltinVariable.call_xor  s     a)*z!=M/N1#4#4#6"))&		&&#X\\4Eq!fb4Q   a-.==YR88rw   c                 N    t        |t              r|j                  |d|gi       S y )NrG  r   re   rT  r4  s       ru   	call_ixorzBuiltinVariable.call_ixor  )     a-.==Z!b99rw   c                 N    t        |t              r|j                  |d|gi       S y )Nr-  r  r4  s       ru   call_subzBuiltinVariable.call_sub  s)     a-.==YR88rw   c                 N    t        |t              r|j                  |d|gi       S y )Nr/  r  r4  s       ru   	call_isubzBuiltinVariable.call_isub  r  rw   c           
      l   t        |t              rt        |t              ry |j                         r^|j                         rNt        j                  | |j
                  j                  dt        j                  gt        ||gi        d       S t        |t              r|j                  |d|gi       S y )Nr^  r  __and__)r   r=   r  rS   r9  r`  ra  r   r  r2   re   rT  r4  s       ru   	call_and_zBuiltinVariable.call_and_  s     a)*z!=M/N1#4#4#6"))&		&&#X]]5F1vr5R   a-.==YR88rw   c           
      l   t        |t              rt        |t              ry |j                         r^|j                         rNt        j                  | |j
                  j                  dt        j                  gt        ||gi        d       S t        |t              r|j                  |d|gi       S y )Nr^  r  __iand__)r   r=   r  rS   r9  r`  ra  r   r  r2   re   rT  r4  s       ru   	call_iandzBuiltinVariable.call_iand   s     a)*z!=M/N1#4#4#6"))&		&&#X]]5F1vr5R   a-.==Z!b99rw   c           
      h   t        |t              rt        |t              ry 	 |j                         }|j                         }t        |t              r)t        |t              rt	        j
                  |||z        S |j                         r^|j                         rNt        j                  | |j                  j                  dt        j                  gt        ||gi        d       S t        |g t        t         t"        t$              r|j'                  |d|gi       S y # t        $ r Y w xY w)Nr^  r  __or__)r   r=   r   r   r<   r   rW  r  rS   r9  r`  ra  r   r	  r2   re   r?   rV   rW   rT  )rs   r   rQ  rR  a_constb_consts         ru   call_or_zBuiltinVariable.call_or_  s4    a)*z!=M/N	**,G**,G'4(Z-F&,,R71BCC 1#4#4#6"))&		&&#X\\4Eq!fb4Q   %! ' (	
 ==XsB77 7 # 		s   AD% %	D10D1c           
         t        |t              rt        |t              ry |j                         r^|j                         rNt        j                  | |j
                  j                  dt        j                  gt        ||gi        d       S t        |g t        t        t              r|j                  |d|gi       S y )Nr^  r  __ior__)r   r=   r  rS   r9  r`  ra  r   r  r2   re   r?   rV   rT  r4  s       ru   call_iorzBuiltinVariable.call_ior?  s     a)*z!=M/N1#4#4#6"))&		&&#X\\4Eq!fb4Q   %! '
 ==YR88 rw   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 )Nr^  r  r   )r   rS   r9  r`  ra  r   r   r2   rC   dv_dictrH   r?   rP   r<   r   r   rd  rX   r  r   )rs   r   rQ  bool_results       ru   	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rw   c                 ,    |j                  |d|gi       S )N__contains__rW  r4  s       ru   call_containszBuiltinVariable.call_containss  s     }}R!b99rw   r   c                 j    t        |t        j                        xr | j                  |j                  u S rq   )r   r   r   r   r   s     ru   r   zBuiltinVariable.is_python_equalx  s'    %!:!:;S588@SSrw   r   rq   )wrx   ry   rz   r{   r   	_SENTINELr<   _nonvar_fieldsr   r	   r"   r   staticmethodr  cacher1  r   r  r   r  r(  r|   r  r  r}   rH  r   r  r  r  r  r  rx  r  r  r   r  r  r   r  r  r   r  r  r  r  r   r  r  r)  r-  r/  r+  r(  r]  r^  rT  r  r  r  r  r  r  r  r  call_mincall_maxr  r  r  r  r  r  r  r  r  r  r  
call_tupler  r  r  r  r  r	  r  r  r+  r1  r5  r9  r;  rC  rG  r   ru  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   __classcell__r}  s   @ru   r   r   e  s    I		'	'N
 )s )F )?P ) ) __@c(38*<&= @  @D:4 : __*Xc3h%7!8 *  *X __#TfuT#Yf0E%EFF #  #J __KTf)!# !	"	
		 K  KZ S#X(,_(=GK		$	& 5T 5
 ,5dD$5G+H)C.H3 # $ 4# 4C c "# "J1? 1o 1RV 1 T $t*  3$30?3	3 
'
15c?6J1K
	tCy$sCx.(	)
 

_-
7;C<P7Q
	
 o S#Xo +/:o CGo 	#!o%&	

 	$	 
o  o b43 4C 4O 44)42A4	4 
(? 
O 
 
(N#N 'N S/)*	N
 
4	Nt 	  fck')S/)*
 	
	
" 
)#) ') S/)*	)
 
)*g;#g; g; ?#	g;
 S/)*g; 
g;R$)$0?$	4	$&)&0?&	4	&%)%0?%	4	%3)30?3	4	3j?)?0??	4	?B
)
2A
	4	
Y)Y2:?2KY	Yj#j T!j T!	j
 
4	jX HH	4)	40?	4		4	4)	40?	4		4%)%0?%	%<#< < 	<
 "< 
<	)	2A		4		
? 
o 
RV 

1)12A1	1


)

25

AD

	

  '+4#4 t#4 	4
 "4 
4	4l
#
 
 	

 "
 

  '+H#H t#H 	H
 "H 
4	H* "J)0?	4	B

,
8G
	4	

)
0?
	4	
$
#$
 $
 "	$

 
$
L
#
 
 "	

 

:
#
 
 "	

 

6(#( ( "	(
 
(0#0 0 "	0
 
0h.#h. h. -	h.
 
h.TN#N !N "	N
 
N4-)-.=-BQ-	-
)2A	 )0?GV	4	#
##
 #
 	#

 "#
 
#
J

)

/>

ET

	


5 
S 
_ 
, +/eK#eK eK "	eK
 !4'eK 
4	eKNd#d d "	d
 d 
4	dLB#B B "	B
 
B:):0?:	:4)0?	4	#  "	
 
4	$).=	4	&	R#	R (	R 		R
 "	R 
	R()(2A(	(T
)
.=
	
5
)5
1@5
IX5
	5
n"
)"
1@"
IX"
	"
H).=BQ	4	&).=BQ	4	).=BQ	4	).=BQ	4	).=BQ	4	&).=BQ	4	$+)+.=+BQ+	4	+Z).=BQ	4	:).=	4	.:):.=:BQ:	:
TV T Trw   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   ro   rh   Nc                 8    |t         u sJ t        |   di | y Nrr   )r|   r  r  rs   r   ro   r}  s      ru   r  zDictBuiltinVariable.__init__      }}"6"rw   c                      y)NzDictBuiltinVariable()rr   r   s    ru   r  zDictBuiltinVariable.__repr__      &rw   r   r[   rn   c                 >    t        j                  |t        g|i |S rq   )r  call_custom_dictr|   )rs   r   rn   ro   s       ru   r^  z!DictBuiltinVariable.call_function  s!     #33BNtNvNNrw   r   c                    |dk(  rlt        |      dk(  r^|s\t        i t        t                     }t	        |d   t
              r|S |j                  j                  j                  | |d   |dd        S |dk(  rt        j                  |t        g|i |S t        t        |d       }||t        v rt	        |d   t        j                        r5|d   j                  J |d   j                  j                  |||dd  |      S t	        |d   t              r|d   j                  |||dd  |      S t         | =  ||||      S )Nr\   r8   rm  r   fromkeys)r   r?   r|   r;   r   r  r`  rs  rs  call_custom_dict_fromkeysr   r)   r   rW   rw  rT  r  )rs   r   r   rn   ro   dict_vtr|  r}  s          ru   rT  zDictBuiltinVariable.call_method  sT    94yA~f+BDTDVWd1g':;"Nyy--KK$q'48  :&@@D#)  dD$/"{l'B$q'9#D#DEAw''333Aw''33Bd12hOODG%67Aw**2tT!"XvFFw"2tT6::rw   user_clsc                    t        |      }| j                  t        j                  | t        j
                        t        j                  | |      g||      S rq   )r  r  r<   r   r   construct_dict)r   r  rn   ro   	args_lists        ru   r  z$DictBuiltinVariable.call_custom_dict  sQ     J	--!!"i&>&>?""2x0=9=
 	
rw   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       |\  }}|t        urt        nt        }t        |t               rJ|D cg c]  }t        j                  | |       }} |t         j                  ||      |t!                     S |j#                  |       rJ|j%                  |       }	t'        d |	D              r' |t         j                  |	|      |t!                     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  r8   r   z	.fromkeysz1 args and 1 kwargs (`value`)z
 args and r  r   zat least 1 argsz argsr   z2 argsrm  c              3   2   K   | ]  }t        |        y wrq   rD   rk  s     ru   r   z@DictBuiltinVariable.call_custom_dict_fromkeys.<locals>.<genexpr>  s     0a;q>0rb  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   rx   r   r3   r  r=   r9  r?   r@   r   r<   r   r   r;   rt  ru  r   )
r   r  rn   ro   r  r   DictVariableTyper  arg_listkeyss
             ru   r  z-DictBuiltinVariable.call_custom_dict_fromkeys  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!)!<BU 	 c4 >AB--b!4BHB#h..0 
 ..r2004D0400'MM$."2"4  	4(()tfAfXF)(*;*;)< =0 0 ;/
	
 Cs   I$)rx   ry   rz   r{   r|   r   r   r	   r  r}   r  r   r<   r^  r  rT  r  r  r  r  r  s   @ru   r  r  |  sB   >
C%) #d #S #T #'# 'O#O 'O S/)*	O
 
O;#; ; ?#	;
 S/)*; 
;> 
#

 	

 "
 

 
 P
#P
P
 	P

 "P
 
P
 P
rw   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   ro   rh   Nc                 8    |t         u sJ t        |   di | y r  )r  r  r  r  s      ru   r  zIterBuiltinVariable.__init__  r  rw   c                      y)NzIterBuiltinVariable()rr   r   s    ru   r  zIterBuiltinVariable.__repr__  r  rw   r   r[   rn   c                 B   |st        dddg t        j                         |^}}|s|st        |t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        f	      r|j                  |dg i       S t	        j                  t         j"                  j$                        j'                  ||g|i       }|rt	        j(                  |      }|S )Nziter() with no argumentsziter()z%iter() requires at least one argumentr  r  )r   r   r  r   r   rH   rI   r  r?   rL  rT   rL   r  rC   rT  r  r   r  iter_r^  ObjectIteratorVariable)rs   r   rn   ro   r  restrets          ru   r^  z!IterBuiltinVariable.call_function  s     2 C5)445	 
d
 **++..//..,,++66$
 ??2z2r:: ,,$$

-SL4L"
- 	  2237C
rw   )rx   ry   rz   r{   r  r   r	   r  r}   r  r   r<   r|   r^  r  r  s   @ru   r  r    sn    2
C$( #c #C #D #'# '.#. '. S/)*	.
 
.rw   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 xZS )ListBuiltinVariablez4Variable tracker for the `list` builtin constructor.r   ro   rh   Nc                 8    |t         u sJ t        |   di | y r  )r  r  r  r  s      ru   r  zListBuiltinVariable.__init__T  r  rw   c                      y)NzListBuiltinVariable()rr   r   s    ru   r  zListBuiltinVariable.__repr__X  r  rw   r   r[   rn   c                    ddl m} |r|d   nd }t        |t        j                  t        j
                  f      st        ||      r>|j                  |      r-t        t        |j                  |            t                     S |t        g t                     S |j                  |      r|j                  rGt        |j                        s1t        |t              r3t        |j                  j!                  t"        j$                               nt        |t&              rEt)        |t*        t,        f      s/|j.                  j0                  j3                  |j                         t        |t        j4                        r3t        |j                  j!                  t"        j6                               nLt        |t        j8                        s2t        |j                  j!                  t"        j:                               t        t        |j=                  |            t                     S |D cg c]  }t?        |      j@                   }}tC        dd| dd| g tD        jF                  	       y c c}w )
Nr8   )rX   r   rm  zFailed to trace list()zlist(r  zADynamo does not know how to construct a list from argument types r  )$r  rX   r   r   r  r  rt  rH   r  ru  r;   rr  r   r!   rK   r   r   r   r  r?   r0   rP   rN   r`  r  r   r  r  r  r  re  r   rx   r   r   r  )rs   r   rn   ro   rX   r  rQ  r  s           ru   r^  z!ListBuiltinVariable.call_function[  s    	<d1g4),,i.T.TU
 s5611"5S22267.0 
 ;2B2DEE&&r*zz"4SZZ"@c#89!

--l.M.MN "#'89&k+<=C 		4488D!#y'E'EF%JJ11,2Q2QR (Y-T-TU%JJ11,2N2NO  S,,R01.0 
 044!T!W%%4	4,I;a([\e[fg2%112		
 5s   2I7r   c                     |dk(  rgt        |      dk(  rY|sWt        g t                     }t        |d   t              r|S |j
                  j                  j                  | |d   |dd        S t        | %  ||||      S )Nr\   r8   rm  r   )
r   rH   r;   r   r  r`  rs  rs  r  rT  )rs   r   r   rn   ro   list_vtr}  s         ru   rT  zListBuiltinVariable.call_method  s     94yA~f&r9I9KLd1g':;"Nyy--KK$q'48  w"2tT6::rw   )rx   ry   rz   r{   r  r   r   r	   r  r}   r  r   r<   r|   r^  rT  r  r  s   @ru   r  r  O  s    >
C%) #d #S #T #'# '6
#6
 '6
 S/)*	6

 
6
p;#; ; ?#	;
 S/)*; 
; ;rw   r  r   c              #      K   ddl m} |j                  | d      }	 |j                  |        d  |j	                  |        y # |j	                  |        w xY ww)Nr8   )GradModeVariableF)r  r  r9  enterexit)r   r  gmvs      ru   r  r    sD     "

!
!"e
,C		"s   AA AAA)rh   N)r{   
contextlibr  r  r  loggingr   r   r?  rm   typingra  collectionsr   r   collections.abcr   r   r   r   r	   r
   r   r   torch._subclasses.meta_utilsr   torch.overridesr   torch.utils._python_dispatchr   r  r   r   r   r   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   r6   r7   baser9   r:   r;   r<   constantr=   r>   dictsr?   r@   rA   rB   rC   hashablerE   listsrF   rG   rH   rI   rJ   rK   rL   miscrM   setsrN   rO   rP   r  rQ   rR   rS   rT   rU   r  rV   rW   rX   rY   torch._dynamo.codegenrZ   torch._dynamo.symbolic_convertr[   	getLoggerrx   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
  rT  r   rx  r   r   r`   r|   r   r}   r   r@  r   r  r  r  r&  cmp_eqr%  cmp_ner!  cmp_ltr$  cmp_ler"  cmp_gtr#  cmp_ger  r   r   r   r   r   r   r   r   r   r   r   r  r   re   rf   rg   r   r   r   r  r  r  contextmanagerIteratorr  rr   rw   ru   <module>r>     s+  *        
    0 B B + +  6 1 F > >   1 '      ,  7  "    I I   /Dg! MM8<<MM8<<MM8<<))x''MM8<<h&&hoohooMM8<<MM8==LL(,,MM8<< " I|,	-)Y-
.	9i'(B "Dy~)=$> 
 w2;]O2L&w/ fjj&**57MM  _%d?.CS.H(IIKK!!KK!!KK!!KK!!KK!!KK!!  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>EB1
/ 1
hT,T) T,TnXS
- S
l:- :zT;- T;p 3 8M  rw   