File size: 1,434 Bytes
5143557 eed1cab 5143557 eed1cab 5143557 eed1cab 5143557 eed1cab 5143557 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | """Deterministic repairer for decimal-shift issues."""
from __future__ import annotations
from dataforge.detectors.base import Issue, Schema
from dataforge.repairers.base import ProposedFix, RetryContext
from dataforge.table import TableLike, cell_value, column_names, row_count
from dataforge.transactions.txn import CellFix
class DecimalShiftRepairer:
"""Repair decimal-shift issues using the detector's expected value."""
def propose(
self,
issue: Issue,
df: TableLike,
schema: Schema | None,
retry_context: RetryContext | None = None,
) -> ProposedFix | None:
"""Return a deterministic fix for a decimal-shift issue."""
del schema, retry_context
if issue.issue_type != "decimal_shift" or issue.expected is None:
return None
if issue.row >= row_count(df) or issue.column not in column_names(df):
return None
old_value = cell_value(df, issue.row, issue.column)
if old_value == issue.expected:
return None
return ProposedFix(
fix=CellFix(
row=issue.row,
column=issue.column,
old_value=old_value,
new_value=issue.expected,
detector_id="decimal_shift",
),
reason=issue.reason,
confidence=issue.confidence,
provenance="deterministic",
)
|