o
    ZhNU                    @   s  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aebZcejdejeejfejgejhejiejjejkejlejmejnejoejpejpejqejrejsejtejuejvejwejxejyejzej{ej|iZ}ede	j~e	j~geBf ZeeeB eeeB df f ZejejejejejejejejejejejejiZG dd deBZe jdd ZdS )    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)InstructionTranslatorrI   .c                
       sN  e Zd ZU dZe ZdhejZedd Z	e
eddd Zdd	 Ze
edd
d Ze
eddeedef eee edef f f fddZe
eddd Ze
dd Zdd Zd fddZdefddZdd Z fddZdd d!Zd"d# Zd$d% Zd&d' Z d(d) Z!e
d*d+ Z"d,d- Z#e
d.ee$ d/e%fd0d1Z&dd4d5Z'i Z(eeedf ed3e)e eeef gef f e*d6< d2d3d7e)d8 d9d:dd8fd;d<Z+	7	=	9	:		8d fd>d?Z,dd@dAZ-e-Z.e-Z/ddBdCZ0ddDdEZ1ddFdGZ2ddHdIZ3e1Z4e1Z5ddKdLZ6ddMdNZ7ddOdPZ8ddQdRZ9ddSdTZ:dUdV Z;ddWdXZ<ddYdZZ=	d	3dd[d\Z>d]d^ Z?dd_d`Z@ddadbZAe@ZBe@ZCddcddZDdedf ZEddgdhZFe
ddidjZGe
	2	3ddkdlZHddmdnZIddodpZJddqdrZKddsdtZLddudvZMddwdxZNddydzZOdd{d|ZPd2d3dJefd}d~ZQdddZRdddZSdddZT	dd2d3dedefddZUd2d3dededefddZVd2d3dedefddZWd2d3defddZXd2d3defddZYd2d3ded9efddZZdddZ[dddZ\dddZ]dddZ^dddZ_dddZ`dddZaeaZbdddZcecZddddZed2d3dedefddZf  ZgS )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                 C   s   t |tj | ||dS )Nsource)r   
make_guardr   ZBUILTIN_MATCH)clsvaluerM    rQ   N/var/www/auris/lib/python3.10/site-packages/torch/_dynamo/variables/builtin.pycreate_with_source   s   z"BuiltinVariable.create_with_sourceNc                  C   sd  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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j.tj/tj0tj1tj2tj3tj4tj5tj6} ddl7m8} | 9|:  | 9dd t;j<: D  | S )Nr/   )rC   c                 s   s$    | ]}t |ttjr|V  qd S N)
isinstancetypemathsqrt.0xrQ   rQ   rR   	<genexpr>   s   " z;BuiltinVariable._constant_fold_functions.<locals>.<genexpr>)=absallanyboolcallablechrdivmodfloatgetattrintlenmaxminordpowreprroundstrformatsumrV   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tensorrC   updatevaluesrW   __dict__)fnsrC   rQ   rQ   rR   _constant_fold_functions   s   	
 !"#$%&'()*+,-./012345678:z(BuiltinVariable._constant_fold_functionsc                 C      | j |  v S rT   )rK   r   selfrQ   rQ   rR   can_constant_fold_through      z)BuiltinVariable.can_constant_fold_throughc                  C   s   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 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'} | S rT   )(rq   r]   rr   rs   rt   rv   rk   rw   rx   ry   rz   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   rQ   rQ   rR   _fx_graph_functions   s   	
 !"#$%&')z#BuiltinVariable._fx_graph_functionsreturn.c                  C   s   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__)rq   r|   r   r}   r   rw   r   rz   r   ry   r   r{   r   rk   r   r   r   r   r   r   rQ   rQ   rR   _binops  s0   zBuiltinVariable._binopsc                     s  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  D ]\}\}}g | |< g | |< |\}}}||dfdd	
}| | tf|f | | tf|f |d
	d dd}| | tf|f | | tf|f |dd dd}	| | ttf|	f | | ttf|	f | | ttf|	f | | ttf|	f q,d dd}
d dd}ttf|fttf|
fttf|
fttfdd fttttffdd fttfdd fg}| tj | d dd}ttf|fttf|
fttf|
fg}| tj | d dd}ttf|fttf|fttf|fttf|fg}| tj |  fdd}t D ]}t |sIJ || vsPJ ||| |< q@| S )!Nr/   )BaseUserFunctionVariableUserFunctionVariableNNModuleVariable)supported_const_comparison_ops)BaseTorchVariable)UserDefinedClassVariablerG   rH   )forward_namereverse_namec                   s.   t | r|| ||gi S || ||gi S rT   )rU   call_method)txabr   r   )rH   rQ   rR   user_defined_handlerV  s   
z=BuiltinVariable._binop_handlers.<locals>.user_defined_handler)r   r   rI   c                S   s   | | ||gi S rT   r   )r   r   r   r   rQ   rQ   rR   user_defined_inplace_handlerx     zEBuiltinVariable._binop_handlers.<locals>.user_defined_inplace_handlerrK   c                S   s2   ddl m} || | jjd|gt||gi R  S Nr/   wrap_fx_proxycall_function)builderr   outputcreate_proxyr,   )r   r   r   rK   r   rQ   rQ   rR   dynamic_handler  s   z8BuiltinVariable._binop_handlers.<locals>.dynamic_handlerc                 S      t g |j|| S rT   )rA   itemsunpack_var_sequencer   r   r   rQ   rQ   rR   tuple_add_handler     z:BuiltinVariable._binop_handlers.<locals>.tuple_add_handlerc                 S   r   rT   )r?   r   r   r   rQ   rQ   rR   size_add_handler  r   z9BuiltinVariable._binop_handlers.<locals>.size_add_handlerc                 S   s   t g || |jS rT   )rA   r   r   r   rQ   rQ   rR   <lambda>  s    z1BuiltinVariable._binop_handlers.<locals>.<lambda>c                 S   s   t g |j|| t dS Nmutation_type)r>   r   r   r0   r   rQ   rQ   rR   r     s    c                 S   s   t |g |j|jS rT   )rV   r   r   rQ   rQ   rR   r     s    c                 S   s>   |  s	|| sd S || }| jj| |j| |S rT   )Zis_immutablehas_unpack_var_sequencer   r   side_effectsZmutationr   extend)r   r   r   seqrQ   rQ   rR   list_iadd_handler  s   
z:BuiltinVariable._binop_handlers.<locals>.list_iadd_handlerc                 S   s.   t |tr
||}}|j|j|  t dS )N)r   r   )rU   r3   	__class__r   as_python_constantr0   )r   lstconstrQ   rQ   rR   expand_list_like  s   

z9BuiltinVariable._binop_handlers.<locals>.expand_list_likec           
         s  dfdd}t t f|fg}tv r?t t f|fg}t}|ttf|jfttf|jfg fdd}|ttf|f |S t t f|fg}	 v r؈j	
dr؈t d  d fdd	}|}|}ttttf}||t f|ft |f|fg t}|tftfffd
dfffd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d}	|ttf|	f |S )Nr   rI   c                       t  |j|jS rT   )r3   rP   r   oprQ   rR   compare_by_value  s   zYBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.compare_by_valuec                    s   |  t| t  ||gi S rT   )inline_user_function_returnr1   buildpolyfill_fn_mappingr   r   rQ   rR   handler6  s   zPBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.handleris_c                    s   t  S rT   r2   r   )none_resultrQ   rR   neverF  s   zNBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.neverc                    r   rT   )r3   rK   r   r   rQ   rR   r   k      zQBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.<lambda>c                    s"   t  | j|j| j|jS rT   )r3   r   get_submodule
module_keyr   r   rQ   rR   r   r  s    c                    sx   t |t |urt jdkS ||u rt ||S t|tjr6t|tjr8|j|jur:t ||S d S d S d S )Nr   )rV   r3   create__name__r*   r   ExceptionVariableexc_type)r   leftrightr   rQ   rR   	handle_is  s   

zRBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.handle_isr   rI   )r3   r   rJ   r   rD   r1   _comparison_with_symnodeappendr   r  
startswithobjectrE   r<   r6   r5   r4   _comparison_with_tensor)
r   r   resultZop_varr   r   Zobj_op_noneZnone_op_objZtypes_that_are_never_noner  r   r   r   r   rG   rH   r   r   )r   r   rR   create_cmp_op_handlers  s   


	
7z?BuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlersr  )!	functionsr   r   	nn_moduler   r   r   torchr   user_definedr   rG   rH   rJ   r   r   r	  r1   rD   r?   rA   r3   r>   r<   r=   rq   r|   r   r   rw   rC   r   ra   )Zop_handlersr   Zmagic_method_namesZin_place_opr   r   Zinplace_namer   r   r   r   r   Zlist_like_addition_handlersr   Zlist_like_iadd_handlersr   Zlist_like_expansion_handlersr  rQ   r  rR   _binop_handlers.  s   













5





 zBuiltinVariable._binop_handlersc                 C   sR   t  | }|d u rd S g }|D ]\\}}}t||r&t||r&|| q|S rT   )rJ   r  get
issubclassr	  )r   a_typeb_typehandlersmatchesZtype1Ztype2r   rQ   rQ   rR   _find_binop_handler  s   
z#BuiltinVariable._find_binop_handlerc                 C   r   rT   )rK   r   r   rQ   rQ   rR   can_insert_in_graph  r   z#BuiltinVariable.can_insert_in_graphc                    s   t  jdi | || _d S )NrQ   )super__init__rK   )r   rK   kwargsr   rQ   rR   r    s   
zBuiltinVariable.__init__c                 C   s,   | j d u rd}n| j j}| jj d| dS )NNone())rK   r  r   )r   namerQ   rQ   rR   __repr__  s   
zBuiltinVariable.__repr__c                 C   s   | j S rT   r   r   rQ   rQ   rR   r     s   z"BuiltinVariable.as_python_constantc                    s4   t tj ttjttji}| j|v r|| j S t  S rT   )	r`   r  rf   Zint64rd   Zfloat64rK   r  as_proxy)r   ZDTYPEr   rQ   rR   r&    s   


zBuiltinVariable.as_proxycodegentorch._dynamo.codegen.PyCodegenc                 C   sD   | j j}| j jdksJ ||jjvsJ d||j|dd d S )Nbuiltinszshadowed globalT)r|   )rK   r  
__module__r   	f_globalsZappend_outputZcreate_load_global)r   r'  r$  rQ   rQ   rR   reconstruct  s   zBuiltinVariable.reconstructc                 O   s
   t ||S rT   )r    r   argsr  rQ   rQ   rR   constant_args     
zBuiltinVariable.constant_argsc                 G   4   d}|D ]}t |tjr dS |pt |tj}q|S NF)rU   r   GetAttrVariablerE   )r   r.  
any_tensorargrQ   rQ   rR   tensor_args     zBuiltinVariable.tensor_argsc                 C   r1  r2  )r  r   r3  rE   )r   	arg_typesr4  arg_typerQ   rQ   rR   tensor_args_type  r7  z BuiltinVariable.tensor_args_typec                 O   s\   g }g }t || D ]}t|tjr|| q|| qtdd |D o-| j| S )Nc                 s   s(    | ]}|j d urt|j ndV  qd S r2  )rM   r   rZ   trQ   rQ   rR   r\     s
    
zBBuiltinVariable.python_and_tensor_constant_only.<locals>.<genexpr>)		itertoolschainr   rU   r   rE   r	  r^   r/  )r   r.  r  r6  Znon_tensor_argsirQ   rQ   rR   python_and_tensor_constant_only  s   z/BuiltinVariable.python_and_tensor_constant_onlyc                 C   s    dd | D dd |  D fS )Nc                 S      g | ]}|  qS rQ   r   rY   rQ   rQ   rR   
<listcomp>      z=BuiltinVariable.unwrap_unspec_args_kwargs.<locals>.<listcomp>c                 S      i | ]	\}}||  qS rQ   rB  rZ   kvrQ   rQ   rR   
<dictcomp>      z=BuiltinVariable.unwrap_unspec_args_kwargs.<locals>.<dictcomp>)r   )r.  r  rQ   rQ   rR   unwrap_unspec_args_kwargs  s   z)BuiltinVariable.unwrap_unspec_args_kwargsc                 C   s   |   ot||S rT   )r   r"   r-  rQ   rQ   rR   has_constant_handler  s   
z$BuiltinVariable.has_constant_handlerr8  
has_kwargsc                    s  ddl m  t	g t fddD r	fddS tr6tts+tu r6		dfd	d
}|S 		 rWt
ju rGtd tjrW	rO	jS rW	j tdkrstjgR  skntdkr~\fdd ndfdd}| t	dj d 

rd	
fdd}| 	 rtdd D rsdfdd}ndfdd}| fddtdkrڇfddS tdkr\dfdd}|S dfdd}|S )Nr/   LazyVariableTrackerc                 3   s    | ]}t | V  qd S rT   )r  r;  rN  rQ   rR   r\         z0BuiltinVariable._make_handler.<locals>.<genexpr>c                    s     | dd |D |S )Nc                 S   rA  rQ   realizerZ   rH  rQ   rQ   rR   rC    rD  zCBuiltinVariable._make_handler.<locals>.<lambda>.<locals>.<listcomp>)r   r   r.  r  objrQ   rR   r     s    z/BuiltinVariable._make_handler.<locals>.<lambda>r   rI   c                    s6    t u rtdd |D std tj |fi |S )Nc                 s   s(    | ]}t |tjot |jtV  qd S rT   )rU   r   r3   rP   rn   rY   rQ   rQ   rR   r\   $  s    

zWBuiltinVariable._make_handler.<locals>.create_exception_class_object.<locals>.<genexpr>zassert with non-string message)AssertionErrorr^   r   r   r  rT  r   rQ   rR   create_exception_class_object!  s
   zDBuiltinVariable._make_handler.<locals>.create_exception_class_objectr   r   c                    s    | g|R  S rT   rQ   )r   r.  _)binop_handlerrQ   rR   r   B  s    c                    s*    D ]}|| g|R  }|r|  S qd S rT   rQ   )r   r.  rY  rK   rv)binop_handlersrQ   rR   call_binop_handlersE  s   z:BuiltinVariable._make_handler.<locals>.call_binop_handlersZcall_c                    s  z| g|R i |}|d ur|W S W d S  t yf   ztj| g|R i | W   t ye } z, ||}|sYtd| td d| d|  W Y d }~Y d S W Y d }~Y d S d }~ww  ty } z ||}|sv |	  W Y d }~d S d }~ww )Nz1incorrect arg count %s %s and no constant handlerzinvalid handler args  )
	TypeErrorinspect	signaturebindrL  logwarningr   r   remove_from_stats)r   r.  r  r  erL  exc)rV  self_handlerrQ   rR   call_self_handlerP  s<    z8BuiltinVariable._make_handler.<locals>.call_self_handlerc                 s       | ]}t |tV  qd S rT   )r  r3   rY   rQ   rQ   rR   r\   r  rP  c              
      sZ   z dd |D  }W n t y& } ztdt|  W Y d }~nd }~ww t| |S )Nc                 S   rA  rQ   rB  rY   rQ   rQ   rR   rC  z  rD  PBuiltinVariable._make_handler.<locals>.constant_fold_handler.<locals>.<listcomp>constant fold exception: )	Exceptionr   rl   r1   r   r   r.  r  resrg  r   rQ   rR   constant_fold_handlerv  s   z<BuiltinVariable._make_handler.<locals>.constant_fold_handlerc              
      s|   t ||r<z dd |D i dd | D }W n ty5 } ztdt|  W Y d }~nd }~ww t| |S d S )Nc                 S   rA  rQ   rB  rY   rQ   rQ   rR   rC    rD  rk  c                 S   rE  rQ   rB  rF  rQ   rQ   rR   rI    rJ  zPBuiltinVariable._make_handler.<locals>.constant_fold_handler.<locals>.<dictcomp>rl  )r"   r   rm  r   rl   r1   r   rn  r   rQ   rR   rp    s   

c                    sj   dd | D }t ddj d  d dj d| d d	d
j d| dj dddgd d S )Nc                 S   rA  rQ   )Zpython_type_namerZ   r5  rQ   rQ   rR   rC    rD  zPBuiltinVariable._make_handler.<locals>.call_unimplemented_v2.<locals>.<listcomp>z 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.)Zgb_typecontextZexplanationhints)r   r  )r.  Zreal_arg_types)r8  rK   rM  rQ   rR   call_unimplemented_v2  s    

z<BuiltinVariable._make_handler.<locals>.call_unimplemented_v2c                    s    |S rT   rQ   rT  )rt  rQ   rR   r     s    c                    s    | ||}|r
|S  | d S rT   rQ   )r   r.  r  r[  )rt  r   rQ   rR   builtin_dispatch  s   z7BuiltinVariable._make_handler.<locals>.builtin_dispatchc                    s.   D ]}|| ||}|r|  S q | d S rT   rQ   )r   r.  r  rK   r[  )rt  r  rQ   rR   ru    s   r  )ZlazyrO  rJ   r_   r`  isclassr  rm  GeneratorExitr  rq   r~   r   rE   r:  _handle_insert_op_in_graphr	  rg   r  re   r  r   r^   )rK   r8  rM  rX  r]  ri  rp  ru  rQ   )rO  r8  rZ  r\  rt  rK   r   r  rM  rV  rh  rR   _make_handler  sf   





zBuiltinVariable._make_handlerr   rI   c              
   C   s  ddl m}m} |r| jg || R  sd S ddl m} ddlm}m}m	}	m
}
 |	|||ro|js_t|d tsY| j|v rE|| j }n|| j }|d }|d |d< ||d< n	|| j }n| j}|||}|
||||S | j}z| j|i |rddlm} ddlm} |||||j||W S |tv rt|d tjrt| |d |d g}}|tju rt|d trtj|d tjd|d g}}t||rtd	d
 |D s|j j!dt"|gt#||R  }|tj$||W S |j j!d|gt#||R  }tdd
 |D r|t%||W S t&||r<| '||\}}||i |}tdd
 t()|| D }|t*||||dW S t+dd
 |D rNt||d W S |tj,u ret|d tj*re|d - |d< |||W S  t.y   t/d|  d| d|  Y d S w )Nr/   )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                 s   s    | ]
}t |tjkV  qd S rT   )rV   r   rE   rq  rQ   rQ   rR   r\     s    
z=BuiltinVariable._handle_insert_op_in_graph.<locals>.<genexpr>r   c                 s   rj  rT   rU   rB   rq  rQ   rQ   rR   r\     rP  c                 s   "    | ]}t |tjr|jV  qd S rT   rU   r   rF   need_unwraprY   rQ   rQ   rR   r\         

)	raw_valuer  c                 s   rj  rT   rU   rD   rY   rQ   rQ   rR   r\   +  rP  zpartial tensor op: r^  )0r   r   rz  r6  r   r{  Ztorch_functionr|  r}  r~  r  ZexportrU   rE   rK   r   r@  Zbytecode_transformationr  r  r  r  IN_PLACE_DESUGARING_MAPr   r3   rq   r~   rD   r  selectr!   r_   r   r   r+   r,   NumpyNdarrayVariablerB   r#   rK  r=  r>  rF   r^   rz   r   NotImplementedErrorr   )r   r   r.  r  r   rz  r{  r|  r}  r~  r  functmpZfn_varrK   r  r  proxy_args_kwargsr  r  rQ   rQ   rR   rx    s   




	

 z*BuiltinVariable._handle_insert_op_in_graphcall_function_handler_cacher.  r1   r  dict[str, VariableTracker]c                 C   s   |rdd |  D }| jgdd |D dR }n| jgdd |D R }| j|}|sB| | jdd |D t| | j|< }||||S )	Nc                 S   rE  rQ   rQ  rF  rQ   rQ   rR   rI  M  s    z1BuiltinVariable.call_function.<locals>.<dictcomp>c                 s       | ]}t |V  qd S rT   rV   rY   rQ   rQ   rR   r\   N      z0BuiltinVariable.call_function.<locals>.<genexpr>Tc                 s   r  rT   r  rY   rQ   rQ   rR   r\   P  r  c                 S   s   g | ]}t |qS rQ   r  rY   rQ   rQ   rR   rC  U  rD  z1BuiltinVariable.call_function.<locals>.<listcomp>)r   rK   r  r  ry  r`   )r   r   r.  r  keyr   rQ   rQ   rR   r   E  s   zBuiltinVariable.call_functionlist[VariableTracker]c                    sP  | j tu r9|dkr9t|dksJ t|dksJ |\}}}| }t|tr9|jj|r9|	 r9|
|||S |dkr	| j tu r`t|dkr`t|dksQJ |jj| |d |dd  S | j tu rt|dkr|sti tt d}t|d tr|d j tu r|S |jj| |d |dd  S | j tu rt|dkr|d |r|s|d |}	tj|	t d}
t|d tr|d j tu r|
S |jj| |d |dd  }||
 |S | j tu r	tg t d}t|d tr|d j tu r|S |jj| |d |dd  S | j tu r|dkrtd S | j tu r1|d	kr1tj|tg|R i |S | j tu rqt| j |}|tv rqt|d tjrZ|d j|||dd  |S t|d tjrq|d |||dd  |S | j tu rt|dkrt| j |}|t v rt|d tr|d |||dd  |S t! ||||S )
N__setattr__   r   __new__r/   r   r   r  fromkeys)"rK   r  rg   rR  rU   rG   r   r   is_attribute_mutationis_python_constantZmethod_setattr_standardZtrack_new_user_defined_objectdictr6   r0   rJ   tupler   r   r   rA   Zset_underlying_tuple_vtlistr>   r3   call_custom_dict_fromkeysre   r%   ZUserDefinedDictVariableZ_dict_vtr   rn   r-   r  )r   r   r$  r.  r  rV  name_varvalZdict_vtZ	init_argsZtuple_vtr  Zlist_vtZresolved_fnr   rQ   rR   r   Y  s   









zBuiltinVariable.call_methodc                 C   st   t |ttjfr8t |tjr||dg i }n|}| jtu r tnt}ddl	m
} |||jd|| fi dS d S )Nitemr   r   r   r   r  )rU   rD   r   rE   r   rK   rf   r
   r	   Ztorch._dynamo.variables.builderr   r   r   r&  )r   r   r5  r  Zfn_r   rQ   rQ   rR   _call_int_float  s    zBuiltinVariable._call_int_floatc              
   C   s  t |tjrtjjt|jdS t |tjrt|j	dr!|j	j
}nt|j	dr,|j	j}ntd t|j	j
tj
u rMz	tjj| dW S  tyL   Y d S w t|r]tt|j	 d d S |j}zt|}W n ty } ztd| W Y d }~d S d }~ww |||gi S d S )N)rP   __str__r%  z5user defined object has no __str__ or __repr__ methodz has a C/C++ based str methodz)Failed to create UserFunctionVariable: %s)rU   r   r   r3   r   rn   rK   rG   hasattrrP   r  r%  r   rV   r  AttributeErrorr)   __func__rW  rc  rd  r   )r   r   r5  Z
str_methodZbound_methodZuser_func_variablerf  rQ   rQ   rR   call_str  s4   

zBuiltinVariable.call_strc                 G   sr   t |dkr|d |r|d |}| ||S t |dkr+| ||d |d S t |dkr7| ||S d S )Nr/   r   r   )rg   has_force_unpack_var_sequenceforce_unpack_var_sequence_call_min_max_seq_call_min_max_binary)r   r   r.  r   rQ   rQ   rR   _call_min_max  s   zBuiltinVariable._call_min_maxc                 C   s:   t |dksJ t |dkr|d S tt| j||S Nr   r/   )rg   	functoolsreducepartialr  )r   r   r   rQ   rQ   rR   r    s   z!BuiltinVariable._call_min_max_seqc                 C   s  |d u s|d u r
d S |  ||rt|tjs||}}t|tjs$J t|tr5ttj||gi }t|t	s?t|t	r]ddl
m} |t|||jjd| jgt||gi R  dS | rt|tjrrdd l}t|j}nttj}| jtu rd|ind|i}|||g|}n4t|tjrdd l}t|jt|ji| j }	t|	}nttjttji| j }
t|
}||||gi }tdd	 ||fD rtd
d	 ||fD rtj|S | r| }n|j}| jtu rt|j|}nt|j|}tdd	 ||fD }tj |||S |S t|t	st|t	rA| jtu r'tj!ntj"}|jjd|gt||gi R  }t	#||d S t|t$r[t|t$r]| | | }t$|S d S d S )Nr/   rz  r   r  r   ri   rh   c                 s   s"    | ]}t |tjtjfV  qd S rT   )rU   r   rF   r3   )rZ   r?  rQ   rQ   rR   r\   ;  s    
z7BuiltinVariable._call_min_max_binary.<locals>.<genexpr>c                 s   rj  rT   r  )rZ   r  rQ   rQ   rR   r\   E  rP  c                 s   r  rT   r  rY   rQ   rQ   rR   r\   Q  r  )%r6  rU   r   rE   rB   TorchInGraphFunctionVariabler  r   r   rD   r   rz  rV   r   r   rK   r,   r  r  numpyZNumpyVariableZclipclamprh   maximumri   minimumr^   r_   Zfrom_tensor_variabler   r  rF   Zsym_maxZsym_minr   r3   )r   r   r   r   rz  nprK   r  r  Znp_fnZtorch_fnZraw_bZraw_resr  Zpy_fnr  rP   rQ   rQ   rR   r    s   






z$BuiltinVariable._call_min_max_binaryr5  c                 C   *   t t||tdgi }||g i S )N__abs__rJ   re   r   r3   r   )r   r   r5  Z
abs_methodrQ   rQ   rR   call_absl     zBuiltinVariable.call_absc                 C   r  )N__pos__r  )r   r   r5  Z
pos_methodrQ   rQ   rR   call_poss  r  zBuiltinVariable.call_posc                 C   s2   t |tjr
td t|}t|}tj|S )Nzunsupported index(tensor))	rU   r   rE   r   r(   rq   r   r3   r   )r   r   r5  Zconstant_valuerQ   rQ   rR   
call_indexz  s
   
zBuiltinVariable.call_indexc                 O   s*   t t||tdgi }||||S )N	__round__r  )r   r   r5  r.  r  Zround_methodrQ   rQ   rR   
call_round  r  zBuiltinVariable.call_roundc                 G   s>   t |i r
t|S | j| rtdd |D }t|S d S )Nc                 s   s     | ]}t jt|V  qd S rT   )r   r3   r   r(   rq  rQ   rQ   rR   r\     s    
z-BuiltinVariable.call_range.<locals>.<genexpr>)r"   r   ZRangeVariable_dynamic_argsr  r   r   r.  rQ   rQ   rR   
call_range  s   



zBuiltinVariable.call_rangec                 O   s(   t dd |D pt dd | D S )Nc                 s   rj  rT   r  rY   rQ   rQ   rR   r\     rP  z0BuiltinVariable._dynamic_args.<locals>.<genexpr>)r_   r   r-  rQ   rQ   rR   r    s   zBuiltinVariable._dynamic_argsc                 G   s
   t |S rT   )r   ZSliceVariabler  rQ   rQ   rR   
call_slice  r0  zBuiltinVariable.call_slicec                 O   s0   ddl m} |||jjd| jgt||R  S r   )r   r   r   r   rK   r,   )r   r   r.  r  r   rQ   rQ   rR   
_dyn_proxy  s   zBuiltinVariable._dyn_proxyc                 O   s   t |tjrJ | j|i |r| j|g|R i |S tj| j}|d u r.|g t dS |	|ry|j
rmt|j
smt |trJt|j
tj n#t|ddrdt |trdt|tsd|jj|j
  t|j
tj |t||t dS d S )Nr   rM   F)rU   r   IteratorVariabler  r  r<   cls_forrK   r0   r   rM   r   r@   r   rN   r   ZTUPLE_ITERATOR_LENre   r6   r*   r;   r   Zguard_on_key_orderr|   r$  ZSEQUENCE_LENGTHr  r   r   r   rV  r.  r  rO   rQ   rQ   rR   _call_iter_tuple_list  s8   


z%BuiltinVariable._call_iter_tuple_listc                 O   s&   t j| j}|t||t dS r   )r   r<   r  rK   r  r  r0   r  rQ   rQ   rR   _call_iter_tuple_generator  s
   z*BuiltinVariable._call_iter_tuple_generatorc                 O   sr   t |tjrtj| j}|t||t dS t |tj	r,| j
||g|R i |S | j||g|R i |S r   )rU   r   r  r<   r  rK   r  r  r0   ZLocalGeneratorObjectVariabler  r  r  rQ   rQ   rR   _call_tuple_list  s   z BuiltinVariable._call_tuple_listc                 O   sH   t |tjr	|}n| j||g|R i |}|d u r"||d||S |S )N__iter__)rU   r   r  r  r   )r   r   rV  r.  r  retrQ   rQ   rR   	call_iter  s   zBuiltinVariable.call_iterc                 C   s~   ddl m}m} ddlm} t|tj|||frtj	dS t|t
r,tj	t|jS t|ttttttfr=tj	dS d S )Nr/   )r   FunctoolsPartialVariabler   TF)r  r   r  r  r   rU   r   r   r3   r   rH   ra   rP   rD   rE   r>   rA   r=   )r   r   r5  r   r  r   rQ   rQ   rR   call_callable  s2   	
zBuiltinVariable.call_callablec                 O   s,   t |dkr
|d S td| d|  d S )Nr   r/   z$unsupported args to builtin cast(): r^  )rg   r   )r   rY  r.  r  rQ   rQ   rR   	call_cast  s   zBuiltinVariable.call_castc                 O   s   t j|tg|R i |S rT   )rJ   call_custom_dictr  r   r   r.  r  rQ   rQ   rR   	call_dict  s   zBuiltinVariable.call_dictc                 O   s&   |  t| tjt| |g||S rT   )r   r1   r   r   Zconstruct_dict)r   user_clsr.  r  rQ   rQ   rR   r    s
   z BuiltinVariable.call_custom_dictc                 O   sH  |t tthv s	J |r-|tu sJ t|dkr!t|dkr!d|v s#J g ||dR }t|dkr8ttdt|dkrHg |td R }t|dksPJ |\}}|turZt	nt
}t|t rvdd | D }|t |||t dS || r|| }td	d
 |D r|t |||t dS t|j d| d|  d S )Nr/   rP   r   z,fromkeys expected at least 1 argument, got 0r   c                 S   s   g | ]}t |qS rQ   )r3   r   )rZ   rG  rQ   rQ   rR   rC  1  s    z=BuiltinVariable.call_custom_dict_fromkeys.<locals>.<listcomp>r   c                 s   r  rT   )r:   rS  rQ   rQ   rR   r\   7  r  z<BuiltinVariable.call_custom_dict_fromkeys.<locals>.<genexpr>z.fromkeys(): r^  )r  r   r   rg   popr   r_  r3   r   r6   r7   rU   keysr  r0   r  r  r^   r   r  )r   r  r.  r  r5  rP   ZDictVariableTyper  rQ   rQ   rR   r    s6   $




z)BuiltinVariable.call_custom_dict_fromkeysc                 O   s   |rJ |st g t dS t|dksJ |d }t|tj r&|jt dS ||r7||}t |t dS t|tjrqt|j	t
rq||d}t|tjre||||}t|t r]|S tt||S td| d|  d S td| d|  d S )Nr   r/   r   r  zset(): r^  )r;   r0   rg   rU   r   cloner  r  rG   rP   r   var_getattrZUserMethodVariabler   rJ   setcall_setr   )r   r   r.  r  r5  r   Ziter_fnoutrQ   rQ   rR   r  ?  s*   


zBuiltinVariable.call_setc                 O   s   |rJ |s
t g S t|dksJ |d }t|tj r&t dd |jD S ||r4||}t |S td| d|  d S )Nr/   r   c                 S   s   g | ]}|j qS rQ   )vtrY   rQ   rQ   rR   rC  `  r   z2BuiltinVariable.call_frozenset.<locals>.<listcomp>zfrozenset(): r^  )r9   rg   rU   r   	set_itemsr   r   r   )r   r   r.  r  r5  r   rQ   rQ   rR   call_frozensetY  s   

zBuiltinVariable.call_frozensetc                    sL   |rt |dkrd|v sJ |dd} fdd|D }tj||t dS )Nr/   strictFc                    $   g | ]}|  r| n|qS rQ   r   r   rq  r   rQ   rR   rC  k      z,BuiltinVariable.call_zip.<locals>.<listcomp>)r  r   )rg   r  r   ZZipVariabler0   )r   r   r.  r  r  rQ   r  rR   call_zipg  s   
zBuiltinVariable.call_zipc                 O      |d  |d|dd  |S )Nr   __len__r/   r   r  rQ   rQ   rR   call_lens     zBuiltinVariable.call_lenc                 O   r  )Nr   __getitem__r/   r   r  rQ   rQ   rR   call_getitemv  r  zBuiltinVariable.call_getitemc              
      s|  z   }W n ty   td  d| d   Y nw | }t tjr; jd ur; fdd}tj	| |S t tj
rRt jtjrRtd  d|  t tj
rjd|jjv rjtj	|j| jS t|tswtt|dd r{|f}n(tjd	krt|tjr|j}nt|trtd
d |D r|}ntt|dgd zt||}W n ty   ||v }Y nw tj	|S )Nzisinstance(, z): can't determine type of c                    s6   fdd t |tu rt fdd|D S  |S )Nc                    sX   | t vr#  jjd }t|r| tjjju rt	|| S t
  | S t |  } j|v S )Nexample_value)r.   r&  nodemetar   r  nnZ	parameter	ParameterrU   r  python_typedtype)tyZexample_valZdtypesr5  rQ   rR   
check_type  s   

zOBuiltinVariable.call_isinstance.<locals>._tensor_isinstance.<locals>.check_typec                 3   s    | ]} |V  qd S rT   rQ   )rZ   r  r  rQ   rR   r\     r  zNBuiltinVariable.call_isinstance.<locals>._tensor_isinstance.<locals>.<genexpr>)rV   r  r_   )Z
tensor_varZtensor_typer  r  rR   _tensor_isinstance  s   z;BuiltinVariable.call_isinstance.<locals>._tensor_isinstancez&isinstance called on UserDefinedClass r^  __instancecheck__)r  
   c                 s   s*    | ]}t |tptt|d dV  qdS )r  N)rU   rV   ra   re   )rZ   tprQ   rQ   rR   r\     s
    
z2BuiltinVariable.call_isinstance.<locals>.<genexpr>z?isinstance() arg 2 must be a type, a tuple of types, or a union)r.  )r  r  r   r   rU   r   rE   r  r3   r   rG   rP   typesMemberDescriptorTyper   r   r  rV   ra   re   sysversion_info	UnionType__args__r  r^   r   r_  r  )r   r   r5  Zisinstance_typer9  r  Zisinstance_type_tupler  rQ   r  rR   call_isinstancey  sb   

zBuiltinVariable.call_isinstancec                 C   sL   z
|  }|  }W n ty   td| d|  Y nw tt||S )z,Checks if first arg is subclass of right argz+call_issubclass args not constant left_ty: z, right_ty: )r   r  r   r   r3   r  )r   r   Zleft_tyZright_tyZ
left_ty_pyZright_ty_pyrQ   rQ   rR   call_issubclass  s   zBuiltinVariable.call_issubclassc                 C   s   t ||S rT   )r   ZSuperVariabler   r   r   r   rQ   rQ   rR   
call_super  s   zBuiltinVariable.call_superc              
   C   sR   z| |W S  ty( } zt|tjr#|  |jd W  Y d }~S  d }~ww )Nr   )Znext_variabler   rU   r   r<   re  r   )r   r   r5  exrQ   rQ   rR   	call_next  s   zBuiltinVariable.call_nextc                 C   s>   |  r| }t|tjrtt|j|S |||S d S rT   )	r  r   rU   r   rJ   r3   r  rK   Zcall_obj_hasattr)r   r   rV  attrr$  rQ   rQ   rR   call_hasattr  s   zBuiltinVariable.call_hasattrc                    s$    fdd|D }t j||t dS )Nc                    r  rQ   r  )rZ   r   r  rQ   rR   rC    r  z,BuiltinVariable.call_map.<locals>.<listcomp>r   )r   ZMapVariabler0   )r   r   rK   ZseqsrQ   r  rR   call_map  s   
zBuiltinVariable.call_mapc                 C   s*   | |r
||n|}tj||t dS r   )r   r   r   ZFilterVariabler0   )r   r   rK   r   rQ   rQ   rR   call_filter  s   zBuiltinVariable.call_filterrV  r  c           
         s  |  }| std jj|r/t|tjr/|dv r/|j	r/jj
|r/td|d jj||r?jj||S |d urX| ||}|  dv sRJ |  sX|S |jo`t|j| |dv rz<|  }t|tr|dkr fdd	t|jD }tj| d
W S |dkrt|j W S |dkrt|jW S W n	 ty   Y nw t|tjr||S t|tjtjtjtjtj tj!frz||W S  ty   tj"|| d
 Y S w t|tj#rt$|j%|}	t|	t&j'j(t&j'j)fr	t&j*j+,|	r	tj#|	 d
S |t-v rtj"|| d
S d S t|t.rJ|j/s)||j%j0vr0t$|j%|}	n|j%j0| }	t1j2rCj34|j%||	 t|	 S t5|tj6r_|dv r_tt$|j7|S z||W S  tyx   tj"|| d
 Y S w )Nznon-const getattr() name)Znamed_parameters
parametersZnamed_buffersbuffersZnamed_modulesmodulesz4pending mutation on nn module, so graph breaking at z call)TF>   	__flags__	__bases____base__r  c              	      s(   g | ]\}}t | ot |qS rQ   )r1   r   r   )rZ   r?  r   rM   r   rQ   rR   rC  /  s    z0BuiltinVariable.call_getattr.<locals>.<listcomp>rL   r  r  )r  r*  )8r   r  r   r   r   r  rU   r   ZUnspecializedNNModuleVariableZis_state_mutatedZhas_pending_mutationZhas_pending_mutation_of_attrZ	load_attrr  rM   r   rV   	enumerater  rA   r1   r   r  r3   r   r  r  r   r  rE   NamedTupleVariableZDistributedVariabler   rG   r3  r  re   rP   r  Z_opsZOpOverloadPacketZ
OpOverloadZ_dynamoZtrace_rulesZis_aten_op_or_tensor_methodr$   r   Zis_torchr   r   Zreplay_record_enabledZexec_recorderZrecord_module_accessr*   r   rK   )
r   r   rV  r  defaultr$  Zhasattr_varrP   Z
tuple_argsmemberrQ   r  rR   call_getattr  s   	



zBuiltinVariable.call_getattrr  c              	      s  t  tjtjtjtjfr |d||gi S |jj	 r|
 r| }t  tjrddlm} |dkr:td |dkr fdd|jjD }|D ]	}|jj| qKt|1 t  |||jjd	tjjgt |gi R  }	W d    n1 s~w   Y  W d    n1 sw   Y  d
d }
|jd	|
|	 fi  |
  jjd  |	S |jj || |dkr|jj d| |S t  tjrtdt jj  d S t  tj rB|j! st"d|
 r;t |tjr;t#| j|}z
 $|| }W n t%t&fy   d }Y nw t |tjr;t#| j|}t'( j)d}||u r;|tj*j+ju r;|S  ,| d S d S )Nr  r/   r   Z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. datac                    s   g | ]
}|j  j kr|qS rQ   rL   )rZ   tfrU  rQ   rR   rC    s    z0BuiltinVariable.call_setattr.<locals>.<listcomp>r   c                 S   s.   | j }|dkr|d }tjj| f|f | S r  )_versionr  Z_CZ	_autogradZ_unsafe_set_version_counter)r[   versionrQ   rQ   rR   _lower_version_count_by_1  s
   z?BuiltinVariable.call_setattr.<locals>._lower_version_count_by_1r  Z_gradZgradz#setattr(UserDefinedObjectVariable) z?Can't inplace modify module params/buffers inside HigherOrderOp)-rU   r   ZPlacementVariabler  rG   r  r   r   r   r  r  r   rE   r   r   r   Ztracked_fakesremovedynamo_disable_gradr  Zno_gradr   Tensorset_r,   r&  r  r  Z
store_attrrV   rP   r  r   Zis_root_tracerr   r'   r  r  r   r`  getattr_staticmodule_typer  ModuleZconvert_to_unspecialized)r   r   rV  r  r  r$  r   	to_remover  r  r"  Zassigning_fake_valZgetattr_varZexisting_fake_attrZmod_setattrrQ   rU  rR   call_setattrm  s   	
 

zBuiltinVariable.call_setattrc                 C   s   |  |||t S rT   )r+  r   ZDeletedVariable)r   r   rV  r  rQ   rQ   rR   call_delattr  s   zBuiltinVariable.call_delattrc              
   C   s   z|  }W n ty } zttjt|ddd d }~ww |jo%t|j}|d u r6t|t	j
r6|jr6|j}|tju rI|jdt}tt|d}t|||S )NZunknown_python_type)Z	case_name r%  )r  r  r   r   ZINVALID_INPUTrn   rM   r   rU   r   rG   Z
cls_sourcer  r%  r   Zinstall_global_by_idr   r   r1   r   )r   r   rV  Zpy_typeerrorrM   r$  rQ   rQ   rR   	call_type  s.   

zBuiltinVariable.call_typec                 C   s*   | |rtt||}t|S d S rT   )r   r  reversedr   r   rA   )r   r   rV  r   rQ   rQ   rR   call_reversed   s   

zBuiltinVariable.call_reversedc                 K   sH   | |r t|tjs"tj||t d}||dg | |S d S d S )Nr   sort)r  rU   r   rE   r>   r  r0   r   )r   r   rV  r  Zlist_varrQ   rQ   rR   call_sorted  s   zBuiltinVariable.call_sortedc                 C   s(   t |trtj|t| d dS d S )NZsym_num)rU   rD   r   rq   rs   r&  r   r   r   rQ   rQ   rR   call_neg  s   
zBuiltinVariable.call_negc                 O   s    |  }t|}tj|||S rT   )r   rn   r   ZStringFormatVariabler   )r   r   Z_format_stringr.  r  format_stringrQ   rQ   rR   call_format   s   zBuiltinVariable.call_formatc                 G   sN  t |dkr!t|d tjr!|d }|j|j}tjt	|S t |dkrOt|d tj
tjfrO|d jrBt|d jtj t	|d j}tj|S t |dkret|d tre|d }||S t|d tjrxtjt	|d jS t|d tjrtjt	|d jS t|d tjrtjt	|d jS td|  d S )Nr   r/   zcall_id with args )rg   rU   r   r   r   r   r   r3   r   idr   rG   rM   r   rN   r   ZID_MATCHrP   rE   call_idr*   r   rK   ZSkipFunctionVariabler  Z
fake_valuer   )r   r   r.  Znn_mod_variabler{   Zconstant_resultZtensor_variablerQ   rQ   rR   r:  %  s,   


zBuiltinVariable.call_idc                 C   s   t dt|  d S )Nzcopy.deepcopy )r   rl   )r   r   r[   rQ   rQ   rR   call_deepcopy>  s   zBuiltinVariable.call_deepcopyc           
   
   C   s^  ddl m} ddlm} | j}|tjtjfv rCt|t	o2t|t	o2t
t| jt
t| jk}|tju r=t|S t| S ||vrUt|j d| d| d t|t	rt|t	r|jod|jd ur|j|jkrz
t|j|j W n ty   t|j d| d| d Y nw t|t	r|n|}|jd|| | fi }	|t|||	S )Nr/   r  %supported_tensor_comparison_op_valuesr"  r  r#  r   )r   rz  r   r=  rK   rq   r   is_notrU   rE   r9  r&   r&  r  r3   r   r   r  sizer  Zbroadcast_shapesRuntimeErrorr   r   rV   )
r   r   r  r  rz  r=  r   Z	is_resultZ
tensor_clsr  rQ   rQ   rR   r  A  sH   


 z'BuiltinVariable._comparison_with_tensorc                 C   s   ddl m} | j}||vrt|j d| d| d t|tjr*t|t	 d S |j
d|| | fi }tj||d dS )Nr/   r<  r"  r  r#  r   r4  )r   r=  rK   r   r  rU   r   r   r3   r  r   r   r&  rD   r   )r   r   r  r  r=  r   r  rQ   rQ   rR   r  j  s   z(BuiltinVariable._comparison_with_symnodec                 C   s   t |trt |trd S t |ttfr1t |ttfr1tj||jjdtjgt||gi R  d dS t	|drEt	|drGt
t|j|j@ S d S d S Nr   r4  r  )rU   r3   rD   r   r   r   rq   r   r,   r  r;   r  r  r
  rQ   rQ   rR   	call_and_  s"   zBuiltinVariable.call_and_c                 C   s   t |trt |trd S t |ttfr1t |ttfr1tj||jjdtjgt||gi R  d dS t	|drEt	|drEt
t|j|jB S d S rA  )rU   r3   rD   r   r   r   rq   r   r,   r  r;   r  r  r
  rQ   rQ   rR   call_or_  s"   zBuiltinVariable.call_or_c                 C   sl   t |trtj||jjdtjgt|gi R  d dS t |tr#|j	}t |t
tfr4tt|jdkS d S )Nr   r4  r   )rU   rD   r   r   r   rq   rt   r,   r8   Zdv_dictr>   r6   r3   rg   r   r5  rQ   rQ   rR   	call_not_  s   


	zBuiltinVariable.call_not_r   r   c                 C   s   | |d|gi S )N__contains__r   r
  rQ   rQ   rR   call_contains  r   zBuiltinVariable.call_contains)r   N)r'  r(  r  )r.  r  r  r  r   r1   )r   rI   r5  r1   rT   )hr  r*  __qualname____doc__r  Z	_SENTINELr1   Z_nonvar_fieldsclassmethodrS   staticmethodr  	lru_cacher   r   r   r  r   r  r  rn   r   r  r  r  r  r%  r   r&  r,  r/  r6  r:  r@  rK  rL  rV   r`   ry  rx  r  r   __annotations__r   r   r  Zcall_intZ
call_floatr  r  r  r  Zcall_minZcall_maxr  r  r  r  r  r  r  r  r  r  r  r  Z
call_tuple	call_listr  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  r  r  r  r+  r,  r/  r1  r3  r6  r8  r:  r;  r  r  rB  Z	call_iandrC  Zcall_iorrD  rF  __classcell__rQ   rQ   r   rR   rJ   }   s\  
 

A,"%   



 
+ 



^

'
	
c







#




"





\

	

	
l
s








)


rJ   c              	   c   sH    ddl m} || d}z||  d V  W ||  d S ||  w )Nr/   )GradModeVariableF)r-  rO  r   Zenterexit)r   rO  ZgmvrQ   rQ   rR   r$    s   
r$  )
contextlibr  r`  r=  loggingrW   rq   r  r  typingcollectionsr   r   collections.abcr   r   r   r   r   r  r	   r
   Ztorch.utils._python_dispatchr   r-  r   r   r   rg  r   r   r   r   r   r   r   r   Zguardsr   r   Zreplay_recordr   rM   r   r   r   r   r   utilsr    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   baser0   r1   Zconstantr3   Zctx_managerr4   r5   Zdictsr6   r7   r8   r9   r:   r;   listsr<   r=   r>   r?   r@   rA   r   rB   rC   rD   rE   rF   r  rG   rH   Ztorch._dynamo.symbolic_convertrI   	getLoggerr  rc  r   r|   r   r}   r   rw   r   ry   r   rz   r   r{   r   r   r   r   r   r   rk   r   r   r   r   r   r   r  AnyZ_HandlerCallbackrV   r  Z_TrackersTyper   Zcmp_eqr   Zcmp_ner   Zcmp_ltr   Zcmp_ler   Zcmp_gtr   Zcmp_ger   rJ   contextmanagerr$  rQ   rQ   rQ   rR   <module>   s   (
D  

                S