def test_discrete_laplace_privacy_loss(self, parameter, sensitivity, x, expected_privacy_loss): pld = privacy_loss_distribution.DiscreteLaplacePrivacyLossDistribution( parameter, sensitivity=sensitivity, value_discretization_interval=1) self.assertAlmostEqual(expected_privacy_loss, pld.privacy_loss(x))
def test_laplace_get_delta_for_epsilon(self, parameter, sensitivity, epsilon, expected_divergence): pld = privacy_loss_distribution.DiscreteLaplacePrivacyLossDistribution( parameter, sensitivity=sensitivity, value_discretization_interval=1) self.assertAlmostEqual(expected_divergence, pld.get_delta_for_epsilon(epsilon))
def test_discrete_laplace_privacy_loss_value_errors( self, parameter, sensitivity, x): pld = privacy_loss_distribution.DiscreteLaplacePrivacyLossDistribution( parameter, sensitivity=sensitivity, value_discretization_interval=1) with self.assertRaises(ValueError): pld.privacy_loss(x)
def test_discrete_laplace_varying_standard_deviation_and_sensitivity( self, parameter, sensitivity, expected_rounded_probability_mass_function): pld = privacy_loss_distribution.DiscreteLaplacePrivacyLossDistribution( parameter, sensitivity=sensitivity, value_discretization_interval=1) dictionary_almost_equal( self, expected_rounded_probability_mass_function, pld.rounded_probability_mass_function)
def test_discrete_laplace_optimistic( self, parameter, sensitivity, expected_rounded_probability_mass_function): pld = privacy_loss_distribution.DiscreteLaplacePrivacyLossDistribution( parameter, sensitivity=sensitivity, pessimistic_estimate=False, value_discretization_interval=1) dictionary_almost_equal( self, expected_rounded_probability_mass_function, pld.rounded_probability_mass_function)
def test_discrete_laplace_discretization( self, value_discretization_interval, expected_rounded_probability_mass_function): # Set parameter = 1, sensitivity = 2 here. pld = privacy_loss_distribution.DiscreteLaplacePrivacyLossDistribution( 1, sensitivity=2, value_discretization_interval=value_discretization_interval) dictionary_almost_equal(self, expected_rounded_probability_mass_function, pld.rounded_probability_mass_function)
def test_discrete_laplace_privacy_loss_tail( self, parameter, sensitivity, expected_lower_x_truncation, expected_upper_x_truncation, expected_tail_probability_mass_function): pld = privacy_loss_distribution.DiscreteLaplacePrivacyLossDistribution( parameter, sensitivity=sensitivity, value_discretization_interval=1) tail_pld = pld.privacy_loss_tail() self.assertAlmostEqual(expected_lower_x_truncation, tail_pld.lower_x_truncation) self.assertAlmostEqual(expected_upper_x_truncation, tail_pld.upper_x_truncation) dictionary_almost_equal(self, expected_tail_probability_mass_function, tail_pld.tail_probability_mass_function)
def test_discrete_laplace_value_errors(self, parameter, sensitivity): with self.assertRaises(ValueError): privacy_loss_distribution.DiscreteLaplacePrivacyLossDistribution( parameter, sensitivity=sensitivity)