a
    d                     @   sZ  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
Z
d dl
mZmZ ddlmZmZ ddlmZ ddlmZmZ ddlmZ dd	lmZ dd
lmZmZmZmZ ddlmZm Z m!Z!m"Z"m#Z# ddl$m%Z%m&Z&m'Z' ddl(m)Z) ddl*m+Z+ ddl,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2m3Z3m4Z4 ddl5m6Z6 e7e8Z9G dd de'Z:dS )    N)DictList)	sym_floatsym_int   )config	variables)
is_allowed)unimplementedUnsupported)GuardBuilder)DummyModule)
AttrSourceis_constant_sourceSuperSource
TypeSource)check_constant_argscheck_unspec_python_argsistypeproxy_args_kwargsspecialize_args_kwargs   )MutableLocaltypestrVariableTracker)ConstantVariable)ConstDictVariable)BaseListVariableListVariableTupleIteratorVariableTupleVariable)FakeItemVariableSymNodeVariableUnspecializedPythonVariable)UserDefinedVariablec                       sH  e Z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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dd Zdd Zdd Zd d! Zed"d# Zd$d%d&d' fd(d)Zd*d+ Zd,d- Zd.d/ ZeZeZd0d1 Zd2d3 Zd4d5 Zd6d7 Z did8d9Z!e!Z"e!Z#e!Z$d:d; Z%d<d= Z&d>d? Z'd@dA Z(dBdC Z)dDdE Z*dFdG Z+dHdI Z,dJdK Z-dLdM Z.dNdO Z/djdPdQZ0dke1e1dRdSdTZ2e1e1e1dUdVdWZ3e1dXdYdZZ4e1dXd[d\Z5d]d^ Z6d_d` Z7dadb Z8dcdd Z9dedf Z:dgdh Z;e9Z<e9Z=e9Z>e9Z?e9Z@e9ZAe9ZBe9ZC  ZDS )lBuiltinVariableNc               8   C   s   t ttttttttt	t
ttttttttttjt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j0tj1tj2tj3tj4tj5tj6tj7h8} | 8dd t9j:; D  | S )Nc                 s   s"   | ]}t |ttjr|V  qd S N)
isinstancetypemathsqrt.0x r.   h/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/torch/_dynamo/variables/builtin.py	<genexpr>b       z;BuiltinVariable._constant_fold_functions.<locals>.<genexpr>)<absallanyboolcallablechrdictdivmodfloatintlenlistmaxminordpowreprroundsetstrformatsumtupler(   operatorposnegnot_invertmulmatmulfloordivtruedivmodaddsubgetitemlshiftrshiftand_or_xoripowimulimatmul	ifloordivitruedivimodiaddisubilshiftirshiftiandixoriorindexupdater)   __dict__valuesfnsr.   r.   r/   _constant_fold_functions%   sv    :z(BuiltinVariable._constant_fold_functionsc                 C   s   | j |  v S r&   )fnrn   selfr.   r.   r/   can_constant_fold_throughe   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h} | S r&   ) rI   rJ   rK   rL   rM   rA   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rl   r.   r.   r/   _fx_graph_functionsh   sB    !z#BuiltinVariable._fx_graph_functionsc                  C   s6   t jdt jdt jdt jdt jdt jdtdt jdi} | S )N)__add____radd__)__sub____rsub__)__mul____rmul__)__truediv____rtruediv__)__floordiv____rfloordiv__)__mod____rmod__)__pow____rpow__)rI   rS   rT   rN   rQ   rP   rR   rA   rl   r.   r.   r/   _reversible_binops   s    z"BuiltinVariable._reversible_binopsc                  C   s\   t jdt jdt jdt jdt jdt jdt jdt jdt j	d	t j
d
t jdt jdt jdt jdi} | S )N__ipow____imul____imatmul____ifloordiv____itruediv____imod____iadd____iconcat____isub____ilshift____irshift____iand____ixor____ior__)rI   r[   r\   r]   r^   r_   r`   ra   iconcatrb   rc   rd   re   rf   rg   rl   r.   r.   r/   _inplace_binops   s     zBuiltinVariable._inplace_binopsc                     s  i } t t  t  D ]\}}g }t|trN|\}}||fdd}n|}|fdd}|t	t
f|f |t
t	f|f |fdd}|tt
f|f |t
tf|f || |< q dd }ttf|fttf|ftt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dd	fttf fdd	fg}| tj | | S )Nc                 S   s2   t |tr|| ||gi S || ||gi S d S r&   )r'   r$   call_method)txaboptionsforward_namereverse_namer.   r.   r/   user_defined_handler   s    
z=BuiltinVariable._binop_handlers.<locals>.user_defined_handlerc                 S   s   | | ||gi S r&   r   )r   r   r   r   r   r.   r.   r/   r      s    c                 S   s:   ddl m} || | jjd|gt||gi R  fi |S Nr   wrap_fx_proxycall_function)builderr   outputcreate_proxyr   )r   r   r   r   ro   r   r.   r.   r/   dynamic_handler   s    z8BuiltinVariable._binop_handlers.<locals>.dynamic_handlerc                 S   s    t |jt||  fi |S r&   )r    itemsr=   unpack_var_sequencer   r   r   r   r.   r.   r/   tuple_add_handler  s    z:BuiltinVariable._binop_handlers.<locals>.tuple_add_handlerc                 S   s    t t|| |j fi |S r&   )r    r=   r   r   r   r.   r.   r/   <lambda>  s   z1BuiltinVariable._binop_handlers.<locals>.<lambda>c                 S   s   t ||j|j fi |S r&   )r(   r   r   r.   r.   r/   r   $  r1   c              	   S   sD   |j r|| sd S | |tt|jt||  fddi|S )NZregen_guardsF)mutable_localhas_unpack_var_sequencereplace_allr   r=   r   r   r   r.   r.   r/   list_iadd_handler)  s    z:BuiltinVariable._binop_handlers.<locals>.list_iadd_handlerc                 S   s"   |j f |j|  t d|S )N)r   r   )	__class__r   as_python_constantr   )r   lstconstr   r.   r.   r/   expand_list_likeH  s    z9BuiltinVariable._binop_handlers.<locals>.expand_list_likec                    s    | |||S r&   r.   r   r   r.   r/   r   T  r1   c                    s    | |||S r&   r.   r   r   r.   r/   r   X  r1   )	itertoolschainr%   r   r   r   r'   rH   appendr$   r   r"   r    r   r   rI   rS   extendr   ra   rN   )Zop_handlersopZmagic_method_nameshandlersr   r   r   r   r   Zlist_like_addition_handlersr   Zlist_like_iadd_handlersZlist_like_expansion_handlersr.   r   r/   _binop_handlers   s|    	









zBuiltinVariable._binop_handlersc                 C   sJ   t  }| |vrd S ||  D ](\\}}}t||rt||r|  S qd S r&   )r%   r   r'   )r   r   r   r   Ztype1Ztype2handlerr.   r.   r/   _find_binop_handler_  s    
z#BuiltinVariable._find_binop_handlerc                 C   s   | j |  v S r&   )ro   rs   rp   r.   r.   r/   can_insert_in_graphl  s    z#BuiltinVariable.can_insert_in_graphc                    s   t  jf i | || _d S r&   )super__init__ro   )rq   ro   kwargsr   r.   r/   r   o  s    zBuiltinVariable.__init__c                 C   s,   | j d u rd}n| j j}| jj d| dS )NNone())ro   __name__r   )rq   namer.   r.   r/   __str__s  s    
zBuiltinVariable.__str__c                 C   s
   t | jS r&   )r(   ro   rp   r.   r.   r/   python_type{  s    zBuiltinVariable.python_typec                 C   s   | j S r&   )ro   rp   r.   r.   r/   r   ~  s    z"BuiltinVariable.as_python_constantc                 C   s<   | j j}| j jdksJ ||jjvs,J d|j|ddgS )Nbuiltinszshadowed globalT)rS   )ro   r   
__module__r   	f_globalsZcreate_load_global)rq   Zcodegenr   r.   r.   r/   reconstruct  s    zBuiltinVariable.reconstructc                 O   s
   t ||S r&   )r   rq   argsr   r.   r.   r/   constant_args  s    zBuiltinVariable.constant_argsc                 O   s>   t dd t|| D o<t dd t|| D  S )Nc                 s   s   | ]}t |tjV  qd S r&   )r'   r   TensorVariabler,   ir.   r.   r/   r0     s   z.BuiltinVariable.tensor_args.<locals>.<genexpr>c                 s   s   | ]}t |tjV  qd S r&   )r'   r   GetAttrVariabler   r.   r.   r/   r0     s   )r4   r   r   rk   r   r.   r.   r/   tensor_args  s    zBuiltinVariable.tensor_argsc                 O   s
   t ||S r&   )r   r   r.   r.   r/   unspec_python_args  s    z"BuiltinVariable.unspec_python_argsc                 C   s   g }i }| D ].}t |tjfr,||j q||  q|D ]:\}}t |tjfrh|||ji q@||| i q@||fS r&   )r'   r   r#   r   	raw_valuer   ri   )r   r   Zunwrapped_argsZunwrapped_kwargsr-   kvr.   r.   r/   unwrap_unspec_args_kwargs  s"    z)BuiltinVariable.unwrap_unspec_args_kwargszList[VariableTracker]zDict[str, VariableTracker]r   )r   r   returnc              
      s  ddl m}m} t||}| j|i |}| j|i |}t| || }	| 	 oZ|pZ|}
t
|ttfsnJ t
|ts|J | jtju rt|dkrt
|d tjr|d jtjkrtjstd | jtju rt
|d tjsd}t|||\}}|  r|r| jtju r2t
|d tr2t
|d tjsސzz| j}| jtju rtt
|d tjrttj|d |d g }}| jtj u rtj!}|j"j#d|gt$||R  }t%dd	 |D r|t&||fi |	W S | j|i |r:| '||\}}| j|i |}t%d
d t()|| D }|t*||f||d|	W S t+dd |D rft,j-||d fi |	W S | jtj.u rt
|d tj*r|d /||d< |||fi |	W S W n. t0y   td|  d| d|  Y n0 | jt1t2fv rBt
|d t,rB| jt1u rt3nt4}|f ||j"#d||d 5 fi d|	}|S | j| 6 v sb| j| 7 v rt|dkr~t|dksJ t89| j|d |d }|r|||d |d |	}|d ur|S t:| d| jj; d }|rLz"t<=|j>|g|R i | W nH t?yJ } z.|
s2t@Ad| d| d d }W Y d }~n
d }~0 0 |rz0||g|R i |}|d ur|B|	W S W n6 tCy } z|
s |D  W Y d }~n
d }~0 0 |
rt|||\}}tj| E dd	 |D i dd |F D fi |	S tG H|||S )Nr   )r   wrap_fx_proxy_clsr   z"dynamic Tensor.__getitem__(bool[])r   Fr   c                 S   s   g | ]}t |tqS r.   r'   r!   r,   argr.   r.   r/   
<listcomp>  r1   z1BuiltinVariable.call_function.<locals>.<listcomp>c                 s   s    | ]}t |tjr|jV  qd S r&   r'   r   r#   need_unwrapr+   r.   r.   r/   r0     s   z0BuiltinVariable.call_function.<locals>.<genexpr>)r   r   c                 s   s   | ]}t |tV  qd S r&   r'   r"   r+   r.   r.   r/   r0     r1   zpartial tensor op:  r   proxyZcall_zincorrect arg count z and no constant handlerc                 S   s   g | ]}|  qS r.   r   r+   r.   r.   r/   r   D  r1   c                 S   s   i | ]\}}||  qS r.   r   )r,   r   r   r.   r.   r/   
<dictcomp>E  r1   z1BuiltinVariable.call_function.<locals>.<dictcomp>)Ir   r   r   r   r   r   r   	propagaterk   rr   r'   r=   rH   r8   ro   rI   rU   r<   r   r   dtypetorchr5   r   Zdynamic_shapesr
   r   r   r   ra   r   rS   rL   Zlogical_notr   r   r   r4   r!   r   r   r   r#   r3   r"   createrQ   Zconvert_to_constantNotImplementedErrorr;   r:   r   r   as_proxyr   r   r%   r   getattrr   inspect	signaturebind	TypeErrorlogwarningadd_optionsr   Zremove_from_statsr   r   r   r   )rq   r   r   r   r   r   r   r   r   r   Zhas_constant_handlerro   r   _args_kwargsr   r   Zfn_outZbinop_handlerresr   excresultr   r.   r/   r     s   




	

  
  
"
zBuiltinVariable.call_functionc                 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   )r<   r   r   _call_min_max_seq_call_min_max_binaryrq   r   r   r   r.   r.   r/   _call_min_maxK  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   )r<   	functoolsreducepartialr   )rq   r   r   r.   r.   r/   r   U  s    z!BuiltinVariable._call_min_max_seqc                 C   sv  |  ||rt|tjs$|| }}t|tjs4J t|trVttj||gi }t|t	rddl
m} |f ||jjd| jgt||gi R  dt| ||gS | r| jtu rd|ind|i}ttj||g|}n.ttjttji| j }t||||gi }tdd ||fD rtd	d
 ||fD rPtj|S | rd| }n|j}| jtu rt|j|}	nt|j|}	tdd ||fD }
tj||	|
S |S nt|tjrt|tjr| jtu rtt|j|jS tt|j|jS ndt|t	s&t|t	rV|jjd| jgt||gi R  }t	 ||d S t!dt"| dt"|  d S )Nr   r   r   r   r?   r>   c                 s   s    | ]}t |tjtjfV  qd S r&   )r'   r   r#   r   r   r.   r.   r/   r0     s   z7BuiltinVariable._call_min_max_binary.<locals>.<genexpr>c                 S   s   g | ]}t |tqS r.   r   )r,   valr.   r.   r/   r     r1   z8BuiltinVariable._call_min_max_binary.<locals>.<listcomp>c                 s   s    | ]}t |tjr|jV  qd S r&   r   r+   r.   r.   r/   r0     s   z unsupported min / max over args z, )#r   r'   r   r   r!   TorchVariabler   tensorr   r"   r   r   r   r   ro   r   r   r   is_python_constantr>   clampmaximumr?   Zminimumr3   r4   Zfrom_tensor_variabler   r   r#   r   valuer   r
   rE   )rq   r   r   r   r   r   r   ro   Zraw_bZraw_resr   r   r.   r.   r/   r   \  st    






z$BuiltinVariable._call_min_max_binaryc                    sd   | j | s| j| r.t|i \}}t|S | j| r`fdd  fdd|D }t|S d S )Nc                    s,   t | tr|  jS t | tr(|  S | S r&   )r'   r"   Zevaluate_exprr   r   r   )r   r   r.   r/   guard_if_dyn  s
    

z0BuiltinVariable.call_range.<locals>.guard_if_dync                    s   g | ]}t  |qS r.   )r   r   r   )r  r.   r/   r     r1   z.BuiltinVariable.call_range.<locals>.<listcomp>)r   r   r   r   ZRangeVariable_dynamic_args)rq   r   r   _r.   )r  r   r/   
call_range  s    


zBuiltinVariable.call_rangec                 O   s(   t dd |D p&t dd | D S )Nc                 S   s   g | ]}t |tqS r.   r   r+   r.   r.   r/   r     r1   z1BuiltinVariable._dynamic_args.<locals>.<listcomp>c                 S   s   g | ]}t |tqS r.   r   r+   r.   r.   r/   r     r1   )r4   rk   r   r.   r.   r/   r    s    zBuiltinVariable._dynamic_argsc                 G   s
   t |S r&   )r   ZSliceVariable)rq   r   r   r.   r.   r/   
call_slice  s    zBuiltinVariable.call_slicec                 O   sJ   ddl m} t| || }|||jjd| jgt||R  fi |S r   )	r   r   r   r   rk   r   r   ro   r   )rq   r   r   r   r   r   r.   r.   r/   
_dyn_proxy  s    zBuiltinVariable._dyn_proxyc                 O   s   | j |i |r(| j|g|R i |S tj| j}|d u rL|g t dS ||rt }|j	rt
|j	st|tr||j	tj n||j	tj |t||t |d| |S d S )Nr   )r   guards)r  r  r   r   Zcls_forro   r   r   rD   sourcer   r'   r   rS   Z
make_guardr   ZTUPLE_ITERATOR_LENZLIST_LENGTHr=   r   r   )rq   r   objr   r   clsr  r.   r.   r/   _call_iter_tuple_list  s*    

z%BuiltinVariable._call_iter_tuple_listc                 C   s   t |tjr|jt dS d S )Nr  )r'   r   r   cloner   )rq   r   r   r.   r.   r/   	call_dict  s    zBuiltinVariable.call_dictc                    s\   t | | tfdd|D rX fddtfdd|D  D }tj|fi  S d S )Nc                 3   s   | ]}|  V  qd S r&   r   r+   r
  r.   r/   r0     r1   z+BuiltinVariable.call_zip.<locals>.<genexpr>c                    s"   g | ]}t jt|fi  qS r.   )r   r    r=   )r,   itemr   r.   r/   r     s   z,BuiltinVariable.call_zip.<locals>.<listcomp>c                    s   g | ]}|  qS r.   )r   r   r
  r.   r/   r     r1   )r   r   r3   zipr   r    r   r.   )r   r   r/   call_zip  s    
zBuiltinVariable.call_zipc                    s   t | | t|dkrd}n0t|dks.J t|d tjsBJ |d  }|d |r fddt|d 	||D }tj
|fi  S d S )Nr   r   r   c                    s4   g | ],\}}t jt j|fi  |gfi  qS r.   )r   r    r   )r,   idxvarr  r.   r/   r     s   z2BuiltinVariable.call_enumerate.<locals>.<listcomp>)r   r   r<   r'   r   r   r   r   	enumerater   r    )rq   r   r   startr   r.   r  r/   call_enumerate  s    
zBuiltinVariable.call_enumeratec                 O   s   |d  |d|dd  |S )Nr   __len__r   r   rq   r   r   r   r.   r.   r/   call_len  s    zBuiltinVariable.call_lenc                 O   s<   | j |i |r t|||\}}|d |d|dd  |S )Nr   __getitem__r   )r   r   r   r$  r.   r.   r/   call_getitem  s    zBuiltinVariable.call_getitemc                 C   s   |  }| }t|tjr6|jd ur6t||S t|tjrdt|j	t
jrdtd| d|  t|tjrd|jjv rt|j||j	S zt||}W n ty   ||u }Y n0 t|S )Nz&isinstance called on UserDefinedClass r   __instancecheck__)r   r   r'   r   r   r   r   call_isinstanceUserDefinedObjectVariabler	  typesMemberDescriptorTyper
   r   rj   r(  
issubclassr   )rq   r   r   Zisinstance_typeZarg_typer  r.   r.   r/   r)    s,    

zBuiltinVariable.call_isinstancec                 C   s6   |j d u s|j d u rd nt|j |j }tj|||dS )Nr  )r  r   r   ZSuperVariable)rq   r   r   r   r  r.   r.   r/   
call_super7  s    zBuiltinVariable.call_superc                 C   sJ   t |tjr(| \}}||| |S t |tjrF|jd | |S d S )Nr   )r'   r   ZListIteratorVariableZnext_variablesr   r   r   r   )rq   r   r   r  Z	next_iterr.   r.   r/   	call_next?  s    zBuiltinVariable.call_nextc                 C   s*   |  r&| }|||| ||S d S r&   )r  r   call_hasattrr   )rq   r   r  attrr   r.   r.   r/   r1  G  s    zBuiltinVariable.call_hasattrc                    s<   | r8 fdd|D }t||  |S d S )Nc                    s   g | ]}  |gi qS r.   )r   r+   ro   r   r.   r/   r   N  r1   z,BuiltinVariable.call_map.<locals>.<listcomp>)r   r   r   r    r   )rq   r   ro   seqr   r.   r3  r/   call_mapL  s    
zBuiltinVariable.call_mapc              	   K   s   t |tjtjfrHtdd |jD rH|sHdd |jD }tt|S ||r|	dtd
 }|rpJ |||d  }ttj|ttjt|td| |gi S d S )Nc                 S   s(   g | ] }t |tjo"t |jttfqS r.   )r'   r   r   r	  r;   r:   r+   r.   r.   r/   r   V  s   z,BuiltinVariable.call_sum.<locals>.<listcomp>c                 S   s   g | ]
}|j qS r.   )r	  r+   r.   r.   r/   r   ^  r1   r!  r   )r'   r   r   r    r3   r   r   rG   r   popr   r   r%   r   r  r   rI   rS   r   )rq   r   r4  r   Znew_listr!  r   r.   r.   r/   call_sumQ  s4    	


zBuiltinVariable.call_sumc                 C   s\   | |rX||}|d u r4|d |dd   }}n|}|D ]}||||gi }q<|S d S r   )r   r   r   )rq   r   functioniterableZinitializerr   r	  elementr.   r.   r/   call_reducep  s    

zBuiltinVariable.call_reduce)r  name_varc                 C   s  ddl m}m}m}m}m}	 ddlm}
 t	| ||}|d }|
 }| sVtd |jj|rz|jj|||W S  ty   Y n0 |d ur| |||}||j |
 dv sJ |
 s||S |jrt|j|}||d< nd }t|tjr||||S t|tjr|dkr|rz|jjD ]4}|j|jkr:|j j!}|
||||  S q:td	 ntd	 nt|tjtj"tjtj#tj$frz|||j%|d
|W S  t&y   |||fi | Y S 0 n&t||rRt'|j(|}t)|r ||fi |S |*|r<||fi |S |
||||S nt||t+fr|j(j,| }t-j.r|j/0|j(|| |
||||S t1||	r|dv r|t'|j2|fi t	|S z|||j%|d
|W S  t&y   |||fi | Y S 0 d S )Nr   )r   r   PythonModuleVariabler  UserFunctionVariableVariableBuilderr  znon-const getattr() name)TFr  gradztensor gradr.  )r   r   )3 r   r   r=  r  r>  r   r@  r   r   r   r  r
   r   side_effectsis_attribute_mutationZ	load_attrr   KeyErrorr1  ri   r  Z
add_guardsr  r   r'   r   NNModuleVariableZvar_getattrr   Z	graphargsbaseZexamplerA  ZNamedTupleVariableZUserDefinedClassVariabler*  r  r   r   r	  r	   Z
is_literalr   rj   r   Zreplay_record_enabledZexec_recorderZrecord_module_accessr   ro   )rq   r   r  r<  defaultr   r   r=  r  r>  r@  r   r  r   Zhasattr_varr  ZgraphargZexample_valuememberr.   r.   r/   call_getattr{  s    





zBuiltinVariable.call_getattr)r  r<  r  c                 C   s   t |tjtjfr&||d||gi S |jj|r`| r`|jj	||
 | || ||S t |tjrtdt|jj  nt |tjr|| d S )N__setattr__z#setattr(UserDefinedObjectVariable) )r'   r   ZBlackHoleVariableZDataClassVariabler   r   rC  rD  r  Z
store_attrr   r   r*  r
   r(   r	  rK  rF  Zconvert_to_unspecialized)rq   r   r  r<  r  r.   r.   r/   call_setattr  s    zBuiltinVariable.call_setattr)r  c                 C   s   ddl m} z| }W n ty.   d }Y n0 t|tjrLt|| |S |d urv|j	rv||t
|j	|| |S td| d d S )Nr   r?  ztype(r   )r   r@  r   r   r   r   r    r%   r   r  r   r
   )rq   r   r  r@  Zpy_typer.   r.   r/   	call_type  s    
zBuiltinVariable.call_typec                 C   s:   | |r6tt||}tj|fi t| |S d S r&   )r   r=   reversedr   r   r    r   r   )rq   r   r  r   r.   r.   r/   call_reversed  s    

zBuiltinVariable.call_reversedc                    sX   t  fdd|D rTg }|D ]}||  qtj|fi tj| g|R  S d S )Nc                 3   s   | ]}|  V  qd S r&   r  )r,   r  r
  r.   r/   r0   
  r1   z-BuiltinVariable.call_chain.<locals>.<genexpr>)r3   r   r   r   r    r   r   )rq   r   r   r   r  r.   r
  r/   
call_chain	  s    zBuiltinVariable.call_chainc                 G   sp   | |rltdd |D rldd |D }||}ttj|g|R  }tj|fi tj	| |g|R  S d S )Nc                 s   s   | ]}|  V  qd S r&   )r  r+   r.   r.   r/   r0     s   z.BuiltinVariable.call_islice.<locals>.<genexpr>c                 S   s   g | ]}|  qS r.   r   r+   r.   r.   r/   r     r1   z/BuiltinVariable.call_islice.<locals>.<listcomp>)
r   r3   r   r=   r   islicer   r    r   r   )rq   r   r9  r   Z
const_argsr   r.   r.   r/   call_islice  s    
zBuiltinVariable.call_islicec                 G   sR   t |dkr@t|d tjr@|d }|j|j}tt|S t	d|  d S )Nr   zcall_id with args )
r<   r'   r   rF  r   Zget_submoduleZ
module_keyr   idr
   )rq   r   r   Znn_mod_variablerR   r.   r.   r/   call_id  s
    zBuiltinVariable.call_idc                    s|  ddl m}m}m}m} ddlm} ddlm}	m	}
 | j
 fdd}t |r|	 vrf|  t|sv|  | j
j
S t |tfrtt|fr|| S t |rt tks|  || S t |r(ddlm} |
 vr|  ||   S t ts@ttrr|
 vrT|  tj|   dd	S |  dS )
z
        Used to implement comparison operators for different types.
        For example, list1 < list2 is implemented differently from tensor1 < tensor2
        r   )r   r   r   r>  )SizeVariable)supported_const_comparison_opssupported_tensor_comparison_opsc                      s&   t dt  d dt  d S )Nzcomparison r   )r
   r   r.   leftr   rightr.   r/   _unimplemented8  s    z3BuiltinVariable._comparison.<locals>._unimplementedr   NZsym_num)rB  r   r   r   r>  listsrU  r  rV  rW  ro   r'   rk   r    Zlist_comparer(   r   r   r   r"   r   )rq   r   rY  rZ  r   r   r   r>  rU  rV  rW  r[  r   r.   rX  r/   _comparison%  sH    


zBuiltinVariable._comparisonc                 C   sF   t |trBt |trBtj||jjdtjgt||gi R  d dS d S Nr   r\  )r'   r"   r   r   r   rI   rX   r   )rq   r   r   r   r.   r.   r/   	call_and_g  s    zBuiltinVariable.call_and_c                 C   s:   t |tr6tj||jjdtjgt|gi R  d dS d S r_  )r'   r"   r   r   r   rI   rL   r   )rq   r   r   r.   r.   r/   	call_not_s  s    

zBuiltinVariable.call_not_)N)N)N)Er   r   __qualname__staticmethodr   	lru_cachern   rr   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zcall_minZcall_maxr  r  r  r  r  Z	call_iterZ
call_tuple	call_listr  r  r"  r%  r'  r)  r/  r0  r1  r5  r7  r;  r   rJ  rL  rM  rO  rP  rR  rT  r^  r`  ra  Zcall_eqZcall_gtZcall_ltZcall_geZcall_leZcall_neZcall_is_Zcall_is_not__classcell__r.   r.   r   r/   r%   $   s   >$ "
	
  
S
	
 d	Br%   );r   r   r   loggingr)   rI   r+  typingr   r   r   r   r   rB  r   r   Zallowed_functionsr	   r   r
   r   r  r   Zreplay_recordr   r  r   r   r   r   utilsr   r   r   r   r   rG  r   r   r   Zconstantr   Zdictsr   r]  r   r   r   r    r  r!   r"   r#   Zuser_definedr$   	getLoggerr   r   r%   r.   r.   r.   r/   <module>   s0   
