"""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)