o
    TÃiò  ã                   @   sŽ   d dl mZmZmZ 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dS )é    )ÚListÚOptionalÚTupleN)Úcommon_specÚ
model_specÚtransformer_specc                   @   s   e Zd ZdZdd„ ZdS )ÚWav2Vec2Configz%Configuration for the Wav2Vec2 model.c                 C   s   d S ©N© ©Úselfr
   r
   úS/home/ubuntu/.local/lib/python3.10/site-packages/ctranslate2/specs/wav2vec2_spec.pyÚ__init__   s   zWav2Vec2Config.__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 )ÚWav2Vec2Specc                    s0   t ƒ  ¡  t d¡ |¡| _t||||ƒ| _d S )NÚint16)Úsuperr   ÚnpÚdtypeÚtypeÚ
vocab_sizeÚWav2Vec2EncoderSpecÚencoder)r   Úfeat_layersÚ
num_layersÚ	num_headsr   Úreturn_hidden©Ú	__class__r
   r   r      s   

üzWav2Vec2Spec.__init__c                 C   ó   dS )Nr   r
   r   r
   r
   r   Úname!   ó   zWav2Vec2Spec.namec                 C   r"   )Né   r
   r   r
   r
   r   Úrevision%   r$   zWav2Vec2Spec.revisionc                 C   s   t ƒ S r	   )r   r   r
   r
   r   Úget_default_config)   s   zWav2Vec2Spec.get_default_configc                 C   s   t | j ¡ ƒS r	   )Úintr   Únumpyr   r
   r
   r   Úget_vocabulary_size,   ó   z Wav2Vec2Spec.get_vocabulary_size)
r   r   r   r   Úpropertyr#   r&   r'   r*   Ú__classcell__r
   r
   r    r   r      s    

r   c                   @   ó   e Zd Zdd„ ZdS )ÚWav2Vec2LayerNormConvLayerc                 C   s   t  ¡ | _t  ¡ | _d S r	   )r   Ú
Conv1DSpecÚconvÚLayerNormSpecÚ
layer_normr   r
   r
   r   r   1   s   
z#Wav2Vec2LayerNormConvLayer.__init__N©r   r   r   r   r
   r
   r
   r   r/   0   ó    r/   c                   @   r.   )ÚWav2Vec2PosEmbedConvLayerc                 C   s   t  ¡ | _d S r	   )r   r0   r1   r   r
   r
   r   r   7   r+   z"Wav2Vec2PosEmbedConvLayer.__init__Nr4   r
   r
   r
   r   r6   6   r5   r6   c                   @   r.   )r   c                 C   s‚   t  d¡ |¡| _tƒ | _dd„ t|d ƒD ƒ| _t 	¡ | _
t ¡ | _tƒ | _t 	¡ | _dd„ t|ƒD ƒ| _|s?t ¡ | _d S d S )Nr   c                 S   s   g | ]}t ƒ ‘qS r
   )r/   )Ú.0Úir
   r
   r   Ú
<listcomp>?   s    z0Wav2Vec2EncoderSpec.__init__.<locals>.<listcomp>é   c                 S   s   g | ]}t  ¡ ‘qS r
   )r   ÚTransformerEncoderLayerSpec)r7   Ú_r
   r
   r   r9   D   s    ÿ)r   r   r   r   r/   Úfeat_layer0ÚrangeÚ
feat_layerr   r2   Úfp_layer_normÚ
LinearSpecÚfp_projectionr6   Úpos_conv_embedr3   ÚlayerÚlm_head)r   r   r   r   r   r
   r
   r   r   <   s   


ÿÿzWav2Vec2EncoderSpec.__init__Nr4   r
   r
   r
   r   r   ;   r5   r   )Útypingr   r   r   r)   r   Úctranslate2.specsr   r   r   ÚModelConfigr   ÚLanguageModelSpecr   Ú	LayerSpecr/   r6   r   r
   r
   r
   r   Ú<module>   s    !