o
    i                     @   sB   d dl mZ d dlZd dlmZ ddlmZ G dd dejZdS )    )OptionalN)nn   ConvNeXtBlockc                       sn   e Zd ZdZ				ddedededed	ed
edee def fddZdd Z	de
jde
jfddZ  ZS )VocosBackbonea  
    Vocos backbone module built with ConvNeXt blocks. Supports additional conditioning with Adaptive Layer Normalization

    Args:
        input_channels (int): Number of input features channels.
        dim (int): Hidden dimension of the model.
        intermediate_dim (int): Intermediate dimension used in ConvNeXtBlock.
        num_layers (int): Number of ConvNeXtBlock layers.
        layer_scale_init_value (float, optional): Initial value for layer scaling. Defaults to `1 / num_layers`.
    	   Nzerosinput_channelsdimintermediate_dim
num_layersinput_kernel_sizedw_kernel_sizelayer_scale_init_valuepadc	           	         sz   t    tj| ||d |d| _tj dd| _t fddtD | _	tj dd| _
| | j d S )N   )kernel_sizepaddingpadding_modegư>)epsc              	      s(   g | ]}t  pd d  dqS )r   g      ?)r   r   r   r   r   ).0_r   r   r   r   r    H/home/ubuntu/.local/lib/python3.10/site-packages/soprano/vocos/models.py
<listcomp>#   s    z*VocosBackbone.__init__.<locals>.<listcomp>)super__init__r   Conv1dembed	LayerNormnorm
ModuleListrangeconvnextfinal_layer_normapply_init_weights)	selfr
   r   r   r   r   r   r   r   	__class__r   r   r      s   
zVocosBackbone.__init__c                 C   sJ   t |tjtjfr!tjj|jdd |jd ur#tj|jd d S d S d S )Ng{Gz?)stdr   )	
isinstancer   r   Linearinittrunc_normal_weightbias	constant_)r)   mr   r   r   r(   0   s
   zVocosBackbone._init_weightsxreturnc                 C   s^   |  |}| |dd}|dd}| jD ]}||}q| |dd}|dd}|S )Nr   r   )r    r"   	transposer%   r&   )r)   r5   
conv_blockr   r   r   forward5   s   


zVocosBackbone.forward)r   r   Nr	   )__name__
__module____qualname____doc__intr   floatstrr   r(   torchTensorr9   __classcell__r   r   r*   r   r      s2    	r   )typingr   rA   r   modulesr   Moduler   r   r   r   r   <module>   s
    