o
    Tih                     @   s   d dl Zd dlmZmZmZ G dd dejZG dd dejZ	G dd dej
ZG d	d
 d
ej
ZG dd dej
ZG dd dej
ZdS )    N)attention_speccommon_spec
model_specc                   @   s   e Zd ZdZdd ZdS )Wav2Vec2BertConfigz)Configuration for the Wav2Vec2Bert model.c                 C   s   d S N selfr   r   W/home/ubuntu/.local/lib/python3.10/site-packages/ctranslate2/specs/wav2vec2bert_spec.py__init__	   s   zWav2Vec2BertConfig.__init__N)__name__
__module____qualname____doc__r   r   r   r   r
   r      s    r   c                       sD   e Zd Z fddZedd Zedd Zdd Zd	d
 Z  Z	S )Wav2Vec2BertSpecc                    s.   t    td|| _t|||| _d S )Nint16)superr   npdtypetype
vocab_sizeWav2Vec2BertEncoderSpecencoder)r	   num_hidden_layersnum_adapter_layersr   return_hidden	__class__r   r
   r      s   

zWav2Vec2BertSpec.__init__c                 C      dS )Nr   r   r   r   r   r
   name      zWav2Vec2BertSpec.namec                 C   r   )N   r   r   r   r   r
   revision!   r    zWav2Vec2BertSpec.revisionc                 C   s   t  S r   )r   r   r   r   r
   get_default_config%   s   z#Wav2Vec2BertSpec.get_default_configc                 C   s   t | j S r   )intr   numpyr   r   r   r
   get_vocabulary_size(   s   z$Wav2Vec2BertSpec.get_vocabulary_size)
r   r   r   r   propertyr   r"   r#   r&   __classcell__r   r   r   r
   r      s    

r   c                   @   s   e Zd ZdddZdS )Wav2Vec2BertFeedForwardSpecFc                 C   s*   t  | _t  | _|rt  | _d S d S r   )r   
LinearSpeclinear_0linear_1linear_0_noact)r	   glurms_normr   r   r
   r   -   s
   

z$Wav2Vec2BertFeedForwardSpec.__init__N)FFr   r   r   r   r   r   r   r
   r)   ,   s    r)   c                   @      e Zd Zdd ZdS )EncoderSpecc                 C   s   t  | _t | _t  | _tjddd| _| j`	t  | _
t  | _| j`t  | _| j`t  | _t  | _| j`t  | _t | _t  | _d S )NTself_attentionrelative_asymmetric_position)r   LayerNormSpecenc_ffn1_layer_normr)   enc_ffn1enc_attn_layer_normr   MultiHeadAttentionSpecenc_attn
layer_normenc_conv_layer_norm
Conv1DSpecenc_conv_pointwise_conv1biasenc_conv_depthwise_convenc_conv_depthwise_layer_normenc_conv_pointwise_conv2enc_ffn2_layer_normenc_ffn2enc_final_layer_normr   r   r   r
   r   5   s&   







zEncoderSpec.__init__Nr0   r   r   r   r
   r2   4       r2   c                   @   r1   )AdapterSpecc                 C   sT   t  | _t  | _t  | _t  | _tjddd| _	| j	`
t  | _t | _d S )NTFr3   )r   r6   adpt_residual_layer_normr>   adpt_residual_convadpt_attn_layer_normadpt_attn_convr   r:   adpt_attn_layerr<   adpt_ffn_layer_normr)   adpt_ffnr   r   r   r
   r   L   s   




zAdapterSpec.__init__Nr0   r   r   r   r
   rH   K   rG   rH   c                   @   r1   )r   c                 C   sR   t  | _t  | _dd t|D | _dd t|D | _|s't  | _d S d S )Nc                 S      g | ]}t  qS r   )r2   .0_r   r   r
   
<listcomp>^       z4Wav2Vec2BertEncoderSpec.__init__.<locals>.<listcomp>c                 S   rP   r   )rH   rQ   r   r   r
   rT   _   rU   )	r   r6   fp_layer_normr*   fp_projectionrangeencoder_layersadapter_layerslm_head)r	   r   r   r   r   r   r
   r   [   s   

z Wav2Vec2BertEncoderSpec.__init__Nr0   r   r   r   r
   r   Z   rG   r   )r%   r   ctranslate2.specsr   r   r   ModelConfigr   LanguageModelSpecr   	LayerSpecr)   r2   rH   r   r   r   r   r
   <module>   s    