#!/bin/bash # # Demo of RAPPOR. Automating Python and R scripts. See README. # # Usage: # ./demo.sh [function name] # # End to end demo of rappor. Notable functions include: # quick-python: Runs a demo using the python client # quick-cpp: Runs a demo using the c++ client # If no function is specified the above two will be run consecutivly. # # This takes a minute or so. It runs a subset of tests from regtest.sh and # writes an HTML summary. set -o nounset set -o pipefail set -o errexit . util.sh readonly THIS_DIR=$(dirname $0) readonly REPO_ROOT=$THIS_DIR readonly CLIENT_DIR=$REPO_ROOT/client/python # All the Python tools need this export PYTHONPATH=$CLIENT_DIR # # Semi-automated demos # # Run rappor-sim through the Python profiler. rappor-sim-profile() { local dist=$1 shift # For now, just dump it to a text file. Sort by cumulative time. time python -m cProfile -s cumulative \ tests/rappor_sim.py \ -i _tmp/$dist.csv \ "$@" \ | tee _tmp/profile.txt } quick-python() { ./regtest.sh run-seq '^demo3' python } quick-cpp() { # For now we build it first. Don't want to build it in parallel. ./build.sh cpp-client ./regtest.sh run-seq '^demo3' cpp } quick() { quick-python quick-cpp } # TODO: Port these old bad cases to regtest_spec.py. # Running the demo of the exponential distribution with 10000 reports (x7, # which is 70000 values). # # - There are 50 real values, but we add 1000 more candidates, to get 1050 candidates. # - And then we remove the two most common strings, v1 and v2. # - With the current analysis, we are getting sum(proportion) = 1.1 to 1.7 # TODO: Make this sharper by including only one real value? bad-case() { local num_additional=${1:-1000} run-dist exp 10000 $num_additional 'v1|v2' } # Force it to be less than 1 pcls-test() { USE_PCLS=1 bad-case } # Only add 10 more candidates. Then we properly get the 0.48 proportion. ok-case() { run-dist exp 10000 10 'v1|v2' } if test $# -eq 0 ; then quick else "$@" fi