Skip to content

Instantly share code, notes, and snippets.

@Shoeboxam
Last active May 18, 2020 20:36
Show Gist options
  • Select an option

  • Save Shoeboxam/1a70d1e9cfebe21b9787451cbc023bb1 to your computer and use it in GitHub Desktop.

Select an option

Save Shoeboxam/1a70d1e9cfebe21b9787451cbc023bb1 to your computer and use it in GitHub Desktop.
markdown test

Build Status

WhiteNoise Core
Differential Privacy Library Python Bindings

This repository contains python bindings to Whitenoise-Core and its underlying Rust binaries.

  • For examples of this library in action, please see the Python notebooks in WhiteNoise-Samples.
  • In addition, see the accompanying WhiteNoise-System repository which includes WhiteNoise tools for differential privacy.

Differential privacy is the gold standard definition of privacy protection. The WhiteNoise project aims to connect theoretical solutions from the academic community with the practical lessons learned from real-world deployments, to make differential privacy broadly accessible to future deployments. Specifically, we provide several basic building blocks that can be used by people involved with sensitive data, with implementations based on vetted and mature differential privacy research. In WhiteNoise Core, we provide a pluggable open source library of differentially private algorithms and mechanisms for releasing privacy preserving queries and statistics, as well as APIs for defining an analysis and a validator for evaluating these analyses and composing the total privacy loss on a dataset.

This library provides an easy-to-use interface for building analyses.

Differentially private computations are specified as a protobuf analysis graph that can be validated and executed to produce differentially private releases of data.


More about WhiteNoise Core Python Bindings

Components

For a full listing of the extensive set of components available in the library see this documentation.

Architecture

The Whitenoise-core system architecture is described in the parent project. This package is an instance of the language bindings. The purpose of the language bindings is to provide a straightforward programming interface to Python for building and releasing analyses.

Logic for determining if a component releases differentially private data, as well as the scaling of noise, property tracking, and accuracy estimates are handled by a native rust library called the Validator. The actual execution of the components in the analysis is handled by a native Rust runtime.

Installation

Binaries

Initial Linux and osx binaries are available on pypi for Python 3.6+:

The binaries have been used on OS X and Ubuntu and are in the process of additional testing. Please use our communication channels below for any questions.

From Source

  1. Clone the repository

    git clone --recurse-submodules [email protected]:opendifferentialprivacy/whitenoise-core-python.git

    If you have already cloned the repository without the submodule

    git submodule init 
    git submodule update
  2. Install Whitenoise-core dependencies

    Mac:

    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    xcode-select --install
    brew install protobuf python

    Linux:

    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    sudo apt-get install diffutils gcc make m4 python
    # snap for protobuf 3, because apt comes with protobuf 2
    sudo snap install protobuf --classic

    Windows:
    Install WSL and refer to the linux instructions.

  3. Generate code

    python3 scripts/code_generation.py
  4. Install the python bindings

    pip3 install -e ".[test,plotting]"

WhiteNoise Documentation

Communication

  • Please use GitHub issues for bug reports, feature requests, install issues, and ideas.
  • Gitter is available for general chat and online discussions.
  • For other requests, please contact us at [email protected].
    • Note: We encourage you to use GitHub issues, especially for bugs.

Releases and Contributing

Please let us know if you encounter a bug by creating an issue.

We appreciate all contributions. We welcome pull requests with bug-fixes without prior discussion.

If you plan to contribute new features, utility functions or extensions to the core, please first open an issue and discuss the feature with us.

  • Sending a pull request (PR) without discussion might end up resulting in a rejected PR, because we may be taking the core in a different direction than you might be aware of.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment