
    9iK                         S SK r S SKJr  S SK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
g)    N)UniDeepFsmnc                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )ComplexUniDeepFsmn   c                    > [         [        U ]  5         [        XSU5      U l        [        XSU5      U l        [        X#SU5      U l        [        X#SU5      U l        g N   )superr   __init__r   
fsmn_re_L1
fsmn_im_L1
fsmn_re_L2
fsmn_im_L2selfnInnHiddennOut	__class__s       f/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/models/audio/ans/complex_nn.pyr   ComplexUniDeepFsmn.__init__   sQ     $02%cB@%cB@%gRA%gRA    c                 R   UR                  5       u  p#pEn[        R                  " XX4-  XV45      n[        R                  " USS5      nU R	                  US   5      U R                  US   5      -
  nU R	                  US   5      U R                  US   5      -   nU R                  U5      U R                  U5      -
  n	U R                  U5      U R                  U5      -   n
[        R                  " X4SS9n[        R                  " USS5      n[        R                  " XX4XV45      nU$ )z

Args:
    x: torch with shape [batch, channel, feature, sequence, 2], eg: [6, 256, 1, 106, 2]

Returns:
    [batch, feature, sequence, 2], eg: [6, 99, 1024, 2]
      .r   .r   dim)	sizetorchreshape	transposer   r   r   r   stack)r   xbchTdreal_L1imaginary_L1real	imaginaryoutputs               r   forwardComplexUniDeepFsmn.forward   s     aAMM!-.OOAq!$ //!F),tqy/IIqy1DOOAfI4NNw'$//,*GGOOL1DOOG4LL	d.B7 A.v17r   )r   r   r   r      r4   __name__
__module____qualname____firstlineno__r   r1   __static_attributes____classcell__r   s   @r   r   r      s    B r   r   c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )ComplexUniDeepFsmn_L17   c                 r   > [         [        U ]  5         [        XSU5      U l        [        XSU5      U l        g r   )r
   r>   r   r   r   r   r   s       r   r   ComplexUniDeepFsmn_L1.__init__9   s1    #T35%cB@%cB@r   c                    UR                  5       u  p#pEn[        R                  " USS5      n[        R                  " XU-  XCU45      nU R	                  US   5      U R                  US   5      -
  nU R	                  US   5      U R                  US   5      -   n[        R                  " Xx4SS9n	[        R                  " XXTX645      n	[        R                  " U	SS5      n	U	$ )z`

Args:
    x: torch with shape [batch, channel, feature, sequence, 2], eg: [6, 256, 1, 106, 2]
r      r   r   r   r   )r!   r"   r$   r#   r   r   r%   )
r   r&   r'   r(   r)   r*   r+   r.   r/   r0   s
             r   r1   ComplexUniDeepFsmn_L1.forward>   s     aAOOAq!$MM!!eQ1-.qy)DOOAfI,FFOOAfI.61KK	d.B7v17A.r   )r   r   r3   r5   r<   s   @r   r>   r>   7   s    A
 r   r>   c                   <   ^  \ rS rSr     SU 4S jjrS rSrU =r$ )ComplexConv2dS   c	           	         > [         T
U ]  5         [        R                  " UUU4UUUUUS.U	D6U l        [        R                  " UUU4UUUUUS.U	D6U l        g )N)stridepaddingdilationgroupsbias)r
   r   nnConv2dconv_reconv_im)r   
in_channelout_channelkernel_sizerI   rJ   rK   rL   rM   kwargsr   s             r   r   ComplexConv2d.__init__U   s     	 yy	 	 	 yy	 	 	r   c                     U R                  US   5      U R                  US   5      -
  nU R                  US   5      U R                  US   5      -   n[        R                  " X#4SS9nU$ )z?

Args:
    x: torch with shape: [batch,channel,axis1,axis2,2]
r   r   r   r   )rP   rQ   r"   r%   r   r&   r.   r/   r0   s        r   r1   ComplexConv2d.forwardw   sd     ||AfI&ai)@@LL6+dll1V9.EE	d.B7r   )rQ   rP   )r   r   r   r   Tr5   r<   s   @r   rF   rF   S   s$      D	 	r   rF   c                   >   ^  \ rS rSr      SU 4S jjrS rSrU =r$ )ComplexConvTranspose2d   c
                    > [         TU ]  5         [        R                  " UU4UUUUUU	US.U
D6U l        [        R                  " UU4UUUUUU	US.U
D6U l        g )N)rT   rI   rJ   output_paddingrL   rM   rK   )r
   r   rN   ConvTranspose2dtconv_retconv_im)r   rR   rS   rT   rI   rJ   r^   rK   rL   rM   rU   r   s              r   r   ComplexConvTranspose2d.__init__   s     	 **
 $)
 
 **
 $)
 
r   c                     U R                  US   5      U R                  US   5      -
  nU R                  US   5      U R                  US   5      -   n[        R                  " X#4SS9nU$ Nr   r   r   r   )r`   ra   r"   r%   rX   s        r   r1   ComplexConvTranspose2d.forward   sb    }}QvY'$--&	*BBMM!F),t}}QvY/GG	d.B7r   )ra   r`   )r   r   r   r   r   Tr5   r<   s   @r   r[   r[      s'      !#J r   r[   c                   :   ^  \ rS rSr    SU 4S jjrS rSrU =r$ )ComplexBatchNorm2d   c           	         > [         TU ]  5         [        R                  " SUUUUUS.UD6U l        [        R                  " SUUUUUS.UD6U l        g )N)num_featuresmomentumaffineepstrack_running_stats )r
   r   rN   BatchNorm2dbn_rebn_im)r   rj   rm   rk   rl   rn   rU   r   s          r   r   ComplexBatchNorm2d.__init__   sn     	^^ % 3 
 ^^ % 3 
r   c                     U R                  US   5      nU R                  US   5      n[        R                  " X#4SS9nU$ rd   )rq   rr   r"   r%   )r   r&   r.   imagr0   s        r   r1   ComplexBatchNorm2d.forward   s=    zz!F)$zz!F)$d\r2r   )rr   rq   )gh㈵>g?TTr5   r<   s   @r   rg   rg      s      %). r   rg   )r"   torch.nnrN   0modelscope.models.audio.ans.layers.uni_deep_fsmnr   Moduler   r>   rF   r[   rg   ro   r   r   <module>rz      sc      H& &RBII 8-BII -`+RYY +\ r   