Ë
    S^(hj€  ã                   ó  — d Z ddlZddlmZmZmZ ddlZddlZddlmZ ddl	m
Z
 ddlmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZmZmZmZ ddlmZ ddlm Z   ejB                  e"«      Z#dZ$dZ%dZ&g d¢Z'dZ(dZ) G d„ dejT                  «      Z+ G d„ dejT                  «      Z, G d„ dejT                  «      Z- G d„ dejT                  «      Z. G d„ dejT                  «      Z/ G d„ d ejT                  «      Z0 G d!„ d"ejT                  «      Z1 G d#„ d$ejT                  «      Z2 G d%„ d&ejT                  «      Z3 G d'„ d(e«      Z4d)Z5d*Z6 G d+„ d,e4«      Z7 ed-e5«       G d.„ d/e4«      «       Z8 ed0e5«       G d1„ d2e4«      «       Z9y)3zPyTorch M-CTC-T model.é    N)ÚOptionalÚTupleÚUnion)Únné   )ÚACT2FN)Úadd_code_sample_docstringsÚadd_start_docstringsÚ%add_start_docstrings_to_model_forward)Úis_deepspeed_zero3_enabled)Úis_fsdp_managed_module)Ú_prepare_4d_attention_mask)ÚBaseModelOutputÚCausalLMOutput)ÚPreTrainedModelÚapply_chunking_to_forwardÚ find_pruneable_heads_and_indicesÚprune_linear_layer)Úloggingé   )ÚMCTCTConfigr   zspeechbrain/m-ctc-t-large)r   éÃ   i   zY"Mr. Quilter is the apostle of the middle classes, and we're glad to welcome his gospel."gš™™™™v�@c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚMCTCTConv1dSubsamplerz¸
    Convolutional subsampler: a stack of 1D convolution (along temporal dimension) followed by non-linear activation
    via gated linear units (https://arxiv.org/abs/1911.08460)
    c                 óP  •‡ — t         ‰‰ �  «        |‰ _        |j                  ‰ _        t        j                  |j                  «      ‰ _        |j                  ‰ _
        |j                  |j                  z  ‰ _        ‰ j                  dkD  r)|j                  €t        d«      ‚|j                  ‰ _        nd ‰ _        |j"                  dz  ‰ _        |j&                  ‰ _        |j*                  ‰ _        t        j.                  ˆ fd„t1        ‰ j(                  «      D «       «      ‰ _        y )Nr   zbNeed to specify `conv_channels` configuration in `MCTCTConfig` to use multiple convolution layers.é   c              3   ó  •K  — | ]w  \  }}t        j                  |d k(  r‰j                  n‰j                  |   |‰j                  dz
  k  r‰j                  |   n‰j
                  |‰j                  |   d¬«      –— Œy y­w)r   r   Úvalid)Úkernel_sizeÚstrideÚpaddingN)r   ÚConv1dÚin_channelsÚmid_channelsÚ
num_layersÚout_channelsr    )Ú.0ÚiÚkÚselfs      €úq/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/deprecated/mctct/modeling_mctct.pyú	<genexpr>z1MCTCTConv1dSubsampler.__init__.<locals>.<genexpr>Y   s€   øè ø€ ò 	)
ñ ��1ô �I‰IØ$%¨¢F�× Ò °×0AÑ0AÀ!Ñ0DØ()¨D¯O©O¸aÑ,?Ò(?�×!Ñ! !Ò$ÀT×EVÑEVØØ—{‘{ 1‘~Ø÷ð ñ	)
ùs   ƒA=B )ÚsuperÚ__init__ÚconfigÚconv_glu_dimÚglu_dimr   ÚDropoutÚconv_dropoutÚdropoutÚnum_conv_layersr%   Úinput_feat_per_channelÚinput_channelsr#   Úconv_channelsÚ
ValueErrorr$   Úhidden_sizer&   Úconv_kernelr   Úconv_strider    Ú
ModuleListÚ	enumerateÚconv_layers©r*   r/   Ú	__class__s   ` €r+   r.   zMCTCTConv1dSubsampler.__init__=   sû   ù€ Ü‰ÑÔØˆŒØ×*Ñ*ˆŒä—z‘z &×"5Ñ"5Ó6ˆŒà ×0Ñ0ˆŒØ!×8Ñ8¸6×;PÑ;PÑPˆÔà�?‰?˜QÒØ×#Ñ#Ð+Ü ðóð ð
 !'× 4Ñ 4ˆDÕà $ˆDÔà"×.Ñ.°Ñ2ˆÔØ!×-Ñ-ˆÔØ×(Ñ(ˆŒô
 Ÿ=™=ó 	)
ô " $×"2Ñ"2Ó3ô	)
ó 	
ˆÕó    c                 óæ  — t        | j                  D �cg c]  }|dz  ‘Œ	 c}«      }t        j                  j                  j                  |dd||fdd«      }|j                  dd«      j                  «       }| j                  D ]F  } ||«      }t        j                  j                  || j                  ¬«      }| j                  |«      }ŒH |j                  dd«      j                  «       }|S c c}w )Nr   r   Úconstantr   ©Údim)Úsumr   Útorchr   Ú
functionalÚpadÚ	transposeÚ
contiguousr?   Úglur1   r4   )r*   Úinput_featuresÚsizer!   Úhidden_statesÚconvs         r+   ÚforwardzMCTCTConv1dSubsampler.forwardd   sÜ   € ô ¨T×-=Ñ-=Ö> T�t˜q“yÒ>Ó?ˆäŸ™×,Ñ,×0Ñ0°À!ÀQÈÐQXÐAYÐ[eÐghÓiˆØ&×0Ñ0°°AÓ6×AÑAÓCˆØ×$Ñ$ò 	8ˆDÙ  Ó/ˆMÜŸM™M×-Ñ-¨mÀÇÁÐ-ÓNˆMØ ŸL™L¨Ó7‰Mð	8ð
 &×/Ñ/°°1Ó5×@Ñ@ÓBˆØÐùò ?s   ”C.©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r.   rR   Ú__classcell__©rA   s   @r+   r   r   7   s   ø„ ñô
%
öNrB   r   c                   ó,   ‡ — e Zd ZdZˆ fd„Z	 dd„Zˆ xZS )ÚMCTCTEmbeddingszGConstruct the embeddings from word, position and token_type embeddings.c                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  |j                  ¬«      | _        t        j                  |j                  |j
                  «      | _	        t        j                  |j                  |j
                  «      | _        t        «       | _        t        j                  |j                  «      | _        | j#                  dt%        j&                  |j                  «      j)                  d«      d¬«       | j#                  dt%        j*                  | j,                  j/                  «       t$        j0                  | j,                  j2                  ¬«      d¬«       y )N)Úpadding_idxÚposition_ids)r   éÿÿÿÿF)Ú
persistentÚtoken_type_ids©ÚdtypeÚdevice)r-   r.   r   Ú	EmbeddingÚ
vocab_sizer:   Úpad_token_idÚword_embeddingsÚmax_position_embeddingsÚposition_embeddingsÚtype_vocab_sizeÚtoken_type_embeddingsÚMCTCTLayerNormÚ	LayerNormr2   Úhidden_dropout_probr4   Úregister_bufferrH   ÚarangeÚexpandÚzerosr^   rO   Úlongrd   r@   s     €r+   r.   zMCTCTEmbeddings.__init__w   s  ø€ Ü‰ÑÔÜ!Ÿ|™|¨F×,=Ñ,=¸v×?QÑ?QÐ_e×_rÑ_rÔsˆÔÜ#%§<¡<°×0NÑ0NÐPV×PbÑPbÓ#cˆÔ Ü%'§\¡\°&×2HÑ2HÈ&×J\ÑJ\Ó%]ˆÔ"ô
 (Ó)ˆŒÜ—z‘z &×"<Ñ"<Ó=ˆŒð 	×ÑØœEŸL™L¨×)GÑ)GÓH×OÑOÐPWÓXÐejð 	ô 	
ð 	×ÑØÜ�K‰K˜×)Ñ)×.Ñ.Ó0¼¿
¹
È4×K\ÑK\×KcÑKcÔdØð 	õ 	
rB   c                 ó  — |�|j                  «       n|j                  «       d d }|d   }|€| j                  d d …|||z   …f   }|€st        | d«      r-| j                  d d …d |…f   }|j	                  |d   |«      }	|	}n:t        j                  |t
        j                  | j                  j                  ¬«      }|€| j                  |«      }| j                  |«      }
||
z   }| j                  |«      }| j                  |«      }|S )Nr_   r   ra   r   rb   )rO   r^   Úhasattrra   rr   rH   rs   rt   rd   rh   rl   rn   r4   )r*   rN   ra   r^   Úinputs_embedsÚpast_key_values_lengthÚinput_shapeÚ
seq_lengthÚbuffered_token_type_idsÚ buffered_token_type_ids_expandedrl   Ú
embeddingss               r+   rR   zMCTCTEmbeddings.forward�   s  € ð 0>Ð/I�n×)Ñ)Ô+È}×OaÑOaÓOcÐdgÐegÐOhˆà  ‘^ˆ
àÐØ×,Ñ,ªQÐ0FÈÐVlÑIlÐ0lÐ-lÑmˆLð
 Ð!Ü�tÐ-Ô.Ø*.×*=Ñ*=ºaÀÀ*À¸nÑ*MÐ'Ø3J×3QÑ3QÐR]Ð^_ÑR`ÐblÓ3mÐ0Ø!A‘ä!&§¡¨[ÄÇ
Á
ÐSW×SdÑSd×SkÑSkÔ!l�àÐ Ø ×0Ñ0°Ó@ˆMà $× :Ñ :¸>Ó JÐà"Ð%:Ñ:ˆ
à—^‘^ JÓ/ˆ
Ø—\‘\ *Ó-ˆ
ØÐrB   )NNNNr   rS   rY   s   @r+   r[   r[   t   s   ø„ ÙQô
ð. wx÷rB   r[   c                   ó>   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Z	 	 	 dd„Zˆ xZS )ÚMCTCTSelfAttentionc                 óZ  •— t         ‰| �  «        |j                  |j                  z  dk7  r2t	        |d«      s&t        d|j                  › d|j                  › d�«      ‚|j                  | _        |j                  | _        | j                  | j                  z  | _        t        j                  |j                  | j                  d¬«      | _        t        j                  |j                  | j                  d¬«      | _        t        j                  |j                  | j                  d¬«      | _        t        j                  |j                  «      | _        |j"                  | _        t        j$                  d|j"                  z  d	z
  | j                  «      | _        |j(                  | _        y )
Nr   Úembedding_sizezThe hidden size (z6) is not a multiple of the number of attention heads (ú)F©Úbiasr   r   )r-   r.   r:   Únum_attention_headsrv   r9   Úattention_head_dimÚattention_head_sizeÚall_head_sizer   ÚLinearÚqueryÚkeyÚvaluer2   Úattention_probs_dropout_probr4   ri   re   Údistance_embeddingÚ
is_decoderr@   s     €r+   r.   zMCTCTSelfAttention.__init__¯   sX  ø€ Ü‰ÑÔØ×Ñ × :Ñ :Ñ:¸aÒ?ÌÐPVÐXhÔHiÜØ# F×$6Ñ$6Ð#7ð 8Ø ×4Ñ4Ð5°Qð8óð ð
 $*×#=Ñ#=ˆÔ Ø#)×#<Ñ#<ˆÔ Ø!×5Ñ5¸×8PÑ8PÑPˆÔä—Y‘Y˜v×1Ñ1°4×3EÑ3EÈEÔRˆŒ
Ü—9‘9˜V×/Ñ/°×1CÑ1CÈ%ÔPˆŒÜ—Y‘Y˜v×1Ñ1°4×3EÑ3EÈEÔRˆŒ
ä—z‘z &×"EÑ"EÓFˆŒà'-×'EÑ'EˆÔ$Ü"$§,¡,¨q°6×3QÑ3QÑ/QÐTUÑ/UÐW[×WoÑWoÓ"pˆÔà ×+Ñ+ˆ�rB   c                 ó    — |j                  «       d d | j                  | j                  fz   } |j                  |Ž }|j	                  dddd«      S )Nr_   r   r   r   é   )rO   r…   r‡   ÚviewÚpermute)r*   ÚxÚnew_x_shapes      r+   Útranspose_for_scoresz'MCTCTSelfAttention.transpose_for_scoresÆ   sN   € Ø—f‘f“h˜s �m t×'?Ñ'?À×AYÑAYÐ&ZÑZˆØˆA�F‰F�KÐ ˆØ�y‰y˜˜A˜q !Ó$Ð$rB   c           	      ó  — t        |j                  «      dkD  r4 |j                  t        t	        t        |j                  «      «      «      Ž }  |j
                  t        |«      Ž j                  t        t	        t        |«      «      «      Ž S )Nr   )ÚlenÚshaper“   ÚreversedÚrangeÚreshape)r*   r”   r™   s      r+   Úreshape_fortranz"MCTCTSelfAttention.reshape_fortranË   sd   € Üˆq�w‰w‹<˜!ÒØ�—	‘	œ8¤E¬#¨a¯g©g«,Ó$7Ó8Ð9ˆAØ2ˆyˆq�y‰yœ( 5›/Ð*×2Ñ2´H¼UÄ3ÀuÃ:Ó=NÓ4OÐPÐPrB   c           	      óÊ  — |j                  dddd«      }|j                  \  }}}}t        j                  |t        j                  ||||f|j
                  ¬«      fd¬«      }| j                  ||||z   |z  d|g«      }|d d …d ||z   dz
  |z  …f   }| j                  ||||z   dz
  ||g«      }|dz  }|d d …|||z   …f   j                  dd«      }|j                  dddd«      S )Nr   r   r‘   r   ©rd   rE   )r“   r™   rH   Úcatrs   rd   r�   rK   )r*   ÚscoresÚbatchÚhidden_stateÚseq_lenÚheadsÚ	halfpoints          r+   Ú"relative_position_embedding_rotatez5MCTCTSelfAttention.relative_position_embedding_rotateÐ   s  € ð —‘  1 a¨Ó+ˆà.4¯l©lÑ+ˆˆ|˜W eô —‘˜F¤E§K¡K°¸ÀÈ%Ð0PÐY_×YfÑYfÔ$gÐhÐnoÔpˆð ×%Ñ% f¨u°|ÀgÑ7MÐQXÑ6XÐZ[Ð]bÐ.cÓdˆð šÐC˜g¨Ñ4°qÑ8¸GÑCÐCÐCÑDˆð ×%Ñ% f¨u°lÀWÑ6LÈqÑ6PÐRYÐ[`Ð.aÓbˆà  AÑ%ˆ	Øš˜9 y°7Ñ':Ð:Ð:Ñ;×EÑEÀaÈÓKˆà�~‰~˜a  A qÓ)Ð)rB   c                 ó
  — | j                  |«      }|t        j                  | j                  «      z  }| j	                  | j                  |«      «      }| j	                  | j                  |«      «      }| j	                  |«      }t        j                  ||j                  dd«      «      }	| j                  j                  }
t        j                  d|
|j                  dd«      «      }| j                  |«      }|	|z   }	|�|	|z   }	t        j                  j!                  |	d¬«      }| j#                  |«      }|�||z  }t        j                  ||«      }|j%                  dddd«      j'                  d¬	«      }|r||f}|S |f}|S )
Nr_   éþÿÿÿzlh, bche -> bcler   r‘   rE   r   r   )Ú	start_dim)rŠ   ÚmathÚsqrtr‡   r–   r‹   rŒ   rH   ÚmatmulrK   rŽ   ÚweightÚeinsumr§   r   rI   Úsoftmaxr4   r“   Úflatten)r*   rP   Úattention_maskÚ	head_maskÚoutput_attentionsÚmixed_query_layerÚ	key_layerÚvalue_layerÚquery_layerÚattention_scoresÚpositional_embeddingÚrelative_position_scoresÚattention_probsÚcontext_layerÚoutputss                  r+   rR   zMCTCTSelfAttention.forwardé   sŒ  € ð !ŸJ™J }Ó5ÐØ-´·	±	¸$×:RÑ:RÓ0SÑSÐà×-Ñ-¨d¯h©h°}Ó.EÓFˆ	Ø×/Ñ/°·
±
¸=Ó0IÓJˆà×/Ñ/Ð0AÓBˆô !Ÿ<™<¨°Y×5HÑ5HÈÈRÓ5PÓQÐð  $×6Ñ6×=Ñ=ÐÜ#(§<¡<Ð0BÐDXÐZe×ZoÑZoÐpqÐstÓZuÓ#vÐ à#'×#JÑ#JÐKcÓ#dÐ Ø+Ð.FÑFÐàÐ%à/°.Ñ@Ðô Ÿ-™-×/Ñ/Ð0@ÀbÐ/ÓIˆð Ÿ,™, Ó7ˆð Ð Ø-°	Ñ9ˆOäŸ™ _°kÓBˆà%×-Ñ-¨a°°A°qÓ9×AÑAÈBÐAÓOˆá6G�= /Ð2ˆàˆð O\ÐM]ˆàˆrB   ©NNF)	rT   rU   rV   r.   r–   r�   r§   rR   rX   rY   s   @r+   r   r   ®   s(   ø„ ô,ò.%ò
Qò
*ð8 ØØ÷.rB   r   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )rm   c                 óÖ   •— t         ‰| �  «        t        j                  t	        j
                  d«      «      | _        t        j                  t	        j                  d«      «      | _        y ©Nr   )	r-   r.   r   Ú	ParameterrH   ÚonesÚsingleton_weightrs   Úsingleton_bias)r*   rA   s    €r+   r.   zMCTCTLayerNorm.__init__  s@   ø€ Ü‰ÑÔÜ "§¡¬U¯Z©Z¸«]Ó ;ˆÔÜ Ÿl™l¬5¯;©;°q«>Ó:ˆÕrB   c                 ó:   — || j                   z  | j                  z   S ©N)rÅ   rÆ   ©r*   rP   s     r+   rR   zMCTCTLayerNorm.forward   s   € Ø × 5Ñ 5Ñ5¸×9LÑ9LÑLÐLrB   ©rT   rU   rV   r.   rR   rX   rY   s   @r+   rm   rm     s   ø„ ô;ö
MrB   rm   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚMCTCTSelfOutputc                 ó:  •— t         ‰| �  «        || _        t        j                  |j
                  |j
                  d¬«      | _        t        j                  |j
                  |j                  ¬«      | _        t        j                  |j                  «      | _        y ©NFrƒ   )Úeps)r-   r.   r/   r   r‰   r:   Údensern   Úlayer_norm_epsr2   ro   r4   r@   s     €r+   r.   zMCTCTSelfOutput.__init__%  si   ø€ Ü‰ÑÔØˆŒÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÈEÔRˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�rB   c                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S rÈ   ©rÐ   r4   rn   ©r*   rP   Úinput_tensors      r+   rR   zMCTCTSelfOutput.forward,  ó7   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØŸ™ }°|Ñ'CÓDˆØÐrB   rÊ   rY   s   @r+   rÌ   rÌ   $  s   ø„ ô>örB   rÌ   c                   ó2   ‡ — e Zd Zˆ fd„Zd„ Z	 	 	 dd„Zˆ xZS )ÚMCTCTAttentionc                 ó€   •— t         ‰| �  «        t        |«      | _        t	        |«      | _        t        «       | _        y rÈ   )r-   r.   r   r*   rÌ   ÚoutputÚsetÚpruned_headsr@   s     €r+   r.   zMCTCTAttention.__init__4  s0   ø€ Ü‰ÑÔÜ& vÓ.ˆŒ	Ü% fÓ-ˆŒÜ›EˆÕrB   c                 ó>  — t        |«      dk(  ry t        || j                  j                  | j                  j                  | j
                  «      \  }}t        | j                  j                  |«      | j                  _        t        | j                  j                  |«      | j                  _        t        | j                  j                  |«      | j                  _	        t        | j                  j                  |d¬«      | j                  _        | j                  j                  t        |«      z
  | j                  _        | j                  j                  | j                  j                  z  | j                  _        | j
                  j                  |«      | _        y )Nr   r   rE   )r˜   r   r*   r…   r‡   rÜ   r   rŠ   r‹   rŒ   rÚ   rÐ   rˆ   Úunion)r*   r¥   Úindexs      r+   Úprune_headszMCTCTAttention.prune_heads:  s  € Üˆu‹:˜Š?ØÜ7Ø�4—9‘9×0Ñ0°$·)±)×2OÑ2OÐQU×QbÑQbó
‰ˆˆuô
 -¨T¯Y©Y¯_©_¸eÓDˆ�	‰	ŒÜ*¨4¯9©9¯=©=¸%Ó@ˆ�	‰	ŒÜ,¨T¯Y©Y¯_©_¸eÓDˆ�	‰	ŒÜ.¨t¯{©{×/@Ñ/@À%ÈQÔOˆ�‰Ôð )-¯	©	×(EÑ(EÌÈEË
Ñ(Rˆ�	‰	Ô%Ø"&§)¡)×"?Ñ"?À$Ç)Á)×B_ÑB_Ñ"_ˆ�	‰	ÔØ ×-Ñ-×3Ñ3°EÓ:ˆÕrB   c                 ój   — | j                  ||||«      }| j                  |d   |«      }|f|dd  z   }|S )Nr   r   )r*   rÚ   )r*   rP   r²   r³   r´   Úself_outputsÚattention_outputr¾   s           r+   rR   zMCTCTAttention.forwardL  sN   € ð —y‘yØØØØó	
ˆð  Ÿ;™; |°A¡¸ÓFÐØ#Ð%¨°Q°RÐ(8Ñ8ˆàˆrB   r¿   )rT   rU   rV   r.   rà   rR   rX   rY   s   @r+   rØ   rØ   3  s   ø„ ô"ò;ð* ØØ÷rB   rØ   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚMCTCTIntermediatec                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  d¬«      | _        t        |j                  t        «      rt        |j                     | _        y |j                  | _        y )NFrƒ   )r-   r.   r   r‰   r:   Úintermediate_sizerÐ   Ú
isinstanceÚ
hidden_actÚstrr   Úintermediate_act_fnr@   s     €r+   r.   zMCTCTIntermediate.__init__`  s`   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3KÑ3KÐRWÔXˆŒ
Ü�f×'Ñ'¬Ô-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$rB   c                 óJ   — | j                  |«      }| j                  |«      }|S rÈ   )rÐ   rë   rÉ   s     r+   rR   zMCTCTIntermediate.forwardh  s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐrB   rÊ   rY   s   @r+   rå   rå   _  s   ø„ ô9örB   rå   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚMCTCTOutputc                 ó,  •— t         ‰| �  «        t        j                  |j                  |j
                  d¬«      | _        t        j                  |j
                  |j                  ¬«      | _        t        j                  |j                  «      | _        y rÎ   )r-   r.   r   r‰   rç   r:   rÐ   rn   rÑ   r2   ro   r4   r@   s     €r+   r.   zMCTCTOutput.__init__o  sc   ø€ Ü‰ÑÔÜ—Y‘Y˜v×7Ñ7¸×9KÑ9KÐRWÔXˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�rB   c                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S rÈ   rÓ   rÔ   s      r+   rR   zMCTCTOutput.forwardu  rÖ   rB   rÊ   rY   s   @r+   rî   rî   n  s   ø„ ô>örB   rî   c                   ó8   ‡ — e Zd Zdefˆ fd„Z	 	 	 dd„Zd„ Zˆ xZS )Ú
MCTCTLayerr/   c                 óÔ   •— t         ‰| �  «        d| _        |j                  | _        t	        |«      | _        t        |«      | _        |j                  | _        t        |«      | _
        y rÂ   )r-   r.   Úseq_len_dimÚchunk_size_feed_forwardrå   ÚintermediaterØ   Ú	attentionr�   rî   rÚ   r@   s     €r+   r.   zMCTCTLayer.__init__}  sV   ø€ Ü‰ÑÔàˆÔØ'-×'EÑ'EˆÔ$ä-¨fÓ5ˆÔÜ'¨Ó/ˆŒØ ×+Ñ+ˆŒÜ! &Ó)ˆ�rB   c                 ó¨   — | j                  ||||¬«      }|d   }|dd  }t        | j                  | j                  | j                  |«      }|f|z   }|S )N)r´   r   r   )r÷   r   Úfeed_forward_chunkrõ   rô   )	r*   rP   r²   r³   r´   Úself_attention_outputsrã   r¾   Úlayer_outputs	            r+   rR   zMCTCTLayer.forwardˆ  st   € ð "&§¡Ø˜>¨9ÐHYð "0ó "
Ðð 2°!Ñ4ÐØ(¨¨Ð,ˆä0Ø×#Ñ# T×%AÑ%AÀ4×CSÑCSÐUeó
ˆð  �/ GÑ+ˆàˆrB   c                 óL   — | j                  |«      }| j                  ||«      }|S rÈ   )rö   rÚ   )r*   rã   Úintermediate_outputrû   s       r+   rù   zMCTCTLayer.feed_forward_chunk�  s,   € Ø"×/Ñ/Ð0@ÓAÐØ—{‘{Ð#6Ð8HÓIˆØÐrB   r¿   )rT   rU   rV   r   r.   rR   rù   rX   rY   s   @r+   rò   rò   |  s$   ø„ ð	*˜{õ 	*ð ØØóö*rB   rò   c                   óL   — e Zd ZdZeZdZdZdZd„ Z	de
j                  fd„Zd„ Zy	)
ÚMCTCTPreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    ÚmctctrN   Tc                 ó–  — | j                   j                  }t        |t        j                  «      rZ|j
                  j                  j                  d|¬«       |j                  ��b|j                  j                  j                  «        �n<t        |t        j                  «      re|j
                  j                  j                  d|¬«       |j                  �ï|j
                  j                  |j                     j                  «        n½t        |t        j                  «      rJ|j                  j                  j                  «        |j
                  j                  j                  d«       nYt        |t        «      rI|j                  j                  j                  d«       |j                   j                  j                  «        t        |t        j                  t        j"                  f«      rY|j
                  j                  j                  d|¬«       |j                  �%|j                  j                  j                  «        yyy)zInitialize the weightsg        )ÚmeanÚstdNg      ð?)r/   Úinitializer_rangerè   r   r‰   r®   ÚdataÚnormal_r„   Úzero_re   r]   rn   Úfill_rm   rÅ   rÆ   r"   )r*   Úmoduler  s      r+   Ú_init_weightsz"MCTCTPreTrainedModel._init_weights®  sŒ  € à�k‰k×+Ñ+ˆÜ�fœbŸi™iÔ(ð �M‰M×Ñ×&Ñ&¨C°SÐ&Ô9Ø�{‰{Ñ&Ø—‘× Ñ ×&Ñ&Ö(Ü˜¤§¡Ô-Ø�M‰M×Ñ×&Ñ&¨C°SÐ&Ô9Ø×!Ñ!Ð-Ø—‘×"Ñ" 6×#5Ñ#5Ñ6×<Ñ<Õ>Ü˜¤§¡Ô-Ø�K‰K×Ñ×"Ñ"Ô$Ø�M‰M×Ñ×$Ñ$ SÕ)Ü˜¤Ô/Ø×#Ñ#×(Ñ(×.Ñ.¨sÔ3Ø×!Ñ!×&Ñ&×,Ñ,Ô.Ü�fœrŸy™y¬"¯)©)Ð4Ô5Ø�M‰M×Ñ×&Ñ&¨C°SÐ&Ô9Ø�{‰{Ð&Ø—‘× Ñ ×&Ñ&Õ(ð 'ð 6rB   Úinput_lengthsc                 ó(  — d}t        t        | j                  j                  «      | j                  j                  | j                  j
                  «      D ]:  \  }}}|dz  }|d|z  z   ||dz
  z  z
  dz
  }t        j                  ||d¬«      dz   }Œ< |S )zH
        Computes the output length of the convolutional layers
        r   r   Útrunc)Úrounding_mode)Úzipr›   r/   r5   r;   r<   rH   Údiv)r*   r  ÚdilationÚ_Ú	kernel_szr    r!   s          r+   Ú _get_feat_extract_output_lengthsz5MCTCTPreTrainedModel._get_feat_extract_output_lengthsÆ  sž   € ð ˆÜ$'Ü�$—+‘+×-Ñ-Ó.°·±×0GÑ0GÈÏÉ×I`ÑI`ó%
ò 	XÑ ˆAˆy˜&ð   1‘nˆGØ)¨A°©KÑ7¸(ÀiÐRSÁmÑ:TÑTÐWXÑXˆMÜ!ŸI™I m°VÈ7ÔSÐVWÑW‰Mð	Xð ÐrB   c                 óà  — t        |j                  «      dkD  r|d d …d d …df   }| j                  |j                  d«      «      }|j	                  «       d   }t        j                  ||f|j                  |j                  ¬«      }d|t        j                  ||j                  ¬«      |dz
  f<   |j                  dg«      j                  d«      j                  dg«      j                  «       }|S )Nr   r_   r   rb   r   rŸ   )r˜   r™   r  rG   rO   rH   rs   rc   rd   rq   ÚflipÚcumsumrt   )r*   Úfeature_vector_lengthr²   Úsubsampled_lengthsÚbszs        r+   Ú"_get_feature_vector_attention_maskz7MCTCTPreTrainedModel._get_feature_vector_attention_maskÔ  sä   € ô ˆ~×#Ñ#Ó$ qÒ(Ø+ªAªq°"¨HÑ5ˆNð "×BÑBÀ>×CUÑCUÐVXÓCYÓZÐØ×!Ñ!Ó# AÑ&ˆÜŸ™ØÐ'Ð(°×0DÑ0DÈ^×MbÑMbô
ˆð efˆœŸ™ S°×1FÑ1FÔGÐI[Ð^_ÑI_Ð`ÑaØ'×,Ñ,¨b¨TÓ2×9Ñ9¸"Ó=×BÑBÀBÀ4ÓH×MÑMÓOˆØÐrB   N)rT   rU   rV   rW   r   Úconfig_classÚbase_model_prefixÚmain_input_nameÚsupports_gradient_checkpointingr
  rH   Ú
LongTensorr  r  © rB   r+   rÿ   rÿ   £  s;   „ ñð
 €LØÐØ&€OØ&*Ð#ò)ð0¸e×>NÑ>Nó órB   rÿ   aH  
    This model is a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) sub-class. Use
    it as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage and
    behavior.

    Parameters:
        config ([`MCTCTConfig`]): Model configuration class with all the parameters of the model.
            Initializing with a config file does not load the weights associated with the model, only the
            configuration. Check out the [`~PreTrainedModel.from_pretrained`] method to load the model weights.
a  
    Args:
        input_features (`torch.LongTensor` of shape `({0})`):
            Indices of input sequence tokens in the vocabulary.

            Indices can be obtained using [`Wav2Vec2CTCTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for details.

            [What are input IDs?](../glossary#input-ids)
        attention_mask (`torch.FloatTensor` of shape `({0})`, *optional*):
            Mask to avoid performing attention on padding token indices. Mask values selected in `[0, 1]`:

            - 1 for tokens that are **not masked**,
            - 0 for tokens that are **masked**.

            [What are attention masks?](../glossary#attention-mask)
        head_mask (`torch.FloatTensor` of shape `(num_heads,)` or `(num_layers, num_heads)`, *optional*):
            Mask to nullify selected heads of the self-attention modules. Mask values selected in `[0, 1]`:

            - 1 indicates the head is **not masked**,
            - 0 indicates the head is **masked**.
        output_attentions (`bool`, *optional*):
            Whether or not to return the attentions tensors of all attention layers. See `attentions` under returned
            tensors for more detail.
        output_hidden_states (`bool`, *optional*):
            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for
            more detail.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~file_utils.ModelOutput`] instead of a plain tuple.
c                   ó–   ‡ — e Zd Zdefˆ fd„Z	 	 	 ddej                  dej                  dej                  dededed	ee	e
f   fd
„Zˆ xZS )ÚMCTCTEncoderr/   c                 ó$  •— t         ‰| �  |«       |j                  | _        t        «       | _        t        |«      | _        t        j                  t        |j                  «      D �cg c]  }t        |«      ‘Œ c}«      | _        d| _        y c c}w )NF)r-   r.   ro   rm   Ú
layer_normr   rQ   r   r=   r›   Únum_hidden_layersrò   ÚlayersÚgradient_checkpointing)r*   r/   r  rA   s      €r+   r.   zMCTCTEncoder.__init__  sm   ø€ Ü‰Ñ˜Ô Ø#)×#=Ñ#=ˆÔ ä(Ó*ˆŒÜ)¨&Ó1ˆŒ	Ü—m‘mÄÀv×G_ÑG_ÓA`Ö$a¸A¤Z°Õ%7Ò$aÓbˆŒà&+ˆÕ#ùò %bs   Á'BrN   r²   r³   r´   Úoutput_hidden_statesÚreturn_dictÚreturnc                 ó®  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }| j	                  |«      }| j                  |«      }|�| j                  |j                  d   |«      }t        j                  j                  || j                  | j                  ¬«      }|�t        ||j                  «      }|rdnd }	|rdnd }
|�_|j                  «       d   t!        | j"                  «      k7  r6t%        dt!        | j"                  «      › d|j                  «       d   › d�«      ‚t'        «       xs t)        | «      }t+        | j"                  «      D ]®  \  }}|r|	|fz   }	t-        j.                  g «      }| j                  r|| j                   j0                  k  rdnd	}|r|rO| j2                  r3| j                  r'| j5                  |j6                  |||�||   nd |«      }n ||||¬
«      }|d   }|rd}|sŒ¦|
d   fz   }
Œ° |r|	|fz   }	|st9        d„ ||	|
fD «       «      S t;        ||	|
¬«      S )Nr   )ÚpÚtrainingr!  r   z&The head_mask should be specified for z layers, but it is for ú.TF)rP   r²   r´   )NNc              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wrÈ   r!  )r'   Úvs     r+   r,   z'MCTCTEncoder.forward.<locals>.<genexpr>m  s   è ø€ Òe˜qÐWXÑWdœÑeùs   ‚Š©Úlast_hidden_staterP   Ú
attentions)r/   r´   r)  Úuse_return_dictr%  rQ   r  r™   r   rI   r4   ro   r.  r   rc   rO   r˜   r'  r9   r   r   r>   rH   ÚrandÚ	layerdropr(  Ú_gradient_checkpointing_funcÚ__call__Útupler   )r*   rN   r²   r³   r´   r)  r*  rw   rP   Úencoder_statesÚall_attentionsÚsynced_gpusÚidxÚencoder_layerÚdropout_probabilityÚskip_the_layerÚlayer_outputss                    r+   rR   zMCTCTEncoder.forward  s„  € ð 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆàŸ™¨Ó8ˆàŸ	™	 .Ó1ˆð Ð%Ø!×DÑDÀ]×EXÑEXÐYZÑE[Ð]kÓlˆNäŸ™×-Ñ-¨m¸t×?WÑ?WÐbf×boÑboÐ-Ópˆð Ð%ä7¸È×H[ÑH[Ó\ˆNá3™¸ˆÙ0™°dˆð Ð Ø�~‰~Ó Ñ"¤c¨$¯+©+Ó&6Ò6Ü Ø<¼SÀÇÁÓ=MÐ<Nð O%Ø%.§^¡^Ó%5°aÑ%8Ð$9¸ð<óð ô
 1Ó2ÒRÔ6LÈTÓ6RˆÜ"+¨D¯K©KÓ"8ò 	FÑˆC�Ù#Ø!/°=Ð2BÑ!B�ô #(§*¡*¨R£.Ðà%)§]¢]Ð8KÈdÏkÉk×NcÑNcÒ8c™TÐjoˆNÙ!¡[à×.Ò.°4·=²=Ø$(×$EÑ$EØ%×.Ñ.Ø%Ø&Ø+4Ð+@˜ 3šÀdØ)ó%‘Mñ %2Ø&3Ø'5Ø*;ô%�Mð !.¨aÑ 0�áØ ,�â Ø!/°=ÀÑ3CÐ2EÑ!E‘ð?	FñB  Ø+¨}Ð.>Ñ>ˆNáÜÑe ]°NÀNÐ$SÔeÓeÐeÜØ+¸>ÐVdô
ð 	
rB   )FFT)rT   rU   rV   r   r.   rH   ÚTensorÚboolr   r   r   rR   rX   rY   s   @r+   r#  r#    s�   ø„ ð,˜{õ ,ð #(Ø%*Ø ñR
àŸ™ðR
ð Ÿ™ðR
ð —<‘<ð	R
ð
  ðR
ð #ðR
ð ðR
ð 
ˆu�oÐ%Ñ	&÷R
rB   r#  zaThe bare M-CTC-T Model transformer outputting raw hidden-states without any specific head on top.c                   ó  ‡ — e Zd Zˆ fd„Z eej                  d«      «       eee	e
de¬«      	 	 	 	 	 ddej                  deej                     deej                     dee   d	ee   d
ee   deee	f   fd„«       «       Zˆ xZS )Ú
MCTCTModelc                 ór   •— t         ‰| �  |«       || _        t        |«      | _        | j                  «        y rÈ   )r-   r.   r/   r#  ÚencoderÚ	post_initr@   s     €r+   r.   zMCTCTModel.__init__x  s/   ø€ Ü‰Ñ˜Ô ØˆŒä# FÓ+ˆŒð 	�‰ÕrB   zbatch_size, sequence_lengthÚaudio)Ú
checkpointÚoutput_typer  ÚmodalityÚexpected_outputrN   r²   r³   r´   r)  r*  r+  c                 óJ  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }|€t	        d«      ‚| j                  ||||||¬«      }|d   }|s	|f|dd  z   S t        ||j                  |j                  ¬«      S )Nz#You have to specify input_features.©r²   r³   r´   r)  r*  r   r   r2  )	r/   r´   r)  r5  r9   rH  r   rP   r4  )	r*   rN   r²   r³   r´   r)  r*  Úencoder_outputsÚsequence_outputs	            r+   rR   zMCTCTModel.forward�  sÏ   € ð" 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆàÐ!ÜÐBÓCÐCàŸ,™,ØØ)ØØ/Ø!5Ø#ð 'ó 
ˆð *¨!Ñ,ˆáØ#Ð%¨¸¸Ð(;Ñ;Ð;äØ-Ø)×7Ñ7Ø&×1Ñ1ô
ð 	
rB   )NNNNN)rT   rU   rV   r.   r   ÚMCTCT_INPUTS_DOCSTRINGÚformatr	   Ú_CHECKPOINT_FOR_DOCr   Ú_CONFIG_FOR_DOCÚ_EXPECTED_OUTPUT_SHAPErH   rC  r   rD  r   r   rR   rX   rY   s   @r+   rF  rF  s  sÌ   ø„ ô
ñ +Ð+A×+HÑ+HÐIfÓ+gÓhÙØ&Ø#Ø$ØØ.ôð 26Ø,0Ø,0Ø/3Ø&*ñ#
àŸ™ð#
ð ! §¡Ñ.ð#
ð ˜EŸL™LÑ)ð	#
ð
 $ D™>ð#
ð ' t™nð#
ð ˜d‘^ð#
ð 
ˆu�oÐ%Ñ	&ò#
óó iô#
rB   rF  zcMCTCT Model with a `language modeling` head on top for Connectionist Temporal Classification (CTC).c                   ó  ‡ — e Zd Zˆ fd„Z ee«       eeee	e
e¬«      	 	 	 	 	 	 ddej                  deej                     deej                     dee   dee   dee   d	eej                      d
eeef   fd„«       «       Zˆ xZS )ÚMCTCTForCTCc                 ó  •— t         ‰| �  |«       t        |«      | _        |j                  €t        d| j                  › d�«      ‚|j                  }t        j                  ||j                  «      | _
        | j                  «        y )NzYou are trying to instantiate zô with a configuration that does not define the vocabulary size of the language model head. Please instantiate the model as follows: `MCTCTForCTC.from_pretrained(..., vocab_size=vocab_size)`. or define `vocab_size` of your model's configuration.)r-   r.   rF  r   rf   r9   rA   r:   r   r‰   Úctc_headrI  )r*   r/   Úoutput_hidden_sizerA   s      €r+   r.   zMCTCTForCTC.__init__´  s�   ø€ Ü‰Ñ˜Ô ä Ó'ˆŒ
à×ÑÐ$ÜØ0°·±Ð0@ð AHð Hóð ð $×/Ñ/ÐäŸ	™	Ð"4°f×6GÑ6GÓHˆŒð 	�‰ÕrB   )rK  rL  r  rN  Úexpected_lossrN   r²   r³   r´   r)  r*  Úlabelsr+  c           
      óž  — |�I|j                  «       | j                  j                  k\  r"t        d| j                  j                  › �«      ‚|�|n| j                  j                  }| j                  ||||||¬«      }|d   }	| j                  |	«      }
d}|��o|�|n1t        j                  |j                  dd t        j                  ¬«      }| j                  |j                  d«      «      j                  t        j                  «      }|dk\  }|j                  d«      }|j                  |«      }t        j                   j#                  |
dt        j$                  ¬«      j'                  dd«      }t        j(                  j*                  j-                  d	¬
«      5  t        j                   j/                  ||||| j                  j0                  | j                  j2                  | j                  j4                  ¬«      }ddd«       |s|
f|t6        d z   }|�|f|z   S |S t9        ||
|j:                  |j<                  ¬«      S # 1 sw Y   ŒExY w)aà  
        labels (`torch.LongTensor` of shape `(batch_size, target_length)`, *optional*):
            Labels for connectionist temporal classification. Note that `target_length` has to be smaller or equal to
            the sequence length of the output logits. Indices are selected in `[-100, 0, ..., config.vocab_size - 1]`.
            All labels set to `-100` are ignored (masked), the loss is only computed for labels in `[0, ...,
            config.vocab_size - 1]`.
        Nz$Label values must be <= vocab_size: rP  r   r_   )rc   )rF   rc   r   F)Úenabled)ÚblankÚ	reductionÚzero_infinity)ÚlossÚlogitsrP   r4  )Úmaxr/   rf   r9   r5  r   r[  rH   rÄ   r™   rt   r  rG   ÚtoÚmasked_selectr   rI   Úlog_softmaxÚfloat32rK   ÚbackendsÚcudnnÚflagsÚctc_lossrg   Úctc_loss_reductionÚctc_zero_infinityÚ_HIDDEN_STATES_START_POSITIONr   rP   r4  )r*   rN   r²   r³   r´   r)  r*  r^  r¾   rP   re  rd  r  Úlabels_maskÚtarget_lengthsÚflattened_targetsÚ	log_probsrÚ   s                     r+   rR   zMCTCTForCTC.forwardÇ  s)  € ð2 Ð &§*¡*£,°$·+±+×2HÑ2HÒ"HÜÐCÀDÇKÁK×DZÑDZÐC[Ð\Ó]Ð]à%0Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆØ—*‘*ØØ)ØØ/Ø!5Ø#ð ó 
ˆð   ™
ˆà—‘˜}Ó-ˆàˆØÑð "Ð-ñ ä—Z‘Z × 4Ñ 4°S°bÐ 9ÄÇÁÔLð ð
 !×AÑAÀ.×BTÑBTÐUWÓBXÓY×\Ñ\Ô]b×]gÑ]gÓhˆMð ! A™+ˆKØ(Ÿ_™_¨RÓ0ˆNØ &× 4Ñ 4°[Ó AÐô Ÿ™×1Ñ1°&¸bÌÏÉÐ1ÓV×`Ñ`ÐabÐdeÓfˆIä—‘×%Ñ%×+Ñ+°EÐ+Ó:ñ 	Ü—}‘}×-Ñ-ØØ%Ø!Ø"ØŸ+™+×2Ñ2Ø"Ÿk™k×<Ñ<Ø"&§+¡+×"?Ñ"?ð .ó �÷	ñ Ø�Y Ô)FÐ)GÐ!HÑHˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEäØ˜f°G×4IÑ4IÐV]×VhÑVhô
ð 	
÷	ð 	ús   ÆA#IÉI)NNNNNN)rT   rU   rV   r.   r   rS  r	   rU  r   rV  Ú_CTC_EXPECTED_OUTPUTÚ_CTC_EXPECTED_LOSSrH   rC  r   rD  r   r   r   rR   rX   rY   s   @r+   rY  rY  ¯  sâ   ø„ ô
ñ& +Ð+AÓBÙØ&Ø"Ø$Ø,Ø(ôð 26Ø,0Ø,0Ø/3Ø&*Ø-1ñE
àŸ™ðE
ð ! §¡Ñ.ðE
ð ˜EŸL™LÑ)ð	E
ð
 $ D™>ðE
ð ' t™nðE
ð ˜d‘^ðE
ð ˜×)Ñ)Ñ*ðE
ð 
ˆu�nÐ$Ñ	%òE
óó CôE
rB   rY  ):rW   r«   Útypingr   r   r   rH   Útorch.utils.checkpointr   Úactivationsr   Ú
file_utilsr	   r
   r   Úintegrations.deepspeedr   Úintegrations.fsdpr   Úmodeling_attn_mask_utilsr   Úmodeling_outputsr   r   Úmodeling_utilsr   r   r   r   Úutilsr   Úconfiguration_mctctr   Ú
get_loggerrT   Úloggerrq  rV  rU  rW  rv  rw  ÚModuler   r[   r   rm   rÌ   rØ   rå   rî   rò   rÿ   ÚMCTCT_START_DOCSTRINGrS  r#  rF  rY  r!  rB   r+   ú<module>r‡     sš  ðñ ã ß )Ñ )ã Û Ý å "ß rÑ rÝ AÝ 8Ý Cß @÷ó õ Ý ,ð 
ˆ×	Ñ	˜HÓ	%€à !Ð à€ð 2Ð Ú'Ð ð tÐ ØÐ ô:˜BŸI™Iô :ôz7�b—i‘iô 7ôti˜Ÿ™ô iôXM�R—Y‘Yô Mô�b—i‘iô ô)�R—Y‘Yô )ôX˜Ÿ	™	ô ô�"—)‘)ô ô$�—‘ô $ôNB˜?ô BðJ	Ð ðÐ ô@]
Ð'ô ]
ñ@ ØgØóô5
Ð%ó 5
ó	ð5
ñp ØmØóôa
Ð&ó a
ó	ña
rB   