def test_remove_common_prefix(): assert remove_common_prefix([[1, 2, 3, 4], [1, 2, 5], [1, 2, 3, 5]]) == [[3, 4], [5], [3, 5]] assert remove_common_prefix([[1, 2, 3, 4], [1, 2, 5], [1, 2, 3, 5]], max_elements=1) == [[2, 3, 4], [2, 5], [2, 3, 5]]
def deprefix_experiment_ids(experiment_ids): """ Given a list of experiment ids, removed the common root experiments from the list. :param experiment_ids: A list of experiment ids. :return: A list of experiment ids with the root prefix removed. """ # First build dict mapping experiment_ids to their parents experiment_ids glib = get_global_experiment_library() exp_to_parent = {} for eid in glib.keys(): ex = glib[eid] for var in ex.get_variants(): exp_to_parent[var.get_id()] = ex.get_id() @memoize def get_experiment_tuple(exp_id): if exp_id in exp_to_parent: parent_id = exp_to_parent[exp_id] parent_tuple = get_experiment_tuple(parent_id) return parent_tuple + (exp_id[len(parent_id) + 1:], ) else: return (exp_id, ) # Then for each experiment in the list, tuples = [get_experiment_tuple(eid) for eid in experiment_ids] de_prefixed_tuples = remove_common_prefix(tuples, keep_base=False) start_with = '' if len(de_prefixed_tuples[0]) == len(tuples[0]) else '.' new_strings = [ start_with + '.'.join(ex_tup) for ex_tup in de_prefixed_tuples ] return new_strings
def deprefix_experiment_ids(experiment_ids): """ Given a list of experiment ids, removed the common root experiments from the list. :param experiment_ids: A list of experiment ids. :return: A list of experiment ids with the root prefix removed. """ # First build dict mapping experiment_ids to their parents experiment_ids glib = get_global_experiment_library() exp_to_parent = {} for eid in glib.keys(): ex = glib[eid] for var in ex.get_variants(): exp_to_parent[var.get_id()] = ex.get_id() @memoize def get_experiment_tuple(exp_id): if exp_id in exp_to_parent: parent_id = exp_to_parent[exp_id] parent_tuple = get_experiment_tuple(parent_id) return parent_tuple + (exp_id[len(parent_id)+1:], ) else: return (exp_id, ) # Then for each experiment in the list, tuples = [get_experiment_tuple(eid) for eid in experiment_ids] de_prefixed_tuples = remove_common_prefix(tuples, keep_base=False) start_with = '' if len(de_prefixed_tuples[0])==len(tuples[0]) else '.' new_strings = [start_with+'.'.join(ex_tup) for ex_tup in de_prefixed_tuples] return new_strings
def remove_common_results_prefix(results_dict): """ Remove the common prefix for the results you are comparing. :param results_dict: An OrderedDict of experiment Results :return: An OrderedDict of results with the common beginnings of the keys truncated. """ # TODO: Fix this so that it splits correctly, not just on '.', which is not necessarily a separator. assert isinstance(dict, OrderedDict), 'Expecting an OrderedDict of <experiment_name -> result>' split_keys = [k.split('.') for k in results_dict.keys()] trimmed_keys = remove_common_prefix(split_keys) return OrderedDict((k, v) for k, v in izip_equal(trimmed_keys, results_dict.values()))
def remove_common_results_prefix(results_dict): """ Remove the common prefix for the results you are comparing. :param results_dict: An OrderedDict of experiment Results :return: An OrderedDict of results with the common beginnings of the keys truncated. """ # TODO: Fix this so that it splits correctly, not just on '.', which is not necessarily a separator. assert isinstance(dict, OrderedDict), 'Expecting an OrderedDict of <experiment_name -> result>' split_keys = [k.split('.') for k in results_dict.keys()] trimmed_keys = remove_common_prefix(split_keys) return OrderedDict((k, v) for k, v in izip_equal(trimmed_keys, results_dict.values()))
def test_remove_common_prefix(): assert remove_common_prefix([[1, 2, 3, 4], [1, 2, 5], [1, 2, 3, 5]]) == [[3, 4], [5], [3, 5]] assert remove_common_prefix([[1, 2, 3, 4], [1, 2, 5], [1, 2, 3, 5]], max_elements=1) == [[2, 3, 4], [2, 5], [2, 3, 5]]