예제 #1
0
 def test_compose_and_get_epsilon_for_delta(self):
     pld1 = privacy_loss_distribution.PrivacyLossDistribution(
         {
             0: 0.1,
             1: 0.7,
             2: 0.1
         }, 0.4, 0.1)
     pld2 = privacy_loss_distribution.PrivacyLossDistribution(
         {
             1: 0.1,
             2: 0.6,
             3: 0.25
         }, 0.4, 0.05)
     self.assertAlmostEqual(
         0.29560003, pld1.get_delta_for_epsilon_for_composed_pld(pld2, 1.1))
예제 #2
0
 def test_get_epsilon_for_delta(self, rounded_probability_mass_function,
                                value_discretization_interval,
                                infinity_mass, delta, expected_epsilon):
     pld = privacy_loss_distribution.PrivacyLossDistribution(
         rounded_probability_mass_function, value_discretization_interval,
         infinity_mass)
     self.assertAlmostEqual(expected_epsilon,
                            pld.get_epsilon_for_delta(delta))
예제 #3
0
 def test_composition_with_truncation(self):
     pld1 = privacy_loss_distribution.PrivacyLossDistribution(
         {
             0: 0.1,
             1: 0.7,
             2: 0.1
         }, 1, 0.1)
     pld2 = privacy_loss_distribution.PrivacyLossDistribution(
         {
             0: 0.1,
             1: 0.6,
             2: 0.2
         }, 1, 0.1)
     pld_composed = pld1.compose(pld2, tail_mass_truncation=0.021)
     self.assertAlmostEqual(pld_composed.infinity_mass, 0.211)
     test_util.dictionary_almost_equal(
         self, {
             1: 0.13,
             2: 0.45,
             3: 0.20,
             4: 0.02,
         }, pld_composed.rounded_probability_mass_function)
예제 #4
0
    def test_identity(self):
        pld = privacy_loss_distribution.PrivacyLossDistribution.identity()
        test_util.dictionary_almost_equal(
            self, pld.rounded_probability_mass_function, {0: 1})
        self.assertAlmostEqual(pld.infinity_mass, 0)

        pld = pld.compose(
            privacy_loss_distribution.PrivacyLossDistribution({
                1: 0.5,
                -1: 0.5
            }, 1e-4, 0))
        test_util.dictionary_almost_equal(
            self, pld.rounded_probability_mass_function, {
                1: 0.5,
                -1: 0.5
            })
        self.assertAlmostEqual(pld.infinity_mass, 0)