
    i                    
   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 ddl
mZmZmZmZ ddlZddlmZmZ ddlmZ ddlmZ dd	lmZ d
dl m!Z!m"Z"m#Z#m$Z$ d
dl%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- d
dl.m/Z/m0Z0 d
dl1m2Z2 d
dl3m4Z4m5Z5m6Z6m7Z7m8Z8 d
dl9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZK ddlLmMZMmNZNmOZO ddlPmQZQ ddlRmSZSmTZT ddlUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\ ddl]m^Z^m_Z_m`Z`maZambZbmcZc ddldmeZemfZfmgZgmhZhmiZi ddljmkZkmlZlmmZmmnZn erddlompZp ddlqmrZr  ej                  et      Zue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de
j&                  e
j&                  geOf   ZeeeO   eeeO   df   f   Zej(                  e#j*                  ej,                  e#j.                  ej0                  e#j2                  ej4                  e#j6                  ej8                  e#j:                  ej<                  e#j>                  iZej                  ej                  ejB                  ej                  ej                  ej                  ej                  ej0                  ej8                  ej<                  ej4                  ej,                  ej(                  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Zi aeedef   edef   f   ed<   i aeedef   edef   f   ed<   d Z G d  d!eO      Zejh                  d"        Zy)#a\  
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)IterableKeysViewSequence)AnyCallableTYPE_CHECKINGUnion)	sym_floatsym_int)is_sparse_any)BaseTorchFunctionMode)is_traceable_wrapper_subclass   )configgraph_break_hints	polyfills	variables)AttributeMutationErrorObservedAttributeErrorObservedUserStopIterationraise_observed_exceptionunimplemented_v2Unsupported	UserErrorUserErrorType)GuardBuilderinstall_guard)DummyModule)
AttrSourceGetItemSourceGlobalSourceis_constant_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set_methodsstr_methodstensortype_to_dtype   )#AsPythonConstantNotImplementedErrorValueMutationNewVariableTrackerConstantVariable)EventVariableStreamVariable)ConstDictVariableDefaultDictVariableDictKeysVariableDictViewVariableFrozensetVariableis_hashableSetVariable)BaseListVariableListIteratorVariableListVariableSizeVariableTupleIteratorVariableTupleVariable)FakeItemVariablesupported_comparison_opsSymNodeVariableTensorVariableUnspecializedPythonVariable)MutableMappingVariableUserDefinedDictVariableUserDefinedObjectVariableUserDefinedVariable)	PyCodegen)InstructionTranslatorrW   .BUILTIN_TO_TENSOR_FN_MAPBUILTIN_TO_TENSOR_RFN_MAPc                  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                       e Zd ZdZd 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)
        Nc                 $    |xs i }| ||i |S N )selffunctypesargskwargsmost_recent_funcs        Y/var/www/html/engine/venv/lib/python3.12/site-packages/torch/_dynamo/variables/builtin.py__torch_function__zKpopulate_builtin_to_tensor_fn_map.<locals>.GetMethodMode.__torch_function__   s"    \rF#(((    )r_   N)__name__
__module____qualname____doc__rg   )re   s   rf   GetMethodModer\      s    	
	)rh   rm   r8   )dtypec                      |       S r^   r_   )oinp0s    rf   <lambda>z3populate_builtin_to_tensor_fn_map.<locals>.<lambda>   s    qw rh   c                      |       S r^   r_   rp   inp0_ints    rf   rr   z3populate_builtin_to_tensor_fn_map.<locals>.<lambda>   s    q{ rh   c                      |       S r^   r_   )rp   rq   inp1s    rf   rr   z3populate_builtin_to_tensor_fn_map.<locals>.<lambda>   s    qt} rh   c                      |       S r^   r_   )rp   ru   inp1_ints    rf   rr   z3populate_builtin_to_tensor_fn_map.<locals>.<lambda>   s    q8, rh   c                      | d      S Nr   r_   rt   s    rf   rr   z3populate_builtin_to_tensor_fn_map.<locals>.<lambda>   s    q1~ rh   c                      | d      S Nr8   r_   )rp   rw   s    rf   rr   z3populate_builtin_to_tensor_fn_map.<locals>.<lambda>  s    !At* rh   c                      | d      S r}   r_   )rp   ry   s    rf   rr   z3populate_builtin_to_tensor_fn_map.<locals>.<lambda>      qH~ rh   c                      | d      S r{   r_   rt   s    rf   rr   z3populate_builtin_to_tensor_fn_map.<locals>.<lambda>	  r   rh   )lenrX   r   torchonesint32un_ops
un_int_opsbin_opsbin_int_opstensor_and_int_opsoperatormatmulimatmulgetitemrY   )rm   setups_and_oplistssetup_fnop_listoprsetups_and_oplistsrskipsrq   ru   rw   ry   re   s          @@@@@rf   !populate_builtin_to_tensor_fn_mapr      s   
#$q( 	
)- 
) ::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 e       Zdhej                  Zed        Z	e
ej                  d               Zd Ze
ej                  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
               Ze
d        Zd Zdf fdZdefdZd Z fdZdgdZd Zd Zd Z d Z!e
d        Z"d Z#e
dee$   de%fd       Z&dhdZ'dhdZ(i Z)eeedf   ede*e   eeef   gef   f   e+d<   ddd e*d!   d"d#dd!fd$Z,	 	 	 	 	 	 di fd%Z-dhd&Z.e.Z/e.Z0dhd'Z1dhd(Z2dhd)Z3dhd*Z4dhd+Z5e3Z6e3Z7djd,Z8djd-Z9djd.Z:dhd/Z;dhd0Z<d1 Z=dhd2Z>dhd3Z?	 dk	 dhd4Z@d5 ZAdkd6ZBdhd7ZCeBZDeBZEdhd8ZFd9 ZGdhd:ZHdhd;ZIe
dhd<       ZJe
	 	 dhd=       ZKdhd>ZLdhd?ZMdhd@ZNdhdAZOdhdBZPdhdCZQdhdDZRdhdEZSdhdFZTdhdGZUdhdHZVdhdIZWdhdJZX	 dkdddKedLefdMZYdddKedLedNefdOZZdddKedLefdPZ[dddKefdQZ\dddKefdRZ]dddKed"efdSZ^dhdTZ_dhdUZ`dhdVZadhdWZbdhdXZcdhdYZddhdZZedhd[Zfdhd\Zgdhd]Zhdhd^Zidhd_Zjdhd`ZkdhdaZldhdbZmdddceddefdeZn xZoS )l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.
    fnc                 f    t        |j                  t        j                                | ||      S Nsource)r   
make_guardr   BUILTIN_MATCH)clsvaluer   s      rf   create_with_sourcez"BuiltinVariable.create_with_source(  s(    f''(B(BCD5((rh   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   )rN   c              3   h   K   | ]*  }t        |t        t        j                              s'| , y wr^   )
isinstancetypemathsqrt.0xs     rf   	<genexpr>z;BuiltinVariable._constant_fold_functions.<locals>.<genexpr>n  s!     W
1d499o8V1Ws   (22)>absallanyboolcallablechrcomplexdivmodfloatgetattrintr   maxminordpowreprroundstrformatsumr   r   posnegnot_truthinvertmulr   floordivtruedivmodaddsubr   length_hintlshiftrshiftand_or_xoripowimulr   	ifloordivitruedivimodiaddisubilshiftirshiftiandixoriorindextensorrN   updatevaluesr   __dict__)fnsrN   s     rf   _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
rh   c                 :    | j                   | j                         v S r^   )r   r   r`   s    rf   can_constant_fold_throughz)BuiltinVariable.can_constant_fold_throughq  s    ww$77999rh   c                     h t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                   t         j"                  t         j$                  t         j&                  t         j(                  t         j*                  t         j,                  t         j.                  t         j0                  t         j2                  t         j4                  t         j6                  t         j8                  t         j:                  t         j<                  t         j>                  t         j@                  t         jB                  t         jD                  t         jF                  t         jH                  t         jJ                  t         jL                  t         jN                  } | S r^   )(r   r   r   r   r   r   r   r   r   r   r   r   r   ltgtgeleneeqr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s    rf   _fx_graph_functionsz#BuiltinVariable._fx_graph_functionst  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 
rh   return.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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__)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s    rf   _binopszBuiltinVariable._binops  s     LL>NLL>NLL>N?!! B""  LL>N5x}}ELL>NOO<   OO<  'U
> 
rh   c            
         ddl mm ddlm ddlm ddlm ddl	m
mm i } t        j                         j                         D ]!  \  }\  }}g | |<   g | |<   |\  }}}||dfd
}| |   j!                  t"        f|f       | |   j!                  t"        f|f       |d		 dd
}| |   j!                  t"        f|f       | |   j!                  t"        f|f       |ddd}	| |   j!                  t$        t"        f|	f       | |   j!                  t"        t$        f|	f       | |   j!                  t$        t"        f|	f       | |   j!                  t"        t$        f|	f       $ dd}
d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}t,        t"        f|ft(        t(        f|
ft(        t*        f|
fg}| t2        j8                     j7                  |       dd}t,        t*        f|ft(        t*        f|ft*        t,        f|ft*        t(        f|fg}| t2        j:                     j7                  |       fd}t=        j>                         D ]   }tA        |      sJ || vsJ  ||      | |<   " | S )Nr8   )BaseUserFunctionVariableUserFunctionVariableNNModuleVariable)supported_const_comparison_ops)BaseTorchVariable)UserDefinedClassVariablerT   rU   )forward_namereverse_namec                p    t        |      r|j                  | ||gi       S |j                  | ||gi       S r^   )r   call_method)txabr  r  rU   s        rf   user_defined_handlerz=BuiltinVariable._binop_handlers.<locals>.user_defined_handler  s>    , a!45==\A3CC==\A3CCrh   )r  c                ,    |j                  | ||gi       S r^   r  )r  r  r  r  s       rf   user_defined_inplace_handlerzEBuiltinVariable._binop_handlers.<locals>.user_defined_inplace_handler  s     }}RsB??rh   r   c          
      p    ddl m}  ||  | j                  j                  d|gt	        ||gi              S Nr8   wrap_fx_proxycall_function)builderr$  outputcreate_proxyr4   )r  r  r  r   r$  s        rf   dynamic_handlerz8BuiltinVariable._binop_handlers.<locals>.dynamic_handler   sA    2$*BII**'.?A.K rh   c                 R    t        g |j                  |j                  |             S r^   )rL   itemsunpack_var_sequencer  r  r  s      rf   tuple_add_handlerz:BuiltinVariable._binop_handlers.<locals>.tuple_add_handler<  s'     !G177!GQ-B-B2-F!GHHrh   c                 R    t        g |j                  |j                  |             S r^   )rJ   r+  r,  r-  s      rf   size_add_handlerz9BuiltinVariable._binop_handlers.<locals>.size_add_handler?  s'     F!'' FA,A,A",E FGGrh   c                 R    t        g |j                  |       |j                        S r^   )rL   r,  r+  r-  s      rf   rr   z1BuiltinVariable._binop_handlers.<locals>.<lambda>d  s/    ..r2" rh   c                 f    t        g |j                  |j                  |       t                     S Nmutation_type)rI   r+  r,  r:   r-  s      rf   rr   z1BuiltinVariable._binop_handlers.<locals>.<lambda>p  s-    :agg: 5 5b 9:"2"4" rh   c                 T     t        |      g |j                  |j                        S r^   )r   r+  r-  s      rf   rr   z1BuiltinVariable._binop_handlers.<locals>.<lambda>w  s.    a" rh   c                     |j                         s|j                  |       sy |j                  |       }| j                  j                  j                  |       |j                  j                  |       |S r^   )is_immutablehas_unpack_var_sequencer,  r'  side_effectsmutationr+  extend)r  r  r  seqs       rf   list_iadd_handlerz:BuiltinVariable._binop_handlers.<locals>.list_iadd_handler  sY    ~~q'@'@'D''+CII""++A.GGNN3Hrh   c                 H   t        |t              r||}}	 |j                  |j                  |j	                         z  t                     S # t        $ rL}t        t        |      | t        t        t        j                  |j                                     Y d }~y d }~ww xY w)N)r+  r5  rc   )r   r=   	__class__r+  as_python_constantr:   MemoryErrorr   r   listmapcreaterc   )r  lstconstexcs       rf   expand_list_likez9BuiltinVariable._binop_handlers.<locals>.expand_list_like  s    #/0"CU
}}))e&>&>&@@"2"4 %    (Ic"2"9"9388DE s   5A 	B!ABB!c                 4   
 d fd}t         t         f|fg} t        v r}t         t         f|fg}t               }|j                  t        t
        f|j                  ft
        t        f|j                  fg        fd}|j                  t
        t
        f|f       |S t         t         f|fg} j                         v rX j                  j                  d      r<  t               d       
d
fd}|}|}t        t        t        t        f}|j                  |t         f|ft         |f|fg       t               }|j                  t        ft        ff fdff fdff|ff|ft        t         t         ft        t         t         ff|ft        t
        f|j"                  ft
        t        f|j"                  ft        t
        f|j                  ft
        t        f|j                  fg	       d fd}	|j                  t
        t
        f|	f       |S )	Nc                    	 t         |j                  |j                              S # t        $ rL}t        t	        |      | t        t        t         j                  |j                                     Y d }~y d }~ww xY w)Nr@  )	r=   r   	TypeErrorr   r   rD  rE  rF  rc   )r  r  r  rI  r   s       rf   compare_by_valuezYBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.compare_by_value  sc    +Bqww,@AA  ,S	!#&6&=&=sxx"HI s   %) 	A>AA99A>c                 d    | j                  t        j                  | t                 ||gi       S r^   )inline_user_function_returnr;   buildpolyfill_fn_mappingr  r  r  r   s      rf   handlerzPBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.handler  s6    99'--b2Eb2IJQPQFTV rh   is_c                     t              S r^   r<   )r  r  r  none_results      rf   neverzNBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.never  s    +K88rh   c                 P    t         |j                  |j                              S r^   )r=   r   rS  s      rf   rr   zQBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.<lambda>  s    -=bqttn-M rh   c                     t         | j                  j                  |j                        | j                  j                  |j                                    S r^   )r=   r'  get_submodule
module_keyrS  s      rf   rr   zQBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.<lambda>#  sA    -= "$&II$;$;ALL$I$&II$;$;ALL$I!". rh   c                    t        |      t        |      ur"t        j                  j                  dk7        S ||u rt        j                   ||            S t	        |t
        j                        rPt	        |t
        j                        r5|j                  |j                  urt        j                   ||            S y y y )NrU  )r   r=   rF  ri   r2   r   ExceptionVariableexc_type)r  leftrightr   s      rf   	handle_iszRBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.handle_isL  s     Dze4/66r{{e7KLLu}/66r$GGtY%@%@A"5)*E*EF MM?/66r$GG @ G Brh   r  rW   )r=   rR  r   r<  rO   r;   _comparison_with_symnodeappendr   ri   
startswithobjectrP   rG   r@   r?   r>   _comparison_with_tensor)r   rN  resultop_varrT  rX  obj_op_nonenone_op_objtypes_that_are_never_nonerb  rW  r  r  r  r  rT   rU   r  r  s   `         @rf   create_cmp_op_handlersz?BuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers  s   $ $%568HIJ  (( -.>?AQRS(, -o>";;
 -o>";;	
 A7KL(*:;=MNOF3::<<AWAWB !409 $# ##$$',%%	-)  78HI'
 ./HI'	 ), "6 G!5 G N !1 0 78QR,
 67OP, "0@P Q!/@P Q - ,_="::
 -n="::
 -o>";;
 -o>";;_35nH A9MNMrh   rc  )!	functionsr  r  	nn_moduler  r   r  r   r  user_definedr  rT   rU   r   r  r+  re  r;   rO   rJ   rL   r=   rI   rG   rH   r   r   r<  r   r   rN   r   r   )op_handlersr   magic_method_namesin_place_opr  r  inplace_namer  r  r)  r.  r0  list_like_addition_handlersr>  list_like_iadd_handlersrJ  list_like_expansion_handlersrn  r  r  r  r  rT   rU   r  r  s                     @@@@@@@@rf   _binop_handlerszBuiltinVariable._binop_handlers  s    	N/:,	
 	
$  	 $$&,,.P	 
- KO')K$7I4L, *)D6 O""%79MN O""!#679MN
 DP@+@
 $++%79UV $++!#679UV
 JL  O""!?3_E O""!?3_E
 $++!?3_E $++!?3_E]P	j	I	H  |, 
 }- 
 - 
 .!
  01!
 "=1 !%'79MN	 "#34W4
 	$z 	HLL!(()DE	" /!
 .!
  01!
 	 & 	HMM"))*AB	* ,-/?@-.0@A-/?@.0@A	
 	% 	HLL!(()EF_	 _	B +113 	9BB<<[(((4R8KO	9
 rh   c                     t         j                         j                  |       }|y g }|D ]3  \  \  }}}t        ||      st        ||      s#|j	                  |       5 |S r^   )r   ry  get
issubclassre  )r   a_typeb_typehandlersmatchestype1type2rT  s           rf   _find_binop_handlerz#BuiltinVariable._find_binop_handlere  sg    "22488<'/ 	(#NUEG&%(Z-Fw'	( rh   c                 :    | j                   | j                         v S r^   )r   r   r   s    rf   can_insert_in_graphz#BuiltinVariable.can_insert_in_graphq  s    ww$22444rh   c                 2    t        |   di | || _        y )Nr_   )super__init__r   )r`   r   rd   rA  s      rf   r  zBuiltinVariable.__init__t  s    "6"rh   c                     | j                   d}n| j                   j                  }| j                  j                   d| dS )NNone())r   ri   rA  )r`   names     rf   __repr__zBuiltinVariable.__repr__x  s=    77?D77##D..))*!D633rh   c                     | j                   S r^   r   r   s    rf   rB  z"BuiltinVariable.as_python_constant  s    wwrh   c                     t         t        j                   t        t        j                  t        t        j
                  i}| j                  |v r|| j                     S t        | !         S r^   )	r   r   r   int64r   float64r   r  as_proxy)r`   DTYPErA  s     rf   r  zBuiltinVariable.as_proxy  sO    %**5==

 77e>!w!!rh   c                     | j                   j                  }| j                   j                  dk(  sJ ||j                  j                  vsJ d       |j                  |j                  |d             y )Nbuiltinszshadowed globalT)r   )r   ri   rj   r  	f_globalsappend_outputcreate_load_global)r`   codegenr  s      rf   reconstructzBuiltinVariable.reconstruct  se    wwww!!Z///7::///B1BB/g8848HIrh   c                     t        ||      S r^   )r&   r`   rc   rd   s      rf   constant_argszBuiltinVariable.constant_args  s    "400rh   c                     d}|D ]<  }t        |t        j                        r y|xs t        |t        j                        }> |S NF)r   r   GetAttrVariablerP   )r`   rc   
any_tensorargs       rf   tensor_argszBuiltinVariable.tensor_args  sJ    
 	QC#y889#Pz#y7O7O'PJ	Q rh   c                     d}|D ]<  }t        |t        j                        r y|xs t        |t        j                        }> |S r  )r|  r   r  rP   )r`   	arg_typesr  arg_types       rf   tensor_args_typez BuiltinVariable.tensor_args_type  sJ    
! 	VH(I$=$=>#Uz(I<T<T'UJ	V rh   c                    g }g }t        j                  ||j                               D ]?  }t        |t        j
                        r|j                  |       /|j                  |       A t        d |D              xr  | j                  | S )Nc              3   b   K   | ]'  }|j                   t        |j                         nd ) y wr  )r   r$   )r   ts     rf   r   zBBuiltinVariable.python_and_tensor_constant_only.<locals>.<genexpr>  s0      
 -.HH,@qxx(eK
s   -/)		itertoolschainr   r   r   rP   re  r   r  )r`   rc   rd   r  non_tensor_argsis         rf   python_and_tensor_constant_onlyz/BuiltinVariable.python_and_tensor_constant_only  s    v}}7 	*A!Y556""1%&&q)		*
  
 
 
 3 !d  /2	3rh   c                     | D cg c]  }|j                          c}|j                         D ci c]  \  }}||j                          c}}fS c c}w c c}}w r^   )rB  r+  )rc   rd   r   kvs        rf   unwrap_unspec_args_kwargsz)BuiltinVariable.unwrap_unspec_args_kwargs  sV    0451$$&528,,.8
*.!QAq##%%8
 
 	
5 8
s
   AAc                 >    | j                         xr t        ||      S r^   )r   r(   r  s      rf   has_constant_handlerz$BuiltinVariable.has_constant_handler  s%    --/ 
4Q&5
 	
rh   r  
has_kwargsc                    	
 ddl m t               g t        fdD              rfdS t	        j
                         r"t         t              s t        u r
	 	 d fd}|S j                         ri t        j                  u rt        d   t        j                        r:j                        rj                  S rj!                  j                         t#              dk(  rYsWt        j$                   g 

sn>t#        
      dk(  r
\  	j!                  	fd       nd
fd	}j!                  |       t'        d
 j(                   d       rd fd}j!                  |       j+                         r2t-        d D              r	sd fd}nd fd}j!                  |        fdt#              dk(  rfdS t#              dk(  r\  dfd}|S dfd}|S )Nr8   )LazyVariableTrackerc              3   6   K   | ]  }t        |        y wr^   )r|  )r   r  r  s     rf   r   z0BuiltinVariable._make_handler.<locals>.<genexpr>  s     Eaz!01Es   c                 l    j                  | |D cg c]  }|j                          c}|      S c c}w r^   )r%  realize)r  rc   rd   r  objs       rf   rr   z/BuiltinVariable._make_handler.<locals>.<lambda>  s-    C,=,=$/QQYY[/- /s   1
c                     t         u r:t        d |D              s(t        dt        |      dg t        j
                         t        j                  |fi |S )Nc              3      K   | ]:  }t        |t        j                        xr t        |j                  t               < y wr^   )r   r   r=   r   r   r   s     rf   r   zWBuiltinVariable._make_handler.<locals>.create_exception_class_object.<locals>.<genexpr>  s?      4  q)"<"<= 1"177C014s   A Azassert with non-string messagez1Dynamo only supports asserts with string messagesgb_typecontextexplanationhints)AssertionErrorr   r   r   r   SUPPORTABLEr   r^  )r  rc   rd   r   s      rf   create_exception_class_objectzDBuiltinVariable._make_handler.<locals>.create_exception_class_object  sc     ' 4 "4 1
 % @ #D	$W> 1 = =>	 !222tFvFFrh   r   r   c                      | g| S r^   r_   )r  rc   _binop_handlers      rf   rr   z/BuiltinVariable._make_handler.<locals>.<lambda>  s    M"4Lt4L rh   c                 2    D ]  } || g| }|s|c S  y r^   r_   )r  rc   r  r   rvbinop_handlerss        rf   call_binop_handlersz:BuiltinVariable._make_handler.<locals>.call_binop_handlers  s'    , &]T]#%I&rh   call_c                    	  	| g|i |}||S y # t         $ r 	  t        j                  	      j                  | g|i |  # t         $ rq}j	                  ||      }|sRt
        j                  d	|       t        dd	 d| d| dj                   g t        j                         Y d }~Y y 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  )rM  inspect	signaturebindr  logwarningr   ri   r   	DIFFICULTr   remove_from_stats)
r  rc   rd   ri  er  rI  r   r  self_handlers
          rf   call_self_handlerz8BuiltinVariable._make_handler.<locals>.call_self_handler  s+   ,)">t>v>F)% *  <)),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	   4  # ,+.+C+CD&+Q(/))++,sE    	C<)AC<	CA B=1C<7C<=CC<%C77C<c              3   <   K   | ]  }t        |t                y wr^   )r|  r=   r   s     rf   r   z0BuiltinVariable._make_handler.<locals>.<genexpr>+  s     GJq"23G   c                    	  |D cg c]  }|j                          c} }t        j                  |       S c c}w # t        $ rL}t        t        |      | t	        t        t        j                  |j                                     Y d }~kd }~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)rB  	Exceptionr   r   rD  rE  r=   rF  rc   r9   r   r   
DYNAMO_BUGr;   rQ  )r  rc   rd   r   resrI  r   s         rf   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!%c*:*A*A388&L!M 
 ? ($=&@DTUYTZ$[(a"A$5$@$@"A%( s.   ? :? ? 	CABC&CC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        $ rL}t        t        |      | t        t        t        j                  |j                                     Y d }~d }~ww xY w)Nr  r  r  r  r  r@  )r(   rB  r+  r9   r   r   r  r  r   r   rD  rE  r=   rF  rc   r;   rQ  )	r  rc   rd   r   r  r  r  rI  r   s	           rf   r  z<BuiltinVariable._make_handler.<locals>.constant_fold_handlerG  s   4T6B"$BF!GQ!"6"6"8!G# KQ,,.#"BF!QAq';';'=$=#"#C(  /44R==- C "H#"  C ,(A*DRDHXY]X^(_,e&E(9(D(D&E),   ) 4 $S	 "%)#.>.E.Esxx*P%Q s@   B A:B A?B :B 	D&B99DADD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   ri   )rc   r  real_arg_typesr  r   r  s      rf   call_unimplemented_v2z<BuiltinVariable._make_handler.<locals>.call_unimplemented_v2c  s    @DEc224ENE:"2;;-q1ZLIRSUS^S^R_ `''5&6mJ<qR .bkk]:PQ_P` aTTVT_T_S``bde8 Fs   A7c                      |      S r^   r_   )r  rc   rd   r  s      rf   rr   z/BuiltinVariable._make_handler.<locals>.<lambda>t  s    ,A$,G rh   c                 2     | ||      }|r|S  |       y r^   r_   )r  rc   rd   r  r  rT  s       rf   builtin_dispatchz7BuiltinVariable._make_handler.<locals>.builtin_dispatchx  s!    Rv.I%d+rh   c                 D    D ]  } || ||      }|s|c S   |       y r^   r_   )r  rc   rd   r   r  r  r  s        rf   r  z7BuiltinVariable._make_handler.<locals>.builtin_dispatch  s2    " "BBf-B!	" &d+rh   rc  )lazyr  r   r   r  isclassr|  r  GeneratorExitr  r   r   r   rP   r  _handle_insert_op_in_graphre  r   r  r   ri   r   r   )r   r  r  r  r  r  r  r  r  r  r  r  rT  r  r  r  s   ```     @@@@@@@@rf   _make_handlerzBuiltinVariable._make_handler  s   -b!+-E9EE  ??2r9% ]"G+G" 10""$("""y|Y-E-EF##I.555 > >? y>Qz,@@PiPN!^$)#1  LM&  34seBKK=$94@,B OO-.((*GYGG":0>4 OO12	  x=AGG]a!JW,  ,  rh   r  rW   c                    t        |      dk(  r3t        dd|  d| d| j                   dg t        j                         t        |      dk(  sJ 	 |d   j                  |d	      S # t        $ r t        t        |       Y y w xY w)
Nr   z1unimplemented builtin op vars() with no argumentszvars: r  3Dynamo does not know how to trace builtin operator z with no argumentsr  r8   r   )	r   r   r   r   r  var_getattrr   r   rM  r`   r  rc   s      rf   	call_varszBuiltinVariable.call_vars  s    t9>K av.QRVRYRYQZZlm6)556	 4yA~~	47&&r:66% 	4$Y3	4s   A( (BB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                t        |d   t              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 rKt        |d   t8              r8t:        j<                  |d   t0        j2                  j!                  d      |d   g}}t?        ||      r[tA        d	 |D              sI |jB                  jD                  d
tG        |      gtI        ||       } |t0        jJ                  ||      S |t4        jL                  u rEtO        |      dk(  r7t        |d   t0        j                        r|d   jQ                  |d|dd  |      S  |jB                  jD                  d
|gtI        ||       }tA        d |D              r |tR        ||      S tU        ||      rb| jW                  ||      \  }} ||i |}tA        d tY        jZ                  ||j	                               D              } |t\        ||||      S t_        d |D              rt9        j                   ||d       S |t4        j`                  u r3t        |d   t0        j\                        r|d   jc                         |d<    |||      S # td        $ r9 tg        dd|  d| d| d| j                   dg th        jj                         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   T   K   | ]   }t        |      t        j                  k(   " y wr^   )r   r   rP   r   r  s     rf   r   z=BuiltinVariable._handle_insert_op_in_graph.<locals>.<genexpr>  s&      B:=S	Y555Bs   &(r%  __eq__c              3   <   K   | ]  }t        |t                y wr^   r   rM   r  s     rf   r   z=BuiltinVariable._handle_insert_op_in_graph.<locals>.<genexpr>  s     E:c#34Er  c              3   h   K   | ]*  }t        |t        j                        r|j                   , y wr^   r   r   rQ   need_unwrapr   s     rf   r   z=BuiltinVariable._handle_insert_op_in_graph.<locals>.<genexpr>  ,      "!!Y%J%JK MM"   02)	raw_valuer
  c              3   <   K   | ]  }t        |t                y wr^   r   rO   r   s     rf   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  r  z with tensor argumentsr  )6r&  r$  r  r  r   r  torch_functionr  r   exportr   r   rP   r   rY   rX   rF  r  bytecode_transformationr  ro  r  ri   IN_PLACE_DESUGARING_MAPr   r=   r   r   rO   r   selectr'   r   r'  r(  r3   r4   NumpyNdarrayVariabler   r   r  rM   r)   r  r  r  rQ   r   r   rB  NotImplementedErrorr   r   r  )r`   r  rc   rd   r$  r  r  r  r   ra   tmpfn_varr   r  r  proxy_args_kwargsr  r
  s                       rf   r  z*BuiltinVariable._handle_insert_op_in_graph  s   =*$**CDC6==?C 	/X 'r48 9913!$q'>:ww";;8A7@q'C"1gDG!DG3DGG<Dww&--b$7F*2vtVDDWWe	3t33TDVD?C3Ibkk2D&  ,,Q332 326a$q'8JDX%%%*T!Wo*N
 LLQ!2299!<Q  (f5c BAEB ? /		..#*2. 'tV4 ))G)GUSS hkk!INtAw	(@(@A
 Aw**2xab6JJ*BII** #40E
 EEE($ 
 *$7!%!?!?f!Mw11	! "&__T6==?C"  )/' +  BTBB&--b%>> )))jGYBB/ #1g88:DG$R//" 	F-dV1TF!F8DQRVRYRYQZZpq6)556		s;   9N? ?C;N? ;AN? AN? A-N? (N? 1AN? ??P Pcall_function_handler_cacherc   r;   rd   dict[str, VariableTracker]c           	         |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                  |<   } ||||      S c c}}w c c}w )Nc              3   2   K   | ]  }t        |        y wr^   r   r   s     rf   r   z0BuiltinVariable.call_function.<locals>.<genexpr>:       4!d1g4   Tc              3   2   K   | ]  }t        |        y wr^   r   r   s     rf   r   z0BuiltinVariable.call_function.<locals>.<genexpr><  r!  r"  )r+  r  r   r  r{  r  r   r   )	r`   r  rc   rd   r  r  keyrT  r   s	            rf   r%  zBuiltinVariable.call_function1  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
c                 t   | 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(  rs|sqt        i t        t                     }t	        |d   t              r|d   j                   t        u r|S |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 | j                   t*        u rlt-        g t                     }
t	        |d   t              r|d   j                   t*        u r|
S |j                  j                  j                  | |d   |dd        S | j                   t.        u rnt        |      dk(  r`|dv r\t	        |d   t0              rI	 t3        t.        |      } ||d   j5                               }t&        j0                  j7                  |      S | j                   t        u r|d
k(  rt'        j0                  d       S | j                   t        u r#|dk(  rt        jD                  |t        g|i |S | j                   t        u rt3        | j                   |      }|tF        v rxt	        |d   t&        jH                        r$|d   jJ                  jM                  |||dd  |      S t	        |d   t&        j                        r|d   jM                  |||dd  |      S | j                   tN        u rt3        | j                   |      }|tP        v rxt	        |d   t&        jR                        r$|d   jT                  jM                  |||dd  |      S t	        |d   t&        jV                        r|d   jM                  |||dd  |      S | j                   tX        u rUt3        | j                   |      }|tZ        v r7t	        |d   t&        j\                        r|d   jM                  |||dd  |      S | j                   t^        u rYt        |      dk\  rKt3        | j                   |      }|t`        v r-t	        |d   t0              r|d   jM                  |||dd  |      S | j                   t.        u r[t        |      dk\  rMt	        |d   t0              r:t1        j6                   t3        t.        |      |d   j5                                     S tb        |   ||||      S # t8        t:        f$ rM}t=        t?        |      |t+        tA        t0        j6                  |jB                              	       Y d }~Yd }~ww xY w)N__setattr__   r   __new__r8   r4  r   )fromhexhexr@  r  fromkeys)2r   rg  r   r  r   rT   r'  r:  is_attribute_mutationis_python_constantmethod_setattr_standardtrack_new_user_defined_objectdictr@   r:   r   tuplehas_force_unpack_var_sequenceforce_unpack_var_sequencer   rL   rD  rI   r   r=   r   rB  rF  OverflowError
ValueErrorr   r   rE  rc   call_custom_dict_fromkeysr+   rS   _dict_vtr  setr5   UserDefinedSetVariable_set_vtrF   	frozensetr-   rD   r   r6   r  )r`   r  r  rc   rd   r  name_varvaldict_vt	init_argslist_vtr   r  r  resolved_fnrA  s                  rf   r  zBuiltinVariable.call_methodE  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  ww$3t9>&+BDTDVWd1g7DGJJ$<N"N yy--KKGH  5 ING99"=d1g7DGJJ%<O $Q A A" EI$22!1A1C  yy--KKGH  ww$&r9I9KLd1g7DGJJ$<N"Nyy--KKGH  77eD	Q4;M3M$q'#34	 -BT!W779:C$55<<SAA 77f!3--d3377d?tz1"<<RWWPVWW77d?!$''40Kl*d1gy'H'HI7++77D$qr(FSSQ)D)DE7..r4ab6JJ77c>!$''40Kk)d1gy'G'GH7??66r4ab6RR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'..(GE4(a)C)C)EF  w"2tT6::a &z2 ,Q!#&6&=&=qvv"FG s   AY Z7*AZ22Z7c           	      X   t        |t        t        j                  f      rt        |t        j                        r|j	                  |dg i       }n|}| j
                  t        u rt        nt        }ddl	m
}  |||j                  j                  d||j                         fi             S y )Nitemr   r#  r%  r  r  )r   rO   r   rP   r  r   r   r   r   torch._dynamo.variables.builderr$  r'  r(  r  )r`   r  r  rC  fn_r$  s         rf   _call_int_floatzBuiltinVariable._call_int_float  s     cOY-E-EFG#y778r62r:!WW^'CE ii,,#]]_&	  Hrh   c                 *   t        |t              rt        |j                  t        j                        r|S t        |j                  t        j                  t        j                  f      sJ t        j                  ||j                         dk7        S y r{   )
r   rO   sym_numr   SymBoolr2   SymIntSymFloatrF  r  r`   r  r  s      rf   	call_boolzBuiltinVariable.call_bool  sm     c?+ #++u}}5

 #++enn'EFFF"))"clln.ABB ,rh   c                    t        |t        j                        r3t        j                  j	                  t        |j                              S t        |t        j                        r?t        |j                  d      r|j                  j                  }nUt        |j                  d      r|j                  j                  }n(t        dt        |      dg t        j                         t        |j                        j                  t         j                  u r&	 t        j                  j	                                S t%              r't        ddt        |j                         d	d
g       y |j&                  }	 t        j                  |      }|j/                  ||gi       S t        |t        j0                  f      rht3        |j4                        dk(  r|j6                   }n"dj9                  d |j4                  D              }t        j                  j	                  |      S y # t"        $ r Y y w xY w# t(        $ r }t*        j-                  d|       Y d }~y d }~ww xY w)N)r   __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 UserFunctionVariable: %sr   , c              3   <   K   | ]  }|j                           y wr^   )rB  )r   r  s     rf   r   z+BuiltinVariable.call_str.<locals>.<genexpr>  s     !KQ!"6"6"8!Kr  )r   r   r  r=   rF  r   r   rT   hasattrr   rP  r  r   r   
USER_ERRORr   rg  AttributeErrorr1   __func__r  r  r  rP  r^  r   rc   r_  join)r`   r  r  
str_methodbound_methoduser_func_variabler  r   s           rf   call_strzBuiltinVariable.call_str  s   cI::<--443svv;4GGiAACsyy), YY..
J/ YY//
 IH W9-889	 CII&&&..8$55<<:<<PP 1< N#'		?"33h i;<	  *22)2)G)G)U& 556H3%QSTTi99;<388}!<<.		!K#((!KK--4454AA =3 & $ & KK KQOs*   $H, ?H; ,	H87H8;	I$II$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   r2  r3  _call_min_max_seq_call_min_max_binary)r`   r  rc   r+  s       rf   _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 rh   c                     t        |      dkD  sJ t        |      dk(  r|d   S t        j                  t        j                  | j                  |      |      S Nr   r8   )r   	functoolsreducepartialr_  )r`   r  r+  s      rf   r^  z!BuiltinVariable._call_min_max_seq+  sM    5zA~~u:?8O	 1 1$2K2KR PRWXXrh   c                    ||y | j                  ||      r9t        |t        j                        s||}}t        |t        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              rJt        |tH              r9| j                  |j=                         |j=                               }tI        |      S y y )Nr8   r  r%  rD  r   r   r   c              3   p   K   | ].  }t        |t        j                  t        j                  f       0 y wr^   )r   r   rQ   r=   )r   r  s     rf   r   z7BuiltinVariable._call_min_max_binary.<locals>.<genexpr>g  s9      	  !==!22	s   46c              3   <   K   | ]  }t        |t                y wr^   r  )r   r=  s     rf   r   z7BuiltinVariable._call_min_max_binary.<locals>.<genexpr>q  s     KSz#'78Kr  c              3   h   K   | ]*  }t        |t        j                        r|j                   , y wr^   r	  r   s     rf   r   z7BuiltinVariable._call_min_max_binary.<locals>.<genexpr>}  r  r  )%r  r   r   rP   rM   TorchInGraphFunctionVariabler   r   r%  rO   r&  r  r   r'  r(  r   r4   r-  r  numpyNumpyVariableclipclampr   maximumr   minimumr   r   from_tensor_variablerB  r  rQ   sym_maxsym_minrF  r=   )r`   r  r  r  r  npr   rd   ri  np_fntorch_fnraw_braw_resr
  py_fnr  r   s                    rf   r_  z$BuiltinVariable._call_min_max_binary2  s   9	 Aq!a!9!9:!1a!9!9::: !-.::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G[ 
 ?+z!_/M%)WW^EMME*BII**):Aq62)FE #))"eT::+,A?O1PGG$$&$$&E $E** 2Q,rh   c                     t        t              j                  ||t        j                  d      gi       }|j                  |g i       S )N__abs__r   r   r%  r=   rF  )r`   r  r  
abs_methods       rf   call_abszBuiltinVariable.call_abs  F    $W-;;&--i892

 ''B33rh   c                     t        t              j                  ||t        j                  d      gi       }|j                  |g i       S )N__pos__r}  )r`   r  r  
pos_methods       rf   call_poszBuiltinVariable.call_pos  r  rh   c                     t        |t        j                        rt        dddg        t	        |      }t        j                  |      }t        j                  j                  |      S )Nzunsupported index(Tensor)rQ  z;Dynamo does not support tracing builtin index() on a Tensorr  )	r   r   rP   r   r/   r   r   r=   rF  )r`   r  r  constant_values       rf   
call_indexzBuiltinVariable.call_index  sW    c93343Y	 3!,))00@@rh   c                     t        t              j                  ||t        j                  d      gi       }|j                  |||      S )N	__round__r}  )r`   r  r  rc   rd   round_methods         rf   
call_roundzBuiltinVariable.call_round  sF    &w/==&--k:;R
 ))"dF;;rh   c                     t        |i       rt        j                  |      S  | j                  | r't	        d |D              }t        j                  |      S y )Nc              3   l   K   | ],  }t         j                  j                  t        |             . y wr^   )r   r=   rF  r/   r  s     rf   r   z-BuiltinVariable.call_range.<locals>.<genexpr>  s+      IL	**11,s2CD   24)r(   r   RangeVariable_dynamic_argsr1  r  s      rf   
call_rangezBuiltinVariable.call_range  sZ    (r2**400T& PT D **400rh   c                 j    t        d |D              xs  t        d |j                         D              S )Nc              3   <   K   | ]  }t        |t                y wr^   r  r   s     rf   r   z0BuiltinVariable._dynamic_args.<locals>.<genexpr>  s     @a:a1@r  c              3   <   K   | ]  }t        |t                y wr^   r  r   s     rf   r   z0BuiltinVariable._dynamic_args.<locals>.<genexpr>  s      H
/0Jq/*H
r  )r   r   r  s      rf   r  zBuiltinVariable._dynamic_args  s7    @4@@ 
C H
4:MMOH
 E
 	
rh   c                 ,    t        j                  |      S r^   )r   SliceVariabler  s      rf   
call_slicezBuiltinVariable.call_slice  s    &&t,,rh   c           
          ddl m}  || |j                  j                  d| j                  gt        ||             S r"  )r&  r$  r'  r(  r   r4   )r`   r  rc   rd   r$  s        rf   
_dyn_proxyzBuiltinVariable._dyn_proxy  sA    *"BII""+<T6+J
 	
rh   c                 @   t        |t        j                        rJ  | j                  |i |r | j                  |g|i |S t        j
                  j                  | j                        }| |g t                     S |j                  |      r|j                  rTt        |j                        s>t        |t              r3t        |j                  j                  t        j                                nt#        |dd      rUt        |t$              rEt'        |t(        t*        f      s/|j,                  j.                  j1                  |j                         t        |t        j2                        r3t        |j                  j                  t        j4                               nLt        |t        j6                        s2t        |j                  j                  t        j8                                |t;        |j=                  |            t                     S y )Nr4  r   F)r   r   IteratorVariabler  r  rG   cls_forr   r:   r9  r   r$   rK   r   r   r   TUPLE_ITERATOR_LENr   r@   r2   rF   rD   r'  guard_on_key_orderr   MappingProxyVariableMAPPING_KEYS_CHECKUnspecializedNNModuleVariableSEQUENCE_LENGTHrD  r,  r`   r  r  rc   rd   r   s         rf   _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
  Xu5&s,=> &s[:K,L M		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 7 -rh   c                     t         j                  j                  | j                        } |t	        |j                  |            t                     S r3  )r   rG   r  r   rD  r3  r:   r  s         rf   _call_iter_tuple_generatorz*BuiltinVariable._call_iter_tuple_generator  sB    ((009..r23*,
 	
rh   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 r3  )r   r   r  rG   r  r   rD  r3  r:   LocalGeneratorObjectVariablerT   r2  r  r  r  s         rf   _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Grh   c                    t        |t        j                        r|}nFt        |t        j                        r|j	                  |dg i       }n | j
                  ||g|i |}|at        j                  t        j                  j                        j                  ||g|i       }t        |      rt        j                  |      }|S )N__iter__)r   r   r  r  r  r  r  r   r  iter_r%  r   ObjectIteratorVariable)r`   r  r  rc   rd   rets         rf   	call_iterzBuiltinVariable.call_iter  s    c9556CY445//"j"b9C -$,,RFtFvFC; 00""((mBtb1  4y
  66s;
rh   c           	         ddl m}m} ddlm} t        |t        j                  |||f      rt        j                  j                  d      S t        |t              r2t        j                  j                  t        |j                              S t        |t        t        t        t        t         t"        f      rt        j                  j                  d      S y )Nr8   )r  FunctoolsPartialVariabler  TF)ro  r  r  rp  r  r   r   r  r=   rF  rU   r   r   rO   rP   rI   rL   rH   )r`   r  r  r  r  r  s         rf   call_callablezBuiltinVariable.call_callable:  s    Q/22(( 	
 --44T::01--44Xcii5HII $

 --44U;;

rh   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   )r`   r  rc   rd   s       rf   	call_castzBuiltinVariable.call_castW  s:    t9>7N0vQvh/JHI		
rh   c                     t        |t        j                        r)t        j                  |t        |j                              S t        |t              r)t        j                  |t        |j                              S y r^   )	r   r   r  r;   rQ  dirr   r   r   rM  s      rf   call_dirzBuiltinVariable.call_dirb  sW    c9==>"((S^<<c?+"((S[99 ,rh   c                 >    t        j                  |t        g|i |S r^   )r   call_custom_dictr0  r`   r  rc   rd   s       rf   	call_dictzBuiltinVariable.call_dicth  s    //DJ4J6JJrh   c                    t        |      }t        |      dk(  rt        |d   t        j                        rpt        |d   j
                  t        j                        rI| j                  j                  j                  |d   j
                        s|d   j                  |       |d<   | j                  t        j                  | t        j                        t        j                  | |      g||      S )Nr8   r   )rD  r   r   r   r  r  r  r'  r:  has_pending_mutationget_forwarded_dictrP  r;   rQ  r   construct_dict)r  user_clsrc   rd   s       rf   r  z BuiltinVariable.call_custom_dictk  s    DzIN47I$=$=>47;;	(J(JKII**??QL
 1g004DG--!!"i&>&>?""2x0848
 	
rh   c                    |t         t        t        hv sJ |rB|t        u sJ t        |      dk(  rt        |      dk(  rd|v sJ g ||j	                  d      }t        |      dk(  r(t        j                  d      }t        t        | |g       t        |      dk(  rg |t        j                  d       }t        |      dk(  sJ |\  }}|t        urt        nt        }t        |t               rW|j                         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 )Nr8   r   r   z-fromkeys expected at least 1 arguments, got 0r@  r   r4  c              3   2   K   | ]  }t        |        y wr^   )rE   )r   r  s     rf   r   z<BuiltinVariable.call_custom_dict_fromkeys.<locals>.<genexpr>  s     0a;q>0r"  zfailed to call dict.fromkeys()z.fromkeys(): r  zFailed to call 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  )r0  r   r   r   popr=   rF  r   rM  r@   rA   r   keysr+  r:   r2  r3  r   r   ri   )
r  r  rc   rd   msgr  r   DictVariableTyper  r  s
             rf   r6  z)BuiltinVariable.call_custom_dict_fromkeys~  s    D+{;;;;{***t9>c&kQ&67f;LLL/T/6::g./Dt9>"))?C %Y#?t9>9T9+22489D4yA~~
U!)!<BU 	 c4 7:xxzB!#**1-BCB#c5)8CSCU  ..r2004D0400'MM$."2"4  	4(()tfAfXF)(*;*;)< =0 0 ;/
	
 Cs   Gc           
      0   |rJ |st        g t                     S t        |      dk7  r3t        t        |t        j                  dt        |       d      g       |d   }t        |t        j                         r|j                  t                     S |j                  |      r&|j                  |      }t        |t                     S t        |t        j                        rt        |j                  t              rp|j!                  |d      }t        |t        j"                        rD|j%                  |||      }t        |t               r|S t'        t(              j+                  ||      S t        t        |t        j                  d      g       y )	Nr4  r8   z&set() takes 1 positional argument but  were givenr@  r   r  z!failed to construct builtin set())rF   r:   r   r   rM  r=   rF  r2   r   cloner2  r3  r   rT   r   r   r  UserMethodVariablerP  r   r8  call_set)r`   r  rc   rd   r  r+  iter_fnouts           rf   r  zBuiltinVariable.call_set  sW   zr1A1CDDt9>$$++@T;W 1g#y,,-99+;+=9>>..r211"5Eu4D4FGGY@@AjIIxG
 oob*5G'9#?#?@44WdFKc;/J&s+44R== "))*MNO	
rh   c           
         |rJ |st        g       S t        |      dk7  r3t        t        |t	        j
                  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        |t	        j
                  d      g       y c c}w )Nr8   z,frozenset() takes 1 positional argument but r  r@  r   z'failed to construct builtin frozenset())rD   r   r   rM  r=   rF  r2   r   	set_itemsvtr2  r3  )r`   r  rc   rd   r  r   r+  s          rf   call_frozensetzBuiltinVariable.call_frozenset  s    z$R((t9>$$++Fs4ykQ\] 1g#y223$CMM%Bqadd%BCC..r211"5E$U++ "))*STU	
	 &Cs   C3c                     |rt        |      dk(  rd|v sJ |j                  dd      }|D cg c]#  }t        t              j	                  ||gi       % }}t        j                  ||t                     S c c}w )Nr8   strictF)r  r5  )r   r  r   iterr%  r   ZipVariabler:   )r`   r  rc   rd   r  r  s         rf   call_zipzBuiltinVariable.call_zip  s{    v;!#F(:::He,NRSs%33BrBSS$$/?/A
 	
 Ts   (A7c                     	 |d   j                  |d|dd  |      S # t        $ r4}t        t        |      |t	        |j
                               Y d }~y d }~ww xY w)Nr   __len__r8   r@  )r  rV  r   r   rD  rc   )r`   r  rc   rd   r  s        rf   call_lenzBuiltinVariable.call_len  sV    	E7&&r9d12hGG 	E$T!WbtAFF|DD	Es    	A*AAc                 6    |d   j                  |d|dd  |      S )Nr   __getitem__r8   r  r  s       rf   call_getitemzBuiltinVariable.call_getitem  s#    Aw""2}d12hGGrh   c           	      4   	 j                         }|j                         }t        t        j                        r7j                  +fd}t        j                  j                   ||            S t        t        j                        rJt        j                  t        j                        r&t        dd d| dd	g t        j                          t        t        j                        r[d
|j"                  j$                  v rCt        j                  j                  |j"                  j'                  |j                              S t        t        j(                        rt        j                  t        |            S t        |t*              st-        t/        |d
d             r|f}nrt0        j2                  dk\  r't        |t        j4                        r|j6                  }n8t        |t8              rt;        d |D              r|}nt=        t>        |dg       	 tA              }t        j                  j                  |      S # t        $ r- t        dd d| dd g t        j                         Y pw xY w# t>        $ r v }Y gw xY w)Nz6builtin isinstance() cannot determine type of argumentzisinstance(rR  r  z=Dynamo doesn't have a rule to determine the type of argument r  c                 j    fdt        |      t        u rt        fd|D              S  |      S )Nc                 >   | 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_typern   )tyexample_valdtypesr  s      rf   
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..rh   c              3   .   K   | ]  } |        y wr^   r_   )r   r  r  s     rf   r   zNBuiltinVariable.call_isinstance.<locals>._tensor_isinstance.<locals>.<genexpr>!  s     D"z"~Ds   )r   r1  r   )
tensor_vartensor_typer  r  s     @rf   _tensor_isinstancez;BuiltinVariable.call_isinstance.<locals>._tensor_isinstance  s3    /" $-DDDD%k22rh   z<isinstance() called on user defined object with C extensionszeUser-defined object with C extensions can have torch.Tensor attributes; intentionally graph breaking.__instancecheck__)r'  
   c              3   l   K   | ],  }t        |t              xs t        t        |d d             . yw)r  N)r   r   r   r   )r   tps     rf   r   z2BuiltinVariable.call_isinstance.<locals>.<genexpr>J  s6      8
 r4 THWR9Ld-S$TT8
r  z?isinstance() arg 2 must be a type, a tuple of types, or a unionr@  )!r  r  r   r   r  rB  r   r   rP   rn   r=   rF  rT   r   rb   MemberDescriptorTyper  rA  r   r  !UserDefinedExceptionClassVariabler   r   r   sysversion_info	UnionType__args__r1  r   r   rM  r|  )r`   r  r  isinstance_typer  r  isinstance_type_tupler=  s     `     rf   call_isinstancezBuiltinVariable.call_isinstance  ss   	(H *<<>c93349N3. --44"38 
 c9>>?JIIu11E
 V%cU"_,=Q?<6)556 sI??@#'@'@'I'II--44));;OSYYW  c9FFG#**:h+PQQ ot,O%8$?1
 &5$6!(ZU__.
 %4$<$<!/C 8
%8
 5
 %4!$U
	4 X'<=C ))0055C # 	P%cU"_,=Q?[\_[`a5)445	 	~  	433C	4s#   I #J 2JJJJc           	          	 |j                         }|j                         }t        j                  t                    S # t        $ r* t        dd| d| dddgt        j                         Y Qw xY w)z,Checks if first arg is subclass of right argz(issubclass() with non-constant argumentszissubclass(rR  r  z7issubclass() with non-constant arguments not supported.z#Make sure your arguments are types.r  )rB  r  r   r   rU  r   r=   r|  )r`   r  left_tyright_ty
left_ty_pyright_ty_pys         rf   call_issubclasszBuiltinVariable.call_issubclasse  s    	 335J"557K ))*Z*MNN # 		B%gYb
!<U9&11			s    A 0A43A4c                 .    t        j                  ||      S r^   )r   SuperVariabler`   r  r  r  s       rf   
call_superzBuiltinVariable.call_supery  s    &&q!,,rh   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   rG   r  r+  )r`   r  rc   r  exs        rf   	call_nextzBuiltinVariable.call_next|  s}    1g
	$$R((( 	4yA~Aw 	#y99:$$&yy|#		s%    B	B8A>7B=A>>Bc                     |j                         re|j                         }t        |t        j                        r)t        j
                  t        |j                  |            S |j                  ||      S y r^   )	r-  rB  r   r   r   r=   rT  r   call_obj_hasattr)r`   r  r  attrr  s        rf   call_hasattrzBuiltinVariable.call_hasattr  s`    ""$**,D#y889 11'#&&$2GHH''D11	 %rh   c                     |D cg c]&  }|j                  |      r|j                  |      n|( }}t        j                  ||t	                     S c c}w r3  )r9  r,  r   MapVariabler:   )r`   r  r   seqsr=  s        rf   call_mapzBuiltinVariable.call_map  s_     
 ,/+F+Fr+JC##B'PSS
 
 $$R=M=OPP	
s   +Ac                     |j                  |      r|j                  |      n|}t        j                  ||t	                     S r3  )r9  r,  r   FilterVariabler:   )r`   r  r   r=  s       rf   call_filterzBuiltinVariable.call_filter  s;    -0-H-H-Lc%%b)RU''C?O?QRRrh   c                 N   | j                   xr t        | j                   |      }| j                  t        u r9	 t	        | j                  |      }t              st        j                  |||      S t        j                  | ||      S # t
        $ r t        t
        |       Y Uw xY wr   )r   r!   r   rg  r   rV  r   r   r;   rQ  r   r  )r`   r  r  r   r   s        rf   r  zBuiltinVariable.var_getattr  s    >DKK!>77f=. E?&,,R??((tFCC	 " =(<=s   B B$#B$r  r<  c                    |j                         st        dd| d| d| dddg       |j                         }t        |t              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 |9| j                  |||      }|j                         dv sJ |j                         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        j.                  ||      S |dk(  r!t)        j*                  ||j0                  |      S |dk(  rt3        j4                  |j6                        S t        |t        j:                        r|j=                  ||      S t        |t        j                  t        j>                  t        j2                  t        j@                  t        jB                  t        jD                  f      rt        |t        jD                        r]tG        |jH                  jJ                  tL        jN                        r/tP        jR                  r|dv rt        dd| d| dd| dg       t        |t              r|jT                  jV                  jX                  d   }t        |tZ        j\                        rFt_        |      r;|j`                  rtP        jb                  st        dddg td        jf                         	 |j=                  ||      S t        |t        jj                        rtm        |jH                  |      }t        |tZ        jn                  jp                  tZ        jn                  jr                  f      r@tZ        jt                  jv                  jy                  |      rt        jj                  ||      S |tz        v rt        jh                  |||      S y t        |t|              r|j~                  s||jH                  j                  vrtm        |jH                  |      }n|jH                  j                  |   }tP        j                  r'|j                  j                  |jH                  ||       t)        j*                  |||      S t        |t        j                        r-|dv r)t3        j4                  tm        |j                  |            S 	 |j=                  ||      S c c}
}	w # t8        $ r Y w xY w# t8        $ r t        jh                  |||      cY S w xY w# t8        $ r t        jh                  |||      cY S w xY w)Nz)getattr() with non-constant name argumentzgetattr(rR  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 mutation)TF>   __base__	__bases__	__flags__r   r   r  r!  )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 TensorrQ  z-torch.compile does not support sparse Tensors)ri   rj   )Gr-  r   rB  r   rP   r'  r:  r,  r   r  is_state_mutatedr  has_pending_mutation_of_attr	load_attrr  r   r!   r   	enumerater   r;   rQ  r"   rL   r  r=   rF  r!  r  r  r  NamedTupleVariableDistributedVariabler  rT   r|  r   rA  unittestTestCaser   enable_trace_unittestr  r  r  r   Tensorr   r  capture_sparse_computer   r  r  rk  r   _opsOpOverloadPacket
OpOverload_dynamotrace_rulesis_aten_op_or_tensor_methodr*   r    is_torchr   replay_record_enabledexec_recorderrecord_module_accessr2   r  r   )r`   r  r  r<  defaultr  hasattr_varr   r   r  r  
tuple_argsfake_valmembers                 rf   call_getattrzBuiltinVariable.call_getattr  s    **,C"3%r(2gYa@XJK	 **, c>*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113}DDD113<
3::t <99..0eT*{*
 )2%//(B	& !%1 ,11 "Av'J-2J&
 &  )66z&QQz).44RPP{*/66uGG c9556??2t,,((,,**--2233

 3	 C CDsyy22H4E4EF00 !=:4&A"UVZU[[] ^24& 9= =	 #~.99>>..?x6%h/YYf.K.K$ A "$S> 1 = =>	Kr400 YCCDSYY-F44ejj6K6KL--++GGO ==fVTT// 00d6JJ 0[)||t399+=+== D1++D1++  55ciivN"((VV<<C778T F
 >
 $**73664+@AAKr400{& ' j ' K 00d6JJK< ' K 00d6JJKsT   =W0 /W*;W0 %W0 ;#W0 =X  X' *W0 0	W=<W= !X$#X$'!Y
Yr=  c                 	   t        |t        j                  t        j                  t        j                  t        j
                  t        j                  f      r|j                  |d||gi       S |j                  j                  j                  |      rm|j                         r\|j                         }t        |t        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 }
|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                        r0|j                  jI                         stK        d      |j                         rt        |t        j                        rtM        |j=                         j>                  |      }	 |jO                  ||j                               }t        |t        j                        rptM        |j=                         j>                  |      }tU        jV                  |jX                  d      }||u r(|t0        jZ                  j\                  j^                  u r|S |ja                  |       y y c c}w # 1 sw Y   xY w# 1 sw Y    xY w# tP        tR        f$ r d }Y w xY w)Nr&  r8   r#  requires_gradz!setattr() on Tensor.requires_gradzsetattr(rR  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%  c                     | j                   }|dkD  r|dz
  }t        j                  j                  j	                  | f|f       | S rb  )_versionr   _C	_autograd_unsafe_set_version_counter)r   versions     rf   _lower_version_count_by_1z?BuiltinVariable.call_setattr.<locals>._lower_version_count_by_1	  s>    "#**"Q;&-kG**FFtgZX rh   r  )r  r  r  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?Can't inplace modify module params/buffers inside HigherOrderOp)1r   r   PlacementVariabler*  rT   NestedUserFunctionVariabler^  r  r'  r:  r,  r-  rB  rP   r&  r$  r   r   r  r   rn   tracked_fakesremovedynamo_disable_gradr   no_gradr(  r/  set_r4   r  r  r  r0   
store_attrr  is_root_tracerr   r.   r  rV  r   r  getattr_staticmodule_typer  Moduler&  convert_to_unspecialized)r`   r  r  r<  r=  r  r$  tf	to_remover  rJ  assigning_fake_valgetattr_varexisting_fake_attrmod_setattrs                  rf   call_setattrzBuiltinVariable.call_setattrD	  sO    ++,,3344++	
 ??2}xorJJII""88=++-..0D#y778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	 	! 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++-,U  **,Y--2 &4CLLN4G4G%L"'"%//"h6Q6Q6S"TK k9+C+CD)78L8L8N8S8SUW)X& #*"8"8-"XK*.@@'588??+F+FF**((,7 9}!	 	 	 	F '(>? '"&K'sC   >QQQ/A
Q9Q Q, Q	QQ),R ?R c                 ,    |j                  |d|gi       S )N__delattr__r  )r`   r  r  r<  s       rf   call_delattrzBuiltinVariable.call_delattr	  s     r=8*bAArh   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_namerQ  r/  )r  r  r   r   INVALID_INPUTr   r   r%   r   r   rT   
cls_sourcer   r/  r'  install_global_by_idr!   r#   r;   rQ  )r`   r  r  py_typeerrorr   r  s          rf   	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 r^   )r9  rD  reversedr,  r   rL   )r`   r  r  r+  s       rf   call_reversedzBuiltinVariable.call_reversed
  s@    &&r*#"9"9""=>?E**511 +rh   c                     |j                  |      r_t        |t        j                        sDt        j                  |j                  |      t                     }|j                  |dg |       |S y y )Nr4  sort)r2  r   r   rP   rI   r3  r:   r  )r`   r  r  rd   list_vars        rf   call_sortedzBuiltinVariable.call_sorted
  sm     ,,R0)):
 !----b1.0H   VR8O:
0rh   c                    t        |t              r9t        j                  |t        j                  |j                               d       S t        |t              r0|j                  |d      j                  r|j                  |dg i       S y )NrI  __neg__)
r   rO   rF  r   r   r  rT   r  r   r  r`   r  r  s      rf   call_negzBuiltinVariable.call_neg
  st    a)"))qzz|,  q34""2y177==YB77 rh   c                 z    |j                         }t        |      }t        j                  j	                  |||      S r^   )rB  r   r   StringFormatVariablerF  )r`   r  _format_stringrc   rd   format_strings         rf   call_formatzBuiltinVariable.call_format*
  s5    &99;M*--44]D&QQrh   c                    t        |      dkD  rot        |d   t        j                        rR|d   }|j                  j                  |j                        }t        j                  j                  t        |            S t        |      dk(  rt        |d   t        j                  t        j                  f      r{|d   j                  r5t        |d   j                  j                  t        j                                t        |d   j"                        }t        j                  j                  |      S t        |      dk(  r)t        |d   t$              r|d   }|j'                  |      S t)        |d   t        j*                        r5t        j                  j                  t        |d   j,                              S t)        |d   t        j.                        r5t        j                  j                  t        |d   j"                              S t)        |d   t        j0                        r5t        j                  j                  t        |d   j2                              S t5        dt7        |      d| dgt8        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   r  r'  r[  r\  r=   rF  idr  rT   r   r   r   r   ID_MATCHr   rP   call_idr2   r  r   SkipFunctionVariabler  
fake_valuer   r   r   r  )r`   r  rc   nn_mod_variabler   constant_resulttensor_variables          rf   r  zBuiltinVariable.call_id/
  s   t9q=ZQ1K1KL"1gO))))/*D*DEC--44RW==Y!^
G//1T1TU!
 Aw~~d1gnn778M8MNO a/O--44_EEY!^
47N C"1gO"**2..DGY;;<--44RQ

^DDDGY;;<--44RQ5FGGDGY??@--44RQ8J8J5KLL4D	STXSYZ8 '22		rh   c                 L    t        dd| dddgt        j                         y )Nzcopy.deepcopy()zcopy.deepcopy(r  z'Dynamo does not support copy.deepcopy()zAvoid calling copy.deepcopy()r  )r   r   r  )r`   r  r   s      rf   call_deepcopyzBuiltinVariable.call_deepcopyQ
  s2    %$QCq)A/"..		
rh   c                    ddl m} ddlm} | j                  }|t
        j                  t
        j                  fv rt        |t              xrk t        |t              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(                         t        |t              r|n|}|j2                  j5                  d||j                         |j                         fi       }	 |t7        |      ||	      S # t.        $ rI t!        d|j"                   d| d| dd| d| d|j"                   dg t$        j0                  
       Y w xY w)Nr8   rg  %supported_tensor_comparison_op_valuesz unsupported Tensor comparison opr  rR  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   rU  is_notr   rP   r}  r,   r  r  r=   rF  r   ri   r   r  sizer   broadcast_shapesRuntimeErrorrU  r'  r(  r   )
r`   r  r`  ra  r  r  r   	is_result
tensor_clsr  s
             rf   rh  z'BuiltinVariable._comparison_with_tensor\
  s9   .AWW(,,0040 Iun5I1$--/2F2FGH01A1F1FGHI  X\\!'..y99'..9}==:::;;-qbq9H V))-b96)556 t^,5.1)uzz6		UZZ'
&&tyy%**= (n=T5
		&&R$--/5>>3C!Db
 !
 	
    V!{{m1TF"UG1="PQUPVVXY^X_ `BBD++a!Q9-889s   *H AI10I1c           
         ddl m} | j                  }||vrEt        d|j                   d| d| dd|j                   d| d| g t
        j                  	       t        |t        j                        r$t        j                   |t               d             S |j                  j                  d
||j                         |j                         fi       }t        j                   ||d       S )Nr8   r  z!unsupported SymNode comparison opr  rR  r  r  z with SymNode arguments r  r%  rs  )r   r  r   r   ri   r   r  r   r   r  r=   rg  r'  r(  r  rO   rF  )r`   r  r`  ra  r  r   r  s          rf   rd  z(BuiltinVariable._comparison_with_symnode
  s    AWW::;;;-qbq9H V**.r%:6)556 eY??@--b4.@AA		&&R$--/5>>3C!Db
 %%
 	
rh   c                 d    t        |t        t        t        f      r|j	                  |d|gi       S y )N__xor__r   rB   rF   rT   r  r  s       rf   call_xorzBuiltinVariable.call_xor
  2    a*K9RST==YR88 Urh   c                 d    t        |t        t        t        f      r|j	                  |d|gi       S y )N__ixor__r  r  s       rf   	call_ixorzBuiltinVariable.call_ixor
  2    a*K9RST==Z!b99 Urh   c                 d    t        |t        t        t        f      r|j	                  |d|gi       S y )Nr   r  r  s       rf   call_subzBuiltinVariable.call_sub
  r  rh   c                 d    t        |t        t        t        f      r|j	                  |d|gi       S y )Nr   r  r  s       rf   	call_isubzBuiltinVariable.call_isub
  r  rh   c           
         t        |t              rt        |t              ry t        |t        t        f      rdt        |t        t        f      rNt        j                  | |j                  j
                  dt        j                  gt        ||gi        d       S t        |t        t        t        f      r|j                  |d|gi       S y )Nr%  rs  __and__)r   r=   rO   rF  r'  r(  r   r   r4   rB   rF   rT   r  r  s       rf   	call_and_zBuiltinVariable.call_and_
  s    a)*z!=M/Na/+;<=*!12C
 #))&		&&#X]]5F1vr5R   a*K9RST==YR88 Urh   c           
         t        |t              rt        |t              ry t        |t        t        f      rdt        |t        t        f      rNt        j                  | |j                  j
                  dt        j                  gt        ||gi        d       S t        |t        t        t        f      r|j                  |d|gi       S y )Nr%  rs  __iand__)r   r=   rO   rF  r'  r(  r   r   r4   rB   rF   rT   r  r  s       rf   	call_iandzBuiltinVariable.call_iand
  s    a)*z!=M/Na/+;<=*!12C
 #))&		&&#X]]5F1vr5R   a*K9RST==Z!b99 Urh   c           
         t        |t              rt        |t              ry t        |t        t        f      rdt        |t        t        f      rNt        j                  | |j                  j
                  dt        j                  gt        ||gi        d       S t        |t        t        t        t        t        t        f      r|j                  |d|gi       S y )Nr%  rs  __or__)r   r=   rO   rF  r'  r(  r   r   r4   r@   rB   rR   rF   rS   rT   r  r  s       rf   call_or_zBuiltinVariable.call_or_
  s    a)*z!=M/Na/+;<=*!12C
 #))&		&&#X\\4Eq!fb4Q   ! &')

 ==XsB77 rh   c           
         t        |t              rt        |t              ry t        |t        t        f      rdt        |t        t        f      rNt        j                  | |j                  j
                  dt        j                  gt        ||gi        d       S t        |t        t        t        t        t        f      r|j                  |d|gi       S y )Nr%  rs  __ior__)r   r=   rO   rF  r'  r(  r   r   r4   r@   rB   rR   rF   rT   r  r  s       rf   call_iorzBuiltinVariable.call_ior  s    a)*z!=M/Na/+;<=*!12C
 #))&		&&#X\\4Eq!fb4Q   ! &)	
 ==YR88 rh   c           
      x   t        |t              rMt        j                  | |j                  j                  dt
        j                  gt        |gi        d       S t        |t              r|j                  }t        |t        t        f      r+t        j                  t        |j                        dk(        S y )Nr%  rs  r   )r   rO   rF  r'  r(  r   r   r4   rC   dv_dictrI   r@   r=   r   r+  ru  s      rf   	call_not_zBuiltinVariable.call_not_   s    a)"))&		&&#X]]5FsB5O   a)*		Aa,(9:;#**3qww<1+<==rh   r  r  c                 ,    |j                  |d|gi       S )N__contains__r  r  s       rf   call_containszBuiltinVariable.call_contains2  s     }}R!b99rh   )r   N)r  rV   rc  )rc   zlist[VariableTracker]rd   r  r   r;   )r  rW   r  r;   r^   )pri   rj   rk   rl   rg  	_SENTINELr;   _nonvar_fieldsclassmethodr   staticmethodrc  cacher   r   r   r0  r	   r1  rD  r   r  ry  r  r  r  r  rB  r  r  r  r  r  r  r  r  r   r   r  r  r  r  r   __annotations__r%  r  rG  call_int
call_floatrN  r\  r`  r^  r_  call_mincall_maxr  r  r  r  r  r  r  r  r  r  r  r  
call_tuple	call_listr  r  r  r  r  r6  r  r  r  r  r  r  r  r  r	  r  r  r  r  r@  r^  ra  rj  rm  rq  rv  r{  r  r  rh  rd  r  r  r  r  r  r  r  r  r  r  __classcell__)rA  s   @rf   r   r     s    I		'	'N
 ) ) __@  @D: __*  *X __#TfuT#Yf0E%EFF #  #J __X  Xt 	 	54# 4"J13 
 



 H T$Z H T H  H T4Kn 	  fck')S/)*
 	
	
" 
)#) ()) -	)
 
)(z; &	z;
 -z; 
z;x* H JC$5Bn4Ya+F HH44A<	

-
 04,),\
H6 "J I<:	
:K 
 
$ .
#.
 .
`"
H
4
EHd6LO(-2QS
D" ZK#ZK ZK "	ZKx]-#]- ]- "	]-
 ]-~B#B B "	B:3 :/ :02 7 2o 2
#  "	""R
 D	
3
j
69:9:9$:" D>$:):.=:BQ:rh   r   c              #      K   ddl m} |j                  | d      }	 |j                  |        d  |j	                  |        y # |j	                  |        w xY ww)Nr8   )GradModeVariableF)rQ  r  rF  enterexit)r  r  gmvs      rf   rO  rO  8  sD     "

!
!"e
,C		"s   AA AAA)rl   
contextlibrc  r  r  loggingr   r   r  rb   typingr,  collectionsr   r   collections.abcr   r   r   r   r	   r
   r   r   r   r   torch._subclasses.meta_utilsr   torch.overridesr   torch.utils._python_dispatchr   rQ  r   r   r   r   rI  r   r   r   r   r   r   r   r   guardsr   r   replay_recordr    r   r!   r"   r#   r$   r%   utilsr&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   baser9   r:   r;   constantr=   ctx_managerr>   r?   dictsr@   rA   rB   rC   rD   rE   rF   listsrG   rH   rI   rJ   rK   rL   r   rM   rN   rO   rP   rQ   rq  rR   rS   rT   rU   torch._dynamo.codegenrV   torch._dynamo.symbolic_convertrW   	getLoggerri   r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  _HandlerCallbackr   r1  _TrackersTyper   cmp_eqr   cmp_ner   cmp_ltr   cmp_ler   cmp_gtr   cmp_gerR  r   r   r   r   r   r   r   r   r   r   r   r   r   rX   r0  r  rY   r   r   contextmanagerrO  r_   rh   rf   <module>r     s(  *        
    0 8 8 6 6  $ 6 1 F > >	 	 	 1 '     ( Y X & 6      /Dg! MM8<<MM8<<MM8<<))x''MM8<<h&&hoohooMM8<<MM8==LL(,,MM8<< " fjj&**5F  d?+U43H#3M-NNO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
 JL $xS18CH3EEF K KM 4c 2HS#X4F FG L8Ev^(:o ^(:BQ  rh   