Source code for mapof.elections.cultures.params

import mapof.core.features.mallows as mallows
import numpy as np
from scipy.stats import gamma

# from mapof.elections.cultures.register import registered_approval_cultures


[docs] def update_params_ordinal_mallows(params: dict): """ Updates parameters for ordinal Mallows model. """ if 'phi' in params and type(params['phi']) is list: params['phi'] = np.random.uniform(low=params['phi'][0], high=params['phi'][1]) elif 'phi' not in params: params['phi'] = np.random.random()
[docs] def update_params_ordinal_norm_mallows(params: dict, num_candidates: int): """ Updates parameters for ordinal Norm-Mallows model. """ if 'normphi' not in params: params['normphi'] = np.random.random() params['phi'] = mallows.phi_from_normphi(num_candidates, normphi=params['normphi']) if 'weight' not in params: params['weight'] = 0.
[docs] def update_params_ordinal_urn_model(params: dict): """ Updates parameters for ordinal Urn model. """ if 'alpha' not in params: params['alpha'] = float(gamma.rvs(0.8))
def update_params_ordinal_mallows_matrix_path(params: dict, num_candidates: int): params['normphi'] = params['alpha'] params['phi'] = mallows.phi_from_normphi(num_candidates, normphi=params['normphi']) def update_params_ordinal_mallows_triangle(params: dict, num_candidates: int): params['normphi'] = float(1 - np.sqrt(np.random.uniform())) params['phi'] = mallows.phi_from_normphi(num_candidates, normphi=params['normphi']) params['weight'] = np.random.uniform(0, 0.5) params['tint'] = params['weight'] # for tint on plots def update_params_ordinal_alpha(printing_params: dict): if 'alpha' not in printing_params: printing_params['alpha'] = None elif type(printing_params['alpha']) is list: printing_params['alpha'] = np.random.uniform(low=printing_params['alpha'][0], high=printing_params['alpha'][1]) def update_params_ordinal( params: dict, culture_id: str, num_candidates: int ): if 'variable' in params: del params['variable'] if culture_id.lower() == 'mallows': update_params_ordinal_mallows(params) elif 'norm_mallows' in culture_id.lower() or 'norm-mallows' in culture_id.lower() \ or 'mallows_urn' in culture_id.lower(): update_params_ordinal_norm_mallows(params, num_candidates) elif 'urn' in culture_id.lower(): update_params_ordinal_urn_model(params) elif culture_id.lower() == 'mallows_matrix_path': update_params_ordinal_mallows_matrix_path(params, num_candidates) elif culture_id.lower() == 'mallows_triangle': update_params_ordinal_mallows_triangle(params, num_candidates) return params def update_params_approval_rel_size_central_vote(params: dict, culture_id: str): if 'p' in params and culture_id in \ ['resampling', 'disjoint_resampling', 'moving_resampling', 'noise']: params['rel_size_central_vote'] = params['p'] params.pop('p') # def update_params_approval_alpha(printing_params: dict): # if 'alpha' not in printing_params: # printing_params['alpha'] = 1 # elif type(printing_params['alpha']) is list: # printing_params['alpha'] = np.random.uniform(low=printing_params['alpha'][0], # high=printing_params['alpha'][1]) # def update_params_approval_p(params: dict): # if 'p' not in params: # params['p'] = np.random.rand() # elif type(params['p']) is list: # params['p'] = np.random.uniform(low=params['p'][0], high=params['p'][1]) def update_params_approval_resampling(params: dict): if 'phi' in params and type(params['phi']) is list: params['phi'] = np.random.uniform(low=params['phi'][0], high=params['phi'][1]) elif 'phi' not in params: params['phi'] = np.random.random() if 'p' in params and type(params['p']) is list: params['p'] = np.random.uniform(low=params['p'][0], high=params['p'][1]) elif 'p' not in params: params['p'] = np.random.random() def update_params_approval_disjoint(params: dict): if 'phi' in params and type(params['phi']) is list: params['phi'] = np.random.uniform(low=params['phi'][0], high=params['phi'][1]) elif 'phi' not in params: params['phi'] = np.random.random() if 'p' in params and type(params['p']) is list: params['p'] = np.random.uniform(low=params['p'][0], high=params['p'][1]) elif 'p' not in params: params['p'] = np.random.random() / params['num_central_votes'] def update_params_approval( params: dict, culture_id: str, ): if 'variable' in params: del params['variable'] if culture_id.lower() == 'resampling': update_params_approval_resampling(params) elif culture_id.lower() == 'disjoint_resampling': update_params_approval_disjoint(params) update_params_approval_rel_size_central_vote(params, culture_id.lower()) return params def get_params_for_paths(path, size, j, extremes=False): variable = path['variable'] if 'extremes' in path: extremes = path['extremes'] params = {'variable': variable} if extremes: params[variable] = j / (size - 1) elif not extremes: params[variable] = (j + 1) / (size + 1) if 'scale' in path: params[variable] *= path['scale'] if 'start' in path: params[variable] += path['start'] else: path['start'] = 0. if 'step' in path: params[variable] = path['start'] + j * path['step'] return params, variable