U
    ,:%e%_                    @   s  d dl Z d dlmZ d dlmZ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dddddg
Zddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3g"Zd4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddÐdĐdŐdƐdǐdȐdɐdʐdːd̐d͐dΐdϐdАdѐdҐdӐdԐdՐd֐dאdؐdِdڐdېdܐdݐdސdߐddddddddddddddddddddddddddddddddd ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddÐdĐdŐdƐdǐdȐdɐdʐdːd̐d͐dΐdϐdАdѐdҐdӐdԐdՐd֐dאdؐdِdڐdېdܐdݐdސdߐdddddddddddddddgZdddddddddddddddddd ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddgZdZdZddiZeeeee	ef dddZG dd deZdS (      N)Path)OptionalTupleUnion)Tensor)Dataset)download_url_to_file)_extract_tarZbluesZ	classicalZcountrydiscoZhiphopZjazzZmetalpopZreggaeZrockzblues.00012zblues.00013zblues.00014zblues.00015zblues.00016zblues.00017zblues.00018zblues.00019zblues.00020zblues.00021zblues.00022zblues.00023zblues.00024zblues.00025zblues.00026zblues.00027zblues.00028zblues.00061zblues.00062zblues.00063zblues.00064zblues.00065zblues.00066zblues.00067zblues.00068zblues.00069zblues.00070zblues.00071zblues.00072zblues.00098zblues.00099zclassical.00011zclassical.00012zclassical.00013zclassical.00014zclassical.00015zclassical.00016zclassical.00017zclassical.00018zclassical.00019zclassical.00020zclassical.00021zclassical.00022zclassical.00023zclassical.00024zclassical.00025zclassical.00026zclassical.00027zclassical.00028zclassical.00029zclassical.00034zclassical.00035zclassical.00036zclassical.00037zclassical.00038zclassical.00039zclassical.00040zclassical.00041zclassical.00049zclassical.00077zclassical.00078zclassical.00079zcountry.00030zcountry.00031zcountry.00032zcountry.00033zcountry.00034zcountry.00035zcountry.00036zcountry.00037zcountry.00038zcountry.00039zcountry.00040zcountry.00043zcountry.00044zcountry.00046zcountry.00047zcountry.00048zcountry.00050zcountry.00051zcountry.00053zcountry.00054zcountry.00055zcountry.00056zcountry.00057zcountry.00058zcountry.00059zcountry.00060zcountry.00061zcountry.00062zcountry.00063zcountry.00064zdisco.00001zdisco.00021zdisco.00058zdisco.00062zdisco.00063zdisco.00064zdisco.00065zdisco.00066zdisco.00069zdisco.00076zdisco.00077zdisco.00078zdisco.00079zdisco.00080zdisco.00081zdisco.00082zdisco.00083zdisco.00084zdisco.00085zdisco.00086zdisco.00087zdisco.00088zdisco.00091zdisco.00092zdisco.00093zdisco.00094zdisco.00096zdisco.00097zdisco.00099zhiphop.00000zhiphop.00026zhiphop.00027zhiphop.00030zhiphop.00040zhiphop.00043zhiphop.00044zhiphop.00045zhiphop.00051zhiphop.00052zhiphop.00053zhiphop.00054zhiphop.00062zhiphop.00063zhiphop.00064zhiphop.00065zhiphop.00066zhiphop.00067zhiphop.00068zhiphop.00069zhiphop.00070zhiphop.00071zhiphop.00072zhiphop.00073zhiphop.00074zhiphop.00075zhiphop.00099z
jazz.00073z
jazz.00074z
jazz.00075z
jazz.00076z
jazz.00077z
jazz.00078z
jazz.00079z
jazz.00080z
jazz.00081z
jazz.00082z
jazz.00083z
jazz.00084z
jazz.00085z
jazz.00086z
jazz.00087z
jazz.00088z
jazz.00089z
jazz.00090z
jazz.00091z
jazz.00092z
jazz.00093z
jazz.00094z
jazz.00095z
jazz.00096z
jazz.00097z
jazz.00098z
jazz.00099zmetal.00012zmetal.00013zmetal.00014zmetal.00015zmetal.00022zmetal.00023zmetal.00025zmetal.00026zmetal.00027zmetal.00028zmetal.00029zmetal.00030zmetal.00031zmetal.00032zmetal.00033zmetal.00038zmetal.00039zmetal.00067zmetal.00070zmetal.00073zmetal.00074zmetal.00075zmetal.00078zmetal.00083zmetal.00085zmetal.00087zmetal.00088z	pop.00000z	pop.00001z	pop.00013z	pop.00014z	pop.00043z	pop.00063z	pop.00064z	pop.00065z	pop.00066z	pop.00069z	pop.00070z	pop.00071z	pop.00072z	pop.00073z	pop.00074z	pop.00075z	pop.00076z	pop.00077z	pop.00078z	pop.00079z	pop.00082z	pop.00088z	pop.00089z	pop.00090z	pop.00091z	pop.00092z	pop.00093z	pop.00094z	pop.00095z	pop.00096zreggae.00034zreggae.00035zreggae.00036zreggae.00037zreggae.00038zreggae.00039zreggae.00040zreggae.00046zreggae.00047zreggae.00048zreggae.00052zreggae.00053zreggae.00064zreggae.00065zreggae.00066zreggae.00067zreggae.00068zreggae.00071zreggae.00079zreggae.00082zreggae.00083zreggae.00084zreggae.00087zreggae.00088zreggae.00089zreggae.00090z
rock.00010z
rock.00011z
rock.00012z
rock.00013z
rock.00014z
rock.00015z
rock.00027z
rock.00028z
rock.00029z
rock.00030z
rock.00031z
rock.00032z
rock.00033z
rock.00034z
rock.00035z
rock.00036z
rock.00037z
rock.00039z
rock.00040z
rock.00041z
rock.00042z
rock.00043z
rock.00044z
rock.00045z
rock.00046z
rock.00047z
rock.00048z
rock.00086z
rock.00087z
rock.00088z
rock.00089z
rock.00090zblues.00029zblues.00030zblues.00031zblues.00032zblues.00033zblues.00034zblues.00035zblues.00036zblues.00037zblues.00038zblues.00039zblues.00040zblues.00041zblues.00042zblues.00043zblues.00044zblues.00045zblues.00046zblues.00047zblues.00048zblues.00049zblues.00073zblues.00074zblues.00075zblues.00076zblues.00077zblues.00078zblues.00079zblues.00080zblues.00081zblues.00082zblues.00083zblues.00084zblues.00085zblues.00086zblues.00087zblues.00088zblues.00089zblues.00090zblues.00091zblues.00092zblues.00093zblues.00094zblues.00095zblues.00096zblues.00097zclassical.00030zclassical.00031zclassical.00032zclassical.00033zclassical.00043zclassical.00044zclassical.00045zclassical.00046zclassical.00047zclassical.00048zclassical.00050zclassical.00051zclassical.00052zclassical.00053zclassical.00054zclassical.00055zclassical.00056zclassical.00057zclassical.00058zclassical.00059zclassical.00060zclassical.00061zclassical.00062zclassical.00063zclassical.00064zclassical.00065zclassical.00066zclassical.00067zclassical.00080zclassical.00081zclassical.00082zclassical.00083zclassical.00084zclassical.00085zclassical.00086zclassical.00087zclassical.00088zclassical.00089zclassical.00090zclassical.00091zclassical.00092zclassical.00093zclassical.00094zclassical.00095zclassical.00096zclassical.00097zclassical.00098zclassical.00099zcountry.00019zcountry.00020zcountry.00021zcountry.00022zcountry.00023zcountry.00024zcountry.00025zcountry.00026zcountry.00028zcountry.00029zcountry.00065zcountry.00066zcountry.00067zcountry.00068zcountry.00069zcountry.00070zcountry.00071zcountry.00072zcountry.00073zcountry.00074zcountry.00075zcountry.00076zcountry.00077zcountry.00078zcountry.00079zcountry.00080zcountry.00081zcountry.00082zcountry.00083zcountry.00084zcountry.00085zcountry.00086zcountry.00087zcountry.00088zcountry.00089zcountry.00090zcountry.00091zcountry.00092zcountry.00093zcountry.00094zcountry.00095zcountry.00096zcountry.00097zcountry.00098zcountry.00099zdisco.00005zdisco.00015zdisco.00016zdisco.00017zdisco.00018zdisco.00019zdisco.00020zdisco.00022zdisco.00023zdisco.00024zdisco.00025zdisco.00026zdisco.00027zdisco.00028zdisco.00029zdisco.00030zdisco.00031zdisco.00032zdisco.00033zdisco.00034zdisco.00035zdisco.00036zdisco.00037zdisco.00039zdisco.00040zdisco.00041zdisco.00042zdisco.00043zdisco.00044zdisco.00045zdisco.00047zdisco.00049zdisco.00053zdisco.00054zdisco.00056zdisco.00057zdisco.00059zdisco.00061zdisco.00070zdisco.00073zdisco.00074zdisco.00089zhiphop.00002zhiphop.00003zhiphop.00004zhiphop.00005zhiphop.00006zhiphop.00007zhiphop.00008zhiphop.00009zhiphop.00010zhiphop.00011zhiphop.00012zhiphop.00013zhiphop.00014zhiphop.00015zhiphop.00016zhiphop.00017zhiphop.00018zhiphop.00019zhiphop.00020zhiphop.00021zhiphop.00022zhiphop.00023zhiphop.00024zhiphop.00025zhiphop.00028zhiphop.00029zhiphop.00031zhiphop.00032zhiphop.00033zhiphop.00034zhiphop.00035zhiphop.00036zhiphop.00037zhiphop.00038zhiphop.00041zhiphop.00042zhiphop.00055zhiphop.00056zhiphop.00057zhiphop.00058zhiphop.00059zhiphop.00060zhiphop.00061zhiphop.00077zhiphop.00078zhiphop.00079zhiphop.00080z
jazz.00000z
jazz.00001z
jazz.00011z
jazz.00012z
jazz.00013z
jazz.00014z
jazz.00015z
jazz.00016z
jazz.00017z
jazz.00018z
jazz.00019z
jazz.00020z
jazz.00021z
jazz.00022z
jazz.00023z
jazz.00024z
jazz.00041z
jazz.00047z
jazz.00048z
jazz.00049z
jazz.00050z
jazz.00051z
jazz.00052z
jazz.00053z
jazz.00054z
jazz.00055z
jazz.00056z
jazz.00057z
jazz.00058z
jazz.00059z
jazz.00060z
jazz.00061z
jazz.00062z
jazz.00063z
jazz.00064z
jazz.00065z
jazz.00066z
jazz.00067z
jazz.00068z
jazz.00069z
jazz.00070z
jazz.00071z
jazz.00072zmetal.00002zmetal.00003zmetal.00005zmetal.00021zmetal.00024zmetal.00035zmetal.00046zmetal.00047zmetal.00048zmetal.00049zmetal.00050zmetal.00051zmetal.00052zmetal.00053zmetal.00054zmetal.00055zmetal.00056zmetal.00057zmetal.00059zmetal.00060zmetal.00061zmetal.00062zmetal.00063zmetal.00064zmetal.00065zmetal.00066zmetal.00069zmetal.00071zmetal.00072zmetal.00079zmetal.00080zmetal.00084zmetal.00086zmetal.00089zmetal.00090zmetal.00091zmetal.00092zmetal.00093zmetal.00094zmetal.00095zmetal.00096zmetal.00097zmetal.00098zmetal.00099z	pop.00002z	pop.00003z	pop.00004z	pop.00005z	pop.00006z	pop.00007z	pop.00008z	pop.00009z	pop.00011z	pop.00012z	pop.00016z	pop.00017z	pop.00018z	pop.00019z	pop.00020z	pop.00023z	pop.00024z	pop.00025z	pop.00026z	pop.00027z	pop.00028z	pop.00029z	pop.00031z	pop.00032z	pop.00033z	pop.00034z	pop.00035z	pop.00036z	pop.00038z	pop.00039z	pop.00040z	pop.00041z	pop.00042z	pop.00044z	pop.00046z	pop.00049z	pop.00050z	pop.00080z	pop.00097z	pop.00098z	pop.00099zreggae.00000zreggae.00001zreggae.00002zreggae.00004zreggae.00006zreggae.00009zreggae.00011zreggae.00012zreggae.00014zreggae.00015zreggae.00016zreggae.00017zreggae.00018zreggae.00019zreggae.00020zreggae.00021zreggae.00022zreggae.00023zreggae.00024zreggae.00025zreggae.00026zreggae.00027zreggae.00028zreggae.00029zreggae.00030zreggae.00031zreggae.00032zreggae.00042zreggae.00043zreggae.00044zreggae.00045zreggae.00049zreggae.00050zreggae.00051zreggae.00054zreggae.00055zreggae.00056zreggae.00057zreggae.00058zreggae.00059zreggae.00060zreggae.00063zreggae.00069z
rock.00000z
rock.00001z
rock.00002z
rock.00003z
rock.00004z
rock.00005z
rock.00006z
rock.00007z
rock.00008z
rock.00009z
rock.00016z
rock.00017z
rock.00018z
rock.00019z
rock.00020z
rock.00021z
rock.00022z
rock.00023z
rock.00024z
rock.00025z
rock.00026z
rock.00057z
rock.00058z
rock.00059z
rock.00060z
rock.00061z
rock.00062z
rock.00063z
rock.00064z
rock.00065z
rock.00066z
rock.00067z
rock.00068z
rock.00069z
rock.00070z
rock.00091z
rock.00092z
rock.00093z
rock.00094z
rock.00095z
rock.00096z
rock.00097z
rock.00098z
rock.00099zblues.00000zblues.00001zblues.00002zblues.00003zblues.00004zblues.00005zblues.00006zblues.00007zblues.00008zblues.00009zblues.00010zblues.00011zblues.00050zblues.00051zblues.00052zblues.00053zblues.00054zblues.00055zblues.00056zblues.00057zblues.00058zblues.00059zblues.00060zclassical.00000zclassical.00001zclassical.00002zclassical.00003zclassical.00004zclassical.00005zclassical.00006zclassical.00007zclassical.00008zclassical.00009zclassical.00010zclassical.00068zclassical.00069zclassical.00070zclassical.00071zclassical.00072zclassical.00073zclassical.00074zclassical.00075zclassical.00076zcountry.00000zcountry.00001zcountry.00002zcountry.00003zcountry.00004zcountry.00005zcountry.00006zcountry.00007zcountry.00009zcountry.00010zcountry.00011zcountry.00012zcountry.00013zcountry.00014zcountry.00015zcountry.00016zcountry.00017zcountry.00018zcountry.00027zcountry.00041zcountry.00042zcountry.00045zcountry.00049zdisco.00000zdisco.00002zdisco.00003zdisco.00004zdisco.00006zdisco.00007zdisco.00008zdisco.00009zdisco.00010zdisco.00011zdisco.00012zdisco.00013zdisco.00014zdisco.00046zdisco.00048zdisco.00052zdisco.00067zdisco.00068zdisco.00072zdisco.00075zdisco.00090zdisco.00095zhiphop.00081zhiphop.00082zhiphop.00083zhiphop.00084zhiphop.00085zhiphop.00086zhiphop.00087zhiphop.00088zhiphop.00089zhiphop.00090zhiphop.00091zhiphop.00092zhiphop.00093zhiphop.00094zhiphop.00095zhiphop.00096zhiphop.00097zhiphop.00098z
jazz.00002z
jazz.00003z
jazz.00004z
jazz.00005z
jazz.00006z
jazz.00007z
jazz.00008z
jazz.00009z
jazz.00010z
jazz.00025z
jazz.00026z
jazz.00027z
jazz.00028z
jazz.00029z
jazz.00030z
jazz.00031z
jazz.00032zmetal.00000zmetal.00001zmetal.00006zmetal.00007zmetal.00008zmetal.00009zmetal.00010zmetal.00011zmetal.00016zmetal.00017zmetal.00018zmetal.00019zmetal.00020zmetal.00036zmetal.00037zmetal.00068zmetal.00076zmetal.00077zmetal.00081zmetal.00082z	pop.00010z	pop.00053z	pop.00055z	pop.00058z	pop.00059z	pop.00060z	pop.00061z	pop.00062z	pop.00081z	pop.00083z	pop.00084z	pop.00085z	pop.00086zreggae.00061zreggae.00062zreggae.00070zreggae.00072zreggae.00074zreggae.00076zreggae.00077zreggae.00078zreggae.00085zreggae.00092zreggae.00093zreggae.00094zreggae.00095zreggae.00096zreggae.00097zreggae.00098zreggae.00099z
rock.00038z
rock.00049z
rock.00050z
rock.00051z
rock.00052z
rock.00053z
rock.00054z
rock.00055z
rock.00056z
rock.00071z
rock.00072z
rock.00073z
rock.00074z
rock.00075z
rock.00076z
rock.00077z
rock.00078z
rock.00079z
rock.00080z
rock.00081z
rock.00082z
rock.00083z
rock.00084z
rock.00085z+http://opihi.cs.uvic.ca/sound/genres.tar.gzZgenresZ@24347e0223d2ba798e0a558c4c172d9d4a19c00bb7963fe055d183dadb4ef2c6)fileidpath	ext_audioreturnc                 C   s:   |  d\}}tj||| | }t|\}}|||fS )z
    Loads a file from the dataset and returns the raw waveform
    as a Torch Tensor, its sample rate as an integer, and its
    genre as a string.
    .)splitosr   join
torchaudioload)r   r   r   label_Z
file_audiowaveformsample_rate r   X/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/torchaudio/datasets/gtzan.pyload_gtzan_item  s    r   c                   @   sj   e Zd ZdZdZeeddfeee	f eee
ee ddddZeeeeef dd	d
ZedddZdS )GTZANa$  *GTZAN* :cite:`tzanetakis_essl_cook_2001` dataset.

    Note:
        Please see http://marsyas.info/downloads/datasets.html if you are planning to use
        this dataset to publish results.

    Note:
        As of October 2022, the download link is not currently working. Setting ``download=True``
        in GTZAN dataset will result in a URL connection error.

    Args:
        root (str or Path): Path to the directory where the dataset is found or downloaded.
        url (str, optional): The URL to download the dataset from.
            (default: ``"http://opihi.cs.uvic.ca/sound/genres.tar.gz"``)
        folder_in_archive (str, optional): The top-level directory of the dataset.
        download (bool, optional):
            Whether to download the dataset if it is not found at root path. (default: ``False``).
        subset (str or None, optional): Which subset of the dataset to use.
            One of ``"training"``, ``"validation"``, ``"testing"`` or ``None``.
            If ``None``, the entire dataset is used. (default: ``None``).
    .wavFN)rooturlfolder_in_archivedownloadsubsetr   c                 C   s  t |}|| _|| _|| _|| _|| _|d k	r@|dkr@tdt j	|}t j
||}t j
||| _|rt j| jst j|st|d }t|||d t| t j| jstd| jd krg | _t j| j}tD ]}t j
||}	t j|	sqt |	}
|
  |
D ]j}t j|\}}| dkrd|kr|d\}}|tkrt|dkr| r| j| qqn:| jdkrt| _n&| jd	krt | _n| jd
krt!| _d S )N)training
validationtestingzSWhen `subset` is not None, it must be one of ['training', 'validation', 'testing'].)Zhash_prefixz=Dataset not found. Please use `download=True` to download it.r   r      r$   r%   r&   )"r   fspathr   r    r!   r"   r#   
ValueErrorr   basenamer   _pathisdirisfile
_CHECKSUMSgetr   r	   RuntimeError_walker
expandusergtzan_genresexistslistdirsortsplitextlowerr   lenisdigitappendfiltered_trainfiltered_validfiltered_test)selfr   r    r!   r"   r#   archiveZchecksum	directoryZfulldirZsongs_in_genrefnamenameextZgenrenumr   r   r   __init__  sP    

"zGTZAN.__init__)nr   c                 C   s.   | j | }t|| j| j}|\}}}|||fS )a6  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:
                Label
        )r1   r   r+   
_ext_audio)r?   rG   r   itemr   r   r   r   r   r   __getitem__H  s    

zGTZAN.__getitem__)r   c                 C   s
   t | jS )N)r9   r1   )r?   r   r   r   __len__]  s    zGTZAN.__len__)__name__
__module____qualname____doc__rH   URLFOLDER_IN_ARCHIVEr   strr   boolr   rF   intr   r   rJ   rK   r   r   r   r   r     s    
Ir   )r   pathlibr   typingr   r   r   r   Ztorchr   Ztorch.utils.datar   Ztorchaudio._internalr   Ztorchaudio.datasets.utilsr	   r3   r>   r<   r=   rP   rQ   r.   rR   r   r   r   r   r   r   <module>   s      (      B  J "