def discriminatory_ob_gene(results, n_ass, n_objects, n_object_per_assessment):
    ass.symmetrized_Votes(results)
    Delta_est, Assessors_est, S_est = em.EM_est(results, n_objects, 0.001)
    s = np.argsort(S_est, axis=None)
    n = np.shape(S_est)[0]
    sorted_ind = [(s[i] / n, s[i] - (s[i] / n) * n) for i in range(len(s))]
    res = objects_from_edges(sorted_ind, n_object_per_assessment)
    return res
def graph_ob_gene(results, n_ass, n_objects, n_object_per_assessment):
    # Compute Distance
    ass.symmetrized_Votes(results)
    Delta_est, Assessors_est, S_est = em.EM_est(results, n_objects, 0.00001)
    Delta = np.ones(np.shape(Delta_est)) - Delta_est
    Delta = Delta / np.max(Delta, axis=None)
    sorted_Delta = np.sort(Delta, axis=None)
    # Set threshold as median of non zeros values
    threshold = np.median([sorted_Delta[i] for i in np.nonzero(sorted_Delta)])
    # Create graph and compute betweeness of edges
    G = gra.init_graph(Delta, threshold)
    edges_betweeness = gra.betweeness(G)
    # Return the appropriate number of objects choosing the high betweeness first
    best_ind = list(np.argsort(
        edges_betweeness.values()))[-n_object_per_assessment:]
    best_edges = [edges_betweeness.keys()[i] for i in best_ind]
    res = objects_from_edges(best_edges, n_object_per_assessment)
    return res
def discriminatory_ass_gene(results, n_ass, n_objects):
    ass.symmetrized_Votes(results)
    Delta_est, Assessors_est, S_est = em.EM_est(results, n_objects, 0.001)
    return np.argsort(Assessors_est)[0]