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)