Source code for torchoutil.pyoutil.enum
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from enum import Enum
from typing import Type, TypeVar
TStrEnum = TypeVar("TStrEnum", bound="StrEnum")
[docs]class StrEnum(str, Enum):
[docs] @classmethod
def from_str(
cls: Type[TStrEnum],
value: str,
case_sensitive: bool = False,
) -> TStrEnum:
members = cls.__members__.keys()
for member in members:
if member == value or (
not case_sensitive and member.lower() == value.lower()
):
return cls[member]
msg = f"Invalid argument {value=}. (expected one of {tuple(members)})"
raise ValueError(msg)
@staticmethod
def _generate_next_value_(name, start, count, last_values) -> str:
return name
def __str__(self) -> str:
return self.name
def __eq__(self, other: object) -> bool:
other = other.value if isinstance(other, Enum) else str(other)
return self.value == other # type: ignore
def __hash__(self) -> int:
return hash(self.value)