Skip to content

Models

DataFormat = Literal['arff', 'parquet'] module-attribute

NUMERIC_TYPES = frozenset({'NUMERIC', 'REAL', 'INTEGER'}) module-attribute

OML_BOOL_FIELDS = ('is_target', 'is_ignore', 'is_row_identifier') module-attribute

OML_FLOAT_FIELDS = ('maximum_value', 'minimum_value', 'mean_value', 'standard_deviation') module-attribute

OML_INT_FIELDS = ('number_of_missing_values', 'number_of_distinct_values', 'number_of_unique_values', 'number_of_integer_values', 'number_of_real_values', 'number_of_nominal_values', 'number_of_values') module-attribute

OML_STR_FIELDS = 'name' module-attribute

DataFeature dataclass

Source code in src/models.py
68
69
70
71
72
73
74
75
76
77
78
79
80
81
@dataclass()
class DataFeature:
    did: int | None = None
    evaluation_engine_id: int | None = None
    features: list[Feature] = field(default_factory=list)
    error: str | None = None

    def feature_map(
        self,
        *,
        sorted_names: bool = False,
    ) -> dict[str, Feature]:
        result = {f.name: f for f in self.features}
        return dict(sorted(result.items())) if sorted_names else result

did = None class-attribute instance-attribute

error = None class-attribute instance-attribute

evaluation_engine_id = None class-attribute instance-attribute

features = field(default_factory=list) class-attribute instance-attribute

__init__(did=None, evaluation_engine_id=None, features=list(), error=None)

feature_map(*, sorted_names=False)

Source code in src/models.py
75
76
77
78
79
80
81
def feature_map(
    self,
    *,
    sorted_names: bool = False,
) -> dict[str, Feature]:
    result = {f.name: f for f in self.features}
    return dict(sorted(result.items())) if sorted_names else result

DataQuality dataclass

Source code in src/models.py
84
85
86
87
88
89
90
91
92
93
94
95
96
97
@dataclass()
class DataQuality:
    did: int | None = None
    evaluation_engine_id: int | None = None
    qualities: list[Quality] = field(default_factory=list)
    error: str | None = None

    def quality_map(
        self,
        *,
        sorted_names: bool = False,
    ) -> dict[str, Quality]:
        result: dict[str, Quality] = {f.name: f for f in self.qualities}
        return dict(sorted(result.items())) if sorted_names else result

did = None class-attribute instance-attribute

error = None class-attribute instance-attribute

evaluation_engine_id = None class-attribute instance-attribute

qualities = field(default_factory=list) class-attribute instance-attribute

__init__(did=None, evaluation_engine_id=None, qualities=list(), error=None)

quality_map(*, sorted_names=False)

Source code in src/models.py
91
92
93
94
95
96
97
def quality_map(
    self,
    *,
    sorted_names: bool = False,
) -> dict[str, Quality]:
    result: dict[str, Quality] = {f.name: f for f in self.qualities}
    return dict(sorted(result.items())) if sorted_names else result

DatasetDownloadInfo dataclass

Source code in src/models.py
26
27
28
29
@dataclass()
class DatasetDownloadInfo:
    file_path: str
    default_target_attribute: str | None

default_target_attribute instance-attribute

file_path instance-attribute

__init__(file_path, default_target_attribute)

EstimationProcedure dataclass

Estimation-procedure configuration read by the Java dispatcher.

folds / repeats / percentage correspond to the procedure fields consumed by GenerateFolds.java; percentage is a test-set size in the range 0..100.

Source code in src/models.py
209
210
211
212
213
214
215
216
217
218
219
220
221
@dataclass(frozen=True)
class EstimationProcedure:
    """Estimation-procedure configuration read by the Java dispatcher.

    ``folds`` / ``repeats`` / ``percentage`` correspond to the procedure fields
    consumed by ``GenerateFolds.java``; ``percentage`` is a test-set size in the
    range 0..100.
    """

    type: EstimationProcedureType
    folds: int | None = None
    repeats: int | None = None
    percentage: float | None = None

folds = None class-attribute instance-attribute

percentage = None class-attribute instance-attribute

repeats = None class-attribute instance-attribute

type instance-attribute

__init__(type, folds=None, repeats=None, percentage=None)

EstimationProcedureType

Bases: str, Enum

Source code in src/models.py
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
class EstimationProcedureType(str, Enum):
    CROSSVALIDATION = "CROSSVALIDATION"
    HOLDOUT = "HOLDOUT"
    HOLDOUT_ORDERED = "HOLDOUT_ORDERED"
    LEAVEONEOUT = "LEAVEONEOUT"
    TESTONTRAININGDATA = "TESTONTRAININGDATA"
    LEARNINGCURVE_CV = "LEARNINGCURVE_CV"

    @classmethod
    def from_oml_type(cls, type_str: str | None) -> EstimationProcedureType | None:
        """Map an OpenML task ``oml:type`` string to a procedure type.

        Case-insensitive; returns ``None`` for an unrecognized type. Source:
        ``org.openml.apiconnector.xml.EstimationProcedureType``.
        """
        return _OML_TYPE_TO_PROCEDURE.get((type_str or "").lower())

CROSSVALIDATION = 'CROSSVALIDATION' class-attribute instance-attribute

HOLDOUT = 'HOLDOUT' class-attribute instance-attribute

HOLDOUT_ORDERED = 'HOLDOUT_ORDERED' class-attribute instance-attribute

LEARNINGCURVE_CV = 'LEARNINGCURVE_CV' class-attribute instance-attribute

LEAVEONEOUT = 'LEAVEONEOUT' class-attribute instance-attribute

TESTONTRAININGDATA = 'TESTONTRAININGDATA' class-attribute instance-attribute

from_oml_type(type_str) classmethod

Map an OpenML task oml:type string to a procedure type.

Case-insensitive; returns None for an unrecognized type. Source: org.openml.apiconnector.xml.EstimationProcedureType.

Source code in src/models.py
181
182
183
184
185
186
187
188
@classmethod
def from_oml_type(cls, type_str: str | None) -> EstimationProcedureType | None:
    """Map an OpenML task ``oml:type`` string to a procedure type.

    Case-insensitive; returns ``None`` for an unrecognized type. Source:
    ``org.openml.apiconnector.xml.EstimationProcedureType``.
    """
    return _OML_TYPE_TO_PROCEDURE.get((type_str or "").lower())

EvaluationScore dataclass

One computed metric. Mirrors org.openml.apiconnector.xml.EvaluationScore.

Source code in src/models.py
105
106
107
108
109
110
111
112
113
114
115
116
@dataclass
class EvaluationScore:
    """One computed metric. Mirrors ``org.openml.apiconnector.xml.EvaluationScore``."""

    function: str
    value: float | None = None
    stdev: float | None = None
    array: list | None = None
    repeat: int | None = None
    fold: int | None = None
    sample: int | None = None
    sample_size: int | None = None

array = None class-attribute instance-attribute

fold = None class-attribute instance-attribute

function instance-attribute

repeat = None class-attribute instance-attribute

sample = None class-attribute instance-attribute

sample_size = None class-attribute instance-attribute

stdev = None class-attribute instance-attribute

value = None class-attribute instance-attribute

__init__(function, value=None, stdev=None, array=None, repeat=None, fold=None, sample=None, sample_size=None)

Feature dataclass

Source code in src/models.py
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
@dataclass()
class Feature:
    index: int
    name: str
    data_type: str

    nominal_values: list[str] = field(default_factory=list)

    is_target: bool = False
    is_ignore: bool = False
    is_row_identifier: bool = False

    number_of_distinct_values: int | None = None
    number_of_unique_values: int | None = None
    number_of_missing_values: int | None = None
    number_of_integer_values: int | None = None
    number_of_real_values: int | None = None
    number_of_nominal_values: int | None = None
    number_of_values: int | None = None

    maximum_value: float | None = None
    minimum_value: float | None = None
    mean_value: float | None = None
    standard_deviation: float | None = None

    class_distribution: str | None = None

    def __str__(self) -> str:
        return f"{self.index} - {self.name}"

class_distribution = None class-attribute instance-attribute

data_type instance-attribute

index instance-attribute

is_ignore = False class-attribute instance-attribute

is_row_identifier = False class-attribute instance-attribute

is_target = False class-attribute instance-attribute

maximum_value = None class-attribute instance-attribute

mean_value = None class-attribute instance-attribute

minimum_value = None class-attribute instance-attribute

name instance-attribute

nominal_values = field(default_factory=list) class-attribute instance-attribute

number_of_distinct_values = None class-attribute instance-attribute

number_of_integer_values = None class-attribute instance-attribute

number_of_missing_values = None class-attribute instance-attribute

number_of_nominal_values = None class-attribute instance-attribute

number_of_real_values = None class-attribute instance-attribute

number_of_unique_values = None class-attribute instance-attribute

number_of_values = None class-attribute instance-attribute

standard_deviation = None class-attribute instance-attribute

__init__(index, name, data_type, nominal_values=list(), is_target=False, is_ignore=False, is_row_identifier=False, number_of_distinct_values=None, number_of_unique_values=None, number_of_missing_values=None, number_of_integer_values=None, number_of_real_values=None, number_of_nominal_values=None, number_of_values=None, maximum_value=None, minimum_value=None, mean_value=None, standard_deviation=None, class_distribution=None)

__str__()

Source code in src/models.py
64
65
def __str__(self) -> str:
    return f"{self.index} - {self.name}"

Quality dataclass

Source code in src/models.py
17
18
19
20
21
22
23
@dataclass(slots=True)
class Quality:
    name: str
    value: float | None = None

    def __str__(self) -> str:
        return f"{self.name} - {self.value}"

name instance-attribute

value = None class-attribute instance-attribute

__init__(name, value=None)

__str__()

Source code in src/models.py
22
23
def __str__(self) -> str:
    return f"{self.name} - {self.value}"

RunEvaluation dataclass

Aggregated result of evaluating one run. Mirrors RunEvaluation.

Source code in src/models.py
119
120
121
122
123
124
125
126
127
128
129
130
131
132
@dataclass
class RunEvaluation:
    """Aggregated result of evaluating one run. Mirrors ``RunEvaluation``."""

    run_id: int | None = None
    # Canonical evaluation-engine id; mirrors ``EVALUATION_ENGINE_ID`` in
    # ``src.runs.evaluators`` (kept there to avoid a circular import).
    evaluation_engine_id: int = 1
    scores: list[EvaluationScore] = field(default_factory=list)
    error: str | None = None
    warning: str | None = None

    def add_scores(self, scores: Iterable[EvaluationScore]) -> None:
        self.scores.extend(scores)

error = None class-attribute instance-attribute

evaluation_engine_id = 1 class-attribute instance-attribute

run_id = None class-attribute instance-attribute

scores = field(default_factory=list) class-attribute instance-attribute

warning = None class-attribute instance-attribute

__init__(run_id=None, evaluation_engine_id=1, scores=list(), error=None, warning=None)

add_scores(scores)

Source code in src/models.py
131
132
def add_scores(self, scores: Iterable[EvaluationScore]) -> None:
    self.scores.extend(scores)