Exemplo n.º 1
0
 def test_discrete_laplace_get_delta_for_epsilon(self, parameter,
                                                 sensitivity, epsilon,
                                                 expected_delta):
     pl = privacy_loss_mechanism.DiscreteLaplacePrivacyLoss(
         parameter, sensitivity=sensitivity)
     self.assertAlmostEqual(expected_delta,
                            pl.get_delta_for_epsilon(epsilon))
Exemplo n.º 2
0
    def from_discrete_laplace_mechanism(
        cls,
        parameter: float,
        sensitivity: int = 1,
        pessimistic_estimate: bool = True,
        value_discretization_interval: float = 1e-4
    ) -> 'PrivacyLossDistribution':
        """Computes the privacy loss distribution of the Discrete Laplace mechanism.

    Args:
      parameter: the parameter of the discrete Laplace distribution.
      sensitivity: the sensitivity of function f. (i.e. the maximum absolute
        change in f when an input to a single user changes.)
      pessimistic_estimate: a value indicating whether the rounding is done in
        such a way that the resulting epsilon-hockey stick divergence
        computation gives an upper estimate to the real value.
      value_discretization_interval: the length of the dicretization interval
        for the privacy loss distribution. The values will be rounded up/down to
        be integer multiples of this number.

    Returns:
      The privacy loss distribution corresponding to the Discrete Laplace
      mechanism with given parameters.
    """
        return PrivacyLossDistribution.create_from_additive_noise(
            privacy_loss_mechanism.DiscreteLaplacePrivacyLoss(
                parameter, sensitivity=sensitivity),
            pessimistic_estimate=pessimistic_estimate,
            value_discretization_interval=value_discretization_interval)
Exemplo n.º 3
0
 def test_discrete_laplace_inverse_privacy_loss(self, parameter,
                                                sensitivity, privacy_loss,
                                                expected_x):
     pl = privacy_loss_mechanism.DiscreteLaplacePrivacyLoss(
         parameter, sensitivity=sensitivity)
     self.assertAlmostEqual(expected_x,
                            pl.inverse_privacy_loss(privacy_loss))
 def test_discrete_laplace_privacy_loss(self, parameter, sensitivity,
                                        sampling_prob, adjacency_type, x,
                                        expected_privacy_loss):
     pl = privacy_loss_mechanism.DiscreteLaplacePrivacyLoss(
         parameter,
         sensitivity=sensitivity,
         sampling_prob=sampling_prob,
         adjacency_type=adjacency_type)
     self.assertAlmostEqual(expected_privacy_loss, pl.privacy_loss(x))
 def test_discrete_laplace_value_errors(self,
                                        parameter,
                                        sensitivity,
                                        sampling_prob=1.0,
                                        adjacency_type=ADD):
     with self.assertRaises(ValueError):
         privacy_loss_mechanism.DiscreteLaplacePrivacyLoss(
             parameter,
             sensitivity=sensitivity,
             sampling_prob=sampling_prob,
             adjacency_type=adjacency_type)
 def test_discrete_laplace_privacy_loss_tail(
     self, parameter, sensitivity, expected_lower_x_truncation,
     expected_upper_x_truncation, expected_tail_probability_mass_function):
   pl = privacy_loss_mechanism.DiscreteLaplacePrivacyLoss(
       parameter, sensitivity=sensitivity)
   tail_pld = pl.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)
   test_util.dictionary_almost_equal(self,
                                     expected_tail_probability_mass_function,
                                     tail_pld.tail_probability_mass_function)
 def test_discrete_laplace_privacy_loss_value_errors(
         self, parameter, sensitivity, x):
     pl = privacy_loss_mechanism.DiscreteLaplacePrivacyLoss(
         parameter, sensitivity=sensitivity)
     with self.assertRaises(ValueError):
         pl.privacy_loss(x)