
    9i                         S r SSKrSSKJs  Jr  SSKJs  Jr	  SSKJr  S r
SS jr " S S\R                  5      r " S S	\R                  5      r " S
 S\R                  5      r " S S\R                  5      r " S S\R"                  5      r " S S\R                  5      r " S S\R                  5      r " S S\R                  5      rg)zGSome implementations are adapted from https://github.com/yuyq96/D-TDNN
    N)nnc           	         [         R                  " 5       nU R                  S5       H  nUS:X  a&  UR                  S[         R                  " SS95        M/  US:X  a(  UR                  S[         R
                  " U5      5        M]  US:X  a(  UR                  S[         R                  " U5      5        M  US:X  a'  UR                  S[         R                  " USS	95        M  [        S
R                  U5      5      e   U$ )N-reluTinplaceprelu	batchnorm
batchnorm_F)affinezUnexpected module ({}).)	r   
Sequentialsplit
add_moduleReLUPReLUBatchNorm1d
ValueErrorformat)
config_strchannels	nonlinearnames       g/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/models/audio/sv/DTDNN_layers.pyget_nonlinearr      s    I  %6>  )>?W_  "((8*<=[   bnnX.FG\!  !#!GI 6==dCDD &     c                     U R                  US9nU R                  XS9n[        R                  " XV/SS9nU(       a  UR	                  US9nU$ )Ndim)r   unbiased)meanstdtorchcat	unsqueeze)xr   keepdimr   epsr!   r"   statss           r   statistics_poolingr*      sK    66c6?D
%%C%
+CIItkr*EC(Lr   c                       \ rS rSrS rSrg)	StatsPool%   c                     [        U5      $ N)r*   selfr&   s     r   forwardStatsPool.forward'   s    !!$$r    N)__name__
__module____qualname____firstlineno__r2   __static_attributes__r4   r   r   r,   r,   %   s    %r   r,   c                   <   ^  \ rS rSr     SU 4S jjrS rSrU =r$ )	TDNNLayer+   c	           
         > [         [        U ]  5         US:  a*  US-  S:X  d   SR                  U5      5       eUS-
  S-  U-  n[        R
                  " UUUUUUUS9U l        [        X5      U l        g )Nr         4Expect equal paddings, but got even kernel size ({})stridepaddingdilationbias)	superr;   __init__r   r   Conv1dlinearr   r   )
r1   in_channelsout_channelskernel_sizerB   rC   rD   rE   r   	__class__s
            r   rG   TDNNLayer.__init__-   s     	i')Q;?a' )_)f)f* '"Q1,x7Gii 'z@r   c                 J    U R                  U5      nU R                  U5      nU$ r/   rI   r   r0   s     r   r2   TDNNLayer.forwardE   s"    KKNNN1r   rP   )r?   r   r?   Fbatchnorm-relur5   r6   r7   r8   rG   r2   r9   __classcell__rM   s   @r   r;   r;   +   s$     ,A0 r   r;   c                   >   ^  \ rS rSr SU 4S jjrS rSS jrSrU =r$ )CAMLayerK   c	           
      J  > [         [        U ]  5         [        R                  " UUUUUUUS9U l        [        R                  " XU-  S5      U l        [        R                  " SS9U l        [        R                  " X-  US5      U l	        [        R                  " 5       U l        g )NrA   r?   Tr   )rF   rW   rG   r   rH   linear_locallinear1r   r   linear2Sigmoidsigmoid)
r1   bn_channelsrK   rL   rB   rC   rD   rE   	reductionrM   s
            r   rG   CAMLayer.__init__M   s     	h&(II yyY.FJGGD)	yy!9<Kzz|r   c                     U R                  U5      nUR                  SSS9U R                  U5      -   nU R                  U R	                  U5      5      nU R                  U R                  U5      5      nX$-  $ )Nr    T)r'   )rZ   r!   seg_poolingr   r[   r^   r\   )r1   r&   ycontextms        r   r2   CAMLayer.forwardd   si    a &&T&*T-=-=a-@@))DLL12LLg./ur   c                 D   US:X  a  [         R                  " XUSS9nO(US:X  a  [         R                  " XUSS9nO[        S5      eUR                  nUR                  S5      R                  " / UQUP76 R                  " / US S QSP76 nUSS UR                  S   24   nU$ )NavgT)rL   rB   	ceil_modemaxzWrong segment pooling type.r    .)F
avg_pool1d
max_pool1dr   shaper%   expandreshape)r1   r&   seg_lenstypesegro   s         r   rc   CAMLayer.seg_poolingk   s    E>,,w$HCe^,,w$HC :;;		mmB&& 0 0'.0078 I9>sIEGI#||#$
r   )r[   r\   rZ   r   r^   )r>   )d   ri   )	r5   r6   r7   r8   rG   r2   rc   r9   rT   rU   s   @r   rW   rW   K   s     $. r   rW   c                   B   ^  \ rS rSr     SU 4S jjrS rS rSrU =r$ )CAMDenseTDNNLayer{   c
           
      (  > [         [        U ]  5         US-  S:X  d   SR                  U5      5       eUS-
  S-  U-  n
Xl        [        X5      U l        [        R                  " XSSS9U l	        [        X5      U l
        [        UUUUU
UUS9U l        g )Nr>   r?   r@   FrE   rA   )rF   rx   rG   r   memory_efficientr   
nonlinear1r   rH   r[   
nonlinear2rW   	cam_layer)r1   rJ   rK   r_   rL   rB   rD   rE   r   r|   rC   rM   s              r   rG   CAMDenseTDNNLayer.__init__}   s     	/1Q!# 	%[%b%b& 	#?q(83 0'
@yy15I'
@!r   c                 B    U R                  U R                  U5      5      $ r/   )r[   r}   r0   s     r   bn_functionCAMDenseTDNNLayer.bn_function   s    ||DOOA.//r   c                     U R                   (       a3  U R                  (       a"  [        R                  " U R                  U5      nOU R	                  U5      nU R                  U R                  U5      5      nU$ r/   )trainingr|   cp
checkpointr   r   r~   r0   s     r   r2   CAMDenseTDNNLayer.forward   sS    ==T22d..2A  #ANN4??1-.r   )r   r[   r|   r}   r~   r?   r?   FrR   F)	r5   r6   r7   r8   rG   r   r2   r9   rT   rU   s   @r   rx   rx   {   s(     ,"'60 r   rx   c                   <   ^  \ rS rSr     SU 4S jjrS rSrU =r$ )CAMDenseTDNNBlock   c                    > [         [        U ]  5         [        U5       H1  n[	        X+U-  -   UUUUUUU	U
S9	nU R                  SUS-   -  U5        M3     g )N)	rJ   rK   r_   rL   rB   rD   rE   r   r|   ztdnnd%dr?   )rF   r   rG   rangerx   r   )r1   
num_layersrJ   rK   r_   rL   rB   rD   rE   r   r|   ilayerrM   s                r   rG   CAMDenseTDNNBlock.__init__   sh     	/1z"A%'l*::)''!%!1	3E OOIQ/7 #r   c                 P    U  H  n[         R                  " X" U5      /SS9nM!     U$ )Nr?   r   )r#   r$   )r1   r&   r   s      r   r2   CAMDenseTDNNBlock.forward   s)    E		1eAh-Q/A r   r4   r   rS   rU   s   @r   r   r      s#     ,"'82 r   r   c                   6   ^  \ rS rSr  SU 4S jjrS rSrU =r$ )TransitLayer   c                    > [         [        U ]  5         [        XA5      U l        [
        R                  " XSUS9U l        g Nr?   r{   )rF   r   rG   r   r   r   rH   rI   r1   rJ   rK   rE   r   rM   s        r   rG   TransitLayer.__init__   s2    
 	lD*,&z?ii14Hr   c                 J    U R                  U5      nU R                  U5      nU$ r/   )r   rI   r0   s     r   r2   TransitLayer.forward   s"    NN1KKNr   rP   )TrR   rS   rU   s   @r   r   r      s    
 ,	I r   r   c                   6   ^  \ rS rSr  SU 4S jjrS rSrU =r$ )
DenseLayer   c                    > [         [        U ]  5         [        R                  " XSUS9U l        [        XB5      U l        g r   )rF   r   rG   r   rH   rI   r   r   r   s        r   rG   DenseLayer.__init__   s2    
 	j$(*ii14H&z@r   c                     [        UR                  5      S:X  a,  U R                  UR                  SS95      R	                  SS9nOU R                  U5      nU R                  U5      nU$ )Nr>   r    r   )lenro   rI   r%   squeezer   r0   s     r   r2   DenseLayer.forward   sY    qww<1AKKBK/088R8@AAANN1r   rP   )FrR   rS   rU   s   @r   r   r      s    
 ,	A r   r   c                   6   ^  \ rS rSrSrSU 4S jjrS rSrU =r$ )BasicResBlock   r?   c           
      :  > [         [        U ]  5         [        R                  " UUSUS4SSS9U l        [        R                  " U5      U l        [        R                  " X"SSSSS9U l        [        R                  " U5      U l	        [        R                  " 5       U l        US:w  d  XR                  U-  :w  ac  [        R                  " [        R                  " UU R                  U-  SUS4SS9[        R                  " U R                  U-  5      5      U l        g g )N   r?   F)rL   rB   rC   rE   )rL   rB   rE   )rF   r   rG   r   Conv2dconv1BatchNorm2dbn1conv2bn2r   shortcut	expansion)r1   	in_planesplanesrB   rM   s       r   rG   BasicResBlock.__init__   s    mT+-YYA;
 >>&)YY!QUL
>>&)Q;)~~'>>MM		NNV+ !"A; 
 "$0G!HJDM ?r   c                     [         R                  " U R                  U R                  U5      5      5      nU R	                  U R                  U5      5      nX R                  U5      -  n[         R                  " U5      nU$ r/   )rl   r   r   r   r   r   r   )r1   r&   outs      r   r2   BasicResBlock.forward  sZ    ffTXXdjjm,-hhtzz#'}}QffSk
r   )r   r   r   r   r   )r?   )	r5   r6   r7   r8   r   rG   r2   r9   rT   rU   s   @r   r   r      s    IJ0 r   r   )r    FTg{Gz?)__doc__r#   torch.nn.functionalr   
functionalrl   torch.utils.checkpointutilsr   r   r   r*   Moduler,   r;   rW   rx   
ModuleListr   r   r   r   r4   r   r   <module>r      s       # # "%		 %		 @-ryy -`&		 &R B299 " ( BII  r   