
    VhNU                    0   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 d dl	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mZmZ dd	lmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ dd
l%m&Z&m'Z' ddl(m)Z) ddl*m+Z+m,Z,m-Z-m.Z.m/Z/ ddl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z? ddl@mAZAmBZB ddlCmDZD ddlEmFZFmGZG ddlHmIZImJZJmKZKmLZLmMZMmNZN ddlOmPZPmQZQmRZRmSZSmTZTmUZU ddlVmWZWmXZXmYZYmZZZm[Z[ ddl\m]Z]m^Z^ erd dl_m`Z`  ej                  eb      Zce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Z}ede	j                  e	j                  geBf   ZeeeB   eeeB   df   f   Zej                  ej                  ej
                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  iZ G d deB      Ze j"                  d        Zy)    N)defaultdictOrderedDict)KeysViewSequence)CallableTYPE_CHECKINGUnion)	sym_floatsym_int)is_traceable_wrapper_subclass   )config	polyfills	variables)AttributeMutationErrorObservedAttributeErrorraise_observed_exceptionunimplemented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get_fake_valueguard_if_dynis_wrapper_or_member_descriptoristypenumpy_operator_wrapperproxy_args_kwargsstr_methodstensortype_to_dtype   )ValueMutationNewVariableTrackerConstantVariable)EventVariableStreamVariable)ConstDictVariableDefaultDictVariableDictViewVariableFrozensetVariableis_hashableSetVariable)BaseListVariableListIteratorVariableListVariableSizeVariableTupleIteratorVariableTupleVariable)FakeItemVariablesupported_comparison_opsSymNodeVariableTensorVariableUnspecializedPythonVariable)UserDefinedObjectVariableUserDefinedVariable)InstructionTranslatorrJ   .c            
           e Zd ZU dZ e       Zdhej                  Zed        Z	e
 ej                  d      d               Zd Ze
 ej                  d      d               Ze
 ej                  d      deed	ef   eee   ed	ef   f   f   fd
              Ze
 ej                  d      d               Ze
d        Zd Zd^ fdZdefdZd Z fdZd_dZd Zd Zd Z d Z!e
d        Z"d Z#e
dee$   de%fd       Z&d`d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+	 	 	 	 	 	 da fd%Z,d`d&Z-e-Z.e-Z/d`d'Z0d`d(Z1d`d)Z2d`d*Z3e1Z4e1Z5dbd,Z6dbd-Z7dbd.Z8d`d/Z9d`d0Z:d1 Z;d`d2Z<d`d3Z=	 dc	 d`d4Z>d5 Z?dcd6Z@d`d7ZAe@ZBe@ZCd`d8ZDd9 ZEd`d:ZFe
d`d;       ZGe
	 	 d`d<       ZHd`d=ZId`d>ZJd`d?ZKd`d@ZLd`dAZMd`dBZNd`dCZOd`dDZPddd+efdEZQd`dFZRd`dGZSd`dHZT	 dcdddIedJefdKZUdddIedJedLefdMZVdddIedJefdNZWdddIefdOZXdddIefdPZYdddIed"efdQZZd`dRZ[d`dSZ\d`dTZ]d`dUZ^d`dVZ_d`dWZ`d`dXZaeaZbd`dYZcecZdd`dZZeddd[ed\efd]Zf xZgS )d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valuerP   s      O/home/dcms/DCMS/lib/python3.12/site-packages/torch/_dynamo/variables/builtin.pycreate_with_sourcez"BuiltinVariable.create_with_source   s(    f''(B(BCD5((    Nc                  .   h 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*        j.                  t*        j0                  t*        j2                  t*        j4                  t*        j                  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                  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                  } ddl7m8} | js                   |jt                                | js                  d tv        jx                  ju                         D               | S )Nr0   )rD   c              3   h   K   | ]*  }t        |t        t        j                              s'| , y wN)
isinstancetypemathsqrt.0xs     rU   	<genexpr>z;BuiltinVariable._constant_fold_functions.<locals>.<genexpr>   s!     W
1d499o8V1Ws   (22)=absallanyboolcallablechrdivmodfloatgetattrintlenmaxminordpowreprroundstrformatsumr\   operatorposnegnot_truthinvertmulmatmulfloordivtruedivmodaddsubgetitemlength_hintlshiftrshiftand_or_xoripowimulimatmul	ifloordivitruedivimodiaddisubilshiftirshiftiandixoriorindextensorrD   updatevaluesr]   __dict__)fnsrD   s     rU   _constant_fold_functionsz(BuiltinVariable._constant_fold_functions   sL   9
9
9
 9
 	9

 9
 9
 9
 9
 9
 9
 9
 9
 9
 9
 9
  !9
" #9
$ %9
& JJ'9
( )9
* +9
, LL-9
. LL/9
0 LL19
2 MM39
4 NN59
6 OO79
8 LL99
: LL;9
< OO=9
> ?9
@ A9
B LLC9
D LLE9
F LLG9
H I9
J   K9
L OOM9
N OOO9
P MMQ9
R LLS9
T LLU9
V MMW9
X MMY9
Z [9
\ ]9
^ _9
` MMa9
b MMc9
d MMe9
f g9
h i9
j MMk9
l MMm9
n LLo9
p NNq9
t 	5

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

Wdmm224WW
rW   c                 :    | j                   | j                         v S rZ   )rM   r   selfs    rU   can_constant_fold_throughz)BuiltinVariable.can_constant_fold_through   s    ww$77999rW   c                     h t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                   t         j"                  t         j$                  t         j&                  t         j(                  t         j*                  t         j,                  t         j.                  t         j0                  t         j2                  t         j4                  t         j6                  t         j8                  t         j:                  t         j<                  t         j>                  t         j@                  t         jB                  t         jD                  t         jF                  t         jH                  t         jJ                  t         jL                  t         jN                  } | S rZ   )(rw   rc   rx   ry   rz   r|   rq   r}   r~   r   r   r   r   ltgtgeleneeqr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s    rU   _fx_graph_functionsz#BuiltinVariable._fx_graph_functions   sQ   (
LL(
LL(
 LL(
 MM	(

 OO(
 LL(
 LL(
 OO(
 (
 (
 LL(
 LL(
 KK(
 KK(
 KK(
  KK!(
" KK#(
$ KK%(
& LL'(
(   )(
* OO+(
, OO-(
. MM/(
0 LL1(
2 LL3(
4 MM5(
6 MM7(
8 9(
: ;(
< =(
> ?(
@ MMA(
B MMC(
D MME(
F G(
H I(
J MMK(
L MMM(
N LLO(
R 
rW   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__)rw   r   r   r   r   r}   r   r   r   r   r   r   r   rq   r   r   r   r   r   r   s    rU   _binopszBuiltinVariable._binops  s     LL>NLL>NLL>N?!! B""  LL>N5x}}ELL>NOO<   OO<  'U
> 
rW   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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 )Nr0   )BaseUserFunctionVariableUserFunctionVariableNNModuleVariable)supported_const_comparison_ops)BaseTorchVariable)UserDefinedClassVariablerH   rI   )forward_namereverse_namec                p    t        |      r|j                  | ||gi       S |j                  | ||gi       S rZ   )r[   call_method)txabr   r   rI   s        rU   user_defined_handlerz=BuiltinVariable._binop_handlers.<locals>.user_defined_handlerV  s>    , a!45==\A3CC==\A3CCrW   )r   c                ,    |j                  | ||gi       S rZ   r   )r   r   r   r   s       rU   user_defined_inplace_handlerzEBuiltinVariable._binop_handlers.<locals>.user_defined_inplace_handlerx  s     }}RsB??rW   rM   c          
      p    ddl m}  ||  | j                  j                  d|gt	        ||gi              S Nr0   wrap_fx_proxycall_function)builderr   outputcreate_proxyr-   )r   r   r   rM   r   s        rU   dynamic_handlerz8BuiltinVariable._binop_handlers.<locals>.dynamic_handler  sA    2$*BII**'.?A.K rW   c                 R    t        g |j                  |j                  |             S rZ   )rB   itemsunpack_var_sequencer   r   r   s      rU   tuple_add_handlerz:BuiltinVariable._binop_handlers.<locals>.tuple_add_handler  s'     !G177!GQ-B-B2-F!GHHrW   c                 R    t        g |j                  |j                  |             S rZ   )r@   r   r   r   s      rU   size_add_handlerz9BuiltinVariable._binop_handlers.<locals>.size_add_handler  s'     F!'' FA,A,A",E FGGrW   c                 R    t        g |j                  |       |j                        S rZ   )rB   r   r   r   s      rU   <lambda>z1BuiltinVariable._binop_handlers.<locals>.<lambda>  s/    ..r2" rW   c                 f    t        g |j                  |j                  |       t                     S Nmutation_type)r?   r   r   r1   r   s      rU   r   z1BuiltinVariable._binop_handlers.<locals>.<lambda>  s-    :agg: 5 5b 9:"2"4" rW   c                 T     t        |      g |j                  |j                        S rZ   )r\   r   r   s      rU   r   z1BuiltinVariable._binop_handlers.<locals>.<lambda>  s.    a" rW   c                     |j                         s|j                  |       sy |j                  |       }| j                  j                  j                  |       |j                  j                  |       |S rZ   )is_immutablehas_unpack_var_sequencer   r   side_effectsmutationr   extend)r   r   r   seqs       rU   list_iadd_handlerz:BuiltinVariable._binop_handlers.<locals>.list_iadd_handler  sY    ~~q'@'@'D''+CII""++A.GGNN3HrW   c                     t        |t              r||}}|j                  |j                  |j	                         z  t                     S )N)r   r   )r[   r4   	__class__r   as_python_constantr1   )r   lstconsts      rU   expand_list_likez9BuiltinVariable._binop_handlers.<locals>.expand_list_like  sG    #/0"CU==ii%":":"<<.0 !  rW   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                 P    t         |j                  |j                              S rZ   )r4   rT   r   r   r   ops      rU   compare_by_valuezYBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.compare_by_value  s    '177AGG(<==rW   c                 d    | j                  t        j                  | t                 ||gi       S rZ   )inline_user_function_returnr2   buildpolyfill_fn_mappingr  s      rU   handlerzPBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.handler6  s6    99'--b2Eb2IJQPQFTV rW   is_c                     t              S rZ   r3   )r   r   r   none_results      rU   neverzNBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.neverF  s    +K88rW   c                 P    t         |j                  |j                              S rZ   )r4   rM   r  s      rU   r   zQBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.<lambda>k  s    -=bqttn-M rW   c                     t         | j                  j                  |j                        | j                  j                  |j                                    S rZ   )r4   r   get_submodule
module_keyr  s      rU   r   zQBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.<lambda>r  sA    -= "$&II$;$;ALL$I$&II$;$;ALL$I!". rW   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 )Nr  )r\   r4   create__name__r+   r   ExceptionVariableexc_type)r   leftrightr  s      rU   	handle_iszRBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.handle_is  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rW   r   rJ   )r4   r  rL   r   rE   r2   _comparison_with_symnodeappendr   r  
startswithobjectrF   r=   r7   r6   r5   _comparison_with_tensor)r  r  resultop_varr  r  obj_op_nonenone_op_objtypes_that_are_never_noner  r  r   r   r   r   rH   rI   r   r   s   `         @rU   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MrW   r  )!	functionsr   r   	nn_moduler   r   r   torchr   user_definedr   rH   rI   rL   r   r   r  r2   rE   r@   rB   r4   r?   r=   r>   rw   r   r   r   r}   rD   r   rg   )op_handlersr  magic_method_namesin_place_opr   r   inplace_namer   r   r   r   r   list_like_addition_handlersr   list_like_iadd_handlersr  list_like_expansion_handlersr(  r   r   r   r   rH   rI   r   r   s                     @@@@@@@@rU   _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G,
 	$j 	HLL!(()DE	" /!
 .!
  01!
 	 & 	HMM"))*AB	 ,-/?@-.0@A-/?@.0@A	
 	% 	HLL!(()EFX	 X	t +113 	9BB<<[(((4R8KO	9
 rW   c                     t         j                         j                  |       }|y g }|D ]3  \  \  }}}t        ||      st        ||      s#|j	                  |       5 |S rZ   )rL   r4  get
issubclassr  )r  a_typeb_typehandlersmatchestype1type2r  s           rU   _find_binop_handlerz#BuiltinVariable._find_binop_handler  sg    "22488<'/ 	(#NUEG&%(Z-Fw'	( rW   c                 :    | j                   | j                         v S rZ   )rM   r   r   s    rU   can_insert_in_graphz#BuiltinVariable.can_insert_in_graph  s    ww$22444rW   c                 2    t        |   di | || _        y )N )super__init__rM   )r   rM   kwargsr   s      rU   rD  zBuiltinVariable.__init__  s    "6"rW   c                     | j                   d}n| j                   j                  }| j                  j                   d| dS )NNone())rM   r  r   )r   names     rU   __repr__zBuiltinVariable.__repr__  s=    77?D77##D..))*!D633rW   c                     | j                   S rZ   r   r   s    rU   r   z"BuiltinVariable.as_python_constant  s    wwrW   c                     t         t        j                   t        t        j                  t        t        j
                  i}| j                  |v r|| j                     S t        | !         S rZ   )	rf   r+  rl   int64rj   float64rM   rC  as_proxy)r   DTYPEr   s     rU   rP  zBuiltinVariable.as_proxy  sO    %**5==

 77e>!w!!rW   c                     | j                   j                  }| j                   j                  dk(  sJ ||j                  j                  vsJ d       |j                  |j                  |d             y )Nbuiltinszshadowed globalT)r   )rM   r  
__module__r   	f_globalsappend_outputcreate_load_global)r   codegenrJ  s      rU   reconstructzBuiltinVariable.reconstruct  se    wwww!!Z///7::///B1BB/g8848HIrW   c                     t        ||      S rZ   )r!   r   argsrE  s      rU   constant_argszBuiltinVariable.constant_args  s    "400rW   c                     d}|D ]<  }t        |t        j                        r y|xs t        |t        j                        }> |S NF)r[   r   GetAttrVariablerF   )r   r\  
any_tensorargs       rU   tensor_argszBuiltinVariable.tensor_args  sJ    
 	QC#y889#Pz#y7O7O'PJ	Q rW   c                     d}|D ]<  }t        |t        j                        r y|xs t        |t        j                        }> |S r_  )r7  r   r`  rF   )r   	arg_typesra  arg_types       rU   tensor_args_typez BuiltinVariable.tensor_args_type  sJ    
! 	VH(I$=$=>#Uz(I<T<T'UJ	V rW   c                    g }g }t        j                  ||j                               D ]?  }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_  )rP   r   )r`   ts     rU   rb   zBBuiltinVariable.python_and_tensor_constant_only.<locals>.<genexpr>  s0      
 -.HH,@qxx(eK
s   -/)		itertoolschainr   r[   r   rF   r  rd   r]  )r   r\  rE  rc  non_tensor_argsis         rU   python_and_tensor_constant_onlyz/BuiltinVariable.python_and_tensor_constant_only  s    v}}7 	*A!Y556""1%&&q)		*
  
 
 
 3 !d  /2	3rW   c                     | D cg c]  }|j                          c}|j                         D ci c]  \  }}||j                          c}}fS c c}w c c}}w rZ   )r   r   )r\  rE  ra   kvs        rU   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 rZ   )r   r#   r[  s      rU   has_constant_handlerz$BuiltinVariable.has_constant_handler  s%    --/ 
4Q&5
 	
rW   re  
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 )Nr0   )LazyVariableTrackerc              3   6   K   | ]  }t        |        y wrZ   )r7  )r`   rj  rx  s     rU   rb   z0BuiltinVariable._make_handler.<locals>.<genexpr>  s     Eaz!01Es   c                 l    j                  | |D cg c]  }|j                          c}|      S c c}w rZ   )r   realize)r   r\  rE  rr  objs       rU   r   z/BuiltinVariable._make_handler.<locals>.<lambda>  s-    C,=,=$/QQYY[/- /s   1
c                 |    t         u rt        d |D              st        d       t        j                  |fi |S )Nc              3      K   | ]:  }t        |t        j                        xr t        |j                  t               < y wrZ   )r[   r   r4   rT   rt   r_   s     rU   rb   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 message)AssertionErrorrd   r   r   r  )r   r\  rE  rM   s      rU   create_exception_class_objectzDBuiltinVariable._make_handler.<locals>.create_exception_class_object!  sF     ' 4 "4 1
 ""BC 222tFvFFrW   r   r   c                      | g| S rZ   rB  )r   r\  _binop_handlers      rU   r   z/BuiltinVariable._make_handler.<locals>.<lambda>B  s    M"4Lt4L rW   c                 2    D ]  } || g| }|s|c S  y rZ   rB  )r   r\  r  rM   rvbinop_handlerss        rU   call_binop_handlersz:BuiltinVariable._make_handler.<locals>.call_binop_handlersE  s'    , &]T]#%I&rW   call_c           
         	  | g|i |}||S y # t         $ r 	  t        j                        j                  | g|i |  # t         $ rP}j	                  ||      }|s1t
        j                  d|       t        d d| d|        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 handler args  )
	TypeErrorinspect	signaturebindru  logwarningr   r   remove_from_stats)	r   r\  rE  r#  eru  excr|  self_handlers	          rU   call_self_handlerz8BuiltinVariable._make_handler.<locals>.call_self_handlerP  s   ,)">t>v>F)% *  <)),7<<RQ$Q&Q  % 
/2/G/Gf/U,3KK S , !
 *"7~QtfAfX V   4
 # ,+.+C+CD&+Q(/))++,sD    	C)AC	B!?BCCB!!C,%CCc              3   <   K   | ]  }t        |t                y wrZ   )r7  r4   r_   s     rU   rb   z0BuiltinVariable._make_handler.<locals>.<genexpr>r  s     GJq"23G   c                     	  |D cg c]  }|j                          c} }t	        j
                  |       S c c}w # t        $ r!}t        dt        |              Y d }~@d }~ww xY wNzconstant fold exception: )r   	Exceptionr   rr   r2   r
  )r   r\  rE  ra   resr  rM   s         rU   constant_fold_handlerz<BuiltinVariable._make_handler.<locals>.constant_fold_handlerv  sn    O >BCa224C
 +00S99	 D$ O%(A$s)&MNNOs!   ? :? ? 	A)A$$A)c                 d   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        $ r!}t	        dt        |              Y d }~Gd }~ww xY wr  )r#   r   r   r  r   rr   r2   r
  )	r   r\  rE  ra   rq  rr  r  r  rM   s	           rU   r  z<BuiltinVariable._make_handler.<locals>.constant_fold_handler  s    4T6BS"$BF!GQ!"6"6"8!G# KQ,,.#"BF!QAq';';'=$=#"#C  /44R== C "H#"  ) S),Ed3i[*QRRSs3   B A:B A?B :B 	B/B**B/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 rI  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.)gb_typecontextexplanationhints)python_type_namer   r  )r\  rb  real_arg_typesre  rM   rv  s      rU   call_unimplemented_v2z<BuiltinVariable._make_handler.<locals>.call_unimplemented_v2  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 rZ   rB  )r   r\  rE  r  s      rU   r   z/BuiltinVariable._make_handler.<locals>.<lambda>  s    ,A$,G rW   c                 2     | ||      }|r|S  |       y rZ   rB  )r   r\  rE  r  r  r  s       rU   builtin_dispatchz7BuiltinVariable._make_handler.<locals>.builtin_dispatch  s!    Rv.I%d+rW   c                 D    D ]  } || ||      }|s|c S   |       y rZ   rB  )r   r\  rE  rM   r  r  r:  s        rU   r  z7BuiltinVariable._make_handler.<locals>.builtin_dispatch  s2    " "BBf-B!	" &d+rW   r  )lazyrx  rL   re   r  isclassr7  r  GeneratorExitr@  rw   r   r   rF   rg  _handle_insert_op_in_graphr  rm   r>  rk   r  r   rd   )rM   re  rv  r  r  r  r  r  rx  r  r  r  r  r:  r|  r  s   ```     @@@@@@@@rU   _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@,< OO-.((*GYGG":> OO12	  x=AGG]a!JW,  ,  rW   r   rJ   c           	         ddl m}m} |r# | j                  g ||j	                          sy ddl m} ddlm}m}m	}	m
}
  |	|||      r|j                  sct        |d   t              s@| j                  |v r|| j                     }n|| j                     }|d   }|d   |d<   ||d<   n|| j                     }n| j                  }|j                  ||      } |
||||      S | j                  }	  | j                   |i |r(ddlm} ddlm}  ||| ||j*                        ||      S |t,        v r0t        |d   t.        j0                        rt,        |   |d   |d   g}}|t2        j4                  u rKt        |d   t6              r8t8        j:                  |d   t.        j0                  j                  d      |d   g}}t=        ||      r[t?        d	 |D              sI |j@                  jB                  d
tE        |      gtG        ||       } |t.        jH                  ||      S  |j@                  jB                  d
|gtG        ||       }t?        d |D              r |tJ        ||      S tM        ||      rb| jO                  ||      \  }} ||i |}t?        d tQ        jR                  ||j	                               D              } |tT        ||||      S tW        d |D              rt7        j                  ||d       S |t2        jX                  u r3t        |d   t.        jT                        r|d   j[                         |d<    |||      S # t\        $ r t_        d|  d| d|        Y y w xY w)Nr0   )r   wrap_fx_proxy_cls)SourcelessBuilder)BUILTIN_TO_TENSOR_FN_MAPBUILTIN_TO_TENSOR_RFN_MAPcan_dispatch_torch_functiondispatch_torch_functionr   r   )	unique_id)invoke_and_store_as_constantc              3   T   K   | ]   }t        |      t        j                  k(   " y wrZ   )r\   r   rF   r`   rb  s     rU   rb   z=BuiltinVariable._handle_insert_op_in_graph.<locals>.<genexpr>  s&      B:=S	Y555Bs   &(r   c              3   <   K   | ]  }t        |t                y wrZ   r[   rC   r  s     rU   rb   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rZ   r[   r   rG   need_unwrapr_   s     rU   rb   z=BuiltinVariable._handle_insert_op_in_graph.<locals>.<genexpr>  ,      "!!Y%J%JK MM"   02)	raw_valuer  c              3   <   K   | ]  }t        |t                y wrZ   r[   rE   r_   s     rU   rb   z=BuiltinVariable._handle_insert_op_in_graph.<locals>.<genexpr>+  s     BZ?3Br  zpartial tensor op: r  )0r   r   r  rc  r   r  torch_functionr  r  r  r  exportr[   rF   rM   r  ro  bytecode_transformationr  r)  r  r  IN_PLACE_DESUGARING_MAPr   r4   rw   r   rE   r+  selectr"   re   r   r   r,   r-   NumpyNdarrayVariablerC   r$   rs  rk  rl  rG   rd   r   r   NotImplementedErrorr   )r   r   r\  rE  r   r  r  r  r  r  r  functmpfn_varrM   r  r  proxy_args_kwargsr  r  s                         rU   r  z*BuiltinVariable._handle_insert_op_in_graph  s   =*$**CDC6==?C 	/	
 	
 'r48 99!$q'>:ww";;8A7@q'C"1gDG!DG3DGG<Dww&--b$7F*2vtVDDWWW	H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*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//" 	H/vQtfAfXFG	Hs4   /9M )C;M %AM -A-M (M AM M21M2call_function_handler_cacher\  r2   rE  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rZ   r\   r_   s     rU   rb   z0BuiltinVariable.call_function.<locals>.<genexpr>N       4!d1g4   Tc              3   2   K   | ]  }t        |        y wrZ   r  r_   s     rU   rb   z0BuiltinVariable.call_function.<locals>.<genexpr>P  r  r  )r   r{  rM   r  r6  r  r\   rf   )	r   r   r\  rE  rq  rr  keyr  ra   s	            rU   r   zBuiltinVariable.call_functionE  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                    | 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(  rA| 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|s|d   j%                  |      }	t'        j(                  |	t                     }
t	        |d   t              r|d   j                   t         u r|
S |j                  j                  j                  | |d   |dd        }|j+                  |
       |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 r|dk(  rt'        j0                  d       S | j                   t        u r#|d	k(  rt        j2                  |t        g|i |S | j                   t        u rt5        | j                   |      }|t6        v rxt	        |d   t&        j8                        r$|d   j:                  j=                  |||dd  |      S t	        |d   t&        j                        r|d   j=                  |||dd  |      S | j                   t>        u rYt        |      dk\  rKt5        | j                   |      }|t@        v r-t	        |d   t0              r|d   j=                  |||dd  |      S tB        | y  ||||      S )
N__setattr__   r   __new__r0   r   r   rD  fromkeys)"rM   r!  rm   r{  r[   rH   r   r   is_attribute_mutationis_python_constantmethod_setattr_standardtrack_new_user_defined_objectdictr7   r1   rL   tupler   r   r   rB   set_underlying_tuple_vtlistr?   r4   call_custom_dict_fromkeysrk   r&   UserDefinedDictVariable_dict_vtr   rt   r.   rC  )r   r   rJ  r\  rE  r|  name_varvaldict_vt	init_argstuple_vtr#  list_vtresolved_fnr   s                 rU   r   zBuiltinVariable.call_methodY  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33B7 G77;	$22-=-? d1g7DGJJ%<O#O//MMGH
 ..x8ww$&r9I9KLd1g7DGJJ$<N"Nyy--KKGH  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>c$i1n!$''40Kk)d1g'787..r4ab6JJw"2tT6::rW   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[   rE   r   rF   r   rM   rl   r   r
   torch._dynamo.variables.builderr   r   r   rP  )r   r   rb  r  fn_r   s         rU   _call_int_floatzBuiltinVariable._call_int_float  s     cOY-E-EFG#y778r62r:!WW^'CE ii,,#]]_&	  HrW   c                    t        |t        j                        r3t        j                  j	                  t        |j                              S t        |t        j                        rt        |j                  d      r|j                  j                  }n8t        |j                  d      r|j                  j                  }nt        d       t        |j                        j                  t        j                  u r&	 t        j                  j	                                S t!              r"t        t        |j                         d       y |j"                  }	 t        j                  |      }|j+                  ||gi       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)rT   __str__rK  z5user defined object has no __str__ or __repr__ methodz has a C/C++ based str methodz)Failed to create UserFunctionVariable: %s)r[   r   r   r4   r  rt   rM   rH   hasattrrT   r  rK  r   r\   r!  AttributeErrorr*   __func__r  r  r  r	  )r   r   rb  
str_methodbound_methoduser_func_variabler  s          rU   call_strzBuiltinVariable.call_str  sa   cI::<--443svv;4GGiAACsyy), YY..
J/ YY//
UVCII&&&..8$55<<:<<PP 1<cii 11NOP  *22)2)G)G)U& 556H3%QSTTC D &  & KK KQOs*   >$F F 	FF	F?F::F?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 )Nr0   r   r   )rm   has_force_unpack_var_sequenceforce_unpack_var_sequence_call_min_max_seq_call_min_max_binary)r   r   r\  r   s       rU   _call_min_maxzBuiltinVariable._call_min_max  s    t9>d1gCCBGG55b9E))"e44Y!^,,Ra$q'BBY]))"d33 rW   c                     t        |      dkD  sJ t        |      dk(  r|d   S t        j                  t        j                  | j                  |      |      S Nr   r0   )rm   	functoolsreducepartialr  )r   r   r   s      rU   r  z!BuiltinVariable._call_min_max_seq  sM    5zA~~u:?8O	 1 1$2K2KR PRWXXrW   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 )Nr0   r  r   r  r   ro   rn   c              3   p   K   | ].  }t        |t        j                  t        j                  f       0 y wrZ   )r[   r   rG   r4   )r`   rn  s     rU   rb   z7BuiltinVariable._call_min_max_binary.<locals>.<genexpr>;  s9      	  !==!22	s   46c              3   <   K   | ]  }t        |t                y wrZ   r  )r`   r  s     rU   rb   z7BuiltinVariable._call_min_max_binary.<locals>.<genexpr>E  s     KSz#'78Kr  c              3   h   K   | ]*  }t        |t        j                        r|j                   , y wrZ   r  r_   s     rU   rb   z7BuiltinVariable._call_min_max_binary.<locals>.<genexpr>Q  r  r  )%rc  r[   r   rF   rC   TorchInGraphFunctionVariabler+  r   r   rE   r   r  r\   r   r   rM   r-   r  r  numpyNumpyVariableclipclamprn   maximumro   minimumrd   re   from_tensor_variabler   r  rG   sym_maxsym_minr  r4   )r   r   r   r   r  nprM   rE  r#  np_fntorch_fnraw_braw_resr  py_fnr  rT   s                    rU   r  z$BuiltinVariable._call_min_max_binary  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,rW   rb  c                     t        t              j                  ||t        j                  d      gi       }|j                  |g i       S )N__abs__rL   rk   r   r4   r  )r   r   rb  
abs_methods       rU   call_abszBuiltinVariable.call_absl  F    $W-;;&--i892

 ''B33rW   c                     t        t              j                  ||t        j                  d      gi       }|j                  |g i       S )N__pos__r"  )r   r   rb  
pos_methods       rU   call_poszBuiltinVariable.call_poss  r%  rW   c                     t        |t        j                        rt        d       t	        |      }t        j                  |      }t        j                  j                  |      S )Nzunsupported index(tensor))	r[   r   rF   r   r)   rw   r   r4   r  )r   r   rb  constant_values       rU   
call_indexzBuiltinVariable.call_indexz  sJ    c9334563!,))00@@rW   c                     t        t              j                  ||t        j                  d      gi       }|j                  |||      S )N	__round__r"  )r   r   rb  r\  rE  round_methods         rU   
call_roundzBuiltinVariable.call_round  sF    &w/==&--k:;R
 ))"dF;;rW   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rZ   )r   r4   r  r)   r  s     rU   rb   z-BuiltinVariable.call_range.<locals>.<genexpr>  s+      IL	**11,s2CD   24)r#   r   RangeVariable_dynamic_argsr  r   r   r\  s      rU   
call_rangezBuiltinVariable.call_range  sZ    (r2**400T& PT D **400rW   c                 j    t        d |D              xs  t        d |j                         D              S )Nc              3   <   K   | ]  }t        |t                y wrZ   r  r_   s     rU   rb   z0BuiltinVariable._dynamic_args.<locals>.<genexpr>  s     @a:a1@r  c              3   <   K   | ]  }t        |t                y wrZ   r  r_   s     rU   rb   z0BuiltinVariable._dynamic_args.<locals>.<genexpr>  s      H
/0Jq/*H
r  )re   r   r[  s      rU   r5  zBuiltinVariable._dynamic_args  s7    @4@@ 
C H
4:MMOH
 E
 	
rW   c                 ,    t        j                  |      S rZ   )r   SliceVariabler6  s      rU   
call_slicezBuiltinVariable.call_slice  s    &&t,,rW   c           
          ddl m}  || |j                  j                  d| j                  gt        ||             S r   )r   r   r   r   rM   r-   )r   r   r\  rE  r   s        rU   
_dyn_proxyzBuiltinVariable._dyn_proxy  sA    *"BII""+<T6+J
 	
rW   c                 ~   t        |t        j                        rJ  | j                  |i |r | j                  |g|i |S t        j
                  j                  | j                        }| |g t                     S |j                  |      r*|j                  rt        |j                        st        |t              r3t        |j                  j                  t        j                                nt#        |dd      r]t        |t$              rMt'        |t(              s=|j*                  j,                  j/                  |j                  j1                                t        |j                  j                  t        j2                                |t5        |j7                  |            t                     S y )Nr   rP   F)r[   r   IteratorVariabler5  r?  r=   cls_forrM   r1   r   rP   r   rA   r   rQ   r   TUPLE_ITERATOR_LENrk   r7   r+   r<   r   guard_on_key_orderr   rJ  SEQUENCE_LENGTHr  r   r   r   r|  r\  rE  rS   s         rU   _call_iter_tuple_listz%BuiltinVariable._call_iter_tuple_list  s[    c9#=#=>>>4t.v."4??27777((009;.0  ((,zz"4SZZ"@c#89!

--l.M.MN
  Xu5&s,=> &sK 8		44889JK!#**"7"78T8T"UVS,,R01.0 ! -rW   c                     t         j                  j                  | j                        } |t	        |j                  |            t                     S r   )r   r=   rB  rM   r  r  r1   rF  s         rU   _call_iter_tuple_generatorz*BuiltinVariable._call_iter_tuple_generator  sB    ((009..r23*,
 	
rW   c                 l   t        |t        j                        rSt        j                  j	                  | j
                        } |t        |j                  |            t                     S t        |t        j                        r | j                  ||g|i |S  | j                  ||g|i |S r   )r[   r   rA  r=   rB  rM   r  r  r1   LocalGeneratorObjectVariablerI  rG  rF  s         rU   _call_tuple_listz BuiltinVariable._call_tuple_list  s    c9556,,44TWW=CS22267.0  YCCD24222sLTLVLL-4--b#GGGGrW   c                     t        |t        j                        r|}n | j                  ||g|i |}||j	                  |d||      S |S )N__iter__)r[   r   rA  rG  r   )r   r   r|  r\  rE  rets         rU   	call_iterzBuiltinVariable.call_iter  sX    c9556C -$,,RFtFvFC; ??2z4@@
rW   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 )Nr0   )r   FunctoolsPartialVariabler   TF)r)  r   rR  r*  r   r[   r   r   r4   r  rI   rg   rT   rE   rF   r?   rB   r>   )r   r   rb  r   rR  r   s         rU   call_callablezBuiltinVariable.call_callable  s    Q/22(( 	
 --44T::01--44Xcii5HII $

 --44U;;

rW   c                 L    t        |      dk(  r|d   S t        d| d|        y )Nr   r0   z$unsupported args to builtin cast(): r  )rm   r   )r   r  r\  rE  s       rU   	call_castzBuiltinVariable.call_cast  s,    t9>7N<TF!F8LMrW   c                 >    t        j                  |t        g|i |S rZ   )rL   call_custom_dictr  r   r   r\  rE  s       rU   	call_dictzBuiltinVariable.call_dict  s    //DJ4J6JJrW   c                     | j                  t        j                  | t        j                        t        j                  | |      g||      S rZ   )r	  r2   r
  r   construct_dict)r   user_clsr\  rE  s       rU   rW  z BuiltinVariable.call_custom_dict  sF    --!!"i&>&>?""2x0848
 	
rW   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        t        d      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%        |j&                   d| d	|        y c c}w )
Nr0   rT   r   z,fromkeys expected at least 1 argument, got 0r   r   c              3   2   K   | ]  }t        |        y wrZ   )r;   )r`   rr  s     rU   rb   z<BuiltinVariable.call_custom_dict_fromkeys.<locals>.<genexpr>7  s     0a;q>0r  z.fromkeys(): r  )r  r   r   rm   popr   r  r4   r  r7   r8   r[   keysr  r1   r  r  rd   r   r  )	r   r\  r\  rE  rb  rT   DictVariableTyperq  r`  s	            rU   r  z)BuiltinVariable.call_custom_dict_fromkeys  s    D+{;;;;{***t9>c&kQ&67f;LLL/T/6::g./Dt9>I'UVV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 
 	**+=axHI Cs   +F)c                    |rJ |st        g t                     S t        |      dk(  sJ |d   }t        |t        j                         r|j                  t                     S |j                  |      r&|j                  |      }t        |t                     S t        |t        j                        rt        |j                  t              r|j                  |d      }t        |t        j                        rD|j                  |||      }t        |t               r|S t        t              j!                  ||      S t#        d| d|        y t#        d| d|        y )Nr   r0   r   rN  zset(): r  )r<   r1   rm   r[   r   cloner  r  rH   rT   r   var_getattrUserMethodVariabler	  rL   setcall_setr   )r   r   r\  rE  rb  r   iter_fnouts           rU   rg  zBuiltinVariable.call_set?  s3   zr1A1CDD4yA~~1gc9001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==vQvh78GD66(34rW   c                 d   |rJ |st        g       S t        |      dk(  sJ |d   }t        |t        j                         r-t        |j                  D cg c]  }|j
                   c}      S |j                  |      r|j                  |      }t        |      S t        d| d|        y c c}w )Nr0   r   zfrozenset(): r  )	r:   rm   r[   r   	set_itemsvtr   r   r   )r   r   r\  rE  rb  ra   r   s          rU   call_frozensetzBuiltinVariable.call_frozensetY  s    z$R((4yA~~1gc9667$CMM%Bqadd%BCC((,++B/E$U++M$q9: &Cs   B-c                     |rt        |      dk(  rd|v sJ |j                  dd      }|D cg c]&  }|j                  |      r|j                  |      n|( }}t	        j
                  ||t                     S c c}w )Nr0   strictF)ro  r   )rm   r_  r   r   r   ZipVariabler1   )r   r   r\  rE  ro  rb  s         rU   call_zipzBuiltinVariable.call_zipg  s    v;!#F(:::He, 
 ,/+F+Fr+JC##B'PSS
 
 $$/?/A
 	
	
s   +A:c                 6    |d   j                  |d|dd  |      S )Nr   __len__r0   r   rX  s       rU   call_lenzBuiltinVariable.call_lens  s#    Aw""2y$qr(FCCrW   c                 6    |d   j                  |d|dd  |      S )Nr   __getitem__r0   r   rX  s       rU   call_getitemzBuiltinVariable.call_getitemv  s#    Aw""2}d12hGGrW   c           	      n   	 j                         }|j                         }t	        t
        j                        r7j                  +fd}t
        j                  j                   ||            S t	        t
        j                        r5t	        j                  t        j                        rt        d d|        t	        t
        j                        r[d|j                  j                  v rCt
        j                  j                  |j                  j!                  |j                              S t	        |t"              st%        t'        |dd             r|f}nrt(        j*                  dk\  r't	        |t        j,                        r|j.                  }n8t	        |t0              rt3        d	 |D              r|}nt5        t6        |d
g       	 t9              }t
        j                  j                  |      S # t        $ r t        d d| d        Y w xY w# t6        $ r v }Y Rw xY w)Nzisinstance(, z): can't determine type of 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)r/   rP  nodemetar   r+  nn	parameter	Parameterr[   r7  python_typedtype)tyexample_valdtypesrb  s      rU   
check_typezOBuiltinVariable.call_isinstance.<locals>._tensor_isinstance.<locals>.check_type  s    !44&)lln&9&9&>&>&O9+F "ehh&8&8&B&B B
 $.k2#>>#-coo.?#DD04F99..rW   c              3   .   K   | ]  } |        y wrZ   rB  )r`   r  r  s     rU   rb   zNBuiltinVariable.call_isinstance.<locals>._tensor_isinstance.<locals>.<genexpr>  s     D"z"~Ds   )r\   r  re   )
tensor_vartensor_typer  rb  s     @rU   _tensor_isinstancez;BuiltinVariable.call_isinstance.<locals>._tensor_isinstance  s3    /" $-DDDD%k22rW   z&isinstance called on UserDefinedClass r  __instancecheck__)r  
   c              3   l   K   | ],  }t        |t              xs t        t        |d d             . yw)r  N)r[   r\   rg   rk   )r`   tps     rU   rb   z2BuiltinVariable.call_isinstance.<locals>.<genexpr>  s6      8
 r4 THWR9Ld-S$TT8
r3  z?isinstance() arg 2 must be a type, a tuple of types, or a union)r\  )r  r  r   r   r[   r   rF   r  r4   r  rH   rT   typesMemberDescriptorTyper   r   r  r\   rg   rk   sysversion_info	UnionType__args__r  rd   r   r  r7  )r   r   rb  isinstance_typerf  r  isinstance_type_tupler  s     `     rU   call_isinstancezBuiltinVariable.call_isinstancey  s   	(H *<<>c93349N3. --44"38 
 c9>>?JIIu11E
 8Q>OP
 sI??@#'@'@'I'II--44));;OSYYW 
 ot,O%8$?1
 &5$6!(ZU__.
 %4$<$<!/C 8
%8
 5
 %4!$U
	4 X'<=C ))0055o # 	cU"_$55PQTPUV	j  	433C	4s#   H  H$  H! H!$H43H4c                     	 |j                         }|j                         }t        j                  t                    S # t        $ r t        d| d|        Y ;w xY w)z,Checks if first arg is subclass of right argz+call_issubclass args not constant left_ty: z, right_ty: )r   r  r   r   r4   r7  )r   r   left_tyright_ty
left_ty_pyright_ty_pys         rU   call_issubclasszBuiltinVariable.call_issubclass  sh    	 335J"557K ))*Z*MNN # 	=gYlS[R\]	s    A AAc                 .    t        j                  ||      S rZ   )r   SuperVariabler   r   r   r   s       rU   
call_superzBuiltinVariable.call_super  s    &&q!,,rW   c                     	 |j                  |      S # t        $ rD}t        |t        j                        r$|j                          |j                  d   cY d }~S  d }~ww xY w)Nr   )next_variabler   r[   r   r=   r  r   )r   r   rb  exs       rU   	call_nextzBuiltinVariable.call_next  sU    	$$R(( 	#y99:$$&yy|#		s     	A 8AA AA c                     |j                         re|j                         }t        |t        j                        r)t        j
                  t        |j                  |            S |j                  ||      S y rZ   )	r  r   r[   r   rL   r4   r  rM   call_obj_hasattr)r   r   r|  attrrJ  s        rU   call_hasattrzBuiltinVariable.call_hasattr  s`    ""$**,D#y889 11'#&&$2GHH''D11	 %rW   c                     |D cg c]&  }|j                  |      r|j                  |      n|( }}t        j                  ||t	                     S c c}w r   )r   r   r   MapVariabler1   )r   r   rM   seqsr   s        rU   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 r   )r   r   r   FilterVariabler1   )r   r   rM   r   s       rU   call_filterzBuiltinVariable.call_filter  s;    -0-H-H-Lc%%b)RU''C?O?QRRrW   r|  r  c                 &
   |j                         }|j                         st        d       |j                  j                  j                  |      r^t        |t        j                        rD|dv r@|j                  r4|j                  j                  j                  |      rt        d|d       |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(                  ||j.                  |      S |d
k(  rt1        j2                  |j4                        S t        |t        j8                        r|j;                  ||      S t        |t        j<                  t        j>                  t        j0                  t        j@                  t        jB                  t        jD                  f      r	 |j;                  ||      S t        |t        jH                        rtK        |jL                  |      }t        |tN        jP                  jR                  tN        jP                  jT                  f      r@tN        jV                  jX                  j[                  |      rt        jH                  ||      S |t\        v rt        jF                  |||      S y t        |t^              r|j`                  s||jL                  jb                  vrtK        |jL                  |      }n|jL                  jb                  |   }td        jf                  r'|jh                  jk                  |jL                  ||       t'        j(                  |||      S tm        |t        jn                        r-|dv r)t1        j2                  tK        |jp                  |            S 	 |j;                  ||      S c c}
}	w # t6        $ r Y w xY w# t6        $ r t        jF                  |||      cY S w xY w# t6        $ r t        jF                  |||      cY S w xY w)Nznon-const getattr() name)named_parameters
parametersnamed_buffersbuffersnamed_modulesmodulesz4pending mutation on nn module, so graph breaking at z call)TF>   __base__	__bases__	__flags__r  rO   r  r  )r  rT  )9r   r  r   r   r   r  r[   r   UnspecializedNNModuleVariableis_state_mutatedhas_pending_mutationhas_pending_mutation_of_attr	load_attrr  rP   r   r\   	enumerater  r2   r
  r   rB   r  r4   r  r  r  r   rd  rF   NamedTupleVariableDistributedVariabler   rH   r`  r  rk   rT   r+  _opsOpOverloadPacket
OpOverload_dynamotrace_rulesis_aten_op_or_tensor_methodr%   r   is_torchr   r   replay_record_enabledexec_recorderrecord_module_accessr+   r   rM   )r   r   r|  r  defaultrJ  hasattr_varrP   rT   rn  r   
tuple_argsmembers                rU   call_getattrzBuiltinVariable.call_getattr  sE    **,**,4599!!77<#yFFG ,,		..CCCH!NthV[\ 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

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0u& ' $ ' K 00d6JJK< ' K 00d6JJKsT   =R5 /R/R5 %%R5 #R5 S S, /R5 5	SS!S)(S),!TTr  c                 x   t        |t        j                  t        j                  t        j                  t        j
                  f      r|j                  |d||gi       S |j                  j                  j                  |      r|j                         r|j                         }t        |t        j                        r^ddlm} |dk(  rt        d       |dk(  rB|j                  j                   D cg c]  }|j"                  |j"                  k(  s|  }}|D ]'  }|j                  j                   j%                  |       ) t'        |      5  t)        j*                         5   || |j                  j,                  dt(        j.                  j0                  gt3        ||gi              }	d d d        d d d        d }
|j                  j-                  d|
	j5                         fi         |
|j5                         j6                  j8                  d	          |	S |j                  j                  j;                  |||       |d
k(  r'|j                  j                  j;                  |d|       |S t        |t        j                        r,t        dt=        |j>                        j@                          y t        |t        jB                        r0|j                  jE                         stG        d      |j                         rt        |t        j                        rtI        |j5                         j6                  |      }	 |jK                  ||j                               }t        |t        j                        rptI        |j5                         j6                  |      }tQ        jR                  |jT                  d      }||u r(|t(        jV                  jX                  j@                  u r|S |j[                  |       y y c c}w # 1 sw Y   ]xY w# 1 sw Y   bxY w# tL        tN        f$ r d }Y w xY w)Nr  r0   r   requires_gradzmutating requires_grad can introduce a new leaf from non-leaf or vice versa in the middle of the graph, which aot_autograd does not currently know how to handle. datar   c                     | j                   }|dkD  r|dz
  }t        j                  j                  j	                  | f|f       | S r  )_versionr+  _C	_autograd_unsafe_set_version_counter)ra   versions     rU   _lower_version_count_by_1z?BuiltinVariable.call_setattr.<locals>._lower_version_count_by_1  s>    "#**"Q;&-kG**FFtgZX rW   r|  _gradgradz#setattr(UserDefinedObjectVariable) z?Can't inplace modify module params/buffers inside HigherOrderOp).r[   r   PlacementVariabler  rH   r  r   r   r   r  r  r   rF   r   r   r   tracked_fakesrP   removedynamo_disable_gradr+  no_gradr   Tensorset_r-   rP  r}  r~  
store_attrr\   rT   r  r   is_root_tracerr   r(   rd  r  r   r  getattr_staticmodule_typer  Moduleconvert_to_unspecialized)r   r   r|  r  r  rJ  r   tf	to_removeri  r  assigning_fake_valgetattr_varexisting_fake_attrmod_setattrs                  rU   call_setattrzBuiltinVariable.call_setattrm  s    ++,,33++	
 ??2}xorJJII""88=++-..0D#y7782?*!n 6> &(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II""--c4=w		&&11#vsCJY@@A5d399o6Q6Q5RS 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 9c!	 	 	 	l '(>? '"&K'sC   5PPP&A
P0P	 P% P	PP"%P98P9c                 N    | j                  |||t        j                               S rZ   )r  r   DeletedVariable)r   r   r|  r  s       rU   call_delattrzBuiltinVariable.call_delattr  s$       S(I4M4M4OPPrW   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_name r  )r  r  r   r   INVALID_INPUTrt   rP   r    r[   r   rH   
cls_sourcer+  r  r   install_global_by_idr   r   r2   r
  )r   r   r|  py_typeerrorrP   rJ  s          rU   	call_typezBuiltinVariable.call_type  s    	oo'G 6
3:: 6N3	 C CD^^Fell"9911"e<DT 2H=F$$R&99' # 	++E
/ 		s   C 	C;&C66C;c                     |j                  |      r8t        t        |j                  |                  }t	        j
                  |      S y rZ   )r   r  reversedr   r   rB   )r   r   r|  r   s       rU   call_reversedzBuiltinVariable.call_reversed   s@    &&r*#"9"9""=>?E**511 +rW   c                     |j                  |      r_t        |t        j                        sDt        j                  |j                  |      t                     }|j                  |dg |       |S y y )Nr   sort)r  r[   r   rF   r?   r  r1   r   )r   r   r|  rE  list_vars        rU   call_sortedzBuiltinVariable.call_sorted  sm     ,,R0)):
 !----b1.0H   VR8O:
0rW   c                     t        |t              r9t        j                  |t        j                  |j                               d       S y )Nsym_num)r[   rE   r  rw   ry   rP  r   r   r   s      rU   call_negzBuiltinVariable.call_neg  s<    a)"))qzz|,  rW   c                 z    |j                         }t        |      }t        j                  j	                  |||      S rZ   )r   rt   r   StringFormatVariabler  )r   r   _format_stringr\  rE  format_strings         rU   call_formatzBuiltinVariable.call_format   s5    &99;M*--44]D&QQrW   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|        y )Nr   r0   zcall_id with args )rm   r[   r   r   r   r  r  r4   r  idr   rH   rP   r   rQ   r   ID_MATCHrT   rF   call_idr+   r   rM   SkipFunctionVariablerR  
fake_valuer   )r   r   r\  nn_mod_variabler   constant_resulttensor_variables          rU   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.tf56rW   c                 2    t        dt        |              y )Nzcopy.deepcopy )r   rr   )r   r   ra   s      rU   call_deepcopyzBuiltinVariable.call_deepcopy>  s    tAwi01rW   c           	      J   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rt!        |j"                   d| d| d       t        |t              rnt        |t              r^|j$                  xr |j$                  D|j$                  |j$                  k7  r+	 t'        j(                  |j$                  |j$                         t        |t              r|n|}|j,                  j/                  d||j                         |j                         fi       }	 |t1        |      ||	      S # t*        $ r! t!        |j"                   d| d| d       Y w xY w)Nr0   r  %supported_tensor_comparison_op_valuesrH  ry  rI  r   )r   r  r   r  rM   rw   r  is_notr[   rF   r  r'   rP  r}  r4   r  r   r  sizer+  broadcast_shapesRuntimeErrorr   r   r\   )
r   r   r  r  r  r  r  	is_result
tensor_clsr  s
             rU   r"  z'BuiltinVariable._comparison_with_tensorA  s   .AWW(,,0040 Iun5I1$--/2F2FGH01A1F1FGHI  X\\!'..y99'..9}==::R[[M4&5';<t^,5.1)uzz6		UZZ'A&&tyy%**= (n=T5
		&&R$--/5>>3C!Db
 !
 	
   AQtfBugQ?@As   +*G8 8'H"!H"c                    ddl m} | j                  }||vrt        |j                   d| d| d       t        |t        j                        r$t        j                   |t               d             S |j                  j                  d||j                         |j                         fi       }t        j                  ||d       S )Nr0   r  rH  ry  rI  r   r  )r   r  rM   r   r  r[   r   r   r4   r!  r   r   rP  rE   r  )r   r   r  r  r  r  r  s          rU   r  z(BuiltinVariable._comparison_with_symnodej  s    AWW::R[[M4&5';< eY??@--b4.@AA		&&R$--/5>>3C!Db
 %%
 	
rW   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        |d      r8t        |d      r+t        t        |j                  |j                  z              S y y Nr   r  rk  )r[   r4   rE   r  r   r   rw   r   r-   r  r<   r  rk  r  s       rU   	call_and_zBuiltinVariable.call_and_  s    a)*z!=M/Na/+;<=*!12C
 #))&		&&#X]]5F1vr5R   1k"wq+'>tAKK!++$=>?? (?"rW   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        |d      r7t        |d      r+t        t        |j                  |j                  z              S y r'  )r[   r4   rE   r  r   r   rw   r   r-   r  r<   r  rk  r  s       rU   call_or_zBuiltinVariable.call_or_  s    a)*z!=M/Na/+;<=*!12C
 #))&		&&#X\\4Eq!fb4Q   1k"wq+'>tAKK!++$=>??rW   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   r  r   )r[   rE   r  r   r   rw   rz   r-   r9   dv_dictr?   r7   r4   rm   r   r
  s      rU   	call_not_zBuiltinVariable.call_not_  s    a)"))&		&&#X]]5FsB5O   a)*		Aa,(9:;#**3qww<1+<==rW   r   r   c                 ,    |j                  |d|gi       S )N__contains__r   r  s       rU   call_containszBuiltinVariable.call_contains  s     }}R!b99rW   )r   N)rX  ztorch._dynamo.codegen.PyCodegenr  )r\  zlist[VariableTracker]rE  r  r   r2   )r   rJ   rb  r2   rZ   )hr  rT  __qualname____doc__r!  	_SENTINELr2   _nonvar_fieldsclassmethodrV   staticmethodr  	lru_cacher   r   r   r  r   r  r  rt   r   r4  r>  r@  rD  rK  r   rP  rY  r]  rc  rg  ro  rs  ru  r\   rf   r  r  r  r   __annotations__r   r   r  call_int
call_floatr  r  r  r  call_mincall_maxr$  r)  r,  r0  r7  r5  r=  r?  rG  rI  rL  rP  
call_tuple	call_listrS  rU  rY  rW  r  rg  rm  rq  rt  rw  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r  r(  	call_iandr*  call_iorr-  r0  __classcell__)r   s   @rU   rL   rL   }   s    I		'	'N
 ) ) Y?  ?B: Y*  *X Y#TfuT#Yf0E%EFF #  #J YB  BH 	 	54# 4"J13 
 



 h T$Z h T h  h THV 	  fck')S/)*
 	
	
" 
)#) ()) -	)
 
)(\; &	\;
 -\; 
\;|* H J%UN4Ya+F HH44A<	

-
 04!)!F

H "J I<:NK 
 
  J# J  JD54;

DHZ6xO-3 / 2QS jK#jK jK "	jKXq-#q- q- "	q-
 q-fQ#Q Q "	Q:3 :/ :02 7 2o 2
#  "	"R
722'
R
*@$ I& H$:):.=:BQ:rW   rL   c              #      K   ddl m} |j                  | d      }	 |j                  |        d  |j	                  |        y # |j	                  |        w xY ww)Nr0   )GradModeVariableF)r  rC  r  enterexit)r   rC  gmvs      rU   r  r    sD     "

!
!"e
,C		"s   AA AAA)
contextlibr  r  rk  loggingr]   rw   r  r  typingcollectionsr   r   collections.abcr   r   r   r   r	   r+  r
   r   torch.utils._python_dispatchr   r  r   r   r   r  r   r   r   r   r   r   r   r   guardsr   r   replay_recordr   rP   r   r   r   r   r    utilsr!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   baser1   r2   constantr4   ctx_managerr5   r6   dictsr7   r8   r9   r:   r;   r<   listsr=   r>   r?   r@   rA   rB   r   rC   rD   rE   rF   rG   r,  rH   rI   torch._dynamo.symbolic_convertrJ   	getLoggerr  r  r   r   r   r   r   r}   r   r   r   r   r   r   r   r   r   r   r   r   rq   r   r   r   r   r   r   r  Any_HandlerCallbackr\   r  _TrackersTyper   cmp_eqr   cmp_ner   cmp_ltr   cmp_ler   cmp_gtr   cmp_ger  rL   contextmanagerr  rB  rW   rU   <module>ra     s[          
   0 . 1 1  $ F + +	 	 	 1 '     " 4 & 6    I 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!! @!:o @!:FB  rW   