a
    ==icG0                     @   sn   d dl mZ G dd dZdd Zdd Zdd	d
Zdd Zdd ZdddZdddZ	dddZ
dd ZdS )    )brewc                   @   s    e Zd Zeed\ZZZZdS )AttentionType   N)	__name__
__module____qualname__tuplerangeZRegularZ	RecurrentZDotZSoftCoverage r
   r
   h/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/caffe2/python/attention.pyr      s   r   c                 C   s   d t| t|S )Nz{}/{})formatstr)scopenamer
   r
   r   s   s    r   c                 C   sB   t | ||gt|d}| jj||t|dgdd|gd\}}|S )N"attention_weighted_encoder_contextZ,attention_weighted_encoder_context_old_shape   )shape)r   Zbatch_mat_mulr   netZReshape)modelencoder_outputs_transposedencoder_output_dimattention_weights_3dr   r   _r
   r
   r   _calc_weighted_context   s    
r   Nc                 C   s>   |d ur | j j||gdgdd}tj| |t|dddd}|S )NZmasked_attention_logitssequence)moder   ZCUDNNr   )Zengineaxis)r   ZSequenceMaskr   Zsoftmaxr   )r   attention_logits_transposedr   encoder_lengthsr   r
   r
   r   _calc_attention_weights0   s    r!   c              	   C   sL   | j ||}tj| |t|d|dddd}tj| |t|dg dd}|S )	Nattention_logitsr      T)dim_indim_outr   Zfreeze_biasr   )r   r   r#   )Zaxes)r   ZTanhr   fcr   	transpose)r   "decoder_hidden_encoder_outputs_sumr   r   r"   r   r
   r
   r   %_calc_attention_logits_from_sum_matchI   s(    r)   c                 C   s4   t j| |t||||dd}| jj||dgd}|S )Nr#   r$   r%   r   r   dims)r   r&   r   r   Squeeze)r   inputr$   r%   r   r   outputr
   r
   r   _apply_fc_weight_for_sum_matchk   s    r0   c	                 C   s   t | ||||dd}	t | ||||dd}
| j|	|
gt|d}| jj||gt|ddd}t| |||d}t| |||d	}t| ||||d
}|||gfS )Nweighted_prev_attention_contextr   r.   r$   r%   r   r   weighted_decoder_hidden_state&decoder_hidden_encoder_outputs_sum_tmpr(   r   	broadcastr   r(   r   r   r   r   r   r    r   r   r   r   r   r0   r   Addr   r)   r!   r   )r   r   r   weighted_encoder_outputsdecoder_hidden_state_tdecoder_hidden_state_dimZ)attention_weighted_encoder_context_t_prevr   r    r1   r3   r4   r(   r   r   r   r
   r
   r   apply_recurrent_attention   sf    		r?   c                 C   sp   t | ||||dd}| jj||gt|dddd}	t| |	||d}
t| |
||d}t| ||||d}|||	gfS )	Nr3   r2   r(   r   )r6   Zuse_grad_hackr7   r8   r9   r:   )r   r   r   r<   r=   r>   r   r    r3   r(   r   r   r   r
   r
   r   apply_regular_attention   sH    

r@   c                 C   s   ||kr&t j| |t|d||dd}n|}| jj|t|ddgd}| jj||dgd}	| jj||	gt|ddd	}
t| |
||d
}t| ||||d}||g fS )Nr3   r#   r*   &squeezed_weighted_decoder_hidden_stater   r+   r"   r   )Ztrans_ar8   r9   )	r   r&   r   r   r-   Z
ExpandDimsZBatchMatMulr!   r   )r   r   r   r=   r>   r   r    r3   rA   Z1expanddims_squeezed_weighted_decoder_hidden_stater   r   r   r
   r
   r   apply_dot_attention  sR    	
rB   c
                 C   s
  t | ||||dd}
| jj||
gt|ddd}| jj|t|ddgd}t| |t|d	}| jj|	|gt|d
ddd}| j||gt|d}t| |||d}t	| |||d}t
| ||||d}| jj|t|ddgd}| jj||gt|ddd}|||g|fS )Nr3   r2   r4   r   r5   coverage_t_prev_2dr   r+   coverage_t_prev_transposedscaled_coverage_weights)r6   r   r(   r7   r8   r9   attention_weights_2dr#   
coverage_t)r0   r   r;   r   r-   r   r'   ZMulr)   r!   r   )r   r   r   r<   r=   r>   r   r    Zcoverage_t_prevZcoverage_weightsr3   r4   rC   rD   rE   r(   r   r   r   rF   rG   r
   r
   r   apply_soft_coverage_attentionF  s    
	rH   )N)N)N)N)Zcaffe2.pythonr   r   r   r   r!   r)   r0   r?   r@   rB   rH   r
   r
   r
   r   <module>   s    
"" 
Q 
@ 
B