Add off_by_3_fix/src/off_by_3_fix/core.py
This commit is contained in:
commit
8b1fcca4c9
1 changed files with 50 additions and 0 deletions
50
off_by_3_fix/src/off_by_3_fix/core.py
Normal file
50
off_by_3_fix/src/off_by_3_fix/core.py
Normal 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
|
||||||
Loading…
Reference in a new issue