Ë
    ÜÓ^j9£  ã                   óü  — d Z ddlZddlmZ ddlmZ ddlZddlm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mZmZ ddlmZmZ ddlmZ ddlmZmZmZm Z m!Z! ddl"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/m0Z0m1Z1m2Z2 ddl3m4Z4m5Z5m6Z6  e!jn                  e8«      Z9 ed¬«      e G d„ de«      «       «       Z: G d„ dejv                  «      Z< G d„ dejv                  «      Z= G d „ d!e*«      Z> G d"„ d#e,«      Z? G d$„ d%ejv                  «      Z@ G d&„ d'e«      ZAe G d(„ d)e«      «       ZB ed*¬«       G d+„ d,eB«      «       ZCe G d-„ d.e«      «       ZDe G d/„ d0eD«      «       ZE ed1¬«       G d2„ d3eBe«      «       ZF G d4„ d5ejv                  «      ZG G d6„ d7ejv                  «      ZHe G d8„ d9e«      «       ZI ed:¬«       G d;„ d<eBe5«      «       ZJ G d=„ d>eH«      ZK ed?¬«       G d@„ dAe6eJ«      «       ZLg dB¢ZMy)CzPyTorch Parakeet model.é    N)ÚCallable)Ú	dataclass)Únné   )Úinitialization)ÚACT2FN)ÚCompileConfigÚGenerationMixinÚGenerationMode)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚBaseModelOutputWithPoolingÚCausalLMOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚModelOutputÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚlogging)Úmaybe_autocastÚmerge_with_config_defaults)Úcapture_outputsé   )Ú	AutoModel)Ú%FastSpeech2ConformerConvolutionModule)ÚLlamaAttentionÚeager_attention_forwardé   )ÚParakeetCTCConfigÚParakeetEncoderConfigÚParakeetRNNTConfigÚParakeetTDTConfig)ÚParakeetRNNTDecoderCacheÚParakeetRNNTGenerationMixinÚParakeetTDTGenerationMixinz¨
    Extends [~modeling_outputs.BaseModelOutputWithPooling] to include the output attention mask since sequence length
    is not preserved in the model's forward.
    )Úcustom_introc                   ó:   — e Zd ZU dZdZej                  dz  ed<   y)ÚParakeetEncoderModelOutputa–  
    attention_mask (`torch.Tensor` of shape `(batch_size, sequence_length)`, *optional*):
        Mask to avoid performing attention on padding token indices after sequence compression. Returned because the
        sequence length may differ from the input sequence length. Mask values selected in `[0, 1]`:

        - 1 for tokens that are **not masked**,
        - 0 for tokens that are **masked**.
    NÚattention_mask)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r+   ÚtorchÚTensorÚ__annotations__© ó    úx/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/parakeet/modular_parakeet.pyr*   r*   5   s   … ñð +/€N�E—L‘L 4Ñ'Ô.r4   r*   c                   óÈ   ‡ — e Zd ZU ej                  ed<   d	defˆ fd„Ze	 	 d
dedz  dej                  fd„«       Z	 ej                  «       dej                  fd„«       Zˆ xZS )Ú$ParakeetEncoderRelPositionalEncodingÚinv_freqNÚconfigc                 ó    •— t         ‰| �  «        |j                  | _        || _        | j	                  ||¬«      }| j                  d|d¬«       y )N©Údevicer8   F)Ú
persistent)ÚsuperÚ__init__Úmax_position_embeddingsr9   Ú.compute_default_relative_positional_parametersÚregister_buffer)Úselfr9   r<   r8   Ú	__class__s       €r5   r?   z-ParakeetEncoderRelPositionalEncoding.__init__L   sN   ø€ Ü‰ÑÔØ'-×'EÑ'EˆÔ$ØˆŒØ×FÑFÀvÐV\ÐFÓ]ˆØ×Ñ˜Z¨¸eÐÕDr4   Úreturnc                 óÐ   — d}d|t        j                  d| j                  dt         j                  ¬«      j	                  |t         j
                  ¬«      | j                  z  z  z  }|S )Ng     ˆÃ@ç      ð?r   r   ©Údtype)r<   rI   )r0   ÚarangeÚhidden_sizeÚint64ÚtoÚfloat)r9   r<   Úbaser8   s       r5   rA   zSParakeetEncoderRelPositionalEncoding.compute_default_relative_positional_parametersS   sd   € ð
 ˆØØä—‘˜Q × 2Ñ 2°A¼U¿[¹[ÔI×LÑLÐTZÔbg×bmÑbmÐLÓnØ×$Ñ$ñ%ññ
ˆð ˆr4   Úhidden_statesc                 óŒ  — |j                   d   }t        j                  |dz
  | d|j                  ¬«      }| j                  d d d …d f   j                  «       j                  |j                   d   dd«      j                  |j                  «      }|d d d d …f   j                  «       }t        |j                  j                  t        «      r/|j                  j                  dk7  r|j                  j                  nd}t        |d¬«      5  |j                  «       |j                  «       z  j                  dd	«      }|j                  «       }|j                  «       }	t        j                  ||	gd¬
«      }
 |
j                   g |
j                   d d ¢d‘­Ž }
d d d «       
j                  |j"                  ¬«      S # 1 sw Y   Œ%xY w)Nr    éÿÿÿÿr;   r   ÚmpsÚcpuF)Údevice_typeÚenabledr   ©ÚdiméþÿÿÿrH   )Úshaper0   rJ   r<   r8   rN   ÚexpandrM   Ú
isinstanceÚtypeÚstrr   Ú	transposeÚsinÚcosÚstackÚreshaperI   )rC   rP   Ú
seq_lengthÚposition_idsÚinv_freq_expandedÚposition_ids_expandedrU   Úfreqsr`   ra   Ú	pos_embeds              r5   Úforwardz,ParakeetEncoderRelPositionalEncoding.forwardb   sš  € à"×(Ñ(¨Ñ+ˆ
Ü—|‘| J°¡N°Z°KÀÈM×L`ÑL`Ôaˆà�M‰M˜$¢ 4˜-Ñ(×.Ñ.Ó0×7Ñ7¸×8KÑ8KÈAÑ8NÐPRÐTUÓV×YÑYÐZg×ZnÑZnÓoð 	ð !-¨T°4º¨]Ñ ;× AÑ AÓ CÐô ˜-×.Ñ.×3Ñ3´SÔ9¸m×>RÑ>R×>WÑ>WÐ[`Ò>`ð × Ñ ×%Ò%àð 	ô
 ¨¸UÔCñ 	EØ&×,Ñ,Ó.Ð1F×1LÑ1LÓ1NÑN×YÑYÐZ[Ð]^Ó_ˆEØ—)‘)“+ˆCØ—)‘)“+ˆCäŸ™ S¨# J°BÔ7ˆIØ)˜	×)Ñ)ÐD¨9¯?©?¸3¸BÐ+?ÐDÀÒDˆI÷	Eð �|‰| -×"5Ñ"5ˆ|Ó6Ð6÷	Eð 	Eús   Ä
BF:Æ:G©N©NN)r,   r-   r.   r0   r1   r2   r"   r?   ÚstaticmethodrA   Úno_gradrj   Ú__classcell__©rD   s   @r5   r7   r7   I   sx   ø… Ø�l‰lÓñEÐ4õ Eð à/3ØñØ%¨Ñ,ðð 
�‰òó ðð €U‡]�]ƒ_ð7 U§\¡\ò 7ó ô7r4   r7   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚParakeetEncoderFeedForwardr9   c                 ó`  •— t         ‰| �  «        t        j                  |j                  |j
                  |j                  ¬«      | _        t        |j                     | _
        t        j                  |j
                  |j                  |j                  ¬«      | _        |j                  | _        y )N©Úbias)r>   r?   r   ÚLinearrK   Úintermediate_sizeÚattention_biasÚlinear1r   Ú
hidden_actÚ
activationÚlinear2Úactivation_dropout©rC   r9   rD   s     €r5   r?   z#ParakeetEncoderFeedForward.__init__|   s|   ø€ Ü‰ÑÔÜ—y‘y ×!3Ñ!3°V×5MÑ5MÐTZ×TiÑTiÔjˆŒÜ  ×!2Ñ!2Ñ3ˆŒÜ—y‘y ×!9Ñ!9¸6×;MÑ;MÐTZ×TiÑTiÔjˆŒØ"(×";Ñ";ˆÕr4   c                 óÔ   — | j                  | j                  |«      «      }t        j                  j	                  || j
                  | j                  ¬«      }| j                  |«      }|S )N©ÚpÚtraining)r{   ry   r   Ú
functionalÚdropoutr}   r‚   r|   )rC   rP   s     r5   rj   z"ParakeetEncoderFeedForward.forwardƒ   sU   € ØŸ™¨¯©°]Ó(CÓDˆÜŸ™×-Ñ-¨m¸t×?VÑ?VÐae×anÑanÐ-ÓoˆØŸ™ ]Ó3ˆØÐr4   )r,   r-   r.   r"   r?   rj   ro   rp   s   @r5   rr   rr   {   s   ø„ ð<Ð4õ <ör4   rr   c                   ó&   ‡ — e Zd Zddefˆ fd„Zˆ xZS )Ú ParakeetEncoderConvolutionModuler9   c                 ó&   •— t         ‰| �  ||«       y rk   )r>   r?   )rC   r9   Úmodule_configrD   s      €r5   r?   z)ParakeetEncoderConvolutionModule.__init__‹   s   ø€ Ü‰Ñ˜ Õ/r4   rk   )r,   r-   r.   r"   r?   ro   rp   s   @r5   r†   r†   Š   s   ø„ ñ0Ð4÷ 0ñ 0r4   r†   c                   óÒ   ‡ — e Zd ZdZdedefˆ fd„Z	 ddej                  dej                  dz  dej                  dz  d	e	e
   d
eej                  ej                  f   f
d„Zd„ Zˆ xZS )ÚParakeetEncoderAttentionztMulti-head attention with relative positional encoding. See section 3.3 of https://huggingface.co/papers/1901.02860.r9   Ú	layer_idxc                 óº  •— t         ‰| �  ||¬«       d| _        t        j                  |j
                  |j                  | j                  z  d¬«      | _        t        j                  t        j                  |j                  | j                  «      «      | _        t        j                  t        j                  |j                  | j                  «      «      | _        y )N)r‹   Frt   )r>   r?   Ú	is_causalr   rv   rK   Únum_attention_headsÚhead_dimÚrelative_k_projÚ	Parameterr0   ÚzerosÚbias_uÚbias_v©rC   r9   r‹   rD   s      €r5   r?   z!ParakeetEncoderAttention.__init__’   s”   ø€ Ü‰Ñ˜¨9ÐÔ5ØˆŒä!Ÿy™y¨×);Ñ);¸V×=WÑ=WÐZ^×ZgÑZgÑ=gÐnsÔtˆÔä—l‘l¤5§;¡;¨v×/IÑ/IÈ4Ï=É=Ó#YÓZˆŒä—l‘l¤5§;¡;¨v×/IÑ/IÈ4Ï=É=Ó#YÓZˆ�r4   NrP   Úposition_embeddingsr+   ÚkwargsrE   c           
      óö  — |j                   d d }|\  }}||d| j                  f}| j                  |«      j                  |«      j	                  dd«      }	| j                  |«      j                  |«      j	                  dd«      }
| j                  |«      j                  |«      j	                  dd«      }t        j                  | j                  j                  t        «      }|	| j                  j                  d| j                  j                  d| j                  «      z   }|	| j                  j                  d| j                  j                  d| j                  «      z   }| j                  |«      }|j                  |d| j                  j                  | j                  «      }||j!                  dddd«      z  }| j#                  |«      }|dd |…f   }|| j$                  z  }|�)|j'                  |j)                  «       t+        d«      «      } || f||
||| j,                  sdn| j.                  | j$                  d	œ|¤Ž\  }} |j0                  g |¢d‘­Ž j3                  «       }| j5                  |«      }||fS )
NrR   r    r   r   r   .z-infç        )ÚqueryÚkeyÚvaluer+   r„   Úscaling)rZ   r�   Úq_projÚviewr_   Úk_projÚv_projr   Úget_interfacer9   Ú_attn_implementationr   r“   rŽ   r”   r�   ÚpermuteÚ
_rel_shiftr�   Úmasked_fill_Úlogical_notrN   r‚   Úattention_dropoutrc   Ú
contiguousÚo_proj)rC   rP   r–   r+   r—   Úinput_shapeÚ
batch_sizerd   Úhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesÚattention_interfaceÚquery_states_with_bias_uÚquery_states_with_bias_vÚrelative_key_statesÚ	matrix_bdÚattn_outputÚattn_weightss                      r5   rj   z ParakeetEncoderAttention.forwardœ   sj  € ð $×)Ñ)¨#¨2Ð.ˆØ!,Ñˆ
�JØ" J°°D·M±MÐBˆà—{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆØ—[‘[ Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆ
Ø—{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðð $0°$·+±+×2BÑ2BØˆt�{‰{×.Ñ.°°4·=±=ó3
ñ $
Ð ð $0°$·+±+×2BÑ2BØˆt�{‰{×.Ñ.°°4·=±=ó3
ñ $
Ð ð #×2Ñ2Ð3FÓGÐØ1×6Ñ6°zÀ2ÀtÇ{Á{×GfÑGfÐhl×huÑhuÓvÐð -Ð/B×/JÑ/JÈ1ÈaÐQRÐTUÓ/VÑVˆ	Ø—O‘O IÓ.ˆ	Ø˜c ; J ;Ð.Ñ/ˆ	Ø §¡Ñ,ˆ	àÐ%ð "×.Ñ.¨~×/IÑ/IÓ/KÌUÐSYË]Ó[ˆIñ %8Øð	%
à*ØØØ$Ø#Ÿ}š}‘C°$×2HÑ2HØ—L‘Lñ	%
ð ñ	%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ—k‘k +Ó.ˆØ˜LÐ(Ð(r4   c                 óÒ   — |j                   \  }}}}t        j                  j                  |d¬«      }|j	                  ||d|«      }|dd…dd…dd…f   j	                  ||||«      }|S )ztRelative position shift for Shaw et al. style attention. See appendix B of https://huggingface.co/papers/1901.02860.)r    r   )ÚpadrR   Nr    )rZ   r   rƒ   r¹   rŸ   )rC   Úattention_scoresr¬   Ú	num_headsÚquery_lengthÚposition_lengths         r5   r¥   z#ParakeetEncoderAttention._rel_shiftÕ   st   € à?O×?UÑ?UÑ<ˆ
�I˜|¨_ÜŸ=™=×,Ñ,Ð-=À6Ð,ÓJÐØ+×0Ñ0°¸YÈÈLÓYÐØ+ªAªq°!±"¨HÑ5×:Ñ:¸:ÀyÐR^Ð`oÓpÐØÐr4   rk   )r,   r-   r.   r/   r"   Úintr?   r0   r1   r   r   Útuplerj   r¥   ro   rp   s   @r5   rŠ   rŠ   �   s‹   ø„ Ù~ð[Ð4ð [Àõ [ð /3ñ	7)à—|‘|ð7)ð #Ÿ\™\¨DÑ0ð7)ð Ÿ™ tÑ+ð	7)ð
 Ð+Ñ,ð7)ð 
ˆu�|‰|˜UŸ\™\Ð)Ñ	*ó7)ör r4   rŠ   c                   ó–   ‡ — e Zd Zdefˆ fd„Zdej                  dej                  fd„Z	d	dej                  dej                  fd„Z
ˆ xZS )
Ú ParakeetEncoderSubsamplingConv2Dr9   c                 ó  •— t         ‰| �  «        |j                  | _        |j                  | _        |j                  | _        | j                  dz
  dz  | _        t        t        j                  |j                  «      «      | _        t        j                  «       | _        | j                   j#                  t        j$                  d| j                  | j                  | j
                  | j                  ¬«      «       | j                   j#                  t        j&                  «       «       t)        | j                  dz
  «      D ]ä  }| j                   j#                  t        j$                  | j                  | j                  | j                  | j
                  | j                  | j                  ¬«      «       | j                   j#                  t        j$                  | j                  | j                  d¬«      «       | j                   j#                  t        j&                  «       «       Œæ |j*                  | j
                  | j                  z  z  }t        j,                  |j                  |z  |j.                  d¬«      | _        y )Nr    r   )Úkernel_sizeÚstrideÚpadding)rÃ   rÄ   rÅ   Úgroups©rÃ   Trt   )r>   r?   Úsubsampling_conv_kernel_sizerÃ   Úsubsampling_conv_striderÄ   Úsubsampling_conv_channelsÚchannelsrÅ   r¾   ÚmathÚlog2Úsubsampling_factorÚ
num_layersr   Ú
ModuleListÚlayersÚappendÚConv2dÚReLUÚrangeÚnum_mel_binsrv   rK   Úlinear)rC   r9   ÚiÚ
out_lengthrD   s       €r5   r?   z)ParakeetEncoderSubsamplingConv2D.__init__ß   sº  ø€ Ü‰ÑÔà!×>Ñ>ˆÔØ×4Ñ4ˆŒØ×8Ñ8ˆŒØ×(Ñ(¨1Ñ,°Ñ2ˆŒÜœdŸi™i¨×(AÑ(AÓBÓCˆŒô —m‘m“oˆŒØ�‰×ÑÜ�I‰I�a˜Ÿ™°D×4DÑ4DÈTÏ[É[Ðbf×bnÑbnÔoô	
ð 	�‰×Ñœ2Ÿ7™7›9Ô%Ü�t—‘¨Ñ*Ó+ò 	*ˆAà�K‰K×ÑÜ—	‘	Ø—M‘MØ—M‘MØ $× 0Ñ 0ØŸ;™;Ø ŸL™LØŸ=™=ôô	ð �K‰K×ÑœrŸy™y¨¯©¸¿¹ÐSTÔUÔVà�K‰K×ÑœrŸw™w›yÕ)ð	*ð" ×(Ñ(¨T¯[©[¸$¿/¹/Ñ-IÑJˆ
Ü—i‘i × @Ñ @À:Ñ MÈv×OaÑOaÐhlÔmˆ�r4   Úinput_lengthsÚ
conv_layerc                 óÂ   — t        |d«      rR|j                  dk7  rC|j                  }|j                  d   }|j                  d   }||d   z   |d   z   |z
  |z  dz   }|S |S )NrÄ   )r    r    r   r    )ÚhasattrrÄ   rÅ   rÃ   )rC   rÚ   rÛ   rÅ   rÃ   rÄ   Úoutput_lengthss          r5   Ú_get_output_lengthz3ParakeetEncoderSubsamplingConv2D._get_output_length  sx   € Ü�:˜xÔ(¨Z×->Ñ->À&Ò-HØ ×(Ñ(ˆGØ$×0Ñ0°Ñ3ˆKØ×&Ñ& qÑ)ˆFà+¨g°a©jÑ8¸7À1¹:ÑEÈÑSÐX^Ñ^ÐabÑbˆNØ!Ð!àÐr4   Úinput_featuresr+   c                 ó  — |j                  d«      }|�|j                  d«      nd }| j                  D ]„  } ||«      }t        |t        j
                  «      sŒ&|€Œ)| j                  ||«      }|j                  d   }t        j                  ||j                  ¬«      |d d …d f   k  }||d d …d d d …d f   z  }Œ† |j                  dd«      j                  |j                  d   |j                  d   d«      }| j                  |«      }|S )Nr    rR   r   r;   r   )Ú	unsqueezeÚsumrÑ   r\   r   rÓ   rß   rZ   r0   rJ   r<   r_   rc   r×   )rC   rà   r+   rP   Úcurrent_lengthsÚlayerÚcurrent_seq_lengthÚchannel_masks           r5   rj   z(ParakeetEncoderSubsamplingConv2D.forward  s  € Ø&×0Ñ0°Ó3ˆØ4BÐ4N˜.×,Ñ,¨RÔ0ÐTXˆà—[‘[ò 
	@ˆEÙ! -Ó0ˆMô ˜%¤§¡Õ+°Ñ0JØ"&×"9Ñ"9¸/È5Ó"Q�Ø%2×%8Ñ%8¸Ñ%;Ð"ä—L‘LÐ!3¸N×<QÑ<QÔRÐUdÒefÐhlÐelÑUmÑmð ð  ªa°²q¸$Ð.>Ñ!?Ñ?‘ð
	@ð &×/Ñ/°°1Ó5×=Ñ=¸m×>QÑ>QÐRSÑ>TÐVc×ViÑViÐjkÑVlÐnpÓqˆØŸ™ MÓ2ˆàÐr4   rk   )r,   r-   r.   r"   r?   r0   r1   r   rÓ   rß   rj   ro   rp   s   @r5   rÁ   rÁ   Þ   sI   ø„ ð!nÐ4õ !nðF	°·±ð 	È"Ï)É)ó 	ñ e§l¡lð ÀEÇLÁL÷ r4   rÁ   c                   ó´   ‡ — e Zd Zddededz  fˆ fd„Z	 	 ddej                  dej                  dz  dej                  dz  dee	   d	ej                  f
d
„Z
ˆ xZS )ÚParakeetEncoderBlockNr9   r‹   c                 ó  •— t         ‰| �  «        d| _        t        |«      | _        t        ||«      | _        t        |«      | _        t        |«      | _	        t        j                  |j                  «      | _        t        j                  |j                  «      | _        t        j                  |j                  «      | _        t        j                  |j                  «      | _        t        j                  |j                  «      | _        y )NF)r>   r?   Úgradient_checkpointingrr   Úfeed_forward1rŠ   Ú	self_attnr†   ÚconvÚfeed_forward2r   Ú	LayerNormrK   Únorm_feed_forward1Únorm_self_attÚ	norm_convÚnorm_feed_forward2Únorm_outr•   s      €r5   r?   zParakeetEncoderBlock.__init__$  s»   ø€ Ü‰ÑÔØ&+ˆÔ#ä7¸Ó?ˆÔÜ1°&¸)ÓDˆŒÜ4°VÓ<ˆŒ	Ü7¸Ó?ˆÔä"$§,¡,¨v×/AÑ/AÓ"BˆÔÜŸ\™\¨&×*<Ñ*<Ó=ˆÔÜŸ™ f×&8Ñ&8Ó9ˆŒÜ"$§,¡,¨v×/AÑ/AÓ"BˆÔÜŸ™ V×%7Ñ%7Ó8ˆ�r4   rP   r+   r–   r—   rE   c                 óx  — |}| j                  | j                  |«      «      }|d|z  z   }| j                  |«      } | j                  d|||dœ|¤Ž\  }}||z   }| j	                  | j                  |«      |¬«      }	||	z   }| j                  | j                  |«      «      }
|d|
z  z   }| j                  |«      }|S )Ng      à?)rP   r+   r–   )r+   r3   )	rì   rñ   rò   rí   rî   ró   rï   rô   rõ   )rC   rP   r+   r–   r—   ÚresidualÚnormalized_hidden_statesr¶   Ú_Úconv_outputÚ
ff2_outputs              r5   rj   zParakeetEncoderBlock.forward3  sß   € ð !ˆØ×*Ñ*¨4×+BÑ+BÀ=Ó+QÓRˆØ  3¨Ñ#6Ñ6ˆà#'×#5Ñ#5°mÓ#DÐ Ø'˜Ÿ™ð 
Ø2Ø)Ø 3ñ
ð ñ	
‰ˆ�Qð &¨Ñ3ˆà—i‘i §¡¨}Ó =Èn�iÓ]ˆØ%¨Ñ3ˆà×'Ñ'¨×(?Ñ(?ÀÓ(NÓOˆ
Ø%¨¨jÑ(8Ñ8ˆàŸ™ mÓ4ˆàÐr4   rk   rl   )r,   r-   r.   r"   r¾   r?   r0   r1   r   r   rj   ro   rp   s   @r5   ré   ré   #  sx   ø„ ñ9Ð4ð 9ÀÀtÁõ 9ð$ /3Ø37ñ	à—|‘|ðð Ÿ™ tÑ+ðð #Ÿ\™\¨DÑ0ð	ð
 Ð+Ñ,ðð 
�‰÷r4   ré   c                   óÖ   ‡ — e Zd ZU eed<   dZdZdZdZdgZ	dZ
dZdZdZdZdZeedœZ ej(                  «       ˆ fd	„«       Zd
ej,                  fd„Zddej,                  dedz  fd„Zˆ xZS )ÚParakeetPreTrainedModelr9   Úmodelrà   ÚaudioTré   F)rP   Ú
attentionsc                 ó”  •— t         ‰| �  |«       t        | j                  dd«      }t	        |t
        «      rEt        j                  |j                  d|¬«       t        j                  |j                  d|¬«       y t	        |t        «      r<|j                  |j                  «      }t        j                  |j                  |«       y y )NÚinitializer_rangeg{®Gáz”?r™   )ÚmeanÚstd)r>   Ú_init_weightsÚgetattrr9   r\   rŠ   ÚinitÚnormal_r“   r”   r7   rA   Úcopy_r8   )rC   Úmoduler  Úbuffer_valuerD   s       €r5   r  z%ParakeetPreTrainedModel._init_weightsh  s�   ø€ ä‰Ñ˜fÔ%Ü�d—k‘kÐ#6¸Ó=ˆä�fÔ6Ô7Ü�L‰L˜Ÿ™¨S°cÕ:Ü�L‰L˜Ÿ™¨S°cÖ:Ü˜Ô DÔEØ!×PÑPÐQW×Q^ÑQ^Ó_ˆLÜ�J‰J�v—‘¨Õ5ð Fr4   rÚ   c                 óæ  — t        | j                  d| j                  «      }|j                  }|j                  }t	        t        j                  |j                  «      «      }|dz
  dz  dz  }||z
  }|}t        |«      D ]Q  }	t        j                  |j                  t        j                  ¬«      |z   |«      dz   }t        j                  |«      }ŒS |j                  t        j                  ¬«      S )NÚencoder_configr    r   rH   rG   )r  r9   rÈ   rÉ   r¾   rÌ   rÍ   rÎ   rÕ   r0   ÚdivrM   rN   Úfloor)
rC   rÚ   r  rÃ   rÄ   rÏ   Úall_paddingsÚadd_padÚlengthsrù   s
             r5   Ú_get_subsampling_output_lengthz6ParakeetPreTrainedModel._get_subsampling_output_lengtht  sÍ   € Ü  §¡Ð.>ÀÇÁÓLˆà$×AÑAˆØ×7Ñ7ˆÜœŸ™ >×#DÑ#DÓEÓFˆ
à# a™¨AÑ-°Ñ1ˆØ Ñ,ˆØˆä�zÓ"ò 	+ˆAÜ—i‘i §
¡
´·± 
Ó =ÀÑ GÈÓPÐSVÑVˆGÜ—k‘k 'Ó*‰Gð	+ð �z‰z¤§	¡	ˆzÓ*Ð*r4   Nr+   Útarget_lengthc                 óÄ   — | j                  |j                  d«      «      }|�|n|j                  «       }t        j                  ||j
                  ¬«      |dd…df   k  }|S )zþ
        Convert the input attention mask to its subsampled form. `target_length` sets the desired output length, useful
        when the attention mask length differs from `sum(-1).max()` (i.e., when the longest sequence in the batch is padded)
        rR   Nr;   )r  rã   Úmaxr0   rJ   r<   )rC   r+   r  rÞ   Ú
max_lengths        r5   Ú_get_output_attention_maskz2ParakeetPreTrainedModel._get_output_attention_mask…  sc   € ð
 ×<Ñ<¸^×=OÑ=OÐPRÓ=SÓTˆà&3Ð&?‘]À^×EWÑEWÓEYˆ
ÜŸ™ j¸×9NÑ9NÔOÐR`ÒabÐdhÐahÑRiÑiˆØÐr4   rk   )r,   r-   r.   r!   r2   Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_supports_flat_attention_maskÚ_supports_sdpaÚ_supports_flex_attnÚ_supports_flash_attnÚ_can_compile_fullgraphÚ_supports_attention_backendré   rŠ   Ú_can_record_outputsr0   rn   r  r1   r  r¾   r  ro   rp   s   @r5   rý   rý   R  s¦   ø… àÓØÐØ&€OØÐØ&*Ð#Ø/Ð0ÐØ$(Ð!Ø€NØÐð !Ðà!ÐØ"&Ðà-Ø.ñÐð
 €U‡]�]ƒ_ó	6ó ð	6ð+¸E¿L¹Ló +ñ"	¸¿¹ð 	ÐVYÐ\`ÑV`÷ 	r4   rý   z{
    The Parakeet Encoder model, based on the [Fast Conformer architecture](https://huggingface.co/papers/2305.05084).
    c                   ó²   ‡ — e Zd ZU eed<   dZdefˆ fd„Zeee	e
	 	 ddej                  dej                  dz  dedee   d	ef
d
„«       «       «       «       Zˆ xZS )ÚParakeetEncoderr9   Úencoderc           	      óþ  •— t         ‰| �  |«       || _        d| _        |j                  | _        |j
                  | _        |j                  | _        |j                  rt        j                  |j                  «      nd| _        t        |«      | _        t        |«      | _        t!        j"                  t%        |j&                  «      D �cg c]  }t)        ||«      ‘Œ c}«      | _        | j-                  «        y c c}w )NFrG   )r>   r?   r9   rë   r„   Údropout_positionsÚ	layerdropÚscale_inputrÌ   ÚsqrtrK   Úinput_scalerÁ   Úsubsamplingr7   Úencode_positionsr   rÐ   rÕ   Únum_hidden_layersré   rÑ   Ú	post_initr•   s      €r5   r?   zParakeetEncoder.__init__š  sÄ   ø€ Ü‰Ñ˜Ô ØˆŒØ&+ˆÔ#à—~‘~ˆŒØ!'×!9Ñ!9ˆÔØ×)Ñ)ˆŒà<B×<NÒ<Nœ4Ÿ9™9 V×%7Ñ%7Ô8ÐTWˆÔÜ;¸FÓCˆÔÜ DÀVÓ LˆÔä—m‘mÜFKÈF×LdÑLdÓFeÖf¸Ô! &¨)Õ4Òfó
ˆŒð 	�‰Õùò gs   Ã
C:Nrà   r+   Úoutput_attention_maskr—   rE   c                 ó$  — | j                  ||«      }|| j                  z  }| j                  |«      }t        j                  j                  || j
                  | j                  ¬«      }t        j                  j                  || j                  | j                  ¬«      }d}|�u| j                  ||j                  d   ¬«      }|j                  d«      j                  d|j                  d   d«      }||j                  dd«      z  }|j                  d«      }| j                  D ]E  }d}	| j                  r&t        j                  g «      }
|
| j                   k  rd}	|	rŒ: ||f||d	œ|¤Ž}ŒG t#        ||�|r|j%                  «       ¬
«      S d¬
«      S )a�  
        output_attention_mask (`bool`, *optional*, defaults to `True`):
            Whether to return the output attention mask. Only effective when `attention_mask` is provided.

        Example:

        ```python
        >>> from transformers import AutoProcessor, ParakeetEncoder
        >>> from datasets import load_dataset, Audio

        >>> model_id = "nvidia/parakeet-ctc-1.1b"
        >>> processor = AutoProcessor.from_pretrained(model_id)
        >>> encoder = ParakeetEncoder.from_pretrained(model_id)

        >>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
        >>> ds = ds.cast_column("audio", Audio(sampling_rate=processor.feature_extractor.sampling_rate))

        >>> inputs = processor(ds[0]["audio"]["array"])
        >>> encoder_outputs = encoder(**inputs)

        >>> print(encoder_outputs.last_hidden_state.shape)
        ```
        r€   Nr    ©r  rR   r   FT)r+   r–   )Úlast_hidden_stater+   )r.  r-  r/  r   rƒ   r„   r‚   r)  r  rZ   râ   r[   r_   rÑ   r0   Úrandr*  r*   r¾   )rC   rà   r+   r2  r—   rP   r–   Úoutput_maskÚencoder_layerÚto_dropÚdropout_probabilitys              r5   rj   zParakeetEncoder.forward­  sŸ  € ðF ×(Ñ(¨¸ÓHˆØ%¨×(8Ñ(8Ñ8ˆØ"×3Ñ3°MÓBÐäŸ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-ÓdˆÜ Ÿm™m×3Ñ3Ø 4×#9Ñ#9ÀDÇMÁMð 4ó 
Ðð ˆØÐ%Ø×9Ñ9¸.ÐXe×XkÑXkÐlmÑXnÐ9ÓoˆKØ(×2Ñ2°1Ó5×<Ñ<¸RÀ×ATÑATÐUVÑAWÐY[Ó\ˆNØ+¨n×.FÑ.FÀqÈ!Ó.LÑLˆNØ+×5Ñ5°aÓ8ˆNà!Ÿ[™[ò 	ˆMàˆGØ�}Š}Ü&+§j¡j°£nÐ#Ø&¨¯©Ò7Ø"�GâÙ -Ø!ð!à#1Ø(;ñ!ð ñ	!‘ð	ô  *Ø+Ø0>Ð0JÑOd˜;Ÿ?™?Ó,ô
ð 	
àjnô
ð 	
r4   )NT)r,   r-   r.   r"   r2   r  r?   r   r   r   r   r0   r1   Úboolr   r   r   rj   ro   rp   s   @r5   r&  r&  ‘  sœ   ø… ð "Ó!Ø!ÐðÐ4õ ð& ØØØð /3Ø&*ñ	B
àŸ™ðB
ð Ÿ™ tÑ+ðB
ð  $ð	B
ð
 Ð+Ñ,ðB
ð 
òB
ó ó ó  ó ôB
r4   r&  c                   óÆ   — e Zd ZU dZej
                  ed<   dZeej                     dz  ed<   dZ
eeej                        dz  ed<   dZeeej                        dz  ed<   y)ÚParakeetCTCGenerateOutputaz  
    Outputs of Parakeet CTC model generation.

    Args:
        sequences (`torch.LongTensor` of shape `(batch_size, sequence_length)`):
            The generated sequences. The second dimension (sequence_length) is either equal to `max_length` or shorter
            if all batches finished early due to the `eos_token_id`.
        logits (`tuple(torch.FloatTensor)` *optional*, returned when `output_logits=True`):
            Unprocessed prediction scores of the language modeling head (scores for each vocabulary token before SoftMax)
            at each generation step. Tuple of `torch.FloatTensor` with up to `max_new_tokens` elements (one element for
            each generated token), with each tensor of shape `(batch_size, config.vocab_size)`.
        attentions (`tuple(tuple(torch.FloatTensor))`, *optional*, returned when `output_attentions=True`):
            Tuple (one element for each generated token) of tuples (one element for each layer of the decoder) of
            `torch.FloatTensor` of shape `(batch_size, num_heads, generated_length, sequence_length)`.
        hidden_states (`tuple(tuple(torch.FloatTensor))`, *optional*, returned when `output_hidden_states=True`):
            Tuple (one element for each generated token) of tuples (one element for each layer of the decoder) of
            `torch.FloatTensor` of shape `(batch_size, generated_length, hidden_size)`.
    Ú	sequencesNÚlogitsr   rP   )r,   r-   r.   r/   r0   Ú
LongTensorr2   r?  r¿   ÚFloatTensorr   rP   r3   r4   r5   r=  r=  ö  sm   … ñð& ×ÑÓØ.2€FˆE�%×#Ñ#Ñ$ tÑ+Ó2Ø9=€J��e˜E×-Ñ-Ñ.Ñ/°$Ñ6Ó=Ø<@€M�5˜˜u×0Ñ0Ñ1Ñ2°TÑ9Ô@r4   r=  c                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )ÚParakeetGenerateOutputz`
    Deprecated alias for ParakeetCTCGenerateOutput. Use ParakeetCTCGenerateOutput instead.
    c                 óN   •— t        ‰| �  |i |¤Ž t        j                  d«       y )Nz€`ParakeetGenerateOutput` is deprecated and removed starting from version 5.11.0; please use `ParakeetCTCGenerateOutput` instead.)r>   r?   ÚloggerÚwarning_once)rC   Úargsr—   rD   s      €r5   r?   zParakeetGenerateOutput.__init__  s)   ø€ Ü‰Ñ˜$Ð) &Ò)Ü×Ñð Oõ	
r4   )r,   r-   r.   r/   r?   ro   rp   s   @r5   rC  rC    s   ø„ ñ÷
ð 
r4   rC  zS
    Parakeet Encoder with a Connectionist Temporal Classification (CTC) head.
    c                   óX  ‡ — e Zd ZU eed<   defˆ fd„Zee	 	 ddej                  dej                  dz  dej                  dz  de
e   def
d	„«       «       Z ej                  «       	 	 	 ddej                  dej                  dz  d
ededz  de
e   deej$                  z  fd„«       Zˆ xZS )ÚParakeetForCTCr9   c                 ó  •— t         ‰| �  |«       t        j                  |j                  «      | _        t        j                  |j                  j                  |j                  d¬«      | _
        | j                  «        y )Nr    rÇ   )r>   r?   r   Úfrom_configr  r'  r   ÚConv1drK   Ú
vocab_sizeÚctc_headr1  r~   s     €r5   r?   zParakeetForCTC.__init__&  sY   ø€ Ü‰Ñ˜Ô Ü ×,Ñ,¨V×-BÑ-BÓCˆŒäŸ	™	 &×"7Ñ"7×"CÑ"CÀV×EVÑEVÐdeÔfˆŒà�‰Õr4   Nrà   r+   Úlabelsr—   rE   c           
      óŒ  — |�|j                  dd«        | j                  d||dœ|¤Ž}|j                  }| j                  |j	                  dd«      «      j	                  dd«      }d}|��+|j
                  j                  d«      }	|| j                  j                  k7  }
|
j                  d«      }|j                  |
«      }t        j                  j                  |dt        j                  ¬«      j	                  d	d«      }t        j                  j                   j#                  d
¬«      5  t        j                  j%                  |||	|| j                  j                  | j                  j&                  | j                  j(                  ¬«      }ddd«       t+        |||j,                  |j.                  ¬«      S # 1 sw Y   Œ,xY w)a¾  
        Example:

        ```python
        >>> from transformers import AutoProcessor, ParakeetForCTC
        >>> from datasets import load_dataset, Audio

        >>> model_id = "nvidia/parakeet-ctc-1.1b"
        >>> processor = AutoProcessor.from_pretrained(model_id)
        >>> model = ParakeetForCTC.from_pretrained(model_id)

        >>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
        >>> ds = ds.cast_column("audio", Audio(sampling_rate=processor.feature_extractor.sampling_rate))

        >>> inputs = processor(ds[0]["audio"]["array"], text=ds[0]["text"])
        >>> outputs = model(**inputs)

        >>> print(outputs.loss)
        ```Nr2  T©rà   r+   r    r   rR   )rX   rI   r   F)rV   )ÚblankÚ	reductionÚzero_infinity)Úlossr?  rP   r   r3   )Ú
setdefaultr'  r5  rN  r_   r+   rã   r9   Úpad_token_idÚmasked_selectr   rƒ   Úlog_softmaxr0   Úfloat32ÚbackendsÚcudnnÚflagsÚctc_lossÚctc_loss_reductionÚctc_zero_infinityr   rP   r   )rC   rà   r+   rO  r—   Úencoder_outputsrP   r?  rU  Úencoder_lengthsÚlabels_maskÚtarget_lengthsÚflattened_targetsÚ	log_probss                 r5   rj   zParakeetForCTC.forward.  sž  € ð: ÐØ×ÑÐ5°tÔ<Ø&˜$Ÿ,™,ð 
Ø)Ø)ñ
ð ñ
ˆð (×9Ñ9ˆØ—‘˜}×6Ñ6°q¸!Ó<Ó=×GÑGÈÈ1ÓMˆàˆØÑØ-×<Ñ<×@Ñ@ÀÓDˆOð ! D§K¡K×$<Ñ$<Ñ<ˆKØ(Ÿ_™_¨RÓ0ˆNØ &× 4Ñ 4°[Ó AÐô Ÿ™×1Ñ1°&¸bÌÏÉÐ1ÓV×`Ñ`ÐabÐdeÓfˆIä—‘×%Ñ%×+Ñ+°EÐ+Ó:ñ 	Ü—}‘}×-Ñ-ØØ%Ø#Ø"ØŸ+™+×2Ñ2Ø"Ÿk™k×<Ñ<Ø"&§+¡+×"?Ñ"?ð .ó �÷	ô ØØØ)×7Ñ7Ø&×1Ñ1ô	
ð 	
÷	ð 	ús   Ä,A#F:Æ:GÚreturn_dict_in_generateÚcompile_configc                 ór  — |�| j                  |«      n| j                  }d|d<    |d	||dœ|¤Ž}|j                  j                  d¬«      }|�:| j	                  ||j
                  d   ¬«      }| j                  j                  || <   |r-t        ||j                  |j                  |j                  ¬«      S |S )
aÜ  
        compile_config ([`~generation.CompileConfig`], *optional*):
            If provided, `torch.compile` will be applied to the forward calls in the decoding loop.

        Example:

        ```python
        >>> from transformers import AutoProcessor, ParakeetForCTC
        >>> from datasets import load_dataset, Audio

        >>> model_id = "nvidia/parakeet-ctc-1.1b"
        >>> processor = AutoProcessor.from_pretrained(model_id)
        >>> model = ParakeetForCTC.from_pretrained(model_id)

        >>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
        >>> ds = ds.cast_column("audio", Audio(sampling_rate=processor.feature_extractor.sampling_rate))

        >>> inputs = processor(ds[0]["audio"]["array"], text=ds[0]["text"])
        >>> predicted_ids = model.generate(**inputs)
        >>> transcription = processor.batch_decode(predicted_ids, skip_special_tokens=True)

        >>> print(transcription)
        ```
        TÚreturn_dictrQ  rR   rW   r    r4  )r>  r?  r   rP   r3   )Úget_compiled_callÚ__call__r?  Úargmaxr  rZ   r9   rW  r=  r   rP   )	rC   rà   r+   rg  rh  r—   Úmodel_forwardÚoutputsr>  s	            r5   ÚgeneratezParakeetForCTC.generatet  sÛ   € ðB CQÐB\˜×.Ñ.¨~Ô>Ðbf×boÑboˆà $ˆˆ}ÑÙ"/ð #
Ø)Ø)ñ#
ð ñ#
ˆð —N‘N×)Ñ)¨bÐ)Ó1ˆ	ð Ð%Ø!×<Ñ<¸^Ð[d×[jÑ[jÐklÑ[mÐ<ÓnˆNØ)-¯©×)AÑ)AˆI�~�oÑ&á"Ü,Ø#Ø—~‘~Ø"×-Ñ-Ø%×3Ñ3ô	ð ð Ðr4   rl   )NFN)r,   r-   r.   r!   r2   r?   r   r   r0   r1   r   r   r   rj   rn   r;  r	   r=  r@  rp  ro   rp   s   @r5   rI  rI    s  ø… ð ÓðÐ0õ ð Øð /3Ø&*ñ	B
àŸ™ðB
ð Ÿ™ tÑ+ðB
ð —‘˜tÑ#ð	B
ð
 Ð+Ñ,ðB
ð 
òB
ó ó ðB
ðH €U‡]�]ƒ_ð /3Ø(-Ø/3ñ9àŸ™ð9ð Ÿ™ tÑ+ð9ð "&ð	9ð
 &¨Ñ,ð9ð Ð+Ñ,ð9ð 
# U×%5Ñ%5Ñ	5ò9ó ô9r4   rI  c                   ón   ‡ — e Zd ZdZdefˆ fd„Z	 d	dej                  dedz  dej                  fd„Z
ˆ xZS )
ÚParakeetRNNTDecoderz'LSTM-based prediction network For RNN-Tr9   c                 óx  •— t         ‰| �  «        |j                  | _        t        j                  |j
                  |j                  «      | _        t        j                  |j                  |j                  |j                  d¬«      | _
        t        j                  |j                  |j                  «      | _        y )NT)Ú
input_sizerK   rÏ   Úbatch_first)r>   r?   Úblank_token_idr   Ú	EmbeddingrM  Údecoder_hidden_sizeÚ	embeddingÚLSTMÚnum_decoder_layersÚlstmrv   Údecoder_projectorr~   s     €r5   r?   zParakeetRNNTDecoder.__init__´  s‰   ø€ Ü‰ÑÔØ$×3Ñ3ˆÔÜŸ™ f×&7Ñ&7¸×9SÑ9SÓTˆŒÜ—G‘GØ×1Ñ1Ø×2Ñ2Ø×0Ñ0Øô	
ˆŒ	ô "$§¡¨6×+EÑ+EÀv×GaÑGaÓ!bˆÕr4   NÚ	input_idsÚcacherE   c                 óÆ  — |�>|d d …df   | j                   k(  }|j                  r|j                  «       r|j                  S | j	                  |«      }|�8|j                  }|s|j                  |«       |j                  |j                  f}nd }| j                  ||«      \  }\  }}	| j                  |«      }
|�(r nd }|j                  |
||	|¬«       |j                  S |
S )NrR   )Úmask)rv  Úis_initializedÚallr  ry  Úlazy_initializationÚhidden_stateÚ
cell_stater|  r}  Úupdate)rC   r~  r  Ú
blank_maskÚ
embeddingsÚwas_initializedÚhidden_cell_statesÚlstm_outputr…  r†  Údecoder_outputr�  s               r5   rj   zParakeetRNNTDecoder.forwardÀ  sî   € ð
 ÐØ"¢1 b 5Ñ)¨T×-@Ñ-@Ñ@ˆJà×#Ò#¨
¯©Ô(8Ø—{‘{Ð"à—^‘^ IÓ.ˆ
ð ÐØ#×2Ñ2ˆOÙ"Ø×)Ñ)¨*Ô5Ø"'×"4Ñ"4°e×6FÑ6FÐ!GÑà!%Ðà26·)±)¸JÐHZÓ2[Ñ/ˆÑ/�l JØ×/Ñ/°Ó<ˆàÐÙ"1�J‘;°tˆDØ�L‰L˜¨°zÈˆLÔMØ—;‘;ÐàÐr4   rk   )r,   r-   r.   r/   r#   r?   r0   r@  r%   r1   rj   ro   rp   s   @r5   rr  rr  ±  sJ   ø„ Ù1ð
cÐ1õ 
cð 26ñà×#Ñ#ðð (¨$Ñ.ðð 
�‰÷	r4   rr  c                   ó–   ‡ — e Zd ZdZdefˆ fd„Zdej                  dej                  deej                  ej                  f   fd„Z	ˆ xZ
S )ÚParakeetRNNTJointNetworkzPJoint network that combines encoder and decoder outputs to predict token logits.r9   c                 óÒ   •— t         ‰| �  «        t        |j                     | _        t        j                  |j                  |j                  «      | _	        |j                  | _        y rk   )
r>   r?   r   rz   r{   r   rv   rx  rM  Úheadr~   s     €r5   r?   z!ParakeetRNNTJointNetwork.__init__ä  sK   ø€ Ü‰ÑÔÜ  ×!2Ñ!2Ñ3ˆŒÜ—I‘I˜f×8Ñ8¸&×:KÑ:KÓLˆŒ	Ø ×+Ñ+ˆ�r4   Údecoder_hidden_statesÚencoder_hidden_statesrE   c                 óL   — | j                  ||z   «      }| j                  |«      S rk   )r{   r‘  )rC   r’  r“  Újoint_outputs       r5   rj   z ParakeetRNNTJointNetwork.forwardê  s(   € ð
 —‘Ð'<Ð?TÑ'TÓUˆØ�y‰y˜Ó&Ð&r4   )r,   r-   r.   r/   r#   r?   r0   r1   r¿   rj   ro   rp   s   @r5   r�  r�  á  sN   ø„ ÙZð,Ð1õ ,ð'à$Ÿ|™|ð'ð  %Ÿ|™|ð'ð 
ˆu�|‰|˜UŸ\™\Ð)Ñ	*÷	'r4   r�  c                   óv   — e Zd ZU dZdZej                  dz  ed<   dZej                  dz  ed<   dZ	e
dz  ed<   y)ÚParakeetRNNTOutputa÷  
    Output of the Parakeet RNN-T forward pass.

    Args:
        loss (`torch.FloatTensor`, *optional*):
            RNN-T loss, returned when `labels` are provided.
        logits (`torch.FloatTensor`):
            Joint token logits. Shape is `(batch, T, U+1, vocab)` for training
            or `(batch, 1, 1, vocab)` for single-step inference.
        decoder_cache (`ParakeetRNNTDecoderCache`, *optional*):
            Decoder LSTM cache containing hidden state, cell state, and last output.
    NrU  r?  Údecoder_cache)r,   r-   r.   r/   rU  r0   rA  r2   r?  r˜  r%   r3   r4   r5   r—  r—  ó  sC   … ñð &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø'+€FˆE×Ñ Ñ$Ó+Ø59€MÐ+¨dÑ2Ô9r4   r—  z?
    Parakeet Encoder with an RNN-T (RNN Transducer) head.
    c                   óš  ‡ — e Zd ZU eed<   dgZej                  gZdefˆ fd„Z	e
	 ddej                  dej                  dz  dee   defd	„«       Zee
	 	 	 	 	 	 	 ddej                  dz  dej                  dz  d
ej$                  dz  dedz  dedz  deeej,                     z  dz  dej                  dz  dee   defd„«       «       Zˆ xZS )ÚParakeetForRNNTr9   rr  c                 ó`  •— t         ‰| �  |«       t        j                  |j                  «      | _        t        j                  |j                  j                  |j                  «      | _
        t        |«      | _        t        |«      | _        |j                  | _        | j!                  «        y rk   )r>   r?   r   rK  r  r'  r   rv   rK   rx  Úencoder_projectorrr  Údecoderr�  ÚjointÚmax_symbols_per_stepr1  r~   s     €r5   r?   zParakeetForRNNT.__init__  s}   ø€ Ü‰Ñ˜Ô Ü ×,Ñ,¨V×-BÑ-BÓCˆŒÜ!#§¡¨6×+@Ñ+@×+LÑ+LÈf×NhÑNhÓ!iˆÔÜ*¨6Ó2ˆŒÜ-¨fÓ5ˆŒ
Ø$*×$?Ñ$?ˆÔ!à�‰Õr4   Nrà   r+   r—   rE   c                 óp   —  | j                   d||dœ|¤Ž}| j                  |j                  «      |_        |S )NrQ  r3   )r'  rœ  r5  Úpooler_output)rC   rà   r+   r—   ra  s        r5   Úget_audio_featuresz"ParakeetForRNNT.get_audio_features  sJ   € ð '˜$Ÿ,™,ð 
Ø)Ø)ñ
ð ñ
ˆð
 )-×(>Ñ(>¸×?`Ñ?`Ó(aˆÔ%ØÐr4   Údecoder_input_idsr˜  Úuse_decoder_cachera  rO  c           
      óª  — |€ | j                   d	||dœ|¤Ž}|r|€t        | j                  «      }| j                  ||¬«      }	| j	                  |j
                  dd…dd…ddd…f   |	dd…ddd…dd…f   ¬«      j                  d«      }
d}|��|j                  j                  d«      } | j                  d	|
dd…dt        |j                  «       «      …f   |||| j                  j                  k7  j                  d«      | j                  j                  dœ|¤Ž}t        ||
|j                  |j
                  |j                  |j                   |¬«      S )
a?  
        decoder_input_ids (`torch.LongTensor` of shape `(batch_size, 1)`, *optional*):
            Decoder input token ids for single-step inference.
        decoder_cache (`ParakeetRNNTDecoderCache`, *optional*):
            Decoder LSTM cache. When provided and initialized, the cached `decoder_output` is reused
            (e.g. during blank-skipping) instead of running the decoder. When `input_ids` is provided,
            the decoder runs and the cache is updated in-place.
        use_decoder_cache (`bool`, *optional*):
            Whether to use a decoder cache. When `True` and `decoder_cache` is `None`, a new cache
            is created automatically during the forward pass.
        encoder_outputs (`tuple(torch.FloatTensor)`, *optional*):
            Pre-computed encoder outputs (last_hidden_state, pooler_output, hidden_states, attentions, attention_mask).
            Can be a tuple or `ParakeetEncoderModelOutput`.

        Example:

        ```python
        >>> from transformers import AutoProcessor, ParakeetForRNNT
        >>> from datasets import load_dataset, Audio

        >>> model_id = "nvidia/parakeet-rnnt-0.6b"
        >>> processor = AutoProcessor.from_pretrained(model_id)
        >>> model = ParakeetForRNNT.from_pretrained(model_id)

        >>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
        >>> ds = ds.cast_column("audio", Audio(sampling_rate=processor.feature_extractor.sampling_rate))

        >>> inputs = processor(ds[0]["audio"]["array"])
        >>> outputs = model(**inputs)
        ```
        NrQ  ©r  ©r“  r’  r   rR   )r?  rO  Úlogit_lengthsÚlabel_lengthsrv  ©rU  r?  r5  r¡  rP   r   r˜  r3   )r¢  r%   r9   r�  rž  r¡  Úsqueezer+   rã   Úloss_functionr¾   r  rv  r—  r5  rP   r   )rC   rà   r+   r£  r˜  r¤  ra  rO  r—   r’  r?  rU  r¨  s                r5   rj   zParakeetForRNNT.forward*  sv  € ðX Ð"Ø5˜d×5Ñ5ð Ø-Ø-ñð ñˆOñ  Ð!6Ü4°T·[±[ÓAˆMà $§¡Ð->Àm Ó TÐØ—‘Ø"1×"?Ñ"?ÂÂ1ÀdÊAÀÑ"NØ"7º¸4ÂÂA¸Ñ"Fð ó 
÷ ‰'�!‹*ð 	ð
 ˆØÐØ+×:Ñ:×>Ñ>¸rÓBˆMØ%�4×%Ñ%ð ØšaÐ!;¤3 }×'8Ñ'8Ó':Ó#;Ð!;Ð;Ñ<ØØ+Ø%¨¯©×)CÑ)CÑC×HÑHÈÓLØ#Ÿ{™{×9Ñ9ñð ñˆDô "ØØØ-×?Ñ?Ø)×7Ñ7Ø)×7Ñ7Ø&×1Ñ1Ø'ô
ð 	
r4   rk   ©NNNNNNN)r,   r-   r.   r#   r2   r  r   ÚGREEDY_SEARCHÚ_supported_generation_modesr?   r   r0   r1   r   r   r*   r¢  r   r@  r%   r;  r¿   rA  r—  rj   ro   rp   s   @r5   rš  rš    sc  ø… ð ÓØ.Ð/ÐØ#1×#?Ñ#?Ð"@ÐðÐ1õ ð ð /3ñàŸ™ðð Ÿ™ tÑ+ðð Ð+Ñ,ð	ð
 
$òó ðð Øð /3Ø.2Ø59Ø9=Ø)-ØX\Ø&*ñN
àŸ™ tÑ+ðN
ð Ÿ™ tÑ+ðN
ð !×+Ñ+¨dÑ2ð	N
ð
 0°$Ñ6ðN
ð   $™;ðN
ð 4°e¸E×<MÑ<MÑ6NÑNÐQUÑUðN
ð —‘˜tÑ#ðN
ð Ð+Ñ,ðN
ð 
òN
ó ó ôN
r4   rš  c                   ó(   ‡ — e Zd ZdZdefˆ fd„Zˆ xZS )ÚParakeetTDTJointNetworka
  Extends the RNN-T joint network with a duration head.

    The only difference from [`ParakeetRNNTJointNetwork`] is the output width of `head`: it grows from
    `vocab_size` to `vocab_size + len(durations)` so the network jointly predicts tokens and durations.
    r9   c                 ó®   •— t         ‰| �  |«       t        j                  |j                  |j
                  t        |j                  «      z   «      | _        y rk   )	r>   r?   r   rv   rx  rM  ÚlenÚ	durationsr‘  r~   s     €r5   r?   z ParakeetTDTJointNetwork.__init__„  s?   ø€ Ü‰Ñ˜Ô Ü—I‘I˜f×8Ñ8¸&×:KÑ:KÌcÐRX×RbÑRbÓNcÑ:cÓdˆ�	r4   )r,   r-   r.   r/   r$   r?   ro   rp   s   @r5   r±  r±  }  s   ø„ ñðeÐ0÷ eñ er4   r±  zG
    Parakeet Encoder with a TDT (Token Duration Transducer) head.
    c                   ó   ‡ — e Zd ZU eed<   defˆ fd„Zee	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dedz  dedz  d	eeej                     z  dz  d
ej                  dz  dee   defd„«       «       Zˆ xZS )ÚParakeetForTDTr9   c                 ód   •— t         ‰| �  |«       t        |«      | _        | j	                  «        y rk   )r>   r?   r±  rž  r1  r~   s     €r5   r?   zParakeetForTDT.__init__‘  s&   ø€ Ü‰Ñ˜Ô Ü,¨VÓ4ˆŒ
à�‰Õr4   Nrà   r+   r£  r˜  r¤  ra  rO  r—   rE   c                 óþ  — |€ | j                   d
||dœ|¤Ž}|r|€t        | j                  «      }| j                  ||¬«      }	| j	                  |j
                  dd…dd…ddd…f   |	dd…ddd…dd…f   ¬«      j                  d«      }
d}|�· | j                  d
|
dd| j                  j                  …f   |
d| j                  j                  d…f   ||j                  j                  d«      || j                  j                  k7  j                  d«      | j                  j                  | j                  j                  dœ|¤Ž}t        ||
|j                  |j
                  |j                   |j"                  |¬	«      S )a?  
        decoder_input_ids (`torch.LongTensor` of shape `(batch_size, 1)`, *optional*):
            Decoder input token ids for single-step inference.
        decoder_cache (`ParakeetRNNTDecoderCache`, *optional*):
            Decoder LSTM cache. When provided and initialized, the cached `decoder_output` is reused
            (e.g. during blank-skipping) instead of running the decoder. When `input_ids` is provided,
            the decoder runs and the cache is updated in-place.
        use_decoder_cache (`bool`, *optional*):
            Whether to use a decoder cache. When `True` and `decoder_cache` is `None`, a new cache
            is created automatically during the forward pass.
        encoder_outputs (`tuple(torch.FloatTensor)`, *optional*):
            Pre-computed encoder outputs (last_hidden_state, pooler_output, hidden_states, attentions, attention_mask).
            Can be a tuple or `ParakeetEncoderModelOutput`.

        Example:

        ```python
        >>> from transformers import AutoProcessor, ParakeetForTDT
        >>> from datasets import load_dataset, Audio

        >>> model_id = "nvidia/parakeet-tdt-0.6b-v3"
        >>> processor = AutoProcessor.from_pretrained(model_id)
        >>> model = ParakeetForTDT.from_pretrained(model_id)

        >>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
        >>> ds = ds.cast_column("audio", Audio(sampling_rate=processor.feature_extractor.sampling_rate))

        >>> inputs = processor(ds[0]["audio"]["array"])
        >>> outputs = model(**inputs)
        ```
        NrQ  r¦  r§  r   .rR   )Útoken_logitsÚduration_logitsrO  r¨  r©  rv  r´  rª  r3   )r¢  r%   r9   r�  rž  r¡  r«  r¬  rM  r+   rã   rW  rv  r´  r—  r5  rP   r   )rC   rà   r+   r£  r˜  r¤  ra  rO  r—   r’  r?  rU  s               r5   rj   zParakeetForTDT.forward—  s”  € ðX Ð"Ø5˜d×5Ñ5ð Ø-Ø-ñð ñˆOñ  Ð!6Ü4°T·[±[ÓAˆMà $§¡Ð->Àm Ó TÐØ—‘Ø"1×"?Ñ"?ÂÂ1ÀdÊAÀÑ"NØ"7º¸4ÂÂA¸Ñ"Fð ó 
÷ ‰'�!‹*ð 	ð
 ˆØÐØ%�4×%Ñ%ð 	Ø# CÐ)A¨4¯;©;×+AÑ+AÐ)AÐ$AÑBØ & s¨D¯K©K×,BÑ,BÑ,DÐ'DÑ EØØ-×<Ñ<×@Ñ@ÀÓDØ%¨¯©×)AÑ)AÑA×FÑFÀrÓJØ#Ÿ{™{×9Ñ9ØŸ+™+×/Ñ/ñ	ð ñ	ˆDô "ØØØ-×?Ñ?Ø)×7Ñ7Ø)×7Ñ7Ø&×1Ñ1Ø'ô
ð 	
r4   r­  )r,   r-   r.   r$   r2   r?   r   r   r0   r1   r@  r%   r;  r*   r¿   rA  r   r   r—  rj   ro   rp   s   @r5   r¶  r¶  ‰  sù   ø… ð ÓðÐ0õ ð Øð /3Ø.2Ø59Ø9=Ø)-ØX\Ø&*ñO
àŸ™ tÑ+ðO
ð Ÿ™ tÑ+ðO
ð !×+Ñ+¨dÑ2ð	O
ð
 0°$Ñ6ðO
ð   $™;ðO
ð 4°e¸E×<MÑ<MÑ6NÑNÐQUÑUðO
ð —‘˜tÑ#ðO
ð Ð+Ñ,ðO
ð 
òO
ó ó ôO
r4   r¶  )rI  rš  r¶  r&  rý   )Nr/   rÌ   Úcollections.abcr   Údataclassesr   r0   r   Ú r   r  Úactivationsr   Ú
generationr	   r
   r   Úmodeling_layersr   Úmodeling_outputsr   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   r   Úutils.genericr   r   Úutils.output_capturingr   Úautor   Ú4fastspeech2_conformer.modeling_fastspeech2_conformerr   Úllama.modeling_llamar   r   Úconfiguration_parakeetr!   r"   r#   r$   Úgeneration_parakeetr%   r&   r'   Ú
get_loggerr,   rE  r*   ÚModuler7   rr   r†   rŠ   rÁ   ré   rý   r&  r=  rC  rI  rr  r�  r—  rš  r±  r¶  Ú__all__r3   r4   r5   ú<module>rÏ     s[  ðñ ã Ý $Ý !ã Ý å &Ý !ß HÑ HÝ 9ß [Ñ [ß FÝ &÷õ ÷ HÝ 5Ý Ý hß Jß sÓ s÷ñ ð 
ˆ×	Ñ	˜HÓ	%€ñ ðôð ô
/Ð!;ó 
/ó óð
/ô/7¨2¯9©9ô /7ôd §¡ô ô0Ð'Lô 0ô
L ˜~ô L ô^B r§y¡yô BôJ,Ð5ô ,ð^ ô;˜oó ;ó ð;ñ| ðôô
]
Ð-ó ]
óð
]
ð@ ôA ó Aó ðAð4 ô	
Ð6ó 	
ó ð	
ñ ðôô
KÐ,¨oó Kóð
Kô\-˜"Ÿ)™)ô -ô`'˜rŸy™yô 'ð$ ô:Ð3ó :ó ð:ñ& ðôô
n
Ð-Ð/Jó n
óð
n
ôb	eÐ6ô 	eñ ðôô
Z
Ð/°ó Z
óð
Z
òz p�r4   