From e0eb1dd53c35d1ba919e91259d42ef27c9534503 Mon Sep 17 00:00:00 2001 From: Brian Bjarke Jensen Date: Sun, 31 Mar 2024 10:28:25 +0200 Subject: [PATCH] defined data models --- core/data_models/__init__.py | 14 ++++++ core/data_models/angle.py | 11 +++++ core/data_models/contact.py | 11 +++++ core/data_models/data_model.py | 67 +++++++++++++++++++++++++++ core/data_models/distance.py | 12 +++++ core/data_models/framing.py | 13 ++++++ core/data_models/information_value.py | 12 +++++ core/data_models/modality_color.py | 12 +++++ core/data_models/modality_depth.py | 12 +++++ core/data_models/modality_lighting.py | 12 +++++ core/data_models/point_of_view.py | 11 +++++ core/data_models/salience.py | 14 ++++++ core/data_models/visual_syntax.py | 27 +++++++++++ 13 files changed, 228 insertions(+) create mode 100644 core/data_models/__init__.py create mode 100644 core/data_models/angle.py create mode 100644 core/data_models/contact.py create mode 100644 core/data_models/data_model.py create mode 100644 core/data_models/distance.py create mode 100644 core/data_models/framing.py create mode 100644 core/data_models/information_value.py create mode 100644 core/data_models/modality_color.py create mode 100644 core/data_models/modality_depth.py create mode 100644 core/data_models/modality_lighting.py create mode 100644 core/data_models/point_of_view.py create mode 100644 core/data_models/salience.py create mode 100644 core/data_models/visual_syntax.py diff --git a/core/data_models/__init__.py b/core/data_models/__init__.py new file mode 100644 index 0000000..650a187 --- /dev/null +++ b/core/data_models/__init__.py @@ -0,0 +1,14 @@ +"""data_models module content.""" +from __future__ import annotations + +from .angle import AngleData +from .contact import ContactData +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 diff --git a/core/data_models/angle.py b/core/data_models/angle.py new file mode 100644 index 0000000..5ce2ea0 --- /dev/null +++ b/core/data_models/angle.py @@ -0,0 +1,11 @@ +"""Definition of Angle data model.""" +from __future__ import annotations + +from .data_model import DataModel + + +class AngleData(DataModel): + """Angle data model.""" + high: float + eye_level: float + low: float diff --git a/core/data_models/contact.py b/core/data_models/contact.py new file mode 100644 index 0000000..9a5f1cd --- /dev/null +++ b/core/data_models/contact.py @@ -0,0 +1,11 @@ +"""Definition of ContactData data model.""" +from __future__ import annotations + +from .data_model import DataModel + + +class ContactData(DataModel): + """ContactData data model.""" + + offer: float + demand: float diff --git a/core/data_models/data_model.py b/core/data_models/data_model.py new file mode 100644 index 0000000..70bb79f --- /dev/null +++ b/core/data_models/data_model.py @@ -0,0 +1,67 @@ +"""Definition of DataModel base class.""" +from __future__ import annotations + +import random + +from pydantic import BaseModel +from pydantic import ValidationError + + +class DataModel(BaseModel): + """DataModel base class.""" + + @classmethod + def classname(cls) -> str: + """Return classname.""" + return cls.__name__ + + @classmethod + def list_fields(cls) -> list[str]: + """List options that are stored as attributes.""" + return list(cls.model_fields.keys()) + + @classmethod + def from_random(cls): + """Instantiate with random numbers.""" + kwargs = {field: random.random() for field in cls.list_fields()} + return cls(**kwargs) + + @classmethod + def from_choice(cls, option: str): + """Instantiate from choice.""" + if option is None: + raise ValidationError() + assert isinstance(option, str), 'option is not a string' + allowed_options_list = cls.list_fields() + assert option in allowed_options_list, \ + f"{option} is not among allowed fields {allowed_options_list}" + kwargs = {field: 0 for field in cls.list_fields()} + kwargs[option] = 1 + return cls(**kwargs) + + @classmethod + def from_list(cls, data_list: list[float]): + """Instantiate from list of values.""" + kwargs = {key: val for key, val in zip(cls.list_fields(), data_list)} + return cls(**kwargs) + + def __repr__(self) -> str: + model_dict = self.model_dump() + model_repr_str = f"{self.classname()}(" + model_repr_str += ', '.join([ + f"{field}={value:.3f}" + for field, value + in model_dict.items() + ]) + model_repr_str += ')' + return model_repr_str + + def highest_score_field(self) -> str: + """Return name of field with highest score.""" + model_dict = self.model_dump() + return max(model_dict, key=lambda k: model_dict[k]) + + def highest_score_value(self) -> float: + """Return value of field with highest score.""" + model_dict = self.model_dump() + return max(model_dict.values()) diff --git a/core/data_models/distance.py b/core/data_models/distance.py new file mode 100644 index 0000000..efd9461 --- /dev/null +++ b/core/data_models/distance.py @@ -0,0 +1,12 @@ +"""Definition of DistanceData data model.""" +from __future__ import annotations + +from .data_model import DataModel + + +class DistanceData(DataModel): + """DistanceData data model.""" + + long: float + medium: float + close: float diff --git a/core/data_models/framing.py b/core/data_models/framing.py new file mode 100644 index 0000000..2381ebc --- /dev/null +++ b/core/data_models/framing.py @@ -0,0 +1,13 @@ +"""Definition of FramingData data model.""" +from __future__ import annotations + +from .data_model import DataModel + + +class FramingData(DataModel): + """FramingData data model.""" + + frame_lines: float + empty_space: float + colour_contrast: float + form_contrast: float diff --git a/core/data_models/information_value.py b/core/data_models/information_value.py new file mode 100644 index 0000000..45d10f3 --- /dev/null +++ b/core/data_models/information_value.py @@ -0,0 +1,12 @@ +"""Definition of InformationValueData data model.""" +from __future__ import annotations + +from .data_model import DataModel + + +class InformationValueData(DataModel): + """InformationValueData data model.""" + + given_new: float + ideal_real: float + central_marginal: float diff --git a/core/data_models/modality_color.py b/core/data_models/modality_color.py new file mode 100644 index 0000000..a34d6be --- /dev/null +++ b/core/data_models/modality_color.py @@ -0,0 +1,12 @@ +"""Definition of ModalityColorData data model.""" +from __future__ import annotations + +from .data_model import DataModel + + +class ModalityColorData(DataModel): + """ModalityColorData data model.""" + + high: float + medium: float + low: float diff --git a/core/data_models/modality_depth.py b/core/data_models/modality_depth.py new file mode 100644 index 0000000..3f8fbe6 --- /dev/null +++ b/core/data_models/modality_depth.py @@ -0,0 +1,12 @@ +"""Definition of ModalityDepthData data model.""" +from __future__ import annotations + +from .data_model import DataModel + + +class ModalityDepthData(DataModel): + """ModalityDepthData data model.""" + + high: float + medium: float + low: float diff --git a/core/data_models/modality_lighting.py b/core/data_models/modality_lighting.py new file mode 100644 index 0000000..fb04f4c --- /dev/null +++ b/core/data_models/modality_lighting.py @@ -0,0 +1,12 @@ +"""Definition of ModalityLightingData data model.""" +from __future__ import annotations + +from .data_model import DataModel + + +class ModalityLightingData(DataModel): + """ModalityLightingData data model.""" + + high: float + medium: float + low: float diff --git a/core/data_models/point_of_view.py b/core/data_models/point_of_view.py new file mode 100644 index 0000000..98d67c5 --- /dev/null +++ b/core/data_models/point_of_view.py @@ -0,0 +1,11 @@ +"""Definition of PointOfViewData data model.""" +from __future__ import annotations + +from .data_model import DataModel + + +class PointOfViewData(DataModel): + """PointOfViewData data model.""" + + frontal: float + oblique: float diff --git a/core/data_models/salience.py b/core/data_models/salience.py new file mode 100644 index 0000000..580100d --- /dev/null +++ b/core/data_models/salience.py @@ -0,0 +1,14 @@ +"""Definition of SalienceData data model.""" +from __future__ import annotations + +from .data_model import DataModel + + +class SalienceData(DataModel): + """SalienceData data model.""" + + size: float + colour: float + tone: float + form: float + positioning: float diff --git a/core/data_models/visual_syntax.py b/core/data_models/visual_syntax.py new file mode 100644 index 0000000..fd38639 --- /dev/null +++ b/core/data_models/visual_syntax.py @@ -0,0 +1,27 @@ +"""Definition of VisualSyntaxData data model.""" +from __future__ import annotations + +from .data_model import DataModel + + +class VisualSyntaxData(DataModel): + """VisualSyntaxData data model.""" + + non_transactional_action: float + non_transactional_reaction: float + unidirectional_transactional_action: float + unidirectional_transactional_reaction: float + bidirectional_transactional_action: float + bidirectional_transactional_reaction: float + conversion: float + speech_process: float + classification_overt_taxonomy: float + analytical_exhaustive: float + analytical_disarranged: float + analytical_temporal: float + analytical_distributed: float + analytical_topological: float + analytical_exploded: float + analytical_inclusive: float + symbolic_suggestive: float + symbolic_attributive: float