o
    %i                     @   sJ   d Z ddlZddlZddlmZmZ G dd deZdd ZdddZdS )zDataset for DAC-based LeWM TTS.    N)Dataset
DataLoaderc                   @   s&   e Zd Zd	ddZdd Zdd ZdS )

TTSDataset  c                    sj   t |ddd}t|| _W d    n1 sw   Y   fdd| jD | _tdt| j d d S )Nrutf-8)encodingc                    s   g | ]
}|d   kr|qS )latent_frames ).0emax_latent_framesr
   #/home/ubuntu/lewm-tts/v2/dataset.py
<listcomp>   s    z'TTSDataset.__init__.<locals>.<listcomp>z	Dataset: z samples)openjsonloadmanifestprintlen)selfmanifest_pathr   fr
   r   r   __init__	   s
   zTTSDataset.__init__c                 C   s
   t | jS )N)r   r   )r   r
   r
   r   __len__   s   
zTTSDataset.__len__c                 C   sf   | j | }tj|d dd }|dd}t|d d}tj|tjd}|||j	d t
|d	S )
Nlatent_pathT)weights_onlyr      textr   dtype)latenttext_tokensr	   text_len)r   torchr   float	transposelistencodetensorlongshaper   )r   idxentryr"   tokensr#   r
   r
   r   __getitem__   s   
zTTSDataset.__getitem__N)r   )__name__
__module____qualname__r   r   r0   r
   r
   r
   r   r      s    
r   c                 C   s   t dd | D }t dd | D }| d d jd }t| }t|||}tj||tjd}tj||tjd}tj||tjd}t| D ]0\}	}
|
d }|
d	 }|
d ||	d |f< |
d
 ||	d |f< d||	d |f< d||	d |f< qE||||dS )Nc                 s       | ]}|d  V  qdS )r	   Nr
   r   sr
   r
   r   	<genexpr>!       zcollate_fn.<locals>.<genexpr>c                 s   r4   )r$   Nr
   r5   r
   r
   r   r7   "   r8   r   r"   r   r    r	   r$   r#   F)r"   r#   latent_mask	text_mask)	maxr,   r   r%   zerosr+   onesbool	enumerate)batchmax_latmax_textdac_dimB
lat_paddedtext_paddedlat_maskr:   ir6   t_latt_textr
   r
   r   
collate_fn    s(   rK         Tc              	   C   s&   t | }t||||tddd}||fS )NT)
batch_sizeshufflenum_workersrK   
pin_memory	drop_last)r   r   rK   )r   rN   rP   rO   datasetloaderr
   r
   r   build_dataloader;   s   rU   )rL   rM   T)	__doc__r   r%   torch.utils.datar   r   r   rK   rU   r
   r
   r
   r   <module>   s    