o
    i	                  
   @   s   d dl Zd dlZd dlmZ d dlmZmZmZm	Z	 d dl
Zd dlmZ de	eef deeeeeeef  f fddZG d	d
 d
ejjZdS )    N)Path)DictListTupleUnion)check_argument_typespathreturnc                 C   s  t  sJ i }t| jdddq}t|dD ]b\}}td| }t|dks/J d| |\	}}}}	}
}}}}|dv s@J |	|g g d	f\}}}|d
krZ||t
|
f||< q||vrc|| |||t
t|	t
t|
fg |f||< qW d   |S 1 sw   Y  |S )zERead a RTTM file

    Note: only support speaker information now
    rzutf-8)encoding   z +	   z!{} does not have exactly 9 fields)SPEAKERENDr   r   N)r   r   open	enumerateresplitrstriplenformatgetintappendfloat)r   dataflinenumlinesps
label_typeutt_idchannelstartend_spk_idspk_list	spk_eventmax_duration r*   G/home/ubuntu/.local/lib/python3.10/site-packages/espnet2/fileio/rttm.pyload_rttm_text
   s.   



r,   c                       sN   e Zd ZdZdef fddZdd Zdd Zd	d
 Zdd Z	dd Z
  ZS )
RttmReadera  Reader class for 'rttm.scp'.

    Examples:
        SPEAKER file1 1 0 1023 <NA> <NA> spk1 <NA>
        SPEAKER file1 2 4000 3023 <NA> <NA> spk2 <NA>
        SPEAKER file1 3 500 4023 <NA> <NA> spk1 <NA>
        END     file1 <NA> 4023 <NA> <NA> <NA> <NA>

        This is an extend version of standard RTTM format for espnet.
        The difference including:
        1. Use sample number instead of absolute time
        2. has a END label to represent the duration of a recording
        3. replace duration (5th field) with end time
        (For standard RTTM,
            see https://catalog.ldc.upenn.edu/docs/LDC2004T12/RTTM-format-v13.pdf)
        ...

        >>> reader = RttmReader('rttm')
        >>> spk_label = reader["file1"]

    fnamec                    s*   t  sJ t   || _t|d| _d S )N)r   )r   super__init__r.   r,   r   )selfr.   	__class__r*   r+   r0   D   s   

zRttmReader.__init__c           	      C   sP   | j | \}}}t|t|f}|D ]\}}}d|||d ||f< q|S )Nr   )r   npzerosr   index)	r1   keyr'   r(   r)   	spk_labelr&   r#   r$   r*   r*   r+   __getitem__N   s
   zRttmReader.__getitem__c                 C   s   |S Nr*   )r1   itemr*   r*   r+   __contains__U   s   zRttmReader.__contains__c                 C   
   t | jS r:   )r   r   r1   r*   r*   r+   __len__X      
zRttmReader.__len__c                 C   r=   r:   )iterr   r>   r*   r*   r+   __iter__[   r@   zRttmReader.__iter__c                 C   s
   | j  S r:   )r   keysr>   r*   r*   r+   rC   ^   r@   zRttmReader.keys)__name__
__module____qualname____doc__strr0   r9   r<   r?   rB   rC   __classcell__r*   r*   r2   r+   r-   -   s    
r-   )collections.abccollectionsr   pathlibr   typingr   r   r   r   numpyr4   	typeguardr   rH   r   r,   abcMappingr-   r*   r*   r*   r+   <module>   s    0#