From 651f1e8f5710700c648eafb4d7c699de13dd88b4 Mon Sep 17 00:00:00 2001 From: Ryan McKenna Date: Mon, 15 Jun 2026 21:18:13 -0700 Subject: [PATCH] Fix incorrect gdp_sigma for one-way marginals in MST mechanism The one-way marginal measurement was passing raw zCDP rho directly as gdp_sigma to measure_marginals_with_noise, instead of first converting it to a Gaussian sigma via accounting.zcdp_gaussian_sigma(). This is now consistent with the two-way marginals code path which already performed the conversion correctly. PiperOrigin-RevId: 932847857 --- dpsynth/discrete_mechanisms/mst.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dpsynth/discrete_mechanisms/mst.py b/dpsynth/discrete_mechanisms/mst.py index 1344d0b..c490f96 100644 --- a/dpsynth/discrete_mechanisms/mst.py +++ b/dpsynth/discrete_mechanisms/mst.py @@ -199,10 +199,12 @@ def run_mechanism( np.random.seed(config.seed) if initial_measurements is None: budget_remaining -= config.one_way_budget_fraction * zcdp_rho + one_way_rho = zcdp_rho * config.one_way_budget_fraction + one_way_sigma = accounting.zcdp_gaussian_sigma(one_way_rho) one_way_measurements = common.measure_marginals_with_noise( data, marginal_queries=[(a,) for a in data.domain], - gdp_sigma=zcdp_rho * config.one_way_budget_fraction, + gdp_sigma=one_way_sigma, ) else: one_way_measurements = initial_measurements