def setUp(self): self.rules = voting.ElectionRules() self.rules_6c = voting.ElectionRules() votes_file = "../data/elections/iceland_2013_landskjorstjorn.csv" const_file = "../data/constituencies/constituencies_iceland_2013.csv" const_file_6c = "../data/constituencies/iceland_2013_6x6.xlsx" self.rules["constituencies"] = const_file self.rules_6c["constituencies"] = const_file_6c parties, votes = util.load_votes(votes_file, self.rules["constituencies"]) self.rules["parties"] = parties self.rules_6c["parties"] = parties self.votes = votes
def simulate(votes, constituencies, **kwargs): """Simulate elections.""" e_rules = voting.ElectionRules() e_rules["constituencies"] = constituencies parties, votes = util.load_votes(votes, e_rules["constituencies"]) e_rules["parties"] = parties s_rules = sim.SimulationRules() try: for arg, val in kwargs.iteritems(): s_rules[arg] = val except AttributeError: for arg, val in kwargs.items(): s_rules[arg] = val e_rules = util.sim_election_rules(e_rules, s_rules["test_method"]) simulation = sim.Simulation(s_rules, [e_rules], votes) simulation.simulate() if s_rules["show_details"]: util.print_simulation(simulation) if s_rules["to_xlsx"]: util.simulation_to_xlsx(simulation, s_rules["to_xlsx"])
def handle_election(): data = request.get_json(force=True) rules = voting.ElectionRules() for k, v in data["rules"].items(): rules[k] = v for x in [ "constituency_names", "constituency_seats", "parties", "constituency_adjustment_seats" ]: if x in data and data[x]: rules[x] = data[x] else: return {"error": "Missing data ('%s')" % x} if not "votes" in data: return {"error": "Votes missing."} for const in data["votes"]: for party in const: if type(party) != int: return {"error": "Votes must be numbers."} try: election = voting.Election(rules, data["votes"]) election.run() except ZeroDivisionError: return {"error": "Need to have more votes."} except AssertionError: return {"error": "The data is malformed."} return election
def apportion(votes, **kwargs): """Do regular apportionment based on votes and constituency data.""" rules = voting.ElectionRules() kwargs["primary_divider"] = kwargs["divider"] kwargs["adj_determine_divider"] = kwargs[ "adj_determine_divider"] or kwargs["divider"] kwargs["adj_alloc_divider"] = kwargs["adj_alloc_divider"] or kwargs[ "adj_determine_divider"] kwargs["adjustment_threshold"] = kwargs["threshold"] * 0.01 try: for arg, val in kwargs.iteritems(): rules[arg] = val except AttributeError: for arg, val in kwargs.items(): rules[arg] = val parties, votes = util.load_votes(votes, rules["constituencies"]) rules["parties"] = parties election = voting.Election(rules, votes) election.run() if rules["show_details"]: util.print_steps_election(election) else: util.pretty_print_election(election) if rules["to_xlsx"]: util.election_to_xlsx(election, rules["to_xlsx"])
def apportion(votes, **kwargs): """Do regular apportionment based on votes and constituency data.""" rules = voting.ElectionRules() kwargs["adjustment_divider"] = kwargs["adjustment_divider"] or kwargs[ "divider"] try: for arg, val in kwargs.iteritems(): rules[arg] = val except AttributeError: for arg, val in kwargs.items(): rules[arg] = val parties, votes = util.load_votes(votes, rules["constituencies"]) rules["parties"] = parties election = voting.Election(rules, votes) election.run() if rules['output'] == "simple": click.secho( "Warning: When loading votes, no attempt is currently " "made to guarantee that the vote file lists " "constituencies in the same order as they are declared in " "the constituency file.\n\n", fg="red") util.pretty_print_election(rules, election)
def generate_one_const_ruleset(ruleset): ref_rs = voting.ElectionRules() ref_rs.update(ruleset) ref_rs["constituency_seats"] = [sum(ruleset["constituency_seats"])] ref_rs["constituency_adjustment_seats"] = [sum(ruleset["constituency_adjustment_seats"])] ref_rs["constituency_names"] = ["All"] return ref_rs
def setUp(self): self.e_rules = voting.ElectionRules() self.e_rules["constituency_names"] = ["I", "II", "III"] self.e_rules["constituency_seats"] = [5, 6, 4] self.e_rules["constituency_adjustment_seats"] = [1, 2, 1] self.e_rules["parties"] = ["A", "B"] self.votes = [[500, 300], [200, 400], [350, 450]] self.s_rules = simulate.SimulationRules() self.s_rules["simulation_count"] = 100
def setUp(self): self.rules = voting.ElectionRules() votes_file = "../data/elections/iceland_2013_landskjorstjorn.csv" const_file = "../data/constituencies/constituencies_iceland_2013.csv" self.rules["constituencies"] = const_file parties, votes = util.load_votes(votes_file, self.rules["constituencies"]) self.rules["parties"] = parties self.rules["adjustment_method"] = "alternating-scaling" self.votes = votes
def generate_law_ruleset(ruleset): ref_rs = voting.ElectionRules() ref_rs.update(ruleset) ref_rs["adjustment_method"] = "icelandic-law" ref_rs["primary_divider"] = "dhondt" ref_rs["adj_determine_divider"] = "dhondt" ref_rs["adj_alloc_divider"] = "dhondt" ref_rs["adjustment_threshold"] = 5 return ref_rs
def generate_ind_const_ruleset(ruleset): ref_rs = voting.ElectionRules() ref_rs.update(ruleset) ref_rs["constituency_seats"] = copy(ruleset["constituency_seats"]) ref_rs["constituency_adjustment_seats"] = [] for i in range(len(ruleset["constituency_seats"])): ref_rs["constituency_seats"][i] += ruleset["constituency_adjustment_seats"][i] ref_rs["constituency_adjustment_seats"].append(0) return ref_rs
def get_capabilities_dict(): return { "election_rules": voting.ElectionRules(), "simulation_rules": sim.SimulationRules(), "capabilities": { "divider_rules": voting.DIVIDER_RULE_NAMES, "adjustment_methods": voting.ADJUSTMENT_METHOD_NAMES, "generating_methods": sim.GENERATING_METHOD_NAMES }, }
def generate_all_adj_ruleset(ruleset): ref_rs = voting.ElectionRules() ref_rs.update(ruleset) n = len(ruleset["constituency_names"]) ref_rs["constituency_seats"] = [0 for c in range(n)] ref_rs["constituency_adjustment_seats"] \ = [ruleset["constituency_seats"][c] \ + ruleset["constituency_adjustment_seats"][c] for c in range(n)] return ref_rs
def fn(self): rules = voting.ElectionRules() votes_file = "../data/elections/iceland_2013_landskjorstjorn.csv" const_file = "../data/constituencies/constituencies_iceland_2013.csv" rules["constituencies"] = const_file parties, votes = util.load_votes(votes_file, rules["constituencies"]) rules["parties"] = parties rules["adjustment_method"] = method election = voting.Election(rules, votes) election.run()
def set_up_simulation(): data = request.get_json(force=True) rulesets = [] for rs in data["election_rules"]: election_rules = voting.ElectionRules() print(data["election_rules"]) print(rs) for k, v in rs.items(): print("Setting election_rules[%s] = %s" % (k, v)) election_rules[k] = v for x in [ "constituency_names", "constituency_seats", "parties", "constituency_adjustment_seats" ]: if x in data and data[x]: election_rules[x] = data[x] else: return False, "Missing data ('%s')" % x rulesets.append(election_rules) if not "ref_votes" in data: return False, "Votes missing." for const in data["ref_votes"]: for party in const: if type(party) != int: return False, "Votes must be numbers." stability_parameter = 100 if "stbl_param" in data: stability_parameter = data["stbl_param"] if stability_parameter <= 1: return False, "Stability parameter must be greater than 1." simulation_rules = sim.SimulationRules() for k, v in data["simulation_rules"].items(): simulation_rules[k] = v try: simulation = sim.Simulation(simulation_rules, rulesets, data["ref_votes"], stability_parameter) except ZeroDivisionError: return False, "Need to have more votes." return True, simulation
def run_script_simulation(rules): srs = SimulationRules() srs.update(rules["simulation_rules"]) rs = voting.ElectionRules() rs.update(rules["election_rules"]) if not "ref_votes" in rules: return {"error": "No reference votes supplied."} election = voting.Election(rs, rules["ref_votes"]) sim = Simulation(srs, election, rules["ref_votes"]) sim.simulate() return sim
def generate_opt_ruleset(ruleset): ref_rs = voting.ElectionRules() ref_rs.update(ruleset) ref_rs["adjustment_method"] = "alternating-scaling" return ref_rs