Skip to content

Commit

Permalink
Implement pre-thresholding in Privacy on Beam, breaking changes in C++
Browse files Browse the repository at this point in the history
Go:
- Implement pre-thresholding for Count
- Minor test fixes

Privacy on Beam:
- Implement pre-thresholding for all remaining aggregations (DistinctPrivacyID, Sum, Mean, Quantiles, DistinctPerKey)
- Refactor how parameters are passed on internally in order to increase code reuse & test coverage, reduce unnecessary local variables and shorten function signatures which increases readability.
- Minor test fixes

C++:
- Migrate status macros to absl::Status and absl::StatusOr
- Migrate status matchers to absl::Status and absl::StatusOr
- Breaking change: remove own fork of status.h and statusor.h
- Use absl logging
- Remove own logging fork

Change-Id: I9b7cb83be4c9418cde1292e335f9e1ab3b418c9c
GitOrigin-RevId: 7704385dbfb3dc58f39b3d6816a96645e951386e
  • Loading branch information
Differential Privacy Team authored and miracvbasaran committed Aug 22, 2023
1 parent ffed059 commit c89810f
Show file tree
Hide file tree
Showing 69 changed files with 2,505 additions and 2,592 deletions.
8 changes: 5 additions & 3 deletions cc/accounting/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ cc_library(
deps = [
":convolution",
"//accounting/common",
"//base:logging",
"@boost//:lexical_cast",
"@boost//:math",
"@boost//:multiprecision",
Expand All @@ -49,7 +48,7 @@ cc_library(
"@com_google_absl//absl/status:statusor",
"@com_google_absl//absl/strings:str_format",
"@com_google_absl//absl/types:optional",
"@com_google_cc_differential_privacy//base:status",
"@com_google_cc_differential_privacy//base:status_macros",
"@com_google_differential_privacy//proto/accounting:privacy_loss_distribution_cc_proto",
],
)
Expand Down Expand Up @@ -107,6 +106,8 @@ cc_binary(
srcs = ["example.cc"],
deps = [
":pld",
"@com_google_absl//absl/log:check",
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",
"@com_google_absl//absl/strings:str_format",
],
Expand All @@ -117,7 +118,8 @@ cc_library(
hdrs = ["kiss_fft_wrapper.h"],
deps = [
"//accounting/kissfft",
"@com_github_google_glog//:glog",
"@com_google_absl//absl/log:check",
"@com_google_absl//absl/log:die_if_null",
],
)

Expand Down
2 changes: 1 addition & 1 deletion cc/accounting/common/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ cc_library(
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",
"@com_google_absl//absl/strings:str_format",
"@com_google_cc_differential_privacy//base:status",
"@com_google_cc_differential_privacy//base:status_macros",
],
)

Expand Down
6 changes: 6 additions & 0 deletions cc/accounting/example.cc
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include <cstdlib>
#include <memory>

#include "absl/log/check.h"
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "absl/strings/str_format.h"
#include "accounting/privacy_loss_distribution.h"
Expand Down
4 changes: 2 additions & 2 deletions cc/accounting/kiss_fft_wrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@
// limitations under the License.
#ifndef DIFFERENTIAL_PRIVACY_ACCOUNTING_CPP_KISS_FFT_WRAPPER_H_
#define DIFFERENTIAL_PRIVACY_ACCOUNTING_CPP_KISS_FFT_WRAPPER_H_
#define ABSL_DIE_IF_NULL CHECK_NOTNULL

#include <cmath>
#include <complex>

#include "glog/logging.h"
#include "absl/log/check.h"
#include "absl/log/die_if_null.h"
#include "kissfft/kiss_fft.h"
#include "kissfft/kiss_fftr.h"

Expand Down
1 change: 0 additions & 1 deletion cc/accounting/privacy_loss_mechanism.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
#ifndef DIFFERENTIAL_PRIVACY_ACCOUNTING_PRIVACY_LOSS_MECHANISM_H_
#define DIFFERENTIAL_PRIVACY_ACCOUNTING_PRIVACY_LOSS_MECHANISM_H_

#include "base/logging.h"
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "absl/types/optional.h"
Expand Down
58 changes: 25 additions & 33 deletions cc/algorithms/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,12 @@ cc_library(
deps = [
":numerical-mechanisms",
":util",
"//base:logging",
"//proto:util-lib",
"@com_google_absl//absl/log:check",
"@com_google_absl//absl/memory",
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",
"@com_google_absl//absl/strings",
"@com_google_cc_differential_privacy//base:status",
"@com_google_cc_differential_privacy//base:status_macros",
"@com_google_differential_privacy//proto:confidence_interval_cc_proto",
"@com_google_differential_privacy//proto:data_cc_proto",
"@com_google_differential_privacy//proto:summary_cc_proto",
Expand Down Expand Up @@ -82,7 +81,7 @@ cc_library(
"//proto:util-lib",
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",
"@com_google_cc_differential_privacy//base:status",
"@com_google_cc_differential_privacy//base:status_macros",
],
)

Expand Down Expand Up @@ -143,14 +142,13 @@ cc_library(
":bounded-algorithm",
":numerical-mechanisms",
":util",
"//base:logging",
"//proto:util-lib",
"@com_google_absl//absl/log",
"@com_google_absl//absl/memory",
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",
"@com_google_absl//absl/strings",
"@com_google_cc_differential_privacy//base:status",
"@com_google_cc_differential_privacy//base:status_macros",
"@com_google_differential_privacy//proto:confidence_interval_cc_proto",
"@com_google_differential_privacy//proto:data_cc_proto",
"@com_google_differential_privacy//proto:summary_cc_proto",
Expand Down Expand Up @@ -184,18 +182,17 @@ cc_library(
deps = [
":algorithm",
":approx-bounds",
":bounded-algorithm",
":numerical-mechanisms",
":util",
"//algorithms/internal:bounded-mean-ci",
"//base:logging",
"//proto:util-lib",
"@com_google_absl//absl/log",
"@com_google_absl//absl/memory",
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",
"@com_google_absl//absl/strings",
"@com_google_absl//absl/types:optional",
"@com_google_cc_differential_privacy//base:status",
"@com_google_cc_differential_privacy//base:status_macros",
"@com_google_differential_privacy//proto:confidence_interval_cc_proto",
"@com_google_differential_privacy//proto:data_cc_proto",
"@com_google_differential_privacy//proto:summary_cc_proto",
Expand All @@ -212,11 +209,10 @@ cc_test(
":bounded-mean",
":numerical-mechanisms",
":numerical-mechanisms-testing",
"//base:logging",
"//base/testing:proto_matchers",
"//base/testing:status_matchers",
"//proto:util-lib",
"@com_google_absl//absl/memory",
"@com_google_absl//absl/log:check",
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",
"@com_google_differential_privacy//proto:data_cc_proto",
Expand Down Expand Up @@ -252,13 +248,14 @@ cc_library(
":bounded-algorithm",
":numerical-mechanisms",
":util",
"//base:logging",
"//proto:util-lib",
"@com_google_absl//absl/log",
"@com_google_absl//absl/log:check",
"@com_google_absl//absl/memory",
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",
"@com_google_absl//absl/strings",
"@com_google_cc_differential_privacy//base:status",
"@com_google_cc_differential_privacy//base:status_macros",
"@com_google_differential_privacy//proto:data_cc_proto",
"@com_google_differential_privacy//proto:summary_cc_proto",
],
Expand All @@ -273,10 +270,10 @@ cc_test(
":bounded-variance",
":numerical-mechanisms",
":numerical-mechanisms-testing",
"//base:logging",
"//base/testing:proto_matchers",
"//base/testing:status_matchers",
"//proto:util-lib",
"@com_google_absl//absl/log:check",
"@com_google_absl//absl/memory",
"@com_google_absl//absl/random:distributions",
"@com_google_absl//absl/status",
Expand All @@ -298,12 +295,11 @@ cc_library(
":bounded-variance",
":numerical-mechanisms",
":util",
"//base:logging",
"//proto:util-lib",
"@com_google_absl//absl/memory",
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",
"@com_google_cc_differential_privacy//base:status",
"@com_google_cc_differential_privacy//base:status_macros",
"@com_google_differential_privacy//proto:data_cc_proto",
"@com_google_differential_privacy//proto:summary_cc_proto",
],
Expand Down Expand Up @@ -334,12 +330,11 @@ cc_library(
":algorithm",
":numerical-mechanisms",
":util",
"//base:logging",
"//proto:util-lib",
"@com_google_absl//absl/memory",
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",
"@com_google_cc_differential_privacy//base:status",
"@com_google_cc_differential_privacy//base:status_macros",
"@com_google_differential_privacy//proto:confidence_interval_cc_proto",
"@com_google_differential_privacy//proto:data_cc_proto",
"@com_google_differential_privacy//proto:summary_cc_proto",
Expand All @@ -354,7 +349,6 @@ cc_test(
":count",
":numerical-mechanisms",
":numerical-mechanisms-testing",
"//base:logging",
"//base/testing:proto_matchers",
"//base/testing:status_matchers",
"//proto:util-lib",
Expand All @@ -377,12 +371,13 @@ cc_library(
"//testing:__pkg__",
],
deps = [
"//base:logging",
"@com_google_absl//absl/base:core_headers",
"@com_google_absl//absl/log:check",
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",
"@com_google_absl//absl/strings",
"@com_google_cc_differential_privacy//base:status",
"@com_google_absl//absl/types:optional",
"@com_google_cc_differential_privacy//base:status_macros",
],
)

Expand All @@ -408,13 +403,12 @@ cc_library(
deps = [
":rand",
":util",
"//base:logging",
"@com_google_absl//absl/memory",
"@com_google_absl//absl/random",
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",
"@com_google_absl//absl/strings",
"@com_google_cc_differential_privacy//base:status",
"@com_google_cc_differential_privacy//base:status_macros",
"@com_google_differential_privacy//third_party/cephes:inverse_gaussian_cdf",
],
)
Expand Down Expand Up @@ -445,15 +439,15 @@ cc_library(
":rand",
":util",
"//algorithms/internal:gaussian-stddev-calculator",
"//base:logging",
"@com_google_absl//absl/base:core_headers",
"@com_google_absl//absl/log:check",
"@com_google_absl//absl/memory",
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",
"@com_google_absl//absl/strings",
"@com_google_absl//absl/strings:str_format",
"@com_google_absl//absl/types:optional",
"@com_google_cc_differential_privacy//base:status",
"@com_google_cc_differential_privacy//base:status_macros",
"@com_google_differential_privacy//proto:confidence_interval_cc_proto",
"@com_google_differential_privacy//proto:numerical_mechanism_cc_proto",
],
Expand All @@ -480,7 +474,6 @@ cc_library(
deps = [
":distributions",
":numerical-mechanisms",
"//base:logging",
"@com_google_absl//absl/memory",
"@com_google_absl//absl/random",
"@com_google_absl//absl/status:statusor",
Expand All @@ -507,13 +500,13 @@ cc_library(
":algorithm",
":numerical-mechanisms",
":util",
"//base:logging",
"//proto:util-lib",
"@com_google_absl//absl/log",
"@com_google_absl//absl/memory",
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",
"@com_google_absl//absl/strings",
"@com_google_cc_differential_privacy//base:status",
"@com_google_cc_differential_privacy//base:status_macros",
],
)

Expand Down Expand Up @@ -543,7 +536,7 @@ cc_library(
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",
"@com_google_absl//absl/types:optional",
"@com_google_cc_differential_privacy//base:status",
"@com_google_cc_differential_privacy//base:status_macros",
],
)

Expand All @@ -569,10 +562,10 @@ cc_library(
"//testing:__pkg__",
],
deps = [
"//base:logging",
"@boringssl//:crypto",
"@com_google_absl//absl/base:core_headers",
"@com_google_absl//absl/flags:flag",
"@com_google_absl//absl/log:check",
"@com_google_absl//absl/numeric:bits",
"@com_google_absl//absl/synchronization",
],
Expand Down Expand Up @@ -610,7 +603,7 @@ cc_library(
":util",
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",
"@com_google_cc_differential_privacy//base:status",
"@com_google_cc_differential_privacy//base:status_macros",
],
)

Expand Down Expand Up @@ -642,7 +635,7 @@ cc_library(
"//proto:util-lib",
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",
"@com_google_cc_differential_privacy//base:status",
"@com_google_cc_differential_privacy//base:status_macros",
"@com_google_differential_privacy//proto:confidence_interval_cc_proto",
"@com_google_differential_privacy//proto:summary_cc_proto",
],
Expand Down Expand Up @@ -720,7 +713,6 @@ cc_library(
deps = [
":numerical-mechanisms",
":partition-selection",
"//base:logging",
"@com_google_absl//absl/status:statusor",
"@com_google_googletest//:gtest",
],
Expand Down
23 changes: 10 additions & 13 deletions cc/algorithms/algorithm.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,16 @@
#ifndef DIFFERENTIAL_PRIVACY_ALGORITHMS_ALGORITHM_H_
#define DIFFERENTIAL_PRIVACY_ALGORITHMS_ALGORITHM_H_

#include <algorithm>
#include <cstdint>
#include <limits>
#include <memory>
#include <optional>
#include <string>
#include <utility>

#include <cstdint>
#include "base/logging.h"
#include "absl/log/check.h"
#include "absl/memory/memory.h"
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "absl/strings/str_cat.h"
#include "algorithms/numerical-mechanisms.h"
#include "algorithms/util.h"
#include "proto/util.h"
Expand Down Expand Up @@ -235,22 +232,22 @@ class AlgorithmBuilder {
}

private:
absl::optional<double> epsilon_;
absl::optional<double> delta_;
absl::optional<int> l0_sensitivity_;
absl::optional<int> max_contributions_per_partition_;
std::optional<double> epsilon_;
std::optional<double> delta_;
std::optional<int> l0_sensitivity_;
std::optional<int> max_contributions_per_partition_;

// The mechanism builder is used to interject custom mechanisms for testing.
std::unique_ptr<NumericalMechanismBuilder> mechanism_builder_ =
absl::make_unique<LaplaceMechanism::Builder>();

protected:
absl::optional<double> GetEpsilon() const { return epsilon_; }
absl::optional<double> GetDelta() const { return delta_; }
absl::optional<int> GetMaxPartitionsContributed() const {
std::optional<double> GetEpsilon() const { return epsilon_; }
std::optional<double> GetDelta() const { return delta_; }
std::optional<int> GetMaxPartitionsContributed() const {
return l0_sensitivity_;
}
absl::optional<int> GetMaxContributionsPerPartition() const {
std::optional<int> GetMaxContributionsPerPartition() const {
return max_contributions_per_partition_;
}

Expand Down
Loading

0 comments on commit c89810f

Please sign in to comment.