U
    zh-                     @   sD   d dl mZ ddlmZ ddlmZ ddlmZ G dd deZd	S )
    )getattr_static   )create_call_function)Unsupported   )VariableTrackerc                       sX   e Zd ZdZedd Z fddZdd Zdd	 Ze	e
d
ddZedd Z  ZS )SDPAParamsVariablezeRepresents the c++ params struct for scaled dot product attention.
    This is a read-only container.c                 C   s   ddl m} ddlm} ddlm} ddlm} || ||d|j}|| ||d	|j	}|| ||d
|j
}	|| ||d|j}
|| ||d|j}|| ||d|j}|||	|
||g}||| |i S )Nr   
SDPAParamsr   
AttrSourcer   )VariableBuilder)TorchInGraphFunctionVariablequerykeyvalue	attn_maskdropout	is_causal)torch.backends.cudar
   sourcer   builderr   torchr   r   r   r   r   r   r   Zcall_function)txr   r   r
   r   r   r   Z	query_varZkey_var	value_varZattn_mask_varZdropout_varZis_causal_var
param_vars r   N/var/www/html/venv/lib/python3.8/site-packages/torch/_dynamo/variables/sdpa.pycreate   s4      zSDPAParamsVariable.createc                    s   || _ || _t jf | d S N)proxyr   super__init__)selfr    r   kwargs	__class__r   r   r"   +   s    zSDPAParamsVariable.__init__c                 C   sN   | j d kst| jd k	st|dd || j |tt| jd d S )Nztorch._C_SDPAParamsT)r   AssertionErrorr   Zload_import_fromZforeachZextend_outputr   len)r#   Zcodegenr   r   r   reconstruct0   s
    zSDPAParamsVariable.reconstructc                 C   s   | j S r   )r    )r#   r   r   r   as_proxy7   s    zSDPAParamsVariable.as_proxy)namereturnc                 C   s   dd l }ddlm} ddlm} ddlm} zt|jj	| W n$ t
k
rb   td| d Y nX ||  |}| jd k	r||||| j|dS |||d	S d S )
Nr   r   r   r   )wrap_fx_proxy)GetAttrVariablez+Unsupported torch._C._SDPAParams attribute )r   r    r   )r   r    )Ztorch._Cr   r   r   r.   miscr/   r   Z_Cr'   AttributeErrorr   Zcreate_getattr_proxyr+   )r#   r   r,   r   r   r.   r/   r    r   r   r   var_getattr:   s(    
  
zSDPAParamsVariable.var_getattrc                 C   s   ddl m} | |kS )Nr   r	   )r   r
   )r   r
   r   r   r   is_sdpa_paramsP   s    z!SDPAParamsVariable.is_sdpa_params)__name__
__module____qualname____doc__staticmethodr   r"   r*   r+   strr   r2   r3   __classcell__r   r   r%   r   r   
   s   
r   N)	inspectr   Zbytecode_transformationr   excr   baser   r   r   r   r   r   <module>   s   