def consolidate_experiments_with_options(exp_dict, sim_dict, batch_name=None):
    # if batch name exists, always save experiments
    if batch_name is None:
        return exp_dict, sim_dict

    batch = DataStore.get_batch_by_name(batch_name)
    if batch:
        batch_exp_id_list = batch.get_experiment_ids()
        batch_sim_id_list = batch.get_simulation_ids()

        exp_diff = not compare_two_ids_list(exp_dict.keys(), batch_exp_id_list)
        sim_diff = not compare_two_ids_list(sim_dict.keys(), batch_sim_id_list)

        if exp_diff or sim_diff:
            # confirm only if existing batch contains different experiments
            print("\nBatch with name {} already exists and contains the following:\n".format(batch_name))
            print(batch)

            if exp_dict or sim_dict:
                var = input('\nDo you want to [O]verwrite, [M]erge, or [C]ancel:  ')
                # print("You selected '%s'" % var)
                if var == 'O':
                    # clear existing experiments associated with this Batch
                    DataStore.clear_batch(batch)
                    return exp_dict, sim_dict
                elif var == 'M':
                    return exp_dict, sim_dict
                elif var == 'C':
                    exit()
                else:
                    logger.error("Option '%s' is invalid..." % var)
                    exit()

    return exp_dict, sim_dict
def clear_batch(id_or_name, ask=False):
    """
    de-attach all associated experiments from the given batch
    """
    batches = DataStore.get_batch_list(id_or_name)

    if not batches:
        print("No batches identified by '%s' were found in the DB." % id_or_name)
        exit()

    if ask:
        for batch in batches:
            print(batch)
        if input("Are you sure you want to detach all associated experiments from those batches (Y/n)? ") != 'Y':
            print('No action taken.')
            return

    DataStore.clear_batch(batches)
    print('The associated experiments/simulations were detached.')