KPrashanth's picture
Deploy Rachana Data Studio
14954f2 verified
Raw
History Blame Contribute Delete
1.98 kB
from __future__ import annotations
from dataclasses import dataclass
from typing import Any
from data_studio.sampling import SamplingManifestV1, reproducible_random_sample
@dataclass(frozen=True)
class AuditPolicy:
policy_id: str
random_sample_size: int
maximum_random_failures: int
risk_sample_size: int
maximum_critical_failures: int = 0
AUDIT_POLICY_100K_DRAFT = AuditPolicy(
policy_id="bulk-100k-draft-v1",
random_sample_size=700,
maximum_random_failures=14,
risk_sample_size=300,
)
def build_audit_samples(
population_ids: list[str],
risk_ids: list[str],
policy: AuditPolicy,
seed: str,
) -> tuple[SamplingManifestV1, SamplingManifestV1]:
random_manifest = reproducible_random_sample(population_ids, policy.random_sample_size, f"{seed}:random")
risk_population = sorted(set(risk_ids).difference(random_manifest.selected_record_ids))
risk_manifest = reproducible_random_sample(risk_population, policy.risk_sample_size, f"{seed}:risk")
return random_manifest, risk_manifest
def audit_promotion_result(
policy: AuditPolicy,
random_result: dict[str, Any],
risk_result: dict[str, Any],
) -> dict[str, Any]:
random_failures = sum(
int(random_result.get(key, 0))
for key in ("minor_failure_count", "major_failure_count", "critical_failure_count")
)
critical = int(random_result.get("critical_failure_count", 0)) + int(
risk_result.get("critical_failure_count", 0)
)
systematic_risk_failure = bool(risk_result.get("systematic_failure", False))
passed = (
random_failures <= policy.maximum_random_failures
and critical <= policy.maximum_critical_failures
and not systematic_risk_failure
)
return {
"policy_id": policy.policy_id,
"passed": passed,
"random_failures": random_failures,
"critical_failures": critical,
"systematic_risk_failure": systematic_risk_failure,
}