From 08c5c14da67ca75eb1c7349394a90e26fbd4732c Mon Sep 17 00:00:00 2001 From: Brian Bjarke Jensen Date: Tue, 12 Mar 2024 22:38:53 +0100 Subject: [PATCH] added definitions of data models --- core/data_models/__init__.py | 13 ++++++ core/data_models/angle.py | 9 ++++ core/data_models/contact.py | 8 ++++ core/data_models/data_model.py | 59 +++++++++++++++++++++++++++ core/data_models/distance.py | 9 ++++ core/data_models/framing.py | 10 +++++ core/data_models/information_value.py | 9 ++++ core/data_models/modality_color.py | 9 ++++ core/data_models/modality_depth.py | 9 ++++ core/data_models/modality_lighting.py | 9 ++++ core/data_models/point_of_view.py | 8 ++++ core/data_models/salience.py | 11 +++++ core/data_models/visual_syntax.py | 24 +++++++++++ 13 files changed, 187 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..a0b2400 --- /dev/null +++ b/core/data_models/__init__.py @@ -0,0 +1,13 @@ +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..4af953c --- /dev/null +++ b/core/data_models/angle.py @@ -0,0 +1,9 @@ +from __future__ import annotations + +from .data_model import DataModel + + +class AngleData(DataModel): + 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..79f8909 --- /dev/null +++ b/core/data_models/contact.py @@ -0,0 +1,8 @@ +from __future__ import annotations + +from .data_model import DataModel + + +class ContactData(DataModel): + 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..d0b4667 --- /dev/null +++ b/core/data_models/data_model.py @@ -0,0 +1,59 @@ +from __future__ import annotations + +import random + +from pydantic import BaseModel +from pydantic import ValidationError + + +class DataModel(BaseModel): + + @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) + + 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..29236c6 --- /dev/null +++ b/core/data_models/distance.py @@ -0,0 +1,9 @@ +from __future__ import annotations + +from .data_model import DataModel + + +class DistanceData(DataModel): + 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..0a572e8 --- /dev/null +++ b/core/data_models/framing.py @@ -0,0 +1,10 @@ +from __future__ import annotations + +from .data_model import DataModel + + +class FramingData(DataModel): + 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..0e8ef23 --- /dev/null +++ b/core/data_models/information_value.py @@ -0,0 +1,9 @@ +from __future__ import annotations + +from .data_model import DataModel + + +class InformationValueData(DataModel): + 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..cad5b1a --- /dev/null +++ b/core/data_models/modality_color.py @@ -0,0 +1,9 @@ +from __future__ import annotations + +from .data_model import DataModel + + +class ModalityColorData(DataModel): + 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..04dda66 --- /dev/null +++ b/core/data_models/modality_depth.py @@ -0,0 +1,9 @@ +from __future__ import annotations + +from .data_model import DataModel + + +class ModalityDepthData(DataModel): + 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..1ff31ec --- /dev/null +++ b/core/data_models/modality_lighting.py @@ -0,0 +1,9 @@ +from __future__ import annotations + +from .data_model import DataModel + + +class ModalityLightingData(DataModel): + 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..12a2cbe --- /dev/null +++ b/core/data_models/point_of_view.py @@ -0,0 +1,8 @@ +from __future__ import annotations + +from .data_model import DataModel + + +class PointOfViewData(DataModel): + frontal: float + oblique: float diff --git a/core/data_models/salience.py b/core/data_models/salience.py new file mode 100644 index 0000000..40b73eb --- /dev/null +++ b/core/data_models/salience.py @@ -0,0 +1,11 @@ +from __future__ import annotations + +from .data_model import DataModel + + +class SalienceData(DataModel): + 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..760638f --- /dev/null +++ b/core/data_models/visual_syntax.py @@ -0,0 +1,24 @@ +from __future__ import annotations + +from .data_model import DataModel + + +class VisualSyntaxData(DataModel): + 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