U
    zh%                    @   sD  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Zd dlmZmZ ddlmZmZmZ ddlmZmZmZmZ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$ ddl%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8 ddl9m:Z:m;Z;m<Z<m=Z=m>Z> ddl?m@Z@mAZAmBZBmCZCmDZDmEZE ddlFmGZGmHZHmIZImJZJmKZK ddlLmMZMmNZN eOePZQejRejSejTejUejVejWejXejYejZej[ej\ej]ej^ej^ej_ej`ejaejbejcejdejeejfejgejhejiejjiZkdd ZlG dd de3Zme jndd ZodS )    N)defaultdictOrderedDict)DictList)	sym_floatsym_int   )configpolyfill	variables)AttributeMutationErrorunimplementedUnsupported	UserErrorUserErrorType)GuardBuilderinstall_guard)DummyModule)
AttrSourceGetItemSourceis_constant_source
TypeSource)check_constant_argscheck_numpy_ndarray_argscheck_unspec_or_constant_argscheck_unspec_python_argsextract_fake_example_valueget_fake_valueguard_if_dynistypenumpy_operator_wrapperproxy_args_kwargstensortype_to_dtype   )MutableLocalVariableTrackerConstantVariable)EventVariableStreamVariable)ConstDictVariableDefaultDictVariableDictViewis_hashableSetVariable)BaseListVariableListIteratorVariableListVariableSizeVariableTupleIteratorVariableTupleVariable)FakeItemVariablesupported_comparison_opsSymNodeVariableTensorVariableUnspecializedPythonVariable)UserDefinedObjectVariableUserDefinedVariablec                    s&    fdd}t t|  d|  |_|S )zPCreate a BuiltinVariable.call_{name} method that inlines through polyfill.{name}c                    s   | t ||S N)Zinline_user_function_returnr   UserFunctionVariableselftxargskwargsfn Q/var/www/html/venv/lib/python3.8/site-packages/torch/_dynamo/variables/builtin.pycall_fn[   s
      z$_polyfill_call_impl.<locals>.call_fncall_)getattrr
   __name__)namerG   rE   rC   rF   _polyfill_call_implX   s    
rL   c                       s  e Z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d Ze	e
ddd Ze	dd Zdd Z fddZdd Zdd Zdd Z fddZdd Zdd  Zd!d" Zd#d$ Zd%d& Ze	d'd( Zd)d* Ze	ee  e!d+d,d-Z"d.d/ Z#i Z$d0d1d2d3d4d5Z%d0d1d2d3 fd6d7Z&d8d9 Z'e'Z(e'Z)d:d; Z*d<d= Z+d>d? Z,d@dA Z-e+Z.e+Z/d2dBdCdDZ0d2dBdEdFZ1d2dBdGdHZ2dIdJ Z3dKdL Z4dMdN Z5dOdP Z6dQdR Z7ddSdTZ8dUdV Z9e8Z:e8Z;dWdX Z<dYdZ Z=d[d\ Z>e	d]d^ Z?e	d_d` Z@dadb ZAdcdd ZBdedf ZCdgdh ZDdidj ZEdkdl ZFdmdn ZGdodp ZHedBdqdrZIdsdt ZJdudv ZKefdwdxZLdydz ZMefd{d|ZNdeed}d~dZOeeedddZPeed}ddZQedddZRedddZSedddZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_eedddZ`eadZbeadZc  ZdS )BuiltinVariablerD   c                 C   s   t |tj t||dS )N)source)r   
make_guardr   ZBUILTIN_MATCHrM   )clsvaluerN   rE   rE   rF   create_with_sourcel   s    z"BuiltinVariable.create_with_sourceNc               8   C   s   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j0tj1tj2tj3tj4tj5tj6h8} ddl7m8} | 9|:  | 9dd t;j<: D  | S )Nr#   )r6   c                 s   s"   | ]}t |ttjr|V  qd S r<   )
isinstancetypemathsqrt.0xrE   rE   rF   	<genexpr>   s      z;BuiltinVariable._constant_fold_functions.<locals>.<genexpr>)=absallanyboolcallablechrdivmodfloatrI   intlenmaxminordpowreprroundstrformatsumrT   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tensorr6   updatevaluesrU   __dict__)fnsr6   rE   rE   rF   _constant_fold_functionsq   sz    :z(BuiltinVariable._constant_fold_functionsc                 C   s   | j |  kS r<   )rD   r   r?   rE   rE   rF   can_constant_fold_through   s    z)BuiltinVariable.can_constant_fold_throughc               '   C   s   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'h'} | S r<   )(rn   r[   ro   rp   rq   rs   rh   rt   ru   rv   rw   rx   ry   ltgtgeleneeqrz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rE   rE   rF   _fx_graph_functions   sR    )z#BuiltinVariable._fx_graph_functionsc                  C   s   t jdddgt jft jdddgt jft jddd	gt jft jd
ddgt jft j	dddgt j
ft jdddgt jftdddgt jft jdddgt jft jdddgt jft jdddg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__)rn   ry   r   rz   r   rt   r   rw   r   rv   r   rx   r   rh   r   r}   r   r~   r   r   rE   rE   rF   _binops   s<          zBuiltinVariable._binopsc               
      s  ddl m} m} 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}
|| tf|
f || tf|
f |ddd}|| ttf|f || ttf|f || ttf|f || ttf|f qhd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 }ttf|fttf|fttf|fg}|tj | dd }ttf|fttf|fttf|fttf|fg}|tj  | ttf|| f 	f
dd}t!" D ].}t#|st$||kst$||||< q|S )Nr#   )DictKeysr.   )BaseUserFunctionVariabler=   NNModuleVariable)supported_const_comparison_ops)BaseTorchVariable)UserDefinedClassVariabler:   r;   )forward_namereverse_namec                   s2   t | r|| ||gi S || ||gi S d S r<   )rS   call_method)r@   abr   r   )r;   rE   rF   user_defined_handler(  s    
z=BuiltinVariable._binop_handlers.<locals>.user_defined_handler)r   c                S   s   | | ||gi S r<   r   )r@   r   r   r   rE   rE   rF   user_defined_inplace_handlerJ  s    zEBuiltinVariable._binop_handlers.<locals>.user_defined_inplace_handlerrC   c                S   s0   ddl m} || | jjd|ft||gi  S Nr#   wrap_fx_proxycall_function)builderr   outputcreate_proxyr!   )r@   r   r   rD   r   rE   rE   rF   dynamic_handlerU  s     z8BuiltinVariable._binop_handlers.<locals>.dynamic_handlerc                 S   s   t |j|| S r<   )r4   itemsunpack_var_sequencer@   r   r   rE   rE   rF   tuple_add_handlerq  s    z:BuiltinVariable._binop_handlers.<locals>.tuple_add_handlerc                 S   s   t |j|| S r<   )r2   r   r   r   rE   rE   rF   size_add_handlert  s    z9BuiltinVariable._binop_handlers.<locals>.size_add_handlerc                 S   s   t || |jS r<   )r4   r   r   r   rE   rE   rF   <lambda>  s   z1BuiltinVariable._binop_handlers.<locals>.<lambda>c                 S   s   t |j|| t dS )Nmutable_local)r1   r   r   r$   r   rE   rE   rF   r     s    c                 S   s   t ||j|jS r<   )rT   r   r   rE   rE   rF   r         c                 S   s<   |j r|| sd S || }| jj| |j| |S r<   )r   has_unpack_var_sequencer   r   side_effectsZmutationr   extend)r@   r   r   seqrE   rE   rF   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   )rS   r'   	__class__r   as_python_constantr$   )r@   lstconstrE   rE   rF   expand_list_like  s    

z9BuiltinVariable._binop_handlers.<locals>.expand_list_likec                    s  fdd}t t f|fg} krt d  jdrT fdd}|}|}n$t d fdd}t d	 fd
d}ttttf}|	|t f|ft |f|fg fdd}fdd}fdd}	fdd}
jdr|}n|
}t
}|	t
ft
fffddfffddf

f|ftjtjf|f		f|	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 jdrևfdd}|ttf|f |S )Nc                    s   t  |j|jS r<   )r'   rQ   r   oprE   rF   compare_by_value  s    zYBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.compare_by_valueis_c                    s   t  S r<   r&   r   none_resultrE   rF   never  s    zNBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.never)r   c                    s*   |j d ks|j dks|j dkr&t S d S NTFrQ   r'   r   r   rE   rF   obj_op_none  s    zTBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.obj_op_none)r   c                    s*   |j d ks|j dks|j dkr&t S d S r   r   r   r   rE   rF   none_op_obj  s    zTBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.none_op_objc                    s   t |  ||S r<   )r/   list_comparer@   leftrightr   rE   rF   list_compare_nocheck  s    z]BuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.list_compare_nocheckc                    s<   t |t |k	r,t j d| d| d t|  ||S )N(, ))rT   r   rJ   r/   r   r   r   rE   rF   list_compare_check  s
    z[BuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.list_compare_checkc                    s   t  |j|jS r<   )r'   	set_itemsr   r   rE   rF   compare_set_items  s    zZBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.compare_set_itemsc                    s   | | d j d|gi S )N__)r   rJ   r   r   rE   rF   compare_via_method	  s    z[BuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.compare_via_methodc                    s   t  |j|jS r<   )r'   rD   r   r   rE   rF   r     r   zQBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.<lambda>c                    s"   t  | j|j| j|jS r<   )r'   r   get_submodule
module_keyr   r   rE   rF   r      s
   c                    s$   t |t |k	r t jdkS d S )Nr   )rT   r'   createrJ   r   r   rE   rF   	handle_isQ  s    zRBuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers.<locals>.handle_is)r'   r   objectrJ   
startswithr8   r7   r/   r*   r   rM   r   r)   r(   r%   _comparison_with_tensor_comparison_with_symnodeappend)r   r   resultr   r   r   Ztypes_that_are_never_noner   r   r   r   Zcompare_user_definedZop_varr  
r   r   r   r   r:   r;   r=   Zhas_set_itemsZsize_or_tupler   )r   r   rF   create_cmp_op_handlers  s    

	



=z?BuiltinVariable._binop_handlers.<locals>.create_cmp_op_handlers)%dictsr   r.   	functionsr   r=   	nn_moduler   r   r   torchr   user_definedr   r:   r;   rM   r   r   r  r%   r7   r2   r4   r'   r1   r/   r0   rn   ry   r   r   rt   r6   r   r_   AssertionError)r   r.   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	  rE   r  rF   _binop_handlers
  s    











$	



 zBuiltinVariable._binop_handlersc                 C   sR   t  | }|d krd S g }|D ]*\\}}}t||r"t||r"|| q"|S r<   )rM   r  get
issubclassr  )r   a_typeZb_typehandlersmatchesZtype1Ztype2handlerrE   rE   rF   _find_binop_handlerb  s    z#BuiltinVariable._find_binop_handlerc                 C   s   | j |  kS r<   )rD   r   r   rE   rE   rF   can_insert_in_graphn  s    z#BuiltinVariable.can_insert_in_graphc                    s   t  jf | || _d S r<   )super__init__rD   )r?   rD   rB   r   rE   rF   r  q  s    zBuiltinVariable.__init__c                 C   s,   | j d krd}n| j j}| jj d| dS )NNoner   r   )rD   rJ   r   )r?   rK   rE   rE   rF   __str__u  s    
zBuiltinVariable.__str__c                 C   s
   t | jS r<   )rT   rD   r   rE   rE   rF   python_type}  s    zBuiltinVariable.python_typec                 C   s   | j S r<   rC   r   rE   rE   rF   r     s    z"BuiltinVariable.as_python_constantc                    s4   t tj ttjttji}| j|kr*|| j S t  S r<   )	r^   r  rc   Zint64rb   Zfloat64rD   r  as_proxy)r?   ZDTYPEr  rE   rF   r    s       

zBuiltinVariable.as_proxyc                 C   sF   | j j}| j jdkst||jjks,td||j|ddd d S )Nbuiltinszshadowed globalFT)ry   )rD   rJ   
__module__r  r@   	f_globalsZappend_outputZcreate_load_global)r?   ZcodegenrK   rE   rE   rF   reconstruct  s    zBuiltinVariable.reconstructc                 O   s
   t ||S r<   )r   r?   rA   rB   rE   rE   rF   constant_args  s    zBuiltinVariable.constant_argsc                 G   s4   d}|D ]&}t |tjr dS |p,t |tj}q|S NF)rS   r   GetAttrVariabler8   )r?   rA   
any_tensorargrE   rE   rF   tensor_args  s    zBuiltinVariable.tensor_argsc                 C   s4   d}|D ]&}t |tjr dS |p,t |tj}q|S r&  )r  r   r'  r8   )r?   	arg_typesr(  arg_typerE   rE   rF   tensor_args_type  s    z BuiltinVariable.tensor_args_typec                 O   s\   g }g }t || D ]&}t|tjr4|| q|| qtdd |D oZ| j| S )Nc                 s   s&   | ]}|j d k	rt|j ndV  qd S r&  )rN   r   rX   trE   rE   rF   rZ     s   zBBuiltinVariable.python_and_tensor_constant_only.<locals>.<genexpr>)		itertoolschainr   rS   r   r8   r  r\   r%  )r?   rA   rB   r*  Znon_tensor_argsirE   rE   rF   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   s   g | ]}|  qS rE   r   rW   rE   rE   rF   
<listcomp>  s     z=BuiltinVariable.unwrap_unspec_args_kwargs.<locals>.<listcomp>c                 S   s   i | ]\}}||  qS rE   r4  rX   kvrE   rE   rF   
<dictcomp>  s     z=BuiltinVariable.unwrap_unspec_args_kwargs.<locals>.<dictcomp>)r   )rA   rB   rE   rE   rF   unwrap_unspec_args_kwargs  s    z)BuiltinVariable.unwrap_unspec_args_kwargsc                 C   s   |   ot||S r<   )r   r   r$  rE   rE   rF   has_constant_handler  s    
 z$BuiltinVariable.has_constant_handler)r+  
has_kwargsc           	         s  ddl m} ddlm  tg t fdd|D rFfddS trjtt	rjfdd	}|S 
 rtjkrt|d
 tjr|rjS |rj t|dkr|stjf| sn<tdkr\fdd nfdd}| tdj d 		rD	fdd}|  r|jtdd |D r~|s~fdd}nfdd}| dj d| d| td
krȇfddS tdkr\fdd}nfdd}|S )Nr#   )SourcelessBuilderLazyVariableTrackerc                 3   s   | ]}t | V  qd S r<   )r  r.  r>  rE   rF   rZ     s     z0BuiltinVariable._make_handler.<locals>.<genexpr>c                    s     | dd |D |S )Nc                 S   s   g | ]}|  qS rE   realizerX   r8  rE   rE   rF   r5    s     zCBuiltinVariable._make_handler.<locals>.<lambda>.<locals>.<listcomp>r   r@   rA   rB   objrE   rF   r     s     z/BuiltinVariable._make_handler.<locals>.<lambda>c                    s2    t kr"tdd |D s"td tj |f|S )Nc                 s   s&   | ]}t |tjot |jtV  qd S r<   )rS   r   r'   rQ   rk   rW   rE   rE   rF   rZ     s   zWBuiltinVariable._make_handler.<locals>.create_exception_class_object.<locals>.<genexpr>zassert with non-string message)r  r\   r   r   ZExceptionVariablerD  rC   rE   rF   create_exception_class_object  s
    zDBuiltinVariable._make_handler.<locals>.create_exception_class_objectr   r   c                    s    | f| S r<   rE   )r@   rA   _)binop_handlerrE   rF   r     r   c                    s(    D ]}|| f| }|r|  S qd S r<   rE   )r@   rA   rH  rD   rv)binop_handlersrE   rF   call_binop_handlers  s    z:BuiltinVariable._make_handler.<locals>.call_binop_handlersrH   c                    s   z"| f||}|d k	r |W S W n t k
r   ztj| f|| W nZ t k
r } z< ||}|std| td d| d|  W 5 d }~X Y nX  Y n< tk
r } z ||}|s҂ |	  W 5 d }~X Y nX d S )Nz1incorrect arg count %s %s and no constant handlerzinvalid handler args  )
	TypeErrorinspect	signaturebindr;  logwarningr   r   remove_from_stats)r@   rA   rB   r  er;  exc)rF  self_handlerrE   rF   call_self_handler  s0    
z8BuiltinVariable._make_handler.<locals>.call_self_handlerc                 s   s   | ]}t |tV  qd S r<   )r  r'   rW   rE   rE   rF   rZ     s     c              
      sV   zdd |D  }W n4 t k
rJ } ztdt|  W 5 d }~X Y nX  | |S )Nc                 S   s   g | ]}|  qS rE   r4  rW   rE   rE   rF   r5  &  s     PBuiltinVariable._make_handler.<locals>.constant_fold_handler.<locals>.<listcomp>constant fold exception: )	Exceptionr   ri   r@   rA   rB   resrV  r   rD   rE   rF   constant_fold_handler"  s    $z<BuiltinVariable._make_handler.<locals>.constant_fold_handlerc              
      st   t ||rpz&dd |D dd | D }W n4 tk
rd } ztdt|  W 5 d }~X Y nX  | |S d S )Nc                 S   s   g | ]}|  qS rE   r4  rW   rE   rE   rF   r5  3  s     rY  c                 S   s   i | ]\}}||  qS rE   r4  r6  rE   rE   rF   r9  4  s     zPBuiltinVariable._make_handler.<locals>.constant_fold_handler.<locals>.<dictcomp>rZ  )r   r   r[  r   ri   r\  r^  rE   rF   r_  .  s    
$z	builtin: rM  c                     s   t  S r<   r   )rA   )	error_msgrE   rF   r   @  r   c                    s    | ||}|r|S t   d S r<   r`  )r@   rA   rB   rJ  )ra  r  rE   rF   builtin_dipatchD  s    z6BuiltinVariable._make_handler.<locals>.builtin_dipatchc                    s.   D ]}|| ||}|r|  S qt   d S r<   r`  )r@   rA   rB   rD   rJ  )ra  r  rE   rF   rb  L  s
    
)r   r=  Zlazyr?  rM   r]   rO  isclassr  r[  r  rn   r{   r   r8   r-  _handle_insert_op_in_graphr  rd   r  rI   rJ   r   r   r\   )	rD   r+  r<  r=  rG  rL  rX  r_  rb  rE   )
r?  rI  rK  r   ra  rD   r  r  rF  rW  rF   _make_handler  s`    





zBuiltinVariable._make_handlerc              
   C   sV  ddl m}m} |r*| j||  s*d S | j}z| j||rpddlm} ddl	m
} |||||j||W S |tkrt|d tjrt| |d |d g }}|tjkrt|d trtj|d tjd|d g }}t||r*tdd |D s*|jjd	t|ft|| }	|tj||	W S |jjd	|ft|| }	td
d |D rf|t||	W S t||r| ||\}
}||
|}tdd t !|| D }|t"||	||dW S t#dd |D rt||	d W S |tj$krt|d tj"r|d %||d< |||	W S W n0 t&k
rP   t'd|  d| d|  Y nX d S )Nr#   )r   wrap_fx_proxy_clsr   )	unique_id)invoke_and_store_as_constantr   c                 s   s   | ]}t |tjkV  qd S r<   )rT   r   r8   rX   r)  rE   rE   rF   rZ   }  s    z=BuiltinVariable._handle_insert_op_in_graph.<locals>.<genexpr>r   c                 s   s   | ]}t |tV  qd S r<   rS   r5   ri  rE   rE   rF   rZ     s     c                 s   s    | ]}t |tjr|jV  qd S r<   rS   r   r9   need_unwraprW   rE   rE   rF   rZ     s   )	raw_valuerl  c                 s   s   | ]}t |tV  qd S r<   rS   r7   rW   rE   rE   rF   rZ     s     zpartial tensor op: rM  )(r   r   rf  r*  r   rD   r3  Zbytecode_transformationrg  r  rh  rJ   IN_PLACE_DESUGARING_MAPrS   r   r'   rn   r{   r7   r  selectr   r   r]   r   r   r    r!   NumpyNdarrayVariabler5   r   r:  r0  r1  r9   r\   rw   Zconvert_to_constantNotImplementedErrorr   )r?   r@   rA   rB   r   rf  rD   rg  rh  proxy_args_kwargsrm  rl  rE   rE   rF   rd  U  s        
 	


 z*BuiltinVariable._handle_insert_op_in_graphzList[VariableTracker]zDict[str, VariableTracker]r%   )rA   rB   returnc                 C   s   |r0dd |  D }| jfdd |D d	}n| jfdd |D }| j|}|s~| | jdd |D t| | j|< }||||S )
Nc                 S   s   i | ]\}}||  qS rE   r@  r6  rE   rE   rF   r9    s      z1BuiltinVariable.call_function.<locals>.<dictcomp>c                 s   s   | ]}t |V  qd S r<   rT   rW   rE   rE   rF   rZ     s     z0BuiltinVariable.call_function.<locals>.<genexpr>Tc                 s   s   | ]}t |V  qd S r<   rw  rW   rE   rE   rF   rZ     s     c                 S   s   g | ]}t |qS rE   rw  rW   rE   rE   rF   r5    s     z1BuiltinVariable.call_function.<locals>.<listcomp>)T)r   rD   call_function_handler_cacher  re  r^   )r?   r@   rA   rB   keyr  rE   rE   rF   r     s      zBuiltinVariable.call_functionc           
         s  | j tkrr|dkrrt|dks"tt|dks2t|\}}}| }t|trr|jj	|rr|
 rr||||S | j tkr|dkrtj|tf||S | j tjkr|dkrt|dkstt|dkst|d }g }||D ]}	||	| qt|S t ||||S )N__setattr__   r   fromkeysfrom_iterabler#   )rD   r  rd   r  rA  rS   r:   r   r   is_attribute_mutationis_python_constantZmethod_setattr_standarddictrM   call_custom_dict_fromkeysr0  r1  r   r   r   r4   r  r   )
r?   r@   rK   rA   rB   rF  name_varvalr   itemr  rE   rF   r     s.    

zBuiltinVariable.call_methodc                 C   st   t |ttjfrpt |tjr.||dg i }n|}| jtkr@tnt}ddl	m
} |||jd|| fi dS d S )Nr  r   r   r   r@   rs  )rS   r7   r   r8   r   rD   rc   r   r   Ztorch._dynamo.variables.builderr   r   r   r  )r?   r@   r)  r  Zfn_r   rE   rE   rF   _call_int_float  s    zBuiltinVariable._call_int_floatc                 C   s$   t |tjr tjjt|jdS d S )NrQ   )rS   r   r=   r'   r   rk   rD   )r?   r@   r)  rE   rE   rF   call_str  s    zBuiltinVariable.call_strc                 G   sr   t |dkr4|d |r4|d |}| ||S t |dkrV| ||d |d S t |dkrn| ||S d S )Nr#   r   r   )rd   r   r   _call_min_max_seq_call_min_max_binary)r?   r@   rA   r   rE   rE   rF   _call_min_max   s    zBuiltinVariable._call_min_maxc                 C   s:   t |dkstt |dkr$|d S tt| j||S Nr   r#   )rd   r  	functoolsreducepartialr  )r?   r@   r   rE   rE   rF   r  
  s    z!BuiltinVariable._call_min_max_seqc                 C   sz  |  ||rt|tjs$|| }}t|tjs4tt|trVttj	||gi }t|t
sjt|t
rddlm} |t|||jjd| jft||gi  dS | rt|tjrdd l}t|j}nttj}| jtkrd|ind|i}|	||g|}njt|tjr@d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krt|j |	}
nt|j |	}
tdd	 ||fD }tj!||
|S |S n\t|t
s2t|t
rv| jtkrDtj"ntj#}|jjd|ft||gi  }t
$||d S d S )Nr#   rf  r   r  r   rf   re   c                 s   s    | ]}t |tjtjfV  qd S r<   )rS   r   r9   r'   )rX   r2  rE   rE   rF   rZ   A  s   z7BuiltinVariable._call_min_max_binary.<locals>.<genexpr>c                 s   s   | ]}t |tV  qd S r<   rj  )rX   r  rE   rE   rF   rZ   K  s     c                 s   s    | ]}t |tjr|jV  qd S r<   rk  rW   rE   rE   rF   rZ   W  s   )%r*  rS   r   r8   r  r5   TorchInGraphFunctionVariabler  r   r   r7   r   rf  rT   r   r   rD   r!   r  rq  numpyZNumpyVariableZclipclampre   maximumrf   minimumr\   r]   Zfrom_tensor_variabler   rm  r9   Zsym_maxZsym_minr   )r?   r@   r   r   rf  nprD   rB   r  Zraw_bZraw_resrl  rs  rE   rE   rF   r    s    

  





   z$BuiltinVariable._call_min_max_binaryr)  c                 C   s*   t t||tdgi }||g i S )N__abs__rM   rI   r   r'   r   )r?   r@   r)  Z
abs_methodrE   rE   rF   call_absl  s      zBuiltinVariable.call_absc                 C   s*   t t||tdgi }||g i S )N__pos__r  )r?   r@   r)  Z
pos_methodrE   rE   rF   call_poss  s      zBuiltinVariable.call_posc                 C   s2   t |tjrtd t|}t|}tj|S )Nzunsupported index(tensor))	rS   r   r8   r   r   rn   r   r'   r   )r?   r@   r)  Zconstant_valuerE   rE   rF   
call_indexz  s
    
zBuiltinVariable.call_indexc                 O   s*   t t||tdgi }||||S )N	__round__r  )r?   r@   r)  rA   rB   Zround_methodrE   rE   rF   
call_round  s      zBuiltinVariable.call_roundc                 G   s:   t |i rt|S | j| r6dd |D }t|S d S )Nc                 S   s   g | ]}t jt|qS rE   )r   r'   r   r   ri  rE   rE   rF   r5    s    z.BuiltinVariable.call_range.<locals>.<listcomp>)r   r   ZRangeVariable_dynamic_argsr?   r@   rA   rE   rE   rF   
call_range  s    



zBuiltinVariable.call_rangec                 O   s(   t dd |D p&t dd | D S )Nc                 s   s   | ]}t |tV  qd S r<   rn  rW   rE   rE   rF   rZ     s     z0BuiltinVariable._dynamic_args.<locals>.<genexpr>)r]   r   r$  rE   rE   rF   r    s    zBuiltinVariable._dynamic_argsc                 G   s
   t |S r<   )r   ZSliceVariabler  rE   rE   rF   
call_slice  s    zBuiltinVariable.call_slicec                 O   s.   ddl m} |||jjd| jft|| S r   )r   r   r   r   rD   r!   )r?   r@   rA   rB   r   rE   rE   rF   
_dyn_proxy  s     zBuiltinVariable._dyn_proxyc                 O   s   | j ||r| j|f||S t|tjr.|S tj| j}|d krR|g t dS |	|r|j
rt|j
st|trt|j
tj nFt|ddrt|trt|ts|jj|j
  t|j
tj |t||t dS d S )Nr   rN   F)r  r  rS   r   ZIteratorVariabler/   Zcls_forrD   r$   r   rN   r   r3   r   rO   r   ZTUPLE_ITERATOR_LENrI   r*   r   r.   r   Zguard_on_key_orderry   rK   ZSEQUENCE_LENGTHlistr   )r?   r@   rF  rA   rB   rP   rE   rE   rF   _call_iter_tuple_list  s8    


z%BuiltinVariable._call_iter_tuple_listc                 O   s0   | j ||f||}|d kr,||d||S |S )N__iter__)r  r   )r?   r@   rF  rA   rB   retrE   rE   rF   	call_iter  s    zBuiltinVariable.call_iterc                 C   sr   ddl m} ddlm} t|tj||fr6tjdS t|t	rRtjt
|jS t|tttfrntjdS d S )Nr#   )r   r   TF)r  r   r  r   rS   r   r   r'   r   r;   r_   rQ   r7   r8   )r?   r@   r)  r   r   rE   rE   rF   call_callable  s    
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(): rM  )rd   r   )r?   rH  rA   rB   rE   rE   rF   	call_cast  s    zBuiltinVariable.call_castc                 O   s   t j|tf||S r<   )rM   call_custom_dictr  r>   rE   rE   rF   	call_dict  s    zBuiltinVariable.call_dictc                    s   |s|si f}t |dkst|d }t|tr@t||t dS t|tjr\|j|t dS t|tt	t
frt fdd| D }t||t dS n,|s|rdd | D }tj||t dS t|j d	| d
|  d S )Nr#   r   r   )user_clsr   c                 3   s   | ]}|  V  qd S r<   r   rW   r@   rE   rF   rZ     s    z3BuiltinVariable.call_custom_dict.<locals>.<genexpr>c                 S   s   i | ]\}}t ||qS rE   r'   r   r6  rE   rE   rF   r9    s      z4BuiltinVariable.call_custom_dict.<locals>.<dictcomp>z(): rM  )rd   r  rS   r  r*   r$   r   cloner1   r4   r0   r   r   r   rJ   )r@   r  rA   rB   r)  r   rE   r  rF   r    s8    
  z BuiltinVariable.call_custom_dictc                 O   sJ  |t tthkst|rV|tks"tt|dkrBt|dkrBd|ksFt||df}t|dkrlttdt|dkr|t	d f}t|dkst|\}}|tk	rt
nt}t|t rdd | D }|t |||t dS || r,td	d
 || D r,|| }|t |||t dS t|j d| d|  d S )Nr#   rQ   r   z,fromkeys expected at least 1 argument, got 0r   c                 S   s   g | ]}t |qS rE   r  )rX   r7  rE   rE   rF   r5  $  s     z=BuiltinVariable.call_custom_dict_fromkeys.<locals>.<listcomp>r   c                 s   s   | ]}t |V  qd S r<   )r-   rB  rE   rE   rF   rZ   (  s    z<BuiltinVariable.call_custom_dict_fromkeys.<locals>.<genexpr>z.fromkeys(): rM  )r  r   r   r  rd   popr   rN  r'   r   r*   r+   rS   keysr|  r$   r   r\   r   r   rJ   )r@   r  rA   rB   r)  rQ   ZDictVariableTyper  rE   rE   rF   r    s<    $


  


  z)BuiltinVariable.call_custom_dict_fromkeysc                 O   s   |rt |stg t dS t|dks*t |d }t|tjrL|jt dS ||rn||}t|t dS t	d| d|  d S )Nr   r#   r   zset(): rM  )
r  r.   r$   rd   rS   r   r  r   r   r   )r?   r@   rA   rB   r)  r   rE   rE   rF   call_set1  s    

zBuiltinVariable.call_setc                    s   |rt |dkrd|kstt fdd|D r fdd|D |ddr|t dkr|tfd	dD s|ttd
dd t D }t|S d S )Nr#   strictc                 3   s   | ]}|  V  qd S r<   r   rW   r  rE   rF   rZ   C  s     z+BuiltinVariable.call_zip.<locals>.<genexpr>c                    s   g | ]}|  qS rE   r  ri  r  rE   rF   r5  D  s     z,BuiltinVariable.call_zip.<locals>.<listcomp>Fr   c                 3   s"   | ]}t |t  d  kV  qdS )r   N)rd   )rX   u)unpackedrE   rF   rZ   F  s     z3zip() has one argument of len differing from othersc                 S   s   g | ]}t t|qS rE   )r   r4   r  )rX   r  rE   rE   rF   r5  K  s     )	rd   r  r\   r  r   
ValueErrorzipr   r4   )r?   r@   rA   rB   r   rE   )r@   r  rF   call_zip@  s    zBuiltinVariable.call_zipc                 G   s|   t |dkrd}n0t |dks"tt|d tjs6t|d  }|d |rxdd t|d ||D }t	|S d S )Nr#   r   r   c                 S   s&   g | ]\}}t t j||gqS rE   )r   r4   r'   r   )rX   idxvarrE   rE   rF   r5  V  s   z2BuiltinVariable.call_enumerate.<locals>.<listcomp>)
rd   r  rS   r   r'   r   r   	enumerater   r4   )r?   r@   rA   startr   rE   rE   rF   call_enumerateN  s    zBuiltinVariable.call_enumeratec                 O   s   |d  |d|dd  |S )Nr   __len__r#   r   r>   rE   rE   rF   call_len^  s    zBuiltinVariable.call_lenc                 O   s   |d  |d|dd  |S )Nr   __getitem__r#   r   r>   rE   rE   rF   call_getitema  s    zBuiltinVariable.call_getitemc              
      s  z   }W n. tk
r:   td  d| d   Y nX | }t tjrx jd k	rx fdd}tj	| |S t tj
rt jtjrtd  d|  t tj
rd|jjkrtj	|j| jS zt||}W n tk
r   ||k}Y nX tj	|S )	Nzisinstance(r   z): can't determine type of c                    s:   fdd t |tkr.t fdd|D S  |S d S )Nc                    s(   | t krt  | S t |  } j|kS r<   )r"   r  r  dtype)tyZdtypesr  rE   rF   
check_typeq  s    zOBuiltinVariable.call_isinstance.<locals>._tensor_isinstance.<locals>.check_typec                 3   s   | ]} |V  qd S r<   rE   )rX   r  r  rE   rF   rZ   y  s     zNBuiltinVariable.call_isinstance.<locals>._tensor_isinstance.<locals>.<genexpr>)rT   tupler]   )Z
tensor_varZtensor_typer  r  rF   _tensor_isinstancep  s    z;BuiltinVariable.call_isinstance.<locals>._tensor_isinstancez&isinstance called on UserDefinedClass rM  __instancecheck__)r  rr  r   r   rS   r   r8   r  r'   r   r:   rQ   typesMemberDescriptorTyper   r   r  r  rN  )r?   r@   r)  Zisinstance_typer,  r  r  rE   r  rF   call_isinstanced  s>    
 

zBuiltinVariable.call_isinstancec                 C   sN   z|  }|  }W n( tk
r<   td| d|  Y nX tt||S )z,Checks if first arg is subclass of right argz+call_issubclass args not constant left_ty: z, right_ty: )r   rr  r   r   r'   r  )r?   r@   Zleft_tyZright_tyZ
left_ty_pyZright_ty_pyrE   rE   rF   call_issubclass  s    
zBuiltinVariable.call_issubclassc                 C   s   t ||S r<   )r   ZSuperVariabler?   r@   r   r   rE   rE   rF   
call_super  s    zBuiltinVariable.call_superc              
   C   s\   z| |W S  tk
rV } z,t|tjrD|  |jd  W Y S  W 5 d }~X Y nX d S )Nr   )Znext_variabler   rS   r   r/   rT  r   )r?   r@   r)  exrE   rE   rF   	call_next  s    zBuiltinVariable.call_nextc                 C   s>   |  r:| }t|tjr.tt|j|S |||S d S r<   )	r  r   rS   r   rM   r'   hasattrrD   call_hasattr)r?   r@   rF  attrrK   rE   rE   rF   r    s
    zBuiltinVariable.call_hasattrc                    s2   | r. fdd|D }t|S d S )Nc                    s   g | ]}  |gi qS rE   rC  rW   rD   r@   rE   rF   r5    s     z,BuiltinVariable.call_map.<locals>.<listcomp>)r   r   r   r4   )r?   r@   rD   r   r   rE   r  rF   call_map  s    
zBuiltinVariable.call_mapc                 C   s   t |tjtjfrtdd |jD r|| jkrLtjt	dd |jD S t |tjrt |j
ttfrtjt	dd |jD |j
dS ||r|| jkrtjd}||}ttj|ttjt||gi S d S )Nc                 s   s*   | ]"}t |tjo t |jttfV  qd S r<   )rS   r   r'   rQ   rc   rb   rW   rE   rE   rF   rZ     s   z+BuiltinVariable.call_sum.<locals>.<genexpr>c                 s   s   | ]}|j V  qd S r<   r  rW   rE   rE   rF   rZ     s     c                 s   s   | ]}|j V  qd S r<   r  rW   rE   rE   rF   rZ     s     )r  r   )rS   r   r1   r4   r\   r   	_SENTINELr'   r   rm   rQ   rc   rb   r   r   rM   r  r  r   rn   ry   )r?   r@   r   r  r   rE   rE   rF   call_sum  s4    
 



zBuiltinVariable.call_sumc                 G   s   t |S r<   )r   ZStopIterationVariabler  rE   rE   rF   call_StopIteration  s    z"BuiltinVariable.call_StopIterationc                 C   s^   | |rZ||}|| jkr6|d |dd   }}n|}|D ]}||||gi }q>|S d S r  )r   r   r  r   )r?   r@   functioniterableinitialr   rQ   elementrE   rE   rF   call_reduce  s    


zBuiltinVariable.call_reduce)rF  r  c                    s@  ddl m} ddl m}m}m}m}	m}
 ddlm m	 |
 }| sPtd jj|rt|tjr|dkr|jrjj|rtd|d	 zjj||W S  tk
r   Y nX |d k	r| ||}|
 d
kst|
 s|S i }|jrt|j||d< nd |dkrzh|
 }t|tr|j}d k	rbfddt|D }n fdd|D }tj|f|W S W n tk
r   Y nX t|tj r|!|S t|tj"tj#tjtj$tj%tj&frz|!|W S  tk
r   |||f| Y S X n&t||	r`t'|j(|}t|t)j*j+t)j*j,fr<|-|r<|	|f|S nt||t.fr|j/s||j(j0krt'|j(|}n|j(j0| }t1j2rj34|j(|| d k	r҈|S  5|S n\t6||
r|dkr|5t'|j7|S z|!|W S  tk
r:   |||f| Y S X d S )Nr   )trace_rulesr#   )r'   r'  PythonModuleVariabler  r=   r=  VariableBuilderznon-const getattr() name)Znamed_parameters
parametersZnamed_buffersbuffersZnamed_modulesmodulesz4pending mutation on nn module, so graph breaking at z call)TFrN   	__bases__c                    s$   g | ]\}} t ||qS rE   )r   )rX   r2  r   )r  rN   r@   rE   rF   r5  &  s   z0BuiltinVariable.call_getattr.<locals>.<listcomp>c                    s   g | ]}  |qS rE   )r   )rX   r   )r=  r@   rE   rF   r5  +  s     )rJ   r!  )8 r  r'   r'  r  r  r=   r   r=  r  r   r  r   r   r   r~  rS   r   ZUnspecializedNNModuleVariableZis_state_mutatedZhas_pending_mutationZ	load_attrKeyErrorr  r  rN   r   rT   r  r  r4   rr  r   var_getattrr8   ZNamedTupleVariableZDistributedVariabler   r:   rI   rQ   r  Z_opsZOpOverloadPacketZ
OpOverloadZis_aten_op_or_tensor_methodr   Zis_torchr   r	   Zreplay_record_enabledZexec_recorderZrecord_module_accessr   r   rD   )r?   r@   rF  r  defaultr  r'   r'  r  r  r=   rK   Zhasattr_varoptionsrQ   basesZ
tuple_argsmemberrE   )r=  r  rN   r@   rF   call_getattr  s    




 
zBuiltinVariable.call_getattr)rF  r  r  c              
   C   s  t |tjtjtjtjfr.||d||gi S |jj	|r~|
 r~| }t |tjrLddlm} |dkrztd |dkrLg }|jjD ]}|j|jkr|| q|D ]}|jj| qt|B t . |||jjdtjjft||gi  }	W 5 Q R X W 5 Q R X dd	 }
|jd|
|	 fi  |
| jjd
  |	S |jj||| |dkrz|jj|d| |S t |tjrtdt|j j!  nt |tj"rv|j# st$d|
 rjt |tjrjt%| j|}z|&|| }W n t'k
r   d }Y nX t |tjrjt%| j|}t()|j*d}||krj|tj+j,j!krj|S |-| nNt |tj.j/r|j0r|
 rt |tj1rt2|j3| |  t1d S d S )Nrz  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. datar   c                 S   s*   | j }|dkr|d }tjj| | | S r  )_versionr  Z_CZ	_autogradZ_unsafe_set_version_counter)rY   versionrE   rE   rF   _lower_version_count_by_1  s
    z?BuiltinVariable.call_setattr.<locals>._lower_version_count_by_1Zexample_valueZ_gradZgradz#setattr(UserDefinedObjectVariable) z?Can't inplace modify module params/buffers inside HigherOrderOp)4rS   r   ZDataClassVariableZCustomizedDictVariableZPlacementVariabler:   r   r   r   r~  r  r   r8   r   r   r   Ztracked_fakesrN   r  removedynamo_disable_gradr  Zno_gradr   ZTensorset_r!   r  nodemetaZ
store_attrrT   rQ   rz  r   Zis_root_tracerr   r   r  AttributeErrorrO  getattr_staticmodule_typennModuleZconvert_to_unspecializedr
  ZHFPretrainedConfigVariableZexportr'   setattrrF  )r?   r@   rF  r  r  rK   r   Z	to_removetfoutr  Zassigning_fake_valZgetattr_varZexisting_fake_attrZmod_setattrrE   rE   rF   call_setattr^  s    	

 
   zBuiltinVariable.call_setattrc                 C   s   |  |||t S r<   )r  r   ZDeletedVariable)r?   r@   rF  r  rE   rE   rF   call_delattr  s    zBuiltinVariable.call_delattrrE  c              
   C   s   ddl m}m} z| }W n8 tk
rT } zttjt|ddd W 5 d }~X Y nX |j	d krl|
||S ||t|j	|S d S )Nr#   r  Zunknown_python_type)Z	case_name)r   r=  r  r  rr  r   r   ZINVALID_INPUTrk   rN   r   r   )r?   r@   rF  r=  r  Zpy_typeerrorrE   rE   rF   	call_type  s    
zBuiltinVariable.call_typec                 C   s*   | |r&tt||}t|S d S r<   )r   r  reversedr   r   r4   )r?   r@   rF  r   rE   rE   rF   call_reversed  s    
zBuiltinVariable.call_reversedc                    s   | rt|tjstdd |D r|dd  |dtd	 }t
|dks`t rt| fdd|d	}nt|d
d |d	}t|S d S )Nc                 s   s   | ]}|  V  qd S r<   r  rW   rE   rE   rF   rZ     s     z.BuiltinVariable.call_sorted.<locals>.<genexpr>ry  reverseFr   c                    s     | gi  S r<   )r   r   rY   r  r@   rE   rF   r     s     z-BuiltinVariable.call_sorted.<locals>.<lambda>)ry  r
  c                 S   s   |   S r<   r4  r  rE   rE   rF   r   
  r   )r   rS   r   r8   r\   r   r  r'   r   r   rd   r  sortedr1   )r?   r@   rF  rB   r
  r   rE   r  rF   call_sorted  s0    
 zBuiltinVariable.call_sortedc                    sB   t  fdd|D r>g }|D ]}||  qt|S d S )Nc                 3   s   | ]}|  V  qd S r<   r  )rX   rF  r  rE   rF   rZ     s     z-BuiltinVariable.call_chain.<locals>.<genexpr>)r\   r   r   r   r4   )r?   r@   rA   r   rF  rE   r  rF   
call_chain  s
    zBuiltinVariable.call_chainc                 G   sV   | |rRtdd |D rRdd |D }||}ttj|f| }t|S d S )Nc                 s   s   | ]}|  V  qd S r<   r	  rW   rE   rE   rF   rZ     s    z.BuiltinVariable.call_islice.<locals>.<genexpr>c                 S   s   g | ]}|  qS rE   r4  rW   rE   rE   rF   r5    s     z/BuiltinVariable.call_islice.<locals>.<listcomp>)r   r\   r   r  r0  islicer   r4   )r?   r@   r  rA   Z
const_argsr   rE   rE   rF   call_islice  s    
zBuiltinVariable.call_islicec                 C   s(   t |tr$tj|t| d dS d S )NZsym_num)rS   r7   r   rn   rp   r  r?   r@   r   rE   rE   rF   call_neg   s    
zBuiltinVariable.call_negc                 O   s   |  }tj|||S r<   )r   r   ZStringFormatVariabler   )r?   r@   Z_format_stringrA   rB   format_stringrE   rE   rF   call_format*  s    zBuiltinVariable.call_formatc                 G   s   t |dkrBt|d tjrB|d }|j|j}tjt	|S t |dkrt|d tj
rt|d jtj t	|d j}tj|S td|  d S )Nr   r#   zcall_id with args )rd   rS   r   r   r   r   r   r'   r   idr:   r   rN   rO   r   ZID_MATCHrQ   r   )r?   r@   rA   Znn_mod_variablerx   Zconstant_resultrE   rE   rF   call_id.  s     zBuiltinVariable.call_idc                 C   s   t dt|  d S )Nzcopy.deepcopy )r   ri   )r?   r@   rY   rE   rE   rF   call_deepcopy<  s    zBuiltinVariable.call_deepcopyc           
   
   C   sl  ddl m} ddlm} | j}|tjtjfkrt|t	odt|t	odt
t| jt
t| jk}|tjkrzt|S t| S ||krt|j d| d| d t|t	r*t|t	r*|jo|jd k	r*|j|jkr*zt|j|j W n2 tk
r(   t|j d| d| d Y nX t|t	r:|n|}|jd|| | fi }	|t|||	S )Nr#   r  %supported_tensor_comparison_op_valuesr   r   r   r   )r   rf  r   r  rD   rn   r   is_notrS   r8   r  r   r  r  r'   r   r   rJ   sizer  Zbroadcast_shapesRuntimeErrorr   r   rT   )
r?   r@   r   r   rf  r  r   Z	is_resultZ
tensor_clsrs  rE   rE   rF   r  ?  sP    



"   z'BuiltinVariable._comparison_with_tensorc                 C   sd   ddl m} | j}||kr6t|j d| d| d |jd|| | fi }tj	||d dS )Nr#   r  r   r   r   r   r  )
r   r  rD   r   rJ   r   r   r  r7   r   )r?   r@   r   r   r  r   rs  rE   rE   rF   r  h  s       z(BuiltinVariable._comparison_with_symnodec                 C   s   t |trt |trd S t |ttfr`t |ttfr`tj||jjdtjft||gi  d dS t	|drt	|drt
t|j|j@ S d S Nr   r  r   )rS   r'   r7   r   r   r   rn   r   r!   r  r.   r  r   r  rE   rE   rF   	call_and_y  s$      zBuiltinVariable.call_and_c                 C   s   t |trt |trd S t |ttfr`t |ttfr`tj||jjdtjft||gi  d dS t	|drt	|drt
t|j|jB S d S r  )rS   r'   r7   r   r   r   rn   r   r!   r  r.   r  r   r  rE   rE   rF   call_or_  s&      zBuiltinVariable.call_or_c                 C   sj   t |tr4tj||jjdtjft|gi  d dS t |trD|j	}t |t
tfrftt|jdkS d S )Nr   r  r   )rS   r7   r   r   r   rn   rq   r!   r,   Zdv_dictr1   r*   r'   rd   r   r  rE   rE   rF   	call_not_  s     
 
	
zBuiltinVariable.call_not_)r   r   c                 C   s   | |d|gi S )N__contains__r   r  rE   rE   rF   call_contains  s    zBuiltinVariable.call_containsr\   r]   )N)N)erJ   r!  __qualname__r  r  r%   Z_nonvar_fieldsclassmethodrR   staticmethodr  	lru_cacher   r   r   r   r  r  r  r  r  r  r   r  r#  r%  r*  r-  r3  r:  r;  r   rT   r^   re  rd  rx  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  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  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r$  rL   Zcall_allZcall_any__classcell__rE   rE   r  rF   rM   e   s   
A,#  X


 ] 
X

$

3	  w  }

)rM   c              	   c   sF   ddl m} t }|| d}z||  d V  W 5 ||  X d S )Nr#   )GradModeVariableF)r  r+  r  Zis_grad_enabledr   exitZenter)r@   r+  Z	org_valueZgmvrE   rE   rF   r    s    

r  )p
contextlibr  rO  r0  loggingrU   rn   r  collectionsr   r   typingr   r   r  r   r   r  r	   r
   r   rV  r   r   r   r   r   Zguardsr   r   Zreplay_recordr   rN   r   r   r   r   utilsr   r   r   r   r   r   r   r   r    r!   r"   baser$   r%   Zconstantr'   Zctx_managerr(   r)   r
  r*   r+   r,   r-   r.   listsr/   r0   r1   r2   r3   r4   r   r5   r6   r7   r8   r9   r  r:   r;   	getLoggerrJ   rR  r   ry   r   rz   r   rt   r   rv   r   rw   r   rx   r   r   r}   r   r~   r   rh   r   r   r   r   r   r   ro  rL   rM   contextmanagerr  rE   rE   rE   rF   <module>   s   4 
                           `