
    j	                         S SK r S SKJr  S SKJs  Jr  SrSrSrSr	Sr
Sr " S S\R                  5      r " S	 S
\R                  5      rg)    N   i @  i      )      	   c                   :   ^  \ rS rSrS\S\4U 4S jjrS rSrU =r$ )ResBlock   ddilationc                    > [         TU ]  5         [        R                  " SU5      U l        [        R
                  " XSX"S9U l        [        R
                  " XS5      U l        g )Nr   r   )paddingr   )super__init__nn	GroupNormnormConv1dconv1conv2)selfr   r   	__class__s      5/mnt/workspace/git/minimaxmusic.cpp/training/model.pyr   ResBlock.__init__   sF    \\!Q'	YYqQL
YYqQ'
    c                     U R                  [        R                  " U R                  U5      5      5      nXR	                  [        R                  " U5      5      -   $ N)r   Fgelur   r   )r   xhs      r   forwardResBlock.forward   s;    JJqvvdiil+,::affQi(((r   )r   r   r   	__name__
__module____qualname____firstlineno__intr   r"   __static_attributes____classcell__r   s   @r   r	   r	      s     (# ( () )r   r	   c            	       F   ^  \ rS rSrS	S\S\S\S\4U 4S jjjrS rSrU =r$ )

RVQEncoder$   d_modeln_layersn_headsff_multc           
        >^ [         TU ]  5         [        R                  " [        TSSS9U l        [        R                  " U4S j[         5       5      U l        [        R                  " [        R                  " S[        T5      5      U l        [        R                  " TUTU-  SSSSS	9n[        R                  " XR5      U l        [        R"                  " T5      U l        [        R&                  " T[(        5      U l        [        R                  " U4S
 j[-        [.        5       5       5      U l        [        R2                  R5                  U R                  SS9  g )Nr   r   )r   c              3   <   >#    U  H  n[        TU5      v   M     g 7fr   )r	   ).0dilr0   s     r   	<genexpr>&RVQEncoder.__init__.<locals>.<genexpr>(   s     $QyXgs%;%;ys   r   g        r   T)dropout
activationbatch_first
norm_firstc              3   Z   >#    U  H   n[         R                  " T[        5      v   M"     g 7fr   )r   LinearACOUSTIC_CLASSES)r6   _r0   s     r   r8   r9   /   s#     (mWlRS7<L)M)MWls   (+g{Gz?)std)r   r   r   r   LATENT_CHANNELSconv_in
ModuleList	DILATIONSblocks	ParametertorchzerosFRAMES_PER_WINposTransformerEncoderLayerTransformerEncodertransformer	LayerNormnorm_outr?   SEMANTIC_CLASSEShead_semrangeACOUSTIC_HEADSheads_acinitnormal_)r   r0   r1   r2   r3   layerr   s    `    r   r   RVQEncoder.__init__%   s    yy'1aH}}$Qy$QQ||EKK>7$KL**7GWw=NX[6<$[_a00A<<099W.>?==(mW\]kWl(mm
d+r   c                    U R                  UR                  SS5      5      nU R                   H  nU" U5      nM     [        R                  " X#R                  SS5      5      U R
                  -   nU R                  U R                  U5      5      nU R                  U5      U R                   Vs/ s H
  oU" U5      PM     sn4$ s  snf )Nr      )
rD   	transposerG   rI   bmmrL   rQ   rO   rS   rV   )r   latentspoolr    blockheads         r   r"   RVQEncoder.forward2   s     LL**1a01[[EaA !IIdKK1-.9MM$**1-.}}Qdmm!Dmd$q'm!DDD!Ds   .C)rG   rD   rS   rV   rQ   rL   rO   )i      rd      r$   r,   s   @r   r.   r.   $   s6    , ,S ,s ,Y\ , ,E Er   r.   )rI   torch.nnr   torch.nn.functional
functionalr   rC   rK   rR   r@   rU   rF   Moduler	   r.    r   r   <module>rk      sU         		)ryy 	)E Er   