commit 5fd91018ab82a8d842feb2ac6416d5c461a0b401 Author: Mika Date: Sun Mar 22 13:46:45 2026 +0000 Add affinity_effect_calculator/src/affinity_effect_calculator/core.py diff --git a/affinity_effect_calculator/src/affinity_effect_calculator/core.py b/affinity_effect_calculator/src/affinity_effect_calculator/core.py new file mode 100644 index 0000000..774b41c --- /dev/null +++ b/affinity_effect_calculator/src/affinity_effect_calculator/core.py @@ -0,0 +1,40 @@ +from dataclasses import dataclass +from typing import Any + + +@dataclass +class EffectData: + """Datenmodell für Effektwerte und berechneten Interaktionseffekt.""" + + effect_4x: float + effect_2x: float + calculated_effect: float | None = None + + def validate(self) -> None: + """Validiert die Eingabewerte, um sicherzustellen, dass sie floats sind.""" + if not isinstance(self.effect_4x, (float, int)): + raise ValueError(f"effect_4x muss eine Zahl sein, erhalten: {type(self.effect_4x)}") + if not isinstance(self.effect_2x, (float, int)): + raise ValueError(f"effect_2x muss eine Zahl sein, erhalten: {type(self.effect_2x)}") + + +def calculate_affinity_effect(effect_4x: float, effect_2x: float) -> float: + """Berechnet den Interaktionseffekt basierend auf den beiden Eingabewerten. + + Args: + effect_4x (float): Effektwert bei 4× Last. + effect_2x (float): Effektwert bei 2× Last. + + Returns: + float: Der berechnete Interaktionseffekt (effect_4x - effect_2x). + + Raises: + ValueError: Falls Eingaben keine numerischen Werte sind. + """ + if not isinstance(effect_4x, (float, int)): + raise ValueError(f"Ungültiger Typ für effect_4x: {type(effect_4x)}") + if not isinstance(effect_2x, (float, int)): + raise ValueError(f"Ungültiger Typ für effect_2x: {type(effect_2x)}") + + result = float(effect_4x) - float(effect_2x) + return result