Source code for mapof.elections.cultures

import logging

import numpy as np

import mapof.elections.cultures.alliances
import mapof.elections.cultures.compass
import mapof.elections.cultures.mallows
import mapof.elections.cultures.matrices.group_separable_matrices
import mapof.elections.cultures.matrices.single_crossing_matrices
import mapof.elections.cultures.matrices.single_peaked_matrices
import mapof.elections.cultures.prefsampling_mask
import mapof.elections.cultures.pseudo_cultures
from mapof.elections.cultures.register import (
    registered_approval_election_cultures,
    registered_ordinal_election_cultures,
    registered_pseudo_ordinal_cultures,
    registered_alliance_ordinal_cultures,
)
from mapof.elections.other.glossary import is_pseudo_culture


[docs] def generate_approval_votes( culture_id: str = None, num_voters: int = None, num_candidates: int = None, params: dict = None ) -> list | np.ndarray: """ Generates approval votes according to the given culture id. Parameters ---------- culture_id : str Name of the culture. num_voters : int Number of Voters. num_candidates : int Number of Candidates params : dict Culture parameters. """ if culture_id in registered_approval_election_cultures: return registered_approval_election_cultures.get(culture_id)(num_voters, num_candidates, **params) else: logging.warning(f'No such culture id: {culture_id}') return []
[docs] def generate_ordinal_votes( culture_id: str = None, num_candidates: int = None, num_voters: int = None, params: dict = None, **_kwargs ) -> list | np.ndarray: """ Generates approval votes according to the given culture id. Parameters ---------- culture_id : str Name of the culture. num_voters : int Number of Voters. num_candidates : int Number of Candidates params : dict Culture parameters. """ if culture_id in registered_ordinal_election_cultures: votes = registered_ordinal_election_cultures.get(culture_id)(num_voters=num_voters, num_candidates=num_candidates, **params) elif is_pseudo_culture(culture_id): votes = [culture_id, num_candidates, num_voters, params] else: votes = [] logging.warning( f'No such culture id: {culture_id} \n' f'If you are using your own instances then ignore this warning.') if not is_pseudo_culture(culture_id): votes = [[int(x) for x in row] for row in votes] return np.array(votes)
def generate_ordinal_alliance_votes( culture_id: str = None, num_candidates: int = None, num_voters: int = None, params: dict = None ): if culture_id in registered_alliance_ordinal_cultures: votes, alliances = registered_alliance_ordinal_cultures.get(culture_id)( num_voters=num_voters, num_candidates=num_candidates, params=params) else: votes = [] alliances = [] logging.warning(f'No such alliance culture id: {culture_id}') return np.array(votes), alliances
[docs] def add_approval_culture(name, function) -> None: """ Adds a new approval culture to the list of available approval cultures. Parameters ---------- name: Name of the culture, which will be used as culture id. function : str Function that generates the votes. Returns ------- None """ registered_approval_election_cultures[name] = function
[docs] def add_ordinal_culture(name, function) -> None: """ Adds a new ordinal culture to the list of available ordinal cultures. Parameters ---------- name : str Name of the culture, which will be used as culture id. function : callable Function that generates the votes. Returns ------- None """ registered_ordinal_election_cultures[name] = function
[docs] def add_pseudo_ordinal_culture(name, function) -> None: """ Adds a new ordinal culture to the list of available ordinal cultures. Parameters ---------- name : str Name of the culture, which will be used as culture id. function : callable Function that generates the frequency matrix. Returns ------- None """ registered_pseudo_ordinal_cultures[name] = function
def generate_frequency_matrix( culture_id=None, num_candidates=None, params=None): return registered_pseudo_ordinal_cultures[culture_id]( num_candidates=num_candidates, params=params ) __all__ = [ 'generate_approval_votes', 'generate_ordinal_votes', 'generate_ordinal_alliance_votes', 'add_approval_culture', 'add_ordinal_culture', 'add_pseudo_ordinal_culture', 'generate_frequency_matrix' ]