Skip to content

declearn.data_info.DataTypeField

Bases: DataInfoField

Specifications for 'data_type' data_info field.

Source code in declearn/data_info/_fields.py
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
@register_data_info_field
class DataTypeField(DataInfoField):
    """Specifications for 'data_type' data_info field."""

    field = "data_type"
    types = (str,)
    doc = "Type of dataset(s)."

    @classmethod
    def is_valid(
        cls,
        value: Any,
    ) -> bool:
        if not isinstance(value, str):
            return False
        try:
            np.dtype(value)
        except TypeError:
            return False
        return True

    @classmethod
    def combine(
        cls,
        *values: Any,
    ) -> int:
        unique = list(set(values))
        if len(unique) != 1:
            raise ValueError(
                f"Cannot combine '{cls.field}': non-unique inputs."
            )
        if not cls.is_valid(unique[0]):
            raise ValueError(
                f"Cannot combine '{cls.field}': invalid unique value."
            )
        return unique[0]