o
    i                     @   sX   d dl mZmZmZmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZ G dd deZdS )    )IteratorListSequenceTupleUnion)check_argument_types)load_num_sequence_textread_2column_text)
AbsSamplerc                   @   s   e Zd Z					ddedeeedf ee f d	ee d
ededede	defddZ
dd Zdd Zdeeedf  fddZdS )FoldedBatchSampler   
descending	ascendingFN
batch_sizeshape_files.fold_lengthsmin_batch_sizesort_in_batch
sort_batch	drop_lastutt2category_filec	                    sr  t  sJ |dksJ |dkr|dkrtd| |dkr)|dkr)td| || _|| _|| _|| _|| _dd |D }	|	d  t||	D ]\}
}t|t kr`t	d|
 d	|d  qHt
  fd
dd}t|dkrzt	d|d  i }|d urt|}t|t krt	d| d	|d  |D ]|| g  qn||d< g | _| D ]\}}|}d}g }	 || tfddt|	|D }t|t|d|  }| jr|| t|krt| jdkrntt|| |}|| ||7 }|t|kr
nqt|dkrt	dt|dkr>|d |k r>t|dD ]}||t|  d   d7  < q+| jsXt|t|ksXJ t| d	t| g }d}|D ]:}t||| ksmJ d||||  }||7 }|dkr|  n|dkrntd| |t| q^|dkrn|dkr|  ntd| | j| qd S )Nr   r   r   z,sort_batch must be ascending or descending: z/sort_in_batch must be ascending or descending: c                 S   s   g | ]}t |d dqS )csv_int)loader_type)r   ).0s r   Y/home/ubuntu/.local/lib/python3.10/site-packages/espnet2/samplers/folded_batch_sampler.py
<listcomp>)   s    z/FoldedBatchSampler.__init__.<locals>.<listcomp>zkeys are mismatched between z != c                    s    |  d S )Nr   r   k)first_utt2shaper   r   <lambda>6   s    z-FoldedBatchSampler.__init__.<locals>.<lambda>)keyz0 lines found: default_categoryTc                 3   s(    | ]\}}t |  d  | V  qdS )r   N)int)r   dmr   r   r   	<genexpr>O   s   & z.FoldedBatchSampler.__init__.<locals>.<genexpr>r   z	0 batches   Bug)r   
ValueErrorr   r   r   r   r   zipsetRuntimeErrorsortedlenr	   
setdefaultappend
batch_listitemsmaxr$   minrangepopsumreversetupleextend)selfr   r   r   r   r   r   r   r   
utt2shapesr   r%   keyscategory2uttutt2categoryvcategory_keysstartbatch_sizesfactorbsicur_batch_listminibatch_keysr   )r    r   r   __init__
   s   

"






zFoldedBatchSampler.__init__c                 C   s8   | j j dt|  d| j d| j d| j d| j dS )Nz	(N-batch=z, batch_size=z, shape_files=z, sort_in_batch=z, sort_batch=))	__class____name__r0   r   r   r   r   r=   r   r   r   __repr__   s   
zFoldedBatchSampler.__repr__c                 C   
   t | jS N)r0   r3   rO   r   r   r   __len__      
zFoldedBatchSampler.__len__returnc                 C   rQ   rR   )iterr3   rO   r   r   r   __iter__   rT   zFoldedBatchSampler.__iter__)r   r   r   FN)rN   
__module____qualname__r$   r   r   strr   r   boolrK   rP   rS   r   rW   r   r   r   r   r   	   s4    	

r   N)typingr   r   r   r   r   	typeguardr   espnet2.fileio.read_textr   r	   espnet2.samplers.abs_samplerr
   r   r   r   r   r   <module>   s
    