U
    -e;                     @   s   d dl mZmZmZ d dlZd dlmZmZ d dlmZ d dl	m
Z
mZmZ dd ZG dd	 d	ejZdddZdd Zd ddZdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )!    )ListOptionalTupleN)nnTensor)load_state_dict_from_url)wav2vec2_modelWav2Vec2Modelwavlm_modelc                 C   s@   t td}| |kr.tdt|  d|  ||  }|f |S )N)ZWav2Vec2ZWavLMzSupported model types are z	. Found: )r   r
   
ValueErrortuplekeys)type_paramsZ	factoriesfactory r   e/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/torchaudio/pipelines/_wav2vec2/utils.py
_get_model
   s    r   c                	       s   e Zd ZdZeeeed fddZdeee e	eee f dddZ
ejjdeee ee e	ee ee f d	d
dZ  ZS )_Wav2Vec2Modelz{Wrapper class for :py:class:`~torchaudio.models.Wav2Vec2Model`.

    This is used for layer normalization at the input
    )modelnormalize_waveformapply_log_softmaxappend_starc                    s&   t    || _|| _|| _|| _d S N)super__init__r   r   r   r   )selfr   r   r   r   	__class__r   r   r      s
    
z_Wav2Vec2Model.__init__N)	waveformslengthsreturnc                 C   s~   | j rtj||j}| ||\}}| jr>tjjj|dd}| j	rvtj
d|ddf|j|jd}tj||fdd}||fS )N)dim   )dtypedevice)r   r   
functional
layer_normshaper   r   torchZlog_softmaxr   Zzerossizer%   r&   cat)r   r   r    outputZoutput_lengthsZstar_dimr   r   r   forward"   s     z_Wav2Vec2Model.forward)r   r    
num_layersr!   c                 C   s&   | j rtj||j}| j|||S r   )r   r   r'   r(   r)   r   extract_features)r   r   r    r/   r   r   r   r0   -   s    z_Wav2Vec2Model.extract_features)N)NN)__name__
__module____qualname____doc__r	   boolr   r   r   r   r.   r*   ZjitZexportintr   r0   __classcell__r   r   r   r   r      s   $  r   Fc                 C   s   t | |||S )z&Add extra transformations to the model)r   )moduler   r   r   r   r   r   _extend_model9   s    r9   c                    s>   dD ]4}| | t  fddtdD | |< qd S )N)z
aux.weightzaux.biasc                    s   g | ]}| kr| qS r   r   ).0iaxesmatr   r   
<listcomp>L   s      z$_remove_aux_axes.<locals>.<listcomp>r   )r*   stackranger+   )
state_dictr=   keyr   r<   r   _remove_aux_axes>   s    rD   c                 C   sB   |  dsd|  } |d kr i n|}t| f|}|r>t|| |S )Nhttpsz/https://download.pytorch.org/torchaudio/models/)
startswithr   rD   )urlZ	dl_kwargsZremove_axesrB   r   r   r   _get_state_dictO   s    


rH   c                   C   s   dS )N)|ETAONIHSRDLUMWCFGYPBVK'XJQZr   r   r   r   r   _get_en_labelsY   s    re   c                   C   s   dS )N)rI   enr;   rstadhulgcmobwfkzpv   ü   ä   öj   ßyxqr   r   r   r   r   _get_de_labelsz   s    r   c                   C   s   dS )N)rI   rf   rj   rs   r;   rk   rg   ri   rh   rm   ro   rl   rq   rn   rr   ry   rv   rp   ru   r   rt   rz   rw   r   r~   r   rx   r   r   r   r   r   _get_vp_en_labels   s    r   c                   C   s   dS )N)"rI   rf   rk   rs   ri   rg   rh   r;   ro   rl   rq   rj   rn   ry   rr   rt   r   r   rp   rz   rm      órv      í   ár~   rx      ñ   ér      úrw   ru   r{   r   r   r   r   r   _get_es_labels   s    r   c                   C   s   dS )N)*rI   rf   ri   rg   r;   rj   rh   rk   rs   rn   ro   rl   rq   ry   rr   r   rz   r   rv   rp   rt   rm   r      àr~      èr      êrx      ôrw      çu   œ   û   ù   î   âru      ï   ër{      ær   r   r   r   r   _get_fr_labels   s    r   c                   C   s   dS )N)$rI   rf   r;   rk   rs   rg   rj   rh   ro   ri   rq   rl   rn   ry   rr   rp   rz   rm   rx   rv   rt   r   r   r   r   r      ò   ìrw   r   r   ru   r~   r   r   r   r   r   r   r   r   _get_it_labels  s    r   c                   C   s   dS )N)rk   r;   rf   rg   rs   rn   rj   ri   rh   rr   rw   ro   rl   rp   rm   r   rt   ry   ru   rq   rz   r~   rx   rv   r`   r   r   r   r   r   r   r   _get_mms_labels=  s    r   )FF)N)typingr   r   r   r*   r   r   Ztorchaudio._internalr   Ztorchaudio.modelsr   r	   r
   r   Moduler   r9   rD   rH   re   r   r   r   r   r   r   r   r   r   r   <module>   s    $


!$ '/)