class ZExpFamily2:
def noise_privacy_map(
self, _input_metric: L2Distance[RBig], _output_measure: ZeroConcentratedDivergence
) -> PrivacyMap[L2Distance[RBig], ZeroConcentratedDivergence]:
scale = self.scale
if scale < RBig.ZERO: raise "scale must be non-negative"
def privacy_map(d_in: RBig):
if d_in < RBig.ZERO: raise "sensitivity must be non-negative"
if d_in.is_zero(): return 0.0
if scale.is_zero(): return float("inf")
return f64.inf_cast((d_in / scale).pow(2) / rbig(2))
return PrivacyMap.new_fallible(privacy_map)