def test_gaussian_sum_no_clip_no_noise(self): record1 = torch.tensor([2.0, 0.0]) record2 = torch.tensor([-1.0, 1.0]) query = gaussian_query.GaussianSumQuery(l2_norm_clip=10.0, stddev=0.0) query_result, _ = run_query(query, [record1, record2]) expected = np.asarray([1.0, 1.0]) assert_allclose(query_result, expected)
def test_gaussian_sum_with_clip_no_noise(self): record1 = torch.tensor([-6.0, 8.0]) # Clipped to [-3.0, 4.0]. record2 = torch.tensor([4.0, -3.0]) # Not clipped. query = gaussian_query.GaussianSumQuery(l2_norm_clip=5.0, stddev=0.0) query_result, _ = run_query(query, [record1, record2]) expected = np.asarray([1.0, 1.0]) assert_allclose(query_result, expected)
def get_sample_state(records): query = gaussian_query.GaussianSumQuery(l2_norm_clip=10.0, stddev=1.0) global_state = query.initial_global_state() params = query.derive_sample_params(global_state) sample_state = query.initial_sample_state(records[0]) for record in records: sample_state = query.accumulate_record(params, sample_state, record) return sample_state
def test_gaussian_sum_with_noise(self): record1, record2 = 2.71828, 3.14159 stddev = 1.0 query = gaussian_query.GaussianSumQuery(l2_norm_clip=5.0, stddev=stddev) query_result, _ = run_query(query, torch.tensor([record1, record2])) noised_sums = [] for _ in xrange(1000): noised_sums.append(query_result) result_stddev = np.std(noised_sums) assert_near(result_stddev, stddev, 0.1)
def test_gaussian_sum_merge(self): records1 = [torch.tensor([2.0, 0.0]), torch.tensor([-1.0, 1.0])] records2 = [torch.tensor([3.0, 5.0]), torch.tensor([-1.0, 4.0])] def get_sample_state(records): query = gaussian_query.GaussianSumQuery(l2_norm_clip=10.0, stddev=1.0) global_state = query.initial_global_state() params = query.derive_sample_params(global_state) sample_state = query.initial_sample_state(records[0]) for record in records: sample_state = query.accumulate_record(params, sample_state, record) return sample_state sample_state_1 = get_sample_state(records1) sample_state_2 = get_sample_state(records2) merged = gaussian_query.GaussianSumQuery( 10.0, 1.0).merge_sample_states(sample_state_1, sample_state_2) expected = np.asarray([3.0, 10.0]) assert_allclose(merged, expected)