Added
* The `dp_noise_mechanisms` header and source files: contains functions that
generate `differential_privacy::LaplaceMechanism` or
`differential_privacy::GaussianMechanism`, based upon privacy parameters and
norm bounds. Each of these functions return a `DPHistogramBundle` struct,
which contains the mechanism, the threshold needed for DP open-domain
histograms, and a boolean indicating whether Laplace noise was used.
* Added some TFF executor classes to the public API (CPPExecutorFactory,
ResourceManagingExecutorFactory, RemoteExecutor, RemoteExecutorGrpcStub).
* Added support for `bfloat16` dtypes from the `ml_dtypes` package.
Fixed
* A bug where `tf.string` was mistakenly allowed as a dtype to
`tff.types.TensorType`. This now must be `np.str_`.
Changed
* `tff.Computation` and `tff.framework.ConcreteComputation` to be able to
transform the arguments to the computation and result of the computation.
* `DPClosedDomainHistogram::Report` and `DPOpenDomainHistogram::Report`: they
both use the `DPHistogramBundles` produced by the `CreateDPHistogramBundle`
function in `dp_noise_mechanisms`.
* `DPGroupByFactory::CreateInternal`: when `delta` is not provided, check if
the right norm bounds are provided to compute L1 sensitivity (for the
Laplace mech).
* CreateRemoteExecutorStack now allows the composing executor to be specified
and assigns client values to leaf executors such that all leaf executors
receive the same number of clients, except for potentially the last leaf
executor, which may receive fewer clients.
* Allow `tff.learning.programs.train_model` to accept a `should_discard_round`
function to decide whether a round should be discarded and retried.
Removed
* `tff.structure.to_container_recursive`, this should not be used externally.