
    ujh!              
           d dl Z d dlmZ d dlmZmZ d dlZd dlmZ d dl	m
Z
 d dlmZ d dlmZ dd	d
ddg ddddddddg ddddddddg ddddZ G d de
      Zy)    N)Path)TupleUnion)Tensor)Dataset)download_url_to_file)_extract_tarTEDLIUM_release1z:http://www.openslr.org/resources/7/TEDLIUM_release1.tar.gz@30301975fd8c5cac4040c261c0852f57cfa8adbbad2ce78e77e4986957445f27 train)r   testdevzTEDLIUM.150K.dic)folder_in_archiveurlchecksum	data_pathsubsetsupported_subsetsdictTEDLIUM_release2z;http://www.openslr.org/resources/19/TEDLIUM_release2.tar.gz@93281b5fcaaae5c88671c9d000b443cb3c7ea3499ad12010b3934ca41a7b9c58zTEDLIUM.152k.diczTEDLIUM_release-3z9http://www.openslr.org/resources/51/TEDLIUM_release-3.tgz@ad1e454d14d1ad550bc2564c462d87c7a7ec83d4dc2b9210f22ab4973b9eccdbzdata/)release1release2release3c                       e Zd ZdZ	 	 	 	 ddeeef   dededededdfd	Zd
ede	dede
ee	ee	e	e	f   fdZddededede	dee	gf
dZde	de
ee	ee	e	e	f   fdZde	fdZed        Zy)TEDLIUMa  *Tedlium* :cite:`rousseau2012tedlium` dataset (releases 1,2 and 3).

    Args:
        root (str or Path): Path to the directory where the dataset is found or downloaded.
        release (str, optional): Release version.
            Allowed values are ``"release1"``, ``"release2"`` or ``"release3"``.
            (default: ``"release1"``).
        subset (str, optional): The subset of dataset to use. Valid options are ``"train"``, ``"dev"``,
            and ``"test"``. Defaults to ``"train"``.
        download (bool, optional):
            Whether to download the dataset if it is not found at root path. (default: ``False``).
        audio_ext (str, optional): extension for audio file (default: ``".sph"``)
    rootreleaser   download	audio_extreturnNc                 .   || _         |t        j                         v r)t        |   d   }t        |   d   }|r|nt        |   d   }n-t        dj	                  |t        j                                     |t        |   d   vr%t        dj	                  |t        |   d               t        j                  |      }t
        j                  j                  |      }t
        j                  j                  ||      }	|j                  d      d   }|d	k(  r^|d
k(  r1t
        j                  j                  ||t        |   d         | _        nYt
        j                  j                  ||d|      | _        n1t
        j                  j                  ||t        |   d   |      | _        |rnt
        j                  j                  | j                        st
        j                  j                  |	      st        |   d   }
t        ||	|
       t        |	       nBt
        j                  j!                  | j                        st        d| j                   d      g | _        t
        j                  j                  | j                  d      }t%        t        j&                  |            D ]  j)                  d      st
        j                  j                  | j                  d      }t+        |      5 }t-        |j/                               }j1                  dd      | j"                  j3                  fdt5        |      D               d d d         t
        j                  j                  ||t        |   d         | _        d | _        y # 1 sw Y   xY w)Nr   r   r   zFThe release {} does not match any of the supported tedlium releases{} r   zDThe subset {} does not match any of the supported tedlium subsets{} .r   r   r   r   legacyr   )hash_prefixz	The path zT doesn't exist. Please check the ``root`` path or set `download=True` to download itstm.stmr   c              3   &   K   | ]  }|f 
 y w)N ).0linefiles     Y/var/www/html/dev/engine/venv/lib/python3.12/site-packages/torchaudio/datasets/tedlium.py	<genexpr>z#TEDLIUM.__init__.<locals>.<genexpr>~   s     )L44,)Ls   r   )
_ext_audio_RELEASE_CONFIGSkeysRuntimeErrorformatosfspathpathbasenamejoinsplit_pathisdirisfiler   r	   exists	_filelistsortedlistdirendswithopenlen	readlinesreplaceextendrange
_dict_path_phoneme_dict)selfr   r    r   r!   r"   r   r   r9   archiver   stm_pathflr.   s                 @r/   __init__zTEDLIUM.__init__:   s     $&++-- 0 9:M N"7+E2C%V+;G+DX+NF X__$))+  )'23FGGV]]$W-.AB  yy77##C('',,tX.>>#&q)j  WW\\$0ACST[C\]hCij
WW\\$0A8VT
d,=?OPW?XYd?egmnDJ77==,ww~~g./8DH(g8LW%77>>$**-"

| ,[ [  77<<

E22::h/0 	MD}}V$77<<

E4@(^ MqAKKM*A<<3DNN)))L58)LLM M	M '',,t->@PQX@YZ`@ab!M Ms   0ANN	fileidr-   r8   c                 ~   t         j                  j                  |d|      }t        |dz         5 }|j	                         |   }|j                  dd      \  }}}	}
}}}ddd       t         j                  j                  |d|      }| j                  || j                  z   
      \  }}||	fS # 1 sw Y   VxY w)a  Loads a TEDLIUM dataset sample given a file name and corresponding sentence name.

        Args:
            fileid (str): File id to identify both text and audio files corresponding to the sample
            line (int): Line identifier for the sample inside the text file
            path (str): Dataset root path

        Returns:
            (Tensor, int, str, int, int, int):
            ``(waveform, sample_rate, transcript, talk_id, speaker_id, identifier)``
        r(   r)       Nsph)
start_timeend_time)r6   r8   r:   rD   rF   r;   _load_audior1   )rL   rR   r-   r8   transcript_pathrO   
transcripttalk_id_
speaker_idrW   rX   
identifier	wave_pathwaveformsample_rates                   r/   _load_tedlium_itemzTEDLIUM._load_tedlium_item   s     '',,tUF;/F*+ 	lqt,JS]ScScdgijSkPGQ
J*j	l GGLLuf5	 $ 0 0T__1LYcnv 0 w++z7J
SS	l 	ls   .B33B<rW   rX   rb   c                     t        t        |      |z        }t        t        |      |z        }|||z
  d}t        j                  |fi |S )a"  Default load function used in TEDLIUM dataset, you can overwrite this function to customize functionality
        and load individual sentences from a full ted audio talk file.

        Args:
            path (str): Path to audio file
            start_time (int): Time in seconds where the sample sentence stars
            end_time (int): Time in seconds where the sample sentence finishes
            sample_rate (float, optional): Sampling rate

        Returns:
            [Tensor, int]: Audio tensor representation and sample rate
        )frame_offset
num_frames)intfloat
torchaudioload)rL   r8   rW   rX   rb   kwargss         r/   rY   zTEDLIUM._load_audio   sN     z*[89
uX45",Hz<QRt.v..    nc                 `    | j                   |   \  }}| j                  ||| j                        S )a  Load the n-th sample from the dataset.

        Args:
            n (int): The index of the sample to be loaded

        Returns:
            Tuple of the following items;

            Tensor:
                Waveform
            int:
                Sample rate
            str:
                Transcript
            int:
                Talk ID
            int:
                Speaker ID
            int:
                Identifier
        )r@   rc   r<   )rL   rm   rR   r-   s       r/   __getitem__zTEDLIUM.__getitem__   s/    , ~~a(&&vtTZZ@@rl   c                 ,    t        | j                        S )zTEDLIUM dataset custom function overwritting len default behaviour.

        Returns:
            int: TEDLIUM dataset length
        )rE   r@   )rL   s    r/   __len__zTEDLIUM.__len__   s     4>>""rl   c                 Z   | j                   szi | _         t        | j                  dd      5 }|j                         D ]>  }|j	                         j                         }t        |dd       | j                   |d   <   @ 	 ddd       | j                   j                         S # 1 sw Y   #xY w)zdict[str, tuple[str]]: Phonemes. Mapping from word to tuple of phonemes.
        Note that some words have empty phonemes.
        rzutf-8)encoding   Nr   )rK   rD   rJ   rF   stripr;   tuplecopy)rL   rO   r-   contents       r/   phoneme_dictzTEDLIUM.phoneme_dict   s     !!!#DdoosW= HKKM HD"jjl002G5:712;5GD&&wqz2HH !!&&((	H Hs   AB!!B*)r   r   Fz.sph)i>  )__name__
__module____qualname____doc__r   strr   boolrQ   rg   r   r   rc   rh   rY   ro   rq   propertyrz   r+   rl   r/   r   r   +   s   " "G"CIG" G" 	G"
 G" G" 
G"RT TC Ts TuVUXZ]_bdgilMlGm T,/ / /% /VY /gmorfs /(AS AU63S#s+J%K A2# # ) )rl   r   )r6   pathlibr   typingr   r   ri   torchr   torch.utils.datar   torchaudio._internalr   torchaudio.datasets.utilsr	   r2   r   r+   rl   r/   <module>r      s    	     $ 5 2
 0KV5" 0LV5" 1JV5"' >o)g o)rl   