
    fThe                        S r SSKJr  SSKJrJrJr  SSKrSSKrSSKJ	r	  SSK
Jr  SSKJr  SS	KJrJr  S
SKJr  \R&                  " \5      r\ " S S\5      5       r " S S\	R.                  5      r " S S\	R.                  5      r " S S\	R.                  5      r " S S\	R.                  5      r\ " S S\5      5       rS/rg)zPyTorch UnivNetModel model.    )	dataclass)OptionalTupleUnionN)nn   )ModelOutput)PreTrainedModel)auto_docstringlogging   )UnivNetConfigc                   j    \ rS rSr% SrSr\\R                     \	S'   Sr
\\R                     \	S'   Srg)UnivNetModelOutput    a  
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`]).

Args:
    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____firstlineno____doc__r   r   torchFloatTensor__annotations__r   __static_attributes__r       d/var/www/auris/envauris/lib/python3.13/site-packages/transformers/models/univnet/modeling_univnet.pyr   r       s4    	 .2Ix))*148hu0018r   r   c                   b   ^  \ rS rSrSrS\4U 4S jjrS\R                  4S jr	S r
S rS	rU =r$ )
#UnivNetKernelPredictorResidualBlock1   z
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U ]  5         UR                  U l        UR                  U l        UR                  U l        UR                  U l        U R
                  S-
  S-  n[        R                  " U R                  5      U l        [        R                  " U R                  U R                  U R
                  USS9U l        [        R                  " U R                  U R                  U R
                  USS9U l        g )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*   ,UnivNetKernelPredictorResidualBlock.__init__;   s     	00!<<";; & 7 7##a'A-zz$"3"34YYt}}dmmT=M=MW^eij
YYt}}dmmT=M=MW^eij
r   hidden_statesc                    UnU R                  U5      nU R                  U5      n[        R                  R	                  XR
                  5      nU R                  U5      n[        R                  R	                  XR
                  5      nX-   $ N)r3   r5   r   
functional
leaky_relur1   r6   )r7   r:   residuals      r   forward+UnivNetKernelPredictorResidualBlock.forwardK   sn     ]3

=100@U@UV

=100@U@UV''r   c                    [         R                  R                  n[        [         R                  R                  S5      (       a$  [         R                  R                  R                  nU" U R
                  5        U" U R                  5        g Nweight_norm)r   utilsrD   hasattrparametrizationsr5   r6   r7   rD   s     r   apply_weight_norm5UnivNetKernelPredictorResidualBlock.apply_weight_normU   sU    hh**288,,m<<((33??KDJJDJJr   c                     [         R                  R                  U R                  5        [         R                  R                  U R                  5        g r<   )r   rE   remove_weight_normr5   r6   r7   s    r   rL   6UnivNetKernelPredictorResidualBlock.remove_weight_norm]   s.    
##DJJ/
##DJJ/r   )r,   r5   r6   r3   r0   r.   r1   )r   r   r   r   r   r   r*   r   r   r@   rI   rL   r   __classcell__r8   s   @r   r!   r!   1   s8    kk (U%6%6 ( 0 0r   r!   c                   r   ^  \ rS rSrSr  SS\S\S\4U 4S jjjrS\R                  4S jr
S	 rS
 rSrU =r$ )UnivNetKernelPredictorb   a  
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#   conv_kernel_sizeconv_layersc                   > [         TU ]  5         UR                  U l        SUR                  -  U l        X l        X0l        U R                  U R                  -  U R
                  -  U R                  -  U l        U R                  U R                  -  U l        UR                  U l
        UR                  U l        UR                  U l        UR                  U l        UR"                  U l        U R                  S-
  S-  n[$        R&                  " U R                  U R                  SSSS9U l        [$        R*                  " [-        U R                   5       Vs/ s H  n[/        U5      PM     sn5      U l        [$        R&                  " U R                  U R                  U R                  USS9U l        [$        R&                  " U R                  U R                  U R                  USS9U l        g s  snf )Nr%   r      Tr&   )r)   r*   model_hidden_channelsconv_in_channelsconv_out_channelsrT   rU   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_blocksr1   r   r4   
input_conv
ModuleListranger!   	resblockskernel_conv	bias_conv)r7   r#   rT   rU   r'   _r8   s         r   r*   UnivNetKernelPredictor.__init__s   s    	 & < <!"V%A%A!A 0& !!D$:$::T=R=RRUYUeUee 	 "33d6F6FF"("5"5&,&M&M#"("C"C << & 7 7**Q.14))D$;$;T=X=XZ[efmqr]bcgcrcr]s't]sXY(KF(S]s'tu99'')=)=t?V?V`gnr
 ''););T=T=T^elp
 (us   G.spectrogramc                    UR                   u  p#nU R                  U5      n[        R                  R	                  XPR
                  5      nU R                   H  nU" U5      nM     U R                  U5      nU R                  U5      nUR                  UU R                  U R                  U R                  U R                  U5      R                  5       n	UR                  UU R                  U R                  U5      R                  5       n
X4$ )aE  
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)`.
)shaperd   r   r=   r>   r1   rg   rh   ri   viewrU   rY   rZ   rT   
contiguous)r7   rl   
batch_sizerj   
seq_lengthr:   resblockkernel_hidden_statesbias_hidden_stateskernelsbiasess              r   r@   UnivNetKernelPredictor.forward   s    " %0$5$5!
z400@U@UVH$]3M '  $//>!^^M: '++!!""!!
 *, 	 $((""	

 *, 	 r   c                    [         R                  R                  n[        [         R                  R                  S5      (       a$  [         R                  R                  R                  nU" U R
                  5        U R                   H  nUR                  5         M     U" U R                  5        U" U R                  5        g rC   )
r   rE   rD   rF   rG   rd   rg   rI   rh   ri   r7   rD   layers      r   rI   (UnivNetKernelPredictor.apply_weight_norm   s}    hh**288,,m<<((33??KDOO$^^E##% $D$$%DNN#r   c                 @   [         R                  R                  U R                  5        U R                   H  nUR                  5         M     [         R                  R                  U R
                  5        [         R                  R                  U R                  5        g r<   )r   rE   rL   rd   rg   rh   ri   r7   r{   s     r   rL   )UnivNetKernelPredictor.remove_weight_norm   s`    
##DOO4^^E$$& $
##D$4$45
##DNN3r   )r\   ri   rY   rT   rU   rZ   rd   r[   rh   r1   rc   rg   r`   r^   ra   )r      r   r   r   r   r   r   intr*   r   r   r@   rI   rL   r   rO   rP   s   @r   rR   rR   b   sY    & !"	$
$
 $
 	$
 $
L,5#4#4 ,\	$4 4r   rR   c                      ^  \ rS rSrSrS\S\S\4U 4S jjrSS jr  SS\	R                  S	\	R                  S
\	R                  S\S\4
S jjrS rS rSrU =r$ )UnivNetLvcResidualBlock   aq  
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                 F  > [         TU ]  5         UR                  U l        X l        X0l        UR                  U l        U R
                  U R                  S-
  -  S-  n[        R                  " U R                  U R                  U R                  UU R
                  S9U l	        g )Nr   r%   )r'   r   )
r)   r*   rX   hidden_channelsr.   r   r1   r   r4   conv)r7   r#   r.   r   r'   r8   s        r   r*    UnivNetLvcResidualBlock.__init__   s     	%;;&  & 7 7--4#3#3a#78A=II    ]]
	r   c                    Un[         R                  R                  XR                  5      nU R	                  U5      n[         R                  R                  XR                  5      nU R                  XX4S9n[        R                  " US S 2S U R                  2S S 24   5      [        R                  " US S 2U R                  S 2S S 24   5      -  nXQ-   nU$ N)hop_size)
r   r=   r>   r1   r   location_variable_convolutionr   sigmoidr   tanh)r7   r:   kernelr(   r   r?   s         r   r@   UnivNetLvcResidualBlock.forward   s     00@U@UV		-000@U@UV::=RV:jmA7M9M9M7Mq4P&QRUZU_U_!T113Q67V
 
 !0r   r:   r   r(   r   c                 *   UR                   u  pgnUR                   u  pgpnXU-  :w  a  [        SX-   SU S35      eU[        U
S-
  S-  5      -  n[        R                  R                  XU4SS5      nUR                  SUSU-  -   U5      nXT:  a$  [        R                  R                  USU4SS5      nUR                  SXD5      nUS	S	2S	S	2S	S	2S	S	2S	U24   nUR                  SS
5      nUR                  S
U
S5      n[        R                  " SX5      nUR                  [        R                  S9nUR                  S5      R                  S5      R                  [        R                  S9nX-   nUR                  5       R                  XiS5      nU$ )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://arxiv.org/abs/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   Nr   zbildsk,biokl->bolsd)memory_format)rn   
ValueErrorr   r   r=   padunfold	transposer   einsumtochannels_last_3d	unsqueezerp   ro   )r7   r:   r   r(   r   r   batchrj   	in_lengthout_channelsr.   kernel_lengthr'   output_hidden_statess                 r   r   5UnivNetLvcResidualBlock.location_variable_convolution  s   < ,11)=C\\:,]125m6N5OzZcYd e] ] 
 S+/Q!677 ))-79KZYZ[%,,Q1w;0FQMM--ma]JXYZM%,,QC%aAq)8)&;<%//15%,,QQ?  %||,A=Y366UE[E[6\~~b!++B/22AWAW2X3:3>>@EEe[]^##r   c                     [         R                  R                  n[        [         R                  R                  S5      (       a$  [         R                  R                  R                  nU" U R
                  5        g rC   )r   rE   rD   rF   rG   r   rH   s     r   rI   )UnivNetLvcResidualBlock.apply_weight_normN  sI    hh**288,,m<<((33??KDIIr   c                 V    [         R                  R                  U R                  5        g r<   )r   rE   rL   r   rM   s    r   rL   *UnivNetLvcResidualBlock.remove_weight_normU  s    
##DII.r   )r   r   r   r.   r1      )r   r   )r   r   r   r   r   r   r   r*   r@   r   r   r   rI   rL   r   rO   rP   s   @r   r   r      s    


 
 	
,* ?$((?$ !!?$ 	?$
 ?$ ?$B/ /r   r   c                      ^  \ rS rSrSr SS\S\S\4U 4S jjjrS\R                  S\R                  4S	 jr
S
 rS rSrU =r$ )UnivNetLvcBlockiY  a  
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#   layer_idlvc_hop_sizec                   > [         TU ]  5         UR                  U l        UR                  U   U l        UR                  U   U l        UR                  U   U l	        X0l
        UR                  U l        [        U R                  5      U l        [        R                  " U R                  U R                  SU R                  -  U R                  U R                  S-  U R                  S-  -   U R                  S-  S9U l        [#        XR
                  U R                  5      U l        [        R&                  " [)        U R                  5       Vs/ s H&  n[+        XR
                  U R                  U   5      PM(     sn5      U l        g s  snf )Nr%   )strider'   output_padding)r)   r*   rX   r   resblock_kernel_sizesr.   resblock_stride_sizesr   resblock_dilation_sizes	dilationscond_hop_lengthr1   lenrc   r   ConvTranspose1d	convt_prerR   kernel_predictorre   rf   r   rg   )r7   r#   r   r   ir8   s        r   r*   UnivNetLvcBlock.__init__k  s<    	%;;!77A228<77A+ & 7 7dnn-++    O;;KK1$t{{Q6;;?
 !7v?O?OQUQ`Q` a[`aeapap[qr[qVW$V-=-=t~~a?PQ[qr
rs   -Fr:   rl   c           	      F   [         R                  R                  XR                  5      nU R	                  U5      nU R                  U5      u  p4[        U R                  5       H:  u  pVUS S 2US S 2S S 2S S 2S S 24   nUS S 2US S 2S S 24   nU" XXR                  S9nM<     U$ r   )	r   r=   r>   r1   r   r   	enumeraterg   r   )	r7   r:   rl   rv   rw   r   rs   r   r(   s	            r   r@   UnivNetLvcBlock.forward  s     00@U@UV}5//<$T^^4KAQ1aA-.F!Q1*%D$]DK_K_`M 5
 r   c                 p   [         R                  R                  n[        [         R                  R                  S5      (       a$  [         R                  R                  R                  nU" U R
                  5        U R                  R                  5         U R                   H  nUR                  5         M     g rC   )	r   rE   rD   rF   rG   r   r   rI   rg   rz   s      r   rI   !UnivNetLvcBlock.apply_weight_norm  su    hh**288,,m<<((33??KDNN#//1^^E##% $r   c                     [         R                  R                  U R                  5        U R                  R                  5         U R
                   H  nUR                  5         M     g r<   )r   rE   rL   r   r   rg   r~   s     r   rL   "UnivNetLvcBlock.remove_weight_norm  sD    
##DNN3002^^E$$& $r   )
r   r   r   r   r   r.   r1   rc   rg   r   r   r   rP   s   @r   r   r   Y  sa    *  	

 
 	
 
<U%6%6 UEVEV &' 'r   r   c                     ^  \ rS rSr\rSrS\4U 4S jjr\    SS\	R                  S\\	R                     S\\	R                     S\\	R                     S\\   S	\\\	R                     \4   4S
 jj5       rS rS rS rSrU =r$ )UnivNetModeli  input_featuresr#   c                 X  > [         TU ]  U5        [        UR                  5      U l        UR
                  U l        [        R                  " UR                  UR                  SSSSS9U l
        [        UR                  5      nSn/ nUR                   H  nX5-  nUR                  U5        M     [        R                  " [        U5       Vs/ s H  n[        UUXF   S9PM     sn5      U l        [        R                  " UR                  SSSSS9U l        U R%                  5         g s  snf )N   r   r   reflect)r.   r   r'   padding_mode)r   r   )r'   r   )r)   r*   r   r   num_kernelsr1   r   r4   r+   rX   conv_prer   appendre   rf   r   rg   	conv_post	post_init)r7   r#   
num_layers
hop_lengthhop_lengthsr   r   r8   s          r   r*   UnivNetModel.__init__  s    v;;< & 7 7		$$(("
 556

22F#,Jz* 3  z* +A  !,
 +	
 6#?#?Aq_hi 	s   D'noise_sequencepadding_mask	generatorreturn_dictreturnc                    Ub  UOU R                   R                  nUR                  5       S:H  nU(       d  UR                  S5      nUR                  u  pxn	Ub,  UR                  5       S:H  n
U
(       d  UR                  S5      nOBXxU R                   R
                  4n[        R                  " XUR                  UR                  S9nUR                  S   nUS:  a  US:X  a  UR                  USS5      nOUS:  a  US:X  a  UR                  USS5      nX:w  a  [        SU SU S35      eUbK  UR                  5       S:X  a  UR                  S5      nUR                  S   nX:w  a  [        S	U SU S35      eUR                  S
S5      nUR                  S
S5      nU R                  U5      nU R                   H  nU" X5      nM     [        R                   R#                  XR$                  5      nU R'                  U5      n[        R(                  " U5      nUR+                  S5      nSnUb  [        R,                  " USS9nU(       d  UU4nU$ [/        UUS9$ )a  
input_features (`torch.FloatTensor`):
    Tensor containing the log-mel spectrograms. Can be batched and of shape `(batch_size, sequence_length,
    config.num_mel_channels)`, or un-batched and of shape `(sequence_length, config.num_mel_channels)`.
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#   use_return_dictr   r   rn   r+   r   randnr   r   repeatr   r   r   rg   r   r=   r>   r1   r   r   squeezesumr   )r7   r   r   r   r   r   spectrogram_batchedspectrogram_batch_sizespectrogram_lengthrj   noise_sequence_batchednoise_sequence_shapenoise_sequence_batch_sizepadding_mask_batch_sizer:   rs   waveformr   outputss                      r   r@   UnivNetModel.forward  s   f &1%<k$++B]B] -002a7"+55a8N8F8L8L5A%%3%7%7%9Q%>")!/!9!9!!< %;PTP[P[PmPm#n "[[$AUAU^l^s^sN %3$8$8$;!!A%*Cq*H+223I1aPN&*/E/J+223LaQRSN$>89R8S T((>'??fh 
 #!Q&+55a8&2&8&8&;#&@ :;R:S T,,B+CCjl  '00A6'11!Q7m4H$]CM ' 00@U@UV}5

=1 !((+  #$yy1=!12GN!-
 	
r   c                 V   [        U[        R                  [        R                  [        R                  45      (       ak  UR
                  R                  R                  SU R                  R                  S9  UR                  b%  UR                  R                  R                  5         ggg)zInitialize the weights.g        )meanstdN)
isinstancer   Linearr4   r   weightdatanormal_r#   initializer_ranger(   zero_)r7   modules     r   _init_weightsUnivNetModel._init_weightsS  sv    fryy"))R5G5GHIIMM&&CT[[5R5R&S{{&  &&( ' Jr   c                 `   [         R                  R                  n[        [         R                  R                  S5      (       a$  [         R                  R                  R                  nU" U R
                  5        U R                   H  nUR                  5         M     U" U R                  5        g rC   )	r   rE   rD   rF   rG   r   rg   rI   r   rz   s      r   rI   UnivNetModel.apply_weight_normZ  so    hh**288,,m<<((33??KDMM"^^E##% $DNN#r   c                     [         R                  R                  U R                  5        U R                   H  nUR                  5         M     [         R                  R                  U R
                  5        g r<   )r   rE   rL   r   rg   r   r~   s     r   rL   UnivNetModel.remove_weight_normd  sH    
##DMM2^^E$$& $
##DNN3r   )r   r   r1   r   rg   )NNNN)r   r   r   r   r   config_classmain_input_namer*   r   r   r   r   	Generatorboolr   r   r   r@   r   rI   rL   r   rO   rP   s   @r   r   r     s     L&O%} %N  7;48/3&*{
)){
 !!2!23{
 u001	{

 EOO,{
 d^{
 
uU&&');;	<{
 {
z)$4 4r   r   )r   dataclassesr   typingr   r   r   r   torch.utils.checkpointr   modeling_outputsr	   modeling_utilsr
   rE   r   r   configuration_univnetr   
get_loggerr   loggerr   Moduler!   rR   r   r   r   __all__r   r   r   <module>r     s    " ! ) )    + - , 0 
		H	% 9 9 9 .0")) .0bu4RYY u4p|/bii |/~M'bii M'` ~4? ~4 ~4B 
r   