google / differential-privacy

Google's differential privacy libraries.
Apache License 2.0
3.07k stars 346 forks source link

Expose RNG or Seeded mechanisms outside of `-testing` #107

Open mjbommar opened 2 years ago

mjbommar commented 2 years ago

Problem Description

Downstream libraries or academic researchers using differential-privacy may desire to implement deterministic tests or substitute an alternative source of randomness, e.g., external random source.

However, RNG and seed-setting only appears to be implemented within algorithms::numerical-mechanisms-testing. These classes are not designed for external use and cannot be linked against in some contexts (e.g., bzl testonly).

Proposed Solution

  1. Create a new RNGNumericalMechanism abstract class and non-testing RNGNumericalMechanismBuilder
  2. Implement non-testing RNGXYZMechanism and, optionally, SeededXYZMechanism as convenience
  3. Re-implement test SeededXYZMechanism classes with non-testing mechanisms
  4. Optionally implement warning/notice for use
  5. Implement safe downstream deterministic test cases, e.g., in PyDP

Alternative

Rely on asymptotic test cases or non-reproducible examples/research.