"""Base Issue class.""" from dataclasses import dataclass, field from typing import Callable import numpy as np import pandas as pd @dataclass class Issue: id: str name: str category: str description: str severity: str # low | medium | high | critical default_rate: float inject: Callable[[pd.DataFrame, float, np.random.Generator], pd.DataFrame] def __str__(self): return f"[{self.severity.upper()}] {self.id} ({self.category}): {self.description}" def pick_rows(df: pd.DataFrame, rate: float, rng: np.random.Generator) -> np.ndarray: """Return boolean mask selecting ~rate fraction of rows.""" return rng.random(len(df)) < rate