Пример #1
0
def test_count():
    odp = opendp.OpenDP()
    transformation = odp.trans.make_count(
        b"<SymmetricDistance, L1Sensitivity<u32>, i32>")
    arg = [1, 2, 3]
    ret = odp.transformation_invoke(transformation, arg)
    assert ret == 3
Пример #2
0
def main():
    odp = opendp.OpenDP()

    ### HELLO WORLD
    identity = odp.trans.make_identity(b"<HammingDistance, String>")
    arg = "hello, world!"
    res = odp.transformation_invoke(identity, arg)
    print(res)
    odp.core.transformation_free(identity)

    ### SUMMARY STATS
    # Parse dataframe
    col_names = odp.py_to_object([0, 1, 2])
    split_dataframe = odp.trans.make_split_dataframe(b"<HammingDistance, i32>",
                                                     b",", col_names)
    parse_column_1 = odp.trans.make_parse_column(
        b"<HammingDistance, i32, i32>", opendp.i32_p(1), True)
    parse_column_2 = odp.trans.make_parse_column(
        b"<HammingDistance, i32, f64>", opendp.i32_p(2), True)
    parse_dataframe = odp.make_chain_tt_multi(parse_column_2, parse_column_1,
                                              split_dataframe)

    # Noisy sum, col 1
    select_1 = odp.trans.make_select_column(b"<HammingDistance, i32, i32>",
                                            opendp.i32_p(1))
    clamp_1 = odp.trans.make_clamp_vec(b"<HammingDistance, i32>",
                                       opendp.i32_p(0), opendp.i32_p(10))
    bounded_sum_1 = odp.trans.make_bounded_sum(
        b"<HammingDistance, L1Sensitivity<i32>>", opendp.i32_p(0),
        opendp.i32_p(10))
    base_geometric_1 = odp.meas.make_base_simple_geometric(
        b"<i32, f64>", opendp.f64_p(1.0), opendp.u32_p(0), opendp.u32_p(1000))
    # base_laplace_1 = odp.meas.make_base_laplace(b"<i32>", opendp.f64_p(1.0))
    noisy_sum_1 = odp.core.make_chain_mt(
        base_geometric_1,
        odp.make_chain_tt_multi(bounded_sum_1, clamp_1, select_1))

    # Count, col 1
    select_2 = odp.trans.make_select_column(b"<HammingDistance, i32, f64>",
                                            opendp.i32_p(2))
    count_2 = odp.trans.make_count(
        b"<HammingDistance, L1Sensitivity<u32>, f64>")
    base_geometric_2 = odp.meas.make_base_simple_geometric(
        b"<u32, f64>", opendp.f64_p(1.0), opendp.u32_p(0), opendp.u32_p(1000))
    noisy_count_2 = odp.core.make_chain_mt(
        base_geometric_2, odp.make_chain_tt_multi(count_2, select_2))

    # Compose & chain
    composition = odp.core.make_composition(noisy_sum_1, noisy_count_2)
    everything = odp.core.make_chain_mt(composition, parse_dataframe)

    # Do it!!!
    arg = "ant, 1, 1.1\nbat, 2, 2.2\ncat, 3, 3.3"
    res = odp.measurement_invoke(everything, arg)
    print(res)

    # Clean up
    odp.core.measurement_free(everything)
Пример #3
0
import os
from collections import Counter

import matplotlib.pyplot as plt
import numpy as np
import opendp

odp = opendp.OpenDP()
max_word_count_per_individual = 20

data_dir = os.path.abspath(os.path.join(__file__, '..', '..', '..', 'data'))
censored_data_dir = os.path.abspath(
    os.path.join(__file__, '..', '..', '..', 'data_censored'))


def check_stability(scale, threshold, line_count, budget):
    count_by = odp.trans.make_count_by(
        b"<SymmetricDistance, L2Sensitivity<f64>, String, u32>", line_count)
    base_stability = odp.meas.make_base_stability(
        b"<L2Sensitivity<f64>, String, u32, f64>", line_count,
        opendp.f64_p(scale), opendp.f64_p(threshold))
    stability_mech = odp.core.make_chain_mt(base_stability, count_by)

    # assuming each line is a different user, a user can influence up to max_word_count_per_individual counts
    check = odp.measurement_check(stability_mech,
                                  max_word_count_per_individual, budget)
    odp.core.measurement_free(stability_mech)
    return check


def privatize_vocabulary(word_count, line_count, budget):
Пример #4
0
def test_data_object_int():
    odp = opendp.OpenDP()
    val_in = 123
    obj = odp.py_to_object(val_in)
    val_out = odp.object_to_py(obj)
    assert val_out == val_in
Пример #5
0
def test_identity_str():
    odp = opendp.OpenDP()
    transformation = odp.trans.make_identity(b"<HammingDistance, String>")
    arg = "hello, world"
    ret = odp.transformation_invoke(transformation, arg)
    assert ret == arg
Пример #6
0
def test_identity_list():
    odp = opendp.OpenDP()
    transformation = odp.trans.make_identity(b"<HammingDistance, Vec<i32>>")
    arg = [1, 2, 3]
    ret = odp.transformation_invoke(transformation, arg)
    assert ret == arg
Пример #7
0
def test_identity_float():
    odp = opendp.OpenDP()
    transformation = odp.trans.make_identity(b"<HammingDistance, f64>")
    arg = 123.123
    ret = odp.transformation_invoke(transformation, arg)
    assert ret == arg
Пример #8
0
def test_data_object_tuple():
    odp = opendp.OpenDP()
    val_in = (1., 1e-7)
    obj = odp.py_to_object(val_in)
    val_out = odp.object_to_py(obj)
    assert val_out == val_in
Пример #9
0
def test_data_object_list():
    odp = opendp.OpenDP()
    val_in = [1, 2, 3]
    obj = odp.py_to_object(val_in)
    val_out = odp.object_to_py(obj)
    assert val_out == val_in
Пример #10
0
def test_init():
    odp = opendp.OpenDP()
    assert odp
Пример #11
0
def test_data_object_str():
    odp = opendp.OpenDP()
    val_in = "hello, world"
    obj = odp.py_to_object(val_in)
    val_out = odp.object_to_py(obj)
    assert val_out == val_in