Пример #1
0
def test_sentinel():
    contest = Contest(100000, {
        'A': 60000,
        'B': 40000
    }, 1, ['A'], ContestType.MAJORITY)
    minerva = Minerva(.1, .1, contest)
    minerva.compute_min_winner_ballots(minerva.sub_audits['A-B'], [13, 14, 15])
    assert minerva.sub_audits['A-B'].min_winner_ballots == [13, None, 14]
Пример #2
0
def test_minerva_kmins():
    contest = Contest(100000, {
        'A': 60000,
        'B': 40000
    }, 1, ['A'], ContestType.MAJORITY)
    minerva = Minerva(.1, .1, contest)
    minerva.compute_min_winner_ballots(minerva.sub_audits['A-B'],
                                       [100, 200, 400])

    # From existing software
    assert minerva.sub_audits['A-B'].min_winner_ballots == [58, 113, 221]
Пример #3
0
def test_athena_minerva_paper():
    contest = Contest(100000, {
        'A': 75000,
        'B': 25000
    }, 1, ['A'], ContestType.MAJORITY)
    athena = Athena(.1, 1, .1, contest)
    minerva = Minerva(.1, .1, contest)
    athena.compute_min_winner_ballots(athena.sub_audits['A-B'], [50])
    minerva.compute_min_winner_ballots(minerva.sub_audits['A-B'], [50])

    # From Athena paper
    assert athena.sub_audits['A-B'].min_winner_ballots == [32]
    assert minerva.sub_audits['A-B'].min_winner_ballots == [31]
Пример #4
0
def test_minerva_second_round_estimate():
    contest1 = Contest(100000, {
        'A': 60000,
        'B': 40000
    }, 1, ['A'], ContestType.MAJORITY)
    minerva1 = Minerva(.1, .1, contest1)
    minerva1.compute_min_winner_ballots(minerva1.sub_audits['A-B'], [100])
    minerva1.sample_ballots['A'].append(54)
    minerva1.sample_ballots['B'].append(100 - 54)
    contest2 = Contest(4504975 + 4617886, {
        'Trump': 4617886,
        'Clinton': 4504975
    }, 1, ['Trump'], ContestType.PLURALITY)
    minerva2 = Minerva(.1, 1.0, contest2)
    minerva2.compute_min_winner_ballots(minerva2.sub_audits['Trump-Clinton'],
                                        [45081])
    minerva2.sample_ballots['Trump'].append(22634)
    minerva2.sample_ballots['Clinton'].append(45081 - 22634)

    assert minerva1.next_sample_size() == 305
    assert minerva2.next_sample_size() == 111257
Пример #5
0
def test_exceptions():
    contest = Contest(100000, {
        'A': 60000,
        'B': 40000
    }, 1, ['A'], ContestType.MAJORITY)
    minerva = Minerva(.1, .1, contest)
    with pytest.raises(ValueError):
        minerva.compute_min_winner_ballots(minerva.sub_audits['A-B'], [])
    with pytest.raises(ValueError):
        minerva.compute_min_winner_ballots(minerva.sub_audits['A-B'], [0])
    with pytest.raises(ValueError):
        minerva.compute_min_winner_ballots(minerva.sub_audits['A-B'], [1, 2])
    with pytest.raises(ValueError):
        minerva.compute_min_winner_ballots(minerva.sub_audits['A-B'], [20, 20])
    with pytest.raises(ValueError):
        minerva.compute_min_winner_ballots(minerva.sub_audits['A-B'], [20, 19])
    with pytest.raises(ValueError):
        minerva.compute_min_winner_ballots(minerva.sub_audits['A-B'], [10001])

    minerva.compute_min_winner_ballots(minerva.sub_audits['A-B'], [20])
    with pytest.raises(ValueError):
        minerva.compute_min_winner_ballots(minerva.sub_audits['A-B'], [20])
    with pytest.raises(ValueError):
        minerva.compute_min_winner_ballots(minerva.sub_audits['A-B'], [19])
    with pytest.raises(ValueError):
        minerva.compute_min_winner_ballots(minerva.sub_audits['A-B'], [10001])

    contest2 = Contest(100, {'A': 60, 'B': 30}, 1, ['A'], ContestType.MAJORITY)
    minerva2 = Minerva(.1, 1.0, contest2)
    with pytest.raises(ValueError):
        minerva2.compute_min_winner_ballots(minerva2.sub_audits['A-B'], [91])
    minerva2.rounds = [10]
    with pytest.raises(Exception):
        minerva2.compute_all_min_winner_ballots(minerva2.sub_audits['A-B'])
    minerva2.rounds = []
    with pytest.raises(Exception):
        minerva.compute_all_min_winner_ballots(minerva2.sub_audits['A-B'], 200)

    minerva = Minerva(.1, .1, contest)
    with pytest.raises(Exception):
        minerva.stopping_condition_pairwise('A-B')
    minerva.rounds.append(10)
    with pytest.raises(ValueError):
        minerva.stopping_condition_pairwise('x')