From 084ebd27a493d8628aa0572762482802a8f9f12e Mon Sep 17 00:00:00 2001 From: anudeep-bonagiri Date: Tue, 9 Jun 2026 00:09:55 -0500 Subject: [PATCH] feat: make DecisionCertificate.__str__ return summary --- src/causalrl/identification/decision.py | 3 +++ tests/test_certify_decision.py | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/src/causalrl/identification/decision.py b/src/causalrl/identification/decision.py index 399d781..f56fb34 100644 --- a/src/causalrl/identification/decision.py +++ b/src/causalrl/identification/decision.py @@ -43,6 +43,9 @@ class DecisionCertificate(NamedTuple): msm_certified: bool | None # MSM layer robust to gamma_max? None if the MSM layer did not run summary: str + def __str__(self) -> str: + return self.summary + def certify_decision( outcomes: Sequence[float], diff --git a/tests/test_certify_decision.py b/tests/test_certify_decision.py index 361a123..391cef9 100644 --- a/tests/test_certify_decision.py +++ b/tests/test_certify_decision.py @@ -107,6 +107,11 @@ def test_summary_is_human_readable(self): assert isinstance(summary, str) and summary assert "prefer treated" in summary + def test_str_returns_summary(self): + y, f, z = _confounded_rows(100, 0.0) + cert = certify_decision(y, f, confounder_bins=z) + assert str(cert) == cert.summary + def test_requires_some_evidence(self): y, f, _ = _confounded_rows(200, 0.0) with pytest.raises(ValueError, match=r"confounder_bins|mi_cap|propensities"):