
    9ih                         S SK rS SKrS SKJr  S SKJs  Jr  S SKJ	r	  SS jr
 " S S\R                  5      r " S S\R                  5      rg)	    N)
get_windowc                    US:X  d  Uc  [         R                  " U 5      nO[        X0SS9S-  nUn[         R                  R	                  [         R
                  " U5      5      S U  n[         R                  " U5      n[         R                  " U5      n	[         R                  " X/S5      R                  n
U(       a)  [         R                  R                  U
5      R                  n
X-  n
U
S S 2S S S 24   n
[        R                  " U
R                  [         R                  5      5      [        R                  " US S S 2S 4   R                  [         R                  5      5      4$ )NNoneT)fftbinsg      ?   )nponesr   fftrffteyerealimagconcatenateTlinalgpinvtorch
from_numpyastypefloat32)win_lenwin_incfft_lenwin_typeinverswindowNfourier_basisreal_kernelimag_kernelkernels              e/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/models/audio/ans/conv_stft.pyinit_kernelsr#   	   s
   6X-!Ht<cAAFFKKq	*8G4M''-(K''-(K^^[6:<<F'))_FAtQJFFMM"**568H8HtQ}$$RZZ092 2 2    c                   :   ^  \ rS rSr    SU 4S jjrS rSrU =r$ )ConvSTFT   c                 h  > [         [        U ]  5         Uc<  [        S[        R
                  " [        R                  " U5      5      -  5      U l        OX0l        [        XU R                  U5      u  px[        R                  " Xv(       + S9U l        XPl        X l        Xl        U R                  U l        g )N   requires_grad)superr&   __init__intr   ceillog2r   r#   nn	Parameterweightfeature_typestrider   dim)
selfr   r   r   r   r4   fixr!   _	__class__s
            r"   r-   ConvSTFT.__init__    s     	h&(?q"''"'''*:";;<DL"L 4<<J	ll6'C(<<r$   c                    UR                  5       S:X  a  [        R                  " US5      n[        R                  " XR
                  U R                  S9nU R                  S:X  a  U$ U R                   S-  S-   nUS S 2S U2S S 24   nUS S 2US 2S S 24   n[        R                  " US-  US-  -   5      n[        R                  " XT5      nXg4$ )Nr)   r   r5   complex)
r6   r   	unsqueezeFconv1dr3   r5   r4   sqrtatan2)r7   inputsoutputsr6   r   r   magsphases           r"   forwardConvSTFT.forward5   s    ::<1__VQ/F((6;;t{{C	)N((a-!#C1dsdA:&D1cdA:&D::dAga/0DKK+E;r$   )r6   r4   r   r5   r3   r   Nhammingr   T__name__
__module____qualname____firstlineno__r-   rH   __static_attributes____classcell__r:   s   @r"   r&   r&      s     
 #$ * r$   r&   c                   >   ^  \ rS rSr    SU 4S jjrSS jrSrU =r$ )	ConviSTFTF   c                   > [         [        U ]  5         Uc<  [        S[        R
                  " [        R                  " U5      5      -  5      U l        OX0l        [        XU R                  USS9u  px[        R                  " Xv(       + S9U l        XPl        X@l        Xl        X l        X l        U R                  U l        U R%                  SU5        U R%                  S[&        R(                  " U5      S S 2S S S 24   5        g )Nr)   T)r   r*   r   enframe)r,   rU   r-   r.   r   r/   r0   r   r#   r1   r2   r3   r4   r   r   r   r5   r6   register_bufferr   r   )
r7   r   r   r   r   r4   r8   r!   r   r:   s
            r"   r-   ConviSTFT.__init__H   s     	i')?q"''"'''*:";;<DL"L%dllHTCll6'C( <<Xv.Y		'(:1dA:(FGr$   c                    UbJ  U[         R                  " U5      -  nU[         R                  " U5      -  n[         R                  " X4/S5      n[        R
                  " XR                  U R                  S9nU R                  R                  SSUR                  S5      5      S-  n[        R
                  " X`R                  U R                  S9nXWS-   -  nU$ )zp
Args:
    inputs : [B, N+2, T] (complex spec) or [B, N//2+1, T] (mags)
    phase: [B, N//2+1, T] (if not none)
r   r=   r)   g:0yE>)r   cossincatr@   conv_transpose1dr3   r5   r   repeatsizerX   )r7   rD   rG   r   r   rE   tcoffs           r"   rH   ConviSTFT.forward`   s     EIIe,,DEIIe,,DYY|Q/F$$V[[M KKq!V[[_5q8!!!\\$++FD[)r$   )r6   r4   r   r5   r3   r   r   r   rJ   )NrL   rS   s   @r"   rU   rU   F   s!    
 #$H0 r$   rU   )NF)numpyr   r   torch.nnr1   torch.nn.functional
functionalr@   scipy.signalr   r#   Moduler&   rU    r$   r"   <module>rm      s=         #2*%ryy %P+		 +r$   