From ebe506aa225e63031c771d880b4e80030221e11c Mon Sep 17 00:00:00 2001 From: Mika Date: Sun, 12 Apr 2026 02:07:09 +0000 Subject: [PATCH] Add temperature_data_analysis/src/temperature_data_analysis/core.py --- .../src/temperature_data_analysis/core.py | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 temperature_data_analysis/src/temperature_data_analysis/core.py diff --git a/temperature_data_analysis/src/temperature_data_analysis/core.py b/temperature_data_analysis/src/temperature_data_analysis/core.py new file mode 100644 index 0000000..d632aa9 --- /dev/null +++ b/temperature_data_analysis/src/temperature_data_analysis/core.py @@ -0,0 +1,57 @@ +from __future__ import annotations + +import statistics +from dataclasses import dataclass, asdict +from typing import List, Dict + + +@dataclass +class AnalysisResult: + """Repräsentiert das Ergebnis einer Temperaturdatenanalyse.""" + + mean_temperature: float + temperature_variance: float + + def to_dict(self) -> Dict[str, float]: + """Konvertiert das Analyseergebnis in ein Dictionary.""" + return asdict(self) + + +def analyze_temperature_data(data: List[float]) -> Dict[str, float]: + """Analysiert eine Liste von Temperaturwerten und berechnet Mittelwert und Varianz. + + Args: + data: Liste von Temperaturwerten in Grad Celsius. + + Returns: + Dictionary mit Schlüsseln 'mean_temperature' und 'temperature_variance'. + + Raises: + ValueError: Wenn die Eingabeliste leer ist oder ungültige Werte enthält. + """ + # Eingabevalidierung + if not isinstance(data, list): + raise ValueError("Input data must be a list of floats.") + if not data: + raise ValueError("Input data list cannot be empty.") + + validated_values = [] + for v in data: + if not isinstance(v, (int, float)): + raise ValueError(f"Invalid value in data (not numeric): {v}") + validated_values.append(float(v)) + + # Berechnungen + try: + mean_val = statistics.mean(validated_values) + variance_val = statistics.pvariance(validated_values) + except statistics.StatisticsError as e: + raise ValueError(f"Error calculating statistics: {e}") + + result = AnalysisResult(mean_temperature=mean_val, temperature_variance=variance_val) + + # CI-Readiness: Assertions für Datenintegrität + assert isinstance(result.mean_temperature, float) + assert isinstance(result.temperature_variance, float) + + return result.to_dict() \ No newline at end of file