
    0;ji=7                     J   d dl mZ d dlZd dlmc mZ d dlmc m	Z
 d dlmc mZ d Zd Z G d dej        j                  Z G d dej        j                  Zd	 Zdd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        j                  Z G d dej        j                  ZdS )     )OrderedDictNc                 Z   t          |           }t          d | D                       } | d         j        ||g| d                                         dd         R                      |          }t          |          D ]*}| |         ||d| |                             d          f<   +|S )a  Perform padding for the list of tensors.

    Args:
        xs (List): List of Tensors [(T_1, `*`), (T_2, `*`), ..., (T_B, `*`)].
        pad_value (float): Value for padding.

    Returns:
        Tensor: Padded tensor (B, Tmax, `*`).

    Examples:
        >>> x = [torch.ones(4), torch.ones(2), torch.ones(1)]
        >>> x
        [tensor([1., 1., 1., 1.]), tensor([1., 1.]), tensor([1.])]
        >>> pad_list(x, 0)
        tensor([[1., 1., 1., 1.],
                [1., 1., 0., 0.],
                [1., 0., 0., 0.]])

    c              3   @   K   | ]}|                     d           V  dS )r   N)size).0xs     Y/root/voice-cloning/.venv/lib/python3.11/site-packages/chatterbox/models/s3gen/xvector.py	<genexpr>zpad_list.<locals>.<genexpr>$   s,      ((!&&))((((((    r      N)lenmaxnewr   fill_range)xs	pad_valuen_batchmax_lenpadis         r	   pad_listr      s    ( "ggG((R(((((G
"Q%)GW
8r!uzz||ABB'7
8
8
8
>
>y
I
IC7^^ ( ("$Q%AAAJr   c                 t   g }g }g }| D ]}t          j        |                    d          d          }||                    dd          z
  }|                    |           |                    |j        d                    |                    |j        d                    t          |d          }|||fS )Nr   P   )num_mel_binsT)dimkeepdim)r   )Kaldifbank	unsqueezemeanappendshaper   )audiofeaturesfeature_timesfeature_lengthsaufeaturefeatures_paddeds          r	   extract_featurer+   -   s    HMO 1 1+bll1ooB???GLLQL===   RXa[)))w}Q/0000x1555OO]::r   c                   *     e Zd ZdZd fd	Zd Z xZS )BasicResBlockr   c           	         t          t          |                                            t          j                            ||d|dfdd          | _        t          j                            |          | _        t          j                            ||dddd          | _	        t          j                            |          | _
        t          j                                        | _        |dk    s|| j        |z  k    rxt          j                            t          j                            || j        |z  d|dfd          t          j                            | j        |z                      | _        d S d S )N   r   Fkernel_sizestridepaddingbias)r1   r2   r4   )superr-   __init__torchnnConv2dconv1BatchNorm2dbn1conv2bn2
Sequentialshortcut	expansion)self	in_planesplanesr2   	__class__s       r	   r6   zBasicResBlock.__init__@   sB   mT""++---X__v1fa[!RW % 
 

 8''//X__VV1VW^c_dd
8''//++--Q;;)t~'>>>!H//NV+ !"A;     $$T^f%<==	 	DMMM ?>r   c                 "   t          j        |                     |                     |                              }|                     |                     |                    }||                     |          z  }t          j        |          }|S N)Frelur<   r:   r>   r=   r@   )rB   r   outs      r	   forwardzBasicResBlock.forwardV   sj    fTXXdjjmm,,--hhtzz#''t}}QfSkk
r   )r   )__name__
__module____qualname__rA   r6   rK   __classcell__rE   s   @r	   r-   r-   =   sQ        I     ,      r   r-   c                   8     e Zd Zeddgddf fd	Zd Zd Z xZS )FCM       r   c                 F   t          t          |                                            || _        t          j                            d|dddd          | _        t          j                            |          | _	        | 
                    |||d         d          | _        | 
                    |||d         d          | _        t          j                            ||dddd          | _        t          j                            |          | _        ||d	z  z  | _        d S )
Nr   r/   Fr0   r   rS   )r2   )rS   r      )r5   rR   r6   rC   r7   r8   r9   r:   r;   r<   _make_layerlayer1layer2r=   r>   out_channels)rB   block
num_blocks
m_channelsfeat_dimrE   s        r	   r6   zFCM.__init___   s    c4!!####X__Q
!UV]b_cc
8''
33&&uj*Q-PQ&RR&&uj*Q-PQ&RRX__
&!RW % 
 

 8''
33&(a-8r   c                     |gdg|dz
  z  z   }g }|D ]6}|                      || j        ||                     ||j        z  | _        7t          j        j        | S )Nr   )r"   rC   rA   r7   r8   r?   )rB   r[   rD   r\   r2   strideslayerss          r	   rW   zFCM._make_layern   so    (aSJN33 	6 	6FMM%%??@@@#eo5DNNx"F++r   c                    |                     d          }t          j        |                     |                     |                              }|                     |          }|                     |          }t          j        |                     |                     |                              }|j	        }|
                    |d         |d         |d         z  |d                   }|S )Nr   r   rS   r/   )r    rH   rI   r<   r:   rX   rY   r>   r=   r#   reshape)rB   r   rJ   r#   s       r	   rK   zFCM.forwardv   s    KKNNfTXXdjjmm,,--kk#kk#fTXXdjjoo..//	kk%(E!HuQx$7qBB
r   )rL   rM   rN   r-   r6   rW   rK   rO   rP   s   @r	   rR   rR   ^   si        *1v"WY 9 9 9 9 9 9, , ,	 	 	 	 	 	 	r   rR   c                    t           j                                        }|                     d          D ]}|dk    r5|                    dt           j                            d                     >|dk    r4|                    dt           j                            |                     x|dk    r4|                    dt           j                            |                     |dk    r6|                    dt           j                            |d	                     t          d
	                    |                    |S )N-rI   Tinplaceprelu	batchnorm
batchnorm_F)affinezUnexpected module ({}).)
r7   r8   r?   split
add_moduleReLUPReLUBatchNorm1d
ValueErrorformat)
config_strchannels	nonlinearnames       r	   get_nonlinearrw      s'   ##%%I  %% 
E 
E6>>  t)D)DEEEEW__  %(..*B*BCCCC[    eh.B.B8.L.LMMMM\!!  eh.B.B8TY.B.Z.Z[[[[6==dCCDDDr   FT{Gz?c                     |                      |          }|                     ||          }t          j        ||gd          }|r|                    |          }|S )Nr   )r   unbiasedrx   )r!   stdr7   catr    )r   r   r   r|   epsr!   r}   statss           r	   statistics_poolingr      s`    66c6??D
%%C(%
+
+CItSkr***E )C((Lr   c                       e Zd Zd ZdS )	StatsPoolc                      t          |          S rG   )r   rB   r   s     r	   rK   zStatsPool.forward   s    !!$$$r   N)rL   rM   rN   rK    r   r	   r   r      s#        % % % % %r   r   c                   0     e Zd Z	 	 	 	 	 d fd	Zd Z xZS )	TDNNLayerr   r   Fbatchnorm-reluc	           	      D   t          t          |                                            |dk     r1|dz  dk    sJ d                    |                      |dz
  dz  |z  }t          j                            |||||||          | _        t          ||          | _	        d S )Nr   rS   r   4Expect equal paddings, but got even kernel size ({})r2   r3   dilationr4   )
r5   r   r6   rr   r7   r8   Conv1dlinearrw   ru   )
rB   in_channelsrZ   r1   r2   r3   r   r4   rs   rE   s
            r	   r6   zTDNNLayer.__init__   s     	i'')))Q;;a1$$$ELL[YY %$$"Q1,x7Ghoo & 
 
 'z<@@r   c                 Z    |                      |          }|                     |          }|S rG   )r   ru   r   s     r	   rK   zTDNNLayer.forward   s'    KKNNNN1r   )r   r   r   Fr   rL   rM   rN   r6   rK   rO   rP   s   @r	   r   r      sc         #A A A A A A8      r   r   c                   0     e Zd Z	 d fd	Zd ZddZ xZS )	CAMLayerrS   c	           	         t          t          |                                            t          j                            |||||||          | _        t          j                            |||z  d          | _        t          j                            d          | _	        t          j                            ||z  |d          | _
        t          j                                        | _        d S )Nr   r   Trf   )r5   r   r6   r7   r8   r   linear_locallinear1rn   rI   linear2Sigmoidsigmoid)
rB   bn_channelsrZ   r1   r2   r3   r   r4   	reductionrE   s
            r	   r6   zCAMLayer.__init__   s     	h&&(((!HOO , 
 
 x{K94LaPPHMM$M//	x{i'?qQQx''))r   c                 0   |                      |          }|                    dd          |                     |          z   }|                     |                     |                    }|                     |                     |                    }||z  S )Nrx   T)r   )r   r!   seg_poolingrI   r   r   r   )rB   r   ycontextms        r	   rK   zCAMLayer.forward   s    a  &&T&**T-=-=a-@-@@))DLL1122LLg..//1ur   d   avgc                 J   |dk    rt          j        |||d          }n.|dk    rt          j        |||d          }nt          d          |j        }  |                    d          j        g ||R  j        g |d d         dR  }|dd |j        d         f         }|S )Nr   T)r1   r2   	ceil_moder   zWrong segment pooling type.rx   .)rH   
avg_pool1d
max_pool1drq   r#   r    expandrc   )rB   r   seg_lenstypesegr#   s         r	   r   zCAMLayer.seg_pooling   s    E>>,qggQUVVVCCe^^,qggQUVVVCC:;;;	?&cmmB&77w777?PssPRPPP#}}$%
r   )rS   )r   r   )rL   rM   rN   r6   rK   r   rO   rP   s   @r	   r   r      sc        ab* * * * * *$  
 
 
 
 
 
 
 
r   r   c                   6     e Zd Z	 	 	 	 	 d fd	Zd Zd Z xZS )CAMDenseTDNNLayerr   Fr   c
           	         t          t          |                                            |dz  dk    sJ d                    |                      |dz
  dz  |z  }
|	| _        t          ||          | _        t          j        	                    ||dd          | _
        t          ||          | _        t          |||||
||          | _        d S )NrS   r   r   Fr4   r   )r5   r   r6   rr   memory_efficientrw   
nonlinear1r7   r8   r   r   
nonlinear2r   	cam_layer)rB   r   rZ   r   r1   r2   r   r4   rs   r   r3   rE   s              r	   r6   zCAMDenseTDNNLayer.__init__   s     	&&//111Q!###%[%b%b&
 &
### ?q(83 0'
K@@x{KOO'
K@@!
 
 
r   c                 R    |                      |                     |                    S rG   )r   r   r   s     r	   bn_functionzCAMDenseTDNNLayer.bn_function
  s     ||DOOA..///r   c                     | j         r"| j        rt          j        | j        |          }n|                     |          }|                     |                     |                    }|S rG   )trainingr   cp
checkpointr   r   r   r   s     r	   rK   zCAMDenseTDNNLayer.forward  sa    = 	$T2 	$d.22AA  ##ANN4??1--..r   r   r   Fr   F)rL   rM   rN   r6   r   rK   rO   rP   s   @r	   r   r      sl         #
 
 
 
 
 
>0 0 0      r   r   c                   0     e Zd Z	 	 	 	 	 d fd	Zd Z xZS )CAMDenseTDNNBlockr   Fr   c                     t          t          |                                            t          |          D ]<}t	          |||z  z   |||||||	|
	  	        }|                     d|dz   z  |           =d S )N)	r   rZ   r   r1   r2   r   r4   rs   r   ztdnnd%dr   )r5   r   r6   r   r   rm   )rB   
num_layersr   rZ   r   r1   r2   r   r4   rs   r   r   layerrE   s                r	   r6   zCAMDenseTDNNBlock.__init__  s     	&&//111z"" 	8 	8A%'!l*::)''!%!1
 
 
E OOIQ/7777	8 	8r   c                 R    | D ]#}t          j        | ||          gd          }$|S )Nr   r{   )r7   r~   )rB   r   r   s      r	   rK   zCAMDenseTDNNBlock.forward3  s8     	0 	0E	1eeAhh-Q///AAr   r   r   rP   s   @r	   r   r     s]         #8 8 8 8 8 88      r   r   c                   &     e Zd Zd fd	Zd Z xZS )TransitLayerTr   c                     t          t          |                                            t          ||          | _        t
          j                            ||d|          | _        d S Nr   r   )	r5   r   r6   rw   ru   r7   r8   r   r   rB   r   rZ   r4   rs   rE   s        r	   r6   zTransitLayer.__init__:  sQ    lD!!**,,,&z;??hook<oNNr   c                 Z    |                      |          }|                     |          }|S rG   )ru   r   r   s     r	   rK   zTransitLayer.forward?  s'    NN1KKNNr   )Tr   r   rP   s   @r	   r   r   9  sR        O O O O O O
      r   r   c                   &     e Zd Zd fd	Zd Z xZS )
DenseLayerFr   c                     t          t          |                                            t          j                            ||d|          | _        t          ||          | _        d S r   )	r5   r   r6   r7   r8   r   r   rw   ru   r   s        r	   r6   zDenseLayer.__init__F  sQ    j$((***hook<oNN&z<@@r   c                    t          |j                  dk    r>|                     |                    d                                        d          }n|                     |          }|                     |          }|S )NrS   rx   r{   )r   r#   r   r    squeezeru   r   s     r	   rK   zDenseLayer.forwardK  sl    qw<<1AKKBK//0088R8@@AAAANN1r   )Fr   r   rP   s   @r	   r   r   E  sR        A A A A A A
      r   r   c                   <     e Zd Z	 	 	 	 	 	 	 	 d fd		Zd
 Zd Z xZS )CAMPPlusr      rT         r   Tsegmentc	                    t                                                       t          |          | _        | j        j        }
|| _        t          j                            t          dt          |
|dddd|          fg                    | _        |}
t          t          dd	d
                    D ]\  }\  }}}t          ||
|||z  ||||          }| j                            d|dz   z  |           |
||z  z   }
| j                            d|dz   z  t!          |
|
dz  d|                     |
dz  }
| j                            dt#          ||
                     | j        dk    rV| j                            dt%                                 | j                            dt'          |
dz  |d                     n| j        dk    s
J d            |                                 D ]}t+          |t          j        j        t          j        j        f          r^t          j        j                            |j        j                   |j        )t          j        j                            |j                   d S )N)r^   tdnn   rS   r   rx   )r2   r   r3   rs   )         )r/   r/   r/   )r   rS   rS   )r   r   rZ   r   r1   r   rs   r   zblock%dz	transit%dF)r4   rs   out_nonlinearr   r   denserj   )rs   framez6`output_level` should be set to 'segment' or 'frame'. )r5   r6   rR   headrZ   output_levelr7   r8   r?   r   r   xvector	enumeratezipr   rm   r   rw   r   r   modules
isinstancer   Linearinitkaiming_normal_weightdatar4   zeros_)rB   r^   embedding_sizegrowth_ratebn_sizeinit_channelsrs   r   r   kwargsrt   r   r   r1   r   r[   r   rE   s                    r	   r6   zCAMPPlus.__init__U  s    	***	9)(x** !$)#$%&$&'1   
 
$ !6?i337
 7
 	 	2A2
K &%$(#k1'!%!1	 	 	E L##IQ$7???*{"::HL##q1u%Xx1}5ZXXX   NHHz81T1TUUU	))L##GY[[999L##HqL.\ZZZ   
 !W,,,G -,,  	1 	1A!ehoux?@@ 1--ahm<<<6%HM((000		1 	1r   c                     |                     ddd          }|                     |          }|                     |          }| j        dk    r|                    dd          }|S )Nr   rS   r   r   )permuter   r   r   	transposer   s     r	   rK   zCAMPPlus.forward  s[    IIaAIIaLLLLOO''Aq!!Ar   c                     t          |          \  }}}|                     |                    t          j                            }|S rG   )r+   rK   tor7   float32)rB   
audio_listspeechspeech_lengthsspeech_timesresultss         r	   	inferencezCAMPPlus.inference  s:    />z/J/J,,,vyy7788r   )r   r   rT   r   r   r   Tr   )rL   rM   rN   r6   rK   r   rO   rP   s   @r	   r   r   T  s|         #J1 J1 J1 J1 J1 J1X        r   r   )rx   FTry   )collectionsr   r7   torch.nn.functionalr8   
functionalrH   torch.utils.checkpointutilsr   r   torchaudio.compliance.kaldi
compliancekaldir   r   r+   Moduler-   rR   rw   r   r   r   r   r   
ModuleListr   r   r   r   r   r   r	   <module>r     s   $ # # # # #           # # # # # # # # # + + + + + + + + +  <; ; ;     EHO   B! ! ! ! !%(/ ! ! !H      % % % % % % % %
               F$ $ $ $ $ux $ $ $N) ) ) ) ) ) ) )X         +      F	 	 	 	 	58? 	 	 	       X X X X Xux X X X X Xr   