def test_read_meta_data():
    """Test whether the meta data parser function works properly."""
    # Test function relevant imports
    from helpers import data_io
    meta_data = data_io.read_meta_data(
            'fc', '167', 'schiphol', '0', file_path=MOCK_DATA_PATH)
    assert meta_data['latitude'] == [52.25, 52.25, 52.38, 52.38]
    assert meta_data['longitude'] == [4.88, 4.75, 4.88, 4.75]
    assert meta_data['distance'] == [9.29, 7.78, 8.76, 7.15]
def test_read_meta_data():
    """Test whether the meta data parser function works properly."""
    # Test function relevant imports
    from helpers import data_io
    meta_data = data_io.read_meta_data('fc',
                                       '167',
                                       'schiphol',
                                       '0',
                                       file_path=MOCK_DATA_PATH)
    assert meta_data['latitude'] == [52.25, 52.25, 52.38, 52.38]
    assert meta_data['longitude'] == [4.88, 4.75, 4.88, 4.75]
    assert meta_data['distance'] == [9.29, 7.78, 8.76, 7.15]
def load_and_interpolate_forecast(model, element_name,
                                  station_name, issue):
    """Load a given dataset of forecast data with interpolated values.

    parameters
    ----------
    model: str, name of model
    element_name: str, string representation of the provided parameter
    station_name: str, canonical name of the station
    issue: str, string representation of the model issue hour
    """
    # Forecast columns: 1 to 4
    forecast_cols = ['value' + str(x) for x in range(1, 5)]

    # Station location
    station_lat, station_lon = data_io.get_station_location(station_name)

    # Read in forecast
    element_id = data_io.get_element_id(element_name, model)
    forecast_data = data_io.read_forecast_data(
        model, element_id, station_name, issue)

    # Check whether to do any interpolation
    empty_columns = \
        forecast_data.ix[:, forecast_cols].isnull().values.any(axis=0)
    if empty_columns.sum() == 3:
        # Just a single column provided. Don't do interpolation.
        logging.debug(
              "Not interpolating for model '%s', element '%s', station '%s'" %
              (model, str(element_id), station_name))
        # Select non-empty column
        non_empty_col = forecast_cols[(~empty_columns).nonzero()[0][0]]
        interpolated_forecast = forecast_data[non_empty_col]
    else:
        # Do interpolation using meta-data
        meta_data = \
            data_io.read_meta_data(model, element_id, station_name, issue)
        interpolated_forecast = interpolate(
            station_lat, station_lon,
            forecast_data.ix[:, forecast_cols],
            meta_data['latitude'], meta_data['longitude'],
            meta_data['distance']
        )
    forecast_data['interpolated_forecast'] = interpolated_forecast

    # Drop grid point data.
    forecast_data.drop(forecast_cols, axis=1, inplace=True)

    # Transform EPS data from row format to column format
    forecast_data = \
        transform_forecast_group_data(forecast_data, model, element_name)
    return forecast_data