a
    dC                     @   s   d dl Z d dlmZmZ d dlZddlmZ ddlmZ ddl	m
Z
mZmZ ddlmZmZ G d	d
 d
eZG dd deZdS )    N)DictList   )	variables)unimplemented)	HAS_NUMPYistypenp   )typestrVariableTrackerc                       s   e Zd Z fddZdd Zdd Zdd Zd	d
 Zedd Z	e
dddZedd Zdd Zdd Zdddd fddZ  ZS )ConstantVariablec                    sh   t  jf i | t|tjr"J t|tjr2J t|tjrBJ tr^t|tj	r^|
 | _n|| _d S N)super__init__
isinstancetorchZTensorSymIntSymFloatr   r	   numberitemvalueselfr   kwargs	__class__ i/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/torch/_dynamo/variables/constant.pyr      s    zConstantVariable.__init__c                 C   s   | j S r   r   r   r   r   r   as_proxy   s    zConstantVariable.as_proxyc                 C   s   dt | jj dS )NzConstantVariable())typer   __name__r    r   r   r   __str__   s    zConstantVariable.__str__c                 C   s
   t | jS r   r#   r   r    r   r   r   python_type   s    zConstantVariable.python_typec                 C   s   | j S r   r   r    r   r   r   as_python_constant"   s    z#ConstantVariable.as_python_constantc                 C   s   | j ddS )zz
        Need this when adding a BaseListVariable and a ConstantVariable together.
        Happens in detectron2.
        N)tx)unpack_var_sequencer    r   r   r   items%   s    zConstantVariable.items)argc                 C   s$   t | j|  fi t| |gS r   )r   r   r(   r   	propagate)r   r,   r   r   r   getitem_const-   s
    zConstantVariable.getitem_constc                 C   sH   t | tttt d tfv rdS t | ttttfv rDt	dd | D S dS )NTc                 s   s   | ]}t |V  qd S r   )r   
is_literal.0xr   r   r   	<genexpr>8       z.ConstantVariable.is_literal.<locals>.<genexpr>F)
r#   intfloatboolstrlisttupleset	frozensetall)objr   r   r   r/   3   s
    zConstantVariable.is_literalc              
      sT   z$t | g  fdd|  D W S  tyN } zt|W Y d }~n
d }~0 0 d S )Nc                    s   g | ]}t |fi  qS r   )r   r0   optionsr   r   
<listcomp>>   r4   z8ConstantVariable.unpack_var_sequence.<locals>.<listcomp>)r   r-   r(   	TypeErrorNotImplementedError)r   r)   er   r?   r   r*   ;   s
    z$ConstantVariable.unpack_var_sequencec                 C   s   t | j|}t|rt |S r   getattrr   callablerC   r   r)   namememberr   r   r   const_getattrB   s    zConstantVariable.const_getattrzList[VariableTracker]zDict[str, VariableTracker]r   )argsr   returnc              	      s\  ddl m  t| }tjtrTtj	f 
|jd|||S t fddD rt j||S z$dd D }dd | D }W n$ ty   t || Y S 0 fd	d
}tjtr0tj v r0|r
J tj}	t|	|i |fi |S |tsD|trtt}
|d }t|tjtjfrddl m  |jd|
j|fi } j |||fi |S t|
j|fi |S dkrs|stt!jfi |S dkr>t!dkr>d " r>|rJ d # }|jv }t|fi |S t$dt%j d  d S )Nr
   SymNodeVariable)r+   sourcec                    s   g | ]}t | qS r   )r   r0   rN   r   r   rA   Y   r4   z0ConstantVariable.call_method.<locals>.<listcomp>c                 S   s   g | ]}|  qS r   r(   )r1   ar   r   r   rA   `   r4   c                 S   s   i | ]\}}||  qS r   rQ   )r1   kvr   r   r   
<dictcomp>a   r4   z0ConstantVariable.call_method.<locals>.<dictcomp>c                    s.   t j| o,tto,t dko, d  S )Nr
   r   )r   r   hasattroperatorlenis_python_constant)Znum_ty)rL   rI   r   r   r   has_arith_binope   s    

z5ConstantVariable.call_method.<locals>.has_arith_binopr   call_function__len____contains__zconst method call .)&ZtensorrO   r   r-   valuesr   r   r:   r   ZTupleVariabler*   rP   call_methodanyr!   r+   rC   r   r   r8   __dict__keysrF   r   r5   r6   rW   r   r   r   outputZcreate_proxycreaterX   rY   r(   r   r   )r   r)   rI   rL   r   r@   Z
const_argsZconst_kwargsrZ   methodopZ
add_targetproxysearchresultr   )rO   rL   rI   r   r   r`   H   sT    

&

zConstantVariable.call_method)r$   
__module____qualname__r   r!   r%   r'   r(   propertyr+   r   r.   staticmethodr/   r*   rK   r`   __classcell__r   r   r   r   r      s    


r   c                       sD   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Z  Z	S )EnumVariablec                    s   t  jf i | || _d S r   )r   r   r   r   r   r   r   r      s    zEnumVariable.__init__c                 C   s   | j S r   r   r    r   r   r   r!      s    zEnumVariable.as_proxyc                 C   s   dt | j dS )NzEnumVariable(r"   r&   r    r   r   r   r%      s    zEnumVariable.__str__c                 C   s
   t | jS r   r&   r    r   r   r   r'      s    zEnumVariable.python_typec                 C   s   | j S r   r   r    r   r   r   r(      s    zEnumVariable.as_python_constantc                 C   s   t | j|}t|rt |S r   rE   rH   r   r   r   rK      s    zEnumVariable.const_getattr)
r$   rk   rl   r   r!   r%   r'   r(   rK   ro   r   r   r   r   rp      s   rp   )rW   typingr   r   r    r   excr   utilsr   r   r	   baser   r   r   rp   r   r   r   r   <module>   s   