Ë
    ÜÓ^j²À  ã                   ó&  — 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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,m-Z-m.Z.m/Z/ ddl0m1Z1m2Z2m3Z3  e#jh                  e5«      Z6 e!d¬«      e G d„ de«      «       «       Z7 G d„ dejp                  «      Z9 G d„ dejp                  «      Z: G d„ dejp                  «      Z;d „ Z< ed!«      dQd"„«       Z=d#ej|                  d$e?d%ej|                  fd&„Z@	 dRd'ejp                  d(ej|                  d)ej|                  d*ej|                  d+ej|                  dz  d,eAd-eAd.ee    fd/„ZB ee=«       G d0„ d1ejp                  «      «       ZC G d2„ d3ejp                  «      ZD G d4„ d5e«      ZEe! G d6„ d7e«      «       ZF e!d8¬«       G d9„ d:eF«      «       ZGe G d;„ d<e«      «       ZHe G d=„ d>eH«      «       ZI e!d?¬«       G d@„ dAeFe«      «       ZJ G dB„ dCejp                  «      ZK G dD„ dEejp                  «      ZLe G dF„ dGe«      «       ZM e!dH¬«       G dI„ dJeFe2«      «       ZN G dK„ dLeL«      ZO e!dM¬«       G dN„ dOe3eN«      «       ZPg dP¢ZQy)Sé    N)ÚCallable)Ú	dataclass)Únné   )Úinitialization)ÚACT2FN)ÚCompileConfigÚGenerationMixinÚGenerationMode)Úuse_kernel_func_from_hubÚuse_kernelized_func)Ú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é   )Ú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__© ó    úy/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/parakeet/modeling_parakeet.pyr)   r)   /   s   … ñð +/€N�E—L‘L 4Ñ'Ô.r3   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©Údevicer7   F)Ú
persistent)ÚsuperÚ__init__Úmax_position_embeddingsr8   Ú.compute_default_relative_positional_parametersÚregister_buffer)Úselfr8   r;   r7   Ú	__class__s       €r4   r>   z-ParakeetEncoderRelPositionalEncoding.__init__F   sN   ø€ Ü‰ÑÔØ'-×'EÑ'EˆÔ$ØˆŒØ×FÑFÀvÐV\ÐFÓ]ˆØ×Ñ˜Z¨¸eÐÕDr3   Úreturnc                 óÐ   — d}d|t        j                  d| j                  dt         j                  ¬«      j	                  |t         j
                  ¬«      | j                  z  z  z  }|S )Ng     ˆÃ@ç      ð?r   r   ©Údtype)r;   rH   )r/   ÚarangeÚhidden_sizeÚint64ÚtoÚfloat)r8   r;   Úbaser7   s       r4   r@   zSParakeetEncoderRelPositionalEncoding.compute_default_relative_positional_parametersM   sd   € ð
 ˆØØä—‘˜Q × 2Ñ 2°A¼U¿[¹[ÔI×LÑLÐTZÔbg×bmÑbmÐLÓnØ×$Ñ$ñ%ññ
ˆð ˆr3   Ú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éþÿÿÿrG   )Úshaper/   rI   r;   r7   rM   ÚexpandrL   Ú
isinstanceÚtypeÚstrr   Ú	transposeÚsinÚcosÚstackÚreshaperH   )rB   rO   Ú
seq_lengthÚposition_idsÚinv_freq_expandedÚposition_ids_expandedrT   Úfreqsr_   r`   Ú	pos_embeds              r4   Úforwardz,ParakeetEncoderRelPositionalEncoding.forward\   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-   r/   r0   r1   r!   r>   Ústaticmethodr@   Úno_gradri   Ú__classcell__©rC   s   @r4   r6   r6   C   sx   ø… Ø�l‰lÓñEÐ4õ Eð à/3ØñØ%¨Ñ,ðð 
�‰òó ðð €U‡]�]ƒ_ð7 U§\¡\ò 7ó ô7r3   r6   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚParakeetEncoderFeedForwardr8   c                 ó`  •— t         ‰| �  «        t        j                  |j                  |j
                  |j                  ¬«      | _        t        |j                     | _
        t        j                  |j
                  |j                  |j                  ¬«      | _        |j                  | _        y )N©Úbias)r=   r>   r   ÚLinearrJ   Úintermediate_sizeÚattention_biasÚlinear1r   Ú
hidden_actÚ
activationÚlinear2Úactivation_dropout©rB   r8   rC   s     €r4   r>   z#ParakeetEncoderFeedForward.__init__v   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ˆŒØ"(×";Ñ";ˆÕr3   c                 óÔ   — | j                  | j                  |«      «      }t        j                  j	                  || j
                  | j                  ¬«      }| j                  |«      }|S )N©ÚpÚtraining)rz   rx   r   Ú
functionalÚdropoutr|   r�   r{   )rB   rO   s     r4   ri   z"ParakeetEncoderFeedForward.forward}   sU   € ØŸ™¨¯©°]Ó(CÓDˆÜŸ™×-Ñ-¨m¸t×?VÑ?VÐae×anÑanÐ-ÓoˆØŸ™ ]Ó3ˆØÐr3   ©r+   r,   r-   r!   r>   ri   rn   ro   s   @r4   rq   rq   u   s   ø„ ð<Ð4õ <ör3   rq   c                   ó.   ‡ — e Zd Zddefˆ fd„Zdd„Zˆ xZS )Ú ParakeetEncoderConvolutionModuler8   c           	      ó6  •— t         ‰| �  «        |j                  }|€&|j                  }t        t        |dd«         | _        n#|d   }t        |j                  dd«         | _        |dz
  dz  | _        t        j                  |d|z  ddd|j                  ¬	«      | _        t        j                  |||d| j                  ||j                  ¬
«      | _        t        j                  |«      | _        t        j                  ||ddd|j                  ¬	«      | _        y)z»
        Args:
            config (ParakeetEncoderConfig): Configuration for the model.
            module_config (dict): Configuration for the module (e.g., encoder or decoder).
        Nry   ÚsiluÚkernel_sizerz   r   r   r   )r‰   ÚstrideÚpaddingrt   )rŠ   r‹   Úgroupsrt   )r=   r>   rJ   Úconv_kernel_sizer   Úgetattrrz   Úgetr‹   r   ÚConv1dÚconvolution_biasÚpointwise_conv1Údepthwise_convÚBatchNorm1dÚnormÚpointwise_conv2)rB   r8   Úmodule_configÚchannelsr‰   rC   s        €r4   r>   z)ParakeetEncoderConvolutionModule.__init__…   s  ø€ ô 	‰ÑÔØ×%Ñ%ˆàÐ à ×1Ñ1ˆKÜ$¤W¨V°\À6Ó%JÑKˆD�Oà'¨Ñ6ˆKÜ$ ]×%6Ñ%6°|ÀVÓ%LÑMˆDŒOØ# a™¨AÑ-ˆŒÜ!Ÿy™yØ�a˜(‘l°¸!ÀQÈV×MdÑMdô 
ˆÔô !Ÿi™iØØØØØ—L‘LØØ×(Ñ(ô
ˆÔô —N‘N 8Ó,ˆŒ	Ü!Ÿy™yØ�h¨A°aÀÈ×I`ÑI`ô 
ˆÕr3   c                 ó   — |j                  dd«      }| j                  |«      }t        j                  j	                  |d¬«      }|�c|j
                  t        j                  k(  rt        j                  | d¬«      }nt        j                  |dk(   d¬«      }|j                  |d«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }|j                  dd«      S )aY  
        Compute convolution module.

        Args:
            hidden_states (`torch.Tensor` of shape `(batch, time, channels)`): Input tensor.
            attention_mask (`torch.Tensor` of shape `(batch, 1, time, time)`): Attention mask.

        Returns:
            `torch.Tensor`: Output tensor of shape `(batch, time, channels)`.

        r   r   rV   ç        )r^   r’   r   r‚   ÚglurH   r/   ÚboolÚallÚmasked_fillr“   r•   rz   r–   )rB   rO   r*   Úall_masked_rowss       r4   ri   z(ParakeetEncoderConvolutionModule.forward§   sè   € ð &×/Ñ/°°1Ó5ˆð ×,Ñ,¨]Ó;ˆäŸ™×)Ñ)¨-¸QÐ)Ó?ˆð Ð%Ø×#Ñ#¤u§z¡zÒ1Ü"'§)¡)¨^¨OÀÔ"C‘ä"'§)¡)¨nÀÑ.CÐ,DÈ!Ô"L�Ø)×5Ñ5°oÀsÓKˆMð ×+Ñ+¨MÓ:ˆØŸ	™	 -Ó0ˆØŸ™¨Ó6ˆØ×,Ñ,¨]Ó;ˆà×&Ñ& q¨!Ó,Ð,r3   rj   r„   ro   s   @r4   r†   r†   „   s   ø„ ñ 
Ð4õ  
÷D"-r3   r†   c                 óš   — | dd| j                   d   dz  …f   }| d| j                   d   dz  d…f   }t        j                  | |fd¬«      S )z*Rotates half the hidden dims of the input..NrQ   r   rV   )rY   r/   Úcat)ÚxÚx1Úx2s      r4   Úrotate_halfr¥   Ì   sZ   € à	
ˆ3Ð"�!—'‘'˜"‘+ Ñ"Ð"Ð"Ñ	#€BØ	
ˆ3�—‘˜‘˜qÑ Ñ"Ð"Ñ	#€BÜ�9‰9�r�c˜2�Y BÔ'Ð'r3   Úrotary_pos_embc                 óž   — |j                  |«      }|j                  |«      }| |z  t        | «      |z  z   }||z  t        |«      |z  z   }||fS )a…  Applies Rotary Position Embedding to the query and key tensors.

    Args:
        q (`torch.Tensor`): The query tensor.
        k (`torch.Tensor`): The key tensor.
        cos (`torch.Tensor`): The cosine part of the rotary embedding.
        sin (`torch.Tensor`): The sine part of the rotary embedding.
        unsqueeze_dim (`int`, *optional*, defaults to 1):
            The 'unsqueeze_dim' argument specifies the dimension along which to unsqueeze cos[position_ids] and
            sin[position_ids] so that they can be properly broadcasted to the dimensions of q and k. For example, note
            that cos[position_ids] and sin[position_ids] have the shape [batch_size, seq_len, head_dim]. Then, if q and
            k have the shape [batch_size, heads, seq_len, head_dim], then setting unsqueeze_dim=1 makes
            cos[position_ids] and sin[position_ids] broadcastable to the shapes of q and k. Similarly, if q and k have
            the shape [batch_size, seq_len, heads, head_dim], then set unsqueeze_dim=2.
    Returns:
        `tuple(torch.Tensor)` comprising of the query and key tensors rotated using the Rotary Position Embedding.
    )Ú	unsqueezer¥   )ÚqÚkr`   r_   Úunsqueeze_dimÚq_embedÚk_embeds          r4   Úapply_rotary_pos_embr®   Ó   sY   € ð& �-‰-˜Ó
&€CØ
�-‰-˜Ó
&€CØ�3‰wœ; q›>¨CÑ/Ñ0€GØ�3‰wœ; q›>¨CÑ/Ñ0€GØ�GÐÐr3   rO   Ún_reprD   c                 óª   — | j                   \  }}}}|dk(  r| S | dd…dd…ddd…dd…f   j                  |||||«      } | j                  |||z  ||«      S )zÔ
    This is the equivalent of torch.repeat_interleave(x, dim=1, repeats=n_rep). The hidden states go from (batch,
    num_key_value_heads, seqlen, head_dim) to (batch, num_attention_heads, seqlen, head_dim)
    r   N)rY   rZ   rb   )rO   r¯   ÚbatchÚnum_key_value_headsÚslenÚhead_dims         r4   Ú	repeat_kvrµ   í   so   € ð
 2?×1DÑ1DÑ.€EÐ  hØ�‚zØÐØ!¢!¢Q¨ªa²Ð"2Ñ3×:Ñ:¸5ÐBUÐW\Ð^bÐdlÓm€MØ× Ñ  Ð(;¸eÑ(CÀTÈ8ÓTÐTr3   ÚmoduleÚqueryÚkeyÚvaluer*   Úscalingrƒ   Úkwargsc                 ó  — t        || j                  «      }t        || j                  «      }	t        j                  ||j	                  dd«      «      |z  }
|�|
|z   }
t
        j                  j                  |
dt        j                  ¬«      j                  |j                  «      }
t
        j                  j                  |
|| j                  ¬«      }
t        j                  |
|	«      }|j	                  dd«      j                  «       }||
fS )Nr   r   rQ   ©rW   rH   r   r   )rµ   Únum_key_value_groupsr/   Úmatmulr^   r   r‚   ÚsoftmaxÚfloat32rL   rH   rƒ   r�   Ú
contiguous)r¶   r·   r¸   r¹   r*   rº   rƒ   r»   Ú
key_statesÚvalue_statesÚattn_weightsÚattn_outputs               r4   Úeager_attention_forwardrÇ   ù   sà   € ô ˜3 × ;Ñ ;Ó<€JÜ˜U F×$?Ñ$?Ó@€Lä—<‘<  z×';Ñ';¸A¸qÓ'AÓBÀWÑL€LØÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2ÄUÇ]Á]Ð(ÓS×VÑVÐW\×WbÑWbÓc€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€LÜ—,‘,˜|¨\Ó:€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€Kà˜Ð$Ð$r3   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.r8   Ú	layer_idxc                 óè  •— t         ‰| �  «        || _        || _        t	        |d|j
                  |j                  z  «      | _        |j                  |j                  z  | _	        | j                  dz  | _
        |j                  | _        d| _        t        j                  |j
                  |j                  | j                  z  |j                  ¬«      | _        t        j                  |j
                  |j                  | j                  z  |j                  ¬«      | _        t        j                  |j
                  |j                  | j                  z  |j                  ¬«      | _        t        j                  |j                  | j                  z  |j
                  |j                  ¬«      | _        t        j                  |j
                  |j                  | j                  z  d¬«      | _        t        j*                  t-        j.                  |j                  | j                  «      «      | _        t        j*                  t-        j.                  |j                  | j                  «      «      | _        y )Nr´   g      à¿Frs   )r=   r>   r8   rÊ   rŽ   rJ   Únum_attention_headsr´   r²   r¾   rº   Úattention_dropoutÚ	is_causalr   ru   rw   Úq_projÚk_projÚv_projÚo_projÚrelative_k_projÚ	Parameterr/   ÚzerosÚbias_uÚbias_v©rB   r8   rÊ   rC   s      €r4   r>   z!ParakeetEncoderAttention.__init__  sÇ  ø€ Ü‰ÑÔØˆŒØ"ˆŒÜ ¨
°F×4FÑ4FÈ&×JdÑJdÑ4dÓeˆŒØ$*×$>Ñ$>À&×B\ÑB\Ñ$\ˆÔ!Ø—}‘} dÑ*ˆŒØ!'×!9Ñ!9ˆÔØˆŒä—i‘iØ×Ñ × :Ñ :¸T¿]¹]Ñ JÐQW×QfÑQfô
ˆŒô —i‘iØ×Ñ × :Ñ :¸T¿]¹]Ñ JÐQW×QfÑQfô
ˆŒô —i‘iØ×Ñ × :Ñ :¸T¿]¹]Ñ JÐQW×QfÑQfô
ˆŒô —i‘iØ×&Ñ&¨¯©Ñ6¸×8JÑ8JÐQW×QfÑQfô
ˆŒô  "Ÿ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ˆ�r3   NrO   Úposition_embeddingsr*   r»   rD   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 )
NrQ   r   r   r   r   .z-infrš   )r·   r¸   r¹   r*   rƒ   rº   )rY   r´   rÏ   Úviewr^   rÐ   rÑ   r   Úget_interfacer8   Ú_attn_implementationrÇ   rÖ   rÌ   r×   rÓ   ÚpermuteÚ
_rel_shiftrº   Úmasked_fill_Úlogical_notrM   r�   rÍ   rb   rÂ   rÒ   )rB   rO   rÙ   r*   r»   Úinput_shapeÚ
batch_sizerc   Úhidden_shapeÚquery_statesrÃ   rÄ   Úattention_interfaceÚquery_states_with_bias_uÚquery_states_with_bias_vÚrelative_key_statesÚ	matrix_bdrÆ   rÅ   s                      r4   ri   z ParakeetEncoderAttention.forward3  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Ð(Ð(r3   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   )ÚpadrQ   Nr   )rY   r   r‚   rì   rÛ   )rB   Úattention_scoresrã   Ú	num_headsÚquery_lengthÚposition_lengths         r4   rß   z#ParakeetEncoderAttention._rel_shiftl  st   € à?O×?UÑ?UÑ<ˆ
�I˜|¨_ÜŸ=™=×,Ñ,Ð-=À6Ð,ÓJÐØ+×0Ñ0°¸YÈÈLÓYÐØ+ªAªq°!±"¨HÑ5×:Ñ:¸:ÀyÐR^Ð`oÓpÐØÐr3   rj   )r+   r,   r-   r.   r!   Úintr>   r/   r0   r   r   Útupleri   rß   rn   ro   s   @r4   rÉ   rÉ     sŒ   ø„ á~ð[Ð4ð [Àõ [ðB /3ñ	7)à—|‘|ð7)ð #Ÿ\™\¨DÑ0ð7)ð Ÿ™ tÑ+ð	7)ð
 Ð+Ñ,ð7)ð 
ˆu�|‰|˜UŸ\™\Ð)Ñ	*ó7)ör r3   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 )
Ú ParakeetEncoderSubsamplingConv2Dr8   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   )r‰   rŠ   r‹   )r‰   rŠ   r‹   rŒ   ©r‰   Trs   )r=   r>   Úsubsampling_conv_kernel_sizer‰   Úsubsampling_conv_striderŠ   Úsubsampling_conv_channelsr˜   r‹   rñ   ÚmathÚlog2Úsubsampling_factorÚ
num_layersr   Ú
ModuleListÚlayersÚappendÚConv2dÚReLUÚrangeÚnum_mel_binsru   rJ   Úlinear)rB   r8   ÚiÚ
out_lengthrC   s       €r4   r>   z)ParakeetEncoderSubsamplingConv2D.__init__v  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ˆ�r3   Ú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‰   )rB   r  r	  r‹   r‰   rŠ   Úoutput_lengthss          r4   Ú_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Ø!Ð!àÐr3   Ú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   rQ   r   r:   r   )r¨   Úsumrÿ   r[   r   r  r  rY   r/   rI   r;   r^   rb   r  )rB   r  r*   rO   Úcurrent_lengthsÚlayerÚcurrent_seq_lengthÚchannel_masks           r4   ri   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ˆàÐr3   rj   )r+   r,   r-   r!   r>   r/   r0   r   r  r  ri   rn   ro   s   @r4   rô   rô   u  sI   ø„ ð!nÐ4õ !nðF	°·±ð 	È"Ï)É)ó 	ñ e§l¡lð ÀEÇLÁL÷ r3   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 )ÚParakeetEncoderBlockNr8   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_checkpointingrq   Úfeed_forward1rÉ   Ú	self_attnr†   ÚconvÚfeed_forward2r   Ú	LayerNormrJ   Únorm_feed_forward1Únorm_self_attÚ	norm_convÚnorm_feed_forward2Únorm_outrØ   s      €r4   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ˆ�r3   rO   r*   rÙ   r»   rD   c                 óx  — |}| j                  | j                  |«      «      }|d|z  z   }| j                  |«      } | j                  d|||dœ|¤Ž\  }}||z   }| j	                  | j                  |«      |¬«      }	||	z   }| j                  | j                  |«      «      }
|d|
z  z   }| j                  |«      }|S )Ng      à?)rO   r*   rÙ   )r*   r2   )	r  r  r  r  r  r   r  r!  r"  )rB   rO   r*   rÙ   r»   ÚresidualÚnormalized_hidden_statesrÆ   Ú_Úconv_outputÚ
ff2_outputs              r4   ri   zParakeetEncoderBlock.forwardÊ  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ˆàÐr3   rj   rk   )r+   r,   r-   r!   rñ   r>   r/   r0   r   r   ri   rn   ro   s   @r4   r  r  º  sx   ø„ ñ9Ð4ð 9ÀÀtÁõ 9ð$ /3Ø37ñ	à—|‘|ðð Ÿ™ tÑ+ðð #Ÿ\™\¨DÑ0ð	ð
 Ð+Ñ,ðð 
�‰÷r3   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 )ÚParakeetPreTrainedModelr8   Úmodelr  ÚaudioTr  F)rO   Ú
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_weightsrŽ   r8   r[   rÉ   ÚinitÚnormal_rÖ   r×   r6   r@   Úcopy_r7   )rB   r¶   r1  Úbuffer_valuerC   s       €r4   r2  z%ParakeetPreTrainedModel._init_weightsÿ  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r3   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   rG   rF   )rŽ   r8   r÷   rø   rñ   rú   rû   rü   r  r/   ÚdivrL   rM   Úfloor)
rB   r  r8  r‰   rŠ   rý   Úall_paddingsÚadd_padÚlengthsr&  s
             r4   Ú_get_subsampling_output_lengthz6ParakeetPreTrainedModel._get_subsampling_output_length  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Ó*Ð*r3   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)
        rQ   Nr:   )r>  r  Úmaxr/   rI   r;   )rB   r*   r?  r  Ú
max_lengths        r4   Ú_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ˆØÐr3   rj   )r+   r,   r-   r    r1   Ú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_outputsr/   rm   r2  r0   r>  rñ   rC  rn   ro   s   @r4   r*  r*  é  s¦   ø… àÓØÐØ&€OØÐØ&*Ð#Ø/Ð0ÐØ$(Ð!Ø€NØÐð !Ðà!ÐØ"&Ðà-Ø.ñÐð
 €U‡]�]ƒ_ó	6ó ð	6ð+¸E¿L¹Ló +ñ"	¸¿¹ð 	ÐVYÐ\`ÑV`÷ 	r3   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 )ÚParakeetEncoderr8   Ú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 )NFrF   )r=   r>   r8   r  rƒ   Údropout_positionsÚ	layerdropÚscale_inputrú   ÚsqrtrJ   Úinput_scalerô   Úsubsamplingr6   Úencode_positionsr   rþ   r  Únum_hidden_layersr  rÿ   Ú	post_initrØ   s      €r4   r>   zParakeetEncoder.__init__1  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»   rD   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?  rQ   r   FT)r*   rÙ   )Úlast_hidden_stater*   )rY  rX  rZ  r   r‚   rƒ   r�   rT  rC  rY   r¨   rZ   r^   rÿ   r/   ÚrandrU  r)   rñ   )rB   r  r*   r]  r»   rO   rÙ   Úoutput_maskÚencoder_layerÚto_dropÚdropout_probabilitys              r4   ri   zParakeetEncoder.forwardD  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ô
ð 	
r3   )NT)r+   r,   r-   r!   r1   rD  r>   r   r   r   r   r/   r0   rœ   r   r   r   ri   rn   ro   s   @r4   rQ  rQ  (  sœ   ø… ð "Ó!Ø!ÐðÐ4õ ð& ØØØð /3Ø&*ñ	B
àŸ™ðB
ð Ÿ™ tÑ+ðB
ð  $ð	B
ð
 Ð+Ñ,ðB
ð 
òB
ó ó ó  ó ôB
r3   rQ  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-  rO   )r+   r,   r-   r.   r/   Ú
LongTensorr1   ri  rò   ÚFloatTensorr-  rO   r2   r3   r4   rg  rg  �  sm   … ñð& ×ÑÓØ.2€FˆE�%×#Ñ#Ñ$ tÑ+Ó2Ø9=€J��e˜E×-Ñ-Ñ.Ñ/°$Ñ6Ó=Ø<@€M�5˜˜u×0Ñ0Ñ1Ñ2°TÑ9Ô@r3   rg  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)rB   Úargsr»   rC   s      €r4   r>   zParakeetGenerateOutput.__init__®  s)   ø€ Ü‰Ñ˜$Ð) &Ò)Ü×Ñð Oõ	
r3   )r+   r,   r-   r.   r>   rn   ro   s   @r4   rm  rm  ¨  s   ø„ ñ÷
ð 
r3   rm  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 )ÚParakeetForCTCr8   c                 ó  •— t         ‰| �  |«       t        j                  |j                  «      | _        t        j                  |j                  j                  |j                  d¬«      | _
        | j                  «        y )Nr   rö   )r=   r>   r   Úfrom_configr8  rR  r   r�   rJ   Ú
vocab_sizeÚctc_headr\  r}   s     €r4   r>   zParakeetForCTC.__init__½  sY   ø€ Ü‰Ñ˜Ô Ü ×,Ñ,¨V×-BÑ-BÓCˆŒäŸ	™	 &×"7Ñ"7×"CÑ"CÀV×EVÑEVÐdeÔfˆŒà�‰Õr3   Nr  r*   Úlabelsr»   rD   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)
        ```Nr]  T©r  r*   r   r   rQ   r½   r   F)rU   )ÚblankÚ	reductionÚzero_infinity)Úlossri  rO   r-  r2   )Ú
setdefaultrR  r`  rw  r^   r*   r  r8   Úpad_token_idÚmasked_selectr   r‚   Úlog_softmaxr/   rÁ   ÚbackendsÚcudnnÚflagsÚctc_lossÚctc_loss_reductionÚctc_zero_infinityr   rO   r-  )rB   r  r*   rx  r»   Úencoder_outputsrO   ri  r~  Úencoder_lengthsÚlabels_maskÚtarget_lengthsÚflattened_targetsÚ	log_probss                 r4   ri   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_dictrz  rQ   rV   r   r_  )rh  ri  r-  rO   r2   )Úget_compiled_callÚ__call__ri  ÚargmaxrC  rY   r8   r€  rg  r-  rO   )	rB   r  r*   r�  r�  r»   Úmodel_forwardÚoutputsrh  s	            r4   ÚgeneratezParakeetForCTC.generate  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ô	ð ð Ðr3   rk   )NFN)r+   r,   r-   r    r1   r>   r   r   r/   r0   r   r   r   ri   rm   rœ   r	   rg  rj  r˜  rn   ro   s   @r4   rs  rs  µ  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r3   rs  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-Tr8   c                 óx  •— t         ‰| �  «        |j                  | _        t        j                  |j
                  |j                  «      | _        t        j                  |j                  |j                  |j                  d¬«      | _
        t        j                  |j                  |j                  «      | _        y )NT)Ú
input_sizerJ   rý   Úbatch_first)r=   r>   Úblank_token_idr   Ú	Embeddingrv  Údecoder_hidden_sizeÚ	embeddingÚLSTMÚnum_decoder_layersÚlstmru   Údecoder_projectorr}   s     €r4   r>   zParakeetRNNTDecoder.__init__K  s‰   ø€ Ü‰ÑÔØ$×3Ñ3ˆÔÜŸ™ f×&7Ñ&7¸×9SÑ9SÓTˆŒÜ—G‘GØ×1Ñ1Ø×2Ñ2Ø×0Ñ0Øô	
ˆŒ	ô "$§¡¨6×+EÑ+EÀv×GaÑGaÓ!bˆÕr3   NÚ	input_idsÚcacherD   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 )NrQ   )Úmask)rž  Úis_initializedr�   r§  r¡  Úlazy_initializationÚhidden_stateÚ
cell_stater¤  r¥  Úupdate)rB   r¦  r§  Ú
blank_maskÚ
embeddingsÚwas_initializedÚhidden_cell_statesÚlstm_outputr¬  r­  Údecoder_outputr©  s               r4   ri   zParakeetRNNTDecoder.forwardW  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Ø—;‘;ÐàÐr3   rj   )r+   r,   r-   r.   r"   r>   r/   rj  r$   r0   ri   rn   ro   s   @r4   rš  rš  H  sJ   ø„ Ù1ð
cÐ1õ 
cð 26ñà×#Ñ#ðð (¨$Ñ.ðð 
�‰÷	r3   rš  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.r8   c                 óÒ   •— t         ‰| �  «        t        |j                     | _        t        j                  |j                  |j                  «      | _	        |j                  | _        y rj   )
r=   r>   r   ry   rz   r   ru   r   rv  Úheadr}   s     €r4   r>   z!ParakeetRNNTJointNetwork.__init__{  sK   ø€ Ü‰ÑÔÜ  ×!2Ñ!2Ñ3ˆŒÜ—I‘I˜f×8Ñ8¸&×:KÑ:KÓLˆŒ	Ø ×+Ñ+ˆ�r3   Údecoder_hidden_statesÚencoder_hidden_statesrD   c                 óL   — | j                  ||z   «      }| j                  |«      S rj   )rz   r¸  )rB   r¹  rº  Újoint_outputs       r4   ri   z ParakeetRNNTJointNetwork.forward�  s(   € ð
 —‘Ð'<Ð?TÑ'TÓUˆØ�y‰y˜Ó&Ð&r3   )r+   r,   r-   r.   r"   r>   r/   r0   rò   ri   rn   ro   s   @r4   r¶  r¶  x  sN   ø„ ÙZð,Ð1õ ,ð'à$Ÿ|™|ð'ð  %Ÿ|™|ð'ð 
ˆu�|‰|˜UŸ\™\Ð)Ñ	*÷	'r3   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.
    Nr~  ri  Údecoder_cache)r+   r,   r-   r.   r~  r/   rk  r1   ri  r¿  r$   r2   r3   r4   r¾  r¾  Š  sC   … ñð &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø'+€FˆE×Ñ Ñ$Ó+Ø59€MÐ+¨dÑ2Ô9r3   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 )ÚParakeetForRNNTr8   rš  c                 ó`  •— t         ‰| �  |«       t        j                  |j                  «      | _        t        j                  |j                  j                  |j                  «      | _
        t        |«      | _        t        |«      | _        |j                  | _        | j!                  «        y rj   )r=   r>   r   ru  r8  rR  r   ru   rJ   r   Úencoder_projectorrš  Údecoderr¶  ÚjointÚmax_symbols_per_stepr\  r}   s     €r4   r>   zParakeetForRNNT.__init__¨  s}   ø€ Ü‰Ñ˜Ô Ü ×,Ñ,¨V×-BÑ-BÓCˆŒÜ!#§¡¨6×+@Ñ+@×+LÑ+LÈf×NhÑNhÓ!iˆÔÜ*¨6Ó2ˆŒÜ-¨fÓ5ˆŒ
Ø$*×$?Ñ$?ˆÔ!à�‰Õr3   Nr  r*   r»   rD   c                 óp   —  | j                   d||dœ|¤Ž}| j                  |j                  «      |_        |S )Nrz  r2   )rR  rÃ  r`  Úpooler_output)rB   r  r*   r»   r‰  s        r4   Úget_audio_featuresz"ParakeetForRNNT.get_audio_features²  sJ   € ð '˜$Ÿ,™,ð 
Ø)Ø)ñ
ð ñ
ˆð
 )-×(>Ñ(>¸×?`Ñ?`Ó(aˆÔ%ØÐr3   Údecoder_input_idsr¿  Úuse_decoder_cacher‰  rx  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)
        ```
        Nrz  ©r§  ©rº  r¹  r   rQ   )ri  rx  Úlogit_lengthsÚlabel_lengthsrž  ©r~  ri  r`  rÈ  rO   r-  r¿  r2   )rÉ  r$   r8   rÄ  rÅ  rÈ  Úsqueezer*   r  Úloss_functionrñ   rA  rž  r¾  r`  rO   r-  )rB   r  r*   rÊ  r¿  rË  r‰  rx  r»   r¹  ri  r~  rÏ  s                r4   ri   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Ø'ô
ð 	
r3   rj   ©NNNNNNN)r+   r,   r-   r"   r1   rH  r   ÚGREEDY_SEARCHÚ_supported_generation_modesr>   r   r/   r0   r   r   r)   rÉ  r   rj  r$   rœ   rò   rk  r¾  ri   rn   ro   s   @r4   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
r3   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.
    r8   c                 ó®   •— t         ‰| �  |«       t        j                  |j                  |j
                  t        |j                  «      z   «      | _        y rj   )	r=   r>   r   ru   r   rv  ÚlenÚ	durationsr¸  r}   s     €r4   r>   z ParakeetTDTJointNetwork.__init__  s?   ø€ Ü‰Ñ˜Ô Ü—I‘I˜f×8Ñ8¸&×:KÑ:KÌcÐRX×RbÑRbÓNcÑ:cÓdˆ�	r3   )r+   r,   r-   r.   r#   r>   rn   ro   s   @r4   rØ  rØ    s   ø„ ñðeÐ0÷ eñ er3   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 )ÚParakeetForTDTr8   c                 ód   •— t         ‰| �  |«       t        |«      | _        | j	                  «        y rj   )r=   r>   rØ  rÅ  r\  r}   s     €r4   r>   zParakeetForTDT.__init__(  s&   ø€ Ü‰Ñ˜Ô Ü,¨VÓ4ˆŒ
à�‰Õr3   Nr  r*   rÊ  r¿  rË  r‰  rx  r»   rD   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)
        ```
        Nrz  rÍ  rÎ  r   .rQ   )Útoken_logitsÚduration_logitsrx  rÏ  rÐ  rž  rÛ  rÑ  r2   )rÉ  r$   r8   rÄ  rÅ  rÈ  rÒ  rÓ  rv  r*   r  r€  rž  rÛ  r¾  r`  rO   r-  )rB   r  r*   rÊ  r¿  rË  r‰  rx  r»   r¹  ri  r~  s               r4   ri   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Ø'ô
ð 	
r3   rÔ  )r+   r,   r-   r#   r1   r>   r   r   r/   r0   rj  r$   rœ   r)   rò   rk  r   r   r¾  ri   rn   ro   s   @r4   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
r3   rÝ  )rs  rÁ  rÝ  rQ  r*  )r   )rš   )Rrú   Úcollections.abcr   Údataclassesr   r/   r   Ú r   r3  Úactivationsr   Ú
generationr	   r
   r   Úintegrationsr   r   Úmodeling_layersr   Úmodeling_outputsr   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   r   Úutils.genericr   r   Úutils.output_capturingr   Úautor   Úconfiguration_parakeetr    r!   r"   r#   Úgeneration_parakeetr$   r%   r&   Ú
get_loggerr+   ro  r)   ÚModuler6   rq   r†   r¥   r®   r0   rñ   rµ   rM   rÇ   rÉ   rô   r  r*  rQ  rg  rm  rs  rš  r¶  r¾  rÁ  rØ  rÝ  Ú__all__r2   r3   r4   ú<module>rõ     s$  ðó* Ý $Ý !ã Ý å &Ý !ß HÑ Hß IÝ 9ß [Ñ [ß FÝ &ß _Õ _ß GÝ 5Ý ß sÓ sß rÑ rð 
ˆ×	Ñ	˜HÓ	%€ñ ðôð ô
/Ð!;ó 
/ó óð
/ô/7¨2¯9©9ô /7ôd §¡ô ôE- r§y¡yô E-òP(ñ Ð*Ó+òó ,ðð2	U˜UŸ\™\ð 	U°#ð 	U¸%¿,¹,ó 	Uð& ñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð ð%ð ð%ð Ð'Ñ(ó%ñ2 Ð)Ó*ô_ ˜rŸy™yó _ ó +ð_ ôD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�r3   