o
    .wih                     @   s   d dl mZ d dlmZ G dd deZG dd deZG dd deZG d	d
 d
eZG dd deZG dd deZ	G dd deZ
dS )    )StrEnum)Literalc                
       sR   e Zd ZdZedefddZedded  dede	d	 dd f fd
dZ
  ZS )EnumStrz
Base Enum.returnc                   C      dS )NTask r   r   r   Y/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/torchmetrics/utilities/enums.py_name      zEnumStr._namekeyclsvaluesource)r   r   anyc                    st   zt  j|dd|d}W | |S  ty9 } zdd | jD }td|   d| | d| d	|d
}~ww )a  Load from string.

        Raises:
            ValueError:
                If required value is not among the supported options.

        >>> class MyEnum(EnumStr):
        ...     a = "aaa"
        ...     b = "bbb"
        >>> MyEnum.from_str("a")
        <MyEnum.a: 'aaa'>
        >>> MyEnum.from_str("c")
        Traceback (most recent call last):
          ...
        ValueError: Invalid Task: expected one of ['a', 'b'], but got c.

        -_)r   c                 S   s   g | ]}|  qS r   )lower).0mr   r   r	   
<listcomp>0   s    z$EnumStr.from_str.<locals>.<listcomp>zInvalid z: expected one of z
, but got .N)superfrom_strreplace
ValueError_member_names_r
   _allowed_matches)r   r   r   meerr_allowed_im	__class__r   r	   r      s    zEnumStr.from_str)r   )__name__
__module____qualname____doc__staticmethodstrr
   classmethodtyper   r   __classcell__r   r   r!   r	   r      s    2r   c                   @   s2   e Zd ZdZedefddZdZdZdZ	dZ
d	S )
DataTypezOEnum to represent data type.

    >>> "Binary" in list(DataType)
    True

    r   c                   C   r   )Nz	Data typer   r   r   r   r	   r
   ?   r   zDataType._namebinaryzmulti-labelzmulti-classzmulti-dim multi-classN)r#   r$   r%   r&   r'   r(   r
   BINARY
MULTILABEL
MULTICLASSMULTIDIM_MULTICLASSr   r   r   r	   r,   7   s    r,   c                   @   s6   e Zd ZdZedefddZdZdZdZ	dZ
d	ZdS )
AverageMethodzEnum to represent average method.

    >>> None in list(AverageMethod)
    True
    >>> AverageMethod.NONE == None
    True
    >>> AverageMethod.NONE == 'none'
    True

    r   c                   C   r   )NzAverage methodr   r   r   r   r	   r
   U   r   zAverageMethod._namemicromacroweightedNsamples)r#   r$   r%   r&   r'   r(   r
   MICROMACROWEIGHTEDNONESAMPLESr   r   r   r	   r2   I   s    r2   c                   @   *   e Zd ZdZedefddZdZdZdS )MDMCAverageMethodz7Enum to represent multi-dim multi-class average method.r   c                   C   r   )NzMDMC Average methodr   r   r   r   r	   r
   c   r   zMDMCAverageMethod._nameglobal
samplewiseN)	r#   r$   r%   r&   r'   r(   r
   GLOBAL
SAMPLEWISEr   r   r   r	   r=   `   s    r=   c                   @   s.   e Zd ZdZedefddZdZdZdZ	dS )	ClassificationTaskz}Enum to represent the different tasks in classification metrics.

    >>> "binary" in list(ClassificationTask)
    True

    r   c                   C   r   NClassificationr   r   r   r   r	   r
   s   r   zClassificationTask._namer-   
multiclass
multilabelN)
r#   r$   r%   r&   r'   r(   r
   r.   r0   r/   r   r   r   r	   rB   k   s    rB   c                   @   r<   )ClassificationTaskNoBinaryzEnum to represent the different tasks in classification metrics.

    >>> "binary" in list(ClassificationTaskNoBinary)
    False

    r   c                   C   r   rC   r   r   r   r   r	   r
      r   z ClassificationTaskNoBinary._namerF   rE   N)	r#   r$   r%   r&   r'   r(   r
   r/   r0   r   r   r   r	   rG   |       rG   c                   @   r<   )ClassificationTaskNoMultilabelzEnum to represent the different tasks in classification metrics.

    >>> "multilabel" in list(ClassificationTaskNoMultilabel)
    False

    r   c                   C   r   rC   r   r   r   r   r	   r
      r   z$ClassificationTaskNoMultilabel._namer-   rE   N)	r#   r$   r%   r&   r'   r(   r
   r.   r0   r   r   r   r	   rI      rH   rI   N)lightning_utilities.core.enumsr   typing_extensionsr   r   r,   r2   r=   rB   rG   rI   r   r   r   r	   <module>   s   $