o
    "j                     @   s   d dl Z d dl mZ d dlmZ d dlmZ ddlmZmZm	Z	m
Z
mZ ede je
ee	eehZdd Zd	d
 Z	dddZdS )    N)_C_ops)LayerHelper)in_dynamic_mode   )BlockDiagonalCausalMask+BlockDiagonalCausalWithOffsetPaddedKeysMaskBlockDiagonalMaskLowerTriangularMask!LowerTriangularMaskWithTensorBiasc                 C   s.   t | ttfr| jj| jj| jj| jjfS dS )N)NNr   )
isinstancer   r   	k_seqinfoZseqstartZ	q_seqinfoZ
max_seqlen	attn_bias r   n/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/incubate/nn/memory_efficient_attention.py_get_seqlen_info.   s   r   c                 C   s$   t | tjr| S t | tr| jS d S )N)r   paddleTensorr
   Z_biasr   r   r   r   _get_tensor_bias=   s
   
r           Tc                 C   s  t |tv sJ t|tttf}t|\}}	}
}t|tr |jnd }t|tr+|jj	nd }|d u r3d}t
|}| }t rTt| ||||	||||
|||||\}}}|S td
i t }|j| jd}|jdd}|jdd}|jd| ||||	|||d|
|||||d|||dd	 |S )Ng      memory_efficient_attention)dtypefloatZint32)querykeyvaluebiasZcu_seqlens_qZcu_seqlens_kcausal_diagonalseqlen_k)max_seqlen_qmax_seqlen_kcausalZ	dropout_pscaleis_test)output	logsumexpseed_and_offset)typeZinputsattrsZoutputs)r   )r(   SUPPORTED_ATTN_BIAS_TYPESr   r	   r   r   r   r   r   Zseqlenr   r   r   r   r   localsZ"create_variable_for_type_inferencer   Z	append_op)r   r   r   r   pr#   Ztrainingr"   Z
seqstart_kZ
seqstart_qr    r!   r   r   r   r$   r%   r&   r'   helperr   r   r   r   F   s   

	r   )Nr   NT)r   r   Zpaddle.base.layer_helperr   Zpaddle.frameworkr   r   r   r   r   r	   r
   r(   r   r*   r   r   r   r   r   r   r   <module>   s"   	
