From fd0020dc401799a78c3d5d870b4b5e955d69fa7e Mon Sep 17 00:00:00 2001 From: Differential Privacy Team Date: Mon, 4 Dec 2023 07:48:16 -0800 Subject: [PATCH] Update dependencies Update dependencies for Go, Java, and C++ DP Libs, and for Privacy on Beam. Privacy on Beam: * Implement scalable public partitions for KV types Change-Id: I7b982e1bb1e5640a354ac7ac5a7ed0330be1a913 GitOrigin-RevId: ae90caf4628ab57ec861b51a0db50311ac170ed5 --- cc/accounting/BUILD | 1 - .../internal/bounded-mean-ci_test.cc | 1 + cc/cc_accounting_deps.bzl | 16 - cc/cc_differential_privacy_deps.bzl | 30 +- examples/go/deps.bzl | 54 +- examples/go/go.mod | 8 +- examples/go/go.sum | 18 +- go/go.mod | 8 +- go/go.sum | 16 +- go/go_differential_privacy_deps.bzl | 16 +- java/dp_java_deps.bzl | 18 +- java/maven_install.json | 80 +- privacy-on-beam/go.mod | 52 +- privacy-on-beam/go.sum | 127 +- privacy-on-beam/pbeam/aggregations.go | 152 +- privacy-on-beam/pbeam/aggregations_test.go | 42 +- privacy-on-beam/pbeam/count.go | 4 +- privacy-on-beam/pbeam/distinct_id.go | 2 +- privacy-on-beam/pbeam/mean.go | 55 +- .../pbeam/pbeamtest/pbeamtest_test.go | 4 +- privacy-on-beam/pbeam/public_partitions.go | 154 +- .../pbeam/public_partitions_test.go | 8 +- privacy-on-beam/pbeam/quantiles.go | 66 +- privacy-on-beam/pbeam/quantiles_test.go | 14 +- privacy-on-beam/pbeam/sum.go | 111 +- privacy-on-beam/pbeam/sum_test.go | 38 +- privacy-on-beam/pbeam/testutils/testutils.go | 2 +- privacy-on-beam/privacy_on_beam_deps.bzl | 1258 +++++++++++------ .../pld/privacy_loss_mechanism.py | 2 +- 29 files changed, 1340 insertions(+), 1017 deletions(-) diff --git a/cc/accounting/BUILD b/cc/accounting/BUILD index 7e08b141..97fbbce0 100644 --- a/cc/accounting/BUILD +++ b/cc/accounting/BUILD @@ -42,7 +42,6 @@ cc_library( "@boost//:lexical_cast", "@boost//:math", "@boost//:multiprecision", - "@com_github_google_glog//:glog", "@com_google_absl//absl/container:flat_hash_map", "@com_google_absl//absl/status", "@com_google_absl//absl/status:statusor", diff --git a/cc/algorithms/internal/bounded-mean-ci_test.cc b/cc/algorithms/internal/bounded-mean-ci_test.cc index 61569a5c..0f96da94 100644 --- a/cc/algorithms/internal/bounded-mean-ci_test.cc +++ b/cc/algorithms/internal/bounded-mean-ci_test.cc @@ -252,6 +252,7 @@ TEST(BoundedMeanCiTest, TEST(BoundedMeanCiTest, InfiniteNoisedParamsReturnsDefaultCi) { BoundedMeanConfidenceIntervalParams params; + params.confidence_level = 0.9; params.lower_bound = -1.0; params.upper_bound = 1.0; params.noised_sum = std::numeric_limits::infinity(); diff --git a/cc/cc_accounting_deps.bzl b/cc/cc_accounting_deps.bzl index 218d7be4..ffcad1c2 100644 --- a/cc/cc_accounting_deps.bzl +++ b/cc/cc_accounting_deps.bzl @@ -28,22 +28,6 @@ def cc_accounting_deps(): sha256 = "93cfa11a344ad552472f7d93c228d55969ac586275692d73d5e7ce73a69b047f", ) - # Begin GLog - http_archive( - name = "com_github_gflags_gflags", - sha256 = "34af2f15cf7367513b352bdcd2493ab14ce43692d2dcd9dfc499492966c64dcf", - strip_prefix = "gflags-2.2.2", - urls = ["https://github.com/gflags/gflags/archive/v2.2.2.tar.gz"], - ) - - http_archive( - name = "com_github_google_glog", - sha256 = "62efeb57ff70db9ea2129a16d0f908941e355d09d6d83c9f7b18557c0a7ab59e", - strip_prefix = "glog-d516278b1cd33cd148e8989aec488b6049a4ca0b", - urls = ["https://github.com/google/glog/archive/d516278b1cd33cd148e8989aec488b6049a4ca0b.zip"], - ) - # End Glog - # Begin Boost git_repository( name = "com_github_nelhage_rules_boost", diff --git a/cc/cc_differential_privacy_deps.bzl b/cc/cc_differential_privacy_deps.bzl index 3c4212c5..7ec223b1 100644 --- a/cc/cc_differential_privacy_deps.bzl +++ b/cc/cc_differential_privacy_deps.bzl @@ -34,36 +34,36 @@ def cc_differential_privacy_deps(): # Common bazel rules. Also required for Abseil. http_archive( name = "bazel_skylib", - sha256 = "b8a1527901774180afc798aeb28c4634bdccf19c4d98e7bdd1ce79d1fe9aaad7", + sha256 = "cd55a062e763b9349921f0f5db8c3933288dc8ba4f76dd9416aac68acee3cb94", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.4.1/bazel-skylib-1.4.1.tar.gz", - "https://github.com/bazelbuild/bazel-skylib/releases/download/1.4.1/bazel-skylib-1.4.1.tar.gz", + "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.5.0/bazel-skylib-1.5.0.tar.gz", + "https://github.com/bazelbuild/bazel-skylib/releases/download/1.5.0/bazel-skylib-1.5.0.tar.gz", ], ) # GoogleTest/GoogleMock framework. Used by most unit-tests. http_archive( name = "com_google_googletest", - url = "https://github.com/google/googletest/archive/refs/tags/v1.13.0.tar.gz", - strip_prefix = "googletest-1.13.0", - sha256 = "ad7fdba11ea011c1d925b3289cf4af2c66a352e18d4c7264392fead75e919363", + url = "https://github.com/google/googletest/archive/refs/tags/v1.14.0.tar.gz", + strip_prefix = "googletest-1.14.0", + sha256 = "8ad598c73ad796e0d8280b082cebd82a630d73e73cd3c70057938a6501bba5d7", ) # RE2 is a requirement for GoogleTest http_archive( name = "com_googlesource_code_re2", - sha256 = "1726508efc93a50854c92e3f7ac66eb28f0e57652e413f11d7c1e28f97d997ba", - strip_prefix = "re2-03da4fc0857c285e3a26782f6bc8931c4c950df4", + sha256 = "4e6593ac3c71de1c0f322735bc8b0492a72f66ffccfad76e259fa21c41d27d8a", + strip_prefix = "re2-2023-11-01", # release 2023-06-01 - url = "https://github.com/google/re2/archive/03da4fc0857c285e3a26782f6bc8931c4c950df4.zip", + url = "https://github.com/google/re2/releases/download/2023-11-01/re2-2023-11-01.tar.gz", ) # Benchmarks for testing. http_archive( name = "com_google_benchmark", - url = "https://github.com/google/benchmark/archive/refs/tags/v1.7.1.tar.gz", - sha256 = "6430e4092653380d9dc4ccb45a1e2dc9259d581f4866dc0759713126056bc1d7", - strip_prefix = "benchmark-1.7.1", + url = "https://github.com/google/benchmark/archive/refs/tags/v1.8.3.tar.gz", + sha256 = "6bc180a57d23d4d9515519f92b0c83d61b05b5bab188961f36ac7b06b0d9e9ce", + strip_prefix = "benchmark-1.8.3", ) # BoringSSL for cryptographic PRNG @@ -79,9 +79,9 @@ def cc_differential_privacy_deps(): # Supports `./configure && make` style packages to become dependencies. http_archive( name = "rules_foreign_cc", - strip_prefix = "rules_foreign_cc-0.9.0", - url = "https://github.com/bazelbuild/rules_foreign_cc/archive/0.9.0.tar.gz", - sha256 = "2a4d07cd64b0719b39a7c12218a3e507672b82a97b98c6a89d38565894cf7c51", + strip_prefix = "rules_foreign_cc-0.10.1", + url = "https://github.com/bazelbuild/rules_foreign_cc/releases/download/0.10.1/rules_foreign_cc-0.10.1.tar.gz", + sha256 = "476303bd0f1b04cc311fc258f1708a5f6ef82d3091e53fd1977fa20383425a6a", ) # Postgres depends on rules_foreign_cc. Use postgres 12. diff --git a/examples/go/deps.bzl b/examples/go/deps.bzl index 2e5aaeab..a141662c 100644 --- a/examples/go/deps.bzl +++ b/examples/go/deps.bzl @@ -33,14 +33,14 @@ def go_differential_privacy_examples_deps(): go_repository( name = "com_github_go_fonts_liberation", importpath = "github.com/go-fonts/liberation", - sum = "h1:jAkAWJP4S+OsrPLZM4/eC9iW7CtHy+HBXrEwZXWo5VM=", - version = "v0.2.0", + sum = "h1:3BI2iaE7R/s6uUUtzNCjo3QijJu3aS4wmrMgfSpYQ+8=", + version = "v0.3.0", ) go_repository( name = "com_github_go_latex_latex", importpath = "github.com/go-latex/latex", - sum = "h1:6zl3BbBhdnMkpSj2YY30qV3gDcVBGtFgVsV3+/i+mKQ=", - version = "v0.0.0-20210823091927-c0d11ff05a81", + sum = "h1:NxXI5pTAtpEaU49bpLpQoDsu1zrteW/vxzTz8Cd2UAs=", + version = "v0.0.0-20230307184459-12ec69307ad9", ) go_repository( name = "com_github_go_pdf_fpdf", @@ -48,6 +48,13 @@ def go_differential_privacy_examples_deps(): sum = "h1:MlgtGIfsdMEEQJr2le6b/HNr1ZlQwxyWr77r2aj2U/8=", version = "v0.6.0", ) + go_repository( + name = "com_github_goccmack_gocc", + importpath = "github.com/goccmack/gocc", + sum = "h1:FSii2UQeSLngl3jFoR4tUKZLprO7qUlh/TKKticc0BM=", + version = "v0.0.0-20230228185258-2292f9e40198", + ) + go_repository( name = "com_github_golang_freetype", importpath = "github.com/golang/freetype", @@ -58,14 +65,14 @@ def go_differential_privacy_examples_deps(): go_repository( name = "com_github_golang_glog", importpath = "github.com/golang/glog", - sum = "h1:jxpi2eWoU84wbX9iIEyAeeoac3FLuifZpY9tcNUD9kw=", - version = "v1.1.1", + sum = "h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68=", + version = "v1.2.0", ) go_repository( name = "com_github_google_go_cmp", importpath = "github.com/google/go-cmp", - sum = "h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=", - version = "v0.5.9", + sum = "h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=", + version = "v0.6.0", ) go_repository( @@ -84,45 +91,40 @@ def go_differential_privacy_examples_deps(): go_repository( name = "org_golang_x_exp", importpath = "golang.org/x/exp", - sum = "h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug=", - version = "v0.0.0-20230321023759-10a507213a29", + sum = "h1:Gvh4YaCaXNs6dKTlfgismwWZKyjVZXwOPfIyUaqU3No=", + version = "v0.0.0-20231127185646-65229373498e", ) go_repository( name = "org_golang_x_image", importpath = "golang.org/x/image", - sum = "h1:TcHcE0vrmgzNH1v3ppjcMGbhG5+9fMuvOmUYwNEF4q4=", - version = "v0.0.0-20220302094943-723b81ca9867", + sum = "h1:bR8b5okrPI3g/gyZakLZHeWxAR8Dn5CyxXv1hLH5g/4=", + version = "v0.6.0", ) go_repository( name = "org_golang_x_mod", importpath = "golang.org/x/mod", - sum = "h1:b9gGHsz9/HhJ3HF5DHQytPpuwocVTChQJK3AvoLRD5I=", - version = "v0.6.0", - ) - go_repository( - name = "org_golang_x_sys", - importpath = "golang.org/x/sys", - sum = "h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U=", - version = "v0.1.0", + sum = "h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=", + version = "v0.14.0", ) + go_repository( name = "org_golang_x_text", importpath = "golang.org/x/text", - sum = "h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=", - version = "v0.3.7", + sum = "h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68=", + version = "v0.8.0", ) go_repository( name = "org_golang_x_tools", importpath = "golang.org/x/tools", - sum = "h1:G6AHpWxTMGY1KyEYoAQ5WTtIekUUvDNjan3ugu60JvE=", - version = "v0.2.0", + sum = "h1:GO788SKMRunPIBCXiQyo2AaexLstOrVhuAL5YwsckQM=", + version = "v0.16.0", ) go_repository( name = "org_gonum_v1_gonum", importpath = "gonum.org/v1/gonum", - sum = "h1:xKuo6hzt+gMav00meVPUlXwSdoEJP46BR+wdxQEFK2o=", - version = "v0.12.0", + sum = "h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0=", + version = "v0.14.0", ) go_repository( name = "org_gonum_v1_plot", diff --git a/examples/go/go.mod b/examples/go/go.mod index afa47f82..11750cc2 100644 --- a/examples/go/go.mod +++ b/examples/go/go.mod @@ -3,11 +3,11 @@ module github.com/google/differential-privacy/examples/go go 1.19 require ( - github.com/golang/glog v1.1.1 - github.com/google/differential-privacy/go/v2 v2.1.0 + github.com/golang/glog v1.2.0 + github.com/google/differential-privacy/go/v2 v2.1.1-0.20230822150926-c89810faa5ad ) require ( - golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect - gonum.org/v1/gonum v0.12.0 // indirect + golang.org/x/exp v0.0.0-20231127185646-65229373498e // indirect + gonum.org/v1/gonum v0.14.0 // indirect ) diff --git a/examples/go/go.sum b/examples/go/go.sum index 732fc79d..d71503f4 100644 --- a/examples/go/go.sum +++ b/examples/go/go.sum @@ -1,9 +1,9 @@ -github.com/golang/glog v1.1.1 h1:jxpi2eWoU84wbX9iIEyAeeoac3FLuifZpY9tcNUD9kw= -github.com/golang/glog v1.1.1/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= -github.com/google/differential-privacy/go/v2 v2.1.0 h1:v3hCOAaUMnY7Fkk+osv3cgMXUAFqaI2l8agICV6IJl4= -github.com/google/differential-privacy/go/v2 v2.1.0/go.mod h1:KRaNc5O0mzJ6cBC3iJbQNk9OHTzRLdmp1IXMaFlOxt8= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug= -golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -gonum.org/v1/gonum v0.12.0 h1:xKuo6hzt+gMav00meVPUlXwSdoEJP46BR+wdxQEFK2o= -gonum.org/v1/gonum v0.12.0/go.mod h1:73TDxJfAAHeA8Mk9mf8NlIppyhQNo5GLTcYeqgo2lvY= +github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68= +github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= +github.com/google/differential-privacy/go/v2 v2.1.1-0.20230822150926-c89810faa5ad h1:iDEy82z1Uw4MeXs9IRC04dCtyPfIMjJr9lBwo5GXOPA= +github.com/google/differential-privacy/go/v2 v2.1.1-0.20230822150926-c89810faa5ad/go.mod h1:KRaNc5O0mzJ6cBC3iJbQNk9OHTzRLdmp1IXMaFlOxt8= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +golang.org/x/exp v0.0.0-20231127185646-65229373498e h1:Gvh4YaCaXNs6dKTlfgismwWZKyjVZXwOPfIyUaqU3No= +golang.org/x/exp v0.0.0-20231127185646-65229373498e/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= +gonum.org/v1/gonum v0.14.0 h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0= +gonum.org/v1/gonum v0.14.0/go.mod h1:AoWeoz0becf9QMWtE8iWXNXc27fK4fNeHNf/oMejGfU= diff --git a/go/go.mod b/go/go.mod index 103d6b6f..5c571894 100644 --- a/go/go.mod +++ b/go/go.mod @@ -3,9 +3,9 @@ module github.com/google/differential-privacy/go/v2 go 1.19 require ( - github.com/golang/glog v1.1.1 - github.com/google/go-cmp v0.5.9 - gonum.org/v1/gonum v0.12.0 + github.com/golang/glog v1.1.2 + github.com/google/go-cmp v0.6.0 + gonum.org/v1/gonum v0.14.0 ) -require golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect +require golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect diff --git a/go/go.sum b/go/go.sum index 65af9f03..e64134f1 100644 --- a/go/go.sum +++ b/go/go.sum @@ -1,8 +1,8 @@ -github.com/golang/glog v1.1.1 h1:jxpi2eWoU84wbX9iIEyAeeoac3FLuifZpY9tcNUD9kw= -github.com/golang/glog v1.1.1/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug= -golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -gonum.org/v1/gonum v0.12.0 h1:xKuo6hzt+gMav00meVPUlXwSdoEJP46BR+wdxQEFK2o= -gonum.org/v1/gonum v0.12.0/go.mod h1:73TDxJfAAHeA8Mk9mf8NlIppyhQNo5GLTcYeqgo2lvY= +github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo= +github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= +golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= +gonum.org/v1/gonum v0.14.0 h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0= +gonum.org/v1/gonum v0.14.0/go.mod h1:AoWeoz0becf9QMWtE8iWXNXc27fK4fNeHNf/oMejGfU= diff --git a/go/go_differential_privacy_deps.bzl b/go/go_differential_privacy_deps.bzl index 446810f3..2d5df766 100644 --- a/go/go_differential_privacy_deps.bzl +++ b/go/go_differential_privacy_deps.bzl @@ -59,14 +59,14 @@ def go_differential_privacy_deps(): go_repository( name = "com_github_golang_glog", importpath = "github.com/golang/glog", - sum = "h1:jxpi2eWoU84wbX9iIEyAeeoac3FLuifZpY9tcNUD9kw=", - version = "v1.1.1", + sum = "h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo=", + version = "v1.1.2", ) go_repository( name = "com_github_google_go_cmp", importpath = "github.com/google/go-cmp", - sum = "h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=", - version = "v0.5.9", + sum = "h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=", + version = "v0.6.0", ) go_repository( @@ -85,8 +85,8 @@ def go_differential_privacy_deps(): go_repository( name = "org_golang_x_exp", importpath = "golang.org/x/exp", - sum = "h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug=", - version = "v0.0.0-20230321023759-10a507213a29", + sum = "h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ=", + version = "v0.0.0-20231110203233-9a3e6036ecaa", ) go_repository( name = "org_golang_x_image", @@ -124,8 +124,8 @@ def go_differential_privacy_deps(): go_repository( name = "org_gonum_v1_gonum", importpath = "gonum.org/v1/gonum", - sum = "h1:xKuo6hzt+gMav00meVPUlXwSdoEJP46BR+wdxQEFK2o=", - version = "v0.12.0", + sum = "h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0=", + version = "v0.14.0", ) go_repository( name = "org_gonum_v1_plot", diff --git a/java/dp_java_deps.bzl b/java/dp_java_deps.bzl index 0e2e7c1a..2188640e 100644 --- a/java/dp_java_deps.bzl +++ b/java/dp_java_deps.bzl @@ -8,18 +8,18 @@ def dp_java_deps(): artifacts = [ # artifacts for building and testing "org.apache.commons:commons-math3:3.6.1", - "com.google.auto.value:auto-value-annotations:1.10.1", - "com.google.auto.value:auto-value:1.10.1", + "com.google.auto.value:auto-value-annotations:1.10.4", + "com.google.auto.value:auto-value:1.10.4", "com.google.code.findbugs:jsr305:3.0.2", - "com.google.errorprone:error_prone_annotations:2.18.0", - "com.google.guava:guava:31.1-jre", - "com.google.protobuf:protobuf-java:3.22.2", + "com.google.errorprone:error_prone_annotations:2.23.0", + "com.google.guava:guava:32.1.3-jre", + "com.google.protobuf:protobuf-java:3.25.0", # artifacts for testing only - "org.mockito:mockito-core:4.11.0", + "org.mockito:mockito-core:5.7.0", "junit:junit:4.13.2", - "com.google.truth:truth:1.1.3", - "com.google.truth.extensions:truth-java8-extension:1.1.3", - "com.google.testparameterinjector:test-parameter-injector:1.10", + "com.google.truth:truth:1.1.5", + "com.google.truth.extensions:truth-java8-extension:1.1.5", + "com.google.testparameterinjector:test-parameter-injector:1.14", ], repositories = [ "https://jcenter.bintray.com/", diff --git a/java/maven_install.json b/java/maven_install.json index 5806ec5d..831bebc9 100644 --- a/java/maven_install.json +++ b/java/maven_install.json @@ -1,19 +1,19 @@ { "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", - "__INPUT_ARTIFACTS_HASH": 104750539, - "__RESOLVED_ARTIFACTS_HASH": 116392229, + "__INPUT_ARTIFACTS_HASH": 1818957762, + "__RESOLVED_ARTIFACTS_HASH": -1022974526, "artifacts": { "com.google.auto.value:auto-value": { "shasums": { - "jar": "ea78010d82efdb2f919b16faed9e6427f07d2998a15c4f619cdc6a6164ecd336" + "jar": "f3c438d1f82904bbcb452084d488b660f3c7488e9274c3a58f049e121632d434" }, - "version": "1.10.1" + "version": "1.10.4" }, "com.google.auto.value:auto-value-annotations": { "shasums": { - "jar": "a4fe0a211925e938a8510d741763ee1171a11bf931f5891ef4d4ee84fca72be2" + "jar": "e1c45e6beadaef9797cb0d9afd5a45621ad061cd8632012f85582853a3887825" }, - "version": "1.10.1" + "version": "1.10.4" }, "com.google.code.findbugs:jsr305": { "shasums": { @@ -23,9 +23,9 @@ }, "com.google.errorprone:error_prone_annotations": { "shasums": { - "jar": "9e6814cb71816988a4fd1b07a993a8f21bb7058d522c162b1de849e19bea54ae" + "jar": "ec6f39f068b6ff9ac323c68e28b9299f8c0a80ca512dccb1d4a70f40ac3ec054" }, - "version": "2.18.0" + "version": "2.23.0" }, "com.google.guava:failureaccess": { "shasums": { @@ -35,9 +35,9 @@ }, "com.google.guava:guava": { "shasums": { - "jar": "a42edc9cab792e39fe39bb94f3fca655ed157ff87a8af78e1d6ba5b07c4a00ab" + "jar": "6d4e2b5a118aab62e6e5e29d185a0224eed82c85c40ac3d33cf04a270c3b3744" }, - "version": "31.1-jre" + "version": "32.1.3-jre" }, "com.google.guava:listenablefuture": { "shasums": { @@ -47,33 +47,33 @@ }, "com.google.j2objc:j2objc-annotations": { "shasums": { - "jar": "21af30c92267bd6122c0e0b4d20cccb6641a37eaf956c6540ec471d584e64a7b" + "jar": "f02a95fa1a5e95edb3ed859fd0fb7df709d121a35290eff8b74dce2ab7f4d6ed" }, - "version": "1.3" + "version": "2.8" }, "com.google.protobuf:protobuf-java": { "shasums": { - "jar": "59d388ea6a2d2d76ae8efff7fd4d0c60c6f0f464c3d3ab9be8e5add092975708" + "jar": "092452964d6b0660fac242b9212f1652f0db0a0257bdc9db5663cec2046d49ab" }, - "version": "3.22.2" + "version": "3.25.0" }, "com.google.testparameterinjector:test-parameter-injector": { "shasums": { - "jar": "8aed07d2b8b4d49334c085a566a1df58209d79bf6ed763bf596b0572f5ddbeda" + "jar": "c8c39d34edfdd0719f2e671c8abd406268f39924bf483c2545b42d93051f1aae" }, - "version": "1.10" + "version": "1.14" }, "com.google.truth.extensions:truth-java8-extension": { "shasums": { - "jar": "2bbd32dd2fa9470d17f1bbda4f52b33b60bce4574052c1d46610a0aa371fc446" + "jar": "9e3c437ef76c0028d1c87d9f81d599301459333cfb3b50e5bf815ed712745140" }, - "version": "1.1.3" + "version": "1.1.5" }, "com.google.truth:truth": { "shasums": { - "jar": "fc0b67782289a2aabfddfdf99eff1dcd5edc890d49143fcd489214b107b8f4f3" + "jar": "7f6d50d6f43a102942ef2c5a05f37a84f77788bb448cf33cceebf86d34e575c0" }, - "version": "1.1.3" + "version": "1.1.5" }, "junit:junit": { "shasums": { @@ -83,15 +83,15 @@ }, "net.bytebuddy:byte-buddy": { "shasums": { - "jar": "030704139e46f32c38d27060edee9e0676b0a0fff8a8be53461515154ba8a7be" + "jar": "377352e253282bf86f731ac90ed88348e8f40a63ce033c00a85982de7e790e6f" }, - "version": "1.12.19" + "version": "1.14.9" }, "net.bytebuddy:byte-buddy-agent": { "shasums": { - "jar": "3a70240de7cdcde04e7c504c2327d7035b9c25ae0206881e3bf4e6798a273ed8" + "jar": "11ed107d4b78e55f8c3d34250494375081a29bc125a1f5c56db582ccdd48835f" }, - "version": "1.12.19" + "version": "1.14.9" }, "org.apache.commons:commons-math3": { "shasums": { @@ -101,9 +101,9 @@ }, "org.checkerframework:checker-qual": { "shasums": { - "jar": "3ea0dcd73b4d6cb2fb34bd7ed4dad6db327a01ebad7db05eb7894076b3d64491" + "jar": "e4ce1376cc2735e1dde220b62ad0913f51297704daad155a33f386bc5db0d9f7" }, - "version": "3.13.0" + "version": "3.37.0" }, "org.hamcrest:hamcrest-core": { "shasums": { @@ -113,9 +113,9 @@ }, "org.mockito:mockito-core": { "shasums": { - "jar": "4b909690cab288c761eb94c0bf0e814496cf3921d8affac84cd87774530351e5" + "jar": "dbad5e746654910a11a59ecb4d01e38461f3e5d16161689dc2588d5554432521" }, - "version": "4.11.0" + "version": "5.7.0" }, "org.objenesis:objenesis": { "shasums": { @@ -125,15 +125,15 @@ }, "org.ow2.asm:asm": { "shasums": { - "jar": "cda4de455fab48ff0bcb7c48b4639447d4de859a7afc30a094a986f0936beba2" + "jar": "b62e84b5980729751b0458c534cf1366f727542bb8d158621335682a460f0353" }, - "version": "9.1" + "version": "9.5" }, "org.yaml:snakeyaml": { "shasums": { - "jar": "7e7cce6740ed705bfdfaac7b442c1375d2986d2f2935936a5bd40c14e18fd736" + "jar": "880c9d896e4b74a06c549c15ca496450165d6909fa15d7e662bee8f6a66d7afa" }, - "version": "1.27" + "version": "2.0" } }, "dependencies": { @@ -204,23 +204,29 @@ "autovalue.shaded.kotlin.collections.builders", "autovalue.shaded.kotlin.collections.unsigned", "autovalue.shaded.kotlin.comparisons", + "autovalue.shaded.kotlin.contracts", "autovalue.shaded.kotlin.coroutines", "autovalue.shaded.kotlin.coroutines.intrinsics", "autovalue.shaded.kotlin.coroutines.jvm.internal", + "autovalue.shaded.kotlin.enums", "autovalue.shaded.kotlin.experimental", "autovalue.shaded.kotlin.internal", + "autovalue.shaded.kotlin.internal.jdk7", + "autovalue.shaded.kotlin.internal.jdk8", "autovalue.shaded.kotlin.jvm", "autovalue.shaded.kotlin.jvm.functions", "autovalue.shaded.kotlin.jvm.internal", "autovalue.shaded.kotlin.jvm.internal.markers", "autovalue.shaded.kotlin.random", + "autovalue.shaded.kotlin.random.jdk8", "autovalue.shaded.kotlin.ranges", "autovalue.shaded.kotlin.reflect", "autovalue.shaded.kotlin.sequences", "autovalue.shaded.kotlin.text", "autovalue.shaded.kotlinx.metadata", - "autovalue.shaded.kotlinx.metadata.impl", - "autovalue.shaded.kotlinx.metadata.impl.extensions", + "autovalue.shaded.kotlinx.metadata.internal", + "autovalue.shaded.kotlinx.metadata.internal.common", + "autovalue.shaded.kotlinx.metadata.internal.extensions", "autovalue.shaded.kotlinx.metadata.internal.metadata", "autovalue.shaded.kotlinx.metadata.internal.metadata.deserialization", "autovalue.shaded.kotlinx.metadata.internal.metadata.jvm", @@ -229,7 +235,7 @@ "autovalue.shaded.kotlinx.metadata.internal.metadata.serialization", "autovalue.shaded.kotlinx.metadata.internal.protobuf", "autovalue.shaded.kotlinx.metadata.jvm", - "autovalue.shaded.kotlinx.metadata.jvm.impl", + "autovalue.shaded.kotlinx.metadata.jvm.internal", "autovalue.shaded.net.ltgt.gradle.incap", "autovalue.shaded.org.checkerframework.checker.nullness.qual", "autovalue.shaded.org.checkerframework.framework.qual", @@ -467,6 +473,7 @@ "org.checkerframework.checker.initialization.qual", "org.checkerframework.checker.interning.qual", "org.checkerframework.checker.lock.qual", + "org.checkerframework.checker.mustcall.qual", "org.checkerframework.checker.nullness.qual", "org.checkerframework.checker.optional.qual", "org.checkerframework.checker.propkey.qual", @@ -574,6 +581,7 @@ ], "org.yaml:snakeyaml": [ "org.yaml.snakeyaml", + "org.yaml.snakeyaml.comments", "org.yaml.snakeyaml.composer", "org.yaml.snakeyaml.constructor", "org.yaml.snakeyaml.emitter", @@ -583,6 +591,8 @@ "org.yaml.snakeyaml.extensions.compactnotation", "org.yaml.snakeyaml.external.biz.base64Coder", "org.yaml.snakeyaml.external.com.google.gdata.util.common.base", + "org.yaml.snakeyaml.inspector", + "org.yaml.snakeyaml.internal", "org.yaml.snakeyaml.introspector", "org.yaml.snakeyaml.nodes", "org.yaml.snakeyaml.parser", diff --git a/privacy-on-beam/go.mod b/privacy-on-beam/go.mod index ae177af9..daa7c1d5 100644 --- a/privacy-on-beam/go.mod +++ b/privacy-on-beam/go.mod @@ -3,31 +3,45 @@ module github.com/google/differential-privacy/privacy-on-beam/v2 go 1.19 require ( - github.com/apache/beam/sdks/v2 v2.46.0 - github.com/golang/glog v1.1.1 + github.com/apache/beam/sdks/v2 v2.49.0 + github.com/golang/glog v1.2.0 github.com/google/differential-privacy/go/v2 v2.1.1-0.20230822150926-c89810faa5ad - github.com/google/go-cmp v0.5.9 - gonum.org/v1/plot v0.12.0 - google.golang.org/protobuf v1.30.0 + github.com/google/go-cmp v0.6.0 + gonum.org/v1/plot v0.14.0 + google.golang.org/protobuf v1.31.0 ) require ( - git.sr.ht/~sbinet/gg v0.3.1 // indirect + cloud.google.com/go v0.110.10 // indirect + cloud.google.com/go/iam v1.1.5 // indirect + cloud.google.com/go/profiler v0.4.0 // indirect + cloud.google.com/go/storage v1.35.1 // indirect + git.sr.ht/~sbinet/gg v0.5.0 // indirect github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b // indirect + github.com/campoy/embedmd v1.0.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect - github.com/go-fonts/liberation v0.3.0 // indirect - github.com/go-latex/latex v0.0.0-20230307184459-12ec69307ad9 // indirect - github.com/go-pdf/fpdf v0.7.0 // indirect + github.com/go-fonts/liberation v0.3.2 // indirect + github.com/go-latex/latex v0.0.0-20231108140139-5c1ce85aa4ea // indirect + github.com/go-pdf/fpdf v0.9.0 // indirect github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect github.com/golang/protobuf v1.5.3 // indirect - github.com/google/uuid v1.3.0 // indirect - golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect - golang.org/x/image v0.7.0 // indirect - golang.org/x/net v0.9.0 // indirect - golang.org/x/sys v0.7.0 // indirect - golang.org/x/text v0.9.0 // indirect - gonum.org/v1/gonum v0.12.0 // indirect - google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect - google.golang.org/grpc v1.54.0 // indirect + github.com/google/pprof v0.0.0-20231127191134-f3a68a39ae15 // indirect + github.com/google/uuid v1.4.0 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + golang.org/x/exp v0.0.0-20231127185646-65229373498e // indirect + golang.org/x/image v0.14.0 // indirect + golang.org/x/net v0.19.0 // indirect + golang.org/x/oauth2 v0.15.0 // indirect + golang.org/x/sync v0.5.0 // indirect + golang.org/x/sys v0.15.0 // indirect + golang.org/x/text v0.14.0 // indirect + golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect + gonum.org/v1/gonum v0.14.0 // indirect + google.golang.org/api v0.152.0 // indirect + google.golang.org/appengine v1.6.8 // indirect + google.golang.org/genproto v0.0.0-20231127180814-3a041ad873d4 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20231127180814-3a041ad873d4 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20231127180814-3a041ad873d4 // indirect + google.golang.org/grpc v1.59.0 // indirect gopkg.in/retry.v1 v1.0.3 // indirect -) \ No newline at end of file +) diff --git a/privacy-on-beam/go.sum b/privacy-on-beam/go.sum index e5527dc5..5f90bdbe 100644 --- a/privacy-on-beam/go.sum +++ b/privacy-on-beam/go.sum @@ -1,73 +1,97 @@ -git.sr.ht/~sbinet/gg v0.3.1 h1:LNhjNn8DerC8f9DHLz6lS0YYul/b602DUxDgGkd/Aik= -git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc= +cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y= +cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic= +cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk= +cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= +cloud.google.com/go/iam v1.1.5 h1:1jTsCu4bcsNsE4iiqNT5SHwrDRCfRmIaaaVFhRveTJI= +cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= +cloud.google.com/go/profiler v0.4.0 h1:ZeRDZbsOBDyRG0OiK0Op1/XWZ3xeLwJc9zjkzczUxyY= +cloud.google.com/go/profiler v0.4.0/go.mod h1:RvPlm4dilIr3oJtAOeFQU9Lrt5RoySHSDj4pTd6TWeU= +cloud.google.com/go/storage v1.35.1 h1:B59ahL//eDfx2IIKFBeT5Atm9wnNmj3+8xG/W4WB//w= +cloud.google.com/go/storage v1.35.1/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= +git.sr.ht/~sbinet/cmpimg v0.1.0 h1:E0zPRk2muWuCqSKSVZIWsgtU9pjsw3eKHi8VmQeScxo= +git.sr.ht/~sbinet/gg v0.5.0 h1:6V43j30HM623V329xA9Ntq+WJrMjDxRjuAB1LFWF5m8= +git.sr.ht/~sbinet/gg v0.5.0/go.mod h1:G2C0eRESqlKhS7ErsNey6HHrqU1PwsnCQlekFi9Q2Oo= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b h1:slYM766cy2nI3BwyRiyQj/Ud48djTMtMebDqepE95rw= github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= -github.com/apache/beam/sdks/v2 v2.46.0 h1:CkssanJ42U1yHj86XAfUrNQEc2G2/O+vu9IK1OIG5iQ= -github.com/apache/beam/sdks/v2 v2.46.0/go.mod h1:C4oJu53POCMwZT0hdeDjHrIMWsN1OEQasF2n8+e8SVo= +github.com/apache/beam/sdks/v2 v2.49.0 h1:Aim/7wEu39NThDEdk9ERyk8ojLRu59sv5+/22WLRbss= +github.com/apache/beam/sdks/v2 v2.49.0/go.mod h1:eo95+Cuc18pasAQiwen/Kh3o36CSf9r8hws0EESWrwA= +github.com/campoy/embedmd v1.0.0 h1:V4kI2qTJJLf4J29RzI/MAt2c3Bl4dQSYPuflzwFH2hY= +github.com/campoy/embedmd v1.0.0/go.mod h1:oxyr9RCiSXg0M3VJ3ks0UGfp98BpSSGr0kpiX3MzVl8= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/frankban/quicktest v1.2.2 h1:xfmOhhoH5fGPgbEAlhLpJH9p0z/0Qizio9osmvn9IUY= github.com/frankban/quicktest v1.2.2/go.mod h1:Qh/WofXFeiAFII1aEBu529AtJo6Zg2VHscnEsbBnJ20= -github.com/go-fonts/dejavu v0.1.0 h1:JSajPXURYqpr+Cu8U9bt8K+XcACIHWqWrvWCKyeFmVQ= -github.com/go-fonts/latin-modern v0.3.0 h1:CIDlMm0djMO3XIKHVz2na9lFKt3kdC/YCy7k7lLpyjE= -github.com/go-fonts/liberation v0.3.0 h1:3BI2iaE7R/s6uUUtzNCjo3QijJu3aS4wmrMgfSpYQ+8= -github.com/go-fonts/liberation v0.3.0/go.mod h1:jdJ+cqF+F4SUL2V+qxBth8fvBpBDS7yloUL5Fi8GTGY= -github.com/go-latex/latex v0.0.0-20230307184459-12ec69307ad9 h1:NxXI5pTAtpEaU49bpLpQoDsu1zrteW/vxzTz8Cd2UAs= -github.com/go-latex/latex v0.0.0-20230307184459-12ec69307ad9/go.mod h1:gWuR/CrFDDeVRFQwHPvsv9soJVB/iqymhuZQuJ3a9OM= -github.com/go-pdf/fpdf v0.7.0 h1:Kgf56ewNyhYcv6LIbhDWGRF91+e4aGMjpQlabnZnz9Q= -github.com/go-pdf/fpdf v0.7.0/go.mod h1:gfqhcNwXrsd3XYKte9a7vM3smvU/jB4ZRDrmWSxpfdc= +github.com/go-fonts/dejavu v0.3.2 h1:3XlHi0JBYX+Cp8n98c6qSoHrxPa4AUKDMKdrh/0sUdk= +github.com/go-fonts/latin-modern v0.3.2 h1:M+Sq24Dp0ZRPf3TctPnG1MZxRblqyWC/cRUL9WmdaFc= +github.com/go-fonts/liberation v0.3.2 h1:XuwG0vGHFBPRRI8Qwbi5tIvR3cku9LUfZGq/Ar16wlQ= +github.com/go-fonts/liberation v0.3.2/go.mod h1:N0QsDLVUQPy3UYg9XAc3Uh3UDMp2Z7M1o4+X98dXkmI= +github.com/go-latex/latex v0.0.0-20231108140139-5c1ce85aa4ea h1:DfZQkvEbdmOe+JK2TMtBM+0I9GSdzE2y/L1/AmD8xKc= +github.com/go-latex/latex v0.0.0-20231108140139-5c1ce85aa4ea/go.mod h1:Y7Vld91/HRbTBm7JwoI7HejdDB0u+e9AUBO9MB7yuZk= +github.com/go-pdf/fpdf v0.9.0 h1:PPvSaUuo1iMi9KkaAn90NuKi+P4gwMedWPHhj8YlJQw= +github.com/go-pdf/fpdf v0.9.0/go.mod h1:oO8N111TkmKb9D7VvWGLvLJlaZUQVPM+6V42pp3iV4Y= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/golang/glog v1.1.1 h1:jxpi2eWoU84wbX9iIEyAeeoac3FLuifZpY9tcNUD9kw= -github.com/golang/glog v1.1.1/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= +github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68= +github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/differential-privacy/go/v2 v2.1.1-0.20230822150926-c89810faa5ad h1:iDEy82z1Uw4MeXs9IRC04dCtyPfIMjJr9lBwo5GXOPA= github.com/google/differential-privacy/go/v2 v2.1.1-0.20230822150926-c89810faa5ad/go.mod h1:KRaNc5O0mzJ6cBC3iJbQNk9OHTzRLdmp1IXMaFlOxt8= github.com/google/go-cmp v0.2.1-0.20190312032427-6f77996f0c42/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/pprof v0.0.0-20231127191134-f3a68a39ae15 h1:t2sLhFuGXwoomaKLTuoxFfFqqlG1Gp2DpsupXq3UvZ0= +github.com/google/pprof v0.0.0-20231127191134-f3a68a39ae15/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= +github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= +github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= +github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= +github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rogpeppe/clock v0.0.0-20190514195947-2896927a307a h1:3QH7VyOaaiUHNrA9Se4YQIRkDTCw1EJls9xTUCaCeRM= github.com/rogpeppe/clock v0.0.0-20190514195947-2896927a307a/go.mod h1:4r5QyqhjIWCcK8DO4KMclc5Iknq5qVBAlbYYzAbUScQ= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug= -golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/image v0.7.0 h1:gzS29xtG1J5ybQlv0PuyfE3nmc6R4qB73m6LUUmvFuw= -golang.org/x/image v0.7.0/go.mod h1:nd/q4ef1AKKYl/4kft7g+6UyGbdiqWqTP1ZAbRoV7Rg= +golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= +golang.org/x/exp v0.0.0-20231127185646-65229373498e h1:Gvh4YaCaXNs6dKTlfgismwWZKyjVZXwOPfIyUaqU3No= +golang.org/x/exp v0.0.0-20231127185646-65229373498e/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= +golang.org/x/image v0.14.0 h1:tNgSxAFe3jC4uYqvZdTr84SZoM1KfwdC9SKIFrLjFn4= +golang.org/x/image v0.14.0/go.mod h1:HUYqC05R2ZcZ3ejNQsIHQDQiwWM4JBqmm6MKANTp4LE= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM= -golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= +golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= +golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= +golang.org/x/oauth2 v0.15.0 h1:s8pnnxNVzjWyrvYdFUQq5llS1PX2zhPXmccZv99h7uQ= +golang.org/x/oauth2 v0.15.0/go.mod h1:q48ptWNTY5XWf+JNten23lcvHpLJ0ZSxF5ttTHKVCAM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= +golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -76,41 +100,48 @@ golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= -golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gonum.org/v1/gonum v0.12.0 h1:xKuo6hzt+gMav00meVPUlXwSdoEJP46BR+wdxQEFK2o= -gonum.org/v1/gonum v0.12.0/go.mod h1:73TDxJfAAHeA8Mk9mf8NlIppyhQNo5GLTcYeqgo2lvY= -gonum.org/v1/plot v0.12.0 h1:y1ZNmfz/xHuHvtgFe8USZVyykQo5ERXPnspQNVK15Og= -gonum.org/v1/plot v0.12.0/go.mod h1:PgiMf9+3A3PnZdJIciIXmyN1FwdAA6rXELSN761oQkw= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= -google.golang.org/grpc v1.54.0 h1:EhTqbhiYeixwWQtAEZAxmV9MGqcjEU2mFx52xCzNyag= -google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= +golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= +golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= +gonum.org/v1/gonum v0.14.0 h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0= +gonum.org/v1/gonum v0.14.0/go.mod h1:AoWeoz0becf9QMWtE8iWXNXc27fK4fNeHNf/oMejGfU= +gonum.org/v1/plot v0.14.0 h1:+LBDVFYwFe4LHhdP8coW6296MBEY4nQ+Y4vuUpJopcE= +gonum.org/v1/plot v0.14.0/go.mod h1:MLdR9424SJed+5VqC6MsouEpig9pZX2VZ57H9ko2bXU= +google.golang.org/api v0.152.0 h1:t0r1vPnfMc260S2Ci+en7kfCZaLOPs5KI0sVV/6jZrY= +google.golang.org/api v0.152.0/go.mod h1:3qNJX5eOmhiWYc67jRA/3GsDw97UFb5ivv7Y2PrriAY= +google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= +google.golang.org/genproto v0.0.0-20231127180814-3a041ad873d4 h1:W12Pwm4urIbRdGhMEg2NM9O3TWKjNcxQhs46V0ypf/k= +google.golang.org/genproto v0.0.0-20231127180814-3a041ad873d4/go.mod h1:5RBcpGRxr25RbDzY5w+dmaqpSEvl8Gwl1x2CICf60ic= +google.golang.org/genproto/googleapis/api v0.0.0-20231127180814-3a041ad873d4 h1:ZcOkrmX74HbKFYnpPY8Qsw93fC29TbJXspYKaBkSXDQ= +google.golang.org/genproto/googleapis/api v0.0.0-20231127180814-3a041ad873d4/go.mod h1:k2dtGpRrbsSyKcNPKKI5sstZkrNCZwpU/ns96JoHbGg= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231127180814-3a041ad873d4 h1:DC7wcm+i+P1rN3Ff07vL+OndGg5OhNddHyTA+ocPqYE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231127180814-3a041ad873d4/go.mod h1:eJVxU6o+4G1PSczBr85xmyvSNYAKvAYgkub40YGomFM= +google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= +google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= -google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/retry.v1 v1.0.3 h1:a9CArYczAVv6Qs6VGoLMio99GEs7kY9UzSF9+LD+iGs= gopkg.in/retry.v1 v1.0.3/go.mod h1:FJkXmWiMaAo7xB+xhvDF59zhfjDWyzmyAxiT4dB688g= honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4= \ No newline at end of file +rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4= diff --git a/privacy-on-beam/pbeam/aggregations.go b/privacy-on-beam/pbeam/aggregations.go index ac2229ba..b5725d80 100644 --- a/privacy-on-beam/pbeam/aggregations.go +++ b/privacy-on-beam/pbeam/aggregations.go @@ -55,28 +55,18 @@ func init() { register.Function2x2[kv.Pair, int64, []byte, pairInt64](rekeyInt64) register.Function2x2[kv.Pair, float64, []byte, pairFloat64](rekeyFloat64) register.Function2x2[kv.Pair, []float64, []byte, pairArrayFloat64](rekeyArrayFloat64) - register.Function2x2[beam.V, int64, beam.V, int64](clampNegativePartitionsInt64) - register.Function2x2[beam.V, float64, beam.V, float64](clampNegativePartitionsFloat64) + register.Function2x2[beam.W, int64, beam.W, int64](clampNegativePartitionsInt64) + register.Function2x2[beam.W, float64, beam.W, float64](clampNegativePartitionsFloat64) register.Function3x0[beam.V, *int64, func(beam.V, int64)](dropThresholdedPartitionsInt64) register.Emitter2[beam.V, int64]() register.Function3x0[beam.V, *float64, func(beam.V, float64)](dropThresholdedPartitionsFloat64) register.Emitter2[beam.V, float64]() register.Function3x0[beam.V, []float64, func(beam.V, []float64)](dropThresholdedPartitionsFloat64Slice) register.Emitter2[beam.V, []float64]() - register.Function2x2[beam.W, *int64, beam.W, int64](dereferenceValueToInt64) - register.Function2x2[beam.W, *float64, beam.W, float64](dereferenceValueToFloat64) - register.Function2x2[kv.Pair, int, kv.Pair, float64](convertIntToFloat64) - register.Function2x2[kv.Pair, int8, kv.Pair, float64](convertInt8ToFloat64) - register.Function2x2[kv.Pair, int16, kv.Pair, float64](convertInt16ToFloat64) - register.Function2x2[kv.Pair, int32, kv.Pair, float64](convertInt32ToFloat64) - register.Function2x2[kv.Pair, int64, kv.Pair, float64](convertInt64ToFloat64) - register.Function2x2[kv.Pair, uint, kv.Pair, float64](convertUintToFloat64) - register.Function2x2[kv.Pair, uint8, kv.Pair, float64](convertUint8ToFloat64) - register.Function2x2[kv.Pair, uint16, kv.Pair, float64](convertUint16ToFloat64) - register.Function2x2[kv.Pair, uint32, kv.Pair, float64](convertUint32ToFloat64) - register.Function2x2[kv.Pair, uint64, kv.Pair, float64](convertUint64ToFloat64) - register.Function2x2[kv.Pair, float32, kv.Pair, float64](convertFloat32ToFloat64) - register.Function2x2[kv.Pair, float64, kv.Pair, float64](convertFloat64ToFloat64) + register.Function2x2[beam.W, *int64, beam.W, int64](dereferenceValueInt64) + register.Function2x2[beam.W, *float64, beam.W, float64](dereferenceValueFloat64) + register.Function2x3[kv.Pair, beam.V, kv.Pair, int64, error](convertToInt64Fn) + register.Function2x3[kv.Pair, beam.V, kv.Pair, float64, error](convertToFloat64Fn) } // randBool returns a uniformly random boolean. The randomness used here is not @@ -630,30 +620,30 @@ func (fn *boundedSumFloat64Fn) ExtractOutput(a boundedSumAccumFloat64) (*float64 return nil, nil } +func (fn *boundedSumFloat64Fn) String() string { + return fmt.Sprintf("%#v", fn) +} + // findDereferenceValueFn dereferences a *int64 to int64 or *float64 to float64. func findDereferenceValueFn(kind reflect.Kind) (any, error) { switch kind { case reflect.Int64: - return dereferenceValueToInt64, nil + return dereferenceValueInt64, nil case reflect.Float64: - return dereferenceValueToFloat64, nil + return dereferenceValueFloat64, nil default: return nil, fmt.Errorf("kind(%v) should be int64 or float64", kind) } } -func dereferenceValueToInt64(key beam.W, value *int64) (k beam.W, v int64) { +func dereferenceValueInt64(key beam.W, value *int64) (k beam.W, v int64) { return key, *value } -func dereferenceValueToFloat64(key beam.W, value *float64) (k beam.W, v float64) { +func dereferenceValueFloat64(key beam.W, value *float64) (k beam.W, v float64) { return key, *value } -func (fn *boundedSumFloat64Fn) String() string { - return fmt.Sprintf("%#v", fn) -} - func findDropThresholdedPartitionsFn(kind reflect.Kind) (any, error) { switch kind { case reflect.Int64: @@ -701,19 +691,19 @@ func findClampNegativePartitionsFn(kind reflect.Kind) (any, error) { } // Clamp negative partitions to zero for int64 partitions, e.g., as a post aggregation step for Count. -func clampNegativePartitionsInt64(v beam.V, r int64) (beam.V, int64) { +func clampNegativePartitionsInt64(k beam.W, r int64) (beam.W, int64) { if r < 0 { - return v, 0 + return k, 0 } - return v, r + return k, r } // Clamp negative partitions to zero for float64 partitions. -func clampNegativePartitionsFloat64(v beam.V, r float64) (beam.V, float64) { +func clampNegativePartitionsFloat64(k beam.W, r float64) (beam.W, float64) { if r < 0 { - return v, 0 + return k, 0 } - return v, r + return k, r } type dropValuesFn struct { @@ -809,84 +799,20 @@ func (fn *decodeIDKFn) ProcessElement(pair kv.Pair, v beam.V) (beam.W, kv.Pair, return id, kv.Pair{pair.V, vBuf.Bytes()}, err // pair.V is the K in PCollection } -// findConvertToFloat64Fn gets the correct conversion to float64 function. -func findConvertToFloat64Fn(t typex.FullType) (any, error) { - switch t.Type().String() { - case "int": - return convertIntToFloat64, nil - case "int8": - return convertInt8ToFloat64, nil - case "int16": - return convertInt16ToFloat64, nil - case "int32": - return convertInt32ToFloat64, nil - case "int64": - return convertInt64ToFloat64, nil - case "uint": - return convertUintToFloat64, nil - case "uint8": - return convertUint8ToFloat64, nil - case "uint16": - return convertUint16ToFloat64, nil - case "uint32": - return convertUint32ToFloat64, nil - case "uint64": - return convertUint64ToFloat64, nil - case "float32": - return convertFloat32ToFloat64, nil - case "float64": - return convertFloat64ToFloat64, nil - default: - return nil, fmt.Errorf("unexpected value type of %v", t) +func convertToInt64Fn(idk kv.Pair, i beam.V) (kv.Pair, int64, error) { + v := reflect.ValueOf(i) + if !v.Type().ConvertibleTo(reflect.TypeOf(int64(0))) { + return kv.Pair{}, 0, fmt.Errorf("unexpected value type of %v", v.Type()) } + return idk, v.Convert(reflect.TypeOf(int64(0))).Int(), nil } -func convertIntToFloat64(idk kv.Pair, i int) (kv.Pair, float64) { - return idk, float64(i) -} - -func convertInt8ToFloat64(idk kv.Pair, i int8) (kv.Pair, float64) { - return idk, float64(i) -} - -func convertInt16ToFloat64(idk kv.Pair, i int16) (kv.Pair, float64) { - return idk, float64(i) -} - -func convertInt32ToFloat64(idk kv.Pair, i int32) (kv.Pair, float64) { - return idk, float64(i) -} - -func convertInt64ToFloat64(idk kv.Pair, i int64) (kv.Pair, float64) { - return idk, float64(i) -} - -func convertUintToFloat64(idk kv.Pair, i uint) (kv.Pair, float64) { - return idk, float64(i) -} - -func convertUint8ToFloat64(idk kv.Pair, i uint8) (kv.Pair, float64) { - return idk, float64(i) -} - -func convertUint16ToFloat64(idk kv.Pair, i uint16) (kv.Pair, float64) { - return idk, float64(i) -} - -func convertUint32ToFloat64(idk kv.Pair, i uint32) (kv.Pair, float64) { - return idk, float64(i) -} - -func convertUint64ToFloat64(idk kv.Pair, i uint64) (kv.Pair, float64) { - return idk, float64(i) -} - -func convertFloat32ToFloat64(idk kv.Pair, f float32) (kv.Pair, float64) { - return idk, float64(f) -} - -func convertFloat64ToFloat64(idk kv.Pair, f float64) (kv.Pair, float64) { - return idk, f +func convertToFloat64Fn(idk kv.Pair, i beam.V) (kv.Pair, float64, error) { + v := reflect.ValueOf(i) + if !v.Type().ConvertibleTo(reflect.TypeOf(float64(0))) { + return kv.Pair{}, 0, fmt.Errorf("unexpected value type of %v", v.Type()) + } + return idk, v.Convert(reflect.TypeOf(float64(0))).Float(), nil } type expandValuesAccum struct { @@ -1022,8 +948,22 @@ func checkMaxPartitionsContributed(maxPartitionsContributed int64) error { // is set to anything other than 0. func checkMaxPartitionsContributedPartitionSelection(maxPartitionsContributed int64) error { if maxPartitionsContributed != 0 { - return fmt.Errorf("Separate contribution bounding for partition selection is not supported. "+ + return fmt.Errorf("separate contribution bounding for partition selection is not supported: "+ "PartitionSelectionParams.MaxPartitionsContributed must be unset (i.e. 0), was %d instead", maxPartitionsContributed) } return nil } + +// checkNumericType returns an error if t is not a numeric type. +func checkNumericType(t typex.FullType) error { + switch t.Type().Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return nil + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + return nil + case reflect.Float32, reflect.Float64: + return nil + default: + return fmt.Errorf("unexpected value type of %v", t) + } +} diff --git a/privacy-on-beam/pbeam/aggregations_test.go b/privacy-on-beam/pbeam/aggregations_test.go index 767f052d..20e2ba80 100644 --- a/privacy-on-beam/pbeam/aggregations_test.go +++ b/privacy-on-beam/pbeam/aggregations_test.go @@ -510,33 +510,29 @@ func TestBoundedSumFloat64FnExtractOutputWithPublicPartitionsDoesNotThreshold(t } } -func TestFindConvertToFloat64Fn(t *testing.T) { +func TestCheckNumericType(t *testing.T) { for _, tc := range []struct { - desc string - fullType typex.FullType - wantConvertFn any - wantErr bool + desc string + fullType typex.FullType + wantErr bool }{ - {"int", typex.New(reflect.TypeOf(int(0))), convertIntToFloat64, false}, - {"int8", typex.New(reflect.TypeOf(int8(0))), convertInt8ToFloat64, false}, - {"int16", typex.New(reflect.TypeOf(int16(0))), convertInt16ToFloat64, false}, - {"int32", typex.New(reflect.TypeOf(int32(0))), convertInt32ToFloat64, false}, - {"int64", typex.New(reflect.TypeOf(int64(0))), convertInt64ToFloat64, false}, - {"uint", typex.New(reflect.TypeOf(uint(0))), convertUintToFloat64, false}, - {"uint8", typex.New(reflect.TypeOf(uint8(0))), convertUint8ToFloat64, false}, - {"uint16", typex.New(reflect.TypeOf(uint16(0))), convertUint16ToFloat64, false}, - {"uint32", typex.New(reflect.TypeOf(uint32(0))), convertUint32ToFloat64, false}, - {"uint64", typex.New(reflect.TypeOf(uint64(0))), convertUint64ToFloat64, false}, - {"float32", typex.New(reflect.TypeOf(float32(0))), convertFloat32ToFloat64, false}, - {"float64", typex.New(reflect.TypeOf(float64(0))), convertFloat64ToFloat64, false}, - {"string", typex.New(reflect.TypeOf("")), nil, true}, + {"int", typex.New(reflect.TypeOf(int(0))), false}, + {"int8", typex.New(reflect.TypeOf(int8(0))), false}, + {"int16", typex.New(reflect.TypeOf(int16(0))), false}, + {"int32", typex.New(reflect.TypeOf(int32(0))), false}, + {"int64", typex.New(reflect.TypeOf(int64(0))), false}, + {"uint", typex.New(reflect.TypeOf(uint(0))), false}, + {"uint8", typex.New(reflect.TypeOf(uint8(0))), false}, + {"uint16", typex.New(reflect.TypeOf(uint16(0))), false}, + {"uint32", typex.New(reflect.TypeOf(uint32(0))), false}, + {"uint64", typex.New(reflect.TypeOf(uint64(0))), false}, + {"float32", typex.New(reflect.TypeOf(float32(0))), false}, + {"float64", typex.New(reflect.TypeOf(float64(0))), false}, + {"string", typex.New(reflect.TypeOf("")), true}, } { - convertFn, err := findConvertToFloat64Fn(tc.fullType) + err := checkNumericType(tc.fullType) if (err != nil) != tc.wantErr { - t.Errorf("findConvertToFloat64Fn: when %s for err got got %v, want %t", tc.desc, err, tc.wantErr) - } - if !reflect.DeepEqual(reflect.TypeOf(convertFn), reflect.TypeOf(tc.wantConvertFn)) { - t.Errorf("findConvertToFloat64Fn: when %s got %v, want %v", tc.desc, convertFn, tc.wantConvertFn) + t.Errorf("checkNumericType: when %s for err got got %v, want %t", tc.desc, err, tc.wantErr) } } } diff --git a/privacy-on-beam/pbeam/count.go b/privacy-on-beam/pbeam/count.go index ccf84cf2..b565fb30 100644 --- a/privacy-on-beam/pbeam/count.go +++ b/privacy-on-beam/pbeam/count.go @@ -168,7 +168,7 @@ func Count(s beam.Scope, pcol PrivatePCollection, params CountParams) beam.PColl // and re-key by the original privacy key. coded := beam.ParDo(s, kv.NewEncodeFn(idT, partitionT), pcol.col) kvCounts := stats.Count(s, coded) - counts64 := beam.ParDo(s, convertIntToInt64, kvCounts) + counts64 := beam.ParDo(s, convertToInt64Fn, kvCounts) rekeyed := beam.ParDo(s, rekeyInt64, counts64) // Second, do cross-partition contribution bounding if not in test mode without contribution bounding. if spec.testMode != TestModeWithoutContributionBounding { @@ -270,5 +270,5 @@ func addPublicPartitionsForCount(s beam.Scope, epsilon, delta float64, params Co log.Fatalf("Couldn't get boundedSumInt64Fn for Count: %v", err) } sums := beam.CombinePerKey(s, boundedSumFn, allPartitions) - return beam.ParDo(s, dereferenceValueToInt64, sums) + return beam.ParDo(s, dereferenceValueInt64, sums) } diff --git a/privacy-on-beam/pbeam/distinct_id.go b/privacy-on-beam/pbeam/distinct_id.go index 8cc1a9e0..5a6a2c41 100644 --- a/privacy-on-beam/pbeam/distinct_id.go +++ b/privacy-on-beam/pbeam/distinct_id.go @@ -223,7 +223,7 @@ func addPublicPartitionsForDistinctID(s beam.Scope, params DistinctPrivacyIDPara log.Fatalf("pbeam.DistinctPrivacyID: %v", err) } noisedCounts := beam.CombinePerKey(s, countFn, allAddPartitions) - finalPartitions := beam.ParDo(s, dereferenceValueToInt64, noisedCounts) + finalPartitions := beam.ParDo(s, dereferenceValueInt64, noisedCounts) // Clamp negative counts to zero and return. return beam.ParDo(s, clampNegativePartitionsInt64, finalPartitions) } diff --git a/privacy-on-beam/pbeam/mean.go b/privacy-on-beam/pbeam/mean.go index dd4ebc7e..fc454c26 100644 --- a/privacy-on-beam/pbeam/mean.go +++ b/privacy-on-beam/pbeam/mean.go @@ -203,11 +203,10 @@ func MeanPerKey(s beam.Scope, pcol PrivatePCollection, params MeanParams) beam.P // Convert value to float64. // Result is PCollection. _, valueT := beam.ValidateKVType(decoded) - convertFn, err := findConvertToFloat64Fn(valueT) - if err != nil { - log.Fatalf("Couldn't get convertFn for MeanPerKey: %v", err) + if err := checkNumericType(valueT); err != nil { + log.Fatalf("MeanPerKey: %v", err) } - converted := beam.ParDo(s, convertFn, decoded) + converted := beam.ParDo(s, convertToFloat64Fn, decoded) // Combine all values for into a slice. // Result is PCollection. @@ -262,48 +261,40 @@ func MeanPerKey(s beam.Scope, pcol PrivatePCollection, params MeanParams) beam.P } func addPublicPartitionsForMean(s beam.Scope, spec PrivacySpec, params MeanParams, noiseKind noise.Kind, partialKV beam.PCollection) beam.PCollection { - // Compute the mean for each partition with non-public partitions dropped. Result is PCollection. + // Calculate means with empty public partitions added. Result is PCollection. + // First, add empty slice to all public partitions. + publicPartitions, isPCollection := params.PublicPartitions.(beam.PCollection) + if !isPCollection { + publicPartitions = beam.Reshuffle(s, beam.CreateList(s, params.PublicPartitions)) + } + emptyPublicPartitions := beam.ParDo(s, addEmptySliceToPublicPartitionsFloat64, publicPartitions) + // Second, add noise to all public partitions (all of which are empty-valued). var boundedMeanFn *boundedMeanFn var err error if spec.usesNewPrivacyBudgetAPI { - boundedMeanFn, err = newBoundedMeanFnTemp(spec, params, noiseKind, true, false) + boundedMeanFn, err = newBoundedMeanFnTemp(spec, params, noiseKind, true, true) } else { - boundedMeanFn, err = newBoundedMeanFn(params, noiseKind, true, spec.testMode, false) + boundedMeanFn, err = newBoundedMeanFn(params, noiseKind, true, spec.testMode, true) } if err != nil { log.Fatalf("Couldn't get boundedMeanFn for MeanPerKey: %v", err) } - means := beam.CombinePerKey(s, - boundedMeanFn, - partialKV) - partitionT, _ := beam.ValidateKVType(means) - meansPartitions := beam.DropValue(s, means) - // Create map with partitions in the data as keys. - partitionMap := beam.Combine(s, newPartitionMapFn(beam.EncodedType{partitionT.Type()}), meansPartitions) - publicPartitions, isPCollection := params.PublicPartitions.(beam.PCollection) - if !isPCollection { - publicPartitions = beam.Reshuffle(s, beam.CreateList(s, params.PublicPartitions)) - } - // Add value of empty array to each partition key in PublicPartitions. - publicPartitionsWithValues := beam.ParDo(s, addEmptySliceToPublicPartitionsFloat64, publicPartitions) - // emptyPublicPartitions are the partitions that are public but not found in the data. - emptyPublicPartitions := beam.ParDo(s, newEmitPartitionsNotInTheDataFn(partitionT), publicPartitionsWithValues, beam.SideInput{Input: partitionMap}) - // Add noise to the empty public partitions. + noisyEmptyPublicPartitions := beam.CombinePerKey(s, boundedMeanFn, emptyPublicPartitions) + // Third, compute noisy means for partitions in the actual data. if spec.usesNewPrivacyBudgetAPI { - boundedMeanFn, err = newBoundedMeanFnTemp(spec, params, noiseKind, true, true) + boundedMeanFn, err = newBoundedMeanFnTemp(spec, params, noiseKind, true, false) } else { - boundedMeanFn, err = newBoundedMeanFn(params, noiseKind, true, spec.testMode, true) + boundedMeanFn, err = newBoundedMeanFn(params, noiseKind, true, spec.testMode, false) } if err != nil { log.Fatalf("Couldn't get boundedMeanFn for MeanPerKey: %v", err) } - emptyMeans := beam.CombinePerKey(s, - boundedMeanFn, - emptyPublicPartitions) - means = beam.ParDo(s, dereferenceValueToFloat64, means) - emptyMeans = beam.ParDo(s, dereferenceValueToFloat64, emptyMeans) - // Merge means from data with means from the empty public partitions and return. - return beam.Flatten(s, means, emptyMeans) + means := beam.CombinePerKey(s, boundedMeanFn, partialKV) + // Fourth, co-group by actual noisy means with noisy public partitions, emit noisy empty value for public partitions not found in data. + noisyMeansWithEmptyPublicPartitions := beam.CoGroupByKey(s, means, noisyEmptyPublicPartitions) + means = beam.ParDo(s, mergeResultWithEmptyPublicPartitionsFn, noisyMeansWithEmptyPublicPartitions) + // Fifth, dereference *float64 results and return. + return beam.ParDo(s, dereferenceValueFloat64, means) } func checkMeanPerKeyParams(params MeanParams, usesNewPrivacyBudgetAPI bool, noiseKind noise.Kind, partitionType reflect.Type) error { diff --git a/privacy-on-beam/pbeam/pbeamtest/pbeamtest_test.go b/privacy-on-beam/pbeam/pbeamtest/pbeamtest_test.go index 1a07643f..f2d6b3f7 100644 --- a/privacy-on-beam/pbeam/pbeamtest/pbeamtest_test.go +++ b/privacy-on-beam/pbeam/pbeamtest/pbeamtest_test.go @@ -847,7 +847,7 @@ func TestMeanPerKeyTestModePerPartitionContributionBounding(t *testing.T) { maxValue: 50.0, // MaxContributionsPerPartition = 1, but id = 0 contributes 3 times to partition 0. // There will be a per-partition contribution bounding stage. - // In this stage the algorithm will arbitrarily chose one of these 3 contributions. + // In this stage the algorithm will arbitrarily choose one of these 3 contributions. // The mean should be equal to 50/50 = 1.0 (not 150/52 ≈ 2.88, if no per-partition contribution bounding is done). want: 1.0, }, @@ -976,7 +976,7 @@ func TestMeanPerKeyWithPartitionsTestModePerPartitionContributionBoundingAddsEmp maxValue: 50.0, // MaxContributionsPerPartition = 1, but id = 0 contributes 3 times to partition 0. // There will be a per-partition contribution bounding stage. - // In this stage the algorithm will arbitrarily chose one of these 3 contributions. + // In this stage the algorithm will arbitrarily choose one of these 3 contributions. // The mean should be equal to 50/50 = 1.0 (not 150/52 ≈ 2.88, if no per-partition contribution bounding is done). want: 1.0, }, diff --git a/privacy-on-beam/pbeam/public_partitions.go b/privacy-on-beam/pbeam/public_partitions.go index e8a814e6..b0f0dd99 100644 --- a/privacy-on-beam/pbeam/public_partitions.go +++ b/privacy-on-beam/pbeam/public_partitions.go @@ -32,12 +32,13 @@ import ( func init() { register.Combiner2[pMap, beam.W](&partitionMapFn{}) + + register.DoFn2x3[beam.U, kv.Pair, beam.W, kv.Pair, error](&encodeIDVFn{}) + register.DoFn2x3[beam.W, kv.Pair, beam.U, kv.Pair, error](&decodeIDVFn{}) register.DoFn3x1[beam.U, beam.W, func(beam.U, beam.W), error](&prunePartitionsInMemoryVFn{}) register.Emitter2[beam.U, beam.W]() register.DoFn3x0[beam.U, kv.Pair, func(beam.U, kv.Pair)](&prunePartitionsInMemoryKVFn{}) register.Emitter2[beam.U, kv.Pair]() - register.DoFn4x1[beam.W, beam.V, func(*pMap) bool, func(beam.W, beam.V), error](&emitPartitionsNotInTheDataFn{}) - register.Iter1[pMap]() register.Function1x2[beam.W, beam.W, int64](addZeroValuesToPublicPartitionsInt64) register.Function1x2[beam.W, beam.W, float64](addZeroValuesToPublicPartitionsFloat64) @@ -47,6 +48,9 @@ func init() { register.Iter1[int64]() register.Iter1[beam.U]() register.Emitter2[beam.U, beam.V]() + register.Function4x0[beam.W, func(*beam.V) bool, func(*beam.V) bool, func(beam.W, beam.V)](mergeResultWithEmptyPublicPartitionsFn) + register.Iter1[beam.V]() + register.Emitter2[beam.W, beam.V]() } // newAddZeroValuesToPublicPartitionsFn turns a PCollection into PCollection. @@ -81,6 +85,9 @@ type pMap map[string]bool // dropNonPublicPartitions returns the PCollection with the non-public partitions dropped if public partitions are // specified. Returns the input PCollection otherwise. func dropNonPublicPartitions(s beam.Scope, pcol PrivatePCollection, publicPartitions any, partitionType reflect.Type) (beam.PCollection, error) { + // Obtain type information from the underlying PCollection. + idT, _ := beam.ValidateKVType(pcol.col) + // If PublicPartitions is not specified, return the input collection. if publicPartitions == nil { return pcol.col, nil @@ -88,10 +95,9 @@ func dropNonPublicPartitions(s beam.Scope, pcol PrivatePCollection, publicPartit // Drop non-public partitions, if public partitions are specified as a PCollection. if publicPartitionscCol, ok := publicPartitions.(beam.PCollection); ok { - partitionEncodedType := beam.EncodedType{partitionType} // Data is if pcol.codec != nil { - return dropNonPublicPartitionsKVFn(s, publicPartitionscCol, pcol, partitionEncodedType), nil + return dropNonPublicPartitionsKVFn(s, publicPartitionscCol, pcol, idT), nil } // Data is return dropNonPublicPartitionsVFn(s, publicPartitionscCol, pcol), nil @@ -118,16 +124,10 @@ func dropNonPublicPartitions(s beam.Scope, pcol PrivatePCollection, publicPartit return beam.ParDo(s, newPrunePartitionsInMemoryVFn(partitionEncodedType, partitionMap), pcol.col), nil } -// dropNonPublicPartitionsKVFn drops partitions not specified in PublicPartitions from pcol. It can be used for aggregations on pairs, e.g. sum and mean. -func dropNonPublicPartitionsKVFn(s beam.Scope, publicPartitions beam.PCollection, pcol PrivatePCollection, partitionEncodedType beam.EncodedType) beam.PCollection { - partitionMap := beam.Combine(s, newPartitionMapFn(partitionEncodedType), publicPartitions) - return beam.ParDo(s, prunePartitionsKV, pcol.col, beam.SideInput{Input: partitionMap}) -} - -// mergePublicValues merges the public partitions with the values for Count -// and DistinctPrivacyId after a CoGroupByKey. Only outputs a pair if the value is in the public partitions, i.e., the PCollection -// that is passed to the CoGroupByKey first. +// mergePublicValues merges the public partitions with the values for a PrivatePCollection +// after a CoGroupByKey. Only outputs a pair (where v is value in the case +// of Count & DistinctPrivacyID, and kv.Pair for other aggregations) if the value is in +// the public partitions, i.e., the PCollection that is passed to the CoGroupByKey first. func mergePublicValues(value beam.V, isKnown func(*int64) bool, privacyKeys func(*beam.U) bool, emit func(beam.U, beam.V)) { var ignoredZero int64 if isKnown(&ignoredZero) { @@ -140,7 +140,7 @@ func mergePublicValues(value beam.V, isKnown func(*int64) bool, privacyKeys func // dropNonPublicPartitionsVFn drops partitions not specified in // PublicPartitions from pcol. It can be used for aggregations on V values, -// e.g. count and distinctid. +// e.g. Count and DistinctPrivacyID. // // We drop values that are not in the publicPartitions PCollection as follows: // 1. Transform publicPartitions from to (0 is a placeholder value) @@ -157,6 +157,92 @@ func dropNonPublicPartitionsVFn(s beam.Scope, publicPartitions beam.PCollection, return beam.ParDo(s, mergePublicValues, groupedByValue) } +// dropNonPublicPartitionsKVFn drops partitions not specified in +// PublicPartitions from pcol. It can be used for aggregations on pairs, +// e.g. SumPerKey and MeanPerKey. +// +// We drop values that are not in the publicPartitions PCollection as follows: +// 1. Transform publicPartitions from to (0 is a placeholder value) +// 2. Transform pcol.col from > to > +// 3. Do a CoGroupByKey on the output of 1 and 2. +// 4. From the output of 3, only output > if there +// is an input from 1 using mergePublicValues. +// 5. Transform output of 4 from > to > +// +// This works great for smaller partitions, but we run into performance bottlenecks in +// steps 3 & 4 in case some partitions have a huge number of user contributions. +// +// Returns a PCollection> only for values present in +// publicPartitions. +func dropNonPublicPartitionsKVFn(s beam.Scope, publicPartitions beam.PCollection, pcol PrivatePCollection, idType typex.FullType) beam.PCollection { + publicPartitionsWithZeros := beam.ParDo(s, addZeroValuesToPublicPartitionsInt64, publicPartitions) + encodedIDV := beam.ParDo(s, newEncodeIDVFn(idType, pcol.codec), pcol.col, beam.TypeDefinition{Var: beam.WType, T: pcol.codec.KType.T}) + groupedByValue := beam.CoGroupByKey(s, publicPartitionsWithZeros, encodedIDV) + merged := beam.SwapKV(s, beam.ParDo(s, mergePublicValues, groupedByValue)) + decodeFn := newDecodeIDVFn(pcol.codec.KType, kv.NewCodec(idType.Type(), pcol.codec.VType.T)) + return beam.ParDo(s, decodeFn, merged, beam.TypeDefinition{Var: beam.UType, T: idType.Type()}) +} + +// encodeIDVFn takes a PCollection as input, and returns a +// PCollection; where ID and V have been coded, and K has been +// decoded. +type encodeIDVFn struct { + IDType beam.EncodedType // Type information of the privacy ID + idEnc beam.ElementEncoder // Encoder for privacy ID, set during Setup() according to IDType + InputPairCodec *kv.Codec // Codec for the input kv.Pair{K,V} +} + +func newEncodeIDVFn(idType typex.FullType, kvCodec *kv.Codec) *encodeIDVFn { + return &encodeIDVFn{ + IDType: beam.EncodedType{T: idType.Type()}, + InputPairCodec: kvCodec, + } +} + +func (fn *encodeIDVFn) Setup() error { + fn.idEnc = beam.NewElementEncoder(fn.IDType.T) + return fn.InputPairCodec.Setup() +} + +func (fn *encodeIDVFn) ProcessElement(id beam.U, pair kv.Pair) (beam.W, kv.Pair, error) { + var idBuf bytes.Buffer + if err := fn.idEnc.Encode(id, &idBuf); err != nil { + return nil, kv.Pair{}, fmt.Errorf("pbeam.encodeIDVFn.ProcessElement: couldn't encode ID %v: %w", id, err) + } + k, _, err := fn.InputPairCodec.Decode(pair) + return k, kv.Pair{idBuf.Bytes(), pair.V}, err +} + +// decodeIDVFn is the reverse operation of encodeIDVFn. It takes a PCollection +// as input, and returns a PCollection; where K and V has been coded, and ID +// has been decoded. +type decodeIDVFn struct { + KType beam.EncodedType // Type information of the partition key K + kEnc beam.ElementEncoder // Encoder for partition key, set during Setup() according to KType + InputPairCodec *kv.Codec // Codec for the input kv.Pair{ID,V} +} + +func newDecodeIDVFn(kType beam.EncodedType, idvCodec *kv.Codec) *decodeIDVFn { + return &decodeIDVFn{ + KType: kType, + InputPairCodec: idvCodec, + } +} + +func (fn *decodeIDVFn) Setup() error { + fn.kEnc = beam.NewElementEncoder(fn.KType.T) + return fn.InputPairCodec.Setup() +} + +func (fn *decodeIDVFn) ProcessElement(k beam.W, pair kv.Pair) (beam.U, kv.Pair, error) { + var kBuf bytes.Buffer + if err := fn.kEnc.Encode(k, &kBuf); err != nil { + return nil, kv.Pair{}, fmt.Errorf("pbeam.decodeIDVFn.ProcessElement: couldn't encode K %v: %w", k, err) + } + id, _, err := fn.InputPairCodec.Decode(pair) + return id, kv.Pair{kBuf.Bytes(), pair.V}, err // pair.V is the V in PCollection +} + // partitionMapFn makes a map consisting of public partitions. type partitionMapFn struct { PartitionType beam.EncodedType @@ -252,37 +338,15 @@ func prunePartitionsKV(id beam.U, pair kv.Pair, partitionsIter func(*pMap) bool, return nil } -// emitPartitionsNotInTheDataFn emits partitions that are public but not found in the data. -type emitPartitionsNotInTheDataFn struct { - PartitionType beam.EncodedType - partitionEnc beam.ElementEncoder -} - -func newEmitPartitionsNotInTheDataFn(partitionType typex.FullType) *emitPartitionsNotInTheDataFn { - return &emitPartitionsNotInTheDataFn{ - PartitionType: beam.EncodedType{partitionType.Type()}, - } -} - -func (fn *emitPartitionsNotInTheDataFn) Setup() { - fn.partitionEnc = beam.NewElementEncoder(fn.PartitionType.T) -} - -func (fn *emitPartitionsNotInTheDataFn) ProcessElement(partitionKey beam.W, value beam.V, partitionsIter func(*pMap) bool, emit func(beam.W, beam.V)) error { - var partitionBuf bytes.Buffer - if err := fn.partitionEnc.Encode(partitionKey, &partitionBuf); err != nil { - return fmt.Errorf("pbeam.emitPartitionsNotInTheDataFn.ProcessElement: couldn't encode partition %v: %w", partitionKey, err) - } - var partitionsInDataMap pMap - partitionsIter(&partitionsInDataMap) - // If partitionsInDataMap is nil, partitionsInDataMap is empty, so none of the partitions are in the data, which means we need to emit all of them. - // Similarly, if a partition is not in partitionsInDataMap, it means that the partition is not in the data, so we need to emit it. - // - // Partition Key in a kv.Pair is already encoded, we just convert it to base64 encoding. - if partitionsInDataMap == nil || !partitionsInDataMap[base64.StdEncoding.EncodeToString(partitionBuf.Bytes())] { - emit(partitionKey, value) +func mergeResultWithEmptyPublicPartitionsFn(k beam.W, resultIter, publicPartitionsIter func(*beam.V) bool, emit func(beam.W, beam.V)) { + var v beam.V + if resultIter(&v) { + emit(k, v) + } else { + if publicPartitionsIter(&v) { + emit(k, v) + } } - return nil } // checkPublicPartitions returns an error if publicPartitions parameter of an aggregation diff --git a/privacy-on-beam/pbeam/public_partitions_test.go b/privacy-on-beam/pbeam/public_partitions_test.go index d7b00aea..ea26b011 100644 --- a/privacy-on-beam/pbeam/public_partitions_test.go +++ b/privacy-on-beam/pbeam/public_partitions_test.go @@ -131,7 +131,9 @@ func TestDropNonPublicPartitionsKVFn(t *testing.T) { pcol := MakePrivate(s, col, NewPrivacySpec(epsilon, delta)) pcol = ParDo(s, testutils.TripleWithIntValueToKV, pcol) - got := dropNonPublicPartitionsKVFn(s, partitionsCol, pcol, pcol.codec.KType) + idT, _ := beam.ValidateKVType(pcol.col) + + got := dropNonPublicPartitionsKVFn(s, partitionsCol, pcol, idT) got = beam.SwapKV(s, got) pcol2 := MakePrivate(s, col2, NewPrivacySpec(epsilon, delta)) @@ -172,7 +174,9 @@ func TestDropNonPublicPartitionsFloat(t *testing.T) { pcol := MakePrivate(s, col, NewPrivacySpec(epsilon, delta)) pcol = ParDo(s, testutils.TripleWithFloatValueToKV, pcol) - got := dropNonPublicPartitionsKVFn(s, partitionsCol, pcol, pcol.codec.KType) + idT, _ := beam.ValidateKVType(pcol.col) + + got := dropNonPublicPartitionsKVFn(s, partitionsCol, pcol, idT) got = beam.SwapKV(s, got) pcol2 := MakePrivate(s, col2, NewPrivacySpec(epsilon, delta)) diff --git a/privacy-on-beam/pbeam/quantiles.go b/privacy-on-beam/pbeam/quantiles.go index 908f8f87..084992c6 100644 --- a/privacy-on-beam/pbeam/quantiles.go +++ b/privacy-on-beam/pbeam/quantiles.go @@ -218,11 +218,10 @@ func QuantilesPerKey(s beam.Scope, pcol PrivatePCollection, params QuantilesPara // Convert value to float64. // Result is PCollection. _, valueT := beam.ValidateKVType(decoded) - convertFn, err := findConvertToFloat64Fn(valueT) - if err != nil { - log.Fatalf("Couldn't get convertFn for QuantilesPerKey: %v", err) + if err := checkNumericType(valueT); err != nil { + log.Fatalf("QuantilesPerKey: %v", err) } - converted := beam.ParDo(s, convertFn, decoded) + converted := beam.ParDo(s, convertToFloat64Fn, decoded) // Combine all values for into a slice. // Result is PCollection. @@ -258,9 +257,9 @@ func QuantilesPerKey(s beam.Scope, pcol PrivatePCollection, params QuantilesPara // Compute the quantiles for each partition. Result is PCollection. var boundedQuantilesFn *boundedQuantilesFn if spec.usesNewPrivacyBudgetAPI { - boundedQuantilesFn, err = newBoundedQuantilesFnTemp(*spec, params, noiseKind, false, false) + boundedQuantilesFn, err = newBoundedQuantilesFnTemp(*spec, params, noiseKind, false) } else { - boundedQuantilesFn, err = newBoundedQuantilesFn(params, noiseKind, false, spec.testMode, false) + boundedQuantilesFn, err = newBoundedQuantilesFn(params, noiseKind, false, spec.testMode) } if err != nil { log.Fatalf("Couldn't get boundedQuantilesFn for QuantilesPerKey: %v", err) @@ -275,46 +274,30 @@ func QuantilesPerKey(s beam.Scope, pcol PrivatePCollection, params QuantilesPara } func addPublicPartitionsForQuantiles(s beam.Scope, spec PrivacySpec, params QuantilesParams, noiseKind noise.Kind, partialKV beam.PCollection) beam.PCollection { - // Compute the quantiles for each partition with non-public partitions dropped. Result is PCollection. - var boundedQuantilesFn *boundedQuantilesFn - var err error - if spec.usesNewPrivacyBudgetAPI { - boundedQuantilesFn, err = newBoundedQuantilesFnTemp(spec, params, noiseKind, true, false) - } else { - boundedQuantilesFn, err = newBoundedQuantilesFn(params, noiseKind, true, spec.testMode, false) - } - if err != nil { - log.Fatalf("Couldn't get boundedQuantilesFn for QuantilesPerKey: %v", err) - } - quantiles := beam.CombinePerKey(s, - boundedQuantilesFn, - partialKV) - partitionT, _ := beam.ValidateKVType(quantiles) - quantilesPartitions := beam.DropValue(s, quantiles) - // Create map with partitions in the data as keys. - partitionMap := beam.Combine(s, newPartitionMapFn(beam.EncodedType{partitionT.Type()}), quantilesPartitions) + // Calculate quantiles with empty public partitions added. Result is PCollection. + // First, add empty slice to all public partitions. publicPartitions, isPCollection := params.PublicPartitions.(beam.PCollection) if !isPCollection { publicPartitions = beam.Reshuffle(s, beam.CreateList(s, params.PublicPartitions)) } - // Add value of empty array to each partition key in PublicPartitions. - publicPartitionsWithValues := beam.ParDo(s, addEmptySliceToPublicPartitionsFloat64, publicPartitions) - // emptyPublicPartitions are the partitions that are public but not found in the data. - emptyPublicPartitions := beam.ParDo(s, newEmitPartitionsNotInTheDataFn(partitionT), publicPartitionsWithValues, beam.SideInput{Input: partitionMap}) - // Compute DP quantiles for empty public partitions. + emptyPublicPartitions := beam.ParDo(s, addEmptySliceToPublicPartitionsFloat64, publicPartitions) + // Second, add noise to all public partitions (all of which are empty-valued). + var boundedQuantilesFn *boundedQuantilesFn + var err error if spec.usesNewPrivacyBudgetAPI { - boundedQuantilesFn, err = newBoundedQuantilesFnTemp(spec, params, noiseKind, true, true) + boundedQuantilesFn, err = newBoundedQuantilesFnTemp(spec, params, noiseKind, true) } else { - boundedQuantilesFn, err = newBoundedQuantilesFn(params, noiseKind, true, spec.testMode, true) + boundedQuantilesFn, err = newBoundedQuantilesFn(params, noiseKind, true, spec.testMode) } if err != nil { - log.Fatalf("Couldn't get boundedQuantilesFn for QuantilesPerKey: %v", err) - } - emptyQuantiles := beam.CombinePerKey(s, - boundedQuantilesFn, - emptyPublicPartitions) - // Merge quantiles from data with quantiles from the empty public partitions and return. - return beam.Flatten(s, quantiles, emptyQuantiles) + log.Fatalf("Couldn't get boundedMeanFn for MeanPerKey: %v", err) + } + noisyEmptyPublicPartitions := beam.CombinePerKey(s, boundedQuantilesFn, emptyPublicPartitions) + // Third, compute noisy quantiles for partitions in the actual data. + quantiles := beam.CombinePerKey(s, boundedQuantilesFn, partialKV) + // Fourth, co-group by actual noisy means with noisy public partitions, emit noisy empty value for public partitions not found in data and return. + noisyQuantilesWithEmptyPublicPartitions := beam.CoGroupByKey(s, quantiles, noisyEmptyPublicPartitions) + return beam.ParDo(s, mergeResultWithEmptyPublicPartitionsFn, noisyQuantilesWithEmptyPublicPartitions) } func checkQuantilesPerKeyParams(params QuantilesParams, usesNewPrivacyBudgetAPI bool, noiseKind noise.Kind, partitionType reflect.Type) error { @@ -400,11 +383,10 @@ type boundedQuantilesFn struct { Ranks []float64 PublicPartitions bool // Set to true if public partitions are used. TestMode TestMode - EmptyPartitions bool // Set to true if this combineFn is for adding noise to empty public partitions. } // newBoundedQuantilesFn returns a boundedQuantilesFn with the given budget and parameters. -func newBoundedQuantilesFn(params QuantilesParams, noiseKind noise.Kind, publicPartitions bool, testMode TestMode, emptyPartitions bool) (*boundedQuantilesFn, error) { +func newBoundedQuantilesFn(params QuantilesParams, noiseKind noise.Kind, publicPartitions bool, testMode TestMode) (*boundedQuantilesFn, error) { fn := &boundedQuantilesFn{ MaxPartitionsContributed: params.MaxPartitionsContributed, MaxContributionsPerPartition: params.MaxContributionsPerPartition, @@ -414,7 +396,6 @@ func newBoundedQuantilesFn(params QuantilesParams, noiseKind noise.Kind, publicP NoiseKind: noiseKind, PublicPartitions: publicPartitions, TestMode: testMode, - EmptyPartitions: emptyPartitions, } if fn.PublicPartitions { fn.NoiseEpsilon = params.Epsilon @@ -438,7 +419,7 @@ func newBoundedQuantilesFn(params QuantilesParams, noiseKind noise.Kind, publicP // newBoundedQuantilesFnTemp returns a boundedQuantilesFn with the given budget and parameters. // // Uses the new privacy budget API. -func newBoundedQuantilesFnTemp(spec PrivacySpec, params QuantilesParams, noiseKind noise.Kind, publicPartitions bool, emptyPartitions bool) (*boundedQuantilesFn, error) { +func newBoundedQuantilesFnTemp(spec PrivacySpec, params QuantilesParams, noiseKind noise.Kind, publicPartitions bool) (*boundedQuantilesFn, error) { if noiseKind != noise.GaussianNoise && noiseKind != noise.LaplaceNoise { return nil, fmt.Errorf("unknown noise.Kind (%v) is specified. Please specify a valid noise", noiseKind) } @@ -456,7 +437,6 @@ func newBoundedQuantilesFnTemp(spec PrivacySpec, params QuantilesParams, noiseKi NoiseKind: noiseKind, PublicPartitions: publicPartitions, TestMode: spec.testMode, - EmptyPartitions: emptyPartitions, }, nil } diff --git a/privacy-on-beam/pbeam/quantiles_test.go b/privacy-on-beam/pbeam/quantiles_test.go index 5975cfad..7b0ec238 100644 --- a/privacy-on-beam/pbeam/quantiles_test.go +++ b/privacy-on-beam/pbeam/quantiles_test.go @@ -75,7 +75,7 @@ func TestNewBoundedQuantilesFn(t *testing.T) { MinValue: 0, MaxValue: 10, Ranks: []float64{0.1, 0.5, 0.9}, - }, tc.noiseKind, false, TestModeDisabled, false) + }, tc.noiseKind, false, TestModeDisabled) if err != nil { t.Fatalf("Couldn't get newBoundedQuantilesFn: %v", err) } @@ -153,7 +153,7 @@ func TestNewBoundedQuantilesFnTemp(t *testing.T) { MinValue: 0, MaxValue: 10, Ranks: []float64{0.1, 0.5, 0.9}, - }, tc.noiseKind, false, false) + }, tc.noiseKind, false) if err != nil { t.Fatalf("Couldn't get newBoundedQuantilesFn: %v", err) } @@ -179,7 +179,7 @@ func TestBoundedQuantilesFnSetup(t *testing.T) { MinValue: 0, MaxValue: 10, Ranks: []float64{0.1, 0.5, 0.9}, - }, tc.noiseKind, false, TestModeDisabled, false) + }, tc.noiseKind, false, TestModeDisabled) if err != nil { t.Fatalf("Couldn't get newBoundedQuantilesFn: %v", err) } @@ -209,7 +209,7 @@ func TestBoundedQuantilesFnAddInput(t *testing.T) { MinValue: lower, MaxValue: upper, Ranks: ranks, - }, noise.LaplaceNoise, false, TestModeDisabled, false) + }, noise.LaplaceNoise, false, TestModeDisabled) if err != nil { t.Fatalf("Couldn't get newBoundedQuantilesFn: %v", err) } @@ -256,7 +256,7 @@ func TestBoundedQuantilesFnMergeAccumulators(t *testing.T) { MinValue: lower, MaxValue: upper, Ranks: ranks, - }, noise.LaplaceNoise, false, TestModeDisabled, false) + }, noise.LaplaceNoise, false, TestModeDisabled) if err != nil { t.Fatalf("Couldn't get newBoundedQuantilesFn: %v", err) } @@ -309,7 +309,7 @@ func TestBoundedQuantilesFnExtractOutputReturnsNilForSmallPartitions(t *testing. MinValue: 0, MaxValue: 10, Ranks: []float64{0.5}, - }, noise.LaplaceNoise, false, TestModeDisabled, false) + }, noise.LaplaceNoise, false, TestModeDisabled) if err != nil { t.Fatalf("Couldn't get newBoundedQuantilesFn: %v", err) } @@ -354,7 +354,7 @@ func TestBoundedQuantilesFnWithPartitionsExtractOutputDoesNotReturnNilForSmallPa MinValue: 0, MaxValue: 10, Ranks: []float64{0.5}, - }, noise.LaplaceNoise, true, TestModeDisabled, false) + }, noise.LaplaceNoise, true, TestModeDisabled) if err != nil { t.Fatalf("Couldn't get newBoundedQuantilesFn: %v", err) } diff --git a/privacy-on-beam/pbeam/sum.go b/privacy-on-beam/pbeam/sum.go index 16c6bbf5..2f8142e9 100644 --- a/privacy-on-beam/pbeam/sum.go +++ b/privacy-on-beam/pbeam/sum.go @@ -36,17 +36,6 @@ func init() { register.DoFn2x3[beam.W, kv.Pair, kv.Pair, beam.V, error](&prepareSumFn{}) register.DoFn2x3[beam.X, int64, beam.X, int64, error](&addNoiseToEmptyPublicPartitionsInt64Fn{}) register.DoFn2x3[beam.X, float64, beam.X, float64, error](&addNoiseToEmptyPublicPartitionsFloat64Fn{}) - - register.Function2x2[kv.Pair, int, kv.Pair, int64](convertIntToInt64) - register.Function2x2[kv.Pair, int8, kv.Pair, int64](convertInt8ToInt64) - register.Function2x2[kv.Pair, int16, kv.Pair, int64](convertInt16ToInt64) - register.Function2x2[kv.Pair, int32, kv.Pair, int64](convertInt32ToInt64) - register.Function2x2[kv.Pair, int64, kv.Pair, int64](convertInt64ToInt64) - register.Function2x2[kv.Pair, uint, kv.Pair, int64](convertUintToInt64) - register.Function2x2[kv.Pair, uint8, kv.Pair, int64](convertUint8ToInt64) - register.Function2x2[kv.Pair, uint16, kv.Pair, int64](convertUint16ToInt64) - register.Function2x2[kv.Pair, uint32, kv.Pair, int64](convertUint32ToInt64) - register.Function2x2[kv.Pair, uint64, kv.Pair, int64](convertUint64ToInt64) } // SumParams specifies the parameters associated with a Sum aggregation. @@ -276,19 +265,8 @@ func SumPerKey(s beam.Scope, pcol PrivatePCollection, params SumParams) beam.PCo } func addPublicPartitionsForSum(s beam.Scope, epsilon, delta float64, maxPartitionsContributed int64, params SumParams, noiseKind noise.Kind, vKind reflect.Kind, partialSumKV beam.PCollection, testMode TestMode) beam.PCollection { - // Calculate sums with non-public partitions dropped. Result is PCollection, where vKind is either int64 or float64. - boundedSumFn, err := newBoundedSumFn(epsilon, delta, maxPartitionsContributed, params.MinValue, params.MaxValue, noiseKind, vKind, true, testMode) - if err != nil { - log.Fatalf("Couldn't get boundedSumFn for SumPerKey: %v", err) - } - sums := beam.CombinePerKey(s, - boundedSumFn, - partialSumKV) - partitionT, _ := beam.ValidateKVType(sums) - sumsPartitions := beam.DropValue(s, sums) - // Create map with partitions in the data as keys. - partitionMap := beam.Combine(s, newPartitionMapFn(beam.EncodedType{partitionT.Type()}), sumsPartitions) - // Add value of 0 to each partition key in PublicPartitions. + // Calculate sums with empty public partitions added. Result is PCollection, where vKind is either int64 or float64. + // First, add zero values to all public partitions. addZeroValuesToPublicPartitions, err := newAddZeroValuesToPublicPartitionsFn(vKind) if err != nil { log.Fatalf("Couldn't get addZeroValuesToPublicPartitions for SumPerKey: %v", err) @@ -297,24 +275,24 @@ func addPublicPartitionsForSum(s beam.Scope, epsilon, delta float64, maxPartitio if !isPCollection { publicPartitions = beam.Reshuffle(s, beam.CreateList(s, params.PublicPartitions)) } - publicPartitionsWithValues := beam.ParDo(s, addZeroValuesToPublicPartitions, publicPartitions) - // emptyPublicPartitions are the partitions that are public but not found in the data. - emptyPublicPartitions := beam.ParDo(s, newEmitPartitionsNotInTheDataFn(partitionT), publicPartitionsWithValues, beam.SideInput{Input: partitionMap}) - // Add noise to the empty public partitions. - addNoiseToEmptyPublicPartitionsFn, err := newAddNoiseToEmptyPublicPartitionsFn(epsilon, delta, maxPartitionsContributed, params.MinValue, params.MaxValue, noiseKind, vKind, testMode) + publicPartitionsWithZeroValues := beam.ParDo(s, addZeroValuesToPublicPartitions, publicPartitions) + // Second, add noise to all public partitions (all of which are zero-valued). + boundedSumFn, err := newBoundedSumFn(epsilon, delta, maxPartitionsContributed, params.MinValue, params.MaxValue, noiseKind, vKind, true, testMode) if err != nil { - log.Fatalf("Couldn't get addNoiseToEmptyPublicPartitionsFn for SumPerKey: %v", err) + log.Fatalf("Couldn't get boundedSumFn for SumPerKey: %v", err) } - emptySums := beam.ParDo(s, - addNoiseToEmptyPublicPartitionsFn, - emptyPublicPartitions) + noisyEmptyPublicPartitions := beam.CombinePerKey(s, boundedSumFn, publicPartitionsWithZeroValues) + // Third, compute noisy sums for partitions in the actual data. + sums := beam.CombinePerKey(s, boundedSumFn, partialSumKV) + // Fourth, co-group by actual noisy sums with noisy public partitions, emit noisy zero value for public partitions not found in data. + actualNoisySumsWithPublicPartitions := beam.CoGroupByKey(s, sums, noisyEmptyPublicPartitions) + sums = beam.ParDo(s, mergeResultWithEmptyPublicPartitionsFn, actualNoisySumsWithPublicPartitions) + // Fifth, dereference *int64/*float64 results and return. dereferenceValueFn, err := findDereferenceValueFn(vKind) if err != nil { log.Fatalf("Couldn't get dereferenceValueFn for SumPerKey: %v", err) } - sums = beam.ParDo(s, dereferenceValueFn, sums) - // Merge sums from data with sums from the empty public partitions and return. - return beam.Flatten(s, sums, emptySums) + return beam.ParDo(s, dereferenceValueFn, sums) } func checkSumPerKeyParams(params SumParams, usesNewPrivacyBudgetAPI bool, noiseKind noise.Kind, partitionType reflect.Type) error { @@ -393,66 +371,17 @@ func (fn *prepareSumFn) ProcessElement(id beam.W, pair kv.Pair) (kv.Pair, beam.V // findConvertFn gets the correct conversion to int64 or float64 function. func findConvertFn(t typex.FullType) (any, error) { switch t.Type().String() { - case "int": - return convertIntToInt64, nil - case "int8": - return convertInt8ToInt64, nil - case "int16": - return convertInt16ToInt64, nil - case "int32": - return convertInt32ToInt64, nil - case "int64": - return convertInt64ToInt64, nil - case "uint": - return convertUintToInt64, nil - case "uint8": - return convertUint8ToInt64, nil - case "uint16": - return convertUint16ToInt64, nil - case "uint32": - return convertUint32ToInt64, nil - case "uint64": - return convertUint64ToInt64, nil - case "float32": - return convertFloat32ToFloat64, nil - case "float64": - return convertFloat64ToFloat64, nil + case "int", "int8", "int16", "int32", "int64": + return convertToInt64Fn, nil + case "uint", "uint8", "uint16", "uint32", "uint64": + return convertToInt64Fn, nil + case "float32", "float64": + return convertToFloat64Fn, nil default: return nil, fmt.Errorf("unexpected value type of %v", t) } } -func convertIntToInt64(idk kv.Pair, i int) (kv.Pair, int64) { - return idk, int64(i) -} -func convertInt8ToInt64(idk kv.Pair, i int8) (kv.Pair, int64) { - return idk, int64(i) -} -func convertInt16ToInt64(idk kv.Pair, i int16) (kv.Pair, int64) { - return idk, int64(i) -} -func convertInt32ToInt64(idk kv.Pair, i int32) (kv.Pair, int64) { - return idk, int64(i) -} -func convertInt64ToInt64(idk kv.Pair, i int64) (kv.Pair, int64) { - return idk, i -} -func convertUintToInt64(idk kv.Pair, i uint) (kv.Pair, int64) { - return idk, int64(i) -} -func convertUint8ToInt64(idk kv.Pair, i uint8) (kv.Pair, int64) { - return idk, int64(i) -} -func convertUint16ToInt64(idk kv.Pair, i uint16) (kv.Pair, int64) { - return idk, int64(i) -} -func convertUint32ToInt64(idk kv.Pair, i uint32) (kv.Pair, int64) { - return idk, int64(i) -} -func convertUint64ToInt64(idk kv.Pair, i uint64) (kv.Pair, int64) { - return idk, int64(i) -} - // getKind gets the return kind of the convertFn function. func getKind(fn any) (reflect.Kind, error) { if fn == nil { diff --git a/privacy-on-beam/pbeam/sum_test.go b/privacy-on-beam/pbeam/sum_test.go index 57c356e7..f6b7e65e 100644 --- a/privacy-on-beam/pbeam/sum_test.go +++ b/privacy-on-beam/pbeam/sum_test.go @@ -1040,18 +1040,18 @@ func TestFindConvertFn(t *testing.T) { wantConvertFn any wantErr bool }{ - {"int", typex.New(reflect.TypeOf(int(0))), convertIntToInt64, false}, - {"int8", typex.New(reflect.TypeOf(int8(0))), convertInt8ToInt64, false}, - {"int16", typex.New(reflect.TypeOf(int16(0))), convertInt16ToInt64, false}, - {"int32", typex.New(reflect.TypeOf(int32(0))), convertInt32ToInt64, false}, - {"int64", typex.New(reflect.TypeOf(int64(0))), convertInt64ToInt64, false}, - {"uint", typex.New(reflect.TypeOf(uint(0))), convertUintToInt64, false}, - {"uint8", typex.New(reflect.TypeOf(uint8(0))), convertUint8ToInt64, false}, - {"uint16", typex.New(reflect.TypeOf(uint16(0))), convertUint16ToInt64, false}, - {"uint32", typex.New(reflect.TypeOf(uint32(0))), convertUint32ToInt64, false}, - {"uint64", typex.New(reflect.TypeOf(uint64(0))), convertUint64ToInt64, false}, - {"float32", typex.New(reflect.TypeOf(float32(0))), convertFloat32ToFloat64, false}, - {"float64", typex.New(reflect.TypeOf(float64(0))), convertFloat64ToFloat64, false}, + {"int", typex.New(reflect.TypeOf(int(0))), convertToInt64Fn, false}, + {"int8", typex.New(reflect.TypeOf(int8(0))), convertToInt64Fn, false}, + {"int16", typex.New(reflect.TypeOf(int16(0))), convertToInt64Fn, false}, + {"int32", typex.New(reflect.TypeOf(int32(0))), convertToInt64Fn, false}, + {"int64", typex.New(reflect.TypeOf(int64(0))), convertToInt64Fn, false}, + {"uint", typex.New(reflect.TypeOf(uint(0))), convertToInt64Fn, false}, + {"uint8", typex.New(reflect.TypeOf(uint8(0))), convertToInt64Fn, false}, + {"uint16", typex.New(reflect.TypeOf(uint16(0))), convertToInt64Fn, false}, + {"uint32", typex.New(reflect.TypeOf(uint32(0))), convertToInt64Fn, false}, + {"uint64", typex.New(reflect.TypeOf(uint64(0))), convertToInt64Fn, false}, + {"float32", typex.New(reflect.TypeOf(float32(0))), convertToFloat64Fn, false}, + {"float64", typex.New(reflect.TypeOf(float64(0))), convertToFloat64Fn, false}, {"string", typex.New(reflect.TypeOf("")), nil, true}, } { convertFn, err := findConvertFn(tc.fullType) @@ -1071,18 +1071,8 @@ func TestGetKind(t *testing.T) { wantKind reflect.Kind wantErr bool }{ - {"convertIntToInt64", convertIntToInt64, reflect.Int64, false}, - {"convertInt8ToInt64", convertInt8ToInt64, reflect.Int64, false}, - {"convertInt16ToInt64", convertInt16ToInt64, reflect.Int64, false}, - {"convertInt32ToInt64", convertInt32ToInt64, reflect.Int64, false}, - {"convertInt64ToInt64", convertInt64ToInt64, reflect.Int64, false}, - {"convertUintToInt64", convertUintToInt64, reflect.Int64, false}, - {"convertUint8ToInt64", convertUint8ToInt64, reflect.Int64, false}, - {"convertUint16ToInt64", convertUint16ToInt64, reflect.Int64, false}, - {"convertUint32ToInt64", convertUint32ToInt64, reflect.Int64, false}, - {"convertUint64ToInt64", convertUint64ToInt64, reflect.Int64, false}, - {"convertFloat32ToFloat64", convertFloat32ToFloat64, reflect.Float64, false}, - {"convertFloat64ToFloat64", convertFloat64ToFloat64, reflect.Float64, false}, + {"convertToInt64", convertToInt64Fn, reflect.Int64, false}, + {"convertToFloat64", convertToFloat64Fn, reflect.Float64, false}, {"nil interface", nil, reflect.Invalid, true}, {"function with less than 2 return values", func() int64 { return int64(0) }, reflect.Invalid, true}, } { diff --git a/privacy-on-beam/pbeam/testutils/testutils.go b/privacy-on-beam/pbeam/testutils/testutils.go index a8d4f687..1da8da91 100644 --- a/privacy-on-beam/pbeam/testutils/testutils.go +++ b/privacy-on-beam/pbeam/testutils/testutils.go @@ -457,7 +457,7 @@ func (fn *diffInt64Fn) ProcessElement(k beam.W, v1Iter, v2Iter func(*int64) bool return "" } -// ProcessElement returns a diff between values associated with a key. It +// diffIntFn returns a diff between values associated with a key. It // returns an empty string if the values are approximately equal. func diffIntFn(k beam.X, v1Iter, v2Iter func(*int) bool) string { var v1 = intPtrToSlice(v1Iter) diff --git a/privacy-on-beam/privacy_on_beam_deps.bzl b/privacy-on-beam/privacy_on_beam_deps.bzl index 4477b3bb..152e5fee 100644 --- a/privacy-on-beam/privacy_on_beam_deps.bzl +++ b/privacy-on-beam/privacy_on_beam_deps.bzl @@ -24,6 +24,13 @@ def privacy_on_beam_deps(): Generated automatically by gazelle. """ + go_repository( + name = "cat_dario_mergo", + importpath = "dario.cat/mergo", + sum = "h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=", + version = "v1.0.0", + ) + go_repository( name = "co_honnef_go_tools", importpath = "honnef.co/go/tools", @@ -48,6 +55,18 @@ def privacy_on_beam_deps(): sum = "h1:slYM766cy2nI3BwyRiyQj/Ud48djTMtMebDqepE95rw=", version = "v0.0.0-20211024235047-1546f124cd8b", ) + go_repository( + name = "com_github_andybalholm_brotli", + importpath = "github.com/andybalholm/brotli", + sum = "h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY=", + version = "v1.0.4", + ) + go_repository( + name = "com_github_andybalholm_stroke", + importpath = "github.com/andybalholm/stroke", + sum = "h1:uF5Q/hWnDU1XZeT6CsrRSxHLroUSEYYO3kgES+yd+So=", + version = "v0.0.0-20221221101821-bd29b49d73f0", + ) go_repository( name = "com_github_apache_arrow_go_arrow", @@ -55,18 +74,25 @@ def privacy_on_beam_deps(): sum = "h1:byKBBF2CKWBjjA4J1ZL2JXttJULvWSl50LegTyRZ728=", version = "v0.0.0-20200730104253-651201b0f516", ) + go_repository( + name = "com_github_apache_arrow_go_v12", + importpath = "github.com/apache/arrow/go/v12", + sum = "h1:xtZE63VWl7qLdB0JObIXvvhGjoVNrQ9ciIHG2OK5cmc=", + version = "v12.0.0", + ) + go_repository( name = "com_github_apache_beam_sdks_v2", build_file_proto_mode = "disable_global", # See https://github.com/bazelbuild/rules_go/issues/2186#issuecomment-523028281 importpath = "github.com/apache/beam/sdks/v2", - sum = "h1:CkssanJ42U1yHj86XAfUrNQEc2G2/O+vu9IK1OIG5iQ=", - version = "v2.46.0", + sum = "h1:Aim/7wEu39NThDEdk9ERyk8ojLRu59sv5+/22WLRbss=", + version = "v2.49.0", ) go_repository( name = "com_github_apache_thrift", importpath = "github.com/apache/thrift", - sum = "h1:hY4rAyg7Eqbb27GB6gkhUKrRAuc8xRjlNtJq+LseKeY=", - version = "v0.14.2", + sum = "h1:qEy6UW60iVOlUy+b9ZR0d5WzUWYGOo4HfopoyBaNmoY=", + version = "v0.16.0", ) go_repository( name = "com_github_aws_aws_sdk_go", @@ -77,116 +103,116 @@ def privacy_on_beam_deps(): go_repository( name = "com_github_aws_aws_sdk_go_v2", importpath = "github.com/aws/aws-sdk-go-v2", - sum = "h1:TzCUW1Nq4H8Xscph5M/skINUitxM5UBAyvm2s7XBzL4=", - version = "v1.17.5", + sum = "h1:CpTS3XO3MWNel8ohoazkLZC6scvkYL2k+m0yzFJ17Hg=", + version = "v1.22.0", ) go_repository( name = "com_github_aws_aws_sdk_go_v2_aws_protocol_eventstream", importpath = "github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream", - sum = "h1:dK82zF6kkPeCo8J1e+tGx4JdvDIQzj7ygIoLg8WMuGs=", - version = "v1.4.10", + sum = "h1:Sc82v7tDQ/vdU1WtuSyzZ1I7y/68j//HJ6uozND1IDs=", + version = "v1.4.14", ) go_repository( name = "com_github_aws_aws_sdk_go_v2_config", importpath = "github.com/aws/aws-sdk-go-v2/config", - sum = "h1:rI47jCe0EzuJlAO5ptREe3LIBAyP5c7gR3wjyYVjuOM=", - version = "v1.18.14", + sum = "h1:q2+/mqFhY0J9m3Tb5RGFE3R4sdaUkIe4k2EuDfE3c08=", + version = "v1.20.0", ) go_repository( name = "com_github_aws_aws_sdk_go_v2_credentials", importpath = "github.com/aws/aws-sdk-go-v2/credentials", - sum = "h1:jE34fUepssrhmYpvPpdbd+d39PHpuignDpNPNJguP60=", - version = "v1.13.14", + sum = "h1:LQquqPE7cL55RQmA/UBoBKehDlEtMnQKm3B0Q672ePE=", + version = "v1.14.0", ) go_repository( name = "com_github_aws_aws_sdk_go_v2_feature_ec2_imds", importpath = "github.com/aws/aws-sdk-go-v2/feature/ec2/imds", - sum = "h1:Kbiv9PGnQfG/imNI4L/heyUXvzKmcWSBeDvkrQz5pFc=", - version = "v1.12.23", + sum = "h1:lF/cVllNAPKgjDwN2RsQUX9g/f6hXer9f10ubLFSoug=", + version = "v1.14.0", ) go_repository( name = "com_github_aws_aws_sdk_go_v2_feature_s3_manager", importpath = "github.com/aws/aws-sdk-go-v2/feature/s3/manager", - sum = "h1:ATgzvd5DaU0Evx7yvaUw2ftwiWDGnDN59zowPF3jDk0=", - version = "v1.11.50", + sum = "h1:haAyxKHwoE+y/TJt+qHcPQf1dCViyyGbWcKjjYUllTE=", + version = "v1.11.91", ) go_repository( name = "com_github_aws_aws_sdk_go_v2_internal_configsources", importpath = "github.com/aws/aws-sdk-go-v2/internal/configsources", - sum = "h1:9/aKwwus0TQxppPXFmf010DFrE+ssSbzroLVYINA+xE=", - version = "v1.1.29", + sum = "h1:tN6dNNE4SzMuyMnVtQJXGVKX177/d5Zy4MuA1HA4KUc=", + version = "v1.2.0", ) go_repository( name = "com_github_aws_aws_sdk_go_v2_internal_endpoints_v2", importpath = "github.com/aws/aws-sdk-go-v2/internal/endpoints/v2", - sum = "h1:b/Vn141DBuLVgXbhRWIrl9g+ww7G+ScV5SzniWR13jQ=", - version = "v2.4.23", + sum = "h1:bfdsbTARDjaC/dSYGMO+E0psxFU4hTvCLnqYAfZ3D38=", + version = "v2.5.0", ) go_repository( name = "com_github_aws_aws_sdk_go_v2_internal_ini", importpath = "github.com/aws/aws-sdk-go-v2/internal/ini", - sum = "h1:IVx9L7YFhpPq0tTnGo8u8TpluFu7nAn9X3sUDMb11c0=", - version = "v1.3.30", + sum = "h1:21tlTXq3ev10yLMAjXZzpkZbrl49h3ElSjmxD57tD/E=", + version = "v1.4.0", ) go_repository( name = "com_github_aws_aws_sdk_go_v2_internal_v4a", importpath = "github.com/aws/aws-sdk-go-v2/internal/v4a", - sum = "h1:H/mF2LNWwX00lD6FlYfKpLLZgUW7oIzCBkig78x4Xok=", - version = "v1.0.18", + sum = "h1:wmGLw2i8ZTlHLw7a9ULGfQbuccw8uIiNr6sol5bFzc8=", + version = "v1.1.6", ) go_repository( name = "com_github_aws_aws_sdk_go_v2_service_internal_accept_encoding", importpath = "github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding", - sum = "h1:y2+VQzC6Zh2ojtV2LoC0MNwHWc6qXv/j2vrQtlftkdA=", - version = "v1.9.11", + sum = "h1:7R8uRYyXzdD71KWVCL78lJZltah6VVznXBazvKjfH58=", + version = "v1.9.15", ) go_repository( name = "com_github_aws_aws_sdk_go_v2_service_internal_checksum", importpath = "github.com/aws/aws-sdk-go-v2/service/internal/checksum", - sum = "h1:kv5vRAl00tozRxSnI0IszPWGXsJOyA7hmEUHFYqsyvw=", - version = "v1.1.22", + sum = "h1:skaFGzv+3kA+v2BPKhuekeb1Hbb105+44r8ASC+q5SE=", + version = "v1.1.38", ) go_repository( name = "com_github_aws_aws_sdk_go_v2_service_internal_presigned_url", importpath = "github.com/aws/aws-sdk-go-v2/service/internal/presigned-url", - sum = "h1:QoOybhwRfciWUBbZ0gp9S7XaDnCuSTeK/fySB99V1ls=", - version = "v1.9.23", + sum = "h1:dJnwy5Awv+uvfk73aRENVbv1cSQQ60ydCkPaun097KM=", + version = "v1.10.0", ) go_repository( name = "com_github_aws_aws_sdk_go_v2_service_internal_s3shared", importpath = "github.com/aws/aws-sdk-go-v2/service/internal/s3shared", - sum = "h1:vY5siRXvW5TrOKm2qKEf9tliBfdLxdfy0i02LOcmqUo=", - version = "v1.13.21", + sum = "h1:9ulSU5ClouoPIYhDQdg9tpl83d5Yb91PXTKK+17q+ow=", + version = "v1.15.6", ) go_repository( name = "com_github_aws_aws_sdk_go_v2_service_s3", importpath = "github.com/aws/aws-sdk-go-v2/service/s3", - sum = "h1:kIgvVY7PHx4gIb0na/Q9gTWJWauTwhKdaqJjX8PkIY8=", - version = "v1.30.1", + sum = "h1:Ll5/YVCOzRB+gxPqs2uD0R7/MyATC0w85626glSKmp4=", + version = "v1.40.2", ) go_repository( name = "com_github_aws_aws_sdk_go_v2_service_sso", importpath = "github.com/aws/aws-sdk-go-v2/service/sso", - sum = "h1:bUeZTWfF1vBdZnoNnnq70rB/CzdZD7NR2Jg2Ax+rvjA=", - version = "v1.12.3", + sum = "h1:ZIlR6Wr/EgYwBdEz1NWBqdUsTh0mV7A68pId3YZl6H0=", + version = "v1.16.0", ) go_repository( name = "com_github_aws_aws_sdk_go_v2_service_ssooidc", importpath = "github.com/aws/aws-sdk-go-v2/service/ssooidc", - sum = "h1:G/+7NUi+q+H0LG3v32jfV4OkaQIcpI92g0owbXKk6NY=", - version = "v1.14.3", + sum = "h1:3BZyJei4k1SHdSAFhg9Qg15NnG3v5zosZyFWPm7df/A=", + version = "v1.18.0", ) go_repository( name = "com_github_aws_aws_sdk_go_v2_service_sts", importpath = "github.com/aws/aws-sdk-go-v2/service/sts", - sum = "h1:j0USUNbl9c/8tBJ8setEbwxc7wva0WyoeAaFRiyTUT8=", - version = "v1.18.4", + sum = "h1:f/V5Y9OaHuNRrA9MntNQNAtMFXqhKj8HTEPnH81eXMI=", + version = "v1.24.0", ) go_repository( name = "com_github_aws_smithy_go", importpath = "github.com/aws/smithy-go", - sum = "h1:hgz0X/DX0dGqTYpGALqXJoRKRj5oQ7150i5FdTePzO8=", - version = "v1.13.5", + sum = "h1:gJZEH/Fqh+RsvlJ1Zt4tVAtV6bKkp3cC+R6FCZMNzik=", + version = "v1.16.0", ) go_repository( @@ -207,11 +233,18 @@ def privacy_on_beam_deps(): sum = "h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=", version = "v0.3.1", ) + go_repository( + name = "com_github_campoy_embedmd", + importpath = "github.com/campoy/embedmd", + sum = "h1:V4kI2qTJJLf4J29RzI/MAt2c3Bl4dQSYPuflzwFH2hY=", + version = "v1.0.0", + ) + go_repository( name = "com_github_cenkalti_backoff_v4", importpath = "github.com/cenkalti/backoff/v4", - sum = "h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4=", - version = "v4.2.0", + sum = "h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=", + version = "v4.2.1", ) go_repository( name = "com_github_census_instrumentation_opencensus_proto", @@ -225,6 +258,36 @@ def privacy_on_beam_deps(): sum = "h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=", version = "v2.2.0", ) + go_repository( + name = "com_github_chromedp_cdproto", + importpath = "github.com/chromedp/cdproto", + sum = "h1:aPflPkRFkVwbW6dmcVqfgwp1i+UWGFH6VgR1Jim5Ygc=", + version = "v0.0.0-20230802225258-3cf4e6d46a89", + ) + go_repository( + name = "com_github_chromedp_chromedp", + importpath = "github.com/chromedp/chromedp", + sum = "h1:dKtNz4kApb06KuSXoTQIyUC2TrA0fhGDwNZf3bcgfKw=", + version = "v0.9.2", + ) + go_repository( + name = "com_github_chromedp_sysutil", + importpath = "github.com/chromedp/sysutil", + sum = "h1:+ZxhTpfpZlmchB58ih/LBHX52ky7w2VhQVKQMucy3Ic=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_chzyer_readline", + importpath = "github.com/chzyer/readline", + sum = "h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI=", + version = "v1.5.1", + ) + go_repository( + name = "com_github_client9_misspell", + importpath = "github.com/client9/misspell", + sum = "h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI=", + version = "v0.3.4", + ) go_repository( name = "com_github_cncf_udpa_go", @@ -235,28 +298,46 @@ def privacy_on_beam_deps(): go_repository( name = "com_github_cncf_xds_go", importpath = "github.com/cncf/xds/go", - sum = "h1:ACGZRIr7HsgBKHsueQ1yM4WaVaXh21ynwqsF8M8tXhA=", - version = "v0.0.0-20230105202645-06c439db220b", + sum = "h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k=", + version = "v0.0.0-20230607035331-e9ce68804cb4", ) go_repository( name = "com_github_containerd_containerd", importpath = "github.com/containerd/containerd", - sum = "h1:XDnJIeJW0cLf6v7/+N+6L9kGrChHeXekZp2VHu6OpiY=", - version = "v1.6.17", + sum = "h1:oNAVsnhPoy4BTPQivLgTzI9Oleml9l/+eYIDYXRCYo8=", + version = "v1.7.6", + ) + go_repository( + name = "com_github_cpuguy83_dockercfg", + importpath = "github.com/cpuguy83/dockercfg", + sum = "h1:/FpZ+JaygUR/lZP2NlFI2DVfrOEMAIKP5wWEJdoYe9E=", + version = "v0.3.1", + ) + go_repository( + name = "com_github_davecgh_go_spew", + importpath = "github.com/davecgh/go-spew", + sum = "h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=", + version = "v1.1.1", + ) + go_repository( + name = "com_github_distribution_reference", + importpath = "github.com/distribution/reference", + sum = "h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0=", + version = "v0.5.0", ) go_repository( name = "com_github_docker_distribution", importpath = "github.com/docker/distribution", - sum = "h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68=", - version = "v2.8.1+incompatible", + sum = "h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk=", + version = "v2.8.3+incompatible", ) go_repository( name = "com_github_docker_docker", importpath = "github.com/docker/docker", - sum = "h1:L6c28tNyqZ4/ub9AZC9d5QUuunoHHfEH4/Ue+h/E5nE=", - version = "v23.0.0+incompatible", + sum = "h1:Wo6l37AuwP3JaMnZa226lzVXGA3F9Ig1seQen0cKYlM=", + version = "v24.0.7+incompatible", ) go_repository( name = "com_github_docker_go_connections", @@ -280,15 +361,22 @@ def privacy_on_beam_deps(): go_repository( name = "com_github_envoyproxy_go_control_plane", importpath = "github.com/envoyproxy/go-control-plane", - sum = "h1:xdCVXxEe0Y3FQith+0cj2irwZudqGYvecuLB1HtdexY=", - version = "v0.10.3", + sum = "h1:wSUXTlLfiAQRWs2F+p+EKOY9rUyis1MyGqJ2DIk5HpM=", + version = "v0.11.1", ) go_repository( name = "com_github_envoyproxy_protoc_gen_validate", importpath = "github.com/envoyproxy/protoc-gen-validate", - sum = "h1:PS7VIOgmSVhWUEeZwTe7z7zouA22Cr590PzXKbZHOVY=", - version = "v0.9.1", + sum = "h1:QkIBuU5k+x7/QXPvPPnWXWlCdaBFApVqftFV6k087DA=", + version = "v1.0.2", ) + go_repository( + name = "com_github_felixge_httpsnoop", + importpath = "github.com/felixge/httpsnoop", + sum = "h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o=", + version = "v1.0.2", + ) + go_repository( name = "com_github_fogleman_gg", importpath = "github.com/fogleman/gg", @@ -301,49 +389,99 @@ def privacy_on_beam_deps(): sum = "h1:xfmOhhoH5fGPgbEAlhLpJH9p0z/0Qizio9osmvn9IUY=", version = "v1.2.2", ) + go_repository( + name = "com_github_fsouza_fake_gcs_server", + importpath = "github.com/fsouza/fake-gcs-server", + sum = "h1:/d/879q/Os9Zc5gyV3QVLfZoajN1KcWucf2zYCFeFxs=", + version = "v1.47.6", + ) go_repository( name = "com_github_go_fonts_dejavu", importpath = "github.com/go-fonts/dejavu", - sum = "h1:JSajPXURYqpr+Cu8U9bt8K+XcACIHWqWrvWCKyeFmVQ=", - version = "v0.1.0", + sum = "h1:3XlHi0JBYX+Cp8n98c6qSoHrxPa4AUKDMKdrh/0sUdk=", + version = "v0.3.2", ) go_repository( name = "com_github_go_fonts_latin_modern", importpath = "github.com/go-fonts/latin-modern", - sum = "h1:CIDlMm0djMO3XIKHVz2na9lFKt3kdC/YCy7k7lLpyjE=", - version = "v0.3.0", + sum = "h1:M+Sq24Dp0ZRPf3TctPnG1MZxRblqyWC/cRUL9WmdaFc=", + version = "v0.3.2", ) go_repository( name = "com_github_go_fonts_liberation", importpath = "github.com/go-fonts/liberation", - sum = "h1:3BI2iaE7R/s6uUUtzNCjo3QijJu3aS4wmrMgfSpYQ+8=", - version = "v0.3.0", + sum = "h1:XuwG0vGHFBPRRI8Qwbi5tIvR3cku9LUfZGq/Ar16wlQ=", + version = "v0.3.2", ) go_repository( name = "com_github_go_fonts_stix", importpath = "github.com/go-fonts/stix", - sum = "h1:UlZlgrvvmT/58o573ot7NFw0vZasZ5I6bcIft/oMdgg=", - version = "v0.1.0", + sum = "h1:v9krocr13J1llaOHLEol1eaHsv8S43UuFX/1bFgEJJ4=", + version = "v0.2.2", ) go_repository( name = "com_github_go_latex_latex", importpath = "github.com/go-latex/latex", - sum = "h1:NxXI5pTAtpEaU49bpLpQoDsu1zrteW/vxzTz8Cd2UAs=", - version = "v0.0.0-20230307184459-12ec69307ad9", + sum = "h1:DfZQkvEbdmOe+JK2TMtBM+0I9GSdzE2y/L1/AmD8xKc=", + version = "v0.0.0-20231108140139-5c1ce85aa4ea", ) + go_repository( + name = "com_github_go_ole_go_ole", + importpath = "github.com/go-ole/go-ole", + sum = "h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=", + version = "v1.2.6", + ) + go_repository( name = "com_github_go_pdf_fpdf", importpath = "github.com/go-pdf/fpdf", - sum = "h1:Kgf56ewNyhYcv6LIbhDWGRF91+e4aGMjpQlabnZnz9Q=", - version = "v0.7.0", + sum = "h1:PPvSaUuo1iMi9KkaAn90NuKi+P4gwMedWPHhj8YlJQw=", + version = "v0.9.0", ) go_repository( name = "com_github_go_sql_driver_mysql", importpath = "github.com/go-sql-driver/mysql", - sum = "h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc=", - version = "v1.7.0", + sum = "h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=", + version = "v1.7.1", + ) + go_repository( + name = "com_github_go_text_typesetting", + importpath = "github.com/go-text/typesetting", + sum = "h1:FQivqchis6bE2/9uF70M2gmmLpe82esEm2QadL0TEJo=", + version = "v0.0.0-20230803102845-24e03d8b5372", ) + go_repository( + name = "com_github_gobwas_httphead", + importpath = "github.com/gobwas/httphead", + sum = "h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU=", + version = "v0.1.0", + ) + go_repository( + name = "com_github_gobwas_pool", + importpath = "github.com/gobwas/pool", + sum = "h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og=", + version = "v0.2.1", + ) + go_repository( + name = "com_github_gobwas_ws", + importpath = "github.com/gobwas/ws", + sum = "h1:F2aeBZrm2NDsc7vbovKrWSogd4wvfAxg0FQ89/iqOTk=", + version = "v1.2.1", + ) + go_repository( + name = "com_github_goccmack_gocc", + importpath = "github.com/goccmack/gocc", + sum = "h1:FSii2UQeSLngl3jFoR4tUKZLprO7qUlh/TKKticc0BM=", + version = "v0.0.0-20230228185258-2292f9e40198", + ) + go_repository( + name = "com_github_goccy_go_json", + importpath = "github.com/goccy/go-json", + sum = "h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk=", + version = "v0.9.11", + ) + go_repository( name = "com_github_gogo_protobuf", importpath = "github.com/gogo/protobuf", @@ -359,8 +497,8 @@ def privacy_on_beam_deps(): go_repository( name = "com_github_golang_glog", importpath = "github.com/golang/glog", - sum = "h1:jxpi2eWoU84wbX9iIEyAeeoac3FLuifZpY9tcNUD9kw=", - version = "v1.1.1", + sum = "h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68=", + version = "v1.2.0", ) go_repository( name = "com_github_golang_groupcache", @@ -368,6 +506,12 @@ def privacy_on_beam_deps(): sum = "h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=", version = "v0.0.0-20210331224755-41bb18bfe9da", ) + go_repository( + name = "com_github_golang_mock", + importpath = "github.com/golang/mock", + sum = "h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=", + version = "v1.6.0", + ) go_repository( name = "com_github_golang_protobuf", @@ -381,43 +525,93 @@ def privacy_on_beam_deps(): sum = "h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=", version = "v0.0.4", ) + go_repository( + name = "com_github_google_flatbuffers", + importpath = "github.com/google/flatbuffers", + sum = "h1:ivUb1cGomAB101ZM1T0nOiWz9pSrTMoa9+EiY7igmkM=", + version = "v2.0.8+incompatible", + ) + go_repository( name = "com_github_google_go_cmp", importpath = "github.com/google/go-cmp", - sum = "h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=", - version = "v0.5.9", + sum = "h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=", + version = "v0.6.0", ) + go_repository( + name = "com_github_google_go_pkcs11", + importpath = "github.com/google/go-pkcs11", + sum = "h1:OF1IPgv+F4NmqmJ98KTjdN97Vs1JxDPB3vbmYzV2dpk=", + version = "v0.2.1-0.20230907215043-c6f79328ddf9", + ) + go_repository( + name = "com_github_google_martian_v3", + importpath = "github.com/google/martian/v3", + sum = "h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw=", + version = "v3.3.2", + ) + go_repository( name = "com_github_google_pprof", importpath = "github.com/google/pprof", - sum = "h1:lvddKcYTQ545ADhBujtIJmqQrZBDsGo7XIMbAQe/sNY=", - version = "v0.0.0-20221103000818-d260c55eee4c", + sum = "h1:fEBsGL/sjAuJrgah5XqmmYsTLzJp/TO9Lhy39gkverk=", + version = "v0.0.0-20231101202521-4ca4178f5c7a", + ) + go_repository( + name = "com_github_google_renameio_v2", + importpath = "github.com/google/renameio/v2", + sum = "h1:UifI23ZTGY8Tt29JbYFiuyIU3eX+RNFtUwefq9qAhxg=", + version = "v2.0.0", + ) + go_repository( + name = "com_github_google_s2a_go", + importpath = "github.com/google/s2a-go", + sum = "h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=", + version = "v0.1.7", ) go_repository( name = "com_github_google_uuid", importpath = "github.com/google/uuid", - sum = "h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=", - version = "v1.3.0", + sum = "h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=", + version = "v1.4.0", ) go_repository( name = "com_github_googleapis_enterprise_certificate_proxy", importpath = "github.com/googleapis/enterprise-certificate-proxy", - sum = "h1:RY7tHKZcRlk788d5WSo/e83gOyyy742E8GSs771ySpg=", - version = "v0.2.1", + sum = "h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs=", + version = "v0.3.2", ) go_repository( name = "com_github_googleapis_gax_go_v2", importpath = "github.com/googleapis/gax-go/v2", - sum = "h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ=", - version = "v2.7.0", + sum = "h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas=", + version = "v2.12.0", + ) + go_repository( + name = "com_github_gorilla_handlers", + importpath = "github.com/gorilla/handlers", + sum = "h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4=", + version = "v1.5.1", + ) + go_repository( + name = "com_github_gorilla_mux", + importpath = "github.com/gorilla/mux", + sum = "h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=", + version = "v1.8.0", + ) + go_repository( + name = "com_github_ianlancetaylor_demangle", + importpath = "github.com/ianlancetaylor/demangle", + sum = "h1:BA4a7pe6ZTd9F8kXETBoijjFJ/ntaa//1wiH9BZu4zU=", + version = "v0.0.0-20230524184225-eabc099b10ab", ) go_repository( name = "com_github_inconshreveable_mousetrap", importpath = "github.com/inconshreveable/mousetrap", - sum = "h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc=", - version = "v1.0.1", + sum = "h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=", + version = "v1.1.0", ) go_repository( name = "com_github_jmespath_go_jmespath", @@ -431,6 +625,18 @@ def privacy_on_beam_deps(): sum = "h1:eQGUsj2LcsLzfrHY1noKDSU7h+c9/rw9pQPwbQ9g1jQ=", version = "v0.0.0-20221110173912-32fb85c5aed6", ) + go_repository( + name = "com_github_josharian_intern", + importpath = "github.com/josharian/intern", + sum = "h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_kisielk_errcheck", + importpath = "github.com/kisielk/errcheck", + sum = "h1:e8esj/e4R+SAOwFwN+n3zr0nYeCyeweozKfO23MvHzY=", + version = "v1.5.0", + ) go_repository( name = "com_github_kisielk_gotool", @@ -438,12 +644,26 @@ def privacy_on_beam_deps(): sum = "h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg=", version = "v1.0.0", ) + go_repository( + name = "com_github_klauspost_asmfmt", + importpath = "github.com/klauspost/asmfmt", + sum = "h1:4Ri7ox3EwapiOjCki+hw14RyKk201CN4rzyCJRFLpK4=", + version = "v1.3.2", + ) + go_repository( name = "com_github_klauspost_compress", importpath = "github.com/klauspost/compress", - sum = "h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc=", - version = "v1.13.6", + sum = "h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I=", + version = "v1.16.7", ) + go_repository( + name = "com_github_klauspost_cpuid_v2", + importpath = "github.com/klauspost/cpuid/v2", + sum = "h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg=", + version = "v2.2.5", + ) + go_repository( name = "com_github_kr_pretty", importpath = "github.com/kr/pretty", @@ -466,27 +686,60 @@ def privacy_on_beam_deps(): go_repository( name = "com_github_lib_pq", importpath = "github.com/lib/pq", - sum = "h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw=", - version = "v1.10.7", + sum = "h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=", + version = "v1.10.9", ) go_repository( - name = "com_github_linkedin_goavro", - importpath = "github.com/linkedin/goavro", - sum = "h1:DV2aUlj2xZiuxQyvag8Dy7zjY69ENjS66bWkSfdpddY=", - version = "v2.1.0+incompatible", + name = "com_github_linkedin_goavro_v2", + importpath = "github.com/linkedin/goavro/v2", + sum = "h1:rIQQSj8jdAUlKQh6DttK8wCRv4t4QO09g1C4aBWXslg=", + version = "v2.12.0", ) + go_repository( + name = "com_github_lufia_plan9stats", + importpath = "github.com/lufia/plan9stats", + sum = "h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=", + version = "v0.0.0-20211012122336-39d0f177ccd0", + ) + go_repository( name = "com_github_magiconair_properties", importpath = "github.com/magiconair/properties", sum = "h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=", version = "v1.8.7", ) + go_repository( + name = "com_github_mailru_easyjson", + importpath = "github.com/mailru/easyjson", + sum = "h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=", + version = "v0.7.7", + ) + go_repository( name = "com_github_microsoft_go_winio", importpath = "github.com/Microsoft/go-winio", - sum = "h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA=", - version = "v0.5.2", + sum = "h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=", + version = "v0.6.1", ) + go_repository( + name = "com_github_microsoft_hcsshim", + importpath = "github.com/Microsoft/hcsshim", + sum = "h1:7EFNIY4igHEXUdj1zXgAyU3fLc7QfOKHbkldRVTBdiM=", + version = "v0.11.0", + ) + go_repository( + name = "com_github_minio_asm2plan9s", + importpath = "github.com/minio/asm2plan9s", + sum = "h1:AMFGa4R4MiIpspGNG7Z948v4n35fFGB3RR3G/ry4FWs=", + version = "v0.0.0-20200509001527-cdd76441f9d8", + ) + go_repository( + name = "com_github_minio_c2goasm", + importpath = "github.com/minio/c2goasm", + sum = "h1:+n/aFZefKZp7spd8DFdX7uMikMLXX4oubIzJF4kv/wI=", + version = "v0.0.0-20190812172519-36a3d3bbc4f3", + ) + go_repository( name = "com_github_moby_patternmatcher", importpath = "github.com/moby/patternmatcher", @@ -503,8 +756,8 @@ def privacy_on_beam_deps(): go_repository( name = "com_github_moby_term", importpath = "github.com/moby/term", - sum = "h1:J/7hjLaHLD7epG0m6TBMGmp4NQ+ibBYLfeyJWdAIFLA=", - version = "v0.0.0-20221128092401-c43b287e0e0f", + sum = "h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=", + version = "v0.5.0", ) go_repository( name = "com_github_montanaflynn_stats", @@ -529,14 +782,14 @@ def privacy_on_beam_deps(): go_repository( name = "com_github_opencontainers_image_spec", importpath = "github.com/opencontainers/image-spec", - sum = "h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034=", - version = "v1.1.0-rc2", + sum = "h1:Ygwkfw9bpDvs+c9E34SdgGOj41dX/cbdlwvlWt0pnFI=", + version = "v1.1.0-rc5", ) go_repository( name = "com_github_opencontainers_runc", importpath = "github.com/opencontainers/runc", - sum = "h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w=", - version = "v1.1.3", + sum = "h1:L44KXEpKmfWDcS02aeGm8QNTFXTo2D+8MYGDIJ/GDEs=", + version = "v1.1.5", ) go_repository( @@ -548,8 +801,8 @@ def privacy_on_beam_deps(): go_repository( name = "com_github_pierrec_lz4_v4", importpath = "github.com/pierrec/lz4/v4", - sum = "h1:ieHkV+i2BRzngO4Wd/3HGowuZStgq6QkPsD1eolNAO4=", - version = "v4.1.8", + sum = "h1:MO0/ucJhngq7299dKLwIMtgTfbkoSPF6AoMYDd8Q4q0=", + version = "v4.1.15", ) go_repository( name = "com_github_pkg_errors", @@ -557,12 +810,36 @@ def privacy_on_beam_deps(): sum = "h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=", version = "v0.9.1", ) + go_repository( + name = "com_github_pkg_xattr", + importpath = "github.com/pkg/xattr", + sum = "h1:5883YPCtkSd8LFbs13nXplj9g9tlrwoJRjgpgMu1/fE=", + version = "v0.4.9", + ) + go_repository( + name = "com_github_pmezard_go_difflib", + importpath = "github.com/pmezard/go-difflib", + sum = "h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_power_devops_perfstat", + importpath = "github.com/power-devops/perfstat", + sum = "h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=", + version = "v0.0.0-20210106213030-5aafc221ea8c", + ) + go_repository( + name = "com_github_prometheus_client_model", + importpath = "github.com/prometheus/client_model", + sum = "h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM=", + version = "v0.0.0-20190812154241-14fe0d1b01d4", + ) go_repository( name = "com_github_proullon_ramsql", importpath = "github.com/proullon/ramsql", - sum = "h1:mtMU7aT8cTAyNL3O4RyOfe/OOUxwCN525SIbKQoUvw0=", - version = "v0.0.0-20211120092837-c8d0a408b939", + sum = "h1:/LRcXJf4lEmhdb4tYcci473I2VynjcZSzh2hsjJ8rSk=", + version = "v0.1.3", ) go_repository( name = "com_github_rogpeppe_clock", @@ -570,6 +847,12 @@ def privacy_on_beam_deps(): sum = "h1:3QH7VyOaaiUHNrA9Se4YQIRkDTCw1EJls9xTUCaCeRM=", version = "v0.0.0-20190514195947-2896927a307a", ) + go_repository( + name = "com_github_russross_blackfriday", + importpath = "github.com/russross/blackfriday", + sum = "h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww=", + version = "v1.6.0", + ) go_repository( name = "com_github_ruudk_golang_pdf417", @@ -589,18 +872,30 @@ def privacy_on_beam_deps(): sum = "h1:J6qvD6rbmOil46orKqJaRPG+zTpoGlBTUdyv8ki63L0=", version = "v0.0.0-20180507124511-f6ea450bfb63", ) + go_repository( + name = "com_github_shirou_gopsutil_v3", + importpath = "github.com/shirou/gopsutil/v3", + sum = "h1:xnATPiybo6GgdRoC4YoGnxXZFRc3dqQTGi73oLvvBrE=", + version = "v3.23.8", + ) + go_repository( + name = "com_github_shoenig_go_m1cpu", + importpath = "github.com/shoenig/go-m1cpu", + sum = "h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM=", + version = "v0.1.6", + ) go_repository( name = "com_github_sirupsen_logrus", importpath = "github.com/sirupsen/logrus", - sum = "h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=", - version = "v1.9.0", + sum = "h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=", + version = "v1.9.3", ) go_repository( name = "com_github_spf13_cobra", importpath = "github.com/spf13/cobra", - sum = "h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA=", - version = "v1.6.1", + sum = "h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I=", + version = "v1.7.0", ) go_repository( name = "com_github_spf13_pflag", @@ -608,19 +903,44 @@ def privacy_on_beam_deps(): sum = "h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=", version = "v1.0.5", ) + go_repository( + name = "com_github_stretchr_objx", + importpath = "github.com/stretchr/objx", + sum = "h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=", + version = "v0.5.0", + ) + go_repository( + name = "com_github_stretchr_testify", + importpath = "github.com/stretchr/testify", + sum = "h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=", + version = "v1.8.1", + ) go_repository( name = "com_github_testcontainers_testcontainers_go", importpath = "github.com/testcontainers/testcontainers-go", - sum = "h1:8RXrcIQv5xX/uBOSmZd297gzvA7F0yuRA37/918o7Yg=", - version = "v0.18.0", + sum = "h1:erH6cQjsaJrH+rJDU9qIf89KFdhK0Bft0aEZHlYC3Vs=", + version = "v0.25.0", ) go_repository( name = "com_github_tetratelabs_wazero", importpath = "github.com/tetratelabs/wazero", - sum = "h1:2uVdi2bvTi/JQxG2cp3LRm2aRadd3nURn5jcfbvqZcw=", - version = "v1.0.0-pre.9", + sum = "h1:Yz3fZHivfDiZFUXnWMPUoiW7s8tC1sjdBtlJn08qYa0=", + version = "v1.5.0", ) + go_repository( + name = "com_github_tklauser_go_sysconf", + importpath = "github.com/tklauser/go-sysconf", + sum = "h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=", + version = "v0.3.12", + ) + go_repository( + name = "com_github_tklauser_numcpus", + importpath = "github.com/tklauser/numcpus", + sum = "h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=", + version = "v0.6.1", + ) + go_repository( name = "com_github_xdg_go_pbkdf2", importpath = "github.com/xdg-go/pbkdf2", @@ -630,14 +950,32 @@ def privacy_on_beam_deps(): go_repository( name = "com_github_xdg_go_scram", importpath = "github.com/xdg-go/scram", - sum = "h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E=", - version = "v1.1.1", + sum = "h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY=", + version = "v1.1.2", ) go_repository( name = "com_github_xdg_go_stringprep", importpath = "github.com/xdg-go/stringprep", - sum = "h1:kdwGpVNwPFtjs98xCGkHjQtGKh86rDcRZN17QEMCOIs=", - version = "v1.0.3", + sum = "h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8=", + version = "v1.0.4", + ) + go_repository( + name = "com_github_xeipuuv_gojsonpointer", + importpath = "github.com/xeipuuv/gojsonpointer", + sum = "h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c=", + version = "v0.0.0-20180127040702-4e3ac2762d5f", + ) + go_repository( + name = "com_github_xeipuuv_gojsonreference", + importpath = "github.com/xeipuuv/gojsonreference", + sum = "h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0=", + version = "v0.0.0-20180127040603-bd5ef7bd5415", + ) + go_repository( + name = "com_github_xeipuuv_gojsonschema", + importpath = "github.com/xeipuuv/gojsonschema", + sum = "h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74=", + version = "v1.2.0", ) go_repository( @@ -665,176 +1003,183 @@ def privacy_on_beam_deps(): sum = "h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE=", version = "v1.4.13", ) + go_repository( + name = "com_github_yusufpapurcu_wmi", + importpath = "github.com/yusufpapurcu/wmi", + sum = "h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=", + version = "v1.2.3", + ) + go_repository( + name = "com_github_zeebo_xxh3", + importpath = "github.com/zeebo/xxh3", + sum = "h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0=", + version = "v1.0.2", + ) + go_repository( name = "com_google_cloud_go", importpath = "cloud.google.com/go", - sum = "h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys=", - version = "v0.110.0", + sum = "h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y=", + version = "v0.110.10", ) go_repository( name = "com_google_cloud_go_accessapproval", importpath = "cloud.google.com/go/accessapproval", - sum = "h1:x0cEHro/JFPd7eS4BlEWNTMecIj2HdXjOVB5BtvwER0=", - version = "v1.6.0", + sum = "h1:ZvLvJ952zK8pFHINjpMBY5k7LTAp/6pBf50RDMRgBUI=", + version = "v1.7.4", ) go_repository( name = "com_google_cloud_go_accesscontextmanager", importpath = "cloud.google.com/go/accesscontextmanager", - sum = "h1:MG60JgnEoawHJrbWw0jGdv6HLNSf6gQvYRiXpuzqgEA=", - version = "v1.7.0", + sum = "h1:Yo4g2XrBETBCqyWIibN3NHNPQKUfQqti0lI+70rubeE=", + version = "v1.8.4", ) go_repository( name = "com_google_cloud_go_aiplatform", importpath = "cloud.google.com/go/aiplatform", - sum = "h1:zTw+suCVchgZyO+k847wjzdVjWmrAuehxdvcZvJwfGg=", - version = "v1.37.0", + sum = "h1:wH7OYl9Vq/5tupok0BPTFY9xaTLb0GxkReHtB5PF7cI=", + version = "v1.54.0", ) go_repository( name = "com_google_cloud_go_analytics", importpath = "cloud.google.com/go/analytics", - sum = "h1:LqAo3tAh2FU9+w/r7vc3hBjU23Kv7GhO/PDIW7kIYgM=", - version = "v0.19.0", + sum = "h1:fnV7B8lqyEYxCU0LKk+vUL7mTlqRAq4uFlIthIdr/iA=", + version = "v0.21.6", ) go_repository( name = "com_google_cloud_go_apigateway", importpath = "cloud.google.com/go/apigateway", - sum = "h1:ZI9mVO7x3E9RK/BURm2p1aw9YTBSCQe3klmyP1WxWEg=", - version = "v1.5.0", + sum = "h1:VVIxCtVerchHienSlaGzV6XJGtEM9828Erzyr3miUGs=", + version = "v1.6.4", ) go_repository( name = "com_google_cloud_go_apigeeconnect", importpath = "cloud.google.com/go/apigeeconnect", - sum = "h1:sWOmgDyAsi1AZ48XRHcATC0tsi9SkPT7DA/+VCfkaeA=", - version = "v1.5.0", + sum = "h1:jSoGITWKgAj/ssVogNE9SdsTqcXnryPzsulENSRlusI=", + version = "v1.6.4", ) go_repository( name = "com_google_cloud_go_apigeeregistry", importpath = "cloud.google.com/go/apigeeregistry", - sum = "h1:E43RdhhCxdlV+I161gUY2rI4eOaMzHTA5kNkvRsFXvc=", - version = "v0.6.0", - ) - go_repository( - name = "com_google_cloud_go_apikeys", - importpath = "cloud.google.com/go/apikeys", - sum = "h1:B9CdHFZTFjVti89tmyXXrO+7vSNo2jvZuHG8zD5trdQ=", - version = "v0.6.0", + sum = "h1:DSaD1iiqvELag+lV4VnnqUUFd8GXELu01tKVdWZrviE=", + version = "v0.8.2", ) go_repository( name = "com_google_cloud_go_appengine", importpath = "cloud.google.com/go/appengine", - sum = "h1:aBGDKmRIaRRoWJ2tAoN0oVSHoWLhtO9aj/NvUyP4aYs=", - version = "v1.7.1", + sum = "h1:Qub3fqR7iA1daJWdzjp/Q0Jz0fUG0JbMc7Ui4E9IX/E=", + version = "v1.8.4", ) go_repository( name = "com_google_cloud_go_area120", importpath = "cloud.google.com/go/area120", - sum = "h1:ugckkFh4XkHJMPhTIx0CyvdoBxmOpMe8rNs4Ok8GAag=", - version = "v0.7.1", + sum = "h1:YnSO8m02pOIo6AEOgiOoUDVbw4pf+bg2KLHi4rky320=", + version = "v0.8.4", ) go_repository( name = "com_google_cloud_go_artifactregistry", importpath = "cloud.google.com/go/artifactregistry", - sum = "h1:o1Q80vqEB6Qp8WLEH3b8FBLNUCrGQ4k5RFj0sn/sgO8=", - version = "v1.13.0", + sum = "h1:/hQaadYytMdA5zBh+RciIrXZQBWK4vN7EUsrQHG+/t8=", + version = "v1.14.6", ) go_repository( name = "com_google_cloud_go_asset", importpath = "cloud.google.com/go/asset", - sum = "h1:YAsssO08BqZ6mncbb6FPlj9h6ACS7bJQUOlzciSfbNk=", - version = "v1.13.0", + sum = "h1:uI8Bdm81s0esVWbWrTHcjFDFKNOa9aB7rI1vud1hO84=", + version = "v1.15.3", ) go_repository( name = "com_google_cloud_go_assuredworkloads", importpath = "cloud.google.com/go/assuredworkloads", - sum = "h1:VLGnVFta+N4WM+ASHbhc14ZOItOabDLH1MSoDv+Xuag=", - version = "v1.10.0", + sum = "h1:FsLSkmYYeNuzDm8L4YPfLWV+lQaUrJmH5OuD37t1k20=", + version = "v1.11.4", ) go_repository( name = "com_google_cloud_go_automl", importpath = "cloud.google.com/go/automl", - sum = "h1:50VugllC+U4IGl3tDNcZaWvApHBTrn/TvyHDJ0wM+Uw=", - version = "v1.12.0", + sum = "h1:i9tOKXX+1gE7+rHpWKjiuPfGBVIYoWvLNIGpWgPtF58=", + version = "v1.13.4", ) go_repository( name = "com_google_cloud_go_baremetalsolution", importpath = "cloud.google.com/go/baremetalsolution", - sum = "h1:2AipdYXL0VxMboelTTw8c1UJ7gYu35LZYUbuRv9Q28s=", - version = "v0.5.0", + sum = "h1:oQiFYYCe0vwp7J8ZmF6siVKEumWtiPFJMJcGuyDVRUk=", + version = "v1.2.3", ) go_repository( name = "com_google_cloud_go_batch", importpath = "cloud.google.com/go/batch", - sum = "h1:YbMt0E6BtqeD5FvSv1d56jbVsWEzlGm55lYte+M6Mzs=", - version = "v0.7.0", + sum = "h1:mPiIH20a5NU02rucbAmLeO4sLPO9hrTK0BLjdHyW8xw=", + version = "v1.6.3", ) go_repository( name = "com_google_cloud_go_beyondcorp", importpath = "cloud.google.com/go/beyondcorp", - sum = "h1:UkY2BTZkEUAVrgqnSdOJ4p3y9ZRBPEe1LkjgC8Bj/Pc=", - version = "v0.5.0", + sum = "h1:VXf9SnrnSmj2BF2cHkoTHvOUp8gjsz1KJFOMW7czdsY=", + version = "v1.0.3", ) go_repository( name = "com_google_cloud_go_bigquery", importpath = "cloud.google.com/go/bigquery", - sum = "h1:RscMV6LbnAmhAzD893Lv9nXXy2WCaJmbxYPWDLbGqNQ=", - version = "v1.50.0", + sum = "h1:FiULdbbzUxWD0Y4ZGPSVCDLvqRSyCIO6zKV7E2nf5uA=", + version = "v1.57.1", ) go_repository( name = "com_google_cloud_go_bigtable", importpath = "cloud.google.com/go/bigtable", - sum = "h1:SxQk9Bj6OKxeiuvevG/KBjqGn/7X8heZbWfK0tYkFd8=", - version = "v1.18.1", + sum = "h1:NqZC/WcesSn4O8L0I2JmuNsUigSyBQifVLYgM9LMQeQ=", + version = "v1.20.0", ) go_repository( name = "com_google_cloud_go_billing", importpath = "cloud.google.com/go/billing", - sum = "h1:JYj28UYF5w6VBAh0gQYlgHJ/OD1oA+JgW29YZQU+UHM=", - version = "v1.13.0", + sum = "h1:77/4kCqzH6Ou5CCDzNmqmboE+WvbwFBJmw1QZQz19AI=", + version = "v1.17.4", ) go_repository( name = "com_google_cloud_go_binaryauthorization", importpath = "cloud.google.com/go/binaryauthorization", - sum = "h1:d3pMDBCCNivxt5a4eaV7FwL7cSH0H7RrEnFrTb1QKWs=", - version = "v1.5.0", + sum = "h1:3R6WYn1JKIaVicBmo18jXubu7xh4mMkmbIgsTXk0cBA=", + version = "v1.7.3", ) go_repository( name = "com_google_cloud_go_certificatemanager", importpath = "cloud.google.com/go/certificatemanager", - sum = "h1:5C5UWeSt8Jkgp7OWn2rCkLmYurar/vIWIoSQ2+LaTOc=", - version = "v1.6.0", + sum = "h1:5YMQ3Q+dqGpwUZ9X5sipsOQ1fLPsxod9HNq0+nrqc6I=", + version = "v1.7.4", ) go_repository( name = "com_google_cloud_go_channel", importpath = "cloud.google.com/go/channel", - sum = "h1:GpcQY5UJKeOekYgsX3QXbzzAc/kRGtBq43fTmyKe6Uw=", - version = "v1.12.0", + sum = "h1:Rd4+fBrjiN6tZ4TR8R/38elkyEkz6oogGDr7jDyjmMY=", + version = "v1.17.3", ) go_repository( name = "com_google_cloud_go_cloudbuild", importpath = "cloud.google.com/go/cloudbuild", - sum = "h1:GHQCjV4WlPPVU/j3Rlpc8vNIDwThhd1U9qSY/NPZdko=", - version = "v1.9.0", + sum = "h1:9IHfEMWdCklJ1cwouoiQrnxmP0q3pH7JUt8Hqx4Qbck=", + version = "v1.15.0", ) go_repository( name = "com_google_cloud_go_clouddms", importpath = "cloud.google.com/go/clouddms", - sum = "h1:E7v4TpDGUyEm1C/4KIrpVSOCTm0P6vWdHT0I4mostRA=", - version = "v1.5.0", + sum = "h1:xe/wJKz55VO1+L891a1EG9lVUgfHr9Ju/I3xh1nwF84=", + version = "v1.7.3", ) go_repository( name = "com_google_cloud_go_cloudtasks", importpath = "cloud.google.com/go/cloudtasks", - sum = "h1:uK5k6abf4yligFgYFnG0ni8msai/dSv6mDmiBulU0hU=", - version = "v1.10.0", + sum = "h1:5xXuFfAjg0Z5Wb81j2GAbB3e0bwroCeSF+5jBn/L650=", + version = "v1.12.4", ) go_repository( name = "com_google_cloud_go_compute", importpath = "cloud.google.com/go/compute", - sum = "h1:+9zda3WGgW1ZSTlVppLCYFIr48Pa35q1uG2N1itbCEQ=", - version = "v1.19.0", + sum = "h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk=", + version = "v1.23.3", ) go_repository( name = "com_google_cloud_go_compute_metadata", @@ -845,117 +1190,118 @@ def privacy_on_beam_deps(): go_repository( name = "com_google_cloud_go_contactcenterinsights", importpath = "cloud.google.com/go/contactcenterinsights", - sum = "h1:jXIpfcH/VYSE1SYcPzO0n1VVb+sAamiLOgCw45JbOQk=", - version = "v1.6.0", + sum = "h1:wP41IUA4ucMVooj/TP53jd7vbNjWrDkAPOeulVJGT5U=", + version = "v1.12.0", ) go_repository( name = "com_google_cloud_go_container", importpath = "cloud.google.com/go/container", - sum = "h1:NKlY/wCDapfVZlbVVaeuu2UZZED5Dy1z4Zx1KhEzm8c=", - version = "v1.15.0", + sum = "h1:/o82CFWXIYnT9p/07SnRgybqL3Pmmu86jYIlzlJVUBY=", + version = "v1.28.0", ) go_repository( name = "com_google_cloud_go_containeranalysis", importpath = "cloud.google.com/go/containeranalysis", - sum = "h1:EQ4FFxNaEAg8PqQCO7bVQfWz9NVwZCUKaM1b3ycfx3U=", - version = "v0.9.0", + sum = "h1:5rhYLX+3a01drpREqBZVXR9YmWH45RnML++8NsCtuD8=", + version = "v0.11.3", ) go_repository( name = "com_google_cloud_go_datacatalog", importpath = "cloud.google.com/go/datacatalog", - sum = "h1:4H5IJiyUE0X6ShQBqgFFZvGGcrwGVndTwUSLP4c52gw=", - version = "v1.13.0", + sum = "h1:rbYNmHwvAOOwnW2FPXYkaK3Mf1MmGqRzK0mMiIEyLdo=", + version = "v1.19.0", ) go_repository( name = "com_google_cloud_go_dataflow", importpath = "cloud.google.com/go/dataflow", - sum = "h1:eYyD9o/8Nm6EttsKZaEGD84xC17bNgSKCu0ZxwqUbpg=", - version = "v0.8.0", + sum = "h1:7VmCNWcPJBS/srN2QnStTB6nu4Eb5TMcpkmtaPVhRt4=", + version = "v0.9.4", ) go_repository( name = "com_google_cloud_go_dataform", importpath = "cloud.google.com/go/dataform", - sum = "h1:Dyk+fufup1FR6cbHjFpMuP4SfPiF3LI3JtoIIALoq48=", - version = "v0.7.0", + sum = "h1:jV+EsDamGX6cE127+QAcCR/lergVeeZdEQ6DdrxW3sQ=", + version = "v0.9.1", ) go_repository( name = "com_google_cloud_go_datafusion", importpath = "cloud.google.com/go/datafusion", - sum = "h1:sZjRnS3TWkGsu1LjYPFD/fHeMLZNXDK6PDHi2s2s/bk=", - version = "v1.6.0", + sum = "h1:Q90alBEYlMi66zL5gMSGQHfbZLB55mOAg03DhwTTfsk=", + version = "v1.7.4", ) go_repository( name = "com_google_cloud_go_datalabeling", importpath = "cloud.google.com/go/datalabeling", - sum = "h1:ch4qA2yvddGRUrlfwrNJCr79qLqhS9QBwofPHfFlDIk=", - version = "v0.7.0", + sum = "h1:zrq4uMmunf2KFDl/7dS6iCDBBAxBnKVDyw6+ajz3yu0=", + version = "v0.8.4", ) go_repository( name = "com_google_cloud_go_dataplex", importpath = "cloud.google.com/go/dataplex", - sum = "h1:RvoZ5T7gySwm1CHzAw7yY1QwwqaGswunmqEssPxU/AM=", - version = "v1.6.0", + sum = "h1:AfFFR15Ifh4U+Me1IBztrSd5CrasTODzy3x8KtDyHdc=", + version = "v1.11.2", ) go_repository( - name = "com_google_cloud_go_dataproc", - importpath = "cloud.google.com/go/dataproc", - sum = "h1:W47qHL3W4BPkAIbk4SWmIERwsWBaNnWm0P2sdx3YgGU=", - version = "v1.12.0", + name = "com_google_cloud_go_dataproc_v2", + importpath = "cloud.google.com/go/dataproc/v2", + sum = "h1:tTVP9tTxmc8fixxOd/8s6Q6Pz/+yzn7r7XdZHretQH0=", + version = "v2.3.0", ) + go_repository( name = "com_google_cloud_go_dataqna", importpath = "cloud.google.com/go/dataqna", - sum = "h1:yFzi/YU4YAdjyo7pXkBE2FeHbgz5OQQBVDdbErEHmVQ=", - version = "v0.7.0", + sum = "h1:NJnu1kAPamZDs/if3bJ3+Wb6tjADHKL83NUWsaIp2zg=", + version = "v0.8.4", ) go_repository( name = "com_google_cloud_go_datastore", importpath = "cloud.google.com/go/datastore", - sum = "h1:iF6I/HaLs3Ado8uRKMvZRvF/ZLkWaWE9i8AiHzbC774=", - version = "v1.11.0", + sum = "h1:0P9WcsQeTWjuD1H14JIY7XQscIPQ4Laje8ti96IC5vg=", + version = "v1.15.0", ) go_repository( name = "com_google_cloud_go_datastream", importpath = "cloud.google.com/go/datastream", - sum = "h1:BBCBTnWMDwwEzQQmipUXxATa7Cm7CA/gKjKcR2w35T0=", - version = "v1.7.0", + sum = "h1:Z2sKPIB7bT2kMW5Uhxy44ZgdJzxzE5uKjavoW+EuHEE=", + version = "v1.10.3", ) go_repository( name = "com_google_cloud_go_deploy", importpath = "cloud.google.com/go/deploy", - sum = "h1:otshdKEbmsi1ELYeCKNYppwV0UH5xD05drSdBm7ouTk=", - version = "v1.8.0", + sum = "h1:ZdmYzRMTGkVyP1nXEUat9FpbJGJemDcNcx82RSSOElc=", + version = "v1.15.0", ) go_repository( name = "com_google_cloud_go_dialogflow", importpath = "cloud.google.com/go/dialogflow", - sum = "h1:uVlKKzp6G/VtSW0E7IH1Y5o0H48/UOCmqksG2riYCwQ=", - version = "v1.32.0", + sum = "h1:cK/f88KX+YVR4tLH4clMQlvrLWD2qmKJQziusjGPjmc=", + version = "v1.44.3", ) go_repository( name = "com_google_cloud_go_dlp", importpath = "cloud.google.com/go/dlp", - sum = "h1:1JoJqezlgu6NWCroBxr4rOZnwNFILXr4cB9dMaSKO4A=", - version = "v1.9.0", + sum = "h1:OFlXedmPP/5//X1hBEeq3D9kUVm9fb6ywYANlpv/EsQ=", + version = "v1.11.1", ) go_repository( name = "com_google_cloud_go_documentai", importpath = "cloud.google.com/go/documentai", - sum = "h1:KM3Xh0QQyyEdC8Gs2vhZfU+rt6OCPF0dwVwxKgLmWfI=", - version = "v1.18.0", + sum = "h1:KAlzT+q8qvRxAmhsJUvLtfFHH0PNvz3M79H6CgVBKL8=", + version = "v1.23.5", ) go_repository( name = "com_google_cloud_go_domains", importpath = "cloud.google.com/go/domains", - sum = "h1:2ti/o9tlWL4N+wIuWUNH+LbfgpwxPr8J1sv9RHA4bYQ=", - version = "v0.8.0", + sum = "h1:ua4GvsDztZ5F3xqjeLKVRDeOvJshf5QFgWGg1CKti3A=", + version = "v0.9.4", ) go_repository( name = "com_google_cloud_go_edgecontainer", importpath = "cloud.google.com/go/edgecontainer", - sum = "h1:O0YVE5v+O0Q/ODXYsQHmHb+sYM8KNjGZw2pjX2Ws41c=", - version = "v1.0.0", + sum = "h1:Szy3Q/N6bqgQGyxqjI+6xJZbmvPvnFHp3UZr95DKcQ0=", + version = "v1.1.4", ) go_repository( name = "com_google_cloud_go_errorreporting", @@ -967,481 +1313,466 @@ def privacy_on_beam_deps(): go_repository( name = "com_google_cloud_go_essentialcontacts", importpath = "cloud.google.com/go/essentialcontacts", - sum = "h1:gIzEhCoOT7bi+6QZqZIzX1Erj4SswMPIteNvYVlu+pM=", - version = "v1.5.0", + sum = "h1:S2if6wkjR4JCEAfDtIiYtD+sTz/oXjh2NUG4cgT1y/Q=", + version = "v1.6.5", ) go_repository( name = "com_google_cloud_go_eventarc", importpath = "cloud.google.com/go/eventarc", - sum = "h1:fsJmNeqvqtk74FsaVDU6cH79lyZNCYP8Rrv7EhaB/PU=", - version = "v1.11.0", + sum = "h1:+pFmO4eu4dOVipSaFBLkmqrRYG94Xl/TQZFOeohkuqU=", + version = "v1.13.3", ) go_repository( name = "com_google_cloud_go_filestore", importpath = "cloud.google.com/go/filestore", - sum = "h1:ckTEXN5towyTMu4q0uQ1Mde/JwTHur0gXs8oaIZnKfw=", - version = "v1.6.0", + sum = "h1:/+wUEGwk3x3Kxomi2cP5dsR8+SIXxo7M0THDjreFSYo=", + version = "v1.8.0", ) go_repository( name = "com_google_cloud_go_firestore", importpath = "cloud.google.com/go/firestore", - sum = "h1:IBlRyxgGySXu5VuW0RgGFlTtLukSnNkpDiEOMkQkmpA=", - version = "v1.9.0", + sum = "h1:8aLcKnMPoldYU3YHgu4t2exrKhLQkqaXAGqT0ljrFVw=", + version = "v1.14.0", ) go_repository( name = "com_google_cloud_go_functions", importpath = "cloud.google.com/go/functions", - sum = "h1:pPDqtsXG2g9HeOQLoquLbmvmb82Y4Ezdo1GXuotFoWg=", - version = "v1.13.0", - ) - go_repository( - name = "com_google_cloud_go_gaming", - importpath = "cloud.google.com/go/gaming", - sum = "h1:7vEhFnZmd931Mo7sZ6pJy7uQPDxF7m7v8xtBheG08tc=", - version = "v1.9.0", + sum = "h1:ZjdiV3MyumRM6++1Ixu6N0VV9LAGlCX4AhW6Yjr1t+U=", + version = "v1.15.4", ) + go_repository( name = "com_google_cloud_go_gkebackup", importpath = "cloud.google.com/go/gkebackup", - sum = "h1:za3QZvw6ujR0uyqkhomKKKNoXDyqYGPJies3voUK8DA=", - version = "v0.4.0", + sum = "h1:KhnOrr9A1tXYIYeXKqCKbCI8TL2ZNGiD3dm+d7BDUBg=", + version = "v1.3.4", ) go_repository( name = "com_google_cloud_go_gkeconnect", importpath = "cloud.google.com/go/gkeconnect", - sum = "h1:gXYKciHS/Lgq0GJ5Kc9SzPA35NGc3yqu6SkjonpEr2Q=", - version = "v0.7.0", + sum = "h1:1JLpZl31YhQDQeJ98tK6QiwTpgHFYRJwpntggpQQWis=", + version = "v0.8.4", ) go_repository( name = "com_google_cloud_go_gkehub", importpath = "cloud.google.com/go/gkehub", - sum = "h1:TqCSPsEBQ6oZSJgEYZ3XT8x2gUadbvfwI32YB0kuHCs=", - version = "v0.12.0", + sum = "h1:J5tYUtb3r0cl2mM7+YHvV32eL+uZQ7lONyUZnPikCEo=", + version = "v0.14.4", ) go_repository( name = "com_google_cloud_go_gkemulticloud", importpath = "cloud.google.com/go/gkemulticloud", - sum = "h1:8I84Q4vl02rJRsFiinBxl7WCozfdLlUVBQuSrqr9Wtk=", - version = "v0.5.0", + sum = "h1:NmJsNX9uQ2CT78957xnjXZb26TDIMvv+d5W2vVUt0Pg=", + version = "v1.0.3", ) go_repository( name = "com_google_cloud_go_gsuiteaddons", importpath = "cloud.google.com/go/gsuiteaddons", - sum = "h1:1mvhXqJzV0Vg5Fa95QwckljODJJfDFXV4pn+iL50zzA=", - version = "v1.5.0", + sum = "h1:uuw2Xd37yHftViSI8J2hUcCS8S7SH3ZWH09sUDLW30Q=", + version = "v1.6.4", ) go_repository( name = "com_google_cloud_go_iam", importpath = "cloud.google.com/go/iam", - sum = "h1:+CmB+K0J/33d0zSQ9SlFWUeCCEn5XJA0ZMZ3pHE9u8k=", - version = "v0.13.0", + sum = "h1:1jTsCu4bcsNsE4iiqNT5SHwrDRCfRmIaaaVFhRveTJI=", + version = "v1.1.5", ) go_repository( name = "com_google_cloud_go_iap", importpath = "cloud.google.com/go/iap", - sum = "h1:PxVHFuMxmSZyfntKXHXhd8bo82WJ+LcATenq7HLdVnU=", - version = "v1.7.1", + sum = "h1:M4vDbQ4TLXdaljXVZSwW7XtxpwXUUarY2lIs66m0aCM=", + version = "v1.9.3", ) go_repository( name = "com_google_cloud_go_ids", importpath = "cloud.google.com/go/ids", - sum = "h1:fodnCDtOXuMmS8LTC2y3h8t24U8F3eKWfhi+3LY6Qf0=", - version = "v1.3.0", + sum = "h1:VuFqv2ctf/A7AyKlNxVvlHTzjrEvumWaZflUzBPz/M4=", + version = "v1.4.4", ) go_repository( name = "com_google_cloud_go_iot", importpath = "cloud.google.com/go/iot", - sum = "h1:39W5BFSarRNZfVG0eXI5LYux+OVQT8GkgpHCnrZL2vM=", - version = "v1.6.0", + sum = "h1:m1WljtkZnvLTIRYW1YTOv5A6H1yKgLHR6nU7O8yf27w=", + version = "v1.7.4", ) go_repository( name = "com_google_cloud_go_kms", importpath = "cloud.google.com/go/kms", - sum = "h1:7hm1bRqGCA1GBRQUrp831TwJ9TWhP+tvLuP497CQS2g=", - version = "v1.10.1", + sum = "h1:pj1sRfut2eRbD9pFRjNnPNg/CzJPuQAzUujMIM1vVeM=", + version = "v1.15.5", ) go_repository( name = "com_google_cloud_go_language", importpath = "cloud.google.com/go/language", - sum = "h1:7Ulo2mDk9huBoBi8zCE3ONOoBrL6UXfAI71CLQ9GEIM=", - version = "v1.9.0", + sum = "h1:zg9uq2yS9PGIOdc0Kz/l+zMtOlxKWonZjjo5w5YPG2A=", + version = "v1.12.2", ) go_repository( name = "com_google_cloud_go_lifesciences", importpath = "cloud.google.com/go/lifesciences", - sum = "h1:uWrMjWTsGjLZpCTWEAzYvyXj+7fhiZST45u9AgasasI=", - version = "v0.8.0", + sum = "h1:rZEI/UxcxVKEzyoRS/kdJ1VoolNItRWjNN0Uk9tfexg=", + version = "v0.9.4", ) go_repository( name = "com_google_cloud_go_logging", importpath = "cloud.google.com/go/logging", - sum = "h1:CJYxlNNNNAMkHp9em/YEXcfJg+rPDg7YfwoRpMU+t5I=", - version = "v1.7.0", + sum = "h1:26skQWPeYhvIasWKm48+Eq7oUqdcdbwsCVwz5Ys0FvU=", + version = "v1.8.1", ) go_repository( name = "com_google_cloud_go_longrunning", importpath = "cloud.google.com/go/longrunning", - sum = "h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM=", - version = "v0.4.1", + sum = "h1:w8xEcbZodnA2BbW6sVirkkoC+1gP8wS57EUUgGS0GVg=", + version = "v0.5.4", ) go_repository( name = "com_google_cloud_go_managedidentities", importpath = "cloud.google.com/go/managedidentities", - sum = "h1:ZRQ4k21/jAhrHBVKl/AY7SjgzeJwG1iZa+mJ82P+VNg=", - version = "v1.5.0", + sum = "h1:SF/u1IJduMqQQdJA4MDyivlIQ4SrV5qAawkr/ZEREkY=", + version = "v1.6.4", ) go_repository( name = "com_google_cloud_go_maps", importpath = "cloud.google.com/go/maps", - sum = "h1:mv9YaczD4oZBZkM5XJl6fXQ984IkJNHPwkc8MUsdkBo=", - version = "v0.7.0", + sum = "h1:2+eMp/1MvMPp5qrSOd3vtnLKa/pylt+krVRqET3jWsM=", + version = "v1.6.1", ) go_repository( name = "com_google_cloud_go_mediatranslation", importpath = "cloud.google.com/go/mediatranslation", - sum = "h1:anPxH+/WWt8Yc3EdoEJhPMBRF7EhIdz426A+tuoA0OU=", - version = "v0.7.0", + sum = "h1:VRCQfZB4s6jN0CSy7+cO3m4ewNwgVnaePanVCQh/9Z4=", + version = "v0.8.4", ) go_repository( name = "com_google_cloud_go_memcache", importpath = "cloud.google.com/go/memcache", - sum = "h1:8/VEmWCpnETCrBwS3z4MhT+tIdKgR1Z4Tr2tvYH32rg=", - version = "v1.9.0", + sum = "h1:cdex/ayDd294XBj2cGeMe6Y+H1JvhN8y78B9UW7pxuQ=", + version = "v1.10.4", ) go_repository( name = "com_google_cloud_go_metastore", importpath = "cloud.google.com/go/metastore", - sum = "h1:QCFhZVe2289KDBQ7WxaHV2rAmPrmRAdLC6gbjUd3HPo=", - version = "v1.10.0", + sum = "h1:94l/Yxg9oBZjin2bzI79oK05feYefieDq0o5fjLSkC8=", + version = "v1.13.3", ) go_repository( name = "com_google_cloud_go_monitoring", importpath = "cloud.google.com/go/monitoring", - sum = "h1:2qsrgXGVoRXpP7otZ14eE1I568zAa92sJSDPyOJvwjM=", - version = "v1.13.0", + sum = "h1:mf2SN9qSoBtIgiMA4R/y4VADPWZA7VCNJA079qLaZQ8=", + version = "v1.16.3", ) go_repository( name = "com_google_cloud_go_networkconnectivity", importpath = "cloud.google.com/go/networkconnectivity", - sum = "h1:ZD6b4Pk1jEtp/cx9nx0ZYcL3BKqDa+KixNDZ6Bjs1B8=", - version = "v1.11.0", + sum = "h1:e9lUkCe2BexsqsUc2bjV8+gFBpQa54J+/F3qKVtW+wA=", + version = "v1.14.3", ) go_repository( name = "com_google_cloud_go_networkmanagement", importpath = "cloud.google.com/go/networkmanagement", - sum = "h1:8KWEUNGcpSX9WwZXq7FtciuNGPdPdPN/ruDm769yAEM=", - version = "v1.6.0", + sum = "h1:HsQk4FNKJUX04k3OI6gUsoveiHMGvDRqlaFM2xGyvqU=", + version = "v1.9.3", ) go_repository( name = "com_google_cloud_go_networksecurity", importpath = "cloud.google.com/go/networksecurity", - sum = "h1:sOc42Ig1K2LiKlzG71GUVloeSJ0J3mffEBYmvu+P0eo=", - version = "v0.8.0", + sum = "h1:947tNIPnj1bMGTIEBo3fc4QrrFKS5hh0bFVsHmFm4Vo=", + version = "v0.9.4", ) go_repository( name = "com_google_cloud_go_notebooks", importpath = "cloud.google.com/go/notebooks", - sum = "h1:Kg2K3K7CbSXYJHZ1aGQpf1xi5x2GUvQWf2sFVuiZh8M=", - version = "v1.8.0", + sum = "h1:eTOTfNL1yM6L/PCtquJwjWg7ZZGR0URFaFgbs8kllbM=", + version = "v1.11.2", ) go_repository( name = "com_google_cloud_go_optimization", importpath = "cloud.google.com/go/optimization", - sum = "h1:dj8O4VOJRB4CUwZXdmwNViH1OtI0WtWL867/lnYH248=", - version = "v1.3.1", + sum = "h1:iFsoexcp13cGT3k/Hv8PA5aK+FP7FnbhwDO9llnruas=", + version = "v1.6.2", ) go_repository( name = "com_google_cloud_go_orchestration", importpath = "cloud.google.com/go/orchestration", - sum = "h1:Vw+CEXo8M/FZ1rb4EjcLv0gJqqw89b7+g+C/EmniTb8=", - version = "v1.6.0", + sum = "h1:kgwZ2f6qMMYIVBtUGGoU8yjYWwMTHDanLwM/CQCFaoQ=", + version = "v1.8.4", ) go_repository( name = "com_google_cloud_go_orgpolicy", importpath = "cloud.google.com/go/orgpolicy", - sum = "h1:XDriMWug7sd0kYT1QKofRpRHzjad0bK8Q8uA9q+XrU4=", - version = "v1.10.0", + sum = "h1:RWuXQDr9GDYhjmrredQJC7aY7cbyqP9ZuLbq5GJGves=", + version = "v1.11.4", ) go_repository( name = "com_google_cloud_go_osconfig", importpath = "cloud.google.com/go/osconfig", - sum = "h1:PkSQx4OHit5xz2bNyr11KGcaFccL5oqglFPdTboyqwQ=", - version = "v1.11.0", + sum = "h1:OrRCIYEAbrbXdhm13/JINn9pQchvTTIzgmOCA7uJw8I=", + version = "v1.12.4", ) go_repository( name = "com_google_cloud_go_oslogin", importpath = "cloud.google.com/go/oslogin", - sum = "h1:whP7vhpmc+ufZa90eVpkfbgzJRK/Xomjz+XCD4aGwWw=", - version = "v1.9.0", + sum = "h1:NP/KgsD9+0r9hmHC5wKye0vJXVwdciv219DtYKYjgqE=", + version = "v1.12.2", ) go_repository( name = "com_google_cloud_go_phishingprotection", importpath = "cloud.google.com/go/phishingprotection", - sum = "h1:l6tDkT7qAEV49MNEJkEJTB6vOO/onbSOcNtAT09HPuA=", - version = "v0.7.0", + sum = "h1:sPLUQkHq6b4AL0czSJZ0jd6vL55GSTHz2B3Md+TCZI0=", + version = "v0.8.4", ) go_repository( name = "com_google_cloud_go_policytroubleshooter", importpath = "cloud.google.com/go/policytroubleshooter", - sum = "h1:yKAGC4p9O61ttZUswaq9GAn1SZnEzTd0vUYXD7ZBT7Y=", - version = "v1.6.0", + sum = "h1:sq+ScLP83d7GJy9+wpwYJVnY+q6xNTXwOdRIuYjvHT4=", + version = "v1.10.2", ) go_repository( name = "com_google_cloud_go_privatecatalog", importpath = "cloud.google.com/go/privatecatalog", - sum = "h1:EPEJ1DpEGXLDnmc7mnCAqFmkwUJbIsaLAiLHVOkkwtc=", - version = "v0.8.0", + sum = "h1:Vo10IpWKbNvc/z/QZPVXgCiwfjpWoZ/wbgful4Uh/4E=", + version = "v0.9.4", ) go_repository( name = "com_google_cloud_go_profiler", importpath = "cloud.google.com/go/profiler", - sum = "h1:b5got9Be9Ia0HVvyt7PavWxXEht15B9lWnigdvHtxOc=", - version = "v0.3.1", + sum = "h1:ZeRDZbsOBDyRG0OiK0Op1/XWZ3xeLwJc9zjkzczUxyY=", + version = "v0.4.0", ) go_repository( name = "com_google_cloud_go_pubsub", importpath = "cloud.google.com/go/pubsub", - sum = "h1:vCge8m7aUKBJYOgrZp7EsNDf6QMd2CAlXZqWTn3yq6s=", - version = "v1.30.0", + sum = "h1:6SPCPvWav64tj0sVX/+npCBKhUi/UjJehy9op/V3p2g=", + version = "v1.33.0", ) go_repository( name = "com_google_cloud_go_pubsublite", importpath = "cloud.google.com/go/pubsublite", - sum = "h1:cb9fsrtpINtETHiJ3ECeaVzrfIVhcGjhhJEjybHXHao=", - version = "v1.7.0", + sum = "h1:pX+idpWMIH30/K7c0epN6V703xpIcMXWRjKJsz0tYGY=", + version = "v1.8.1", ) go_repository( name = "com_google_cloud_go_recaptchaenterprise_v2", importpath = "cloud.google.com/go/recaptchaenterprise/v2", - sum = "h1:6iOCujSNJ0YS7oNymI64hXsjGq60T4FK1zdLugxbzvU=", - version = "v2.7.0", + sum = "h1:KOlLHLv3h3HwcZAkx91ubM3Oztz3JtT3ZacAJhWDorQ=", + version = "v2.8.4", ) go_repository( name = "com_google_cloud_go_recommendationengine", importpath = "cloud.google.com/go/recommendationengine", - sum = "h1:VibRFCwWXrFebEWKHfZAt2kta6pS7Tlimsnms0fjv7k=", - version = "v0.7.0", + sum = "h1:JRiwe4hvu3auuh2hujiTc2qNgPPfVp+Q8KOpsXlEzKQ=", + version = "v0.8.4", ) go_repository( name = "com_google_cloud_go_recommender", importpath = "cloud.google.com/go/recommender", - sum = "h1:ZnFRY5R6zOVk2IDS1Jbv5Bw+DExCI5rFumsTnMXiu/A=", - version = "v1.9.0", + sum = "h1:VndmgyS/J3+izR8V8BHa7HV/uun8//ivQ3k5eVKKyyM=", + version = "v1.11.3", ) go_repository( name = "com_google_cloud_go_redis", importpath = "cloud.google.com/go/redis", - sum = "h1:JoAd3SkeDt3rLFAAxEvw6wV4t+8y4ZzfZcZmddqphQ8=", - version = "v1.11.0", + sum = "h1:J9cEHxG9YLmA9o4jTSvWt/RuVEn6MTrPlYSCRHujxDQ=", + version = "v1.14.1", ) go_repository( name = "com_google_cloud_go_resourcemanager", importpath = "cloud.google.com/go/resourcemanager", - sum = "h1:NRM0p+RJkaQF9Ee9JMnUV9BQ2QBIOq/v8M+Pbv/wmCs=", - version = "v1.7.0", + sum = "h1:JwZ7Ggle54XQ/FVYSBrMLOQIKoIT/uer8mmNvNLK51k=", + version = "v1.9.4", ) go_repository( name = "com_google_cloud_go_resourcesettings", importpath = "cloud.google.com/go/resourcesettings", - sum = "h1:8Dua37kQt27CCWHm4h/Q1XqCF6ByD7Ouu49xg95qJzI=", - version = "v1.5.0", + sum = "h1:yTIL2CsZswmMfFyx2Ic77oLVzfBFoWBYgpkgiSPnC4Y=", + version = "v1.6.4", ) go_repository( name = "com_google_cloud_go_retail", importpath = "cloud.google.com/go/retail", - sum = "h1:1Dda2OpFNzIb4qWgFZjYlpP7sxX3aLeypKG6A3H4Yys=", - version = "v1.12.0", + sum = "h1:geqdX1FNqqL2p0ADXjPpw8lq986iv5GrVcieTYafuJQ=", + version = "v1.14.4", ) go_repository( name = "com_google_cloud_go_run", importpath = "cloud.google.com/go/run", - sum = "h1:ydJQo+k+MShYnBfhaRHSZYeD/SQKZzZLAROyfpeD9zw=", - version = "v0.9.0", + sum = "h1:qdfZteAm+vgzN1iXzILo3nJFQbzziudkJrvd9wCf3FQ=", + version = "v1.3.3", ) go_repository( name = "com_google_cloud_go_scheduler", importpath = "cloud.google.com/go/scheduler", - sum = "h1:NpQAHtx3sulByTLe2dMwWmah8PWgeoieFPpJpArwFV0=", - version = "v1.9.0", + sum = "h1:eMEettHlFhG5pXsoHouIM5nRT+k+zU4+GUvRtnxhuVI=", + version = "v1.10.5", ) go_repository( name = "com_google_cloud_go_secretmanager", importpath = "cloud.google.com/go/secretmanager", - sum = "h1:pu03bha7ukxF8otyPKTFdDz+rr9sE3YauS5PliDXK60=", - version = "v1.10.0", + sum = "h1:krnX9qpG2kR2fJ+u+uNyNo+ACVhplIAS4Pu7u+4gd+k=", + version = "v1.11.4", ) go_repository( name = "com_google_cloud_go_security", importpath = "cloud.google.com/go/security", - sum = "h1:PYvDxopRQBfYAXKAuDpFCKBvDOWPWzp9k/H5nB3ud3o=", - version = "v1.13.0", + sum = "h1:sdnh4Islb1ljaNhpIXlIPgb3eYj70QWgPVDKOUYvzJc=", + version = "v1.15.4", ) go_repository( name = "com_google_cloud_go_securitycenter", importpath = "cloud.google.com/go/securitycenter", - sum = "h1:AF3c2s3awNTMoBtMX3oCUoOMmGlYxGOeuXSYHNBkf14=", - version = "v1.19.0", - ) - go_repository( - name = "com_google_cloud_go_servicecontrol", - importpath = "cloud.google.com/go/servicecontrol", - sum = "h1:d0uV7Qegtfaa7Z2ClDzr9HJmnbJW7jn0WhZ7wOX6hLE=", - version = "v1.11.1", + sum = "h1:qCEyXoJoxNKKA1bDywBjjqCB7ODXazzHnVWnG5Uqd1M=", + version = "v1.24.2", ) + go_repository( name = "com_google_cloud_go_servicedirectory", importpath = "cloud.google.com/go/servicedirectory", - sum = "h1:SJwk0XX2e26o25ObYUORXx6torSFiYgsGkWSkZgkoSU=", - version = "v1.9.0", - ) - go_repository( - name = "com_google_cloud_go_servicemanagement", - importpath = "cloud.google.com/go/servicemanagement", - sum = "h1:fopAQI/IAzlxnVeiKn/8WiV6zKndjFkvi+gzu+NjywY=", - version = "v1.8.0", - ) - go_repository( - name = "com_google_cloud_go_serviceusage", - importpath = "cloud.google.com/go/serviceusage", - sum = "h1:rXyq+0+RSIm3HFypctp7WoXxIA563rn206CfMWdqXX4=", - version = "v1.6.0", + sum = "h1:5niCMfkw+jifmFtbBrtRedbXkJm3fubSR/KHbxSJZVM=", + version = "v1.11.3", ) + go_repository( name = "com_google_cloud_go_shell", importpath = "cloud.google.com/go/shell", - sum = "h1:wT0Uw7ib7+AgZST9eCDygwTJn4+bHMDtZo5fh7kGWDU=", - version = "v1.6.0", + sum = "h1:nurhlJcSVFZneoRZgkBEHumTYf/kFJptCK2eBUq/88M=", + version = "v1.7.4", ) go_repository( name = "com_google_cloud_go_spanner", importpath = "cloud.google.com/go/spanner", - sum = "h1:7VdjZ8zj4sHbDw55atp5dfY6kn1j9sam9DRNpPQhqR4=", - version = "v1.45.0", + sum = "h1:/NzWQJ1MEhdRcffiutRKbW/AIGVKhcTeivWTDjEyCCo=", + version = "v1.53.0", ) go_repository( name = "com_google_cloud_go_speech", importpath = "cloud.google.com/go/speech", - sum = "h1:JEVoWGNnTF128kNty7T4aG4eqv2z86yiMJPT9Zjp+iw=", - version = "v1.15.0", + sum = "h1:qkxNao58oF8ghAHE1Eghen7XepawYEN5zuZXYWaUTA4=", + version = "v1.21.0", ) go_repository( name = "com_google_cloud_go_storage", importpath = "cloud.google.com/go/storage", - sum = "h1:6weCgzRvMg7lzuUurI4697AqIRPU1SvzHhynwpW31jI=", - version = "v1.29.0", + sum = "h1:B59ahL//eDfx2IIKFBeT5Atm9wnNmj3+8xG/W4WB//w=", + version = "v1.35.1", ) go_repository( name = "com_google_cloud_go_storagetransfer", importpath = "cloud.google.com/go/storagetransfer", - sum = "h1:5T+PM+3ECU3EY2y9Brv0Sf3oka8pKmsCfpQ07+91G9o=", - version = "v1.8.0", + sum = "h1:YM1dnj5gLjfL6aDldO2s4GeU8JoAvH1xyIwXre63KmI=", + version = "v1.10.3", ) go_repository( name = "com_google_cloud_go_talent", importpath = "cloud.google.com/go/talent", - sum = "h1:nI9sVZPjMKiO2q3Uu0KhTDVov3Xrlpt63fghP9XjyEM=", - version = "v1.5.0", + sum = "h1:LnRJhhYkODDBoTwf6BeYkiJHFw9k+1mAFNyArwZUZAs=", + version = "v1.6.5", ) go_repository( name = "com_google_cloud_go_texttospeech", importpath = "cloud.google.com/go/texttospeech", - sum = "h1:H4g1ULStsbVtalbZGktyzXzw6jP26RjVGYx9RaYjBzc=", - version = "v1.6.0", + sum = "h1:ahrzTgr7uAbvebuhkBAAVU6kRwVD0HWsmDsvMhtad5Q=", + version = "v1.7.4", ) go_repository( name = "com_google_cloud_go_tpu", importpath = "cloud.google.com/go/tpu", - sum = "h1:/34T6CbSi+kTv5E19Q9zbU/ix8IviInZpzwz3rsFE+A=", - version = "v1.5.0", + sum = "h1:XIEH5c0WeYGaVy9H+UueiTaf3NI6XNdB4/v6TFQJxtE=", + version = "v1.6.4", ) go_repository( name = "com_google_cloud_go_trace", importpath = "cloud.google.com/go/trace", - sum = "h1:olxC0QHC59zgJVALtgqfD9tGk0lfeCP5/AGXL3Px/no=", - version = "v1.9.0", + sum = "h1:2qOAuAzNezwW3QN+t41BtkDJOG42HywL73q8x/f6fnM=", + version = "v1.10.4", ) go_repository( name = "com_google_cloud_go_translate", importpath = "cloud.google.com/go/translate", - sum = "h1:GvLP4oQ4uPdChBmBaUSa/SaZxCdyWELtlAaKzpHsXdA=", - version = "v1.7.0", + sum = "h1:t5WXTqlrk8VVJu/i3WrYQACjzYJiff5szARHiyqqPzI=", + version = "v1.9.3", ) go_repository( name = "com_google_cloud_go_video", importpath = "cloud.google.com/go/video", - sum = "h1:upIbnGI0ZgACm58HPjAeBMleW3sl5cT84AbYQ8PWOgM=", - version = "v1.15.0", + sum = "h1:Xrpbm2S9UFQ1pZEeJt9Vqm5t2T/z9y/M3rNXhFoo8Is=", + version = "v1.20.3", ) go_repository( name = "com_google_cloud_go_videointelligence", importpath = "cloud.google.com/go/videointelligence", - sum = "h1:Uh5BdoET8XXqXX2uXIahGb+wTKbLkGH7s4GXR58RrG8=", - version = "v1.10.0", + sum = "h1:YS4j7lY0zxYyneTFXjBJUj2r4CFe/UoIi/PJG0Zt/Rg=", + version = "v1.11.4", ) go_repository( name = "com_google_cloud_go_vision_v2", importpath = "cloud.google.com/go/vision/v2", - sum = "h1:8C8RXUJoflCI4yVdqhTy9tRyygSHmp60aP363z23HKg=", - version = "v2.7.0", + sum = "h1:T/ujUghvEaTb+YnFY/jiYwVAkMbIC8EieK0CJo6B4vg=", + version = "v2.7.5", ) go_repository( name = "com_google_cloud_go_vmmigration", importpath = "cloud.google.com/go/vmmigration", - sum = "h1:Azs5WKtfOC8pxvkyrDvt7J0/4DYBch0cVbuFfCCFt5k=", - version = "v1.6.0", + sum = "h1:qPNdab4aGgtaRX+51jCOtJxlJp6P26qua4o1xxUDjpc=", + version = "v1.7.4", ) go_repository( name = "com_google_cloud_go_vmwareengine", importpath = "cloud.google.com/go/vmwareengine", - sum = "h1:b0NBu7S294l0gmtrT0nOJneMYgZapr5x9tVWvgDoVEM=", - version = "v0.3.0", + sum = "h1:WY526PqM6QNmFHSqe2sRfK6gRpzWjmL98UFkql2+JDM=", + version = "v1.0.3", ) go_repository( name = "com_google_cloud_go_vpcaccess", importpath = "cloud.google.com/go/vpcaccess", - sum = "h1:FOe6CuiQD3BhHJWt7E8QlbBcaIzVRddupwJlp7eqmn4=", - version = "v1.6.0", + sum = "h1:zbs3V+9ux45KYq8lxxn/wgXole6SlBHHKKyZhNJoS+8=", + version = "v1.7.4", ) go_repository( name = "com_google_cloud_go_webrisk", importpath = "cloud.google.com/go/webrisk", - sum = "h1:IY+L2+UwxcVm2zayMAtBhZleecdIFLiC+QJMzgb0kT0=", - version = "v1.8.0", + sum = "h1:iceR3k0BCRZgf2D/NiKviVMFfuNC9LmeNLtxUFRB/wI=", + version = "v1.9.4", ) go_repository( name = "com_google_cloud_go_websecurityscanner", importpath = "cloud.google.com/go/websecurityscanner", - sum = "h1:AHC1xmaNMOZtNqxI9Rmm87IJEyPaRkOxeI0gpAacXGk=", - version = "v1.5.0", + sum = "h1:5Gp7h5j7jywxLUp6NTpjNPkgZb3ngl0tUSw6ICWvtJQ=", + version = "v1.6.4", ) go_repository( name = "com_google_cloud_go_workflows", importpath = "cloud.google.com/go/workflows", - sum = "h1:FfGp9w0cYnaKZJhUOMqCOJCYT/WlvYBfTQhFWV3sRKI=", - version = "v1.10.0", + sum = "h1:qocsqETmLAl34mSa01hKZjcqAvt699gaoFbooGGMvaM=", + version = "v1.12.3", + ) + go_repository( + name = "ht_sr_git_sbinet_cmpimg", + importpath = "git.sr.ht/~sbinet/cmpimg", + sum = "h1:E0zPRk2muWuCqSKSVZIWsgtU9pjsw3eKHi8VmQeScxo=", + version = "v0.1.0", ) go_repository( name = "ht_sr_git_sbinet_gg", importpath = "git.sr.ht/~sbinet/gg", - sum = "h1:LNhjNn8DerC8f9DHLz6lS0YYul/b602DUxDgGkd/Aik=", - version = "v0.3.1", + sum = "h1:6V43j30HM623V329xA9Ntq+WJrMjDxRjuAB1LFWF5m8=", + version = "v0.5.0", ) - go_repository( - name = "in_gopkg_linkedin_goavro_v1", - importpath = "gopkg.in/linkedin/goavro.v1", - sum = "h1:BJa69CDh0awSsLUmZ9+BowBdokpduDZSM9Zk8oKHfN4=", - version = "v1.0.5", + name = "in_gopkg_check_v1", + importpath = "gopkg.in/check.v1", + sum = "h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=", + version = "v0.0.0-20161208181325-20d25e280405", ) + go_repository( name = "in_gopkg_retry_v1", importpath = "gopkg.in/retry.v1", @@ -1476,134 +1807,191 @@ def privacy_on_beam_deps(): go_repository( name = "org_gioui", importpath = "gioui.org", - sum = "h1:K72hopUosKG3ntOPNG4OzzbuhxGuVf06fa2la1/H/Ho=", - version = "v0.0.0-20210308172011-57750fc8a0a6", + sum = "h1:RbzDn1h/pCVf/q44ImQSa/J3MIFpY3OWphzT/Tyei+w=", + version = "v0.2.0", + ) + go_repository( + name = "org_gioui_cpu", + importpath = "gioui.org/cpu", + sum = "h1:tNJdnP5CgM39PRc+KWmBRRYX/zJ+rd5XaYxY5d5veqA=", + version = "v0.0.0-20220412190645-f1e9e8c3b1f7", + ) + go_repository( + name = "org_gioui_shader", + importpath = "gioui.org/shader", + sum = "h1:cvZmU+eODFR2545X+/8XucgZdTtEjR3QWW6W65b0q5Y=", + version = "v1.0.6", ) + go_repository( + name = "org_gioui_x", + importpath = "gioui.org/x", + sum = "h1:/MbdjKH19F16auv19UiQxli2n6BYPw7eyh9XBOTgmEw=", + version = "v0.2.0", + ) + go_repository( name = "org_golang_google_api", importpath = "google.golang.org/api", - sum = "h1:sW9hgHyX497PP5//NUM7nqfV8D0iDfBApqq7sOh1XR8=", - version = "v0.109.0", + sum = "h1:FhfXLO/NFdJIzQtCqjpysWwqKk8AzGWBUhMIx67cVDU=", + version = "v0.151.0", ) go_repository( name = "org_golang_google_appengine", importpath = "google.golang.org/appengine", - sum = "h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=", - version = "v1.6.7", + sum = "h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=", + version = "v1.6.8", ) go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A=", - version = "v0.0.0-20230410155749-daa745c078e1", + sum = "h1:Vn+VyHU5guc9KjB5KrjI2q0wCOWEOIh0OEsleqakHJg=", + version = "v0.0.0-20231120223509-83a465c0220f", + ) + go_repository( + name = "org_golang_google_genproto_googleapis_api", + importpath = "google.golang.org/genproto/googleapis/api", + sum = "h1:2yNACc1O40tTnrsbk9Cv6oxiW8pxI/pXj0wRtdlYmgY=", + version = "v0.0.0-20231120223509-83a465c0220f", + ) + go_repository( + name = "org_golang_google_genproto_googleapis_bytestream", + importpath = "google.golang.org/genproto/googleapis/bytestream", + sum = "h1:o4S3HvTUEXgRsNSUQsALDVog0O9F/U1JJlHmmUN8Uas=", + version = "v0.0.0-20231030173426-d783a09b4405", + ) + go_repository( + name = "org_golang_google_genproto_googleapis_rpc", + importpath = "google.golang.org/genproto/googleapis/rpc", + sum = "h1:ultW7fxlIvee4HYrtnaRPon9HpEgFk5zYpmfMgtKB5I=", + version = "v0.0.0-20231120223509-83a465c0220f", ) + go_repository( name = "org_golang_google_grpc", build_file_proto_mode = "disable_global", # See https://github.com/bazelbuild/rules_go/issues/2186#issuecomment-523028281 importpath = "google.golang.org/grpc", - sum = "h1:EhTqbhiYeixwWQtAEZAxmV9MGqcjEU2mFx52xCzNyag=", - version = "v1.54.0", + sum = "h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=", + version = "v1.59.0", ) go_repository( name = "org_golang_google_protobuf", importpath = "google.golang.org/protobuf", - sum = "h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=", - version = "v1.30.0", + sum = "h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=", + version = "v1.31.0", ) go_repository( name = "org_golang_x_crypto", importpath = "golang.org/x/crypto", - sum = "h1:sK3txAijHtOK88l68nt020reeT1ZdKLIYetKl95FzVY=", - version = "v0.0.0-20220622213112-05595931fe9d", + sum = "h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA=", + version = "v0.15.0", ) go_repository( name = "org_golang_x_exp", importpath = "golang.org/x/exp", - sum = "h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug=", - version = "v0.0.0-20230321023759-10a507213a29", + sum = "h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ=", + version = "v0.0.0-20231110203233-9a3e6036ecaa", ) go_repository( name = "org_golang_x_exp_shiny", importpath = "golang.org/x/exp/shiny", - sum = "h1:pkl1Ko5DrhA4ezwKwdnmO7H1sKmMy9qLuYKRjS7SlmE=", - version = "v0.0.0-20220722155223-a9213eeb770e", + sum = "h1:sgkbz1SFTsoQIvzTIw45hccUcGocu00QM3qucBYV8b0=", + version = "v0.0.0-20230801115018-d63ba01acd4b", ) go_repository( name = "org_golang_x_image", importpath = "golang.org/x/image", - sum = "h1:gzS29xtG1J5ybQlv0PuyfE3nmc6R4qB73m6LUUmvFuw=", - version = "v0.7.0", + sum = "h1:tNgSxAFe3jC4uYqvZdTr84SZoM1KfwdC9SKIFrLjFn4=", + version = "v0.14.0", + ) + go_repository( + name = "org_golang_x_lint", + importpath = "golang.org/x/lint", + sum = "h1:XQyxROzUlZH+WIQwySDgnISgOivlhjIEwaQaJEJrrN0=", + version = "v0.0.0-20190313153728-d0100b6bd8b3", ) go_repository( name = "org_golang_x_mod", importpath = "golang.org/x/mod", - sum = "h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8=", - version = "v0.8.0", + sum = "h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=", + version = "v0.14.0", ) go_repository( name = "org_golang_x_net", importpath = "golang.org/x/net", - sum = "h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM=", - version = "v0.9.0", + sum = "h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg=", + version = "v0.18.0", ) go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:NF0gk8LVPg1Ml7SSbGyySuoxdsXitj7TvgvuRxIMc/M=", - version = "v0.4.0", + sum = "h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0=", + version = "v0.14.0", ) go_repository( name = "org_golang_x_sync", importpath = "golang.org/x/sync", - sum = "h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=", - version = "v0.1.0", + sum = "h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=", + version = "v0.5.0", ) go_repository( name = "org_golang_x_sys", importpath = "golang.org/x/sys", - sum = "h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU=", - version = "v0.7.0", + sum = "h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q=", + version = "v0.14.0", ) go_repository( name = "org_golang_x_term", importpath = "golang.org/x/term", - sum = "h1:BEvjmm5fURWqcfbSKTdpkDXYBrUS1c0m8agp14W48vQ=", - version = "v0.7.0", + sum = "h1:LGK9IlZ8T9jvdy6cTdfKUCltatMFOehAQo9SRC46UQ8=", + version = "v0.14.0", ) go_repository( name = "org_golang_x_text", importpath = "golang.org/x/text", - sum = "h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=", - version = "v0.9.0", + sum = "h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=", + version = "v0.14.0", ) + go_repository( + name = "org_golang_x_time", + importpath = "golang.org/x/time", + sum = "h1:Z81tqI5ddIoXDPvVQ7/7CC9TnLM7ubaFG2qXYd5BbYY=", + version = "v0.4.0", + ) + go_repository( name = "org_golang_x_tools", importpath = "golang.org/x/tools", - sum = "h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM=", - version = "v0.6.0", + sum = "h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8=", + version = "v0.15.0", ) go_repository( name = "org_golang_x_xerrors", importpath = "golang.org/x/xerrors", - sum = "h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk=", - version = "v0.0.0-20220907171357-04be3eba64a2", + sum = "h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU=", + version = "v0.0.0-20231012003039-104605ab7028", ) go_repository( name = "org_gonum_v1_gonum", importpath = "gonum.org/v1/gonum", - sum = "h1:xKuo6hzt+gMav00meVPUlXwSdoEJP46BR+wdxQEFK2o=", - version = "v0.12.0", + sum = "h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0=", + version = "v0.14.0", ) go_repository( name = "org_gonum_v1_plot", importpath = "gonum.org/v1/plot", - sum = "h1:y1ZNmfz/xHuHvtgFe8USZVyykQo5ERXPnspQNVK15Og=", - version = "v0.12.0", + sum = "h1:+LBDVFYwFe4LHhdP8coW6296MBEY4nQ+Y4vuUpJopcE=", + version = "v0.14.0", ) go_repository( name = "org_mongodb_go_mongo_driver", importpath = "go.mongodb.org/mongo-driver", - sum = "h1:QP0znIRTuL0jf1oBQoAoM0C6ZJfBK4kx0Uumtv1A7w8=", - version = "v1.11.1", + sum = "h1:nLkghSU8fQNaK7oUmDhQFsnrtcoNy7Z6LVFKsEecqgE=", + version = "v1.12.1", + ) + go_repository( + name = "tools_gotest_v3", + importpath = "gotest.tools/v3", + sum = "h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU=", + version = "v3.5.1", ) diff --git a/python/dp_accounting/pld/privacy_loss_mechanism.py b/python/dp_accounting/pld/privacy_loss_mechanism.py index 1616ba38..1563a6a3 100644 --- a/python/dp_accounting/pld/privacy_loss_mechanism.py +++ b/python/dp_accounting/pld/privacy_loss_mechanism.py @@ -275,7 +275,7 @@ def get_delta_for_epsilon( np.exp(epsilons[inverse_indices] + self.mu_lower_log_cdf(x_cutoffs))) # Clip delta values to lie in [0,1] (to avoid numerical errors) deltas = np.clip(deltas, 0, 1) - return float(deltas) if is_scalar else deltas + return float(deltas[0]) if is_scalar else deltas @abc.abstractmethod def privacy_loss_tail(self) -> TailPrivacyLossDistribution: