§
    @ÄjR™  ã                   ó¤  — d dl Z d dlZd dlmZmZmZmZ d dlZd dlmZ d dl	m
Z  G d„ dej        j        ¦  «        Z G d„ dej        j        ¦  «        Z G d	„ d
ej        j        ¦  «        Z G d„ dej        j        ¦  «        Z G d„ dej        j        ¦  «        Z G d„ dej        j        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Zdej        dededej        fd„Zd„ Zd(dej        dedededej        f
d „Zd)d!ej        ded"ededej        f
d#„Zd$ee         defd%„Zd$ee         defd&„Zd$ee         defd'„ZdS )*é    N)ÚAnyÚDictÚListÚOptional)Únn)Ú
functionalc            	       ó€   ‡ — e Zd ZdZddedededefˆ fd„Zed	e	j
        fd
„¦   «         Zde	j
        d	e	j
        fd„Zˆ xZS )Ú_ScaledEmbeddingaF  Make continuous embeddings and boost learning rate

    Args:
        num_embeddings (int): number of embeddings
        embedding_dim (int): embedding dimensions
        scale (float, optional): amount to scale learning rate (Default: 10.0)
        smooth (bool, optional): choose to apply smoothing (Default: ``False``)
    ç      $@FÚnum_embeddingsÚembedding_dimÚscaleÚsmoothc                 ó¦  •— t          ¦   «                              ¦   «          t          j        ||¦  «        | _        |rrt          j        | j        j        j        d¬¦  «        }|t          j	        d|dz   ¦  «         
                    ¦   «         d d …d f         z  }|| j        j        j        d d …<   | j        j        xj        |z  c_        || _        d S )Nr   ©Údimé   )ÚsuperÚ__init__r   Ú	EmbeddingÚ	embeddingÚtorchÚcumsumÚweightÚdataÚarangeÚsqrtr   )Úselfr   r   r   r   r   Ú	__class__s         €úKC:\Projects\Historical\venv\Lib\site-packages\torchaudio/models/_hdemucs.pyr   z_ScaledEmbedding.__init__-   s¾   ø€ Ý‰Œ×ÒÑÔÐÝœ n°mÑDÔDˆŒØð 	3Ý”\ $¤.Ô"7Ô"<À!ÐDÑDÔDˆFà�eœl¨1¨n¸qÑ.@ÑAÔA×FÒFÑHÔHÈÈÈÈDÈÔQÑQˆFØ,2ˆDŒNÔ!Ô& q q qÑ)ØŒÔÐ"Ô" eÑ+Ð"Ô"ØˆŒ
ˆ
ˆ
ó    Úreturnc                 ó*   — | j         j        | j        z  S ©N)r   r   r   )r   s    r    r   z_ScaledEmbedding.weight8   s   € àŒ~Ô$ t¤zÑ1Ð1r!   Úxc                 ó@   — |                       |¦  «        | j        z  }|S )zøForward pass for embedding with scale.
        Args:
            x (torch.Tensor): input tensor of shape `(num_embeddings)`

        Returns:
            (Tensor):
                Embedding output of shape `(num_embeddings, embedding_dim)`
        )r   r   )r   r%   Úouts      r    Úforwardz_ScaledEmbedding.forward<   s!   € ð �nŠn˜QÑÔ $¤*Ñ,ˆØˆ
r!   )r   F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚintÚfloatÚboolr   Úpropertyr   ÚTensorr   r(   Ú__classcell__©r   s   @r    r
   r
   #   s¸   ø€ € € € € ðð ð	ð 	 sð 	¸3ð 	Àuð 	Ð]að 	ð 	ð 	ð 	ð 	ð 	ð ð2˜œð 2ð 2ð 2ñ „Xð2ð
˜œð 
¨%¬,ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r!   r
   c                   óÀ   ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 dd	ed
ededededededededeeee	f                  defˆ fd„Z
ddej        deej                 dej        fd„Zˆ xZS )Ú
_HEncLayerat  Encoder layer. This used both by the time and the frequency branch.
    Args:
        chin (int): number of input channels.
        chout (int): number of output channels.
        kernel_size (int, optional): Kernel size for encoder (Default: 8)
        stride (int, optional): Stride for encoder layer (Default: 4)
        norm_groups (int, optional): number of groups for group norm. (Default: 4)
        empty (bool, optional): used to make a layer with just the first conv. this is used
            before merging the time and freq. branches. (Default: ``False``)
        freq (bool, optional): boolean for whether conv layer is for frequency domain (Default: ``True``)
        norm_type (string, optional): Norm type, either ``group_norm `` or ``none`` (Default: ``group_norm``)
        context (int, optional): context size for the 1x1 conv. (Default: 0)
        dconv_kw (Dict[str, Any] or None, optional): dictionary of kwargs for the DConv class. (Default: ``None``)
        pad (bool, optional): true to pad the input. Padding is done so that the output size is
            always the input size / stride. (Default: ``True``)
    é   é   FTÚ
group_normr   NÚchinÚchoutÚkernel_sizeÚstrideÚnorm_groupsÚemptyÚfreqÚ	norm_typeÚcontextÚdconv_kwÚpadc                 ó€  •‡— t          ¦   «                              ¦   «          |
€i }
d„ }|dk    rˆfd„}|r|dz  nd}t          j        }|| _        || _        || _        || _        || _        |r|dg}|dg}|dg}t          j	        } ||||||¦  «        | _
         ||¦  «        | _        | j        rJt          j        ¦   «         | _        t          j        ¦   «         | _        t          j        ¦   «         | _        d S  ||d|z  dd|	z  z   d|	¦  «        | _         |d|z  ¦  «        | _        t!          |fi |
¤Ž| _        d S )Nc                 ó(   — t          j        ¦   «         S r$   ©r   ÚIdentity©Úds    r    ú<lambda>z%_HEncLayer.__init__.<locals>.<lambda>m   ó   € �BœK™MœM€ r!   r8   c                 ó.   •— t          j        ‰| ¦  «        S r$   ©r   Ú	GroupNorm©rI   r=   s    €r    rJ   z%_HEncLayer.__init__.<locals>.<lambda>o   ó   ø€ ¥¤¨[¸!Ñ <Ô <€ r!   r7   r   r   é   )r   r   r   ÚConv1dr?   r;   r<   r>   rC   ÚConv2dÚconvÚnorm1rG   ÚrewriteÚnorm2ÚdconvÚ_DConv)r   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   Únorm_fnÚpad_valÚklassr   s        `         €r    r   z_HEncLayer.__init__\   sd  øø€ õ 	‰Œ×ÒÑÔÐØÐØˆHØ)Ð)ˆØ˜Ò$Ð$Ø<Ð<Ð<Ð<ˆGØ&)Ð0�+ Ñ"Ð"¨qˆÝ”	ˆØˆŒ	Ø&ˆÔØˆŒØˆŒ
ØˆŒØð 	Ø&¨Ð*ˆKØ˜a�[ˆFØ �lˆGÝ”IˆEØ�E˜$  {°F¸GÑDÔDˆŒ	Ø�W˜U‘^”^ˆŒ
àŒ:ð 	3Ýœ;™=œ=ˆDŒLÝœ™œˆDŒJÝœ™œˆDŒJˆJˆJà ˜5 ¨¨E©	°1°q¸7±{±?ÀAÀwÑOÔOˆDŒLØ ˜  U¡Ñ+Ô+ˆDŒJÝ Ð2Ð2¨Ð2Ð2ˆDŒJˆJˆJr!   r%   Úinjectr"   c                 ó6  — | j         s;|                     ¦   «         dk    r#|j        \  }}}}|                     |d|¦  «        }| j         sB|j        d         }|| j        z  dk    s't          j        |d| j        || j        z  z
  f¦  «        }|                      |¦  «        }| j        r|S |�o|j        d         |j        d         k    rt          d¦  «        ‚|                     ¦   «         dk    r'|                     ¦   «         dk    r|dd…dd…df         }||z   }t          j
        |                      |¦  «        ¦  «        }| j         r}|j        \  }}}}|                     dddd¦  «                             d||¦  «        }|                      |¦  «        }|                     ||||¦  «                             dddd¦  «        }n|                      |¦  «        }|                      |                      |¦  «        ¦  «        }	t          j        |	d¬	¦  «        }	|	S )
a]  Forward pass for encoding layer.

        Size depends on whether frequency or time

        Args:
            x (torch.Tensor): tensor input of shape `(B, C, F, T)` for frequency and shape
                `(B, C, T)` for time
            inject (torch.Tensor, optional): on last layer, combine frequency and time branches through inject param,
                same shape as x (default: ``None``)

        Returns:
            Tensor
                output tensor after encoder layer of shape `(B, C, F / stride, T)` for frequency
                    and shape `(B, C, ceil(T / stride))` for time
        r7   éÿÿÿÿr   NzInjection shapes do not aligné   rQ   r   r   )r?   r   ÚshapeÚviewr<   ÚFrC   rT   r>   Ú
ValueErrorÚgelurU   ÚpermuteÚreshaperX   rW   rV   Úglu)
r   r%   r]   ÚBÚCÚFrÚTÚleÚyÚzs
             r    r(   z_HEncLayer.forwardˆ   sô  € ð" Œyð 	!˜QŸUšU™WœW¨š\˜\Øœ'‰KˆAˆq�"�aØ—’�q˜"˜aÑ Ô ˆAàŒyð 	DØ”˜”ˆBØ˜œÑ# qÒ(Ð(Ý”E˜!˜a ¤°°T´[Ñ0@Ñ!AÐBÑCÔC�Ø�IŠI�a‰LŒLˆØŒ:ð 	ØˆHØÐØŒ|˜BÔ 1¤7¨2¤;Ò.Ð.Ý Ð!@ÑAÔAÐAØ�zŠz‰|Œ|˜qÒ Ð  Q§U¢U¡W¤W°¢\ \Ø    1 1 1 d 
Ô+�Ø�F‘
ˆAÝŒF�4—:’:˜a‘=”=Ñ!Ô!ˆØŒ9ð 	Øœ'‰KˆAˆq�"�aØ—	’	˜!˜Q  1Ñ%Ô%×-Ò-¨b°!°QÑ7Ô7ˆAØ—
’
˜1‘”ˆAØ—’�q˜"˜a Ñ#Ô#×+Ò+¨A¨q°!°QÑ7Ô7ˆAˆAà—
’
˜1‘”ˆAØ�JŠJ�t—|’| A‘”Ñ'Ô'ˆÝŒE�!˜ˆO‰OŒOˆØˆr!   )	r6   r7   r7   FTr8   r   NTr$   ©r)   r*   r+   r,   r-   r/   Ústrr   r   r   r   r   r1   r(   r2   r3   s   @r    r5   r5   I   s  ø€ € € € € ðð ð* ØØØØØ%ØØ-1Øð*3ð *3àð*3ð ð*3ð ð	*3ð
 ð*3ð ð*3ð ð*3ð ð*3ð ð*3ð ð*3ð ˜4  S œ>Ô*ð*3ð ð*3ð *3ð *3ð *3ð *3ð *3ðX,ð ,˜œð ,¨x¸¼Ô/Eð ,ÐQVÔQ]ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,r!   r5   c                   ó¶   ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 dd	ed
edededededededededeeee	f                  defˆ fd„Z
dej        deej                 fd„Zˆ xZS )Ú
_HDecLayera»  Decoder layer. This used both by the time and the frequency branches.
    Args:
        chin (int): number of input channels.
        chout (int): number of output channels.
        last (bool, optional): whether current layer is final layer (Default: ``False``)
        kernel_size (int, optional): Kernel size for encoder (Default: 8)
        stride (int): Stride for encoder layer (Default: 4)
        norm_groups (int, optional): number of groups for group norm. (Default: 1)
        empty (bool, optional): used to make a layer with just the first conv. this is used
            before merging the time and freq. branches. (Default: ``False``)
        freq (bool, optional): boolean for whether conv layer is for frequency (Default: ``True``)
        norm_type (str, optional): Norm type, either ``group_norm `` or ``none`` (Default: ``group_norm``)
        context (int, optional): context size for the 1x1 conv. (Default: 1)
        dconv_kw (Dict[str, Any] or None, optional): dictionary of kwargs for the DConv class. (Default: ``None``)
        pad (bool, optional): true to pad the input. Padding is done so that the output size is
            always the input size / stride. (Default: ``True``)
    Fr6   r7   r   Tr8   Nr9   r:   Úlastr;   r<   r=   r>   r?   r@   rA   rB   rC   c                 ó¬  •‡— t          ¦   «                              ¦   «          |€i }d„ }|	dk    rˆfd„}|r$||z
  dz  dk    rt          d¦  «        ‚||z
  dz  }nd}|| _        || _        || _        || _        || _        || _        || _	        t          j        }t          j        }|r |dg}|dg}t          j        }t          j        } |||||¦  «        | _         ||¦  «        | _        | j        r2t          j        ¦   «         | _        t          j        ¦   «         | _        d S  ||d|z  dd|
z  z   d|
¦  «        | _         |d|z  ¦  «        | _        d S )Nc                 ó(   — t          j        ¦   «         S r$   rF   rH   s    r    rJ   z%_HDecLayer.__init__.<locals>.<lambda>Ü   rK   r!   r8   c                 ó.   •— t          j        ‰| ¦  «        S r$   rM   rO   s    €r    rJ   z%_HDecLayer.__init__.<locals>.<lambda>Þ   rP   r!   rQ   r   z#Kernel size and stride do not alignr   )r   r   rd   rC   rt   r?   r9   r>   r<   r;   r   rR   ÚConvTranspose1drS   ÚConvTranspose2dÚconv_trrW   rG   rV   rU   )r   r9   r:   rt   r;   r<   r=   r>   r?   r@   rA   rB   rC   rZ   r\   Úklass_trr   s         `         €r    r   z_HDecLayer.__init__Ê   s�  øø€ õ 	‰Œ×ÒÑÔÐØÐØˆHØ)Ð)ˆØ˜Ò$Ð$Ø<Ð<Ð<Ð<ˆGØð 	Ø˜fÑ$¨Ñ)¨QÒ.Ð.Ý Ð!FÑGÔGÐGØ Ñ'¨AÑ-ˆCˆCàˆCØˆŒØˆŒ	ØˆŒ	ØˆŒ	ØˆŒ
ØˆŒØ&ˆÔÝ”	ˆÝÔ%ˆØð 	*Ø&¨Ð*ˆKØ˜a�[ˆFÝ”IˆEÝÔ)ˆHØ�x  e¨[¸&ÑAÔAˆŒØ�W˜U‘^”^ˆŒ
ØŒ:ð 	+Ýœ;™=œ=ˆDŒLÝœ™œˆDŒJˆJˆJà ˜5  q¨4¡x°°Q¸±[±À!ÀWÑMÔMˆDŒLØ ˜  T¡Ñ*Ô*ˆDŒJˆJˆJr!   r%   Úskipc                 óš  — | j         r@|                     ¦   «         dk    r(|j        \  }}}|                     || j        d|¦  «        }| j        sB||z   }t          j        |                      |  	                    |¦  «        ¦  «        d¬¦  «        }n|}|�t          d¦  «        ‚|                      |                      |¦  «        ¦  «        }| j         r"| j        r|d| j        | j         …dd…f         }n9|d| j        | j        |z   …f         }|j        d         |k    rt          d¦  «        ‚| j        st          j        |¦  «        }||fS )	a,  Forward pass for decoding layer.

        Size depends on whether frequency or time

        Args:
            x (torch.Tensor): tensor input of shape `(B, C, F, T)` for frequency and shape
                `(B, C, T)` for time
            skip (torch.Tensor, optional): on first layer, separate frequency and time branches using param
                (default: ``None``)
            length (int): Size of tensor for output

        Returns:
            (Tensor, Tensor):
                Tensor
                    output tensor after decoder layer of shape `(B, C, F * stride, T)` for frequency domain except last
                        frequency layer shape is `(B, C, kernel_size, T)`. Shape is `(B, C, stride * T)`
                        for time domain.
                Tensor
                    contains the output just before final transposed convolution, which is used when the
                        freq. and time branch separate. Otherwise, does not matter. Shape is
                        `(B, C, F, T)` for frequency and `(B, C, T)` for time.
        r`   r_   r   r   Nz%Skip must be none when empty is true..z'Last index of z must be equal to length)r?   r   ra   rb   r9   r>   rc   rh   rU   rV   rd   rW   rz   rC   rt   re   )	r   r%   r|   Úlengthri   rj   rl   rn   ro   s	            r    r(   z_HDecLayer.forwardü   sL  € ð. Œ9ð 	,˜Ÿš™œ Aš˜Ø”g‰GˆAˆq�!Ø—’�q˜$œ) R¨Ñ+Ô+ˆAàŒzð 	JØ�D‘ˆAÝ”�d—j’j §¢¨a¡¤Ñ1Ô1°qÐ9Ñ9Ô9ˆAˆAàˆAØÐÝ Ð!HÑIÔIÐIà�JŠJ�t—|’| A‘”Ñ'Ô'ˆØŒ9ð 	LØŒxð 4Ø�c˜4œ8 t¤x iÐ/°°°Ð2Ô3�øà�#�t”x $¤(¨VÑ"3Ð3Ð3Ô4ˆAØŒw�rŒ{˜fÒ$Ð$Ý Ð!JÑKÔKÐKØŒyð 	Ý”�q‘	”	ˆAà�!ˆtˆr!   )
Fr6   r7   r   FTr8   r   NTrp   r3   s   @r    rs   rs   ·   s  ø€ € € € € ðð ð, ØØØØØØ%ØØ-1Øð0+ð 0+àð0+ð ð0+ð ð	0+ð
 ð0+ð ð0+ð ð0+ð ð0+ð ð0+ð ð0+ð ð0+ð ˜4  S œ>Ô*ð0+ð ð0+ð 0+ð 0+ð 0+ð 0+ð 0+ðd.˜œð .¨X°e´lÔ-Cð .ð .ð .ð .ð .ð .ð .ð .r!   rs   c            +       ó  ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d3dee         dededededededededededededededededed ed!ed"ef*ˆ fd#„Z	d$„ Z
d4d&„Zd5d)ej        d*ed+ed,ed-ef
d.„Zd/„ Zd0„ Zd1ej        fd2„Zˆ xZS )6ÚHDemucsa#
  Hybrid Demucs model from
    *Hybrid Spectrogram and Waveform Source Separation* :cite:`defossez2021hybrid`.

    See Also:
        * :class:`torchaudio.pipelines.SourceSeparationBundle`: Source separation pipeline with pre-trained models.

    Args:
        sources (List[str]): list of source names. List can contain the following source
            options: [``"bass"``, ``"drums"``, ``"other"``, ``"mixture"``, ``"vocals"``].
        audio_channels (int, optional): input/output audio channels. (Default: 2)
        channels (int, optional): initial number of hidden channels. (Default: 48)
        growth (int, optional): increase the number of hidden channels by this factor at each layer. (Default: 2)
        nfft (int, optional): number of fft bins. Note that changing this requires careful computation of
            various shape parameters and will not work out of the box for hybrid models. (Default: 4096)
        depth (int, optional): number of layers in encoder and decoder (Default: 6)
        freq_emb (float, optional): add frequency embedding after the first frequency layer if > 0,
            the actual value controls the weight of the embedding. (Default: 0.2)
        emb_scale (int, optional): equivalent to scaling the embedding learning rate (Default: 10)
        emb_smooth (bool, optional): initialize the embedding with a smooth one (with respect to frequencies).
            (Default: ``True``)
        kernel_size (int, optional): kernel_size for encoder and decoder layers. (Default: 8)
        time_stride (int, optional): stride for the final time layer, after the merge. (Default: 2)
        stride (int, optional): stride for encoder and decoder layers. (Default: 4)
        context (int, optional): context for 1x1 conv in the decoder. (Default: 4)
        context_enc (int, optional): context for 1x1 conv in the encoder. (Default: 0)
        norm_starts (int, optional): layer at which group norm starts being used.
            decoder layers are numbered in reverse order. (Default: 4)
        norm_groups (int, optional): number of groups for group norm. (Default: 4)
        dconv_depth (int, optional): depth of residual DConv branch. (Default: 2)
        dconv_comp (int, optional): compression of DConv branch. (Default: 4)
        dconv_attn (int, optional): adds attention layers in DConv branch starting at this layer. (Default: 4)
        dconv_lstm (int, optional): adds a LSTM layer in DConv branch starting at this layer. (Default: 4)
        dconv_init (float, optional): initial scale for the DConv branch LayerScale. (Default: 1e-4)
    rQ   é0   é   é   çš™™™™™É?é
   Tr6   r7   r   r   ç-Cëâ6?ÚsourcesÚaudio_channelsÚchannelsÚgrowthÚnfftÚdepthÚfreq_embÚ	emb_scaleÚ
emb_smoothr;   Útime_strider<   rA   Úcontext_encÚnorm_startsr=   Údconv_depthÚ
dconv_compÚ
dconv_attnÚ
dconv_lstmÚ
dconv_initc                 ó  •— t          ¦   «                              ¦   «          || _        || _        || _        || _        |
| _        || _        || _        || _	        | j        dz  | _
        d | _        t          j        ¦   «         | _        t          j        ¦   «         | _        t          j        ¦   «         | _        t          j        ¦   «         | _        |}|dz  }|}|}| j        dz  }t%          | j        ¦  «        D �]ý}||k    }||k    }||k    rdnd}|dk    }|} |
}!|s|dk    rt'          d¦  «        ‚|dz  }!|} d}"d}#|r||
k    r|}!d}"d}#|!| ||"|||||||d	œd
œ}$t)          |$¦  «        }%d|%d<   |
|%d<   ||%d<   d|%d<   t)          |$¦  «        }&|#rt+          ||¦  «        }|}t-          ||fd|i|$¤Ž}'|r?|#du r|dk    r
d|%d<   d|%d<   t-          ||f||#dœ|%¤Ž}(| j                             |(¦  «         | j                             |'¦  «         |dk    r!| j        t1          | j        ¦  «        z  }|dz  }t3          ||f|dk    |dœ|&¤Ž})|r1t3          ||f|#|dk    |dœ|%¤Ž}*| j                             d|*¦  «         | j                             d|)¦  «         |}|}t7          ||z  ¦  «        }t7          ||z  ¦  «        }|r||
k    rd}n||z  }|dk    r!|rt9          |||	|¬¦  «        | _        || _        �Œÿt=          | ¦  «         d S )Nr7   rQ   r8   Únoner   z$When freq is false, freqs must be 1.TF)ÚlstmÚattnrŒ   ÚcompressÚinit)r;   r<   r?   rC   r@   r=   rB   r   r?   r;   r<   rC   rA   é   )rA   r>   )rt   rA   )r>   rt   rA   )r   r   )r   r   rŒ   r‹   rˆ   r‡   r;   rA   r<   r‰   Ú
hop_lengthr�   r   Ú
ModuleListÚfreq_encoderÚfreq_decoderÚtime_encoderÚtime_decoderÚrangerd   ÚdictÚmaxr5   ÚappendÚlenrs   Úinsertr-   r
   Úfreq_emb_scaleÚ_rescale_module),r   r‡   rˆ   r‰   rŠ   r‹   rŒ   r�   rŽ   r�   r;   r�   r<   rA   r‘   r’   r=   r“   r”   r•   r–   r—   r9   Úchin_zr:   Úchout_zÚfreqsÚindexrš   r›   r@   r?   ÚstriÚkerrC   Ú	last_freqÚkwÚkwtÚkw_decÚencÚtencÚdecÚtdecr   s,                                              €r    r   zHDemucs.__init__Q  sÛ  ø€ õ0 	‰Œ×ÒÑÔÐØˆŒ
ØˆŒ	Ø,ˆÔØˆŒØ&ˆÔØˆŒØˆŒØ ˆŒàœ) q™.ˆŒØˆŒåœM™OœOˆÔÝœM™OœOˆÔåœM™OœOˆÔÝœM™OœOˆÔàˆØ˜‘ˆØˆØˆØ”	˜Q‘ˆå˜4œ:Ñ&Ô&ð K	/ñ K	/ˆEØ˜JÒ&ˆDØ˜JÒ&ˆDØ(-°Ò(<Ð(<˜˜À&ˆIØ˜1’9ˆDØˆDØˆCØð #Ø˜A’:�:Ý$Ð%KÑLÔLÐLØ! A‘o�Ø"�àˆCØˆIØð !˜ Ò,Ð,Ø�Ø�Ø �	ð  #ØØØØ&Ø*à Ø Ø(Ø *Ø&ðð ðð ˆBõ �r‘(”(ˆCØˆC�‰KØ!,ˆC�ÑØ"ˆC�‰MØˆC�‰JÝ˜"‘X”XˆFàð  Ý˜e WÑ-Ô-�Ø�å˜V WÐHÐH°kÐHÀRÐHÐHˆCØð /Ø Ð$Ð$¨°ª¨Ø$%�C˜‘MØ)*�C˜Ñ&Ý! $¨Ð[°{È)Ð[Ð[ÐWZÐ[Ð[�ØÔ!×(Ò(¨Ñ.Ô.Ð.àÔ×$Ò$ SÑ)Ô)Ð)Ø˜ŠzˆzØÔ*­S°´Ñ->Ô->Ñ>�Ø ™�Ý˜W fÐY°5¸A²:ÀwÐYÐYÐRXÐYÐYˆCØð 2Ý! %¨Ðh°YÀUÈaÂZÐY`ÐhÐhÐdgÐhÐh�ØÔ!×(Ò(¨¨DÑ1Ô1Ð1ØÔ×$Ò$ Q¨Ñ,Ô,Ð,àˆDØˆFÝ˜ ™Ñ'Ô'ˆEÝ˜& 7Ñ*Ñ+Ô+ˆGØð %Ø˜KÒ'Ð'Ø�E�Eà˜fÑ$�EØ˜Šzˆz˜hˆzÝ 0°¸ÀzÐYbÐ cÑ cÔ c�”Ø&.�Ô#ùå˜ÑÔÐÐÐr!   c                 ó¾  — | j         }| j        }|}||dz  k    rt          d¦  «        ‚t          t	          j        |j        d         |z  ¦  «        ¦  «        }|dz  dz  }|                      |||||z  z   |j        d         z
  d¬¦  «        }t          |||¦  «        dd d…d d …f         }|j        d         |dz   k    rt          d	¦  «        ‚|ddd|z   …f         }|S )
Nr7   zHop length must be nfft // 4r_   rQ   r`   Úreflect)Úmode.zESpectrogram's last dimension must be 4 + input size divided by stride)	rŸ   r‹   rd   r-   ÚmathÚceilra   Ú_pad1dÚ_spectro)r   r%   Úhlr‹   Úx0rm   rC   ro   s           r    Ú_speczHDemucs._specÑ  sñ   € ØŒ_ˆØŒyˆØˆð �˜‘Š?ˆ?ÝÐ;Ñ<Ô<Ð<Ý•”˜1œ7 2œ;¨Ñ+Ñ,Ô,Ñ-Ô-ˆØ�A‰g˜‰kˆØ�KŠK˜˜3  b¨2¡g¡°´¸´Ñ ;À)ˆKÑLÔLˆå�Q˜˜bÑ!Ô! # s¨ s¨A¨A¨A +Ô.ˆØŒ7�2Œ;˜"˜q™&Ò Ð ÝÐdÑeÔeÐeØˆc�1�q˜2‘v�:ˆoÔˆØˆr!   Nc                 ó  — | j         }t          j        |g d¢¦  «        }t          j        |ddg¦  «        }|dz  dz  }|t          t	          j        ||z  ¦  «        ¦  «        z  d|z  z   }t          |||¬¦  «        }|d|||z   …f         }|S )N)r   r   r   r   rQ   r`   )r~   .)rŸ   rc   rC   r-   r¾   r¿   Ú	_ispectro)r   ro   r~   rÂ   rC   rm   r%   s          r    Ú_ispeczHDemucs._ispecé  sš   € ØŒ_ˆÝŒE�!�\�\�\Ñ"Ô"ˆÝŒE�!�a˜�VÑÔˆØ�A‰g˜‰kˆØ•#•d”i ¨¡Ñ,Ô,Ñ-Ô-Ñ-°°C±Ñ7ˆÝ�a˜ BÐ'Ñ'Ô'ˆØˆc�3˜˜v™Ð%Ð%Ô&ˆØˆr!   Úzeroç        r%   Úpadding_leftÚpadding_rightr½   Úvaluec                 óÀ   — |j         d         }|dk    r3t          ||¦  «        }||k    rt          j        |d||z
  dz   f¦  «        }t          j        |||f||¦  «        S )z¤Wrapper around F.pad, in order for reflect padding when num_frames is shorter than max_pad.
        Add extra zero padding around in order for padding to not break.r_   r¼   r   r   )ra   r§   rc   rC   )r   r%   rÊ   rË   r½   rÌ   r~   Úmax_pads           r    rÀ   zHDemucs._pad1dó  so   € ð ”˜”ˆØ�9ÒÐÝ˜,¨Ñ6Ô6ˆGØ˜Ò Ð Ý”E˜!˜a ¨6Ñ!1°AÑ!5Ð6Ñ7Ô7�ÝŒu�Q˜ }Ð5°t¸UÑCÔCÐCr!   c                 óª   — |j         \  }}}}t          j        |¦  «                             ddddd¦  «        }|                     ||dz  ||¦  «        }|S )Nr   r   r7   rQ   r`   )ra   r   Úview_as_realrf   rg   )r   ro   ri   rj   rk   rl   Úms          r    Ú
_magnitudezHDemucs._magnitudeý  sW   € à”g‰ˆˆ1ˆb�!ÝÔ˜qÑ!Ô!×)Ò)¨!¨Q°°1°aÑ8Ô8ˆØ�IŠI�a˜˜Q™  AÑ&Ô&ˆØˆr!   c                 óÐ   — |j         \  }}}}}|                     ||dd||¦  «                             dddddd¦  «        }t          j        |                     ¦   «         ¦  «        }|S )Nr_   rQ   r   r   r7   é   r`   )ra   rb   rf   r   Úview_as_complexÚ
contiguous)r   rÑ   ri   ÚSrj   rk   rl   r'   s           r    Ú_maskzHDemucs._mask  se   € àœ‰ˆˆ1ˆa��QØ�fŠf�Q˜˜2˜q " aÑ(Ô(×0Ò0°°A°q¸!¸QÀÑBÔBˆÝÔ# C§N¢NÑ$4Ô$4Ñ5Ô5ˆØˆ
r!   Úinputc                 ót	  — |j         dk    rt          d|j        › �¦  «        ‚|j        d         | j        k    rt          d|j        d         › d�¦  «        ‚|}|j        d         }|                      |¦  «        }|                      |¦  «        }|}|j        \  }}}}	|                     dd¬	¦  «        }
|                     dd¬	¦  «        }||
z
  d
|z   z  }|}|                     dd¬	¦  «        }|                     dd¬	¦  «        }||z
  d
|z   z  }g }g }g }g }t          | j	        ¦  «        D �]@\  }}| 
                    |j        d         ¦  «         d}|t          | j        ¦  «        k     rW| 
                    |j        d         ¦  «         | j        |         } ||¦  «        }|j        s| 
                    |¦  «         n|} |||¦  «        }|dk    r‚| j        �{t          j        |j        d         |j        ¬¦  «        }|                      |¦  «                             ¦   «         ddd…dd…df                              |¦  «        }|| j        |z  z   }| 
                    |¦  «         �ŒBt          j        |¦  «        }t          j        |¦  «        }t          | j        ¦  «        D ]ø\  }}|                     d¦  «        } ||||                     d¦  «        ¦  «        \  }}| j        t          | j        ¦  «        z
  }||k    r™| j        ||z
           }|                     d¦  «        }|j        rH|j        d         dk    rt          d|j        › �¦  «        ‚|dd…dd…df         } ||d|¦  «        \  }}ŒÓ|                     d¦  «        } ||||¦  «        \  }}Œùt          |¦  «        dk    rt5          d¦  «        ‚t          |¦  «        dk    rt5          d¦  «        ‚t          |¦  «        dk    rt5          d¦  «        ‚t          | j        ¦  «        } |                     || d||	¦  «        }||dd…df         z  |
dd…df         z   }|                      |¦  «        }!|                      |!|¦  «        }|                     || d|¦  «        }||dd…df         z  |dd…df         z   }||z   }|S )a  HDemucs forward call

        Args:
            input (torch.Tensor): input mixed tensor of shape `(batch_size, channel, num_frames)`

        Returns:
            Tensor
                output tensor split into sources of shape `(batch_size, num_sources, channel, num_frames)`
        r`   zDExpected 3D tensor with dimensions (batch, channel, frames). Found: r   zZThe channel dimension of input Tensor must match `audio_channels` of HDemucs model. Found:ú.r_   )r   rQ   r`   T)r   Úkeepdimgñhãˆµøä>)r   rQ   Nr   éþÿÿÿ)ÚdevicerQ   z0If tdec empty is True, pre shape does not match zsaved is not emptyzlengths_t is not emptyzsaved_t is not empty)Úndimrd   ra   rˆ   rÄ   rÒ   ÚmeanÚstdÚ	enumerater¡   r¨   r©   r£   r>   r�   r   r   rÞ   ÚtÚ	expand_asr«   Ú
zeros_liker¢   ÚpoprŒ   r¤   ÚAssertionErrorr‡   rb   rØ   rÇ   )"r   rÙ   r%   r~   ro   Úmagri   rj   ÚFqrl   rà   rá   ÚxtÚmeantÚstdtÚsavedÚsaved_tÚlengthsÚ	lengths_tÚidxÚencoder]   r¸   ÚfrsÚembÚdecoder|   ÚpreÚoffsetrº   Úlength_tÚ_r×   Úzouts"                                     r    r(   zHDemucs.forward  sô  € ð Œ:˜Š?ˆ?ÝÐqÐdiÔdoÐqÐqÑrÔrÐràŒ;�qŒ>˜TÔ0Ò0Ð0Ýð+Øœ Qœð+ð +ð +ñô ð ð
 ˆØ”˜”ˆà�JŠJ�uÑÔˆØ�oŠo˜aÑ Ô ˆØˆà”g‰ˆˆ1ˆb�!ð �vŠv˜)¨TˆvÑ2Ô2ˆØ�eŠe˜	¨4ˆeÑ0Ô0ˆØ�‰X˜$ ™*Ñ%ˆð ˆØ—’˜F¨D�Ñ1Ô1ˆØ�vŠv˜&¨$ˆvÑ/Ô/ˆØ�5‰j˜T D™[Ñ)ˆàˆØˆØˆØ!ˆ	å$ TÔ%6Ñ7Ô7ð 	ñ 	‰KˆC�Ø�NŠN˜1œ7 2œ;Ñ'Ô'Ð'ØˆFØ•S˜Ô*Ñ+Ô+Ò+Ð+à× Ò  ¤¨"¤Ñ.Ô.Ð.ØÔ(¨Ô-�Ø�T˜"‘X”X�Ø”zð  à—N’N 2Ñ&Ô&Ð&Ð&ð  �FØ��q˜&Ñ!Ô!ˆAØ�aŠxˆx˜DœMÐ5õ ”l 1¤7¨2¤;°q´xÐ@Ñ@Ô@�Ø—m’m CÑ(Ô(×*Ò*Ñ,Ô,¨T°1°1°1°a°a°a¸Ð-=Ô>×HÒHÈÑKÔK�Ø˜Ô+¨cÑ1Ñ1�à�LŠL˜‰OŒOˆO‰OåÔ˜QÑÔˆÝÔ˜aÑ Ô ˆõ % TÔ%6Ñ7Ô7ð 	5ð 	5‰KˆC�Ø—9’9˜R‘=”=ˆDØ�V˜A˜t W§[¢[°¡_¤_Ñ5Ô5‰FˆAˆsð ”Z¥# dÔ&7Ñ"8Ô"8Ñ8ˆFØ�fŠ}ˆ}ØÔ(¨¨v©Ô6�Ø$Ÿ=š=¨Ñ,Ô,�Ø”:ð 5Ø”y ”| qÒ(Ð(Ý(Ð)gÐ\_Ô\eÐ)gÐ)gÑhÔhÐhØ˜a˜a˜a    A˜gœ,�CØ ˜D  d¨HÑ5Ô5‘E�B˜˜à"Ÿ;š; r™?œ?�DØ ˜D  T¨8Ñ4Ô4‘E�B˜øåˆu‰:Œ:˜Š?ˆ?Ý Ð!5Ñ6Ô6Ð6Ýˆy‰>Œ>˜QÒÐÝ Ð!9Ñ:Ô:Ð:Ýˆw‰<Œ<˜1ÒÐÝ Ð!7Ñ8Ô8Ð8å�”ÑÔˆØ�FŠF�1�a˜˜R Ñ#Ô#ˆØ��A�A�A�t�G”Ñ˜t A A A t Gœ}Ñ,ˆà�zŠz˜!‰}Œ}ˆØ�KŠK˜˜fÑ%Ô%ˆà�WŠW�Q˜˜2˜vÑ&Ô&ˆØ�$�q�q�q˜$�w”-Ñ %¨¨¨¨4¨¤.Ñ0ˆØ�‰FˆØˆr!   )rQ   r�   rQ   r‚   rƒ   r„   r…   Tr6   rQ   r7   r   r   r7   r7   rQ   r7   r7   r7   r†   r$   )rÈ   rÉ   )r)   r*   r+   r,   r   rq   r-   r.   r/   r   rÄ   rÇ   r   r1   rÀ   rÒ   rØ   r(   r2   r3   s   @r    r€   r€   -  s-  ø€ € € € € ð!ð !ðL  ØØØØØØØØØØØØØØØØØØØ ð-~ð ~à�c”ð~ð ð~ð ð	~ð
 ð~ð ð~ð ð~ð ð~ð ð~ð ð~ð ð~ð ð~ð ð~ð ð~ð ð~ð  ð!~ð" ð#~ð$ ð%~ð& ð'~ð( ð)~ð* ð+~ð, ð-~ð ~ð ~ð ~ð ~ð ~ð@ð ð ð0ð ð ð ðDð D˜œð D°Cð DÈð DÐSVð DÐhmð Dð Dð Dð Dðð ð ðð ð ðo˜Uœ\ð oð oð oð oð oð oð oð or!   r€   c                   óf   ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 dded	ed
edededededededefˆ fd„Zd„ Z	ˆ xZ
S )rY   a±  
    New residual branches in each encoder layer.
    This alternates dilated convolutions, potentially with LSTMs and attention.
    Also before entering each residual branch, dimension is projected on a smaller subspace,
    e.g. of dim `channels // compress`.

    Args:
        channels (int): input/output channels for residual branch.
        compress (float, optional): amount of channel compression inside the branch. (default: 4)
        depth (int, optional): number of layers in the residual branch. Each layer has its own
            projection, and potentially LSTM and attention.(default: 2)
        init (float, optional): initial scale for LayerNorm. (default: 1e-4)
        norm_type (bool, optional): Norm type, either ``group_norm `` or ``none`` (Default: ``group_norm``)
        attn (bool, optional): use LocalAttention. (Default: ``False``)
        heads (int, optional): number of heads for the LocalAttention.  (default: 4)
        ndecay (int, optional): number of decay controls in the LocalAttention. (default: 4)
        lstm (bool, optional): use LSTM. (Default: ``False``)
        kernel_size (int, optional): kernel size for the (dilated) convolutions. (default: 3)
    r7   rQ   r†   r8   Fr`   r‰   rœ   rŒ   r�   r@   r›   ÚheadsÚndecayrš   r;   c                 ó�  •— t          ¦   «                              ¦   «          |
dz  dk    rt          d¦  «        ‚|| _        || _        t          |¦  «        | _        |dk    }d„ }|dk    rd„ }t          ||z  ¦  «        }t          j	        }t          j
        g ¦  «        | _        t          | j        ¦  «        D �]}|rt          d|¦  «        nd}||
dz  z  }t          j        |||
||¬¦  «         ||¦  «         |¦   «         t          j        |d|z  d¦  «         |d|z  ¦  «        t          j        d¦  «        t!          ||¦  «        g}|r&|                     d	t%          |||¬
¦  «        ¦  «         |	r&|                     d	t'          |dd¬¦  «        ¦  «         t          j        |Ž }| j                             |¦  «         �Œd S )NrQ   r   z(Kernel size should not be divisible by 2c                 ó(   — t          j        ¦   «         S r$   rF   rH   s    r    rJ   z!_DConv.__init__.<locals>.<lambda>©  rK   r!   r8   c                 ó,   — t          j        d| ¦  «        S )Nr   rM   rH   s    r    rJ   z!_DConv.__init__.<locals>.<lambda>«  s   € ¥¤¨Q°Ñ 2Ô 2€ r!   r   )ÚdilationÚpaddingr`   )rü   rý   T)Úlayersr|   )r   r   rd   r‰   rœ   ÚabsrŒ   r-   r   ÚGELUr    r  r¥   ÚpowrR   ÚGLUÚ_LayerScalerª   Ú_LocalStateÚ_BLSTMÚ
Sequentialr¨   )r   r‰   rœ   rŒ   r�   r@   r›   rü   rý   rš   r;   ÚdilaterZ   ÚhiddenÚactrI   r  r  ÚmodsÚlayerr   s                       €r    r   z_DConv.__init__’  sÝ  ø€ õ 	‰Œ×ÒÑÔÐØ˜‰?˜aÒÐÝÐGÑHÔHÐHØ ˆŒØ ˆŒÝ˜‘Z”ZˆŒ
Ø˜’ˆð *Ð)ˆØ˜Ò$Ð$Ø2Ð2ˆGå�X Ñ(Ñ)Ô)ˆåŒgˆå”m BÑ'Ô'ˆŒÝ�t”zÑ"Ô"ð 	&ñ 	&ˆAØ$*Ð1•s˜1˜a‘y”y�y°ˆHØ +°Ñ"2Ñ3ˆGå”	˜( F¨KÀ(ÐT[Ð\Ñ\Ô\Ø�˜‘”Ø�‘”Ý”	˜& ! h¡,°Ñ2Ô2Ø�˜˜H™Ñ%Ô%Ý”�q‘	”	Ý˜H dÑ+Ô+ðˆDð ð PØ—’˜A�{¨6¸ÀvÐNÑNÔNÑOÔOÐOØð DØ—’˜A�v f°Q¸TÐBÑBÔBÑCÔCÐCÝ”M 4Ð(ˆEØŒK×Ò˜uÑ%Ô%Ð%Ñ%ð#	&ð 	&r!   c                 ó6   — | j         D ]}| ||¦  «        z   }Œ|S )zÁDConv forward call

        Args:
            x (torch.Tensor): input tensor for convolution

        Returns:
            Tensor
                Output after being run through layers.
        )r  )r   r%   r  s      r    r(   z_DConv.forwardÅ  s-   € ð ”[ð 	ð 	ˆEØ�E�E˜!‘H”H‘ˆAˆAØˆr!   )	r7   rQ   r†   r8   Fr7   r7   Fr`   )r)   r*   r+   r,   r-   r.   rq   r/   r   r(   r2   r3   s   @r    rY   rY   }  sÛ   ø€ € € € € ðð ð. ØØØ%ØØØØØð1&ð 1&àð1&ð ð1&ð ð	1&ð
 ð1&ð ð1&ð ð1&ð ð1&ð ð1&ð ð1&ð ð1&ð 1&ð 1&ð 1&ð 1&ð 1&ðfð ð ð ð ð ð r!   rY   c                   óR   ‡ — e Zd ZdZd
dedefˆ fd„Zdej        dej        fd	„Z	ˆ xZ
S )r
  ae  
    BiLSTM with same hidden units as input dim.
    If `max_steps` is not None, input will be splitting in overlapping
    chunks and the LSTM applied separately on each chunk.
    Args:
        dim (int): dimensions at LSTM layer.
        layers (int, optional): number of LSTM layers. (default: 1)
        skip (bool, optional): (default: ``False``)
    r   Fr  r|   c                 óØ   •— t          ¦   «                              ¦   «          d| _        t          j        d|||¬¦  «        | _        t          j        d|z  |¦  «        | _        || _        d S )NéÈ   T)ÚbidirectionalÚ
num_layersÚhidden_sizeÚ
input_sizerQ   )	r   r   Ú	max_stepsr   ÚLSTMrš   ÚLinearÚlinearr|   )r   r   r  r|   r   s       €r    r   z_BLSTM.__init__ß  s]   ø€ Ý‰Œ×ÒÑÔÐØˆŒÝ”G¨$¸6ÈsÐ_bÐcÑcÔcˆŒ	Ý”i  C¡¨Ñ-Ô-ˆŒØˆŒ	ˆ	ˆ	r!   r%   r"   c           	      óŠ  — |j         \  }}}|}d}d}d}d}	| j        �d|| j        k    rY| j        }|dz  }t          |||¦  «        }
|
j         d         }	d}|
                     dddd¦  «                             d||¦  «        }|                     ddd¦  «        }|                      |¦  «        d         }|                      |¦  «        }|                     ddd¦  «        }|rÖg }|                     |d||¦  «        }
|dz  }t          |	¦  «        D ]„}|dk    r'|                     |
dd…|dd…d| …f         ¦  «         Œ/||	dz
  k    r&|                     |
dd…|dd…|d…f         ¦  «         Œ^|                     |
dd…|dd…|| …f         ¦  «         Œ…t          j
        |d¦  «        }|d	d|…f         }|}| j        r||z   }|S )
a  BLSTM forward call

        Args:
            x (torch.Tensor): input tensor for BLSTM shape is `(batch_size, dim, time_steps)`

        Returns:
            Tensor
                Output after being run through bidirectional LSTM. Shape is `(batch_size, dim, time_steps)`
        Fr   NrQ   Tr   r`   r_   .)ra   r  Ú_unfoldrf   rg   rš   r  r¥   r¨   r   Úcatr|   )r   r%   ri   rj   rl   rn   ÚframedÚwidthr<   ÚnframesÚframesr'   ÚlimitÚks                 r    r(   z_BLSTM.forwardæ  s  € ð ”'‰ˆˆ1ˆaØˆØˆØˆØˆØˆØŒ>Ð%¨!¨d¬nÒ*<Ð*<Ø”NˆEØ˜a‘ZˆFÝ˜Q  vÑ.Ô.ˆFØ”l 1”oˆGØˆFØ—’˜q ! Q¨Ñ*Ô*×2Ò2°2°q¸%Ñ@Ô@ˆAà�IŠI�a˜˜AÑÔˆà�IŠI�a‰LŒL˜ŒOˆØ�KŠK˜‰NŒNˆØ�IŠI�a˜˜AÑÔˆØð 	ØˆCØ—Y’Y˜q " a¨Ñ/Ô/ˆFØ˜a‘KˆEÝ˜7‘^”^ð >ð >�Ø˜’6�6Ø—J’J˜v a a a¨¨A¨A¨A¨w°°¨wÐ&6Ô7Ñ8Ô8Ð8Ð8Ø˜' A™+Ò%Ð%Ø—J’J˜v a a a¨¨A¨A¨A¨u¨v¨v oÔ6Ñ7Ô7Ð7Ð7à—J’J˜v a a a¨¨A¨A¨A¨u°e°V¨|Ð&;Ô<Ñ=Ô=Ð=Ð=Ý”)˜C Ñ$Ô$ˆCØ�c˜2˜A˜2�g”,ˆCØˆAØŒ9ð 	Ø�A‘ˆAàˆr!   )r   F)r)   r*   r+   r,   r-   r/   r   r   r1   r(   r2   r3   s   @r    r
  r
  Ô  s€   ø€ € € € € ðð ðð  Cð °4ð ð ð ð ð ð ð.˜œð .¨%¬,ð .ð .ð .ð .ð .ð .ð .ð .r!   r
  c                   óV   ‡ — 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ˆ xZ	S )r	  a   Local state allows to have attention based only on data (no positional embedding),
    but while setting a constraint on the time window (e.g. decaying penalty term).
    Also a failed experiments with trying to provide some frequency based attention.
    r7   r‰   rü   rý   c                 ó\  •— t          t          | ¦  «                             ¦   «          ||z  dk    rt          d¦  «        ‚|| _        || _        t          j        ||d¦  «        | _        t          j        ||d¦  «        | _	        t          j        ||d¦  «        | _
        t          j        |||z  d¦  «        | _        |rK| j        j        xj        dz  c_        | j        j        €t          d¦  «        ‚d| j        j        j        dd…<   t          j        ||dz  z   |d¦  «        | _        dS )z¬
        Args:
            channels (int): Size of Conv1d layers.
            heads (int, optional):  (default: 4)
            ndecay (int, optional): (default: 4)
        r   z$Channels must be divisible by heads.r   g{®Gáz„?Nzbias must not be None.rÝ   )r   r	  r   rd   rü   rý   r   rR   ÚcontentÚqueryÚkeyÚquery_decayr   r   ÚbiasÚproj)r   r‰   rü   rý   r   s       €r    r   z_LocalState.__init__  s  ø€ õ 	�k˜4Ñ Ô ×)Ò)Ñ+Ô+Ð+Ø�eÑ˜qÒ Ð ÝÐCÑDÔDÐDØˆŒ
ØˆŒÝ”y ¨8°QÑ7Ô7ˆŒÝ”Y˜x¨°1Ñ5Ô5ˆŒ
Ý”9˜X x°Ñ3Ô3ˆŒåœ9 X¨u°v©~¸qÑAÔAˆÔØð 	/àÔÔ#Ð(Ô(¨DÑ0Ð(Ô(ØÔÔ$Ð,Ý Ð!9Ñ:Ô:Ð:Ø,.ˆDÔÔ!Ô& q q qÑ)Ý”I˜h¨°©Ñ2°H¸aÑ@Ô@ˆŒ	ˆ	ˆ	r!   r%   r"   c                 óÜ  — |j         \  }}}| j        }t          j        ||j        |j        ¬¦  «        }|dd…df         |ddd…f         z
  }|                      |¦  «                             ||d|¦  «        }|                      |¦  «                             ||d|¦  «        }	t          j	        d|	|¦  «        }
|
t          j        |	j         d         ¦  «        z  }
| j        rÌt          j        d| j        dz   |j        |j        ¬¦  «        }|                      |¦  «                             ||d|¦  «        }t          j        |¦  «        dz  }|                     ddd¦  «         |                     ¦   «         z  t          j        | j        ¦  «        z  }|
t          j	        d||¦  «        z  }
|
                     t          j        ||
j        t          j        ¬¦  «        d¦  «         t          j        |
d¬	¦  «        }|                      |¦  «                             ||d|¦  «        }t          j	        d
||¦  «        }|                     |d|¦  «        }||                      |¦  «        z   S )zÏLocalState forward call

        Args:
            x (torch.Tensor): input tensor for LocalState

        Returns:
            Tensor
                Output after being run through LocalState layer.
        )rÞ   ÚdtypeNr_   zbhct,bhcs->bhtsrQ   r   zfts,bhfs->bhtsiœÿÿÿr   zbhts,bhct->bhcs)ra   rü   r   r   rÞ   r/  r)  rb   r*  Úeinsumr¾   r   rý   r+  Úsigmoidr  Úmasked_fill_Úeyer/   Úsoftmaxr(  rg   r-  )r   r%   ri   rj   rl   rü   ÚindexesÚdeltaÚqueriesÚkeysÚdotsÚdecaysÚdecay_qÚdecay_kernelÚweightsr(  Úresults                    r    r(   z_LocalState.forward6  s%  € ð ”'‰ˆˆ1ˆaØ”
ˆÝ”,˜q¨¬¸¼ÐAÑAÔAˆà˜˜˜˜4˜Ô  7¨4°°°¨7Ô#3Ñ3ˆà—*’*˜Q‘-”-×$Ò$ Q¨¨r°1Ñ5Ô5ˆØ�xŠx˜‰{Œ{×Ò  5¨"¨aÑ0Ô0ˆåŒ|Ð-¨t°WÑ=Ô=ˆØ•”	˜$œ* Qœ-Ñ(Ô(Ñ(ˆØŒ;ð 	JÝ”\ ! T¤[°1¡_¸Q¼XÈQÌWÐUÑUÔUˆFØ×&Ò& qÑ)Ô)×.Ò.¨q°%¸¸QÑ?Ô?ˆGÝ”m GÑ,Ô,¨qÑ0ˆGØ"ŸKšK¨¨A¨qÑ1Ô1Ð1°E·I²I±K´KÑ?Å$Ä)ÈDÌKÑBXÔBXÑXˆLØ•E”LÐ!1°<ÀÑIÔIÑIˆDð 	×Ò�%œ) A¨d¬kÅÄÐLÑLÔLÈdÑSÔSÐSÝ”- ¨!Ð,Ñ,Ô,ˆà—,’,˜q‘/”/×&Ò& q¨%°°QÑ7Ô7ˆÝ”Ð/°¸'ÑBÔBˆØ—’  2 qÑ)Ô)ˆØ�4—9’9˜VÑ$Ô$Ñ$Ð$r!   )r7   r7   )
r)   r*   r+   r,   r-   r   r   r1   r(   r2   r3   s   @r    r	  r	    s‘   ø€ € € € € ðð ð
Að A ð A¨Sð A¸cð Að Að Að Að Að Að2#%˜œð #%¨%¬,ð #%ð #%ð #%ð #%ð #%ð #%ð #%ð #%r!   r	  c                   óR   ‡ — e Zd ZdZd	dedefˆ fd„Zdej        dej        fd„Z	ˆ xZ
S )
r  z£Layer scale from [Touvron et al 2021] (https://arxiv.org/pdf/2103.17239.pdf).
    This rescales diagonally residual outputs close to 0 initially, then learnt.
    r   r‰   r�   c                 óÄ   •— t          ¦   «                              ¦   «          t          j        t	          j        |d¬¦  «        ¦  «        | _        || j        j        dd…<   dS )z‹
        Args:
            channels (int): Size of  rescaling
            init (float, optional): Scale to default to (default: 0)
        T)Úrequires_gradN)r   r   r   Ú	Parameterr   Úzerosr   r   )r   r‰   r�   r   s      €r    r   z_LayerScale.__init__a  sS   ø€ õ 	‰Œ×ÒÑÔÐÝ”\¥%¤+¨hÀdÐ"KÑ"KÔ"KÑLÔLˆŒ
Ø!ˆŒ
Œ˜˜˜ÑÐÐr!   r%   r"   c                 ó*   — | j         dd…df         |z  S )z½LayerScale forward call

        Args:
            x (torch.Tensor): input tensor for LayerScale

        Returns:
            Tensor
                Output after rescaling tensor.
        N)r   )r   r%   s     r    r(   z_LayerScale.forwardk  s   € ð Œz˜!˜!˜!˜T˜'Ô" QÑ&Ð&r!   )r   )r)   r*   r+   r,   r-   r.   r   r   r1   r(   r2   r3   s   @r    r  r  \  s€   ø€ € € € € ðð ð"ð " ð "¨Eð "ð "ð "ð "ð "ð "ð
'˜œð 
'¨%¬,ð 
'ð 
'ð 
'ð 
'ð 
'ð 
'ð 
'ð 
'r!   r  Úar;   r<   r"   c                 ó  ‡ — t          ‰ j        dd…         ¦  «        }t          ‰ j        d         ¦  «        }t          j        ||z  ¦  «        }|dz
  |z  |z   }t          j        ‰ d||z
  g¬¦  «        Š ˆ fd„t          ‰                      ¦   «         ¦  «        D ¦   «         }|d         dk    rt          d¦  «        ‚|dd…         |dgz   }| 
                    |¦  «         | 
                    |¦  «         ‰                      ||¦  «        S )zûGiven input of size [*OT, T], output Tensor of size [*OT, F, K]
    with K the kernel size, by extracting frames with the given stride.
    This will pad the input so that `F = ceil(T / K)`.
    see https://github.com/pytorch/pytorch/issues/60466
    Nr_   r   r   )rÙ   rC   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS © )r<   )Ú.0r   rE  s     €r    ú
<listcomp>z_unfold.<locals>.<listcomp>ƒ  s#   ø€ Ð7Ð7Ð7 ˆq�xŠx˜‰}Œ}Ð7Ð7Ð7r!   zData should be contiguous.)Úlistra   r-   r¾   r¿   rc   rC   r¥   r   rd   r¨   Ú
as_strided)rE  r;   r<   ra   r~   Ún_framesÚ
tgt_lengthÚstridess   `       r    r  r  x  s  ø€ õ �”˜˜"˜”ÑÔ€EÝ�”˜”ÑÔ€FÝŒy˜ &™Ñ)Ô)€HØ˜Q‘, &Ñ(¨;Ñ6€JÝ	Œ�A˜A˜z¨FÑ2Ð3Ð4Ñ4Ô4€AØ7Ð7Ð7Ð7­¨a¯eªe©g¬g©¬Ð7Ñ7Ô7€GØˆr„{�aÒÐÝÐ5Ñ6Ô6Ð6Ø�c�r�cŒl˜f a˜[Ñ(€GØ	‡L‚L�ÑÔÐØ	‡L‚L�ÑÔÐØ�<Š<˜˜wÑ'Ô'Ð'r!   c                 ót  — |                       ¦   «         D ]¢}t          |t          j        t          j        t          j        t          j        f¦  «        rd|j                             ¦   «          	                    ¦   «         }|dz  dz  }|j        xj
        |z  c_
        |j        �|j        xj
        |z  c_
        Œ£dS )zI
    Rescales initial weight scale for all models within the module.
    gš™™™™™¹?g      à?N)ÚmodulesÚ
isinstancer   rR   rx   rS   ry   r   rá   Údetachr   r,  )ÚmoduleÚsubrá   r   s       r    r¬   r¬   Œ  s¤   € ð �~Š~ÑÔð 'ð 'ˆÝ�c�BœI¥rÔ'9½2¼9ÅbÔFXÐYÑZÔZð 	'Ø”*—.’.Ñ"Ô"×)Ò)Ñ+Ô+ˆCØ˜3‘Y 3Ñ&ˆEØŒJˆOŒO˜uÑ$ˆOŒOØŒxÐ#Ø”�” Ñ&�”øð'ð 'r!   é   r%   Ún_fftrŸ   rC   c                 ó˜  — t          | j        d d…         ¦  «        }t          | j        d         ¦  «        }|                      d|¦  «        } t	          j        | |d|z   z  |t	          j        |¦  «                             | ¦  «        |dddd¬¦	  «	        }|j        \  }}}	|                     ||	g¦  «         | 	                    |¦  «        S )Nr_   r   Tr¼   )ÚwindowÚ
win_lengthÚ
normalizedÚcenterÚreturn_complexÚpad_mode)
rK  ra   r-   rg   r   ÚstftÚhann_windowÚtoÚextendrb   )
r%   rW  rŸ   rC   Úotherr~   ro   rù   r¯   Úframes
             r    rÁ   rÁ   ™  sÇ   € Ý�”˜˜"˜”ÑÔ€EÝ�”˜”ÑÔ€FØ	�	Š	�"�fÑÔ€AÝŒ
Ø	Ø��S‘ÑØÝÔ  Ñ'Ô'×*Ò*¨1Ñ-Ô-ØØØØØð
	ñ 
	ô 
	€Að ”g�O€A€uˆeØ	‡L‚L�%˜�Ñ Ô Ð Ø�6Š6�%‰=Œ=Ðr!   ro   r~   c           
      óä  — t          | j        d d…         ¦  «        }t          | j        d         ¦  «        }t          | j        d         ¦  «        }d|z  dz
  }|                      d||¦  «        } |d|z   z  }t	          j        | ||t	          j        |¦  «                             | j        ¦  «        |d|d¬¦  «        }	|	j        \  }
}| 	                    |¦  «         |	                     |¦  «        S )NrÝ   r_   rQ   r   T)rY  rZ  r[  r~   r\  )
rK  ra   r-   rb   r   Úistftr`  ra  Úrealr¨   )ro   rŸ   r~   rC   rc  r¯   r#  rW  rZ  r%   rù   s              r    rÆ   rÆ   ­  sç   € Ý�”˜˜"˜”ÑÔ€EÝ�”˜”ÑÔ€EÝ�”˜”ÑÔ€Fà�‰I˜‰M€EØ	�Šˆr�5˜&Ñ!Ô!€AØ˜1˜s™7Ñ#€JÝŒØ	ØØÝÔ  Ñ,Ô,×/Ò/°´Ñ7Ô7ØØØØð		ñ 		ô 		€Að ”�I€A€vØ	‡L‚L�ÑÔÐØ�6Š6�%‰=Œ=Ðr!   r‡   c                 ó&   — t          | dd¬¦  «        S )zÚBuilds low nfft (1024) version of :class:`HDemucs`, suitable for sample rates around 8 kHz.

    Args:
        sources (List[str]): See :py:func:`HDemucs`.

    Returns:
        HDemucs:
            HDemucs model.
    i   rÔ   ©r‡   r‹   rŒ   ©r€   ©r‡   s    r    Úhdemucs_lowrl  Ä  ó   € õ ˜7¨°QÐ7Ñ7Ô7Ð7r!   c                 ó&   — t          | dd¬¦  «        S )aÉ  Builds medium nfft (2048) version of :class:`HDemucs`, suitable for sample rates of 16-32 kHz.

    .. note::

        Medium HDemucs has not been tested against the original Hybrid Demucs as this nfft and depth configuration is
        not compatible with the original implementation in https://github.com/facebookresearch/demucs

    Args:
        sources (List[str]): See :py:func:`HDemucs`.

    Returns:
        HDemucs:
            HDemucs model.
    rž   rƒ   ri  rj  rk  s    r    Úhdemucs_mediumro  Ò  s   € õ  ˜7¨°QÐ7Ñ7Ô7Ð7r!   c                 ó&   — t          | dd¬¦  «        S )zßBuilds medium nfft (4096) version of :class:`HDemucs`, suitable for sample rates of 44.1-48 kHz.

    Args:
        sources (List[str]): See :py:func:`HDemucs`.

    Returns:
        HDemucs:
            HDemucs model.
    r‚   rƒ   ri  rj  rk  s    r    Úhdemucs_highrq  å  rm  r!   )rV  r   r   )r   r   r   )r¾   ÚtypingÚtpr   r   r   r   r   r   Útorch.nnr   rc   ÚModuler
   r5   rs   r€   rY   r
  r	  r  r1   r-   r  r¬   rÁ   rÆ   rq   rl  ro  rq  rH  r!   r    ú<module>rv     sS  ðð4 €€€Ø Ð Ð Ð Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à €€€Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $ð#ð #ð #ð #ð #�u”x”ñ #ô #ð #ðLkð kð kð kð k�””ñ kô kð kð\sð sð sð sð s�””ñ sô sð sðlMð Mð Mð Mð MˆeŒhŒoñ Mô Mð Mð`
Tð Tð Tð Tð TˆUŒXŒ_ñ Tô Tð Tðn@ð @ð @ð @ð @ˆUŒXŒ_ñ @ô @ð @ðFB%ð B%ð B%ð B%ð B%�"”)ñ B%ô B%ð B%ðJ'ð 'ð 'ð 'ð '�"”)ñ 'ô 'ð 'ð8(ˆuŒ|ð (¨#ð (°sð (¸u¼|ð (ð (ð (ð (ð(
'ð 
'ð 
'ðð �”ð  Sð ¸Cð È#ð ÐV[ÔVbð ð ð ð ð(ð �”ð ¨3ð ¸Cð È#ð ÐV[ÔVbð ð ð ð ð.8˜˜cœð 8 wð 8ð 8ð 8ð 8ð8˜D œIð 8¨'ð 8ð 8ð 8ð 8ð&8˜$˜sœ)ð 8¨ð 8ð 8ð 8ð 8ð 8ð 8r!   