a
    h;                     @   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   sD   t td}| |vr.tdt|  d|  ||  }|f i |S )N)ZWav2Vec2ZWavLMzSupported model types are z	. Found: )r   r
   
ValueErrortuplekeys)type_paramsZ	factoriesfactory r   R/var/www/auris/lib/python3.9/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)Zdim   )dtypedevice)r   r   
functional
layer_normshaper   r   torchZlog_softmaxr   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jit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    r:   c                    s>   dD ]4}| | t  fddtdD | |< qd S )N)z
aux.weightzaux.biasc                    s   g | ]}| vr| qS r   r   ).0iaxesmatr   r   
<listcomp>L       z$_remove_aux_axes.<locals>.<listcomp>r   )r)   stackranger+   )
state_dictr>   keyr   r=   r   _remove_aux_axes>   s    rF   c                 C   sF   |  dsd|  } |d u r i n|}t| fi |}|rBt|| |S )Nhttpsz/https://download.pytorch.org/torchaudio/models/)
startswithr   rF   )urlZ	dl_kwargsZremove_axesrD   r   r   r   _get_state_dictO   s    


rJ   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    rg   c                   C   s   dS )N)rK   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)rK   rh   rl   ru   r<   rm   ri   rk   rj   ro   rq   rn   rs   rp   rt   r{   rx   rr   rw   r   rv   r|   ry   r   r   r   rz   r   r   r   r   r   _get_vp_en_labels   s    r   c                   C   s   dS )N)"rK   rh   rm   ru   rk   ri   rj   r<   rq   rn   rs   rl   rp   r{   rt   rv   r   r   rr   r|   ro      órx      í   ár   rz      ñ   ér      úry   rw   r}   r   r   r   r   r   _get_es_labels   s    r   c                   C   s   dS )N)*rK   rh   rk   ri   r<   rl   rj   rm   ru   rp   rq   rn   rs   r{   rt   r   r|   r   rx   rr   rv   ro   r      àr      èr      êrz      ôry      çu   œ   û   ù   î   ârw      ï   ër}      ær   r   r   r   r   _get_fr_labels   s    r   c                   C   s   dS )N)$rK   rh   r<   rm   ru   ri   rl   rj   rq   rk   rs   rn   rp   r{   rt   rr   r|   ro   rz   rx   rv   r   r   r   r   r      ò   ìry   r   r   rw   r   r   r   r   r   r   r   r   r   _get_it_labels  s    r   c                   C   s   dS )N)rm   r<   rh   ri   ru   rp   rl   rk   rj   rt   ry   rq   rn   rr   ro   r   rv   r{   rw   rs   r|   r   rz   rx   rb   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   r:   rF   rJ   rg   r   r   r   r   r   r   r   r   r   r   <module>   s    $


!$ '/)