§
    ‚Štj¸b  ã                   ó˜  — d Z ddlmZ ddlZddlmZ ddlmZ ddlmZ ddl	m
Z
mZ d	d
lmZ  ej        e¦  «        Z e
d¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Ze
 G d„ de¦  «        ¦   «         ZdgZdS )zPyTorch UnivNetModel model.é    )Ú	dataclassN)Únné   )ÚModelOutput)ÚPreTrainedModel)Úauto_docstringÚloggingé   )ÚUnivNetConfigzÝ
    Output class for the [`UnivNetModel`], which includes the generated audio waveforms and the original unpadded
    lengths of those waveforms (so that the padding can be removed by [`UnivNetModel.batch_decode`]).
    )Úcustom_introc                   óP   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dS )ÚUnivNetModelOutputa"  
    waveforms (`torch.FloatTensor` of shape `(batch_size, sequence_length)`):
        Batched 1D (mono-channel) output audio waveforms.
    waveform_lengths (`torch.FloatTensor` of shape `(batch_size,)`):
        The batched length in samples of each unpadded waveform in `waveforms`.
    NÚ	waveformsÚwaveform_lengths)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚtorchÚFloatTensorÚ__annotations__r   © ó    új/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/univnet/modeling_univnet.pyr   r      sO   € € € € € € ðð ð +/€IˆuÔ  4Ñ'Ð.Ð.Ñ.Ø15Ð�eÔ'¨$Ñ.Ð5Ð5Ñ5Ð5Ð5r   r   c                   óJ   ‡ — e Zd ZdZdefˆ fd„Zdej        fd„Zd„ Z	d„ Z
ˆ xZS )Ú#UnivNetKernelPredictorResidualBlockzô
    Implementation of the residual block for the kernel predictor network inside each location variable convolution
    block (LVCBlock).

    Parameters:
        config: (`UnivNetConfig`):
            Config for the `UnivNetModel` model.
    Úconfigc                 ó²  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        |j        | _        |j        | _        | j        dz
  dz  }t          j
        | j        ¦  «        | _        t          j        | j        | j        | j        |d¬¦  «        | _        t          j        | j        | j        | j        |d¬¦  «        | _        d S )Nr
   é   T©ÚpaddingÚbias)ÚsuperÚ__init__Úmodel_in_channelsÚchannelsÚkernel_predictor_conv_sizeÚkernel_sizeÚkernel_predictor_dropoutÚdropout_probÚleaky_relu_sloper   ÚDropoutÚdropoutÚConv1dÚconv1Úconv2)Úselfr   r!   Ú	__class__s      €r   r$   z,UnivNetKernelPredictorResidualBlock.__init__;   sº   ø€ õ 	‰Œ×ÒÑÔÐØÔ0ˆŒØ!Ô<ˆÔØ"Ô;ˆÔØ &Ô 7ˆÔàÔ# aÑ'¨AÑ-ˆå”z $Ô"3Ñ4Ô4ˆŒÝ”Y˜tœ}¨d¬m¸TÔ=MÐW^ÐeiÐjÑjÔjˆŒ
Ý”Y˜tœ}¨d¬m¸TÔ=MÐW^ÐeiÐjÑjÔjˆŒ
ˆ
ˆ
r   Úhidden_statesc                 ó"  — |}|                       |¦  «        }|                      |¦  «        }t          j                             || j        ¦  «        }|                      |¦  «        }t          j                             || j        ¦  «        }||z   S ©N)r-   r/   r   Ú
functionalÚ
leaky_relur+   r0   )r1   r3   Úresiduals      r   Úforwardz+UnivNetKernelPredictorResidualBlock.forwardK   sy   € à ˆØŸš ]Ñ3Ô3ˆØŸ
š
 =Ñ1Ô1ˆÝœ×0Ò0°ÀÔ@UÑVÔVˆØŸ
š
 =Ñ1Ô1ˆÝœ×0Ò0°ÀÔ@UÑVÔVˆØ˜xÑ'Ð'r   c                 óÒ   — t           j        j        }t          t           j        j        d¦  «        rt           j        j        j        } || j        ¦  «          || j        ¦  «         d S ©NÚweight_norm)r   Úutilsr<   ÚhasattrÚparametrizationsr/   r0   ©r1   r<   s     r   Úapply_weight_normz5UnivNetKernelPredictorResidualBlock.apply_weight_normU   s[   € Ý”hÔ*ˆÝ•2”8Ô,¨mÑ<Ô<ð 	@Ýœ(Ô3Ô?ˆKàˆ�D”JÑÔÐØˆ�D”JÑÔÐÐÐr   c                 ó–   — t           j                             | j        ¦  «         t           j                             | j        ¦  «         d S r5   )r   r=   Úremove_weight_normr/   r0   ©r1   s    r   rC   z6UnivNetKernelPredictorResidualBlock.remove_weight_norm]   s8   € Ý
Œ×#Ò# D¤JÑ/Ô/Ð/Ý
Œ×#Ò# D¤JÑ/Ô/Ð/Ð/Ð/r   )r   r   r   r   r   r$   r   r   r9   rA   rC   Ú__classcell__©r2   s   @r   r   r   1   s’   ø€ € € € € ðð ðkàðkð kð kð kð kð kð ( UÔ%6ð (ð (ð (ð (ð ð  ð  ð0ð 0ð 0ð 0ð 0ð 0ð 0r   r   c                   óX   ‡ — e Zd ZdZ	 	 ddededefˆ fd„Zdej        fd	„Z	d
„ Z
d„ Zˆ xZS )ÚUnivNetKernelPredictora  
    Implementation of the kernel predictor network which supplies the kernel and bias for the location variable
    convolutional layers (LVCs) in each UnivNet LVCBlock.

    Based on the KernelPredictor implementation in
    [maum-ai/univnet](https://github.com/maum-ai/univnet/blob/9bb2b54838bb6d7ce767131cc7b8b61198bc7558/model/lvcnet.py#L7).

    Parameters:
        config: (`UnivNetConfig`):
            Config for the `UnivNetModel` model.
        conv_kernel_size (`int`, *optional*, defaults to 3):
            The kernel size for the location variable convolutional layer kernels (convolutional weight tensor).
        conv_layers (`int`, *optional*, defaults to 4):
            The number of location variable convolutional layers to output kernels and biases for.
    r   é   r   Úconv_kernel_sizeÚconv_layersc                 ó  •‡— t          ¦   «                              ¦   «          ‰j        | _        d‰j        z  | _        || _        || _        | j        | j        z  | j        z  | j        z  | _        | j        | j        z  | _        ‰j	        | _
        ‰j        | _        ‰j        | _        ‰j        | _        ‰j        | _        | j        dz
  dz  }t%          j        | j
        | j        ddd¬¦  «        | _        t%          j        ˆfd„t-          | j        ¦  «        D ¦   «         ¦  «        | _        t%          j        | j        | j        | j        |d¬¦  «        | _        t%          j        | j        | j        | j        |d¬¦  «        | _        d S )Nr   r
   é   Tr    c                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r   )r   )Ú.0Ú_r   s     €r   ú
<listcomp>z3UnivNetKernelPredictor.__init__.<locals>.<listcomp>�   s#   ø€ Ð'tÐ'tÐ'tÐXYÕ(KÈFÑ(SÔ(SÐ'tÐ'tÐ'tr   )r#   r$   Úmodel_hidden_channelsÚconv_in_channelsÚconv_out_channelsrJ   rK   Úkernel_channelsÚbias_channelsÚnum_mel_binsÚresnet_in_channelsÚ kernel_predictor_hidden_channelsÚresnet_hidden_channelsr'   Úresnet_kernel_sizeÚkernel_predictor_num_blocksÚ
num_blocksr+   r   r.   Ú
input_convÚ
ModuleListÚrangeÚ	resblocksÚkernel_convÚ	bias_conv)r1   r   rJ   rK   r!   r2   s    `   €r   r$   zUnivNetKernelPredictor.__init__s   sˆ  øø€ õ 	‰Œ×ÒÑÔÐà &Ô <ˆÔØ!" VÔ%AÑ!AˆÔØ 0ˆÔØ&ˆÔð Ô! DÔ$:Ñ:¸TÔ=RÑRÐUYÔUeÑeð 	Ôð "Ô3°dÔ6FÑFˆÔà"(Ô"5ˆÔØ&,Ô&MˆÔ#Ø"(Ô"CˆÔØ Ô<ˆŒà &Ô 7ˆÔàÔ*¨QÑ.°1Ñ4ˆåœ) DÔ$;¸TÔ=XÐZ[ÐefÐmqÐrÑrÔrˆŒåœÐ'tÐ'tÐ'tÐ'tÕ]bÐcgÔcrÑ]sÔ]sÐ'tÑ'tÔ'tÑuÔuˆŒåœ9ØÔ'¨Ô)=¸tÔ?VÐ`gÐnrð
ñ 
ô 
ˆÔõ œØÔ'¨Ô);¸TÔ=TÐ^eÐlpð
ñ 
ô 
ˆŒˆˆr   Úspectrogramc                 óú  — |j         \  }}}|                      |¦  «        }t          j                             || j        ¦  «        }| j        D ]} ||¦  «        }Œ|                      |¦  «        }|                      |¦  «        }| 	                    || j
        | j        | j        | j        |¦  «                             ¦   «         }	| 	                    || j
        | j        |¦  «                             ¦   «         }
|	|
fS )a­  
        Maps a conditioning log-mel spectrogram to a tensor of convolutional kernels and biases, for use in location
        variable convolutional layers. Note that the input spectrogram should have shape (batch_size, input_channels,
        seq_length).

        Args:
            spectrogram (`torch.FloatTensor` of shape `(batch_size, input_channels, seq_length)`):
                Tensor containing the log-mel spectrograms.

        Returns:
            tuple[`torch.FloatTensor, `torch.FloatTensor`]: tuple of tensors where the first element is the tensor of
            location variable convolution kernels of shape `(batch_size, self.conv_layers, self.conv_in_channels,
            self.conv_out_channels, self.conv_kernel_size, seq_length)` and the second element is the tensor of
            location variable convolution biases of shape `(batch_size, self.conv_layers. self.conv_out_channels,
            seq_length)`.
        )Úshaper^   r   r6   r7   r+   ra   rb   rc   ÚviewrK   rS   rT   rJ   Ú
contiguous)r1   rd   Ú
batch_sizerP   Ú
seq_lengthr3   ÚresblockÚkernel_hidden_statesÚbias_hidden_statesÚkernelsÚbiasess              r   r9   zUnivNetKernelPredictor.forward™   s  € ð" %0Ô$5Ñ!ˆ
�A�zàŸš¨Ñ4Ô4ˆÝœ×0Ò0°ÀÔ@UÑVÔVˆàœð 	4ð 	4ˆHØ$˜H ]Ñ3Ô3ˆMˆMà#×/Ò/°Ñ>Ô>ÐØ!Ÿ^š^¨MÑ:Ô:Ðð '×+Ò+ØØÔØÔ!ØÔ"ØÔ!Øñ
ô 
÷ Š*‰,Œ,ð 	ð $×(Ò(ØØÔØÔ"Øñ	
ô 
÷
 Š*‰,Œ,ð 	ð ˜ˆÐr   c                 ó.  — t           j        j        }t          t           j        j        d¦  «        rt           j        j        j        } || j        ¦  «         | j        D ]}|                     ¦   «          Œ || j        ¦  «          || j	        ¦  «         d S r;   )
r   r=   r<   r>   r?   r^   ra   rA   rb   rc   ©r1   r<   Úlayers      r   rA   z(UnivNetKernelPredictor.apply_weight_normÇ   s”   € Ý”hÔ*ˆÝ•2”8Ô,¨mÑ<Ô<ð 	@Ýœ(Ô3Ô?ˆKàˆ�D”OÑ$Ô$Ð$Ø”^ð 	&ð 	&ˆEØ×#Ò#Ñ%Ô%Ð%Ð%Øˆ�DÔ$Ñ%Ô%Ð%Øˆ�D”NÑ#Ô#Ð#Ð#Ð#r   c                 ó  — t           j                             | j        ¦  «         | j        D ]}|                     ¦   «          Œt           j                             | j        ¦  «         t           j                             | j        ¦  «         d S r5   )r   r=   rC   r^   ra   rb   rc   ©r1   rr   s     r   rC   z)UnivNetKernelPredictor.remove_weight_normÒ   sw   € Ý
Œ×#Ò# D¤OÑ4Ô4Ð4Ø”^ð 	'ð 	'ˆEØ×$Ò$Ñ&Ô&Ð&Ð&Ý
Œ×#Ò# DÔ$4Ñ5Ô5Ð5Ý
Œ×#Ò# D¤NÑ3Ô3Ð3Ð3Ð3r   )r   rI   ©r   r   r   r   r   Úintr$   r   r   r9   rA   rC   rE   rF   s   @r   rH   rH   b   s®   ø€ € € € € ðð ð& !"Øð	$
ð $
àð$
ð ð$
ð ð	$
ð $
ð $
ð $
ð $
ð $
ðL, 5Ô#4ð ,ð ,ð ,ð ,ð\	$ð 	$ð 	$ð4ð 4ð 4ð 4ð 4ð 4ð 4r   rH   c                   ó„   ‡ — e Zd ZdZdededefˆ fd„Zdd„Z	 	 dd	ej	        d
ej	        dej	        dedef
d„Z
d„ Zd„ Zˆ xZS )ÚUnivNetLvcResidualBlocka•  
    Implementation of the location variable convolution (LVC) residual block for the UnivNet residual network.

    Parameters:
        config: (`UnivNetConfig`):
            Config for the `UnivNetModel` model.
        kernel_size (`int`):
            The kernel size for the dilated 1D convolutional layer.
        dilation (`int`):
            The dilation for the dilated 1D convolutional layer.
    r   r(   Údilationc                 ó"  •— t          ¦   «                              ¦   «          |j        | _        || _        || _        |j        | _        | j        | j        dz
  z  dz  }t          j        | j        | j        | j        || j        ¬¦  «        | _	        d S )Nr
   r   )r!   ry   )
r#   r$   rR   Úhidden_channelsr(   ry   r+   r   r.   Úconv)r1   r   r(   ry   r!   r2   s        €r   r$   z UnivNetLvcResidualBlock.__init__ç   s�   ø€ õ 	‰Œ×ÒÑÔÐØ%Ô;ˆÔØ&ˆÔØ ˆŒØ &Ô 7ˆÔà”- 4Ô#3°aÑ#7Ñ8¸AÑ=ˆå”IØÔ ØÔ ØÔØØ”]ð
ñ 
ô 
ˆŒ	ˆ	ˆ	r   é   c                 ó¦  — |}t           j                             || j        ¦  «        }|                      |¦  «        }t           j                             || j        ¦  «        }|                      ||||¬¦  «        }t          j        |d d …d | j        …d d …f         ¦  «        t          j	        |d d …| j        d …d d …f         ¦  «        z  }||z   }|S ©N)Úhop_size)
r   r6   r7   r+   r|   Úlocation_variable_convolutionr   Úsigmoidr{   Útanh)r1   r3   Úkernelr"   r€   r8   s         r   r9   zUnivNetLvcResidualBlock.forwardý   sß   € Ø ˆÝœ×0Ò0°ÀÔ@UÑVÔVˆØŸ	š	 -Ñ0Ô0ˆÝœ×0Ò0°ÀÔ@UÑVÔVˆØ×:Ò:¸=È&ÐRVÐaiÐ:ÑjÔjˆåœ m°A°A°AÐ7M¸Ô9MÐ7MÈqÈqÈqÐ4PÔ&QÑRÔRÕUZÔU_Ø˜!˜!˜!˜TÔ1Ð3Ð3°Q°Q°QÐ6Ô7ñV
ô V
ñ 
ˆð ! =Ñ0ˆàÐr   r
   r3   r„   r"   r€   c                 óê  — |j         \  }}}|j         \  }}}	}
}|||z  k    rt          d||z  › d|› d�¦  «        ‚|t          |
dz
  dz  ¦  «        z  }t          j                             |||fdd¦  «        }|                     d|d|z  z   |¦  «        }||k     r$t          j                             |d|fdd¦  «        }|                     d||¦  «        }|d	d	…d	d	…d	d	…d	d	…d	|…f         }|                     dd
¦  «        }|                     d
|
d¦  «        }t          j	        d||¦  «        }| 
                    d¦  «         
                    d¦  «        }||z   }|                     ||	d¦  «        }|S )uÄ  
        Performs location-variable convolution operation on the input sequence (hidden_states) using the local
        convolution kernel. This was introduced in [LVCNet: Efficient Condition-Dependent Modeling Network for Waveform
        Generation](https://huggingface.co/papers/2102.10815) by Zhen Zheng, Jianzong Wang, Ning Cheng, and Jing Xiao.

        Time: 414 Î¼s Â± 309 ns per loop (mean Â± std. dev. of 7 runs, 1000 loops each), test on NVIDIA V100.

        Args:
            hidden_states (`torch.FloatTensor` of shape `(batch_size, in_channels, in_length)`):
                The input sequence of shape (batch, in_channels, in_length).
            kernel (`torch.FloatTensor` of shape `(batch_size, in_channels, out_channels, kernel_size, kernel_length)`):
                The local convolution kernel of shape (batch, in_channels, out_channels, kernel_size, kernel_length).
            bias (`torch.FloatTensor` of shape `(batch_size, out_channels, kernel_length)`):
                The bias for the local convolution of shape (batch, out_channels, kernel_length).
            dilation (`int`, *optional*, defaults to 1):
                The dilation of convolution.
            hop_size (`int`, *optional*, defaults to 256):
                The hop_size of the conditioning sequence.
        Returns:
            `torch.FloatTensor`: the output sequence after performing local convolution with shape (batch_size,
            out_channels, in_length).
        z#Dim 2 of `hidden_states` should be z
) but got zX. Please check `hidden_states` or `kernel` and `hop_size` to make sure they are correct.r
   r   Úconstantr   r   NrI   zbildsk,biokl->bolsdéÿÿÿÿ)rf   Ú
ValueErrorrv   r   r6   ÚpadÚunfoldÚ	transposer   ÚeinsumÚ	unsqueezerg   )r1   r3   r„   r"   ry   r€   ÚbatchrP   Ú	in_lengthÚout_channelsr(   Úkernel_lengthr!   Úoutput_hidden_statess                 r   r�   z5UnivNetLvcResidualBlock.location_variable_convolution  sÌ  € ð< ,Ô1Ñˆˆq�)Ø=C¼\Ñ:ˆˆq�, ¨]Ø˜¨Ñ1Ò2Ð2Ýð]°mÀhÑ6Nð ]ð ]ÐZcð ]ð ]ð ]ñô ð ð
 �S +°¡/°QÑ!6Ñ7Ô7Ñ7ˆõ œ×)Ò)¨-¸'À7Ð9KÈZÐYZÑ[Ô[ˆà%×,Ò,¨Q°¸1¸w¹;Ñ0FÈÑQÔQˆà�hÒÐÝœM×-Ò-¨m¸aÀ¸]ÈJÐXYÑZÔZˆMà%×,Ò,¨Q°¸(ÑCÔCˆØ% a a a¨¨¨¨A¨A¨A¨q¨q¨q°)°8°)Ð&;Ô<ˆà%×/Ò/°°1Ñ5Ô5ˆà%×,Ò,¨Q°¸QÑ?Ô?ˆõ  %œ|Ð,AÀ=ÐRXÑYÔYÐà�~Š~˜bÑ!Ô!×+Ò+¨BÑ/Ô/ˆØ3°dÑ:ÐØ3×8Ò8¸ÀÈbÑQÔQÐà#Ð#r   c                 ó²   — t           j        j        }t          t           j        j        d¦  «        rt           j        j        j        } || j        ¦  «         d S r;   )r   r=   r<   r>   r?   r|   r@   s     r   rA   z)UnivNetLvcResidualBlock.apply_weight_normM  sI   € Ý”hÔ*ˆÝ•2”8Ô,¨mÑ<Ô<ð 	@Ýœ(Ô3Ô?ˆKàˆ�D”IÑÔÐÐÐr   c                 óN   — t           j                             | j        ¦  «         d S r5   )r   r=   rC   r|   rD   s    r   rC   z*UnivNetLvcResidualBlock.remove_weight_normT  s    € Ý
Œ×#Ò# D¤IÑ.Ô.Ð.Ð.Ð.r   ©r}   )r
   r}   )r   r   r   r   r   rv   r$   r9   r   r   r�   rA   rC   rE   rF   s   @r   rx   rx   Ú   sð   ø€ € € € € ð
ð 
ð
àð
ð ð
ð ð	
ð 
ð 
ð 
ð 
ð 
ð,ð ð ð ð* Øð>$ð >$àÔ(ð>$ð Ô!ð>$ð Ôð	>$ð
 ð>$ð ð>$ð >$ð >$ð >$ð@ð ð ð/ð /ð /ð /ð /ð /ð /r   rx   c                   ód   ‡ — e Zd ZdZ	 ddededefˆ fd„Zdej        dej        fd	„Z	d
„ Z
d„ Zˆ xZS )ÚUnivNetLvcBlocka#  
    Implementation of the location variable convolution (LVC) residual block of the UnivNet residual block. Includes a
    `UnivNetKernelPredictor` inside to predict the kernels and biases of the LVC layers.

    Based on LVCBlock in
    [maum-ai/univnet](https://github.com/maum-ai/univnet/blob/9bb2b54838bb6d7ce767131cc7b8b61198bc7558/model/lvcnet.py#L98)

    Parameters:
        config (`UnivNetConfig`):
            Config for the `UnivNetModel` model.
        layer_id (`int`):
            An integer corresponding to the index of the current LVC resnet block layer. This should be between 0 and
            `len(config.resblock_stride_sizes) - 1)` inclusive.
        lvc_hop_size (`int`, *optional*, defaults to 256):
            The hop size for the location variable convolutional layers.
    r}   r   Úlayer_idÚlvc_hop_sizec           	      óz  •‡ ‡— t          ¦   «                              ¦   «          ‰j        ‰ _        ‰j        |         ‰ _        ‰j        |         ‰ _        ‰j        |         ‰ _	        |‰ _
        ‰j        ‰ _        t          ‰ j	        ¦  «        ‰ _        t          j        ‰ j        ‰ j        d‰ j        z  ‰ j        ‰ j        dz  ‰ j        dz  z   ‰ j        dz  ¬¦  «        ‰ _        t#          ‰‰ j        ‰ j        ¦  «        ‰ _        t          j        ˆˆ fd„t)          ‰ j        ¦  «        D ¦   «         ¦  «        ‰ _        d S )Nr   )Ústrider!   Úoutput_paddingc                 óR   •— g | ]#}t          ‰‰j        ‰j        |         ¦  «        ‘Œ$S r   )rx   r(   Ú	dilations)rO   Úir   r1   s     €€r   rQ   z,UnivNetLvcBlock.__init__.<locals>.<listcomp>…  s1   ø€ ÐrÐrÐrÐVWÕ$ V¨TÔ-=¸t¼~ÈaÔ?PÑQÔQÐrÐrÐrr   )r#   r$   rR   r{   Úresblock_kernel_sizesr(   Úresblock_stride_sizesr›   Úresblock_dilation_sizesrž   Úcond_hop_lengthr+   Úlenr]   r   ÚConvTranspose1dÚ	convt_prerH   Úkernel_predictorr_   r`   ra   )r1   r   r˜   r™   r2   s   ``  €r   r$   zUnivNetLvcBlock.__init__j  s&  øøø€ õ 	‰Œ×ÒÑÔÐØ%Ô;ˆÔØ!Ô7¸ÔAˆÔØÔ2°8Ô<ˆŒØÔ7¸ÔAˆŒØ+ˆÔØ &Ô 7ˆÔÝ˜dœnÑ-Ô-ˆŒåÔ+ØÔ ØÔ Ø�”‰OØ”;Ø”K 1Ñ$ t¤{°Q¡Ñ6Øœ;¨™?ð
ñ 
ô 
ˆŒõ !7°v¸tÔ?OÐQUÔQ`Ñ aÔ aˆÔåœØrÐrÐrÐrÐrÕ[`ÐaeÔapÑ[qÔ[qÐrÑrÔrñ
ô 
ˆŒˆˆr   r3   rd   c           	      óZ  — t           j                             || j        ¦  «        }|                      |¦  «        }|                      |¦  «        \  }}t          | j        ¦  «        D ]C\  }}|d d …|d d …d d …d d …d d …f         }|d d …|d d …d d …f         } ||||| j        ¬¦  «        }ŒD|S r   )	r   r6   r7   r+   r¦   r§   Ú	enumeratera   r£   )	r1   r3   rd   rn   ro   rŸ   rk   r„   r"   s	            r   r9   zUnivNetLvcBlock.forwardˆ  sÑ   € õ œ×0Ò0°ÀÔ@UÑVÔVˆØŸš }Ñ5Ô5ˆà×/Ò/°Ñ<Ô<‰ˆ�å$ T¤^Ñ4Ô4ð 	að 	a‰KˆAˆxØ˜Q˜Q˜Q  1 1 1 a a a¨¨¨¨A¨A¨AÐ-Ô.ˆFØ˜!˜!˜!˜Q    1 1 1˜*Ô%ˆDØ$˜H ]°F¸DÈ4ÔK_Ð`Ñ`Ô`ˆMˆMàÐr   c                 ó   — t           j        j        }t          t           j        j        d¦  «        rt           j        j        j        } || j        ¦  «         | j                             ¦   «          | j        D ]}|                     ¦   «          Œd S r;   )	r   r=   r<   r>   r?   r¦   r§   rA   ra   rq   s      r   rA   z!UnivNetLvcBlock.apply_weight_norm—  sˆ   € Ý”hÔ*ˆÝ•2”8Ô,¨mÑ<Ô<ð 	@Ýœ(Ô3Ô?ˆKàˆ�D”NÑ#Ô#Ð#ØÔ×/Ò/Ñ1Ô1Ð1Ø”^ð 	&ð 	&ˆEØ×#Ò#Ñ%Ô%Ð%Ð%ð	&ð 	&r   c                 ó¼   — t           j                             | j        ¦  «         | j                             ¦   «          | j        D ]}|                     ¦   «          Œd S r5   )r   r=   rC   r¦   r§   ra   rt   s     r   rC   z"UnivNetLvcBlock.remove_weight_norm¡  s_   € Ý
Œ×#Ò# D¤NÑ3Ô3Ð3ØÔ×0Ò0Ñ2Ô2Ð2Ø”^ð 	'ð 	'ˆEØ×$Ò$Ñ&Ô&Ð&Ð&ð	'ð 	'r   r•   ru   rF   s   @r   r—   r—   X  s³   ø€ € € € € ðð ð*  ð	
ð 
àð
ð ð
ð ð	
ð 
ð 
ð 
ð 
ð 
ð< UÔ%6ð ÀUÔEVð ð ð ð ð&ð &ð &ð'ð 'ð 'ð 'ð 'ð 'ð 'r   r—   c                   óÚ   ‡ — e Zd ZU eed<   dZdZdefˆ fd„Ze	 	 	 	 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e	j
                 ez  fd„¦   «         Zd„ Zd„ Zˆ xZS )ÚUnivNetModelr   Úinput_featuresÚaudioc                 ó6  •‡‡— t          ¦   «                              ‰¦  «         t          ‰j        ¦  «        | _        ‰j        | _        t          j        ‰j        ‰j	        dddd¬¦  «        | _
        t          ‰j        ¦  «        }d}g Š‰j        D ]}||z  }‰                     |¦  «         Œt          j        ˆˆfd„t          |¦  «        D ¦   «         ¦  «        | _        t          j        ‰j	        dddd¬¦  «        | _        |                      ¦   «          d S )Né   r
   r   Úreflect)r(   r›   r!   Úpadding_modec                 ó@   •— g | ]}t          ‰|‰|         ¬ ¦  «        ‘ŒS ))r˜   r™   )r—   )rO   rŸ   r   Úhop_lengthss     €€r   rQ   z)UnivNetModel.__init__.<locals>.<listcomp>Æ  sG   ø€ ð ð ð ð õ  ØØØ!,¨Q¤ðñ ô ðð ð r   )r!   r³   )r#   r$   r¤   r    Únum_kernelsr+   r   r.   r%   rR   Úconv_prer¡   Úappendr_   r`   ra   Ú	conv_postÚ	post_init)r1   r   Ú
num_layersÚ
hop_lengthr›   rµ   r2   s    `   @€r   r$   zUnivNetModel.__init__®  s<  øøø€ Ý‰Œ×Ò˜Ñ Ô Ð å˜vÔ;Ñ<Ô<ˆÔØ &Ô 7ˆÔåœ	ØÔ$ØÔ(ØØØØ"ð
ñ 
ô 
ˆŒõ ˜Ô5Ñ6Ô6ˆ
Øˆ
ØˆØÔ2ð 	+ð 	+ˆFØ# fÑ,ˆJØ×Ò˜zÑ*Ô*Ð*Ð*åœðð ð ð ð õ ˜zÑ*Ô*ðñ ô ñ	
ô 	
ˆŒõ œ 6Ô#?ÀÀAÈqÐ_hÐiÑiÔiˆŒð 	�ŠÑÔÐÐÐr   NÚnoise_sequenceÚpadding_maskÚ	generatorÚreturn_dictÚreturnc                 óÆ  — |�|n| j         j        }|                     ¦   «         dk    }|s|                     d¦  «        }|j        \  }}	}
|�0|                     ¦   «         dk    }|s|                     d¦  «        }n1||	| j         j        f}t          j        |||j        |j	        ¬¦  «        }|j        d         }|dk    r|dk    r| 
                    |dd¦  «        }n#|dk    r|dk    r| 
                    |dd¦  «        }||k    rt          d|› d|› d�¦  «        ‚|�V|                     ¦   «         dk    r|                     d¦  «        }|j        d         }||k    rt          d	|› d|› d�¦  «        ‚|                     d
d¦  «        }|                     d
d¦  «        }|                      |¦  «        }| j        D ]} |||¦  «        }Œt          j                             || j        ¦  «        }|                      |¦  «        }t          j        |¦  «        }|                     d¦  «        }d}|�t          j        |d¬¦  «        }|s||f}|S t/          ||¬¦  «        S )a´  
        noise_sequence (`torch.FloatTensor`, *optional*):
            Tensor containing a noise sequence of standard Gaussian noise. Can be batched and of shape `(batch_size,
            sequence_length, config.model_in_channels)`, or un-batched and of shape (sequence_length,
            config.model_in_channels)`. If not supplied, will be randomly generated.
        padding_mask (`torch.BoolTensor`, *optional*):
            Mask indicating which parts of each sequence are padded. Mask values are selected in `[0, 1]`:

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

            The mask can be batched and of shape `(batch_size, sequence_length)` or un-batched and of shape
            `(sequence_length,)`.
        generator (`torch.Generator`, *optional*):
            A [torch generator](https://pytorch.org/docs/stable/generated/torch.Generator.html) to make generation
            deterministic.
            return_dict:
            Whether to return a [`~utils.ModelOutput`] subclass instead of a plain tuple.

        Example:

         ```python
         >>> from transformers import UnivNetFeatureExtractor, UnivNetModel
         >>> from datasets import load_dataset, Audio

         >>> model = UnivNetModel.from_pretrained("dg845/univnet-dev")
         >>> feature_extractor = UnivNetFeatureExtractor.from_pretrained("dg845/univnet-dev")

         >>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
         >>> # Resample the audio to the feature extractor's sampling rate.
         >>> ds = ds.cast_column("audio", Audio(sampling_rate=feature_extractor.sampling_rate))
         >>> inputs = feature_extractor(
         ...     ds[0]["audio"]["array"], sampling_rate=ds[0]["audio"]["sampling_rate"], return_tensors="pt"
         ... )
         >>> audio = model(**inputs).waveforms
         >>> list(audio.shape)
         [1, 140288]
         ```
        Nr   r   )r¿   ÚdtypeÚdevicer
   z&The batch size of `noise_sequence` is z+ and the batch size of `input_features` is z', but the two are expected to be equal.z$The batch size of `padding_mask` is r   )Údim)r   r   )r   rÀ   rÅ   r�   rf   r%   r   ÚrandnrÃ   rÄ   Úrepeatrˆ   r‹   r·   ra   r   r6   r7   r+   r¹   rƒ   ÚsqueezeÚsumr   )r1   r®   r½   r¾   r¿   rÀ   ÚkwargsÚspectrogram_batchedÚspectrogram_batch_sizeÚspectrogram_lengthrP   Únoise_sequence_batchedÚnoise_sequence_shapeÚnoise_sequence_batch_sizeÚpadding_mask_batch_sizer3   rk   Úwaveformr   Úoutputss                       r   r9   zUnivNetModel.forwardÕ  s  € ðb &1Ð%<�k�kÀ$Ä+ÔBYˆð -×0Ò0Ñ2Ô2°aÒ7ÐØ"ð 	9Ø+×5Ò5°aÑ8Ô8ˆNØ8FÔ8LÑ5ÐÐ 2°AàÐ%Ø%3×%7Ò%7Ñ%9Ô%9¸QÒ%>Ð"Ø)ð =Ø!/×!9Ò!9¸!Ñ!<Ô!<�øð %;Ð<NÐPTÔP[ÔPmÐ#nÐ Ý"œ[Ø$°	ÀÔAUÐ^lÔ^sðñ ô ˆNð %3Ô$8¸Ô$;Ð!à! AÒ%Ð%Ð*CÀqÒ*HÐ*Hà+×2Ò2Ð3IÈ1ÈaÑPÔPˆNˆNØ&¨Ò*Ð*Ð/EÈÒ/JÐ/Jà+×2Ò2Ð3LÈaÐQRÑSÔSˆNà$Ð(>Ò>Ð>ÝðhÐ9Rð hð hØ(>ðhð hð hñô ð ð
 Ð#Ø×ÒÑ!Ô! QÒ&Ð&Ø+×5Ò5°aÑ8Ô8�Ø&2Ô&8¸Ô&;Ð#Ø&Ð*@Ò@Ð@Ý ðlÐ;Rð lð lØ,Bðlð lð lñô ð ð '×0Ò0°°AÑ6Ô6ˆØ'×1Ò1°!°QÑ7Ô7ˆàŸš mÑ4Ô4ˆàœð 	Dð 	DˆHØ$˜H ]°NÑCÔCˆMˆMåœ×0Ò0°ÀÔ@UÑVÔVˆØŸš }Ñ5Ô5ˆÝœ
 =Ñ1Ô1ˆð !×(Ò(¨Ñ+Ô+ˆð  ÐØÐ#å$œy¨¸1Ð=Ñ=Ô=Ðàð 	ØÐ!1Ð2ˆGØˆNå!ØØ-ð
ñ 
ô 
ð 	
r   c                 ó  — t           j        j        }t          t           j        j        d¦  «        rt           j        j        j        } || j        ¦  «         | j        D ]}|                     ¦   «          Œ || j        ¦  «         d S r;   )	r   r=   r<   r>   r?   r·   ra   rA   r¹   rq   s      r   rA   zUnivNetModel.apply_weight_normQ  s�   € Ý”hÔ*ˆÝ•2”8Ô,¨mÑ<Ô<ð 	@Ýœ(Ô3Ô?ˆKàˆ�D”MÑ"Ô"Ð"Ø”^ð 	&ð 	&ˆEØ×#Ò#Ñ%Ô%Ð%Ð%Øˆ�D”NÑ#Ô#Ð#Ð#Ð#r   c                 óÒ   — t           j                             | j        ¦  «         | j        D ]}|                     ¦   «          Œt           j                             | j        ¦  «         d S r5   )r   r=   rC   r·   ra   r¹   rt   s     r   rC   zUnivNetModel.remove_weight_norm[  s^   € Ý
Œ×#Ò# D¤MÑ2Ô2Ð2Ø”^ð 	'ð 	'ˆEØ×$Ò$Ñ&Ô&Ð&Ð&Ý
Œ×#Ò# D¤NÑ3Ô3Ð3Ð3Ð3r   )NNNN)r   r   r   r   r   Úmain_input_nameÚinput_modalitiesr$   r   r   r   Ú	GeneratorÚboolÚtupler   r9   rA   rC   rE   rF   s   @r   r­   r­   ¨  s!  ø€ € € € € € àÐÐÑØ&€OØÐð%˜}ð %ð %ð %ð %ð %ð %ðN ð 48Ø15Ø,0Ø#'ðy
ð y
àÔ)ðy
ð Ô)¨DÑ0ðy
ð Ô'¨$Ñ.ð	y
ð
 ”? TÑ)ðy
ð ˜D‘[ðy
ð 
ˆuÔ Ô	!Ð$6Ñ	6ðy
ð y
ð y
ñ „^ðy
ðv$ð $ð $ð4ð 4ð 4ð 4ð 4ð 4ð 4r   r­   )r   Údataclassesr   r   r   Úmodeling_outputsr   Úmodeling_utilsr   r=   r   r	   Úconfiguration_univnetr   Ú
get_loggerr   Úloggerr   ÚModuler   rH   rx   r—   r­   Ú__all__r   r   r   ú<module>rã      s  ðð "Ð !à !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð à +Ð +Ð +Ð +Ð +Ð +Ø -Ð -Ð -Ð -Ð -Ð -Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0ð 
ˆÔ	˜HÑ	%Ô	%€ð €ððñ ô ð ð	6ð 	6ð 	6ð 	6ð 	6˜ñ 	6ô 	6ñ „ñô ð	6ð.0ð .0ð .0ð .0ð .0¨"¬)ñ .0ô .0ð .0ðbu4ð u4ð u4ð u4ð u4˜RœYñ u4ô u4ð u4ðp{/ð {/ð {/ð {/ð {/˜bœiñ {/ô {/ð {/ð|M'ð M'ð M'ð M'ð M'�b”iñ M'ô M'ð M'ð` ðv4ð v4ð v4ð v4ð v4�?ñ v4ô v4ñ „ðv4ðr Ð
€€€r   