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"):