o
    i                     @   sF   d dl Z d dlmZ ddlmZmZ d dlmZ G dd dejZ	dS )    N   )MiniCPMModelMiniCPM4Config)	rearrangec                       s0   e Zd Zddedef fddZdd Z  ZS )	VoxCPMLocEnc@   config	input_dimc                    s^   t    || _ttddd|j| _tj	||jdd| _
|jdks(J dt|| _d S )N   T)biasr   z&vocab_size must be 0 for local encoder)super__init__r   nn	Parametertorchrandnhidden_sizespecial_tokenLinearin_proj
vocab_sizer   encoder)selfr   r	   	__class__ W/home/ubuntu/.local/lib/python3.10/site-packages/voxcpm/modules/locenc/local_encoder.pyr      s   
zVoxCPMLocEnc.__init__c           
      C   s|   |j \}}}}| |}| j||dd}tj||gdd}t|d}| j|dd\}}|ddd	ddf }	t|	d
|dS )z!
        x: [B, T, P, D]
        r
   r   )dimzb t p c -> (b t) p cF)	is_causalNr   z(b t) c -> b t c)b)shaper   r   expandr   catr   r   )
r   xBTPDspecial_tokensoutputs_
cls_outputr   r   r   forward   s   

zVoxCPMLocEnc.forward)r   )__name__
__module____qualname__r   intr   r-   __classcell__r   r   r   r   r      s    	r   )
r   torch.nnr   minicpm4r   r   einopsr   Moduler   r   r   r   r   <module>   s
    