o
    o’×i9	  ã                   @   sb   d dl mZ d dlmZmZ G dd„ deeƒZG dd„ deƒZG dd„ deƒZG d	d
„ d
eƒZ	dS )é    )ÚEnum)ÚOptionalÚUnionc                   @   sT   e Zd ZdZededed  fdd„ƒZdeed df de	fdd	„Z
defd
d„ZdS )ÚEnumStra  Type of any enumerator with allowed comparison to string invariant to cases.

    Example:
        >>> class MyEnum(EnumStr):
        ...     ABC = 'abc'
        >>> MyEnum.from_str('Abc')
        <MyEnum.ABC: 'abc'>
        >>> {MyEnum.ABC: 123}
        {<MyEnum.ABC: 'abc'>: 123}
    ÚvalueÚreturnc                 C   s>   dd„ t | ƒD ƒ}|D ]}| ¡ | ¡ krt| |ƒ  S qd S )Nc                 S   s   g | ]	}|  d ¡s|‘qS )Ú_)Ú
startswith)Ú.0Ústatus© r   úZ/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/torchmetrics/utilities/enums.pyÚ
<listcomp>    s    z$EnumStr.from_str.<locals>.<listcomp>)ÚdirÚlowerÚgetattr)Úclsr   ÚstatusesÚstr   r   r   Úfrom_str   s   ÿzEnumStr.from_strÚotherNc                 C   s*   t |tƒr|jnt|ƒ}| j ¡ | ¡ kS ©N)Ú
isinstancer   r   Ústrr   )Úselfr   r   r   r   Ú__eq__&   s   zEnumStr.__eq__c                 C   s
   t | jƒS r   )ÚhashÚname)r   r   r   r   Ú__hash__*   s   
zEnumStr.__hash__)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úclassmethodr   r   r   r   Úboolr   Úintr   r   r   r   r   r      s    r   c                   @   s    e Zd ZdZdZdZdZdZdS )ÚDataTypezNEnum to represent data type.

    >>> "Binary" in list(DataType)
    True
    Úbinaryzmulti-labelzmulti-classzmulti-dim multi-classN)r   r    r!   r"   ÚBINARYÚ
MULTILABELÚ
MULTICLASSÚMULTIDIM_MULTICLASSr   r   r   r   r&   0   s    r&   c                   @   s$   e Zd ZdZdZdZdZdZdZdS )ÚAverageMethodz®Enum to represent average method.

    >>> None in list(AverageMethod)
    True
    >>> AverageMethod.NONE == None
    True
    >>> AverageMethod.NONE == 'none'
    True
    ÚmicroÚmacroÚweightedNÚsamples)	r   r    r!   r"   ÚMICROÚMACROÚWEIGHTEDÚNONEÚSAMPLESr   r   r   r   r,   =   s    
r,   c                   @   s   e Zd ZdZdZdZdS )ÚMDMCAverageMethodz7Enum to represent multi-dim multi-class average method.ÚglobalÚ
samplewiseN)r   r    r!   r"   ÚGLOBALÚ
SAMPLEWISEr   r   r   r   r6   O   s    r6   N)
Úenumr   Útypingr   r   r   r   r&   r,   r6   r   r   r   r   Ú<module>   s   