Source code for mapof.elections.cultures.matrices.single_crossing_matrices

import numpy as np

from mapof.elections.cultures.register import register_pseudo_ordinal_culture


[docs] @register_pseudo_ordinal_culture('pseudo_single_crossing') def get_single_crossing_matrix(num_candidates: int, **_kwargs) -> np.ndarray: """ Gets a single crossing matrix for a given number of candidates. """ matrix = np.zeros([num_candidates, num_candidates]) for i in range(num_candidates): for j in range(num_candidates - i): matrix[i][j] = i + j for i in range(num_candidates): for j in range(i): matrix[i][j] += 1 sums = [1] for i in range(num_candidates): sums.append(sums[i] + i) for i in range(num_candidates): matrix[i][i] += sums[i] matrix[i][num_candidates - i - 1] -= i for i in range(num_candidates): denominator = sum(matrix[i]) for j in range(num_candidates): matrix[i][j] /= denominator return matrix