Add off_by_3_fix/src/off_by_3_fix/core.py

This commit is contained in:
Mika 2025-12-11 11:56:25 +00:00
commit 8b1fcca4c9

View file

@ -0,0 +1,50 @@
import json
import logging
from typing import List, Dict
try:
import trace_agg # vorhandenes Modul, falls für Analyse benötigt
except ImportError:
trace_agg = None # optionaler Fallback, falls Modul zur Laufzeit nicht vorhanden ist
def fix_off_by_3(trace_data: List[Dict]) -> List[Dict]:
"""Korrigiert den Off-By-3-Fehler in Trace-Daten.
Wandelt Float-Bucket-Grenzen in Integer-Buckets um, um Rundungsfehler
bei der Gruppenaggregation zu vermeiden.
Args:
trace_data: Liste von Trace-Daten mit möglichen Float-Buckets.
Returns:
Liste von korrigierten Trace-Daten mit Integer-Buckets.
"""
if not isinstance(trace_data, list):
raise ValueError("trace_data muss eine Liste von Dicts sein.")
corrected = []
for entry in trace_data:
if not isinstance(entry, dict):
raise ValueError("Jeder Eintrag in trace_data muss ein Dict sein.")
group = entry.get("group")
bucket = entry.get("bucket")
value = entry.get("value")
if group is None or bucket is None or value is None:
raise ValueError("Einträge müssen 'group', 'bucket' und 'value' enthalten.")
# Primäre Korrektur: Float-Grenzen in stabile Integer-Buckets umwandeln
try:
bucket_int = int(round(bucket))
except (TypeError, ValueError):
raise ValueError(f"Bucket-Wert ungültig: {bucket}")
corrected.append({
"group": str(group),
"bucket": bucket_int,
"value": float(value)
})
return corrected