Ë
    ÜÓ^j ã                   óF  — d Z ddlZddlZddlZddlmZ ddlmZmZm	Z	 ddl
mZ ddlmZ ddlmZ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 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(m)Z) ddl*m+Z+m,Z,  e)jZ                  e.«      Z/dZ0dejb                  de2de2fd„Z3	 d}dejb                  de2dejb                  dz  fd„Z4	 	 d~de5e2e2f   de6de2dejn                  dz  de2dejp                  fd „Z9 G d!„ d"e«      Z: G d#„ d$e«      Z; G d%„ d&e«      Z< G d'„ d(ejz                  «      Z> G d)„ d*ejz                  «      Z? G d+„ d,ejz                  «      Z@ G d-„ d.ej
                  jz                  «      ZA G d/„ d0ejz                  «      ZB G d1„ d2ejz                  «      ZC G d3„ d4ejz                  «      ZD G d5„ d6ejz                  «      ZE G d7„ d8ejz                  «      ZF G d9„ d:ejz                  «      ZG G d;„ d<ejz                  «      ZH G d=„ d>ejz                  e%«      ZI G d?„ d@ejz                  e%«      ZJ G dA„ dBejz                  e%«      ZK G dC„ dDejz                  «      ZL G dE„ dFejz                  «      ZM G dG„ dHe«      ZN G dI„ dJe«      ZOe( G dK„ dLe&«      «       ZP G dM„ dNeP«      ZQ G dO„ dPeP«      ZR G dQ„ dReP«      ZS G dS„ dTeP«      ZT G dU„ dVeP«      ZU G dW„ dXeP«      ZV G dY„ dZeP«      ZW G d[„ d\eP«      ZX G d]„ d^ejz                  «      ZY G d_„ d`ejz                  «      ZZ e(da¬b«       G dc„ ddeP«      «       Z[ e(de¬b«       G df„ dgePe«      «       Z\	 	 	 	 	 	 	 	 ddhePdejº                  diejº                  dz  dejn                  dz  dje6dke6dle6dmejz                  dz  dne^doe^dejº                  e5ejº                  ejº                  f   z  fdp„Z_ e(dq¬b«       G dr„ dseP«      «       Z` e(dt¬b«       G du„ dveP«      «       Za G dw„ dxejz                  «      Zb e(dy¬b«       G dz„ d{e&«      «       Zcg d|¢Zdy)€zPyTorch SpeechT5 model.é    N)Únn)ÚBCEWithLogitsLossÚCrossEntropyLossÚL1Lossé   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCacheÚEncoderDecoderCache)ÚGenerationMixin)Úis_deepspeed_zero3_enabled)Úis_fsdp_managed_module)Úcreate_bidirectional_maskÚcreate_causal_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚ)BaseModelOutputWithPastAndCrossAttentionsÚSeq2SeqLMOutputÚSeq2SeqModelOutputÚSeq2SeqSpectrogramOutput)ÚEmbeddingAccessMixinÚPreTrainedModel)Úauto_docstringÚloggingé   )ÚSpeechT5ConfigÚSpeechT5HifiGanConfigÚ	input_idsÚpad_token_idÚdecoder_start_token_idc                 óÖ   — | j                  | j                  «      }| dd…dd…f   j                  «       |dd…dd…f<   ||dd…df<   |€t        d«      ‚|j	                  |dk(  |«       |S )z1
    Shift input ids one token to the right.
    Néÿÿÿÿr   r   z1self.model.config.pad_token_id has to be defined.iœÿÿÿ)Ú	new_zerosÚshapeÚcloneÚ
ValueErrorÚmasked_fill_)r   r    r!   Úshifted_input_idss       úy/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/speecht5/modeling_speecht5.pyÚshift_tokens_rightr+   4   s}   € ð "×+Ñ+¨I¯O©OÓ<ÐØ(ª¨C¨R¨C¨Ñ0×6Ñ6Ó8Ð’a˜™�eÑØ4Ð’a˜�dÑàÐÜÐLÓMÐMà×"Ñ"Ð#4¸Ñ#<¸lÔKàÐó    Úinput_valuesÚreduction_factorÚattention_maskc                 óø   — |dkD  r | dd…|dz
  d|…f   } |�|dd…|dz
  d|…f   }| j                  | j                  «      }| dd…dd…f   j                  «       |dd…dd…f<   |j                  |dk(  d«       ||fS )zw
    Shift input spectrograms one timestep to the right. Also applies the reduction factor to the sequence length.
    r   Nr#   ç      YÀç        )r$   r%   r&   r(   )r-   r.   r/   Úshifted_input_valuess       r*   Úshift_spectrograms_rightr4   D   s¯   € ð ˜!ÒØ#¢AÐ'7¸!Ñ';Ð'OÐ?OÐ'OÐ$OÑPˆØÐ%Ø+ªAÐ/?À!Ñ/CÐ/WÐGWÐ/WÐ,WÑXˆNà'×1Ñ1°,×2DÑ2DÓEÐØ".ªq°#°2°#¨vÑ"6×"<Ñ"<Ó">Ðš˜A™B˜Ñð ×%Ñ%Ð&:¸fÑ&DÀcÔJà Ð/Ð/r,   r%   Ú	mask_probÚmask_lengthÚ	min_masksÚreturnc                 óà  ‡‡‡‡‡— | \  }Š‰dk  rt        d«      ‚‰‰kD  rt        d‰› d‰› d�«      ‚t        j                  j                  d«      j	                  «       Šˆˆˆˆˆfd„}|�-|j                  «       j                  d«      j                  «       nt        |«      D �cg c]  }‰‘Œ c}}t        j                  |‰ft        ¬	«      }	g }
 |‰«      }|d
k(  r|	S |D ]¯  } ||«      }t        j                  j                  t        j                  |‰dz
  z
  «      |d¬«      }t        |«      d
k(  r‰dz
  }n|d
   }t        j                  |t        j                  ||z
  t        j                   ¬	«      |z  g«      }|
j#                  |«       Œ± t        j$                  |
«      }
t        j&                  |
dd…dd…df   ||‰f«      }
|
j)                  ||‰z  «      }
t        j                  ‰«      dddd…f   }t        j&                  |||‰f«      j)                  ||‰z  «      }|
|z   }
|
j+                  «       ‰dz
  kD  r‰dz
  |
|
‰dz
  kD  <   t        j,                  |	|
dd«       |	S c c}w )an  
    Computes random mask spans for a given shape. Used to implement [SpecAugment: A Simple Data Augmentation Method for
    ASR](https://huggingface.co/papers/1904.08779). Note that this method is not optimized to run on TPU and should be run on
    CPU as part of the preprocessing during training.

    Args:
        shape: The shape for which to compute masks. This should be of a tuple of size 2 where
               the first element is the batch size and the second element is the length of the axis to span.
        mask_prob:  The percentage of the whole axis (between 0 and 1) which will be masked. The number of
                    independently generated mask spans of length `mask_length` is computed by
                    `mask_prob*shape[1]/mask_length`. Note that due to overlaps, `mask_prob` is an upper bound and the
                    actual percentage will be smaller.
        mask_length: size of the mask
        min_masks: minimum number of masked spans
        attention_mask: A (right-padded) attention mask which independently shortens the feature axis of
                        each batch dimension.
    r   z&`mask_length` has to be bigger than 0.zO`mask_length` has to be smaller than `sequence_length`, but got `mask_length`: z and `sequence_length`: ú`c                 óœ   •— t        ‰| z  ‰z  ‰z   «      }t        |‰«      }|‰z  ‰kD  r‰‰z  }| ‰dz
  z
  |k  rt        | ‰dz
  z
  d«      }|S )z;Given input length, compute how many spans should be maskedr   r   )ÚintÚmax)Úinput_lengthÚnum_masked_spanÚepsilonr6   r5   r7   Úsequence_lengths     €€€€€r*   Úcompute_num_masked_spanz6_compute_mask_indices.<locals>.compute_num_masked_span€   so   ø€ ä˜i¨,Ñ6¸ÑDÀwÑNÓOˆÜ˜o¨yÓ9ˆð ˜[Ñ(¨?Ò:Ø-°Ñ<ˆOð ˜;¨™?Ñ+¨oÒ=Ü! ,°+À±/Ñ"BÀAÓFˆOàÐr,   Nr#   ©Údtyper   F)Úreplace)r'   ÚnpÚrandomÚrandÚitemÚdetachÚsumÚtolistÚrangeÚzerosÚboolÚchoiceÚarangeÚlenÚconcatenateÚonesÚint32ÚappendÚarrayÚbroadcast_toÚreshaper=   Úput_along_axis)r%   r5   r6   r/   r7   Ú
batch_sizerB   Ú_Úinput_lengthsÚspec_aug_maskÚspec_aug_mask_idxsÚmax_num_masked_spanr>   r?   Úspec_aug_mask_idxÚdummy_mask_idxÚoffsetsr@   rA   s    `` `            @@r*   Ú_compute_mask_indicesrd   Z   s­  ü€ ð0 #(Ñ€J�à�Q‚ÜÐAÓBÐBà�_Ò$ÜØ]Ð^iÐ]jØ& Ð&7°qð:ó
ð 	
ô �i‰i�n‰n˜QÓ×$Ñ$Ó&€G÷ð ð$ Ð%ð 	×ÑÓ×#Ñ# BÓ'×.Ñ.Ô0ä',¨ZÓ'8Ö9 !ŠoÒ9ð ô —H‘H˜j¨/Ð:Ä$ÔG€MØÐá1°/ÓBÐà˜aÒØÐà%ò 5ˆá1°,Ó?ˆô ŸI™I×,Ñ,Ü�I‰I�l k°A¡oÑ6Ó7¸ÐRWð -ó 
Ðô Ð Ó! QÒ&ð -¨qÑ0‰Nà.¨qÑ1ˆNäŸN™NØ¤§¡Ð(;¸oÑ(MÔUW×U]ÑU]Ô ^ÐaoÑ oÐpó
Ðð 	×!Ñ!Ð"3Õ4ð/5ô2 Ÿ™Ð"4Ó5Ðô Ÿ™Øš1ša ˜:Ñ&¨Ð5HÈ+Ð(VóÐð ,×3Ñ3°JÐ@SÐVaÑ@aÓbÐô �i‰i˜Ó$ T¨4² ]Ñ3€GÜ�o‰o˜g¨
Ð4GÈÐ'UÓV×^Ñ^ØÐ'¨+Ñ5ó€Gð ,¨gÑ5Ðð ×ÑÓ /°AÑ"5Ò5ØGVÐYZÑGZÐÐ-°À!Ñ0CÑCÑDô ×Ñ�mÐ%7¸¸BÔ?àÐùòw :s   Â$	I+c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚSpeechT5NoLayerNormConvLayerc                 ód  •— t         ‰| �  «        |dkD  r|j                  |dz
     nd| _        |j                  |   | _        t        j                  | j                  | j                  |j                  |   |j                  |   |j                  ¬«      | _
        t        |j                     | _        y )Nr   r   ©Úkernel_sizeÚstrideÚbias)ÚsuperÚ__init__Úconv_dimÚin_conv_dimÚout_conv_dimr   ÚConv1dÚconv_kernelÚconv_strideÚ	conv_biasÚconvr	   Úfeat_extract_activationÚ
activation©ÚselfÚconfigÚlayer_idÚ	__class__s      €r*   rm   z%SpeechT5NoLayerNormConvLayer.__init__Ó   s—   ø€ Ü‰ÑÔØ<DÀqºL˜6Ÿ?™?¨8°a©<Ò8ÈaˆÔØ"ŸO™O¨HÑ5ˆÔä—I‘IØ×ÑØ×ÑØ×*Ñ*¨8Ñ4Ø×%Ñ% hÑ/Ø×!Ñ!ô
ˆŒ	ô ! ×!?Ñ!?Ñ@ˆ�r,   c                 óJ   — | j                  |«      }| j                  |«      }|S ©N)ru   rw   ©ry   Úhidden_statess     r*   Úforwardz$SpeechT5NoLayerNormConvLayer.forwardá   s$   € ØŸ	™	 -Ó0ˆØŸ™¨Ó6ˆØÐr,   ©r   ©Ú__name__Ú
__module__Ú__qualname__rm   r�   Ú__classcell__©r|   s   @r*   rf   rf   Ò   s   ø„ õAör,   rf   c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚSpeechT5LayerNormConvLayerc                 ó°  •— t         ‰| �  «        |dkD  r|j                  |dz
     nd| _        |j                  |   | _        t        j                  | j                  | j                  |j                  |   |j                  |   |j                  ¬«      | _
        t        j                  | j                  d¬«      | _        t        |j                     | _        y )Nr   r   rh   T)Úelementwise_affine)rl   rm   rn   ro   rp   r   rq   rr   rs   rt   ru   Ú	LayerNormÚ
layer_normr	   rv   rw   rx   s      €r*   rm   z#SpeechT5LayerNormConvLayer.__init__é   s¯   ø€ Ü‰ÑÔØ<DÀqºL˜6Ÿ?™?¨8°a©<Ò8ÈaˆÔØ"ŸO™O¨HÑ5ˆÔä—I‘IØ×ÑØ×ÑØ×*Ñ*¨8Ñ4Ø×%Ñ% hÑ/Ø×!Ñ!ô
ˆŒ	ô Ÿ,™, t×'8Ñ'8ÈTÔRˆŒÜ  ×!?Ñ!?Ñ@ˆ�r,   c                 ó´   — | j                  |«      }|j                  dd«      }| j                  |«      }|j                  dd«      }| j                  |«      }|S )Néþÿÿÿr#   )ru   Ú	transposerŽ   rw   r   s     r*   r�   z"SpeechT5LayerNormConvLayer.forwardø   sV   € ØŸ	™	 -Ó0ˆà%×/Ñ/°°BÓ7ˆØŸ™¨Ó6ˆØ%×/Ñ/°°BÓ7ˆàŸ™¨Ó6ˆØÐr,   r‚   rƒ   rˆ   s   @r*   rŠ   rŠ   è   s   ø„ õAör,   rŠ   c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚSpeechT5GroupNormConvLayerc                 óÆ  •— t         ‰| �  «        |dkD  r|j                  |dz
     nd| _        |j                  |   | _        t        j                  | j                  | j                  |j                  |   |j                  |   |j                  ¬«      | _
        t        |j                     | _        t        j                  | j                  | j                  d¬«      | _        y )Nr   r   rh   T)Ú
num_groupsÚnum_channelsÚaffine)rl   rm   rn   ro   rp   r   rq   rr   rs   rt   ru   r	   rv   rw   Ú	GroupNormrŽ   rx   s      €r*   rm   z#SpeechT5GroupNormConvLayer.__init__  s¹   ø€ Ü‰ÑÔØ<DÀqºL˜6Ÿ?™?¨8°a©<Ò8ÈaˆÔØ"ŸO™O¨HÑ5ˆÔä—I‘IØ×ÑØ×ÑØ×*Ñ*¨8Ñ4Ø×%Ñ% hÑ/Ø×!Ñ!ô
ˆŒ	ô ! ×!?Ñ!?Ñ@ˆŒäŸ,™,°$×2CÑ2CÐRV×RcÑRcÐlpÔqˆ�r,   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S r~   )ru   rŽ   rw   r   s     r*   r�   z"SpeechT5GroupNormConvLayer.forward  s2   € ØŸ	™	 -Ó0ˆØŸ™¨Ó6ˆØŸ™¨Ó6ˆØÐr,   r‚   rƒ   rˆ   s   @r*   r“   r“     s   ø„ õrö r,   r“   c            	       óú   ‡ — e Zd ZdZddedededz  fˆ fd„Zddedededz  fd„Zeddedededz  fd	„«       Z e	j                  «       dd
e	j                  defd„«       Z	 dd
e	j                  dededz  fd„Zˆ xZS )Ú%SpeechT5SinusoidalPositionalEmbeddingzDThis module produces sinusoidal positional embeddings of any length.NÚnum_positionsÚembedding_dimÚpadding_idxc                 óš   •— t         ‰| �  «        d| _        || _        || _        || _        | j                  || j                  z   ||«       y ©Né   )rl   rm   Úoffsetrœ   r�   rž   Úmake_weights)ry   rœ   r�   rž   r|   s       €r*   rm   z.SpeechT5SinusoidalPositionalEmbedding.__init__   sH   ø€ Ü‰ÑÔØˆŒØ*ˆÔØ*ˆÔØ&ˆÔØ×Ñ˜-¨$¯+©+Ñ5°}ÀkÕRr,   Únum_embeddingsc                 óà   — | j                  |||«      }t        | d«      r;|j                  | j                  j                  | j                  j
                  ¬«      }| j                  d|d¬«       y )NÚweights©rD   ÚdeviceF©Ú
persistent)Úget_embeddingÚhasattrÚtor¦   rD   r¨   Úregister_buffer)ry   r¤   r�   rž   Úemb_weightss        r*   r£   z2SpeechT5SinusoidalPositionalEmbedding.make_weights(  s[   € Ø×(Ñ(¨¸ÈÓTˆÜ�4˜Ô#à%Ÿ.™.¨t¯|©|×/AÑ/AÈ$Ï,É,×J]ÑJ]˜.Ó^ˆKà×Ñ˜Y¨ÀÐÕFr,   c                 óâ  — |dz  }t        j                  d«      |dz
  z  }t        j                  t        j                  |t        j
                  ¬«      j                  «       | z  «      }t        j                  | t        j
                  ¬«      j                  «       j                  d«      |j                  d«      z  }t        j                  t        j                  |«      t        j                  |«      gd¬«      j                  | d«      }|dz  dk(  r-t        j                  |t        j                  | d«      gd¬«      }|�	d||dd…f<   |j                  t        j                  «       «      S )	zÁ
        Build sinusoidal embeddings. This matches the implementation in tensor2tensor, but differs slightly from the
        description in Section 3.5 of "Attention Is All You Need".
        r¡   i'  r   rC   r   ©Údimr#   N)ÚmathÚlogÚtorchÚexprQ   Úint64ÚfloatÚ	unsqueezeÚcatÚsinÚcosÚviewrN   r­   Úget_default_dtype)r¤   r�   rž   Úhalf_dimÚembs        r*   r«   z3SpeechT5SinusoidalPositionalEmbedding.get_embedding0  s  € ð ! AÑ%ˆÜ�h‰h�u‹o ¨A¡Ñ.ˆÜ�i‰iœŸ™ X´U·[±[ÔA×GÑGÓIÈSÈDÑPÓQˆÜ�l‰l˜>´·±Ô=×CÑCÓE×OÑOÐPQÓRÐUX×UbÑUbÐcdÓUeÑeˆÜ�i‰iœŸ™ 3›¬¯©°3«Ð8¸aÔ@×EÑEÀnÐVXÓYˆØ˜1Ñ Ò!ä—)‘)˜S¤%§+¡+¨n¸aÓ"@ÐAÀqÔIˆCØÐ"Ø"#ˆC�šQ�ÑØ�v‰v”e×-Ñ-Ó/Ó0Ð0r,   r   Úpast_key_values_lengthc                 óð  — |j                  «       \  }}| j                  || j                  |«      j                  |j                  «      }| j                  dz   |z   }|| j
                  j                  d«      kD  r4| j                  || j                  z   | j                  | j                  «       | j
                  j                  d|j                  d«      «      j                  ||d«      j                  «       S )Nr   r   r#   )ÚsizeÚ"create_position_ids_from_input_idsrž   r­   r¨   r¦   r£   r¢   r�   Úindex_selectr½   rJ   )ry   r   rÁ   ÚbszÚseq_lenÚposition_idsÚmax_poss          r*   r�   z-SpeechT5SinusoidalPositionalEmbedding.forwardB  sÑ   € à —~‘~Ó'‰ˆˆWà×>Ñ>¸yÈ$×JZÑJZÐ\rÓs×vÑvØ×Ñó
ˆð
 ×"Ñ" QÑ&¨Ñ0ˆØ�T—\‘\×&Ñ& qÓ)Ò)Ø×Ñ˜g¨¯©Ñ3°T×5GÑ5GÈ×IYÑIYÔZà�|‰|×(Ñ(¨¨L×,=Ñ,=¸bÓ,AÓB×GÑGÈÈWÐVXÓY×`Ñ`ÓbÐbr,   c                 ó¾   — |j                  |«      j                  «       }t        j                  |d¬«      j	                  |«      |z   |z  }|j                  «       |z   S )a  
        Replace non-padding symbols with their position numbers. Position numbers begin at padding_idx+1. Padding
        symbols are ignored. This is modified from fairseq's `utils.make_positions`.

        Args:
            x: torch.Tensor x:
        Returns: torch.Tensor
        r   r±   )Úner<   rµ   ÚcumsumÚtype_asÚlong)ry   r   rž   rÁ   ÚmaskÚincremental_indicess         r*   rÄ   zHSpeechT5SinusoidalPositionalEmbedding.create_position_ids_from_input_idsQ  sW   € ð �|‰|˜KÓ(×,Ñ,Ó.ˆÜ$Ÿ|™|¨D°aÔ8×@Ñ@ÀÓFÐI_Ñ_ÐcgÑgÐØ"×'Ñ'Ó)¨KÑ7Ð7r,   r~   r‚   )r„   r…   r†   Ú__doc__r<   rm   r£   Ústaticmethodr«   rµ   Úno_gradÚTensorr�   rÄ   r‡   rˆ   s   @r*   r›   r›     sÜ   ø„ ÙNñS cð S¸#ð SÈCÐRVÉJõ SñG¨3ð G¸sð GÐQTÐW[ÑQ[ó Gð ñ1 cð 1¸#ð 1ÈCÐRVÉJò 1ó ð1ð" €U‡]�]ƒ_ñc §¡ð cÀsò có ðcð _`ñ8ØŸ™ð8Ø47ð8ØQTÐW[ÑQ[÷8r,   r›   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚSpeechT5PositionalConvEmbeddingc                 ó¦  •— t         ‰| �  «        t        j                  |j                  |j                  |j
                  |j
                  dz  |j                  ¬«      | _        t        j                  j                  }t        t        j                  j                  d«      r$t        j                  j                  j                  }t        «       �r(dd l}|j                  j                  | j                  j                   d¬«      5   || j                  dd¬«      | _        d d d «       t        | j                  d«      rU| j                  j                  j                   j"                  }| j                  j                  j                   j$                  }n,| j                  j&                  }| j                  j(                  }|j                  j+                  | |«       |j                  j+                  | |«       n || j                  dd¬«      | _        t-        |j
                  «      | _        t0        |j2                     | _        y # 1 sw Y   �Œ'xY w)	Nr¡   )ri   ÚpaddingÚgroupsÚweight_normr   )Úmodifier_rankÚweight)Únamer²   Úparametrizations)rl   rm   r   rq   Úhidden_sizeÚnum_conv_pos_embeddingsÚnum_conv_pos_embedding_groupsru   ÚutilsrÚ   r¬   rÞ   r   Ú	deepspeedÚzeroÚGatheredParametersrÜ   Ú	original0Ú	original1Úweight_gÚweight_vÚregister_external_parameterÚSpeechT5SamePadLayerrØ   r	   rv   rw   )ry   rz   rÚ   rã   rè   ré   r|   s         €r*   rm   z(SpeechT5PositionalConvEmbedding.__init__d  s¥  ø€ Ü‰ÑÔÜ—I‘IØ×ÑØ×ÑØ×6Ñ6Ø×2Ñ2°aÑ7Ø×7Ñ7ô
ˆŒ	ô —h‘h×*Ñ*ˆÜ”2—8‘8×,Ñ,¨mÔ<ÜŸ(™(×3Ñ3×?Ñ?ˆKä%Õ'Ûà—‘×2Ñ2°4·9±9×3CÑ3CÐSTÐ2ÓUñ IÙ'¨¯	©	¸ÀaÔH�”	÷Iä�t—y‘yÐ"4Ô5ØŸ9™9×5Ñ5×<Ñ<×FÑF�ØŸ9™9×5Ñ5×<Ñ<×FÑF‘àŸ9™9×-Ñ-�ØŸ9™9×-Ñ-�Ø�N‰N×6Ñ6°t¸XÔFØ�N‰N×6Ñ6°t¸XÕFá# D§I¡I°HÀ!ÔDˆDŒIä+¨F×,JÑ,JÓKˆŒÜ  ×!?Ñ!?Ñ@ˆ�÷Iñ Iús   ÄIÉIc                 ó´   — |j                  dd«      }| j                  |«      }| j                  |«      }| j                  |«      }|j                  dd«      }|S ©Nr   r¡   )r‘   ru   rØ   rw   r   s     r*   r�   z'SpeechT5PositionalConvEmbedding.forward…  sV   € Ø%×/Ñ/°°1Ó5ˆàŸ	™	 -Ó0ˆØŸ™ ]Ó3ˆØŸ™¨Ó6ˆà%×/Ñ/°°1Ó5ˆØÐr,   rƒ   rˆ   s   @r*   rÖ   rÖ   c  s   ø„ ôAöBr,   rÖ   c                   ó*   ‡ — e Zd ZdZdˆ fd„	Zd„ Zˆ xZS )Ú SpeechT5ScaledPositionalEncodingu[   
    Scaled positional encoding, see Â§3.2 in https://huggingface.co/papers/1809.08895
    c                 ó  •— t        j                  ||«      }t        j                  d|«      j                  d«      }t        j                  t        j                  d|dt         j
                  ¬«      j                  «       t        j                  d«      |z   z  «      }t        j                  |j                  «       |z  «      |d d …dd d…f<   t        j                  |j                  «       |z  «      |d d …dd d…f<   |j                  d«      }t        ‰| �1  «        | j                  d|d¬«       t        j                  |¬	«      | _        || _        || _        t        j&                  t        j(                  d
«      «      | _        y )Nr   r   r¡   rC   ç     ˆÃ@ÚpeFr©   ©Úpç      ð?)rµ   rN   rQ   r¹   r¶   r·   r¸   r³   r´   r»   r¼   rl   rm   r®   r   ÚDropoutÚdropoutr²   Úmax_lenÚ	ParameterÚtensorÚalpha)ry   r÷   r²   rø   rò   ÚpositionÚdiv_termr|   s          €r*   rm   z)SpeechT5ScaledPositionalEncoding.__init__•  s'  ø€ Ü�[‰[˜ #Ó&ˆÜ—<‘<  7Ó+×5Ñ5°aÓ8ˆÜ—9‘9œUŸ\™\¨!¨S°!¼5¿;¹;ÔG×MÑMÓOÔTX×T\ÑT\Ð]dÓTeÐhkÑTkÐRlÑlÓmˆÜ—i‘i §¡Ó 0°8Ñ ;Ó<ˆŠ1ˆaˆd�ˆdˆ7‰Ü—i‘i §¡Ó 0°8Ñ ;Ó<ˆŠ1ˆaˆd�ˆdˆ7‰Ø�\‰\˜!‹_ˆÜ‰ÑÔØ×Ñ˜T 2°%ÐÔ8Ü—z‘z GÔ,ˆŒØˆŒØˆŒÜ—\‘\¤%§,¡,¨sÓ"3Ó4ˆ�
r,   c                 ó�   — || j                   | j                  d d …d |j                  d«      …f   z  z   }| j                  |«      }|S )Nr   )rû   rò   rÃ   r÷   )ry   rÀ   s     r*   r�   z(SpeechT5ScaledPositionalEncoding.forward£  sB   € Ø�D—J‘J §¡ª¨M¨c¯h©h°q«k¨MÐ)9Ñ!:Ñ:Ñ:ˆØ�l‰l˜3ÓˆØˆ
r,   )iˆ  )r„   r…   r†   rÑ   rm   r�   r‡   rˆ   s   @r*   rï   rï   �  s   ø„ ñõ5ör,   rï   c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )Ú"SpeechT5RelativePositionalEncodingc                 óŽ   •— t         ‰| �  «        || _        || _        t        j
                  j                  d|z  |«      | _        y r    )rl   rm   r²   Ú
max_lengthrµ   r   Ú	EmbeddingÚpe_k)ry   r²   r  r|   s      €r*   rm   z+SpeechT5RelativePositionalEncoding.__init__ª  s8   ø€ Ü‰ÑÔØˆŒØ$ˆŒÜ—H‘H×&Ñ& q¨:¡~°sÓ;ˆ�	r,   c                 óÆ  — |j                   d   }t        j                  d|«      j                  |j                  t        j
                  ¬«      }|d d …d f   |d d d …f   z
  }t        j                  || j                   k  | j                   |«      }t        j                  || j                  k\  | j                  dz
  |«      }|| j                  z   }| j                  |«      S )Nr   r   ©r¨   rD   )	r%   rµ   rQ   r­   r¨   rÎ   Úwherer  r  )ry   r€   rÇ   Úpos_seqs       r*   r�   z*SpeechT5RelativePositionalEncoding.forward°  sÁ   € Ø×%Ñ% aÑ(ˆÜ—,‘,˜q 'Ó*×-Ñ-°]×5IÑ5IÔQV×Q[ÑQ[Ð-Ó\ˆØš!˜T˜'Ñ" W¨T²1¨WÑ%5Ñ5ˆä—+‘+˜g¨¯©Ð(8Ñ8¸4¿?¹?Ð:JÈGÓTˆÜ—+‘+˜g¨¯©Ñ8¸$¿/¹/ÈAÑ:MÈwÓWˆØ˜DŸO™OÑ+ˆà�y‰y˜Ó!Ð!r,   )iè  rƒ   rˆ   s   @r*   r   r   ©  s   ø„ õ<ö	"r,   r   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )rë   c                 óP   •— t         ‰| �  «        |dz  dk(  rd| _        y d| _        y )Nr¡   r   r   )rl   rm   Únum_pad_remove)ry   rà   r|   s     €r*   rm   zSpeechT5SamePadLayer.__init__¾  s)   ø€ Ü‰ÑÔØ#:¸QÑ#>À!Ò#C˜aˆÕÈˆÕr,   c                 óV   — | j                   dkD  r|d d …d d …d | j                    …f   }|S ©Nr   )r  r   s     r*   r�   zSpeechT5SamePadLayer.forwardÂ  s6   € Ø×Ñ Ò"Ø)ª!ªQÐ0F°4×3FÑ3FÐ2FÐ0FÐ*FÑGˆMØÐr,   rƒ   rˆ   s   @r*   rë   rë   ½  s   ø„ ôKör,   rë   c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )ÚSpeechT5FeatureEncoderz.Construct the features from raw audio waveformc           	      óØ  •— t         ‰| �  «        |j                  dk(  rDt        |d¬«      gt	        |j
                  dz
  «      D �cg c]  }t        ||dz   ¬«      ‘Œ c}z   }nV|j                  dk(  r.t	        |j
                  «      D �cg c]  }t        ||¬«      ‘Œ }}nt        d|j                  › d�«      ‚t        j                  |«      | _        d| _        d	| _        y c c}w c c}w )
NÚgroupr   )r{   r   Úlayerz`config.feat_extract_norm` is z), but has to be one of ['group', 'layer']FT)rl   rm   Úfeat_extract_normr“   rM   Únum_feat_extract_layersrf   rŠ   r'   r   Ú
ModuleListÚconv_layersÚgradient_checkpointingÚ_requires_grad)ry   rz   Úir  r|   s       €r*   rm   zSpeechT5FeatureEncoder.__init__Ì  sñ   ø€ Ü‰ÑÔà×#Ñ# wÒ.Ü5°fÀqÔIÐJÜNSÐTZ×TrÑTrÐuvÑTvÓNwöNØIJÔ,¨V¸aÀ!¹eÖDòNñ ‰Kð ×%Ñ%¨Ò0äHMÈf×NlÑNlÓHmöØCDÔ*¨6¸AÖ>ðˆKñ ô Ø0°×1IÑ1IÐ0JÐJsÐtóð ô Ÿ=™=¨Ó5ˆÔØ&+ˆÔ#Ø"ˆÕùòNùòs   ÁC"Â	C'c                 óJ   — | j                  «       D ]	  }d|_        Œ d| _        y )NF)Ú
parametersÚrequires_gradr  )ry   Úparams     r*   Ú_freeze_parametersz)SpeechT5FeatureEncoder._freeze_parametersß  s(   € Ø—_‘_Ó&ò 	(ˆEØ"'ˆEÕð	(à#ˆÕr,   c                 óˆ   — |d d …d f   }| j                   r| j                  rd|_        | j                  D ]
  } ||«      }Œ |S ©NT)r  Útrainingr  r  )ry   r-   r€   Ú
conv_layers       r*   r�   zSpeechT5FeatureEncoder.forwardä  sP   € Ø$¢Q¨ WÑ-ˆð ×Ò 4§=¢=Ø*.ˆMÔ'à×*Ñ*ò 	6ˆJÙ& }Ó5‰Mð	6ð Ðr,   )r„   r…   r†   rÑ   rm   r  r�   r‡   rˆ   s   @r*   r  r  É  s   ø„ Ù8ô#ò&$ö

r,   r  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚSpeechT5FeatureProjectionc                 ó4  •— t         ‰| �  «        t        j                  |j                  d   |j
                  ¬«      | _        t        j                  |j                  d   |j                  «      | _	        t        j                  |j                  «      | _        y )Nr#   ©Úeps)rl   rm   r   r�   rn   Úlayer_norm_epsrŽ   ÚLinearrß   Ú
projectionrö   Úfeat_proj_dropoutr÷   ©ry   rz   r|   s     €r*   rm   z"SpeechT5FeatureProjection.__init__ó  sf   ø€ Ü‰ÑÔÜŸ,™, v§¡°rÑ':À×@UÑ@UÔVˆŒÜŸ)™) F§O¡O°BÑ$7¸×9KÑ9KÓLˆŒÜ—z‘z &×":Ñ":Ó;ˆ�r,   c                 óp   — | j                  |«      }| j                  |«      }| j                  |«      }||fS r~   )rŽ   r*  r÷   )ry   r€   Únorm_hidden_statess      r*   r�   z!SpeechT5FeatureProjection.forwardù  s:   € à!Ÿ_™_¨]Ó;ÐØŸ™Ð(:Ó;ˆØŸ™ ]Ó3ˆØÐ0Ð0Ð0r,   rƒ   rˆ   s   @r*   r$  r$  ò  s   ø„ ô<ö1r,   r$  c                   ó2  ‡ — e Zd Zˆ fd„Zd„ Z	 	 ddej                  dej                  dz  dej                  dz  fd„Z	de
dej                  fd	„Zd
ej                  e
z  fd„Z	 	 ddej                  dej                  dz  dej                  dz  fd„Zˆ xZS )ÚSpeechT5SpeechEncoderPrenetc                 óÖ  •— t         ‰| �  «        || _        t        |«      | _        t        |«      | _        |j                  dkD  s|j                  dkD  rEt        j                  t        j                  |j                  «      j                  «       «      | _        t!        |«      | _        t%        |j&                  |j(                  z   dz   |j                  |j(                  «      | _        y )Nr2   r   )rl   rm   rz   r  Úfeature_encoderr$  Úfeature_projectionÚmask_time_probÚmask_feature_probr   rù   rµ   rÔ   rß   Úuniform_Úmasked_spec_embedrÖ   Úpos_conv_embedr›   Úmax_speech_positionsr    Úpos_sinusoidal_embedr,  s     €r*   rm   z$SpeechT5SpeechEncoderPrenet.__init__  sº   ø€ Ü‰ÑÔØˆŒÜ5°fÓ=ˆÔÜ";¸FÓ"CˆÔð × Ñ  3Ò&¨&×*BÑ*BÀSÒ*HÜ%'§\¡\´%·,±,¸v×?QÑ?QÓ2R×2[Ñ2[Ó2]Ó%^ˆDÔ"ä=¸fÓEˆÔÜ$IØ×'Ñ'¨&×*=Ñ*=Ñ=ÀÑAØ×ÑØ×Ñó%
ˆÕ!r,   c                 ó8   — | j                   j                  «        y r~   )r2  r  ©ry   s    r*   Úfreeze_feature_encoderz2SpeechT5SpeechEncoderPrenet.freeze_feature_encoder  s   € Ø×Ñ×/Ñ/Õ1r,   Nr-   r/   Úmask_time_indicesc                 óø  — | j                  |«      }|j                  dd«      }|�| j                  |j                  d   |«      }| j	                  |«      \  }}| j                  |||¬«      }| j                  |«      }||z   }|� |j                  d«      j                  «       }n=t        j                  |j                  d d t        j                  |j                  ¬«      }| j                  |«      }||z   }||fS )Nr   r¡   )r>  r/   r§   )r2  r‘   Ú"_get_feature_vector_attention_maskr%   r3  Ú_mask_hidden_statesr8  rË   rÎ   rµ   rN   r¨   r:  )	ry   r-   r/   r>  Úextract_featuresr€   Úpositional_conv_embeddingÚpadding_maskÚ positional_sinusoidal_embeddingss	            r*   r�   z#SpeechT5SpeechEncoderPrenet.forward  s  € ð  ×/Ñ/°Ó=ÐØ+×5Ñ5°a¸Ó;ÐàÐ%à!×DÑDØ ×&Ñ& qÑ)ØóˆNð
 +/×*AÑ*AÐBRÓ*SÑ'ˆÐ'Ø×0Ñ0ØÐ->È~ð 1ó 
ˆð %)×$7Ñ$7¸Ó$FÐ!Ø%Ð(AÑAˆàÐ%Ø)×,Ñ,¨QÓ/×4Ñ4Ó6‰Lä Ÿ;™; }×':Ñ':¸2¸AÐ'>ÄeÇjÁjÐYf×YmÑYmÔnˆLà+/×+DÑ+DÀ\Ó+RÐ(Ø%Ð(HÑHˆà˜nÐ,Ð,r,   Úfeature_vector_lengthc                 óø  — |j                  d¬«      d d …df   }| j                  |«      j                  t        j                  «      }|j
                  d   }t        j                  ||f|j                  |j                  ¬«      }d|t        j                  |j
                  d   |j                  ¬«      |dz
  f<   |j                  dg«      j                  d«      j                  dg«      j                  «       }|S )Nr#   r±   r   r§   r   ©r¨   )rÌ   Ú _get_feat_extract_output_lengthsr­   rµ   rÎ   r%   rN   rD   r¨   rQ   ÚfliprO   )ry   rF  r/   Únon_padded_lengthsÚoutput_lengthsr[   s         r*   r@  z>SpeechT5SpeechEncoderPrenet._get_feature_vector_attention_mask9  së   € ð ,×2Ñ2°rÐ2Ó:º1¸b¸5ÑAÐØ×>Ñ>Ð?QÓR×UÑUÔV[×V`ÑV`ÓaˆØ#×)Ñ)¨!Ñ,ˆ
äŸ™ØÐ.Ð/°~×7KÑ7KÐTb×TiÑTiô
ˆð uvˆœŸ™ ^×%9Ñ%9¸!Ñ%<À^×EZÑEZÔ[Ð]kÐnoÑ]oÐpÑqØ'×,Ñ,¨b¨TÓ2×9Ñ9¸"Ó=×BÑBÀBÀ4ÓH×MÑMÓOˆØÐr,   r]   c                 ó˜   — d„ }t        | j                  j                  | j                  j                  «      D ]  \  }} ||||«      }Œ |S )zH
        Computes the output length of the convolutional layers
        c                 ó>   — t        j                  | |z
  |d¬«      dz   S )NÚfloor)Úrounding_moder   )rµ   Údiv)r>   ri   rj   s      r*   Ú_conv_out_lengthzVSpeechT5SpeechEncoderPrenet._get_feat_extract_output_lengths.<locals>._conv_out_lengthN  s"   € ô —9‘9˜\¨KÑ7¸ÈwÔWÐZ[Ñ[Ð[r,   )Úziprz   rr   rs   )ry   r]   rR  ri   rj   s        r*   rI  z<SpeechT5SpeechEncoderPrenet._get_feat_extract_output_lengthsI  sQ   € ò
	\ô
 $' t§{¡{×'>Ñ'>ÀÇÁ×@WÑ@WÓ#Xò 	QÑˆK˜Ù,¨]¸KÈÓP‰Mð	Qð Ðr,   r€   c                 óÎ  — t        | j                  dd«      s|S |j                  «       \  }}}|�)| j                  j	                  |j
                  «      ||<   nË| j                  j                  dkD  r²| j                  r¦t        ||f| j                  j                  | j                  j                  || j                  j                  ¬«      }t        j                  ||j                  t        j                  ¬«      }| j                  j	                  |j
                  «      ||<   | j                  j                  dkD  r¨| j                  rœt        ||f| j                  j                  | j                  j                   | j                  j"                  ¬«      }t        j                  ||j                  t        j                  ¬«      }|dd…df   j%                  d|d«      }d||<   |S )	z¢
        Masks extracted features along time axis and/or along feature axis according to
        [SpecAugment](https://huggingface.co/papers/1904.08779).
        Úapply_spec_augmentTNr   )r5   r6   r/   r7   r  )r5   r6   r7   r#   )Úgetattrrz   rÃ   r7  r­   rD   r4  r!  rd   Úmask_time_lengthÚmask_time_min_masksrµ   rú   r¨   rO   r5  Úmask_feature_lengthÚmask_feature_min_masksÚexpand)ry   r€   r>  r/   r[   rA   rß   Úmask_feature_indicess           r*   rA  z/SpeechT5SpeechEncoderPrenet._mask_hidden_statesY  sš  € ô �t—{‘{Ð$8¸$Ô?Ø Ð ð 4A×3EÑ3EÓ3GÑ0ˆ
�O [àÐ(à/3×/EÑ/E×/HÑ/HÈ×I\ÑI\Ó/]ˆMÐ+Ò,Ø�[‰[×'Ñ'¨!Ò+°·²Ü 5Ø˜_Ð-ØŸ+™+×4Ñ4Ø ŸK™K×8Ñ8Ø-ØŸ+™+×9Ñ9ô!Ðô !&§¡Ð->À}×G[ÑG[Ôch×cmÑcmÔ nÐØ/3×/EÑ/E×/HÑ/HÈ×I\ÑI\Ó/]ˆMÐ+Ñ,à�;‰;×(Ñ(¨1Ò,°·²ä#8Ø˜[Ð)ØŸ+™+×7Ñ7Ø ŸK™K×;Ñ;ØŸ+™+×<Ñ<ô	$Ð ô $)§<¡<Ð0DÈ]×MaÑMaÔin×isÑisÔ#tÐ Ø#7º¸4¸Ñ#@×#GÑ#GÈÈOÐ]_Ó#`Ð Ø23ˆMÐ.Ñ/àÐr,   ©NN)r„   r…   r†   rm   r=  rµ   rÔ   Ú
LongTensorÚFloatTensorr�   r<   r@  rI  rA  r‡   rˆ   s   @r*   r0  r0    sÈ   ø„ ô
ò"2ð 37Ø6:ñ	 -à—l‘lð -ð ×(Ñ(¨4Ñ/ð -ð !×,Ñ,¨tÑ3ó	 -ðFÈð Ð]b×]mÑ]mó ð ¸e×>NÑ>NÐQTÑ>Tó ð& 7;Ø26ñ	,à×(Ñ(ð,ð !×,Ñ,¨tÑ3ð,ð ×(Ñ(¨4Ñ/÷	,r,   r0  c                   óf   ‡ — e Zd Zˆ fd„Zd„ Z	 ddej                  dej                  dz  fd„Zˆ xZS )ÚSpeechT5SpeechDecoderPrenetc           	      óX  •— t         ‰| �  «        || _        t        j                  t        |j                  «      D �cg c]=  }t        j                  |dk(  r|j                  n|j                  |j                  «      ‘Œ? c}«      | _
        t        j                  |j                  |j                  «      | _        t        |j                  |j                  |j                  «      | _        t        j                  |j"                  |j                  z   |j                  «      | _        y c c}w r  )rl   rm   rz   r   r  rM   Úspeech_decoder_prenet_layersr)  Únum_mel_binsÚspeech_decoder_prenet_unitsÚlayersrß   Úfinal_layerrï   Úpositional_dropoutr9  Úencode_positionsÚspeaker_embedding_dimÚspeaker_embeds_layer©ry   rz   r  r|   s      €r*   rm   z$SpeechT5SpeechDecoderPrenet.__init__‰  sî   ø€ Ü‰ÑÔØˆŒä—m‘mô ˜v×BÑBÓCöð
 ô	 —	‘	Ø+,°ª6�F×'Ò'°v×7YÑ7YØ×6Ñ6õòó
ˆŒô Ÿ9™9 V×%GÑ%GÈ×I[ÑI[Ó\ˆÔÜ @Ø×%Ñ%Ø×ÑØ×'Ñ'ó!
ˆÔô
 %'§I¡I¨f×.JÑ.JÈV×M_ÑM_Ñ._Ðag×asÑasÓ$tˆÕ!ùòs   ½AD'c                 óÞ   — t        j                  |d   |¬«      }|j                  d«      j                  |j	                  d«      dd«      }t        j
                  |dk(  |d«      dz  d|z
  z  S )Nr   ró   r   )rµ   Ú	bernoullir¹   ÚrepeatrÃ   r  )ry   Úinputs_embedsrô   rÏ   Ú	all_maskss        r*   Ú_consistent_dropoutz/SpeechT5SpeechDecoderPrenet._consistent_dropoutŸ  sd   € Ü�‰˜}¨QÑ/°1Ô5ˆØ—N‘N 1Ó%×,Ñ,¨]×-?Ñ-?ÀÓ-BÀAÀqÓIˆ	Ü�{‰{˜9¨™>¨=¸!Ó<¸qÑ@ÀAÈÁEÑJÐJr,   Nr-   Úspeaker_embeddingsc                 ó8  — |}| j                   D ]M  }t        j                  j                   ||«      «      }| j	                  || j
                  j                  «      }ŒO | j                  |«      }| j                  |«      }|�—t        j                  j                  |«      }|j                  d«      j                  d|j                  d«      d«      }t        j                  ||gd¬«      }t        j                  j                  | j                  |«      «      }|S )Nr   r#   r±   )rf  r   Ú
functionalÚrelurr  rz   Úspeech_decoder_prenet_dropoutrg  ri  Ú	normalizer¹   r[  rÃ   rµ   rº   rk  )ry   r-   rs  rp  r  s        r*   r�   z#SpeechT5SpeechDecoderPrenet.forward¤  sù   € ð %ˆØ—[‘[ò 	oˆEÜŸM™M×.Ñ.©u°]Ó/CÓDˆMØ ×4Ñ4°]ÀDÇKÁK×DmÑDmÓn‰Mð	oð ×(Ñ(¨Ó7ˆØ×-Ñ-¨mÓ<ˆàÐ)Ü!#§¡×!8Ñ!8Ð9KÓ!LÐØ!3×!=Ñ!=¸aÓ!@×!GÑ!GÈÈM×L^ÑL^Ð_`ÓLaÐceÓ!fÐÜ!ŸI™I }Ð6HÐ&IÈrÔRˆMÜŸM™M×.Ñ.¨t×/HÑ/HÈÓ/WÓXˆMàÐr,   r~   )	r„   r…   r†   rm   rr  rµ   rÔ   r�   r‡   rˆ   s   @r*   ra  ra  ˆ  s8   ø„ ôuò,Kð 37ñà—l‘lðð "ŸL™L¨4Ñ/÷r,   ra  c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚSpeechT5BatchNormConvLayerc                 ó
  •— t         ‰| �  «        |dk(  r|j                  }n|j                  }||j                  dz
  k(  r|j                  }n|j                  }t        j                  |||j                  d|j                  dz
  dz  d¬«      | _        t        j                  |«      | _
        ||j                  dz
  k  rt        j                  «       | _        nd | _        t        j                  |j                  «      | _        y )Nr   r   r¡   F)ri   rj   rØ   rk   )rl   rm   rd  Úspeech_decoder_postnet_unitsÚspeech_decoder_postnet_layersr   rq   Úspeech_decoder_postnet_kernelru   ÚBatchNorm1dÚ
batch_normÚTanhrw   rö   Úspeech_decoder_postnet_dropoutr÷   )ry   rz   r{   ro   rp   r|   s        €r*   rm   z#SpeechT5BatchNormConvLayer.__init__½  sÛ   ø€ Ü‰ÑÔà�qŠ=Ø ×-Ñ-‰Kà ×=Ñ=ˆKà�v×;Ñ;¸aÑ?Ò?Ø!×.Ñ.‰Là!×>Ñ>ˆLä—I‘IØØØ×<Ñ<ØØ×9Ñ9¸AÑ=À!ÑCØô
ˆŒ	ô Ÿ.™.¨Ó6ˆŒà�f×:Ñ:¸QÑ>Ò>Ü Ÿg™g›iˆD�Oà"ˆDŒOä—z‘z &×"GÑ"GÓHˆ�r,   c                 ó¦   — | j                  |«      }| j                  |«      }| j                  �| j                  |«      }| j                  |«      }|S r~   )ru   r€  rw   r÷   r   s     r*   r�   z"SpeechT5BatchNormConvLayer.forwardÛ  sJ   € ØŸ	™	 -Ó0ˆØŸ™¨Ó6ˆØ�?‰?Ð&Ø ŸO™O¨MÓ:ˆMØŸ™ ]Ó3ˆØÐr,   r‚   rƒ   rˆ   s   @r*   rz  rz  ¼  s   ø„ õIö<r,   rz  c                   ó^   ‡ — e Zd Zˆ fd„Zdej
                  fd„Zdej
                  fd„Zˆ xZS )ÚSpeechT5SpeechDecoderPostnetc           	      óš  •— t         ‰| �  «        || _        t        j                  |j
                  |j                  |j                  z  «      | _        t        j                  |j
                  |j                  «      | _	        t        j                  t        |j                  «      D �cg c]  }t        ||«      ‘Œ c}«      | _        y c c}w r~   )rl   rm   rz   r   r)  rß   rd  r.   Úfeat_outÚprob_outr  rM   r}  rz  rf  rl  s      €r*   rm   z%SpeechT5SpeechDecoderPostnet.__init__å  s�   ø€ Ü‰ÑÔØˆŒäŸ	™	 &×"4Ñ"4°f×6IÑ6IÈF×LcÑLcÑ6cÓdˆŒÜŸ	™	 &×"4Ñ"4°f×6MÑ6MÓNˆŒä—m‘mÜ<AÀ&×BfÑBfÓ<gÖh°qÔ'¨°Õ2Òhó
ˆ�ùÚhs   Â(Cr€   c                 ó  — | j                  |«      j                  |j                  d«      d| j                  j                  «      }| j                  |«      }| j                  |«      j                  |j                  d«      d«      }|||fS )Nr   r#   )r‡  r½   rÃ   rz   rd  Úpostnetrˆ  )ry   r€   Úoutputs_before_postnetÚoutputs_after_postnetÚlogitss        r*   r�   z$SpeechT5SpeechDecoderPostnet.forwardð  s~   € Ø!%§¡¨}Ó!=×!BÑ!BÀ=×CUÑCUÐVWÓCXÐZ\Ð^b×^iÑ^i×^vÑ^vÓ!wÐØ $§¡Ð-CÓ DÐØ—‘˜}Ó-×2Ñ2°=×3EÑ3EÀaÓ3HÈ"ÓMˆØ%Ð'<¸fÐDÐDr,   c                 ó‚   — |j                  dd«      }| j                  D ]
  } ||«      }Œ ||j                  dd«      z   S rí   )r‘   rf  )ry   r€   Úlayer_outputr  s       r*   rŠ  z$SpeechT5SpeechDecoderPostnet.postnetö  sI   € Ø$×.Ñ.¨q°!Ó4ˆØ—[‘[ò 	/ˆEÙ  Ó.‰Lð	/à˜|×5Ñ5°a¸Ó;Ñ;Ð;r,   )	r„   r…   r†   rm   rµ   rÔ   r�   rŠ  r‡   rˆ   s   @r*   r…  r…  ä  s*   ø„ ô	
ðE U§\¡\ó Eð< U§\¡\÷ <r,   r…  c                   ó>   ‡ — e Zd Zˆ fd„Zdej
                  fd„Zˆ xZS )ÚSpeechT5TextEncoderPrenetc                 ó  •— t         ‰| �  «        || _        t        j                  |j
                  |j                  |j                  «      | _        t        |j                  |j                  |j                  «      | _        y r~   )rl   rm   rz   r   r  Ú
vocab_sizerß   r    Úembed_tokensrï   rh  Úmax_text_positionsri  r,  s     €r*   rm   z"SpeechT5TextEncoderPrenet.__init__þ  se   ø€ Ü‰ÑÔØˆŒÜŸL™L¨×):Ñ):¸F×<NÑ<NÐPV×PcÑPcÓdˆÔÜ @Ø×%Ñ%Ø×ÑØ×%Ñ%ó!
ˆÕr,   r   c                 óJ   — | j                  |«      }| j                  |«      }|S r~   )r”  ri  )ry   r   rp  s      r*   r�   z!SpeechT5TextEncoderPrenet.forward  s(   € Ø×)Ñ)¨)Ó4ˆØ×-Ñ-¨mÓ<ˆØÐr,   )r„   r…   r†   rm   rµ   rÔ   r�   r‡   rˆ   s   @r*   r‘  r‘  ý  s   ø„ ô
ð §¡÷ r,   r‘  c                   ól   ‡ — e Zd Zˆ fd„Z	 	 ddej
                  dej                  dz  dedz  fd„Zˆ xZ	S )ÚSpeechT5TextDecoderPrenetc                 óÐ  •— t         ‰| �  «        || _        t        j                  |j
                  «      | _        |j                  rt        j                  |j                  «      nd| _        t        j                  |j                  |j                  |j                  «      | _        t!        |j"                  |j                  z   dz   |j                  |j                  «      | _        y )Nrõ   r   )rl   rm   rz   r   rö   rh  r÷   Úscale_embeddingr³   Úsqrtrß   Úembed_scaler  r“  r    r”  r›   r•  Úembed_positionsr,  s     €r*   rm   z"SpeechT5TextDecoderPrenet.__init__  s­   ø€ Ü‰ÑÔØˆŒÜ—z‘z &×";Ñ";Ó<ˆŒØ<B×<RÒ<Rœ4Ÿ9™9 V×%7Ñ%7Ô8ÐX[ˆÔäŸL™L¨×):Ñ):¸F×<NÑ<NÐPV×PcÑPcÓdˆÔäDØ×%Ñ%¨×(;Ñ(;Ñ;¸aÑ?Ø×ÑØ×Ñó 
ˆÕr,   Nr   r/   Úpast_key_valuesc                 ó$  — |�&|j                  «       }|j                  d|d   «      }nt        d«      ‚|€dn|j                  «       }| j	                  ||«      }| j                  |«      | j                  z  }||z  }| j                  |«      }||fS )Nr#   z'You have to specify `decoder_input_ids`r   )rÃ   r½   r'   Úget_seq_lengthr�  r”  rœ  r÷   )ry   r   r/   rž  Úinput_shaperÁ   Ú	positionsrp  s           r*   r�   z!SpeechT5TextDecoderPrenet.forward  s�   € ð Ð Ø#Ÿ.™.Ó*ˆKØ!Ÿ™ r¨;°r©?Ó;‰IäÐFÓGÐGà&5Ð&=¡À?×CaÑCaÓCcÐØ×(Ñ(¨Ð4JÓKˆ	à×)Ñ)¨)Ó4°t×7GÑ7GÑGˆØ˜Ñ"ˆØŸ™ ]Ó3ˆà˜nÐ,Ð,r,   r]  )
r„   r…   r†   rm   rµ   rÔ   r^  r
   r�   r‡   rˆ   s   @r*   r˜  r˜    sD   ø„ ô
ð" 37Ø(,ñ	-à—<‘<ð-ð ×(Ñ(¨4Ñ/ð-ð  ™÷	-r,   r˜  c                   óJ   ‡ — e Zd Zˆ fd„Zdej
                  fd„Zd„ Zd„ Zˆ xZ	S )ÚSpeechT5TextDecoderPostnetc                 ó’   •— t         ‰| �  «        || _        t        j                  |j
                  |j                  d¬«      | _        y )NF©rk   )rl   rm   rz   r   r)  rß   r“  Úlm_headr,  s     €r*   rm   z#SpeechT5TextDecoderPostnet.__init__4  s5   ø€ Ü‰ÑÔØˆŒÜ—y‘y ×!3Ñ!3°V×5FÑ5FÈUÔSˆ�r,   r€   c                 ó$   — | j                  |«      S r~   ©r§  r   s     r*   r�   z"SpeechT5TextDecoderPostnet.forward9  s   € Ø�|‰|˜MÓ*Ð*r,   c                 ó   — | j                   S r~   r©  r<  s    r*   Úget_output_embeddingsz0SpeechT5TextDecoderPostnet.get_output_embeddings<  s   € ð �|‰|Ðr,   c                 ó   — || _         y r~   r©  ©ry   Únew_embeddingss     r*   Úset_output_embeddingsz0SpeechT5TextDecoderPostnet.set_output_embeddingsA  s	   € Ø%ˆ�r,   )
r„   r…   r†   rm   rµ   rÔ   r�   r«  r¯  r‡   rˆ   s   @r*   r¤  r¤  3  s#   ø„ ôTð
+ U§\¡\ó +òö
&r,   r¤  c                   ó6  ‡ — e Zd ZdZ	 	 	 	 ddedededz  dedz  dedz  dedz  fˆ fd	„Z	 	 	 	 	 dd
ej                  dej                  dz  de
dz  dej                  dz  dej                  dz  dedeej                  ej                  dz  e
dz  f   fd„Zˆ xZS )ÚSpeechT5Attentionz“
    Multi-headed attention from 'Attention Is All You Need' paper with relative position bias (see
    https://aclanthology.org/N18-2074.pdf)
    NÚ	embed_dimÚ	num_headsr÷   Ú
is_decoderrk   Ú	layer_idxc                 óü  •— t         ‰| �  «        || _        || _        || _        ||z  | _        | j
                  |z  | j                  k7  rt        d| j                  › d|› d�«      ‚| j
                  dz  | _        || _        || _	        t        j                  |||¬«      | _        t        j                  |||¬«      | _        t        j                  |||¬«      | _        t        j                  |||¬«      | _        y )Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).g      à¿r¦  )rl   rm   r²  r³  r÷   Úhead_dimr'   Úscalingr´  rµ  r   r)  Úk_projÚv_projÚq_projÚout_proj)ry   r²  r³  r÷   r´  rk   rµ  r|   s          €r*   rm   zSpeechT5Attention.__init__K  sÝ   ø€ ô 	‰ÑÔØ"ˆŒØ"ˆŒØˆŒØ! YÑ.ˆŒà�M‰M˜IÑ%¨$¯.©.Ò8ÜØMÈdÏnÉnÐM]Ø$ Y K¨rð3óð ð —}‘} dÑ*ˆŒØ$ˆŒØ"ˆŒä—i‘i 	¨9¸4Ô@ˆŒÜ—i‘i 	¨9¸4Ô@ˆŒÜ—i‘i 	¨9¸4Ô@ˆŒÜŸ	™	 )¨Y¸TÔBˆ�r,   r€   Úkey_value_statesrž  r/   Úposition_biasÚoutput_attentionsr8   c                 ó  — |du}|j                  «       \  }	}
}| j                  |«      | j                  z  }d}|�St        |t        «      rA|j
                  j                  | j                  «      }|r|j                  }n|j                  }n|}|r|n|}|rK|�I|rGj                  | j                     j                  }|j                  | j                     j                  }nß| j                  |«      }| j                  |«      }|j                  |	d| j                   | j"                  «      j%                  dd«      }|j                  |	d| j                   | j"                  «      j%                  dd«      }|�Kj'                  ||| j                  «      \  }}|r)t        |t        «      rd|j
                  | j                  <   |	| j                   z  d| j"                  f}|j                  |	|
| j                   | j"                  «      j%                  dd«      } |j(                  |Ž } |j(                  |Ž } |j(                  |Ž }|j                  d«      }t+        j,                  ||j%                  dd«      «      }|j                  «       |	| j                   z  |
|fk7  r/t/        d|	| j                   z  |
|f› d|j                  «       › �«      ‚|�Á|j1                  «       j                  |	| j                   z  d| j"                  «      j%                  d	d«      }t+        j2                  ||j%                  d
d«      «      }|j%                  d	d«      j                  |	| j                   z  |j                  d	«      |j                  d«      «      }||z  }|�{|j                  «       |	d|
|fk7  r#t/        d|	d|
|f› d|j                  «       › �«      ‚|j                  |	| j                   |
|«      |z   }|j                  |	| j                   z  |
|«      }t4        j6                  j9                  |d¬«      }|r?|j                  |	| j                   |
|«      }|j                  |	| j                   z  |
|«      }nd}t4        j6                  j;                  || j:                  | j<                  ¬«      }t+        j,                  ||«      }|j                  «       |	| j                   z  |
| j"                  fk7  r7t/        d|	| j                   |
| j"                  f› d|j                  «       › �«      ‚|j                  |	| j                   |
| j"                  «      }|j%                  dd«      }|j)                  |	|
| j>                  «      }| jA                  |«      }||fS )z#Input shape: Batch x Time x ChannelNFr#   r   r¡   Tz$Attention weights should be of size z	, but is r   r�   z!Attention mask should be of size r±   )rô   r!  z `attn_output` should be of size )!rÃ   r»  r¸  Ú
isinstancer   Ú
is_updatedÚgetrµ  Úcross_attention_cacheÚself_attention_cacherf  ÚkeysÚvaluesr¹  rº  r½   r³  r·  r‘   ÚupdaterY   rµ   Úbmmr'   Ú
contiguousÚmatmulr   ru  Úsoftmaxr÷   r!  r²  r¼  )ry   r€   r½  rž  r/   r¾  r¿  ÚkwargsÚis_cross_attentionrÆ   Útgt_lenr\   Úquery_statesrÂ  Úcurr_past_key_valuesÚcurrent_statesÚ
key_statesÚvalue_statesÚ
proj_shapeÚsrc_lenÚattn_weightsÚ	reshape_qÚrel_pos_biasÚattn_weights_reshapedÚ
attn_probsÚattn_outputs                             r*   r�   zSpeechT5Attention.forwardh  s>  € ð .°TÐ9Ðà'×,Ñ,Ó.‰ˆˆW�að —{‘{ =Ó1°D·L±LÑ@ˆàˆ
ØÐ&Ü˜/Ô+>Ô?Ø,×7Ñ7×;Ñ;¸D¿N¹NÓK�
Ù%à+:×+PÑ+PÑ(à+:×+OÑ+OÑ(à'6Ð$á-?Ñ)À]ˆÙ /Ð"=Á*à-×4Ñ4°T·^±^ÑD×IÑIˆJØ/×6Ñ6°t·~±~ÑF×MÑM‰LàŸ™ ^Ó4ˆJØŸ;™; ~Ó6ˆLØ#Ÿ™¨¨b°$·.±.À$Ç-Á-ÓP×ZÑZÐ[\Ð^_Ó`ˆJØ'×,Ñ,¨S°"°d·n±nÀdÇmÁmÓT×^Ñ^Ð_`ÐbcÓdˆLàÐ*à+?×+FÑ+FÀzÐS_Ðae×aoÑaoÓ+pÑ(�
˜Lá%¬*°_ÔFYÔ*ZØAE�O×.Ñ.¨t¯~©~Ñ>à˜DŸN™NÑ*¨B°·±Ð>ˆ
Ø#×(Ñ(¨¨g°t·~±~ÀtÇ}Á}ÓU×_Ñ_Ð`aÐcdÓeˆØ+�|×+Ñ+¨ZÐ8ˆØ'�Z×'Ñ'¨Ð4ˆ
Ø+�|×+Ñ+¨ZÐ8ˆà—/‘/ !Ó$ˆÜ—y‘y ¨z×/CÑ/CÀAÀqÓ/IÓJˆà×ÑÓ 3¨¯©Ñ#7¸À'Ð"JÒJÜØ6¸¸d¿n¹nÑ8LÈgÐW^Ð7_Ð6`ð aØ ×%Ñ%Ó'Ð(ð*óð ð Ð$Ø$×/Ñ/Ó1×6Ñ6°s¸T¿^¹^Ñ7KÈRÐQU×Q^ÑQ^Ó_×iÑiÐjkÐmnÓoˆIÜ Ÿ<™<¨	°=×3JÑ3JÈ2ÈrÓ3RÓSˆLØ'×1Ñ1°!°QÓ7×<Ñ<Ø�d—n‘nÑ$ m×&8Ñ&8¸Ó&;¸]×=OÑ=OÐPQÓ=RóˆLð ˜LÑ(ˆLàÐ%Ø×"Ñ"Ó$¨¨a°¸'Ð(BÒBÜ Ø7¸¸aÀÈ'Ð8RÐ7SÐS\Ð]k×]pÑ]pÓ]rÐ\sÐtóð ð (×,Ñ,¨S°$·.±.À'È7ÓSÐVdÑdˆLØ'×,Ñ,¨S°4·>±>Ñ-AÀ7ÈGÓTˆLä—}‘}×,Ñ,¨\¸rÐ,ÓBˆáð
 %1×$5Ñ$5°c¸4¿>¹>È7ÐT[Ó$\Ð!Ø0×5Ñ5°c¸D¿N¹NÑ6JÈGÐU\Ó]‰Là$(Ð!ä—]‘]×*Ñ*¨<¸4¿<¹<ÐRV×R_ÑR_Ð*Ó`ˆ
ä—i‘i 
¨LÓ9ˆà×ÑÓ #¨¯©Ñ"6¸ÀÇÁÐ!OÒOÜØ2°C¸¿¹ÈÐRV×R_ÑR_Ð3`Ð2að bØ×$Ñ$Ó&Ð'ð)óð ð
 "×&Ñ& s¨D¯N©N¸GÀTÇ]Á]ÓSˆØ!×+Ñ+¨A¨qÓ1ˆð "×)Ñ)¨#¨w¸¿¹ÓGˆà—m‘m KÓ0ˆàÐ1Ð1Ð1r,   )r2   FTN)NNNNF)r„   r…   r†   rÑ   r<   r¸   rO   rm   rµ   rÔ   r
   Útupler�   r‡   rˆ   s   @r*   r±  r±  E  s  ø„ ñð !$Ø"'Ø Ø!%ñCàðCð ðCð ˜‘ð	Cð
 ˜4‘KðCð �T‰kðCð ˜$‘;õCð@ 15Ø(,Ø.2Ø-1Ø"'ñr2à—|‘|ðr2ð  Ÿ,™,¨Ñ-ðr2ð  ™ð	r2ð
 Ÿ™ tÑ+ðr2ð —|‘| dÑ*ðr2ð  ðr2ð 
ˆu�|‰|˜UŸ\™\¨DÑ0°%¸$±,Ð>Ñ	?÷r2r,   r±  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚSpeechT5FeedForwardc                 óÎ  •— t         ‰| �  «        t        j                  |j                  «      | _        t        j                  |j                  |«      | _        t        |j                  t        «      rt        |j                     | _        n|j                  | _        t        j                  ||j                  «      | _        t        j                  |j                  «      | _        y r~   )rl   rm   r   rö   Úactivation_dropoutÚintermediate_dropoutr)  rß   Úintermediate_denserÁ  Ú
hidden_actÚstrr	   Úintermediate_act_fnÚoutput_denseÚhidden_dropoutÚoutput_dropout)ry   rz   Úintermediate_sizer|   s      €r*   rm   zSpeechT5FeedForward.__init__Þ  s¡   ø€ Ü‰ÑÔÜ$&§J¡J¨v×/HÑ/HÓ$IˆÔ!ä"$§)¡)¨F×,>Ñ,>Ð@QÓ"RˆÔÜ�f×'Ñ'¬Ô-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÔ$äŸI™IÐ&7¸×9KÑ9KÓLˆÔÜ Ÿj™j¨×)>Ñ)>Ó?ˆÕr,   c                 ó°   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }|S r~   )rã  ræ  râ  rç  ré  r   s     r*   r�   zSpeechT5FeedForward.forwardë  sX   € Ø×/Ñ/°Ó>ˆØ×0Ñ0°Ó?ˆØ×1Ñ1°-Ó@ˆà×)Ñ)¨-Ó8ˆØ×+Ñ+¨MÓ:ˆØÐr,   rƒ   rˆ   s   @r*   rß  rß  Ý  s   ø„ ô@ör,   rß  c            	       óŒ   ‡ — e Zd Zdefˆ fd„Z	 	 	 d	dej                  dej                  dz  dej                  dz  defd„Zˆ xZ	S )
ÚSpeechT5EncoderLayerrz   c                 óÄ  •— t         ‰| �  «        t        |j                  |j                  |j
                  d¬«      | _        t        j                  |j                  «      | _
        t        j                  |j                  |j                  ¬«      | _        t        ||j                  «      | _        t        j                  |j                  |j                  ¬«      | _        y )NF)r²  r³  r÷   r´  r&  )rl   rm   r±  rß   Úencoder_attention_headsÚattention_dropoutÚ	attentionr   rö   rè  r÷   r�   r(  rŽ   rß  Úencoder_ffn_dimÚfeed_forwardÚfinal_layer_normr,  s     €r*   rm   zSpeechT5EncoderLayer.__init__ö  s¢   ø€ Ü‰ÑÔÜ*Ø×(Ñ(Ø×4Ñ4Ø×,Ñ,Øô	
ˆŒô —z‘z &×"7Ñ"7Ó8ˆŒÜŸ,™, v×'9Ñ'9¸v×?TÑ?TÔUˆŒÜ/°¸×8NÑ8NÓOˆÔÜ "§¡¨V×-?Ñ-?ÀV×EZÑEZÔ [ˆÕr,   Nr€   r/   r¾  r¿  c                 óè   — |}| j                  ||||¬«      \  }}| j                  |«      }||z   }| j                  |«      }|| j                  |«      z   }| j	                  |«      }|f}|r||fz  }|S )aÙ  
        Args:
            hidden_states (`torch.FloatTensor`):
                input to the layer of shape `(batch, seq_len, hidden_size)`
            attention_mask (`torch.FloatTensor`):
                attention mask of size `(batch, 1, tgt_len, src_len)` where padding elements are indicated by very
                large negative values.
            position_bias (`torch.FloatTensor`):
                relative position embeddings of size `(seq_len, seq_len, hidden_size // encoder_attention_heads)`
            output_attentions (`bool`, *optional*):
                Whether or not to return the attentions tensors of all attention layers. See `attentions` under
                returned tensors for more detail.
        )r€   r/   r¾  r¿  )rñ  r÷   rŽ   ró  rô  )ry   r€   r/   r¾  r¿  Úresidualr×  Úoutputss           r*   r�   zSpeechT5EncoderLayer.forward  s–   € ð( !ˆØ&*§n¡nØ'Ø)Ø'Ø/ð	 '5ó '
Ñ#ˆ�|ð Ÿ™ ]Ó3ˆØ  =Ñ0ˆàŸ™¨Ó6ˆØ%¨×(9Ñ(9¸-Ó(HÑHˆØ×-Ñ-¨mÓ<ˆà Ð"ˆáØ˜�Ñ&ˆGàˆr,   )NNF)
r„   r…   r†   r   rm   rµ   rÔ   rO   r�   r‡   rˆ   s   @r*   rí  rí  õ  s]   ø„ ð\˜~õ \ð  /3Ø-1Ø"'ñ(à—|‘|ð(ð Ÿ™ tÑ+ð(ð —|‘| dÑ*ð	(ð
  ÷(r,   rí  c                   óÌ   ‡ — e Zd Zddefˆ fd„Z	 	 	 	 	 	 ddej                  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dz  fd„Z	ˆ xZ
S )ÚSpeechT5DecoderLayerNrz   c                 óŒ  •— t         ‰| �  «        t        |j                  |j                  |j
                  d|¬«      | _        t        j                  |j                  «      | _
        t        j                  |j                  |j                  ¬«      | _        t        |j                  |j                  |j
                  d|¬«      | _        t        j                  |j                  |j                  ¬«      | _        t!        ||j"                  «      | _        t        j                  |j                  |j                  ¬«      | _        y )NT)r²  r³  r÷   r´  rµ  r&  )r÷   r´  rµ  )rl   rm   r±  rß   Údecoder_attention_headsrð  Ú	self_attnr   rö   rè  r÷   r�   r(  Úself_attn_layer_normÚencoder_attnÚencoder_attn_layer_normrß  Údecoder_ffn_dimró  rô  )ry   rz   rµ  r|   s      €r*   rm   zSpeechT5DecoderLayer.__init__/  sõ   ø€ Ü‰ÑÔÜ*Ø×(Ñ(Ø×4Ñ4Ø×,Ñ,ØØô
ˆŒô —z‘z &×"7Ñ"7Ó8ˆŒÜ$&§L¡L°×1CÑ1CÈ×I^ÑI^Ô$_ˆÔ!ä-Ø×ÑØ×*Ñ*Ø×,Ñ,ØØô
ˆÔô (*§|¡|°F×4FÑ4FÈF×LaÑLaÔ'bˆÔ$ä/°¸×8NÑ8NÓOˆÔÜ "§¡¨V×-?Ñ-?ÀV×EZÑEZÔ [ˆÕr,   r€   r/   Úencoder_hidden_statesÚencoder_attention_maskrž  r¿  Ú	use_cachec                 óv  — |}	| j                  ||||¬«      \  }}
| j                  |«      }|	|z   }| j                  |«      }d}|�B|}	| j                  |||||¬«      \  }}| j                  |«      }|	|z   }| j	                  |«      }|| j                  |«      z   }| j                  |«      }|f}|r||
|fz  }|S )aÊ  
        Args:
            hidden_states (`torch.FloatTensor`): input to the layer of shape `(batch, seq_len, hidden_size)`
            attention_mask (`torch.FloatTensor`): attention mask of size
                `(batch, 1, tgt_len, src_len)` where padding elements are indicated by very large negative values.
            encoder_hidden_states (`torch.FloatTensor`):
                cross attention input to the layer of shape `(batch, seq_len, hidden_size)`
            encoder_attention_mask (`torch.FloatTensor`): encoder attention mask of size
                `(batch, 1, tgt_len, src_len)` where padding elements are indicated by very large negative values.
            past_key_values (`Cache`): cached past key and value projection states
            output_attentions (`bool`, *optional*):
                Whether or not to return the attentions tensors of all attention layers. See `attentions` under
                returned tensors for more detail.
        )r€   rž  r/   r¿  N)r€   r½  r/   rž  r¿  )rü  r÷   rý  rþ  rÿ  ró  rô  )ry   r€   r/   r  r  rž  r¿  r  rÍ  rö  Úself_attn_weightsÚcross_attn_weightsr÷  s                r*   r�   zSpeechT5DecoderLayer.forwardG  s
  € ð2 !ˆð ,0¯>©>Ø'Ø+Ø)Ø/ð	 ,:ó ,
Ñ(ˆÐ(ð Ÿ™ ]Ó3ˆØ  =Ñ0ˆØ×1Ñ1°-Ó@ˆð "ÐØ Ð,Ø$ˆHà04×0AÑ0AØ+Ø!6Ø5Ø /Ø"3ð 1Bó 1Ñ-ˆMÐ-ð !ŸL™L¨Ó7ˆMØ$ }Ñ4ˆMØ ×8Ñ8¸ÓGˆMð &¨×(9Ñ(9¸-Ó(HÑHˆØ×-Ñ-¨mÓ<ˆà Ð"ˆáØÐ)Ð+=Ð>Ñ>ˆGàˆr,   r~   )NNNNFT)r„   r…   r†   r   rm   rµ   rÔ   r
   rO   r�   r‡   rˆ   s   @r*   rù  rù  .  s™   ø„ ñ\˜~õ \ð6 /3Ø59Ø6:Ø(,Ø).Ø!%ñ?à—|‘|ð?ð Ÿ™ tÑ+ð?ð  %Ÿ|™|¨dÑ2ð	?ð
 !&§¡¨tÑ 3ð?ð  ™ð?ð   $™;ð?ð ˜$‘;÷?r,   rù  c                   ó|   ‡ — e Zd ZU eed<   dZdZdZdZ e	j                  «       dej                  fˆ fd„«       Zˆ xZS )ÚSpeechT5PreTrainedModelrz   Úspeecht5r-   ÚaudioTÚmodulec           
      óÀ  •— t         ‰	| �  |«       t        |t        «      rŸt	        j
                  |j                  j                  ddt        j                  d|j                  j                  d   |j                  j                  z  z  «      z  ¬«       t	        j                  |j                  j                  d«       �nst        |t        «      �rgt	        j                  |j                   «       |j"                  |j$                  }}t'        j(                  ||«      }t'        j*                  d|«      j-                  d«      }t'        j.                  t'        j*                  d|dt&        j0                  ¬«      j3                  «       t        j4                  d«      |z   z  «      }t'        j6                  |j3                  «       |z  «      |dd…ddd…f<   t'        j8                  |j3                  «       |z  «      |dd…ddd…f<   |j-                  d«      }t	        j:                  |j<                  |«       �nût        |t>        «      rˆt        j                  d|j@                  jB                  z  «      }t	        jD                  |j@                  j                  | |¬«       t	        jD                  |j@                  j                  | |¬«       �nct        |tF        jH                  «      rŒt	        jJ                  |j                  «       |j                  ��t        j                  |jL                  |j                  |j                  d   z  z  «      }t	        jD                  |j                  | |¬«       n½t        |tN        «      r_|jQ                  |jR                  |jT                  z   |jV                  |jX                  «      }t	        j:                  |jZ                  |«       nNt        |t\        «      r>t	        j^                  |j`                  «       t	        j                  |jb                  «       te        |d	«      r t	        jD                  |jf                  «       yy)
zInitialize the weightsr   r¡   r   )ÚmeanÚstdrC   rñ   N)ÚaÚbr7  )4rl   Ú_init_weightsrÁ  rÖ   ÚinitÚnormal_ru   rÜ   r³   r›  ri   Úin_channelsÚ	constant_rk   rï   Úones_rû   r²   rø   rµ   rN   rQ   r¹   r¶   r·   r¸   r´   r»   r¼   Úcopy_rò   r$  r*  Úin_featuresr6  r   rq   Úkaiming_normal_rÙ   r›   r«   rœ   r¢   r�   rž   r¦   ÚSpeechT5HifiGanÚzeros_r  Úscaler¬   r7  )
ry   r  r²   rø   rò   rü   rý   Úkr¯   r|   s
            €r*   r  z%SpeechT5PreTrainedModel._init_weights‘  s  ø€ ô 	‰Ñ˜fÔ%Ü�fÔ=Ô>Ü�L‰LØ—‘×"Ñ"ØØœŸ	™	 ! v§{¡{×'>Ñ'>¸qÑ'AÀFÇKÁK×D[ÑD[Ñ'[Ñ"\Ó]Ñ]õô
 �N‰N˜6Ÿ;™;×+Ñ+¨QÖ/Ü˜Ô @ÕAÜ�J‰J�v—|‘|Ô$Ø!Ÿ:™: v§~¡~�ˆCÜ—‘˜W cÓ*ˆBÜ—|‘| A wÓ/×9Ñ9¸!Ó<ˆHÜ—y‘y¤§¡¨a°°a¼u¿{¹{Ô!K×!QÑ!QÓ!SÔX\×X`ÑX`ÐahÓXiÐloÑXoÐVpÑ!pÓqˆHÜŸ)™) H§N¡NÓ$4°xÑ$?Ó@ˆBŠq�!�$�Q�$ˆw‰KÜŸ)™) H§N¡NÓ$4°xÑ$?Ó@ˆBŠq�!�$�Q�$ˆw‰KØ—‘˜a“ˆBÜ�J‰J�v—y‘y "Ö%Ü˜Ô 9Ô:Ü—	‘	˜!˜f×/Ñ/×;Ñ;Ñ;Ó<ˆAÜ�M‰M˜&×+Ñ+×2Ñ2°q°b¸AÕ>Ü�M‰M˜&×+Ñ+×0Ñ0°Q°B¸!×<Ü˜¤§	¡	Ô*Ü× Ñ  §¡Ô/Ø�{‰{Ñ&Ü—I‘I˜fŸm™m¨v×/AÑ/AÀF×DVÑDVÐWXÑDYÑ/YÑZÓ[�Ü—‘˜fŸk™k¨a¨R°1Ö5Ü˜Ô EÔFØ ×.Ñ.Ø×$Ñ$ v§}¡}Ñ4°f×6JÑ6JÈF×L^ÑL^óˆKô �J‰J�v—~‘~ {Õ3Ü˜¤Ô0Ü�K‰K˜Ÿ™Ô$Ü�J‰J�v—|‘|Ô$ä�6Ð.Ô/Ü�M‰M˜&×2Ñ2Õ3ð 0r,   )r„   r…   r†   r   Ú__annotations__Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingrµ   rÓ   r   ÚModuler  r‡   rˆ   s   @r*   r  r  ‰  sE   ø… àÓØ"ÐØ$€OØÐØ&*Ð#à€U‡]�]ƒ_ð'4 B§I¡Iô '4ó ô'4r,   r  c                   ó˜   ‡ — e Zd ZdZdefˆ fd„Z	 	 	 	 ddej                  dej                  dz  de	dz  de	dz  d	e	dz  d
e
ez  fd„Zˆ xZS )ÚSpeechT5Encoderzu
    Transformer encoder consisting of *config.encoder_layers* layers. Each layer is a [`SpeechT5EncoderLayer`].
    rz   c                 ó  •— t         ‰| �  |«       t        j                  |j                  |j
                  ¬«      | _        t        j                  |j                  «      | _	        |j                  | _        t        j                  t        |j                  «      D �cg c]  }t        |«      ‘Œ c}«      | _        t#        |j                  |j$                  z  |j&                  «      | _        d| _        | j-                  «        y c c}w )Nr&  F)rl   rm   r   r�   rß   r(  rŽ   rö   rè  r÷   Úencoder_layerdropÚ	layerdropr  rM   Úencoder_layersrí  rf  r   rï  Úencoder_max_relative_positionr�  r  Ú	post_init)ry   rz   r\   r|   s      €r*   rm   zSpeechT5Encoder.__init__Á  sÃ   ø€ Ü‰Ñ˜Ô ÜŸ,™, v×'9Ñ'9¸v×?TÑ?TÔUˆŒÜ—z‘z &×"7Ñ"7Ó8ˆŒØ×1Ñ1ˆŒä—m‘mÌ5ÐQW×QfÑQfÓKgÖ$hÀaÔ%9¸&Õ%AÒ$hÓiˆŒäAØ×Ñ &×"@Ñ"@Ñ@À&×BfÑBfó 
ˆÔð ',ˆÔ#ð 	�‰Õùò %is   ÂDNr€   r/   r¿  Úoutput_hidden_statesÚreturn_dictr8   c                 óÌ  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }t	        | j                   ||¬«      }| j                  |«      }| j                  |«      }| j                  |«      }t        «       xs t        | «      }|rdnd}	|rdnd}
t        | j                  «      D ]d  \  }}|r|	|fz   }	d}| j                  r$t        j                  g «      }|| j                  k  }|r|r |||||¬«      }|d   }|rd}|sŒ\|
d   fz   }
Œf |r|	|fz   }	|st!        d	„ ||	|
fD «       «      S t#        ||	|
¬
«      S )a«  
        Args:
            hidden_states (`torch.FloatTensor` of shape `(batch_size, sequence_length, feature_size)`):
                Features extracted from the speech or text input by the encoder prenet.
            attention_mask (`torch.Tensor` of shape `(batch_size, sequence_length)`, *optional*):
                Mask to avoid performing convolution and attention on padding token indices. Mask values selected in
                `[0, 1]`:

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

                [What are attention masks?](../glossary#attention-mask)
            output_attentions (`bool`, *optional*):
                Whether or not to return the attentions tensors of all attention layers. See `attentions` under
                returned tensors for more detail.
            output_hidden_states (`bool`, *optional*):
                Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors
                for more detail.
            return_dict (`bool`, *optional*):
                Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
        N)rz   rp  r/   © F)r/   r¾  r¿  r   r]  r   c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wr~   r/  ©Ú.0Úvs     r*   ú	<genexpr>z*SpeechT5Encoder.forward.<locals>.<genexpr>$  s   è ø€ Òm˜qÐ_`Ñ_lœÑmùs   ‚Š©Úlast_hidden_stater€   Ú
attentions)rz   r¿  r,  r-  r   rŽ   r÷   r�  r   r   Ú	enumeraterf  r!  rµ   rH   r(  rÝ  r   )ry   r€   r/   r¿  r,  r-  rÍ  r¾  Úsynced_gpusÚall_hidden_statesÚall_self_attentionsÚidxÚencoder_layerÚskip_the_layerÚdropout_probabilityÚlayer_outputss                   r*   r�   zSpeechT5Encoder.forwardÒ  s£  € ð< 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆä2Ø—;‘;Ø'Ø)ô
ˆð Ÿ™¨Ó6ˆØŸ™ ]Ó3ˆà×,Ñ,¨]Ó;ˆä0Ó2ÒRÔ6LÈTÓ6Rˆá"6™B¸DÐÙ$5™b¸4Ðä"+¨D¯K©KÓ"8ò 	PÑˆC�Ù#Ø$5¸Ð8HÑ$HÐ!ð #ˆNØ�}Š}Ü&+§j¡j°£nÐ#Ø!4°t·~±~Ñ!E�á!¡[á -Ø!Ø#1Ø"/Ø&7ô	!�ð !.¨aÑ 0�áØ ,�â Ø&9¸]È1Ñ=MÐ<OÑ&OÑ#ð1	Pñ4  Ø 1°]Ð4DÑ DÐáÜÑm ]Ð4EÐGZÐ$[ÔmÓmÐmäØ+Ø+Ø*ô
ð 	
r,   ©NNNN©r„   r…   r†   rÑ   r   rm   rµ   r_  rÔ   rO   rÝ  r   r�   r‡   rˆ   s   @r*   r%  r%  ¼  sˆ   ø„ ñð˜~õ ð( /3Ø)-Ø,0Ø#'ñX
à×(Ñ(ðX
ð Ÿ™ tÑ+ðX
ð   $™;ð	X
ð
 # T™kðX
ð ˜D‘[ðX
ð 
�Ñ	 ÷X
r,   r%  c                   ó˜   ‡ — e Zd ZdZdefˆ fd„Z	 	 	 	 ddej                  dej                  dz  de	dz  de	dz  d	e	dz  d
e
ez  fd„Zˆ xZS )ÚSpeechT5EncoderWithSpeechPrenetzŒ
    Wrapper around SpeechT5Encoder that applies SpeechT5SpeechEncoderPrenet to convert the audio waveform data to
    hidden features.
    rz   c                 ó„   •— t         ‰| �  |«       t        |«      | _        t	        |«      | _        | j                  «        y r~   )rl   rm   r0  Úprenetr%  Úwrapped_encoderr+  r,  s     €r*   rm   z(SpeechT5EncoderWithSpeechPrenet.__init__3  ó5   ø€ Ü‰Ñ˜Ô Ü1°&Ó9ˆŒÜ.¨vÓ6ˆÔð 	�‰Õr,   Nr-   r/   r¿  r,  r-  r8   c                 ó\   — | j                  ||«      \  }}| j                  |||||¬«      }|S ©N)r€   r/   r¿  r,  r-  ©rF  rG  ©	ry   r-   r/   r¿  r,  r-  rÍ  r€   r÷  s	            r*   r�   z'SpeechT5EncoderWithSpeechPrenet.forward;  sD   € ð )-¯©°LÀ.Ó(QÑ%ˆ�~à×&Ñ&Ø'Ø)Ø/Ø!5Ø#ð 'ó 
ˆð ˆr,   rA  rB  rˆ   s   @r*   rD  rD  -  s�   ø„ ñð
˜~õ ð /3Ø)-Ø,0Ø#'ñà×'Ñ'ðð Ÿ™ tÑ+ðð   $™;ð	ð
 # T™kðð ˜D‘[ðð 
�Ñ	 ÷r,   rD  c                   ó¤   ‡ — e Zd ZdZdefˆ fd„Zd„ Zd„ Z	 	 	 	 ddej                  dej                  dz  d	edz  d
edz  dedz  deez  fd„Zˆ xZS )ÚSpeechT5EncoderWithTextPrenetz|
    Wrapper around SpeechT5Encoder that applies SpeechT5TextEncoderPrenet to convert the input_ids to hidden features.
    rz   c                 ó„   •— t         ‰| �  |«       t        |«      | _        t	        |«      | _        | j                  «        y r~   )rl   rm   r‘  rF  r%  rG  r+  r,  s     €r*   rm   z&SpeechT5EncoderWithTextPrenet.__init__V  ó5   ø€ Ü‰Ñ˜Ô Ü/°Ó7ˆŒÜ.¨vÓ6ˆÔð 	�‰Õr,   c                 ó6   — | j                   j                  «       S r~   ©rF  Úget_input_embeddingsr<  s    r*   rS  z2SpeechT5EncoderWithTextPrenet.get_input_embeddings^  ó   € Ø�{‰{×/Ñ/Ó1Ð1r,   c                 ó:   — | j                   j                  |«       y r~   ©rF  Úset_input_embeddings©ry   Úvalues     r*   rW  z2SpeechT5EncoderWithTextPrenet.set_input_embeddingsa  ó   € Ø�‰×(Ñ(¨Õ/r,   Nr-   r/   r¿  r,  r-  r8   c                 óT   — | j                  |«      }| j                  |||||¬«      }|S rJ  rK  rL  s	            r*   r�   z%SpeechT5EncoderWithTextPrenet.forwardd  s=   € ð Ÿ™ LÓ1ˆà×&Ñ&Ø'Ø)Ø/Ø!5Ø#ð 'ó 
ˆð ˆr,   rA  )r„   r…   r†   rÑ   r   rm   rS  rW  rµ   r_  rÔ   rO   rÝ  r   r�   r‡   rˆ   s   @r*   rN  rN  Q  s‹   ø„ ñð˜~õ ò2ò0ð /3Ø)-Ø,0Ø#'ñà×'Ñ'ðð Ÿ™ tÑ+ðð   $™;ð	ð
 # T™kðð ˜D‘[ðð 
�Ñ	 ÷r,   rN  c                   ó˜   ‡ — e Zd ZdZdefˆ fd„Z	 	 	 	 ddej                  dej                  dz  de	dz  de	dz  d	e	dz  d
e
ez  fd„Zˆ xZS )ÚSpeechT5EncoderWithoutPrenetúŒ
    This wrapper class is a helper class to correctly load pretrained checkpoints when used in combination with
    [`SpeechT5Model`].
    rz   c                 ód   •— t         ‰| �  |«       t        |«      | _        | j	                  «        y r~   )rl   rm   r%  rG  r+  r,  s     €r*   rm   z%SpeechT5EncoderWithoutPrenet.__init__€  ó)   ø€ Ü‰Ñ˜Ô Ü.¨vÓ6ˆÔð 	�‰Õr,   Nr-   r/   r¿  r,  r-  r8   c                 ó.   — | j                  |||||¬«      S rJ  )rG  )ry   r-   r/   r¿  r,  r-  rÍ  s          r*   r�   z$SpeechT5EncoderWithoutPrenet.forward‡  s+   € ð ×#Ñ#Ø&Ø)Ø/Ø!5Ø#ð $ó 
ð 	
r,   rA  rB  rˆ   s   @r*   r]  r]  z  s�   ø„ ñð
˜~õ ð /3Ø)-Ø,0Ø#'ñ
à×'Ñ'ð
ð Ÿ™ tÑ+ð
ð   $™;ð	
ð
 # T™kð
ð ˜D‘[ð
ð 
�Ñ	 ÷
r,   r]  c                   óø   ‡ — e Zd ZdZdefˆ fd„Z	 	 	 	 	 	 	 	 	 ddej                  dz  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
dz  de
dz  de
dz  deez  fd„Zˆ xZS )ÚSpeechT5Decoderzt
    Transformer decoder consisting of *config.decoder_layers* layers. Each layer is a [`SpeechT5DecoderLayer`]
    rz   c           	      ó
  •— t         ‰| �  |«       |j                  | _        t	        j
                  t        |j                  «      D �cg c]  }t        ||¬«      ‘Œ c}«      | _	        d| _
        | j                  «        y c c}w )N)rµ  F)rl   rm   Údecoder_layerdropr(  r   r  rM   Údecoder_layersrù  rf  r  r+  rl  s      €r*   rm   zSpeechT5Decoder.__init__ž  sh   ø€ Ü‰Ñ˜Ô Ø×1Ñ1ˆŒä—m‘mÔX]Ð^d×^sÑ^sÓXtÖ$uÐSTÔ%9¸&ÈAÖ%NÒ$uÓvˆŒà&+ˆÔ#ð 	�‰Õùò %vs   ÁB Nr€   r/   r  r  rž  r  r¿  r,  r-  r8   c
           
      óØ  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }|	�|	n| j                   j                  }	| j
                  r%| j                  r|rt        j                  d«       d}|r6|€4t        t        | j                   ¬«      t        | j                   ¬«      «      }t        | j                   |||¬«      }|�|�t        | j                   |||¬«      }t        «       xs t        | «      }|rdnd}|rdnd}|r|�dnd}t        | j                   «      D ]p  \  }}|r||fz   }d}| j                  r$t#        j$                  g «      }|| j&                  k  }|r|sŒE ||||||||¬«      }|d	   }|sŒ\||d
   fz   }|€Œh||d   fz   }Œr |r||fz   }|	st)        d„ |||||fD «       «      S t+        |||||¬«      S )aQ  
        Args:
            hidden_states (`torch.FloatTensor` of shape `(batch_size, sequence_length, feature_size)`):
                Features extracted from the speech or text input by the decoder prenet.
            attention_mask (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
                Mask to avoid performing attention on padding token indices. Mask values selected in `[0, 1]`:

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

                [What are attention masks?](../glossary#attention-mask)
            encoder_hidden_states (`torch.FloatTensor` of shape `(batch_size, encoder_sequence_length, hidden_size)`, *optional*):
                Sequence of hidden-states at the output of the last layer of the encoder. Used in the cross-attention
                of the decoder.
            encoder_attention_mask (`torch.LongTensor` of shape `(batch_size, encoder_sequence_length)`, *optional*):
                Mask to avoid performing cross-attention on padding tokens indices of encoder input_ids. Mask values
                selected in `[0, 1]`:

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

                [What are attention masks?](../glossary#attention-mask)
            past_key_values (`Cache`, *optional*, returned when `use_cache=True` is passed or when `config.use_cache=True`):
                It is a [`~cache_utils.Cache`] instance. For more details, see our [kv cache guide](https://huggingface.co/docs/transformers/en/kv_cache).

                Contains pre-computed hidden-states (key and values in the self-attention blocks and in the
                cross-attention blocks) that can be used (see `past_key_values` input) to speed up sequential decoding.

                If `past_key_values` are used, the user can optionally input only the last `decoder_input_ids` (those
                that don't have their past key value states given to this model) of shape `(batch_size, 1)` instead of
                all `decoder_input_ids` of shape `(batch_size, sequence_length)`.
            inputs_embeds (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`, *optional*):
                Optionally, instead of passing `input_ids` you can choose to directly pass an embedded representation.
                This is useful if you want more control over how to convert `input_ids` indices into associated vectors
                than the model's internal embedding lookup matrix.
            output_attentions (`bool`, *optional*):
                Whether or not to return the attentions tensors of all attention layers. See `attentions` under
                returned tensors for more detail.
            output_hidden_states (`bool`, *optional*):
                Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors
                for more detail.
            return_dict (`bool`, *optional*):
                Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
        NzZ`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`...F)rz   )rz   rp  r/   rž  )rz   rp  r/   r  r/  )r  rž  r¿  r  r   r   r¡   c              3   ó$   K  — | ]  }|�|–— Œ
 y ­wr~   r/  r1  s     r*   r4  z*SpeechT5Decoder.forward.<locals>.<genexpr>*  s   è ø€ ò àØ�=ô ñùs   ‚)r6  rž  r€   r7  Úcross_attentions)rz   r¿  r,  r  r-  r  r!  ÚloggerÚwarning_oncer   r   r   r   r   r   r8  rf  rµ   rH   r(  rÝ  r   )ry   r€   r/   r  r  rž  r  r¿  r,  r-  rÍ  r9  r:  r;  Úall_cross_attentionsr<  Údecoder_layerr>  r?  r@  s                       r*   r�   zSpeechT5Decoder.forward©  sU  € ðr 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð "+Ð!6‘I¸D¿K¹K×<QÑ<Qˆ	Ø%0Ð%<‘kÀ$Ç+Á+×BYÑBYˆà×&Ò&¨4¯=ª=ÙÜ×#Ñ#Øpôð "�	á˜Ð0Ü1´,ÀdÇkÁkÔ2RÔT`Ðhl×hsÑhsÔTtÓuˆOä+Ø—;‘;Ø'Ø)Ø+ô	
ˆð !Ð,Ð1GÐ1SÜ%>Ø—{‘{Ø+Ø5Ø&;ô	&Ð"ô 1Ó2ÒRÔ6LÈTÓ6Rˆñ #7™B¸DÐÙ$5™b¸4ÐÙ&7Ð<QÐ<]™rÐdhÐä"+¨D¯K©KÓ"8ò 	VÑˆC�Ù#Ø$5¸Ð8HÑ$HÐ!ð #ˆNØ�}Š}Ü&+§j¡j°£nÐ#Ø!4°t·~±~Ñ!E�Ù¡kØá)ØØØ%Ø'=Ø /Ø"3Ø#ôˆMð *¨!Ñ,ˆMÚ Ø&9¸]È1Ñ=MÐ<OÑ&OÐ#à(Ñ4Ø+?À=ÐQRÑCSÐBUÑ+UÑ(ð5	Vñ8  Ø 1°]Ð4DÑ DÐáÜñ à'¨Ð:KÐM`ÐbvÐwôó ð ô 9Ø+Ø+Ø+Ø*Ø1ô
ð 	
r,   ©	NNNNNNNNN©r„   r…   r†   rÑ   r   rm   rµ   r_  r^  r
   rO   rÝ  r   r�   r‡   rˆ   s   @r*   rc  rc  ™  sé   ø„ ñð	˜~õ 	ð 37Ø26Ø:>Ø:>Ø(,Ø!%Ø)-Ø,0Ø#'ñM
à×(Ñ(¨4Ñ/ðM
ð ×(Ñ(¨4Ñ/ðM
ð  %×0Ñ0°4Ñ7ð	M
ð
 !&× 0Ñ 0°4Ñ 7ðM
ð  ™ðM
ð ˜$‘;ðM
ð   $™;ðM
ð # T™kðM
ð ˜D‘[ðM
ð 
Ð:Ñ	:÷M
r,   rc  c                   ó  ‡ — e Zd ZdZdefˆ fd„Z	 	 	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  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dz  dedz  dedz  deez  fd„Zˆ xZS )ÚSpeechT5DecoderWithSpeechPrenetzˆ
    Wrapper around SpeechT5Decoder that applies SpeechT5SpeechDecoderPrenet to convert log-mel filterbanks to hidden
    features.
    rz   c                 ó„   •— t         ‰| �  |«       t        |«      | _        t	        |«      | _        | j                  «        y r~   )rl   rm   ra  rF  rc  Úwrapped_decoderr+  r,  s     €r*   rm   z(SpeechT5DecoderWithSpeechPrenet.__init__?  rH  r,   Nr-   r/   r  r  rs  rž  r  r¿  r,  r-  r8   c                 ó^   — | j                  ||«      }| j                  ||||||||	|
¬«	      }|S ©N)	r€   r/   r  r  rž  r  r¿  r,  r-  ©rF  rs  )ry   r-   r/   r  r  rs  rž  r  r¿  r,  r-  rÍ  Údecoder_hidden_statesr÷  s                 r*   r�   z'SpeechT5DecoderWithSpeechPrenet.forwardG  sM   € ð !%§¡¨LÐ:LÓ MÐà×&Ñ&Ø/Ø)Ø"7Ø#9Ø+ØØ/Ø!5Ø#ð 'ó 

ˆð ˆr,   )
NNNNNNNNNN)r„   r…   r†   rÑ   r   rm   rµ   r_  r^  rÔ   r
   rO   rÝ  r   r�   r‡   rˆ   s   @r*   rq  rq  9  sô   ø„ ñð
˜~õ ð 26Ø26Ø:>Ø:>Ø26Ø(,Ø!%Ø)-Ø,0Ø#'ñà×'Ñ'¨$Ñ.ðð ×(Ñ(¨4Ñ/ðð  %×0Ñ0°4Ñ7ð	ð
 !&× 0Ñ 0°4Ñ 7ðð "ŸL™L¨4Ñ/ðð  ™ðð ˜$‘;ðð   $™;ðð # T™kðð ˜D‘[ðð 
Ð:Ñ	:÷r,   rq  c                   ó  ‡ — e Zd ZdZdefˆ fd„Zd„ Zd„ Z	 	 	 	 	 	 	 	 	 ddej                  dz  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dz  dedz  dedz  deez  fd„Zˆ xZS )ÚSpeechT5DecoderWithTextPrenetz{
    Wrapper around SpeechT5Decoder that applies SpeechT5TextDecoderPrenet to convert input tokens to hidden features.
    rz   c                 ó„   •— t         ‰| �  |«       t        |«      | _        t	        |«      | _        | j                  «        y r~   )rl   rm   r˜  rF  rc  rs  r+  r,  s     €r*   rm   z&SpeechT5DecoderWithTextPrenet.__init__k  rP  r,   c                 ó6   — | j                   j                  «       S r~   rR  r<  s    r*   rS  z2SpeechT5DecoderWithTextPrenet.get_input_embeddingss  rT  r,   c                 ó:   — | j                   j                  |«       y r~   rV  rX  s     r*   rW  z2SpeechT5DecoderWithTextPrenet.set_input_embeddingsv  rZ  r,   Nr-   r/   r  r  rž  r  r¿  r,  r-  r8   c
                 óf   — | j                  |||«      \  }}| j                  |||||||||	¬«	      }|S ru  rv  )ry   r-   r/   r  r  rž  r  r¿  r,  r-  rÍ  rw  r÷  s                r*   r�   z%SpeechT5DecoderWithTextPrenet.forwardy  sT   € ð 15·±¸LÈ.ÐZiÓ0jÑ-Ð˜~à×&Ñ&Ø/Ø)Ø"7Ø#9Ø+ØØ/Ø!5Ø#ð 'ó 

ˆð ˆr,   rn  )r„   r…   r†   rÑ   r   rm   rS  rW  rµ   r_  r^  r
   rO   rÝ  r   r�   r‡   rˆ   s   @r*   ry  ry  f  sè   ø„ ñð˜~õ ò2ò0ð
 26Ø26Ø:>Ø:>Ø(,Ø!%Ø)-Ø,0Ø#'ñà×'Ñ'¨$Ñ.ðð ×(Ñ(¨4Ñ/ðð  %×0Ñ0°4Ñ7ð	ð
 !&× 0Ñ 0°4Ñ 7ðð  ™ðð ˜$‘;ðð   $™;ðð # T™kðð ˜D‘[ðð 
Ð:Ñ	:÷r,   ry  c                   óø   ‡ — e Zd ZdZdefˆ fd„Z	 	 	 	 	 	 	 	 	 ddej                  dz  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
dz  de
dz  de
dz  deez  fd„Zˆ xZS )ÚSpeechT5DecoderWithoutPrenetr^  rz   c                 ód   •— t         ‰| �  |«       t        |«      | _        | j	                  «        y r~   )rl   rm   rc  rs  r+  r,  s     €r*   rm   z%SpeechT5DecoderWithoutPrenet.__init__�  r`  r,   Nr-   r/   r  r  rž  r  r¿  r,  r-  r8   c
                 ó:   — | j                  |||||||||	¬«	      }|S ru  )rs  )ry   r-   r/   r  r  rž  r  r¿  r,  r-  rÍ  r÷  s               r*   r�   z$SpeechT5DecoderWithoutPrenet.forward¤  s;   € ð ×&Ñ&Ø&Ø)Ø"7Ø#9Ø+ØØ/Ø!5Ø#ð 'ó 

ˆð ˆr,   rn  ro  rˆ   s   @r*   r  r  —  sÞ   ø„ ñð
˜~õ ð 26Ø26Ø:>Ø:>Ø(,Ø!%Ø)-Ø,0Ø#'ñà×'Ñ'¨$Ñ.ðð ×(Ñ(¨4Ñ/ðð  %×0Ñ0°4Ñ7ð	ð
 !&× 0Ñ 0°4Ñ 7ðð  ™ðð ˜$‘;ðð   $™;ðð # T™kðð ˜D‘[ðð 
Ð:Ñ	:÷r,   r  c                   ó¦   ‡ — e Zd ZdZdefˆ fd„Zdej                  dej                  dej                  dej                  fd„Z
d	„ Zed
„ «       Zˆ xZS )Ú$SpeechT5GuidedMultiheadAttentionLosszè
    Guided attention loss from the paper [Efficiently Trainable Text-to-Speech System Based on Deep Convolutional
    Networks with Guided Attention](https://huggingface.co/papers/1710.08969), adapted for multi-head attention.
    rz   c                 óf   •— t         ‰| �  «        |j                  | _        |j                  | _        y r~   )rl   rm   Úguided_attention_loss_sigmaÚsigmaÚguided_attention_loss_scaler  r,  s     €r*   rm   z-SpeechT5GuidedMultiheadAttentionLoss.__init__Å  s(   ø€ Ü‰ÑÔØ×7Ñ7ˆŒ
Ø×7Ñ7ˆ�
r,   r7  Úinput_masksÚoutput_masksr8   c                 óF  — | j                  |||j                  «      }|j                  d«      |j                  d«      z  }|j                  |j                  «      j                  d«      }||z  }t	        j
                  |j                  |«      «      }| j                  |z  S )aY  
        Compute the attention loss.

        Args:
            attentions (`torch.FloatTensor` of shape `(batch_size, layers * heads, output_sequence_length, input_sequence_length)`):
                Batch of multi-head attention weights
            input_masks (`torch.BoolTensor` of shape `(batch_size, input_sequence_length)`):
                Input attention mask as booleans.
            output_masks (`torch.BoolTensor` of shape `(batch_size, output_sequence_length)`):
                Target attention mask as booleans.

        Returns:
            `torch.Tensor` with the loss value
        r#   r�   r   )Ú_make_guided_attention_masksr¨   r¹   r­   rµ   r  Úmasked_selectr  )ry   r7  rˆ  r‰  Úguided_attn_masksÚmasksÚlossesÚlosss           r*   r�   z,SpeechT5GuidedMultiheadAttentionLoss.forwardÊ  s‘   € ð" !×=Ñ=¸kÈ<ÐYc×YjÑYjÓkÐØ×&Ñ& rÓ*¨[×-BÑ-BÀ2Ó-FÑFˆØ—‘˜×*Ñ*Ó+×5Ñ5°aÓ8ˆà" ZÑ/ˆÜ�z‰z˜&×.Ñ.¨uÓ5Ó6ˆØ�z‰z˜DÑ Ð r,   c                 ór  — |j                  d«      }|j                  d«      }t        j                  t        |«      |j                  d   |j                  d   f|¬«      }t        t        ||«      «      D ]0  \  }\  }}	| j                  ||	| j                  |«      ||d |	…d |…f<   Œ2 |j                  d«      S )Nr#   r   rH  )
rK   rµ   rN   rR   r%   r8  rS  Ú_make_guided_attention_maskr†  r¹   )
ry   rˆ  r‰  r¨   r]   rL  r�  r<  ÚilenÚolens
             r*   r‹  zASpeechT5GuidedMultiheadAttentionLoss._make_guided_attention_masksã  sÄ   € Ø#Ÿ™¨Ó+ˆØ%×)Ñ)¨"Ó-ˆä!ŸK™K¬¨[Ó)9¸<×;MÑ;MÈaÑ;PÐR]×RcÑRcÐdeÑRfÐ(gÐpvÔwÐä!*¬3¨}¸nÓ+MÓ!Nò 	tÑˆC‘�$˜Ø37×3SÑ3SÐTXÐZ^Ð`d×`jÑ`jÐlrÓ3sÐ˜c 5 D 5¨%¨4¨%Ð/Ò0ð	tð !×*Ñ*¨1Ó-Ð-r,   c                 ó(  — t        j                  t        j                  | |¬«      t        j                  ||¬«      d¬«      \  }}|j                  «       |z  }|j                  «       | z  }dt        j                  ||z
  dz   d|dz  z  z  «      z
  S )NrH  Úxy)Úindexingrõ   r¡   )rµ   ÚmeshgridrQ   r¸   r¶   )r>   Úoutput_lengthr†  r¨   Úgrid_yÚgrid_xs         r*   r’  z@SpeechT5GuidedMultiheadAttentionLoss._make_guided_attention_maskî  s‚   € äŸ™Ü�L‰L˜¨fÔ5Ü�L‰L˜¨vÔ6Øô
‰ˆ�ð
 —‘“ -Ñ/ˆØ—‘“ ,Ñ.ˆØ”U—Y‘Y &¨6¡/°aÑ!7Ð8¸AÀÈÁ¹NÑKÓLÑLÐLr,   )r„   r…   r†   rÑ   r   rm   rµ   r_  Ú
BoolTensorrÔ   r�   r‹  rÒ   r’  r‡   rˆ   s   @r*   rƒ  rƒ  ¿  sj   ø„ ñð
8˜~õ 8ð
!Ø×+Ñ+ð!Ø:?×:JÑ:Jð!ØZ_×ZjÑZjð!à	�‰ó!ò2	.ð ñMó ôMr,   rƒ  c                   óâ   ‡ — e Zd ZdZdefˆ fd„Z	 ddej                  dej                  dej                  dej                  d	ej                  d
ej                  dz  dej                  fd„Z
ˆ xZS )ÚSpeechT5SpectrogramLossz;
    Loss computation used by SpeechT5ForTextToSpeech.
    rz   c                 ó(  •— t         ‰| �  «        |j                  | _        |j                  | _        |j                  | _        t        «       | _        t        t        j                  d«      ¬«      | _
        | j                  rt        |«      | _        y y )Ng      @)Ú
pos_weight)rl   rm   Úuse_guided_attention_lossÚguided_attention_loss_num_headsr.   r   Úl1_criterionr   rµ   rú   Úbce_criterionrƒ  Úattn_criterionr,  s     €r*   rm   z SpeechT5SpectrogramLoss.__init__ÿ  ss   ø€ Ü‰ÑÔØ)/×)IÑ)IˆÔ&Ø/5×/UÑ/UˆÔ,Ø &× 7Ñ 7ˆÔä"›HˆÔÜ.¼%¿,¹,ÀsÓ:KÔLˆÔà×)Ò)Ü"FÀvÓ"NˆDÕð *r,   Nr/   r‹  rŒ  r�  Úlabelsri  r8   c           	      óV  — |dk7  }|j                  |«      }|j                  |«      }|j                  |«      }| j                  ||«      | j                  ||«      z   }|d d …d d …df   }	t        j                  |	 dz  t        j                  |	j                  d«      d«      j                  |	j                  «      gd¬«      }
|
d d …dd …f   j                  |	«      }
|j                  |	«      }| j                  ||
«      }||z   }| j                  r“t        j                  |D �cg c]  }|d d …d | j                  …f   ‘Œ c}d¬«      }|dk(  }|d d …d d …df   }| j                  dkD  r#|d d …| j                  dz
  d | j                  …f   }| j                  |||«      }||z  }|S c c}w )Nr1   r   rõ   r   r±   )rŒ  r£  rµ   rº   rT   rÃ   r­   r¨   r¤  r¡  r¢  r.   r¥  )ry   r/   r‹  rŒ  r�  r¦  ri  rD  Úl1_lossrŽ  Ústop_labelsÚbce_lossr�  ÚxÚattnrˆ  r‰  Ú	attn_losss                     r*   r�   zSpeechT5SpectrogramLoss.forward  s½  € ð  Ñ'ˆð ×%Ñ% lÓ3ˆØ!7×!EÑ!EÀlÓ!SÐØ 5× CÑ CÀLÓ QÐð ×#Ñ#Ð$9¸6ÓBÀT×EVÑEVÐWmÐouÓEvÑvˆð šQ¢ 1˜WÑ%ˆÜ—i‘i % ¨#¡¬u¯z©z¸%¿*¹*ÀQ»-ÈÓ/K×/NÑ/NÈuÏ|É|Ó/\Ð ]ÐcdÔeˆØ!¢! Q¡R %Ñ(×6Ñ6°uÓ=ˆØ×%Ñ% eÓ,ˆð ×%Ñ% f¨kÓ:ˆð ˜Ñ!ˆð ×)Ò)Ü—9‘9ÐTdÖeÈq˜a¢Ð#I T×%IÑ%IÐ#IÐ IÓJÒeÐklÔmˆDØ(¨AÑ-ˆKØ'ªª1¨a¨Ñ0ˆLØ×$Ñ$ qÒ(Ø+ªA¨t×/DÑ/DÀqÑ/HÐ/aÈD×LaÑLaÐ/aÐ,aÑb�Ø×+Ñ+¨D°+¸|ÓLˆIØ�IÑˆDàˆùò fs   Ä$F&r~   )r„   r…   r†   rÑ   r   rm   rµ   r^  r_  rÔ   r�   r‡   rˆ   s   @r*   rž  rž  ú  s‘   ø„ ñð
O˜~õ 
Oð& 6:ñ)à×(Ñ(ð)ð !&× 1Ñ 1ð)ð  %×0Ñ0ð	)ð
 ×!Ñ!ð)ð ×!Ñ!ð)ð  ×+Ñ+¨dÑ2ð)ð 
�‰÷)r,   rž  zv
    The bare SpeechT5 Encoder-Decoder Model outputting raw hidden-states without any specific pre- or post-nets.
    ©Úcustom_introc                   ó¸  ‡ — e Zd Z	 	 ddedej
                  dz  dej
                  dz  fˆ fd„Zd„ Zd„ Zd„ Z	e
	 	 	 	 	 	 	 	 	 	 	 dd	ej                  dz  d
ej                  dz  dej                  dz  dej                  dz  deeej                        dz  dedz  dedz  dej                  dz  dedz  dedz  dedz  deej                     ez  fd„«       Zˆ xZS )ÚSpeechT5ModelNrz   ÚencoderÚdecoderc                 ó¢   •— t         ‰| �  |«       || _        |€t        |«      n|| _        |€t        |«      n|| _        | j                  «        y)z·
        encoder (`PreTrainedModel`, *optional*):
            The encoder model to use.
        decoder (`PreTrainedModel`, *optional*):
            The decoder model to use.
        N)rl   rm   rz   r]  r²  r  r³  r+  )ry   rz   r²  r³  r|   s       €r*   rm   zSpeechT5Model.__init__=  sM   ø€ ô 	‰Ñ˜Ô ØˆŒØ?F¸Ô3°FÔ;ÐT[ˆŒØ?F¸Ô3°FÔ;ÐT[ˆŒð 	�‰Õr,   c                 óÞ   — t        | j                  t        «      r| j                  j                  «       S t        | j                  t
        «      r| j                  j                  «       S t        ‚r~   )rÁ  r²  rN  rS  r³  ry  ÚNotImplementedErrorr<  s    r*   rS  z"SpeechT5Model.get_input_embeddingsQ  sL   € Ü�d—l‘lÔ$AÔBØ—<‘<×4Ñ4Ó6Ð6Ü�d—l‘lÔ$AÔBØ—<‘<×4Ñ4Ó6Ð6Ü!Ð!r,   c                 óÚ   — t        | j                  t        «      r| j                  j                  |«       t        | j                  t
        «      r| j                  j                  |«       y y r~   )rÁ  r²  rN  rW  r³  ry  rX  s     r*   rW  z"SpeechT5Model.set_input_embeddingsX  sJ   € Ü�d—l‘lÔ$AÔBØ�L‰L×-Ñ-¨eÔ4Ü�d—l‘lÔ$AÔBØ�L‰L×-Ñ-¨eÕ4ð Cr,   c                 ó‚   — t        | j                  t        «      r%| j                  j                  j	                  «        yy©z¨
        Calling this function will disable the gradient computation for the feature encoder so that its parameter will
        not be updated during training.
        N)rÁ  r²  rD  rF  r=  r<  s    r*   r=  z$SpeechT5Model.freeze_feature_encoder^  s/   € ô
 �d—l‘lÔ$CÔDØ�L‰L×Ñ×6Ñ6Õ8ð Er,   r-   r/   Údecoder_input_valuesÚdecoder_attention_maskÚencoder_outputsrž  r  rs  r¿  r,  r-  r8   c                 ó”  — |	�|	n| j                   j                  }	|
�|
n| j                   j                  }
|�|n| j                   j                  }|�|n| j                   j                  }|€| j                  |||	|
|¬«      }nI|rGt        |t        «      s7t        |d   t        |«      dkD  r|d   ndt        |«      dkD  r|d   nd¬«      }|�Qt        | j
                  t        «      r7| j
                  j                  j                  |d   j                  d   |«      }n|}t        | j                  t        «      rd|i}ni } | j                  d
|||d   ||||	|
|dœ	|¤Ž}|s||z   S t        |j                   |j"                  |j$                  |j&                  |j(                  |j                   |j$                  |j&                  ¬	«      S )a‹  
        input_values (`torch.Tensor` of shape `(batch_size, sequence_length)`):
            Depending on which encoder is being used, the `input_values` are either: float values of the input raw
            speech waveform, or indices of input sequence tokens in the vocabulary, or hidden states.
        decoder_input_values (`torch.Tensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Depending on which decoder is being used, the `decoder_input_values` are either: float values of log-mel
            filterbank features extracted from the raw speech waveform, or indices of decoder input sequence tokens in
            the vocabulary, or hidden states.
        decoder_attention_mask (`torch.LongTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Default behavior: generate a tensor that ignores pad tokens in `decoder_input_values`. Causal mask will
            also be used by default.

            If you want to change padding behavior, you should read [`SpeechT5Decoder._prepare_decoder_attention_mask`]
            and modify to your needs. See diagram 1 in [the paper](https://huggingface.co/papers/1910.13461) for more
            information on the default strategy.
        speaker_embeddings (`torch.FloatTensor` of shape `(batch_size, config.speaker_embedding_dim)`, *optional*):
            Tensor containing the speaker embeddings.
        N)r-   r/   r¿  r,  r-  r   r   r¡   r5  rs  )	r-   r/   r  r  rž  r  r¿  r,  r-  )r6  rž  rw  Údecoder_attentionsri  Úencoder_last_hidden_stater  Úencoder_attentionsr/  )rz   r¿  r,  r  r-  r²  rÁ  r   rR   rD  rF  r@  r%   r³  rq  r   r6  rž  r€   r7  ri  )ry   r-   r/   rº  r»  r¼  rž  r  rs  r¿  r,  r-  rÍ  r  Údecoder_argsÚdecoder_outputss                   r*   r�   zSpeechT5Model.forwardf  sñ  € ðD 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð "+Ð!6‘I¸D¿K¹K×<QÑ<Qˆ	Ø%0Ð%<‘kÀ$Ç+Á+×BYÑBYˆð Ð"Ø"Ÿl™lØ)Ø-Ø"3Ø%9Ø'ð +ó ‰Oñ ¤¨O¼_Ô!MÜ-Ø"1°!Ñ"4Ü47¸Ó4HÈ1Ò4L˜o¨aÒ0ÐRVÜ14°_Ó1EÈÒ1I˜?¨1Ò-ÈtôˆOð Ð%¬*°T·\±\ÔCbÔ*cØ%)§\¡\×%8Ñ%8×%[Ñ%[Ø Ñ"×(Ñ(¨Ñ+¨^ó&Ñ"ð &4Ð"ä�d—l‘lÔ$CÔDØ0Ð2DÐE‰LàˆLà&˜$Ÿ,™,ð 
Ø-Ø1Ø"1°!Ñ"4Ø#9Ø+ØØ/Ø!5Ø#ñ
ð ñ
ˆñ Ø" _Ñ4Ð4ä!Ø-×?Ñ?Ø+×;Ñ;Ø"1×"?Ñ"?Ø.×9Ñ9Ø,×=Ñ=Ø&5×&GÑ&GØ"1×"?Ñ"?Ø.×9Ñ9ô	
ð 		
r,   r]  ©NNNNNNNNNNN)r„   r…   r†   r   r   r#  rm   rS  rW  r=  r   rµ   rÔ   r^  rÝ  r_  r
   rO   r   r�   r‡   rˆ   s   @r*   r±  r±  7  su  ø„ ð %)Ø$(ñ	àðð —‘˜TÑ!ðð —‘˜TÑ!õ	ò("ò5ò9ð ð -1Ø26Ø48Ø:>ØBFØ(,Ø!%Ø7;Ø)-Ø,0Ø#'ñ_
à—l‘l TÑ)ð_
ð ×(Ñ(¨4Ñ/ð_
ð $Ÿl™l¨TÑ1ð	_
ð
 !&× 0Ñ 0°4Ñ 7ð_
ð ˜u U×%6Ñ%6Ñ7Ñ8¸4Ñ?ð_
ð  ™ð_
ð ˜$‘;ð_
ð "×-Ñ-°Ñ4ð_
ð   $™;ð_
ð # T™kð_
ð ˜D‘[ð_
ð 
ˆu× Ñ Ñ	!Ð$6Ñ	6ò_
ó ô_
r,   r±  zB
    SpeechT5 Model with a speech encoder and a text decoder.
    c                   ód  ‡ — e Zd ZddiZdefˆ fd„Zd„ Zd„ Zd„ Ze		 	 	 	 	 	 	 	 	 	 	 dd	e
j                  dz  d
e
j                  dz  de
j                  dz  de
j                  dz  deee
j                        dz  dedz  dedz  dedz  dedz  dedz  de
j                  dz  deez  fd„«       Zˆ xZS )ÚSpeechT5ForSpeechToTextz#text_decoder_postnet.lm_head.weightz+speecht5.decoder.prenet.embed_tokens.weightrz   c                 óþ   •— t         ‰| �  |«       |j                  €t        d| j                  › d�«      ‚t        |«      }t        |«      }t        |||«      | _        t        |«      | _
        | j                  «        y )NúYou are trying to instantiate a    with a configuration that does not define the vocabulary size of the language model head. Please instantiate the model as follows: `SpeechT5ForSpeechToText.from_pretrained(..., vocab_size=vocab_size)`. or define `vocab_size` of your model's configuration.)rl   rm   r“  r'   r|   rD  ry  r±  r	  r¤  Útext_decoder_postnetr+  )ry   rz   Úspeech_encoderÚtext_decoderr|   s       €r*   rm   z SpeechT5ForSpeechToText.__init__Ñ  s   ø€ Ü‰Ñ˜Ô à×ÑÐ$ÜØ0°·±Ð0@ð A/ð /óð ô 9¸Ó@ˆÜ4°VÓ<ˆÜ% f¨n¸lÓKˆŒä$>¸vÓ$FˆÔ!ð 	�‰Õr,   c                 óT   — | j                  «       j                  j                  «        yr¹  ©Úget_encoderrF  r=  r<  s    r*   r=  z.SpeechT5ForSpeechToText.freeze_feature_encoderå  ó   € ð
 	×ÑÓ×!Ñ!×8Ñ8Õ:r,   c                 ó6   — | j                   j                  «       S r~   )rÈ  r«  r<  s    r*   r«  z-SpeechT5ForSpeechToText.get_output_embeddingsì  s   € Ø×(Ñ(×>Ñ>Ó@Ð@r,   c                 ó:   — | j                   j                  |«       y r~   )rÈ  r¯  r­  s     r*   r¯  z-SpeechT5ForSpeechToText.set_output_embeddingsï  s   € Ø×!Ñ!×7Ñ7¸ÕGr,   Nr-   r/   Údecoder_input_idsr»  r¼  rž  r  r¿  r,  r-  r¦  r8   c                 óx  — |
�|
n| j                   j                  }
|�7|€5t        || j                   j                  | j                   j                  «      }| j                  |||||||||	d¬«
      }| j                  |d   «      }d}|�Ft        «       } ||j                  d| j                   j                  «      |j                  d«      «      }|
s|f|dd z   }|�|f|z   S |S t        |||j                  |j                  |j                  |j                  |j                  |j                   |j"                  ¬«	      S )aâ  
        input_values (`torch.FloatTensor` of shape `(batch_size, sequence_length)`):
            Float values of input raw speech waveform. Values can be obtained by loading a *.flac* or *.wav* audio file
            into an array of type `list[float]`, a `numpy.ndarray` or a `torch.Tensor`, *e.g.* via the torchcodec library
            (`pip install torchcodec`) or the soundfile library (`pip install soundfile`).
            To prepare the array into `input_values`, the [`SpeechT5Processor`] should be used for padding
            and conversion into a tensor of type `torch.FloatTensor`. See [`SpeechT5Processor.__call__`] for details.
        decoder_input_ids (`torch.LongTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Indices of decoder input sequence tokens in the vocabulary.

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

            [What are decoder input IDs?](../glossary#decoder-input-ids)

            SpeechT5 uses the `eos_token_id` as the starting token for `decoder_input_ids` generation. If
            `past_key_values` is used, optionally only the last `decoder_input_ids` have to be input (see
            `past_key_values`).
        decoder_attention_mask (`torch.LongTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Default behavior: generate a tensor that ignores pad tokens in `decoder_input_values`. Causal mask will
            also be used by default.

            If you want to change padding behavior, you should read [`SpeechT5Decoder._prepare_decoder_attention_mask`]
            and modify to your needs. See diagram 1 in [the paper](https://huggingface.co/papers/1910.13461) for more
            information on the default strategy.
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the language modeling loss. Indices should either be in `[0, ..., config.vocab_size]`
            or -100 (see `input_ids` docstring). Tokens with indices set to `-100` are ignored (masked), the loss is
            only computed for the tokens with labels in `[0, ..., config.vocab_size]`.

            Label indices can be obtained using [`SpeechT5Tokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for details.

        Example:

        ```python
        >>> from transformers import SpeechT5Processor, SpeechT5ForSpeechToText
        >>> from datasets import load_dataset

        >>> dataset = load_dataset(
        ...     "hf-internal-testing/librispeech_asr_demo", "clean", split="validation"
        ... )  # doctest: +IGNORE_RESULT
        >>> dataset = dataset.sort("id")
        >>> sampling_rate = dataset.features["audio"].sampling_rate

        >>> processor = SpeechT5Processor.from_pretrained("microsoft/speecht5_asr")
        >>> model = SpeechT5ForSpeechToText.from_pretrained("microsoft/speecht5_asr")

        >>> # audio file is decoded on the fly
        >>> inputs = processor(audio=dataset[0]["audio"]["array"], sampling_rate=sampling_rate, return_tensors="pt")
        >>> predicted_ids = model.generate(**inputs, max_length=100)

        >>> # transcribe speech
        >>> transcription = processor.batch_decode(predicted_ids, skip_special_tokens=True)
        >>> transcription[0]
        'mister quilter is the apostle of the middle classes and we are glad to welcome his gospel'
        ```

        ```python
        >>> inputs["labels"] = processor(text_target=dataset[0]["text"], return_tensors="pt").input_ids

        >>> # compute loss
        >>> loss = model(**inputs).loss
        >>> round(loss.item(), 2)
        19.68
        ```
        NT)
r-   r/   rº  r»  r¼  rž  r  r¿  r,  r-  r   r#   r   )	r�  r�  rž  rw  r¾  ri  r¿  r  rÀ  )rz   r-  r+   r    r!   r	  rÈ  r   r½   r“  r   rž  rw  r¾  ri  r¿  r  rÀ  )ry   r-   r/   rÑ  r»  r¼  rž  r  r¿  r,  r-  r¦  rÍ  r÷  r�  r�  Úloss_fctÚoutputs                     r*   r�   zSpeechT5ForSpeechToText.forwardò  sQ  € ðf &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆàÐØ Ð(Ü$6Ø˜DŸK™K×4Ñ4°d·k±k×6XÑ6Xó%Ð!ð —-‘-Ø%Ø)Ø!2Ø#9Ø+Ø+ØØ/Ø!5Øð  ó 
ˆð ×*Ñ*¨7°1©:Ó6ˆàˆØÐÜ'Ó)ˆHÙ˜FŸK™K¨¨D¯K©K×,BÑ,BÓCÀVÇ[Á[ÐQSÃ_ÓUˆDáØ�Y ¨¨ Ñ,ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEäØØØ#×3Ñ3Ø")×"?Ñ"?Ø&×9Ñ9Ø$×5Ñ5Ø&-×&GÑ&GØ")×"?Ñ"?Ø&×9Ñ9ô

ð 
	
r,   rÃ  )r„   r…   r†   Ú_tied_weights_keysr   rm   r=  r«  r¯  r   rµ   r_  r^  rÝ  r
   rO   r   r�   r‡   rˆ   s   @r*   rÅ  rÅ  É  sO  ø„ ð @ÐAnÐoÐð˜~õ ò(;òAòHð ð 26Ø26Ø59Ø:>ØBFØ(,Ø!%Ø)-Ø,0Ø#'Ø*.ñ|
à×'Ñ'¨$Ñ.ð|
ð ×(Ñ(¨4Ñ/ð|
ð !×+Ñ+¨dÑ2ð	|
ð
 !&× 0Ñ 0°4Ñ 7ð|
ð ˜u U×%6Ñ%6Ñ7Ñ8¸4Ñ?ð|
ð  ™ð|
ð ˜$‘;ð|
ð   $™;ð|
ð # T™kð|
ð ˜D‘[ð|
ð × Ñ  4Ñ'ð|
ð 
�Ñ	 ò|
ó ô|
r,   rÅ  Úmodelrs  Ú	thresholdÚminlenratioÚmaxlenratioÚvocoderÚoutput_cross_attentionsÚreturn_output_lengthsc
           
      ój  — |€t        d«      ‚|€+d|| j                  j                  k(  j                  «       z
  }
n|}
|j	                  d«      }| j
                  j                  ||
d¬«      }|j                  }t        | j
                  j                  t        «      r@| j
                  j                  j                  j                  |d   j                  d   |
«      }
t        |j	                  d«      |z  | j                  j                  z  «      }t        |j	                  d«      |z  | j                  j                  z  «      }|j                  |d| j                  j                  «      }g }g }d }d}i }	 |dz  }| j
                  j                   j                  ||«      }| j
                  j                   j#                  |d d …dd …f   d ||
|d|d¬«      }|r0|j%                  t'        j(                  |j*                  d¬«      «       |j                  j-                  d«      }|j.                  }| j0                  j3                  |«      }|j5                  || j                  j                  | j                  j                  «      }|j%                  |«       |d d …dd d …f   j5                  |d| j                  j                  «      }t'        j(                  ||fd¬«      }t'        j6                  | j0                  j9                  |«      «      }||k  r�Œ¡||k  rAt'        j:                  |d¬«      |k\  }t'        j<                  |«      d   j?                  «       }ntA        tC        |«      «      }|D �cg c]	  }||vsŒ|‘Œ }}tC        |«      dkD  rat'        jD                  |«      }|jG                  dd«      jI                  dd	«      }| j0                  jK                  |«      }|D ]
  } ||    || <   Œ tC        |«      |k\  rn�ŒŽtA        tC        |«      «      D �cg c]  }||   ‘Œ	 }}|	s°|dk(  r|d   n4t&        jL                  jN                  jP                  jS                  |d¬
«      }|�	 ||«      }!n|}!|r`t'        j(                  |d	¬«      }|dkD  r@ |j4                  |t        |j	                  d«      |z  «      g|j	                  «       dd  ¢­Ž }|!|f}!|!S g }"tA        |«      D ]%  }|"j%                  ||   j	                  d«      «       Œ' |€:t&        jL                  jN                  jP                  jS                  |d¬
«      }||"f}!nyg }#t&        jL                  jN                  jP                  jS                  |d¬
«      } ||«      }#|"D �cg c]+  }t        |#j	                  d«      tU        |"«      z  «      |z  ‘Œ- }$}|#|$f}!|r^t'        j(                  |d	¬«      } |j4                  |t        |j	                  d«      |z  «      g|j	                  «       dd  ¢­Ž }g |!¢|‘­}!|!S c c}w c c}w c c}w )Na  `speaker_embeddings` must be specified. For example, you can use a speaker embeddings by following
                    the code snippet provided in this link:
                    https://huggingface.co/datasets/Matthijs/cmu-arctic-xvectors
                    r   r   T)r-   r/   r-  r#   )r€   r/   r  r  rž  r  r¿  r-  r±   r¡   )Úbatch_firstéýÿÿÿ)+r'   rz   r    r<   rÃ   r	  r²  r6  rÁ  rD  rF  r@  r%   r.   r$   rd  r³  rs  rV   rµ   rº   ri  Úsqueezerž  Úspeech_decoder_postnetr‡  r½   Úsigmoidrˆ  rK   r  rL   rM   rR   Ústackr‘   ÚflattenrŠ  r   râ   ÚrnnÚpad_sequencer=   )%rÖ  r-   rs  r/   r×  rØ  rÙ  rÚ  rÛ  rÜ  r  rÆ   Úencoder_outr¿  ÚmaxlenÚminlenÚoutput_sequenceÚspectrogramri  rž  r<  Úresult_spectrogramrw  Údecoder_outÚlast_decoder_outputÚspectrumÚnew_spectrogramÚprobÚmeet_thresholdsÚmeet_indexesr  ÚspectrogramsÚ
meet_indexr÷  Úspectrogram_lengthsÚ	waveformsÚwaveform_lengthss%                                        r*   Ú_generate_speechrù  r  s  € ð Ð!Üðó
ð 	
ð ÐØ!" l°e·l±l×6OÑ6OÑ&O×%TÑ%TÓ%VÑ!VÑà!/Ðà
×
Ñ
˜AÓ
€Cà—.‘.×(Ñ(Ø!Ø-Øð )ó €Kð !,× =Ñ =Ðô �%—.‘.×(Ñ(Ô*IÔJØ!&§¡×!7Ñ!7×!>Ñ!>×!aÑ!aØ˜‰N× Ñ  Ñ#Ð%;ó"
Ðô Ð*×/Ñ/°Ó2°[Ñ@À5Ç<Á<×C`ÑC`Ñ`Óa€FÜÐ*×/Ñ/°Ó2°[Ñ@À5Ç<Á<×C`ÑC`Ñ`Óa€Fð 0×9Ñ9¸#¸qÀ%Ç,Á,×B[ÑB[Ó\€Oà€KØÐØ€OØ
€CØÐà
Øˆq‰ˆð !&§¡× 6Ñ 6× =Ñ =¸oÐOaÓ bÐà—n‘n×,Ñ,×<Ñ<Ø/²°2±3°Ñ7ØØ";Ø#9Ø+ØØ5Øð =ó 	
ˆñ #Ø×#Ñ#¤E§I¡I¨k×.JÑ.JÐPQÔ$RÔSà)×;Ñ;×CÑCÀAÓFÐØ%×5Ñ5ˆð ×/Ñ/×8Ñ8Ð9LÓMˆØ—=‘=  e§l¡l×&CÑ&CÀUÇ\Á\×E^ÑE^Ó_ˆØ×Ñ˜8Ô$ð #¢1 bª! 8Ñ,×1Ñ1°#°q¸%¿,¹,×:SÑ:SÓTˆÜŸ)™) _°oÐ$FÈAÔNˆä�}‰}˜U×9Ñ9×BÑBÐCVÓWÓXˆà�Š<Ùð �VŠ|Ü"'§)¡)¨D°bÔ"9¸YÑ"F�Ü$Ÿ{™{¨?Ó;¸AÑ>×EÑEÓG‘ä$¤S¨£YÓ/�Ø'3ÖS !°qÐ@RÒ7RšAÐSˆLÐSÜ�<Ó  1Ò$Ü$Ÿ{™{¨;Ó7�Ø+×5Ñ5°a¸Ó;×CÑCÀAÀqÓI�Ø$×;Ñ;×CÑCÀLÓQ�Ø".ò N�JØ5AÀ*Ñ5MÐ& zÒ2ðNäÐ%Ó&¨#Ò-Øñi ôj 49¼Ð=OÓ9PÓ3QÖR¨aÐ& qÓ)ÐR€LÐRÙ Ø),°ª�l 1’o´u·x±x·~±~×7IÑ7I×7VÑ7VÐWcÐquÐ7VÓ7vˆØÐÙ˜kÓ*‰Gà!ˆGÙ"Ü$Ÿy™yÐ)9¸qÔAÐØ�QŠwØ#8Ð#3×#8Ñ#8ØœÐ-×2Ñ2°1Ó5¸Ñ;Ó<ð$Ø?O×?TÑ?TÓ?VÐWYÐWZÐ?[ò$Ð ð Ð 0Ð1ˆGð* €Nð% !ÐÜ�s“ò 	@ˆAØ×&Ñ& |°A¡×';Ñ';¸AÓ'>Õ?ð	@àˆ?Ü Ÿ8™8Ÿ>™>×-Ñ-×:Ñ:¸<ÐUYÐ:ÓZˆLØ#Ð%8Ð9‰GàˆIÜ Ÿ8™8Ÿ>™>×-Ñ-×:Ñ:¸<ÐUYÐ:ÓZˆLÙ Ó-ˆIØ_rÖsÐZ[¤ I§N¡N°1Ó$5¼Ð<OÓ8PÑ$PÓ QÐTUÓ UÐsÐÐsØ Ð"2Ð3ˆGÙ"Ü$Ÿy™yÐ)9¸qÔAÐØ4Ð/×4Ñ4Ø”SÐ)×.Ñ.¨qÓ1°CÑ7Ó8ð Ø;K×;PÑ;PÓ;RÐSUÐSVÐ;Wò Ðð 3˜Ð2Ð!1Ñ2ˆGØ€NùòW Tùò Sùò4  ts   Í4	X&Í>X&ÐX+Ö0X0zB
    SpeechT5 Model with a text encoder and a speech decoder.
    c                   óØ  ‡ — e Zd ZdZdZdefˆ fd„Zedefd„«       Z	e
	 	 	 	 	 	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  d	ej                  dz  d
ej                  dz  deeej                        dz  dedz  dedz  dedz  dedz  dedz  dej                  dz  dej                  dz  dej                   dz  deez  fd„«       Z ej&                  «       	 	 	 	 	 	 	 	 ddej                  dej                  dz  dej                  dz  dedededej,                  dz  dededej                  eej                  ej                  f   z  fd„«       Z ej&                  «       	 	 	 	 	 	 	 	 ddej                  dej                  dz  dej                  dz  dedededej,                  dz  dededej                  eej                  ej                  f   z  fd„«       Zˆ xZS )ÚSpeechT5ForTextToSpeech)Útextr   rz   c                 óþ   •— t         ‰| �  |«       |j                  €t        d| j                  › d�«      ‚t        |«      }t        |«      }t        |||«      | _        t        |«      | _
        | j                  «        y )NrÇ  a    with a configuration that does not define the vocabulary size of the language model head. Please instantiate the model as follows: `SpeechT5ForTextToSpeech.from_pretrained(..., vocab_size=vocab_size)`. or define `vocab_size` of your model's configuration.)rl   rm   r“  r'   r|   rN  rq  r±  r	  r…  rá  r+  )ry   rz   Útext_encoderÚspeech_decoderr|   s       €r*   rm   z SpeechT5ForTextToSpeech.__init__
	  s   ø€ Ü‰Ñ˜Ô à×ÑÐ$ÜØ0°·±Ð0@ð A/ð /óð ô 5°VÓ<ˆÜ8¸Ó@ˆÜ% f¨l¸NÓKˆŒä&BÀ6Ó&JˆÔ#ð 	�‰Õr,   r8   c                  ó   — yr   r/  )Úclss    r*   Úcan_generatez$SpeechT5ForTextToSpeech.can_generate	  s   € ð
 r,   Nr/   rº  r»  r¼  rž  r  r¿  r,  r-  rs  r¦  r©  c                 ó\  — |
�|
n| j                   j                  }
|�>|€$t        || j                   j                  |«      \  }}| j                   j                  rd}| j                  ||||||||||	d¬«      }| j                  |d   «      \  }}}d}|�,t        | j                   «      } |||||||j                  «      }|
s|f|dd z   }|�|f|z   S |S t        |||j                  |j                  |j                  |j                  |j                  |j                  |j                  ¬«	      S )ab  
        input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):
            Indices of input sequence tokens in the vocabulary.

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

            [What are input IDs?](../glossary#input-ids)
        decoder_input_values (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.num_mel_bins)`):
            Float values of input mel spectrogram.

            SpeechT5 uses an all-zero spectrum as the starting token for `decoder_input_values` generation. If
            `past_key_values` is used, optionally only the last `decoder_input_values` have to be input (see
            `past_key_values`).
        decoder_attention_mask (`torch.LongTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Default behavior: generate a tensor that ignores pad tokens in `decoder_input_values`. Causal mask will
            also be used by default.

            If you want to change padding behavior, you should read [`SpeechT5Decoder._prepare_decoder_attention_mask`]
            and modify to your needs. See diagram 1 in [the paper](https://huggingface.co/papers/1910.13461) for more
            information on the default strategy.
        speaker_embeddings (`torch.FloatTensor` of shape `(batch_size, config.speaker_embedding_dim)`, *optional*):
            Tensor containing the speaker embeddings.
        labels (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.num_mel_bins)`, *optional*):
            Float values of target mel spectrogram. Timesteps set to `-100.0` are ignored (masked) for the loss
            computation. Spectrograms can be obtained using [`SpeechT5Processor`]. See [`SpeechT5Processor.__call__`]
            for details.
        stop_labels (`torch.Tensor` of shape `(batch_size, sequence_length)`, *optional*):
            Binary tensor indicating the position of the stop token in the sequence.

        Example:

        ```python
        >>> from transformers import SpeechT5Processor, SpeechT5ForTextToSpeech, SpeechT5HifiGan, set_seed
        >>> import torch

        >>> processor = SpeechT5Processor.from_pretrained("microsoft/speecht5_tts")
        >>> model = SpeechT5ForTextToSpeech.from_pretrained("microsoft/speecht5_tts")
        >>> vocoder = SpeechT5HifiGan.from_pretrained("microsoft/speecht5_hifigan")

        >>> inputs = processor(text="Hello, my dog is cute", return_tensors="pt")
        >>> speaker_embeddings = torch.zeros((1, 512))  # or load xvectors from a file

        >>> set_seed(555)  # make deterministic

        >>> # generate speech
        >>> speech = model.generate(inputs["input_ids"], speaker_embeddings=speaker_embeddings, vocoder=vocoder)
        >>> speech.shape
        torch.Size([15872])
        ```
        NT©r-   r/   rº  r»  r¼  rž  r  rs  r¿  r,  r-  r   r   ©	r�  rë  rž  rw  r¾  ri  r¿  r  rÀ  )rz   r-  r4   r.   r¡  r	  rá  rž  ri  r   rž  rw  r¾  r¿  r  rÀ  )ry   r   r/   rº  r»  r¼  rž  r  r¿  r,  r-  rs  r¦  r©  rÍ  r÷  r‹  rŒ  r�  r�  Ú	criterionrÔ  s                         r*   r�   zSpeechT5ForTextToSpeech.forward%	  st  € ðJ &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆàÐØ#Ð+Ü?WØ˜DŸK™K×8Ñ8Ð:Pó@Ñ<Ð$Ð&<ð �{‰{×4Ò4Ø$(Ð!à—-‘-Ø"Ø)Ø!5Ø#9Ø+Ø+ØØ1Ø/Ø!5Øð  ó 
ˆð AE×@[Ñ@[Ð\cÐdeÑ\fÓ@gÑ=ÐÐ 5°vàˆØÐÜ/°·±Ó<ˆIÙØØ&Ø%ØØØ×(Ñ(óˆDñ Ø+Ð-°¸¸°Ñ;ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä'ØØ-Ø#×3Ñ3Ø")×"?Ñ"?Ø&×9Ñ9Ø$×5Ñ5Ø&-×&GÑ&GØ")×"?Ñ"?Ø&×9Ñ9ô

ð 
	
r,   r×  rØ  rÙ  rÚ  rÛ  rÜ  c
                 óÜ   — |�W|j                  d«      }|j                  d«      |k7  r2|j                  d«      dk(  r|j                  |d«      }nt        d«      ‚t        | |||||||||	«
      S )aE  
        Converts a sequence of input tokens into a sequence of mel spectrograms, which are subsequently turned into a
        speech waveform using a vocoder.

        Args:
            input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):
                Indices of input sequence tokens in the vocabulary.

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

                [What are input IDs?](../glossary#input-ids)
            attention_mask (`torch.LongTensor` of shape `(batch_size, sequence_length)`):
                Attention mask from the tokenizer, required for batched inference to signal to the model where to
                ignore padded tokens from the input_ids.
            speaker_embeddings (`torch.FloatTensor` of shape `(batch_size, config.speaker_embedding_dim)`, *optional*):
                Tensor containing the speaker embeddings.
            threshold (`float`, *optional*, defaults to 0.5):
                The generated sequence ends when the predicted stop token probability exceeds this value.
            minlenratio (`float`, *optional*, defaults to 0.0):
                Used to calculate the minimum required length for the output sequence.
            maxlenratio (`float`, *optional*, defaults to 20.0):
                Used to calculate the maximum allowed length for the output sequence.
            vocoder (`nn.Module`, *optional*):
                The vocoder that converts the mel spectrogram into a speech waveform. If `None`, the output is the mel
                spectrogram.
            output_cross_attentions (`bool`, *optional*, defaults to `False`):
                Whether or not to return the attentions tensors of the decoder's cross-attention layers.
            return_output_lengths (`bool`, *optional*, defaults to `False`):
                Whether or not to return the concrete spectrogram/waveform lengths.

        Returns:
            `tuple(torch.FloatTensor)` comprising various elements depending on the inputs:
            - when `return_output_lengths` is False
                - **spectrogram** (*optional*, returned when no `vocoder` is provided) `torch.FloatTensor` of shape
                `(output_sequence_length, config.num_mel_bins)` -- The predicted log-mel spectrogram.
                - **waveform** (*optional*, returned when a `vocoder` is provided) `torch.FloatTensor` of shape
                `(num_frames,)` -- The predicted speech waveform.
                - **cross_attentions** (*optional*, returned when `output_cross_attentions` is `True`)
                `torch.FloatTensor` of shape `(config.decoder_layers, config.decoder_attention_heads,
                output_sequence_length, input_sequence_length)` -- The outputs of the decoder's cross-attention layers.
            - when `return_output_lengths` is True
                - **spectrograms** (*optional*, returned when no `vocoder` is provided) `torch.FloatTensor` of shape
                `(batch_size, output_sequence_length, config.num_mel_bins)` -- The predicted log-mel spectrograms that
                are padded to the maximum length.
                - **spectrogram_lengths** (*optional*, returned when no `vocoder` is provided) `list[Int]` -- A list of
                all the concrete lengths for each spectrogram.
                - **waveforms** (*optional*, returned when a `vocoder` is provided) `torch.FloatTensor` of shape
                `(batch_size, num_frames)` -- The predicted speech waveforms that are padded to the maximum length.
                - **waveform_lengths** (*optional*, returned when a `vocoder` is provided) `list[Int]` -- A list of all
                the concrete lengths for each waveform.
                - **cross_attentions** (*optional*, returned when `output_cross_attentions` is `True`)
                `torch.FloatTensor` of shape `(batch_size, config.decoder_layers, config.decoder_attention_heads,
                output_sequence_length, input_sequence_length)` -- The outputs of the decoder's cross-attention layers.
        r   r   zUThe first dimension of speaker_embeddings must be either 1 or the same as batch_size.©rÃ   ro  r'   rù  )ry   r   r/   rs  r×  rØ  rÙ  rÚ  rÛ  rÜ  rÍ  r[   s               r*   Úgeneratez SpeechT5ForTextToSpeech.generate 	  s�   € ðJ Ð)Ø"Ÿ™¨Ó*ˆJØ!×&Ñ& qÓ)¨ZÒ7Ø%×*Ñ*¨1Ó-°Ò2Ø);×)BÑ)BÀ:ÈqÓ)QÑ&ä$Øoóð ô  ØØØØØØØØØ#Ø!ó
ð 	
r,   c
                 óÜ   — |�W|j                  d«      }
|j                  d«      |
k7  r2|j                  d«      dk(  r|j                  |
d«      }nt        d«      ‚t        | |||||||||	«
      S )aÿ  
        Converts a sequence of input tokens into a sequence of mel spectrograms, which are subsequently turned into a
        speech waveform using a vocoder.

        Args:
            input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):
                Indices of input sequence tokens in the vocabulary.

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

                [What are input IDs?](../glossary#input-ids)
            speaker_embeddings (`torch.FloatTensor` of shape `(batch_size, config.speaker_embedding_dim)`, *optional*):
                Tensor containing the speaker embeddings.
            attention_mask (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
                Mask to avoid performing convolution and attention on padding token indices. Mask values selected in
                `[0, 1]`:

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

                [What are attention masks?](../glossary#attention-mask)
            threshold (`float`, *optional*, defaults to 0.5):
                The generated sequence ends when the predicted stop token probability exceeds this value.
            minlenratio (`float`, *optional*, defaults to 0.0):
                Used to calculate the minimum required length for the output sequence.
            maxlenratio (`float`, *optional*, defaults to 20.0):
                Used to calculate the maximum allowed length for the output sequence.
            vocoder (`nn.Module`, *optional*, defaults to `None`):
                The vocoder that converts the mel spectrogram into a speech waveform. If `None`, the output is the mel
                spectrogram.
            output_cross_attentions (`bool`, *optional*, defaults to `False`):
                Whether or not to return the attentions tensors of the decoder's cross-attention layers.
            return_output_lengths (`bool`, *optional*, defaults to `False`):
                Whether or not to return the concrete spectrogram/waveform lengths.

        Returns:
            `tuple(torch.FloatTensor)` comprising various elements depending on the inputs:
            - when `return_output_lengths` is False
                - **spectrogram** (*optional*, returned when no `vocoder` is provided) `torch.FloatTensor` of shape
                `(output_sequence_length, config.num_mel_bins)` -- The predicted log-mel spectrogram.
                - **waveform** (*optional*, returned when a `vocoder` is provided) `torch.FloatTensor` of shape
                `(num_frames,)` -- The predicted speech waveform.
                - **cross_attentions** (*optional*, returned when `output_cross_attentions` is `True`)
                `torch.FloatTensor` of shape `(config.decoder_layers, config.decoder_attention_heads,
                output_sequence_length, input_sequence_length)` -- The outputs of the decoder's cross-attention layers.
            - when `return_output_lengths` is True
                - **spectrograms** (*optional*, returned when no `vocoder` is provided) `torch.FloatTensor` of shape
                `(batch_size, output_sequence_length, config.num_mel_bins)` -- The predicted log-mel spectrograms that
                are padded to the maximum length.
                - **spectrogram_lengths** (*optional*, returned when no `vocoder` is provided) `list[Int]` -- A list of
                all the concrete lengths for each spectrogram.
                - **waveforms** (*optional*, returned when a `vocoder` is provided) `torch.FloatTensor` of shape
                `(batch_size, num_frames)` -- The predicted speech waveforms that are padded to the maximum length.
                - **waveform_lengths** (*optional*, returned when a `vocoder` is provided) `list[Int]` -- A list of all
                the concrete lengths for each waveform.
                - **cross_attentions** (*optional*, returned when `output_cross_attentions` is `True`)
                `torch.FloatTensor` of shape `(batch_size, config.decoder_layers, config.decoder_attention_heads,
                output_sequence_length, input_sequence_length)` -- The outputs of the decoder's cross-attention layers.
        r   r   zUThe first dimension of speaker_embeddings must be either 1 or the same as batch size.r  )ry   r   rs  r/   r×  rØ  rÙ  rÚ  rÛ  rÜ  r[   s              r*   Úgenerate_speechz'SpeechT5ForTextToSpeech.generate_speechü	  s�   € ðR Ð)Ø"Ÿ™¨Ó*ˆJØ!×&Ñ& qÓ)¨ZÒ7Ø%×*Ñ*¨1Ó-°Ò2Ø);×)BÑ)BÀ:ÈqÓ)QÑ&ä$Øoóð ô  ØØØØØØØØØ#Ø!ó
ð 	
r,   ©NNNNNNNNNNNNN©NNg      à?r2   g      4@NFF)r„   r…   r†   r!  r   r   rm   ÚclassmethodrO   r  r   rµ   r^  r_  rÝ  r
   rÔ   r   r�   rÓ   r¸   r   r#  r	  r  r‡   rˆ   s   @r*   rû  rû  	  s^  ø„ ð !ÐØ!€Oð˜~õ ð( ð˜Tò ó ðð ð .2Ø26Ø9=Ø:>ØBFØ(,Ø!%Ø)-Ø,0Ø#'Ø7;Ø+/Ø+/ñx
à×#Ñ# dÑ*ðx
ð ×(Ñ(¨4Ñ/ðx
ð $×/Ñ/°$Ñ6ð	x
ð
 !&× 0Ñ 0°4Ñ 7ðx
ð ˜u U×%6Ñ%6Ñ7Ñ8¸4Ñ?ðx
ð  ™ðx
ð ˜$‘;ðx
ð   $™;ðx
ð # T™kðx
ð ˜D‘[ðx
ð "×-Ñ-°Ñ4ðx
ð ×!Ñ! DÑ(ðx
ð —\‘\ DÑ(ðx
ð  
Ð)Ñ	)ò!x
ó ðx
ðt €U‡]�]ƒ_ð 37Ø7;ØØ Ø!Ø$(Ø(-Ø&+ñY
à×#Ñ#ðY
ð ×(Ñ(¨4Ñ/ðY
ð "×-Ñ-°Ñ4ð	Y
ð
 ðY
ð ðY
ð ðY
ð —‘˜TÑ!ðY
ð "&ðY
ð  $ðY
ð 
×	Ñ	˜U 5×#4Ñ#4°e×6GÑ6GÐ#GÑHÑ	HòY
ó ðY
ðv €U‡]�]ƒ_ð 8<Ø26ØØ Ø!Ø$(Ø(-Ø&+ñ]
à×#Ñ#ð]
ð "×-Ñ-°Ñ4ð]
ð ×(Ñ(¨4Ñ/ð	]
ð
 ð]
ð ð]
ð ð]
ð —‘˜TÑ!ð]
ð "&ð]
ð  $ð]
ð 
×	Ñ	˜U 5×#4Ñ#4°e×6GÑ6GÐ#GÑHÑ	Hò]
ó ô]
r,   rû  zD
    SpeechT5 Model with a speech encoder and a speech decoder.
    c                   óp  ‡ — e Zd Zdefˆ fd„Zd„ Ze	 	 	 	 	 	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  d	e
e
ej                        dz  d
edz  dedz  dedz  dedz  dedz  dej                  dz  dej                  dz  dej                  dz  de
ez  fd„«       Z ej                   «       	 	 	 	 	 	 	 	 ddej                  dej                  dz  dej                  dz  dedededej&                  dz  dededej                  fd„«       Zˆ xZS )ÚSpeechT5ForSpeechToSpeechrz   c                 ó´   •— t         ‰| �  |«       t        |«      }t        |«      }t	        |||«      | _        t        |«      | _        | j                  «        y r~   )	rl   rm   rD  rq  r±  r	  r…  rá  r+  )ry   rz   rÉ  rÿ  r|   s       €r*   rm   z"SpeechT5ForSpeechToSpeech.__init__c
  sM   ø€ Ü‰Ñ˜Ô ä8¸Ó@ˆÜ8¸Ó@ˆÜ% f¨n¸nÓMˆŒä&BÀ6Ó&JˆÔ#ð 	�‰Õr,   c                 óT   — | j                  «       j                  j                  «        yr¹  rÌ  r<  s    r*   r=  z0SpeechT5ForSpeechToSpeech.freeze_feature_encodero
  rÎ  r,   Nr-   r/   rº  r»  r¼  rž  r  r¿  r,  r-  rs  r¦  r©  r8   c                 óÐ  — |
�|
n| j                   j                  }
|�&|€$t        || j                   j                  |«      \  }}| j	                  ||||||||||	d¬«      }| j                  |d   «      \  }}}d}|
s|f|dd z   }|�|f|z   S |S t        |||j                  |j                  |j                  |j                  |j                  |j                  |j                  ¬«	      S )a­  
        input_values (`torch.FloatTensor` of shape `(batch_size, sequence_length)`):
            Float values of input raw speech waveform. Values can be obtained by loading a *.flac* or *.wav* audio file
            into an array of type `list[float]`, a `numpy.ndarray` or a `torch.Tensor`, *e.g.* via the torchcodec library
            (`pip install torchcodec`) or the soundfile library (`pip install soundfile`).
            To prepare the array into `input_values`, the [`SpeechT5Processor`] should be used for padding and conversion into
            a tensor of type `torch.FloatTensor`. See [`SpeechT5Processor.__call__`] for details.
        decoder_input_values (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.num_mel_bins)`):
            Float values of input mel spectrogram.

            SpeechT5 uses an all-zero spectrum as the starting token for `decoder_input_values` generation. If
            `past_key_values` is used, optionally only the last `decoder_input_values` have to be input (see
            `past_key_values`).
        decoder_attention_mask (`torch.LongTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Default behavior: generate a tensor that ignores pad tokens in `decoder_input_values`. Causal mask will
            also be used by default.

            If you want to change padding behavior, you should read [`SpeechT5Decoder._prepare_decoder_attention_mask`]
            and modify to your needs. See diagram 1 in [the paper](https://huggingface.co/papers/1910.13461) for more
            information on the default strategy.
        speaker_embeddings (`torch.FloatTensor` of shape `(batch_size, config.speaker_embedding_dim)`, *optional*):
            Tensor containing the speaker embeddings.
        labels (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.num_mel_bins)`, *optional*):
            Float values of target mel spectrogram. Spectrograms can be obtained using [`SpeechT5Processor`]. See
            [`SpeechT5Processor.__call__`] for details.
        stop_labels (`torch.Tensor` of shape `(batch_size, sequence_length)`, *optional*):
            Binary tensor indicating the position of the stop token in the sequence.

        Example:

        ```python
        >>> from transformers import SpeechT5Processor, SpeechT5ForSpeechToSpeech, SpeechT5HifiGan, set_seed
        >>> from datasets import load_dataset
        >>> import torch

        >>> dataset = load_dataset(
        ...     "hf-internal-testing/librispeech_asr_demo", "clean", split="validation"
        ... )  # doctest: +IGNORE_RESULT
        >>> dataset = dataset.sort("id")
        >>> sampling_rate = dataset.features["audio"].sampling_rate

        >>> processor = SpeechT5Processor.from_pretrained("microsoft/speecht5_vc")
        >>> model = SpeechT5ForSpeechToSpeech.from_pretrained("microsoft/speecht5_vc")
        >>> vocoder = SpeechT5HifiGan.from_pretrained("microsoft/speecht5_hifigan")

        >>> # audio file is decoded on the fly
        >>> inputs = processor(audio=dataset[0]["audio"]["array"], sampling_rate=sampling_rate, return_tensors="pt")

        >>> speaker_embeddings = torch.zeros((1, 512))  # or load xvectors from a file

        >>> set_seed(555)  # make deterministic

        >>> # generate speech
        >>> speech = model.generate_speech(inputs["input_values"], speaker_embeddings, vocoder=vocoder)
        >>> speech.shape
        torch.Size([77824])
        ```
        NTr  r   r   r  )rz   r-  r4   r.   r	  rá  r   rž  rw  r¾  ri  r¿  r  rÀ  )ry   r-   r/   rº  r»  r¼  rž  r  r¿  r,  r-  rs  r¦  r©  rÍ  r÷  r\   rë  r�  r�  rÔ  s                        r*   r�   z!SpeechT5ForSpeechToSpeech.forwardv
  s!  € ðX &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆàÐØ#Ð+Ü?WØ˜DŸK™K×8Ñ8Ð:Pó@Ñ<Ð$Ð&<ð —-‘-Ø%Ø)Ø!5Ø#9Ø+Ø+ØØ1Ø/Ø!5Øð  ó 
ˆð "&×!<Ñ!<¸WÀQ¹ZÓ!HÑˆˆ;˜àˆáØ!�^ g¨a¨b kÑ1ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä'ØØ#Ø#×3Ñ3Ø")×"?Ñ"?Ø&×9Ñ9Ø$×5Ñ5Ø&-×&GÑ&GØ")×"?Ñ"?Ø&×9Ñ9ô

ð 
	
r,   r×  rØ  rÙ  rÚ  rÛ  rÜ  c
                 óp   — |€!t        j                  d|j                  ¬«      }t        | |||||||||	«
      S )a'  
        Converts a raw speech waveform into a sequence of mel spectrograms, which are subsequently turned back into a
        speech waveform using a vocoder.

        Args:
            input_values (`torch.FloatTensor` of shape `(batch_size, sequence_length)`):
                Float values of input raw speech waveform.

                Values can be obtained by loading a *.flac* or *.wav* audio file into an array of type `list[float]`,
                a `numpy.ndarray` or a `torch.Tensor`, *e.g.* via the torchcodec library (`pip install torchcodec`)
                or the soundfile library (`pip install soundfile`).
                To prepare the array into `input_values`, the [`SpeechT5Processor`] should be used for padding and
                conversion into a tensor of type `torch.FloatTensor`. See [`SpeechT5Processor.__call__`] for details.
            speaker_embeddings (`torch.FloatTensor` of shape `(batch_size, config.speaker_embedding_dim)`, *optional*):
                Tensor containing the speaker embeddings.
            attention_mask (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
                Mask to avoid performing convolution and attention on padding token indices. Mask values selected in
                `[0, 1]`:

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

                [What are attention masks?](../glossary#attention-mask)
            threshold (`float`, *optional*, defaults to 0.5):
                The generated sequence ends when the predicted stop token probability exceeds this value.
            minlenratio (`float`, *optional*, defaults to 0.0):
                Used to calculate the minimum required length for the output sequence.
            maxlenratio (`float`, *optional*, defaults to 20.0):
                Used to calculate the maximum allowed length for the output sequence.
            vocoder (`nn.Module`, *optional*, defaults to `None`):
                The vocoder that converts the mel spectrogram into a speech waveform. If `None`, the output is the mel
                spectrogram.
            output_cross_attentions (`bool`, *optional*, defaults to `False`):
                Whether or not to return the attentions tensors of the decoder's cross-attention layers.
            return_output_lengths (`bool`, *optional*, defaults to `False`):
                Whether or not to return the concrete spectrogram/waveform lengths.

        Returns:
            `tuple(torch.FloatTensor)` comprising various elements depending on the inputs:
            - when `return_output_lengths` is False
                - **spectrogram** (*optional*, returned when no `vocoder` is provided) `torch.FloatTensor` of shape
                `(output_sequence_length, config.num_mel_bins)` -- The predicted log-mel spectrogram.
                - **waveform** (*optional*, returned when a `vocoder` is provided) `torch.FloatTensor` of shape
                `(num_frames,)` -- The predicted speech waveform.
                - **cross_attentions** (*optional*, returned when `output_cross_attentions` is `True`)
                `torch.FloatTensor` of shape `(config.decoder_layers, config.decoder_attention_heads,
                output_sequence_length, input_sequence_length)` -- The outputs of the decoder's cross-attention layers.
            - when `return_output_lengths` is True
                - **spectrograms** (*optional*, returned when no `vocoder` is provided) `torch.FloatTensor` of shape
                `(batch_size, output_sequence_length, config.num_mel_bins)` -- The predicted log-mel spectrograms that
                are padded to the maximum length.
                - **spectrogram_lengths** (*optional*, returned when no `vocoder` is provided) `list[Int]` -- A list of
                all the concrete lengths for each spectrogram.
                - **waveforms** (*optional*, returned when a `vocoder` is provided) `torch.FloatTensor` of shape
                `(batch_size, num_frames)` -- The predicted speech waveforms that are padded to the maximum length.
                - **waveform_lengths** (*optional*, returned when a `vocoder` is provided) `list[Int]` -- A list of all
                the concrete lengths for each waveform.
                - **cross_attentions** (*optional*, returned when `output_cross_attentions` is `True`)
                `torch.FloatTensor` of shape `(batch_size, config.decoder_layers, config.decoder_attention_heads,
                output_sequence_length, input_sequence_length)` -- The outputs of the decoder's cross-attention layers.
        )r   i   rH  )rµ   rN   r¨   rù  )
ry   r-   rs  r/   r×  rØ  rÙ  rÚ  rÛ  rÜ  s
             r*   r  z)SpeechT5ForSpeechToSpeech.generate_speechì
  sM   € ðT Ð%Ü!&§¡¨X¸l×>QÑ>QÔ!RÐäØØØØØØØØØ#Ø!ó
ð 	
r,   r  r  )r„   r…   r†   r   rm   r=  r   rµ   r_  r^  rÝ  r
   rO   rÔ   r   r�   rÓ   r¸   r   r#  r  r‡   rˆ   s   @r*   r  r  ]
  s5  ø„ ð
˜~õ 
ò;ð ð 26Ø26Ø9=Ø:>ØBFØ(,Ø!%Ø)-Ø,0Ø#'Ø7;Ø+/Ø+/ñs
à×'Ñ'¨$Ñ.ðs
ð ×(Ñ(¨4Ñ/ðs
ð $×/Ñ/°$Ñ6ð	s
ð
 !&× 0Ñ 0°4Ñ 7ðs
ð ˜u U×%6Ñ%6Ñ7Ñ8¸4Ñ?ðs
ð  ™ðs
ð ˜$‘;ðs
ð   $™;ðs
ð # T™kðs
ð ˜D‘[ðs
ð "×-Ñ-°Ñ4ðs
ð ×!Ñ! DÑ(ðs
ð —\‘\ DÑ(ðs
ð  
Ð)Ñ	)ò!s
ó ðs
ðj €U‡]�]ƒ_ð 8<Ø26ØØ Ø!Ø$(Ø(-Ø&+ñW
à×'Ñ'ðW
ð "×-Ñ-°Ñ4ðW
ð ×(Ñ(¨4Ñ/ð	W
ð
 ðW
ð ðW
ð ðW
ð —‘˜TÑ!ðW
ð "&ðW
ð  $ðW
ð 
×	Ñ	òW
ó ôW
r,   r  c                   ó:   ‡ — e Zd Zdˆ fd„	Zdd„Zd„ Zd„ Zd„ Zˆ xZS )ÚHifiGanResidualBlockc                 óÜ  •— t         ‰| �  «        || _        t        j                  t        t        |«      «      D �cg c]3  }t        j                  |||d||   | j                  |||   «      ¬«      ‘Œ5 c}«      | _	        t        j                  t        t        |«      «      D �cg c]-  }t        j                  |||dd| j                  |d«      ¬«      ‘Œ/ c}«      | _
        y c c}w c c}w )Nr   )rj   ÚdilationrØ   )rl   rm   Úleaky_relu_sloper   r  rM   rR   rq   Úget_paddingÚconvs1Úconvs2)ry   Úchannelsri   r  r  r  r\   r|   s          €r*   rm   zHifiGanResidualBlock.__init__H  sà   ø€ Ü‰ÑÔØ 0ˆÔä—m‘mô œs 8›}Ó-ö
ð ô —	‘	ØØØØØ% a™[Ø ×,Ñ,¨[¸(À1¹+ÓFöò
ó
ˆŒô —m‘mô œs 8›}Ó-ö
ð ô —	‘	ØØØØØØ ×,Ñ,¨[¸!Ó<öò
ó
ˆ�ùò
ùò
s   ¼8C$Â%2C)c                 ó   — ||z  |z
  dz  S r    r/  )ry   ri   r  s      r*   r  z HifiGanResidualBlock.get_paddingg  s   € Ø˜hÑ&¨Ñ1°aÑ7Ð7r,   c                 ó,  — t         j                  j                  }t        t         j                  j                  d«      r$t         j                  j                  j                  }| j
                  D ]
  } ||«       Œ | j                  D ]
  } ||«       Œ y ©NrÚ   )r   râ   rÚ   r¬   rÞ   r  r  ©ry   rÚ   r  s      r*   Úapply_weight_normz&HifiGanResidualBlock.apply_weight_normj  sp   € Ü—h‘h×*Ñ*ˆÜ”2—8‘8×,Ñ,¨mÔ<ÜŸ(™(×3Ñ3×?Ñ?ˆKà—[‘[ò 	ˆEÙ˜Õð	à—[‘[ò 	ˆEÙ˜Õñ	r,   c                 óÄ   — | j                   D ]!  }t        j                  j                  |«       Œ# | j                  D ]!  }t        j                  j                  |«       Œ# y r~   )r  r   râ   Úremove_weight_normr  ©ry   r  s     r*   r$  z'HifiGanResidualBlock.remove_weight_normt  sL   € Ø—[‘[ò 	/ˆEÜ�H‰H×'Ñ'¨Õ.ð	/à—[‘[ò 	/ˆEÜ�H‰H×'Ñ'¨Õ.ñ	/r,   c                 ó,  — t        | j                  | j                  «      D ]p  \  }}|}t        j                  j                  || j                  «      } ||«      }t        j                  j                  || j                  «      } ||«      }||z   }Œr |S r~   )rS  r  r  r   ru  Ú
leaky_relur  )ry   r€   Úconv1Úconv2rö  s        r*   r�   zHifiGanResidualBlock.forwardz  s‡   € Ü §¡¨T¯[©[Ó9ò 	5‰LˆE�5Ø$ˆHÜŸM™M×4Ñ4°]ÀD×DYÑDYÓZˆMÙ! -Ó0ˆMÜŸM™M×4Ñ4°]ÀD×DYÑDYÓZˆMÙ! -Ó0ˆMØ)¨HÑ4‰Mð	5ð Ðr,   )r   )r   r   é   gš™™™™™¹?)r   )	r„   r…   r†   rm   r  r"  r$  r�   r‡   rˆ   s   @r*   r  r  G  s   ø„ õ
ó>8òò/ör,   r  z
    HiFi-GAN vocoder.
    c                   óš   ‡ — e Zd ZU eed<   dZdefˆ fd„Zˆ fd„Zd„ Zd„ Z	 e
d¬«      dej                  d	ej                  fd
„«       Zˆ xZS )r  rz   rë  c                 ó²  •— t         ‰| �  |«       t        |j                  «      | _        t        |j
                  «      | _        t        j                  |j                  |j                  ddd¬«      | _        t        j                  «       | _        t        t        |j
                  |j                   «      «      D ]d  \  }\  }}| j                  j#                  t        j$                  |j                  d|z  z  |j                  d|dz   z  z  ||||z
  dz  ¬«      «       Œf t        j                  «       | _        t)        t        | j                  «      «      D ]p  }|j                  d|dz   z  z  }t        |j                  |j*                  «      D ]6  \  }}| j&                  j#                  t-        ||||j.                  «      «       Œ8 Œr t        j                  dddd¬«      | _        | j3                  dt5        j6                  |j                  «      «       | j3                  dt5        j8                  |j                  «      «       | j;                  «        y )Né   r   r   )ri   rj   rØ   r¡   r  r  )rl   rm   rR   Úresblock_kernel_sizesÚnum_kernelsÚupsample_ratesÚnum_upsamplesr   rq   Úmodel_in_dimÚupsample_initial_channelÚconv_prer  Ú	upsamplerr8  rS  Úupsample_kernel_sizesrV   ÚConvTranspose1dÚ	resblocksrM   Úresblock_dilation_sizesr  r  Ú	conv_postr®   rµ   rN   rT   r+  )ry   rz   r  Úupsample_rateri   r  r  r|   s          €r*   rm   zSpeechT5HifiGan.__init__Ž  s÷  ø€ Ü‰Ñ˜Ô Ü˜v×;Ñ;Ó<ˆÔÜ  ×!6Ñ!6Ó7ˆÔÜŸ	™	Ø×ÑØ×+Ñ+ØØØô
ˆŒô Ÿ™›ˆŒÜ/8¼¸V×=RÑ=RÐTZ×TpÑTpÓ9qÓ/rò 		Ñ+ˆAÑ+�˜{Ø�N‰N×!Ñ!Ü×"Ñ"Ø×3Ñ3¸¸1¹Ñ=Ø×3Ñ3¸¸aÀ!¹e¹ÑEØ +Ø(Ø(¨=Ñ8¸QÑ>ôõð		ô Ÿ™›ˆŒÜ”s˜4Ÿ>™>Ó*Ó+ò 	vˆAØ×6Ñ6¸1ÀÀQÁ¹<ÑHˆHÜ),¨V×-IÑ-IÈ6×KiÑKiÓ)jò vÑ%�˜XØ—‘×%Ñ%Ô&:¸8À[ÐRZÐ\b×\sÑ\sÓ&tÕuñvð	vô
 Ÿ™ 8¨Q¸AÀaÐQRÔSˆŒà×Ñ˜V¤U§[¡[°×1DÑ1DÓ%EÔFØ×Ñ˜W¤e§j¡j°×1DÑ1DÓ&EÔFð 	�‰Õr,   c                 óÂ   •— t         ‰| �  |«       t        |t        «      r?t	        j
                  |j                  «       t	        j                  |j                  «       y y r~   )	rl   r  rÁ  r  r  r  r  r  r  )ry   r  r|   s     €r*   r  zSpeechT5HifiGan._init_weights´  s?   ø€ Ü‰Ñ˜fÔ%Ü�fœoÔ.Ü�K‰K˜Ÿ™Ô$Ü�J‰J�v—|‘|Õ$ð /r,   c                 ó„  — t         j                  j                  }t        t         j                  j                  d«      r$t         j                  j                  j                  } || j
                  «       | j                  D ]
  } ||«       Œ | j                  D ]  }|j                  «        Œ  || j                  «       y r   )
r   râ   rÚ   r¬   rÞ   r4  r5  r8  r"  r:  r!  s      r*   r"  z!SpeechT5HifiGan.apply_weight_normº  sŒ   € Ü—h‘h×*Ñ*ˆÜ”2—8‘8×,Ñ,¨mÔ<ÜŸ(™(×3Ñ3×?Ñ?ˆKá�D—M‘MÔ"Ø—^‘^ò 	ˆEÙ˜Õð	à—^‘^ò 	&ˆEØ×#Ñ#Õ%ð	&á�D—N‘NÕ#r,   c                 óJ  — t         j                  j                  | j                  «       | j                  D ]!  }t         j                  j                  |«       Œ# | j
                  D ]  }|j                  «        Œ t         j                  j                  | j                  «       y r~   )r   râ   r$  r4  r5  r8  r:  r%  s     r*   r$  z"SpeechT5HifiGan.remove_weight_normÆ  sr   € Ü
�‰×#Ñ# D§M¡MÔ2Ø—^‘^ò 	/ˆEÜ�H‰H×'Ñ'¨Õ.ð	/à—^‘^ò 	'ˆEØ×$Ñ$Õ&ð	'ä
�‰×#Ñ# D§N¡NÕ3r,   a  
        Converts a log-mel spectrogram into a speech waveform. Passing a batch of log-mel spectrograms returns a batch
        of speech waveforms. Passing a single, un-batched log-mel spectrogram returns a single, un-batched speech
        waveform.
        r®  r8   c                 ó¾  — | j                   j                  r|| j                  z
  | j                  z  }|j	                  «       dk(  }|s|j                  d«      }|j                  dd«      }| j                  |«      }t        | j                  «      D ]¿  }t        j                  j                  || j                   j                  «      } | j                  |   |«      } | j                  || j                   z     |«      }t        d| j                   «      D ]*  }| | j                  || j                   z  |z      |«      z  }Œ, || j                   z  }ŒÁ t        j                  j                  |«      }| j#                  |«      }t%        j&                  |«      }|s2|j)                  d«      j                  dd«      j+                  d«      }|S |j)                  d«      }|S )aù  
        spectrogram (`torch.FloatTensor`):
            Tensor containing the log-mel spectrograms. Can be batched and of shape `(batch_size, sequence_length,
            config.model_in_dim)`, or un-batched and of shape `(sequence_length, config.model_in_dim)`.

        Returns:
            `torch.FloatTensor`: Tensor containing the speech waveform. If the input spectrogram is batched, will be of
            shape `(batch_size, num_frames,)`. If un-batched, will be of shape `(num_frames,)`.
        r   r   r¡   r   r#   )rz   Únormalize_beforer  r  r²   r¹   r‘   r4  rM   r1  r   ru  r'  r  r5  r8  r/  r:  rµ   Útanhrà  r½   )	ry   rë  rÍ  Ú
is_batchedr€   r  Ú	res_stateÚjÚwaveforms	            r*   r�   zSpeechT5HifiGan.forwardÎ  s¯  € ð" �;‰;×'Ò'Ø&¨¯©Ñ2°d·j±jÑ@ˆKà —_‘_Ó&¨!Ñ+ˆ
ÙØ%×/Ñ/°Ó2ˆKà#×-Ñ-¨a°Ó3ˆàŸ™ mÓ4ˆÜ�t×)Ñ)Ó*ò 	9ˆAÜŸM™M×4Ñ4°]ÀDÇKÁK×D`ÑD`ÓaˆMØ-˜DŸN™N¨1Ñ-¨mÓ<ˆMà<˜Ÿ™ q¨4×+;Ñ+;Ñ';Ñ<¸]ÓKˆIÜ˜1˜d×.Ñ.Ó/ò U�ØÐE˜TŸ^™^¨A°×0@Ñ0@Ñ,@À1Ñ,DÑEÀmÓTÑT‘	ðUà%¨×(8Ñ(8Ñ8‰Mð	9ô Ÿ™×0Ñ0°Ó?ˆØŸ™ }Ó5ˆÜŸ
™
 =Ó1ˆáà$×,Ñ,¨QÓ/×9Ñ9¸!¸QÓ?×DÑDÀRÓHˆHð
 ˆð %×,Ñ,¨QÓ/ˆHàˆr,   )r„   r…   r†   r   r  r   rm   r  r"  r$  r   rµ   r_  r�   r‡   rˆ   s   @r*   r  r  …  se   ø… ð "Ó!Ø#€Oð$Ð4õ $ôL%ò
$ò4ñ ðôð( 5×#4Ñ#4ð (À5×CTÑCTò (óô(r,   r  )rÅ  r  rû  r±  r  r  )r   Nr  r  )erÑ   r³   ÚnumpyrF   rµ   r   Útorch.nnr   r   r   Ú r   r  Úactivationsr	   Úcache_utilsr
   r   r   Ú
generationr   Úintegrations.deepspeedr   Úintegrations.fsdpr   Úmasking_utilsr   r   Úmodeling_layersr   Úmodeling_outputsr   r   r   r   r   Úmodeling_utilsr   r   râ   r   r   Úconfiguration_speecht5r   r   Ú
get_loggerr„   rj  Ú_HIDDEN_STATES_START_POSITIONrÔ   r<   r+   r4   rÝ  r¸   r^  Úndarrayrd   rf   rŠ   r“   r#  r›   rÖ   rï   r   rë   r  r$  r0  ra  rz  r…  r‘  r˜  r¤  r±  rß  rí  rù  r  r%  rD  rN  r]  rc  rq  ry  r  rƒ  rž  r±  rÅ  r_  rO   rù  rû  r  r  r  Ú__all__r/  r,   r*   ú<module>rW     sø  ðñ ã ã Û Ý ß @Ñ @å &Ý !ß CÑ CÝ )Ý @Ý 7ß JÝ 9÷õ ÷ Dß ,ß Ið 
ˆ×	Ñ	˜HÓ	%€ð !"Ð ð %§,¡,ð ¸cð Ð[^ó ð" bfñ0Ø—,‘,ð0Ø25ð0ØKPÏ<É<ÐZ^ÑK^ó0ð4 /3ØñtØ��c�‰?ðtàðtð ðtð ×$Ñ$ tÑ+ð	tð
 ðtð ‡Z�ZótôpÐ#=ô ô,Ð!;ô ô8Ð!;ô ô2B8¨B¯I©Iô B8ôL* b§i¡iô *ôZ r§y¡yô ô2"¨¯©¯©ô "ô(˜2Ÿ9™9ô ô%˜RŸY™Yô %ôR1 §	¡	ô 1ôD "§)¡)ô DôN1 "§)¡)ô 1ôh% §¡ô %ôP< 2§9¡9ô <ô2 §	¡	Ð+?ô ô""- §	¡	Ð+?ô "-ôJ& §¡Ð,@ô &ô$U2˜Ÿ	™	ô U2ôp˜"Ÿ)™)ô ô06Ð5ô 6ôrXÐ5ô Xðv ô/4˜oó /4ó ð/4ôdn
Ð-ô n
ôb!Ð&=ô !ôH&Ð$;ô &ôR
Ð#:ô 
ô>]
Ð-ô ]
ô@*Ð&=ô *ôZ.Ð$;ô .ôb%Ð#:ô %ôP8M¨2¯9©9ô 8Môv:˜bŸi™iô :ñz ðôô
J
Ð+ó J
óð
J
ñZ ðôô
a
Ð5°ó a
óð
a
ðN 48Ø.2ØØØØ $Ø$)Ø"'ñLØ"ðLà×#Ñ#ðLð ×)Ñ)¨DÑ0ðLð ×$Ñ$ tÑ+ð	Lð
 ðLð ðLð ðLð �Y‰Y˜ÑðLð "ðLð  ðLð ×Ñ˜˜u×0Ñ0°%×2CÑ2CÐCÑDÑDóLñ^ ðôô
T
Ð5ó T
óð
T
ñn
 ðôô
b
Ð 7ó b
óð
b
ôJ;˜2Ÿ9™9ô ;ñ| ðôô
s�oó sóð
sòl�r,   