def dataset_to_basic_sheets(abs_filepath):
    dataset = get_dataset_df(abs_filepath)

    def remove_useless_columns(df):
        columns_to_remove = [x for x in df.columns if 'Unnamed:' in str(x)]
        return df.drop(columns_to_remove, 1)

    def remove_rows_with_no_type(df):
        return df[df.type.notnull()]

    dataset = remove_useless_columns(dataset)
    dataset = remove_rows_with_no_type(dataset)

    names = dataset[dataset.type.map(lambda x: x in ['data', 'param'])][['var', 'name']]
    validate_variable_names(names['var'].tolist())

    equations = dataset[dataset.type == 'eq'][['name']]

    def get_data_years(df):
        years = df[dataset.type == 'is_forecast'].iloc[0]
        return [year for year, is_forecast in years.iteritems() if is_forecast == 0]

    data = dataset[dataset.type == 'data'][['var'] + get_data_years(dataset)]
    controls = dataset[dataset.type == 'param'].drop(['type', 'name'], 1)

    def to_array_with_years_and_values(df):
        result = np.concatenate(([np.array(df.columns)], df.as_matrix().astype(object)))
        result[0][0] = ''
        return result

    write_array_to_xl_using_xlwings(to_array_with_years_and_values(data), abs_filepath, 'data')
    write_array_to_xl_using_xlwings(to_array_with_years_and_values(controls), abs_filepath, 'controls')
    write_array_to_xl_using_xlwings(names.as_matrix(), abs_filepath, 'names')
    write_array_to_xl_using_xlwings(equations.as_matrix(), abs_filepath, 'equations')
def test_variable_names_validation():
    from import_specification import validate_variable_names
    validate_variable_names([])
    validate_variable_names(['no_dots1', 'no_dots2'])
    with pytest.raises(ValueError) as e:
        validate_variable_names(['no_dots', 'with.dot'])