Skip to content

declearn.data_info.NbFeaturesField

Bases: DataInfoField

Specifications for 'n_features' data_info field.

Source code in declearn/data_info/_fields.py
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
@register_data_info_field
class NbFeaturesField(DataInfoField):
    """Specifications for 'n_features' data_info field."""

    field: ClassVar[str] = "n_features"
    types: ClassVar[Tuple[Type, ...]] = (int,)
    doc: ClassVar[str] = "Number of input features, checked to be equal."

    @classmethod
    def is_valid(
        cls,
        value: Any,
    ) -> bool:
        return isinstance(value, int) and (value > 0)

    @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]