diff --git a/core/dto/__init__.py b/core/dto/__init__.py index 650a187..be1cd38 100644 --- a/core/dto/__init__.py +++ b/core/dto/__init__.py @@ -1,4 +1,4 @@ -"""data_models module content.""" +"""Data transfer objects module content.""" from __future__ import annotations from .angle import AngleData @@ -9,6 +9,7 @@ from .information_value import InformationValueData from .modality_color import ModalityColorData from .modality_depth import ModalityDepthData from .modality_lighting import ModalityLightingData +from .model_data import ModelData from .point_of_view import PointOfViewData from .salience import SalienceData from .visual_syntax import VisualSyntaxData diff --git a/core/dto/model_data.py b/core/dto/model_data.py new file mode 100644 index 0000000..157f788 --- /dev/null +++ b/core/dto/model_data.py @@ -0,0 +1,82 @@ +"""Definition of ModelData data model.""" +from __future__ import annotations + +from .angle import AngleData +from .contact import ContactData +from .data_model import DataModel +from .distance import DistanceData +from .framing import FramingData +from .information_value import InformationValueData +from .modality_color import ModalityColorData +from .modality_depth import ModalityDepthData +from .modality_lighting import ModalityLightingData +from .point_of_view import PointOfViewData +from .salience import SalienceData +from .visual_syntax import VisualSyntaxData + + +class ModelData(DataModel): + """ModelData model for data IO with combined ML model.""" + visual_syntax: VisualSyntaxData + contact: ContactData + angle: AngleData + point_of_view: PointOfViewData + distance: DistanceData + modality_lighting: ModalityLightingData + modality_color: ModalityColorData + modality_depth: ModalityDepthData + information_value: InformationValueData + framing: FramingData + salience: SalienceData + + @classmethod + def from_random(cls) -> ModelData: + """Instantiate with random numbers.""" + kwargs = { + field: field_info.annotation.from_random() # type: ignore + for field, field_info + in cls.model_fields.items() + } + return cls(**kwargs) + + @classmethod + def from_annotations( + cls, + visual_syntax: str, + contact: str, + angle: str, + point_of_view: str, + distance: str, + modality_lighting: str, + modality_color: str, + modality_depth: str, + information_value: str, + framing: str, + salience: str, + ) -> ModelData: + """Instantiate from annotation.""" + kwargs = { + 'visual_syntax': VisualSyntaxData + .from_choice(visual_syntax), + 'contact': ContactData + .from_choice(contact), + 'angle': AngleData + .from_choice(angle), + 'point_of_view': PointOfViewData + .from_choice(point_of_view), + 'distance': DistanceData + .from_choice(distance), + 'modality_lighting': ModalityLightingData + .from_choice(modality_lighting), + 'modality_color': ModalityColorData + .from_choice(modality_color), + 'modality_depth': ModalityDepthData + .from_choice(modality_depth), + 'information_value': InformationValueData + .from_choice(information_value), + 'framing': FramingData + .from_choice(framing), + 'salience': SalienceData + .from_choice(salience), + } + return cls(**kwargs)