def update_training_info_evaluation_sheet(exp_index,
                                          evaluation_index_list,
                                          debug=True):

    add_index_exp = lambda x: x + str(exp_index)
    columns_list = list(
        map(add_index_exp, get_training_params_colums_in_experiments_sheet()))
    training_info_list = get_data_from_sheet(
        service=get_sheet_service(),
        sheet_id=get_experiments_sheet_id(),
        search_range=columns_list,
        debug=debug)  #

    # paste info to evaluation sheet
    for line_index in evaluation_index_list:
        add_index_evaluation = lambda x: x + str(line_index)
        columns_list = list(
            map(add_index_evaluation,
                get_training_params_colums_in_evaluation_sheet()))
        update_row2sheet(service=get_sheet_service(),
                         sheet_id=get_evaluation_sheet_id(),
                         row_starting_position=columns_list[0],
                         data=training_info_list,
                         debug=debug)  #
def fetch_resize_factor_from_google_sheets(dataset,
                                           subset,
                                           size_set,
                                           model_name,
                                           debug=True):
    '''
	get model date during training
	'''
    row_index = get_row_index_from_experiments_sheet(dataset,
                                                     subset,
                                                     size_set,
                                                     model_name,
                                                     debug=debug)
    factor = get_data_from_sheet(service=get_sheet_service(),
                                 sheet_id=get_experiments_sheet_id(),
                                 search_range='g' + str(row_index),
                                 debug=debug)[0]
    return factor
def fetch_output_stage_from_google_sheets(dataset,
                                          subset,
                                          size_set,
                                          model_name,
                                          debug=True):
    '''
	get model date during training
	'''
    row_index = get_row_index_from_experiments_sheet(dataset,
                                                     subset,
                                                     size_set,
                                                     model_name,
                                                     debug=debug)
    out_stage = get_data_from_sheet(service=get_sheet_service(),
                                    sheet_id=get_experiments_sheet_id(),
                                    search_range='I' + str(row_index),
                                    debug=debug)[0]
    out_stage = out_stage.split('S')
    return out_stage[-1]
def fetch_downsample_from_google_sheets(dataset,
                                        subset,
                                        size_set,
                                        model_name,
                                        debug=True):
    '''
	get downsample factor during training
	'''
    row_index = get_row_index_from_experiments_sheet(dataset,
                                                     subset,
                                                     size_set,
                                                     model_name,
                                                     debug=debug)
    downsample = get_data_from_sheet(service=get_sheet_service(),
                                     sheet_id=get_experiments_sheet_id(),
                                     search_range='H' + str(row_index),
                                     debug=debug)[0]
    substrings = downsample.split('x')
    return substrings[0]
def update_testing_info_evaluation_sheet(evaluation_index_list,
                                         info_list,
                                         debug=True):
    '''
	update testing configuration to the record
	'''
    if debug:
        assert len(info_list) == len(
            get_testing_params_colums_in_evaluation_sheet()
        ), 'the information list is not correct %d vs %d' % (len(
            info_list), len(get_testing_params_colums_in_evaluation_sheet()))

    info_list = list(info_list)
    for line_index in evaluation_index_list:
        row_starting_position = get_testing_params_colums_in_evaluation_sheet(
        )[0] + str(line_index)
        update_row2sheet(service=get_sheet_service(),
                         sheet_id=get_evaluation_sheet_id(),
                         row_starting_position=row_starting_position,
                         data=info_list,
                         debug=debug)
def fetch_fitsize_from_google_sheets(dataset,
                                     subset,
                                     size_set,
                                     model_name,
                                     debug=True):
    '''
	get input size during training
	'''
    row_index = get_row_index_from_experiments_sheet(dataset,
                                                     subset,
                                                     size_set,
                                                     model_name,
                                                     debug=debug)
    inputsize = get_data_from_sheet(service=get_sheet_service(),
                                    sheet_id=get_experiments_sheet_id(),
                                    search_range='F' + str(row_index),
                                    debug=debug)[0]
    substrings = inputsize.split(' ')
    width = substrings[0]
    height = substrings[2]
    return [width, height]
def get_row_index_list_from_evaluation_sheet(
        dataset,
        subset,
        size_set,
        evaluation_name,
        debug=True):  # all evaluated models might not be unique
    '''
		the returned index is already 1-indexed
	'''
    if debug:
        assert subset in get_compact_subset_list(
        ) or subset == 'face_old', 'subset is not correct!'
        assert size_set in ['resized_4', 'cropped',
                            'cropped_all'], 'size set is not correct'

    column_search_range = range(get_search_range_in_sheet())
    # find index in rows in experiments sheet
    columns_search_dataset = [
        'A%d' % (search_value_tmp + 1)
        for search_value_tmp in column_search_range
    ]
    columns_name_dataset = get_data_from_sheet(
        service=get_sheet_service(),
        sheet_id=get_evaluation_sheet_id(),
        search_range=columns_search_dataset,
        debug=debug)  #
    columns_search_subset = [
        'B%d' % (search_value_tmp + 1)
        for search_value_tmp in column_search_range
    ]
    columns_name_subset = get_data_from_sheet(
        service=get_sheet_service(),
        sheet_id=get_evaluation_sheet_id(),
        search_range=columns_search_subset,
        debug=debug)  #
    columns_search_sizeset = [
        'C%d' % (search_value_tmp + 1)
        for search_value_tmp in column_search_range
    ]
    columns_name_sizeset = get_data_from_sheet(
        service=get_sheet_service(),
        sheet_id=get_evaluation_sheet_id(),
        search_range=columns_search_sizeset,
        debug=debug)  #
    columns_search_model = [
        'D%d' % (search_value_tmp + 1)
        for search_value_tmp in column_search_range
    ]
    columns_name_model = get_data_from_sheet(
        service=get_sheet_service(),
        sheet_id=get_evaluation_sheet_id(),
        search_range=columns_search_model,
        debug=debug)  #
    row_index_list = list()
    for row_index in column_search_range:
        if columns_name_subset[row_index] == subset and columns_name_sizeset[
                row_index] == size_set and columns_name_model[
                    row_index] == evaluation_name and columns_name_dataset[
                        row_index] == dataset:
            row_index_list.append(row_index + 1)

    if len(row_index_list) == 0:
        assert False, '%s, %s, %s, %s is not on the search range within the google sheet' % (
            dataset, subset, size_set, evaluation_name)

    return row_index_list
def get_row_index_from_experiments_sheet(
        dataset,
        subset,
        size_set,
        model_name,
        debug=True):  # all experiments are unique
    '''
	the returned index is already 1-indexed
	'''
    if debug:
        assert subset in get_compact_subset_list(
        ) or subset == 'face_old', 'subset is not correct!'
        assert size_set in ['resized_4', 'cropped',
                            'cropped_all'], 'size set is not correct'

    column_search_range = range(get_search_range_in_sheet())
    # find index in rows in experiments sheet
    columns_search_dataset = [
        'A%d' % (search_value_tmp + 1)
        for search_value_tmp in column_search_range
    ]
    columns_name_dataset = get_data_from_sheet(
        service=get_sheet_service(),
        sheet_id=get_experiments_sheet_id(),
        search_range=columns_search_dataset,
        debug=debug)  #
    columns_search_subset = [
        'B%d' % (search_value_tmp + 1)
        for search_value_tmp in column_search_range
    ]
    columns_name_subset = get_data_from_sheet(
        service=get_sheet_service(),
        sheet_id=get_experiments_sheet_id(),
        search_range=columns_search_subset,
        debug=debug)  #
    columns_search_sizeset = [
        'C%d' % (search_value_tmp + 1)
        for search_value_tmp in column_search_range
    ]
    columns_name_sizeset = get_data_from_sheet(
        service=get_sheet_service(),
        sheet_id=get_experiments_sheet_id(),
        search_range=columns_search_sizeset,
        debug=debug)  #
    columns_search_model = [
        'D%d' % (search_value_tmp + 1)
        for search_value_tmp in column_search_range
    ]
    columns_name_model = get_data_from_sheet(
        service=get_sheet_service(),
        sheet_id=get_experiments_sheet_id(),
        search_range=columns_search_model,
        debug=debug)  #

    row_index_exp = None
    for row_index in column_search_range:
        if columns_name_subset[row_index] == subset and columns_name_sizeset[
                row_index] == size_set and columns_name_model[
                    row_index] == model_name and columns_name_dataset[
                        row_index] == dataset:
            row_index_exp = row_index + 1
            break

    if row_index_exp is None:
        assert False, 'No entry model (%s, %s, %s, %s) found!' % (
            dataset, subset, size_set, model_name)

    return row_index_exp