Skip to content

Commit ddd0f84

Browse files
authored
Change Hyperparameter to a dataclass. (#6426)
Change Hyperparameter to a dataclass so we can get special methods like `__repr__` and `__eq__`. It also simplifies the code. We can do this now that we only target versions of python > 3.7. This also requires typing the Hyperparameter class in order for the dataclass to be properly generated. I therefore considered also typing the list_hyperparameters() function but there is mixed value since the py_library() rule does not run a pytype checker. Note that we still target Python 3.8 so we must use `Union` instead of `|` in order to list `None` as an option.
1 parent 2b68513 commit ddd0f84

File tree

1 file changed

+13
-34
lines changed

1 file changed

+13
-34
lines changed

tensorboard/data/provider.py

Lines changed: 13 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
"""Experimental framework for generic TensorBoard data providers."""
1616

1717

18+
from typing import Collection, Tuple, Union
1819
import abc
20+
import dataclasses
1921
import enum
2022

2123
import numpy as np
@@ -530,6 +532,7 @@ class HyperparameterDomainType(enum.Enum):
530532
DISCRETE_BOOL = "discrete_bool"
531533

532534

535+
@dataclasses.dataclass(frozen=True)
533536
class Hyperparameter:
534537
"""Metadata about a hyperparameter.
535538
@@ -552,40 +555,16 @@ class Hyperparameter:
552555
finite set of bool values.
553556
"""
554557

555-
__slots__ = (
556-
"_hyperparameter_name",
557-
"_hyperparameter_display_name",
558-
"_domain_type",
559-
"_domain",
560-
)
561-
562-
def __init__(
563-
self,
564-
hyperparameter_name,
565-
hyperparameter_display_name,
566-
domain_type,
567-
domain,
568-
):
569-
self._hyperparameter_name = hyperparameter_name
570-
self._hyperparameter_display_name = hyperparameter_display_name
571-
self._domain_type = domain_type
572-
self._domain = domain
573-
574-
@property
575-
def hyperparameter_name(self):
576-
return self._hyperparameter_name
577-
578-
@property
579-
def hyperparameter_display_name(self):
580-
return self._hyperparameter_display_name
581-
582-
@property
583-
def domain_type(self):
584-
return self._domain_type
585-
586-
@property
587-
def domain(self):
588-
return self._domain
558+
hyperparameter_name: str = ""
559+
hyperparameter_display_name: str = ""
560+
domain_type: Union[HyperparameterDomainType, None] = None
561+
domain: Union[
562+
Tuple[float, float],
563+
Collection[float],
564+
Collection[str],
565+
Collection[bool],
566+
None,
567+
] = None
589568

590569

591570
class _TimeSeries:

0 commit comments

Comments
 (0)