From 8e8661c25bde4878b83d0c2edf2533a35e394970 Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Tue, 15 Jun 2021 22:19:29 -0500 Subject: [PATCH 01/40] Create era5.py --- pvlib/iotools/era5.py | 145 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 pvlib/iotools/era5.py diff --git a/pvlib/iotools/era5.py b/pvlib/iotools/era5.py new file mode 100644 index 0000000000..3d84af5adc --- /dev/null +++ b/pvlib/iotools/era5.py @@ -0,0 +1,145 @@ +"""Functions to access data from Copernicus Climate Data Storage (CDS). +.. codeauthor:: Adam R. Jensen +""" + +import cdsapi +import pandas as pd + +# %% +# ERA5 vs ERA-Land? - ERA-Land doesn not seem to have BHI, but only GHI +# reanalysis-era5-single-levels vs. reanalsys-era5-land? +# Other parameters: 'total_column_water_vapour', 'surface_net_solar_radiation' +# Variables are also avaiable as integrated values +start_time = pd.Timestamp('2018-01-01') +end_time = pd.Timestamp('2018-05-01') +product_type = 'reanalysis' + +get_era5(start_time, end_time, latitude=55, longitude=10) + +# %% + + +DEFAULT_VARIABLES = [ + '10m_u_component_of_wind', + '10m_v_component_of_wind', + '2m_temperature', + 'surface_pressure', + 'mean_surface_downward_short_wave_radiation_flux', + 'mean_surface_downward_short_wave_radiation_flux_clear_sky', + 'mean_surface_direct_short_wave_radiation_flux', + 'mean_surface_direct_short_wave_radiation_flux_clear_sky', + 'mean_top_downward_short_wave_radiation_flux' + ] + + +ERA5_VARIABLE_MAP = { + '2m_temperature': 'temp_air', + 'surface_pressure': 'pressure', + 'mean_surface_downward_short_wave_radiation_flux': 'ghi', + 'mean_surface_downward_short_wave_radiation_flux_clear_sky': 'ghi_clear', + 'mean_surface_direct_short_wave_radiation_flux': 'bhi', + 'mean_surface_direct_short_wave_radiation_flux_clear_sky': 'bhi_clear', + 'mean_top_downward_short_wave_radiation_flux': 'ghi_extra', + } + + +def get_era5(start_time, end_time, latitude, longitude, + variables=DEFAULT_VARIABLES, map_variables=True, + product_type='reanalysis', file_format='netcdf'): + """ + Retrieve time-series of XXfrom ERA5 reanalysis [1]_. + + Access requires user registration [2]_ and creating a local file with your + personal API key, see [3]_ for instructions. + + Temporal coverage: 1979 to present + Temporal resolution: hourly + Spatial resolution: 0.25° by 0.25° + Spatial coverage: global + Projection: regular latitude-longitude grid + + Time-stamp: from the previous time stamp and backwards, i.e. end of period + For the reanalysis, the accumulation period is over the 1 hour up to the validity date and time. + + Parameters + ---------- + start_time: datetime like + First timestamp of the requested period + end_time: datetime like + Last timestamp of the requested period + latitude: float + in decimal degrees, between -90 and 90, north is positive (ISO 19115) + longitude : float + in decimal degrees, between -180 and 180, east is positive (ISO 19115) + altitude: float, default: None + Altitude in meters. + file_format: {grib, netcdf}, default netcdf + File format of retrieved data. Note NetCDF is experimental. + product_type: str, {'reanalysis', 'ensemble_members', 'ensemble_mean', + 'ensemble_spread'}, default: 'reanalysis' + map_variables: bool, default: True + When true, renames columns of the DataFrame to pvlib variable names + where applicable. See variable ERA5_VARIABLE_MAP. + + + + The returned data DataFrame includes the following fields: + + ======================== ====== ========================================= + Key, mapped key Format Description + ======================== ====== ========================================= + **Mapped field names are returned when the map_variables argument is True** + --------------------------------------------------------------------------- + 10m_u_component_of_wind float Horizontal air speed towards the east, at a height of 10 m [m/s] + 10m_v_component_of_wind float Horizontal air speed towards the north, at a height of 10 m [m/s] + Clear sky GHI, ghi_clear float Clear sky global radiation on horizontal + 2m_temperature float Air temperature at 2m above the ground (K) + surface_pressure float Atmospheric pressure at the ground (Pa) + toa_incident_solar_radiation float Horizontal solar irradiation at top of atmosphere (J/m^2) + clear_sky_direct_solar_radiation_at_surface float Clear-sky direct horizontal irradiance (J/m^2) + surface_solar_radiation_downward_clear_sky float Clear-sky global iradiation (J/m^2) + surface_solar_radiation_downwards float Global horizontal irradiation (GHI) (J/m^2) + total_sky_direct_solar_radiation_at_surface float Direct/beam horizontal irradiation (BHI) (J/m^2) + ======================== ====== ========================================= + + References + ---------- + .. [1] `ERA5 hourly data on single levels from 1979 to present + ` + .. [2] `How to use CDS API + ` + .. [3] `Climate Data Storage user registration + ` + """ + c = cdsapi.Client() + + dataset_name = 'reanalysis-era5-single-levels' + + # This should be made faster! + # Generate lists of the years, months, days, and hours of interest + date_range = pd.date_range(start_time, end_time, freq='1h') + years = date_range.strftime('%Y').unique() + months = date_range.strftime('%m').unique() + days = date_range.strftime('%d').unique() + hours = date_range.strftime('%H:%M').unique() + + c.retrieve(dataset_name, + {'product_type': product_type, + 'format': file_format, + 'variable': variables, + 'year': years, + 'month': months, + 'day': days, + 'time': hours, + 'area': [79, 11, 78.5, 13], + }, + 'ERA5_NYAA_solar_2015.grib') + + + + + + + + + From 25662a4e7caf28f9028e2e6d4e40be1bb014f17c Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Wed, 16 Jun 2021 21:07:13 -0500 Subject: [PATCH 02/40] Update era5.py --- pvlib/iotools/era5.py | 95 ++++++++++++++++++++++++++++++------------- 1 file changed, 67 insertions(+), 28 deletions(-) diff --git a/pvlib/iotools/era5.py b/pvlib/iotools/era5.py index 3d84af5adc..eaad28396f 100644 --- a/pvlib/iotools/era5.py +++ b/pvlib/iotools/era5.py @@ -1,4 +1,4 @@ -"""Functions to access data from Copernicus Climate Data Storage (CDS). +"""Functions to access and read data from Copernicus Climate Data Store (CDS). .. codeauthor:: Adam R. Jensen """ @@ -10,11 +10,19 @@ # reanalysis-era5-single-levels vs. reanalsys-era5-land? # Other parameters: 'total_column_water_vapour', 'surface_net_solar_radiation' # Variables are also avaiable as integrated values -start_time = pd.Timestamp('2018-01-01') -end_time = pd.Timestamp('2018-05-01') +start = pd.Timestamp('2018-12-31') +end = pd.Timestamp('2018-12-31 23:59') product_type = 'reanalysis' +latitude = 55 +longitude = 10 +variables = ['mean_surface_downward_short_wave_radiation_flux','mean_surface_downward_short_wave_radiation_flux_clear_sky'] -get_era5(start_time, end_time, latitude=55, longitude=10) +# %% +get_era5(start, end, latitude=latitude, longitude=longitude, + variables=variables) + +# %% +# If the getter is only a 'downloader' and does not parse, it should not have map_variables # %% @@ -43,9 +51,10 @@ } -def get_era5(start_time, end_time, latitude, longitude, +def get_era5(start, end, latitude, longitude, grid=[0.25, 0.25], variables=DEFAULT_VARIABLES, map_variables=True, - product_type='reanalysis', file_format='netcdf'): + dataset='reanalysis-era5-single-levels', + product_type='reanalysis', cds_client=None, file_format='netcdf'): """ Retrieve time-series of XXfrom ERA5 reanalysis [1]_. @@ -63,20 +72,19 @@ def get_era5(start_time, end_time, latitude, longitude, Parameters ---------- - start_time: datetime like + start: datetime like First timestamp of the requested period - end_time: datetime like + end: datetime like Last timestamp of the requested period latitude: float in decimal degrees, between -90 and 90, north is positive (ISO 19115) longitude : float in decimal degrees, between -180 and 180, east is positive (ISO 19115) - altitude: float, default: None - Altitude in meters. file_format: {grib, netcdf}, default netcdf File format of retrieved data. Note NetCDF is experimental. product_type: str, {'reanalysis', 'ensemble_members', 'ensemble_mean', 'ensemble_spread'}, default: 'reanalysis' + cds_client: CDS API client object map_variables: bool, default: True When true, renames columns of the DataFrame to pvlib variable names where applicable. See variable ERA5_VARIABLE_MAP. @@ -106,40 +114,71 @@ def get_era5(start_time, end_time, latitude, longitude, ---------- .. [1] `ERA5 hourly data on single levels from 1979 to present ` - .. [2] `How to use CDS API + .. [2] `How to use the CDS API ` .. [3] `Climate Data Storage user registration ` """ - c = cdsapi.Client() + if cds_client is None: + cds_client = cdsapi.Client() - dataset_name = 'reanalysis-era5-single-levels' + # Area is selected by a box made by the four coordinates: [N,W,S,E] + if type(lat) == list: + area = latitude + longitude + else: + area = [lat, lon, lat, lon] - # This should be made faster! - # Generate lists of the years, months, days, and hours of interest - date_range = pd.date_range(start_time, end_time, freq='1h') - years = date_range.strftime('%Y').unique() - months = date_range.strftime('%m').unique() - days = date_range.strftime('%d').unique() - hours = date_range.strftime('%H:%M').unique() - - c.retrieve(dataset_name, + c.retrieve(dataset, {'product_type': product_type, 'format': file_format, 'variable': variables, - 'year': years, - 'month': months, - 'day': days, - 'time': hours, - 'area': [79, 11, 78.5, 13], + 'date': start.strftime('%Y-%m-%d %H:%M') + '/' \ + + end.strftime('%Y-%m-%d %H:%M'), + 'grid': grid, + 'area': area, }, - 'ERA5_NYAA_solar_2015.grib') + f'ERA5_test_data.{file_format}') + +# Add grid +# Other product type is 'monthly_averaged_reanalysis' +# Other datasets are: 'reanalysis-era5-single-levels-monthly-means', 'reanalysis-era5-land', 'reanalysis-era5-land-monthly-means' +# Use simpler variable names, e.g., 2t +# %% Example official +c = cdsapi.Client() +c.retrieve("reanalysis-era5-single-levels", + {"variable": variables, + "product_type": "reanalysis", + "year": ['2018'], + "month": months, + "day": days, + "time": hours, + "format": "grib" + }, + "download.grib") +# %% + +c = cdsapi.Client() +c.retrieve("reanalysis-era5-single-levels", + {"variable": variables, + "product_type": "reanalysis", + "year": ['2018'], + "month": ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'], + "day": ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31'], + "time": ['00:00', '01:00', '02:00', '03:00', '04:00', '05:00', '06:00', '07:00', '08:00', '09:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00', '19:00', '20:00', '21:00', '22:00', '23:00'], + "format": "grib" + }, + "download.grib") +# %% + +import pvlib +import pandas as pd +df, meta = pvlib.iotools.get_cams(latitude=10, longitude=55, start=pd.Timestamp(2019,1,1), end=pd.Timestamp(2020,1,1), email='arajen@byg.dtu.dk', time_step='1h') From f6bc57e56cd2e16f426ece9c89310a6db5300d1f Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Thu, 17 Jun 2021 10:56:52 -0500 Subject: [PATCH 03/40] Update era5.py --- pvlib/iotools/era5.py | 98 +++++++++++++++++++++---------------------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/pvlib/iotools/era5.py b/pvlib/iotools/era5.py index eaad28396f..454b3b5a13 100644 --- a/pvlib/iotools/era5.py +++ b/pvlib/iotools/era5.py @@ -1,4 +1,4 @@ -"""Functions to access and read data from Copernicus Climate Data Store (CDS). +"""Functions to retreive and read ERA5 data from the CDS. .. codeauthor:: Adam R. Jensen """ @@ -51,15 +51,18 @@ } -def get_era5(start, end, latitude, longitude, grid=[0.25, 0.25], - variables=DEFAULT_VARIABLES, map_variables=True, - dataset='reanalysis-era5-single-levels', - product_type='reanalysis', cds_client=None, file_format='netcdf'): +def get_era5(start, end, latitude, longitude, + dataset_name='reanalysis-era5-single-levels', + product_type='reanalysis', variables=DEFAULT_VARIABLES, + grid=[0.25, 0.25], file_format='netcdf', cds_client=None, + map_variables=True): """ - Retrieve time-series of XXfrom ERA5 reanalysis [1]_. + Retrieve ERA5 reanalysis data from the Copernicus Data Store (CDS). + + [1]_. - Access requires user registration [2]_ and creating a local file with your - personal API key, see [3]_ for instructions. + Access requires user registration [3]_ and creating a local file with your + personal API key, see [4]_ for instructions. Temporal coverage: 1979 to present Temporal resolution: hourly @@ -76,14 +79,20 @@ def get_era5(start, end, latitude, longitude, grid=[0.25, 0.25], First timestamp of the requested period end: datetime like Last timestamp of the requested period - latitude: float + latitude: float or list in decimal degrees, between -90 and 90, north is positive (ISO 19115) - longitude : float + longitude : float or list in decimal degrees, between -180 and 180, east is positive (ISO 19115) - file_format: {grib, netcdf}, default netcdf - File format of retrieved data. Note NetCDF is experimental. + dataset_name: str, default: + Name of the dataset. Options are 'reanalysis-era5-single-levels', + 'reanalysis-era5-single-levels-monthly-means', + 'reanalysis-era5-land', or 'reanalysis-era5-land-monthly-means' product_type: str, {'reanalysis', 'ensemble_members', 'ensemble_mean', 'ensemble_spread'}, default: 'reanalysis' + variables + grid + file_format: {grib, netcdf}, default netcdf + File format of retrieved data. Note NetCDF is experimental. cds_client: CDS API client object map_variables: bool, default: True When true, renames columns of the DataFrame to pvlib variable names @@ -114,38 +123,48 @@ def get_era5(start, end, latitude, longitude, grid=[0.25, 0.25], ---------- .. [1] `ERA5 hourly data on single levels from 1979 to present ` - .. [2] `How to use the CDS API + .. [2] `ERA5 hourly data on single levels from 1979 to present + ` + .. [3] `How to use the CDS API ` - .. [3] `Climate Data Storage user registration + .. [4] `Climate Data Storage user registration ` """ if cds_client is None: cds_client = cdsapi.Client() # Area is selected by a box made by the four coordinates: [N,W,S,E] - if type(lat) == list: + if type(latitude) == list: area = latitude + longitude else: - area = [lat, lon, lat, lon] + area = [latitude, longitude, latitude+0.001, longitude+0.001] + + cds_client.retrieve(dataset_name, + {'product_type': product_type, + 'format': file_format, + 'variable': variables, + 'date': start.strftime('%Y-%m-%d %H:%M') + '/' \ + + end.strftime('%Y-%m-%d %H:%M'), + 'grid': grid, + 'area': area, + }, + f'ERA5_test_data.{file_format}') - c.retrieve(dataset, - {'product_type': product_type, - 'format': file_format, - 'variable': variables, - 'date': start.strftime('%Y-%m-%d %H:%M') + '/' \ - + end.strftime('%Y-%m-%d %H:%M'), - 'grid': grid, - 'area': area, - }, - f'ERA5_test_data.{file_format}') +# Use simpler variable names, e.g., 2t -# Add grid -# Other product type is 'monthly_averaged_reanalysis' -# Other datasets are: 'reanalysis-era5-single-levels-monthly-means', 'reanalysis-era5-land', 'reanalysis-era5-land-monthly-means' +# %% -# Use simpler variable names, e.g., 2t +start = pd.Timestamp(2020,1,1) +end = pd.Timestamp(2020,1,2) +latitude = 55 +longitude = 10 +get_era5(start, end, latitude, longitude, + dataset_name='reanalysis-era5-single-levels', + product_type='reanalysis', variables=DEFAULT_VARIABLES, + grid=[0.25, 0.25], file_format='netcdf', cds_client=None, + map_variables=True) # %% Example official @@ -163,22 +182,3 @@ def get_era5(start, end, latitude, longitude, grid=[0.25, 0.25], # %% -c = cdsapi.Client() -c.retrieve("reanalysis-era5-single-levels", - {"variable": variables, - "product_type": "reanalysis", - "year": ['2018'], - "month": ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'], - "day": ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31'], - "time": ['00:00', '01:00', '02:00', '03:00', '04:00', '05:00', '06:00', '07:00', '08:00', '09:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00', '19:00', '20:00', '21:00', '22:00', '23:00'], - "format": "grib" - }, - "download.grib") - -# %% - -import pvlib -import pandas as pd -df, meta = pvlib.iotools.get_cams(latitude=10, longitude=55, start=pd.Timestamp(2019,1,1), end=pd.Timestamp(2020,1,1), email='arajen@byg.dtu.dk', time_step='1h') - - From 57eecb58769622ea44d7f4662c9594235bc8386a Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Mon, 26 Jul 2021 22:54:27 -0600 Subject: [PATCH 04/40] Update era5.py --- pvlib/iotools/era5.py | 219 ++++++++++++++++++++++++++---------------- 1 file changed, 134 insertions(+), 85 deletions(-) diff --git a/pvlib/iotools/era5.py b/pvlib/iotools/era5.py index 454b3b5a13..b33c0f8fef 100644 --- a/pvlib/iotools/era5.py +++ b/pvlib/iotools/era5.py @@ -2,32 +2,37 @@ .. codeauthor:: Adam R. Jensen """ -import cdsapi -import pandas as pd - -# %% -# ERA5 vs ERA-Land? - ERA-Land doesn not seem to have BHI, but only GHI -# reanalysis-era5-single-levels vs. reanalsys-era5-land? -# Other parameters: 'total_column_water_vapour', 'surface_net_solar_radiation' -# Variables are also avaiable as integrated values -start = pd.Timestamp('2018-12-31') -end = pd.Timestamp('2018-12-31 23:59') -product_type = 'reanalysis' -latitude = 55 -longitude = 10 -variables = ['mean_surface_downward_short_wave_radiation_flux','mean_surface_downward_short_wave_radiation_flux_clear_sky'] - -# %% -get_era5(start, end, latitude=latitude, longitude=longitude, - variables=variables) - -# %% -# If the getter is only a 'downloader' and does not parse, it should not have map_variables - -# %% - - -DEFAULT_VARIABLES = [ +import requests +import warnings + +try: + import netCDF4 +except ImportError: + class netCDF4: + @staticmethod + def Dataset(*a, **kw): + raise ImportError( + 'Reading ERA5 data requires netCDF4 to be installed.') + +try: + import xarray as xr +except ImportError: + class xarray: + @staticmethod + def open_dataset(*a, **kw): + raise ImportError( + 'Reading ERA5 data requires xarray to be installed.') + +try: + import cdsapi +except ImportError: + class cdsapi: + @staticmethod + def Client(*a, **kw): + raise ImportError( + 'Retrieving ERA5 data requires cdsapi to be installed.') + +ERA5_DEFAULT_VARIABLES = [ '10m_u_component_of_wind', '10m_v_component_of_wind', '2m_temperature', @@ -51,18 +56,28 @@ } -def get_era5(start, end, latitude, longitude, +ERA5_EXTENSIONS = { + 'netcdf': '.nc', + 'grib': '.grib', + } + +ERA5_HOURS = [ + '00:00', '01:00', '02:00', '03:00', '04:00', '05:00', '06:00', '07:00', + '08:00', '09:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', + '16:00', '17:00', '18:00', '19:00', '20:00', '21:00', '22:00', '23:00'] + + +def get_era5(latitude, longitude, start, end, + variables=ERA5_DEFAULT_VARIABLES, dataset_name='reanalysis-era5-single-levels', - product_type='reanalysis', variables=DEFAULT_VARIABLES, - grid=[0.25, 0.25], file_format='netcdf', cds_client=None, - map_variables=True): + product_type='reanalysis', + grid=(0.25, 0.25), local_path=None, file_format='netcdf', + cds_client=None, map_variables=True): """ Retrieve ERA5 reanalysis data from the Copernicus Data Store (CDS). - - [1]_. - Access requires user registration [3]_ and creating a local file with your - personal API key, see [4]_ for instructions. + An overview of ERA5 is given in [1]_. Data is retrieved using the CDSAPI + [3]_. Temporal coverage: 1979 to present Temporal resolution: hourly @@ -73,34 +88,58 @@ def get_era5(start, end, latitude, longitude, Time-stamp: from the previous time stamp and backwards, i.e. end of period For the reanalysis, the accumulation period is over the 1 hour up to the validity date and time. + Hint + ---- + In order to use the this function the package [cdsapi](https://github.com/ecmwf/cdsapi) + needs to be installed [3]_. + + Also, access requires user registration [3]_ and creating a local file with + your personal API key, see [4]_ for instructions. + + Important + --------- + Retrieving data from the CDS data store is significanlty slower than + other solar radiation services. Requests are first queued before being + executed, and the process can easily exceed 20 minutes. + + You can check the status of your api at + https://cds.climate.copernicus.eu/cdsapp#!/yourrequests + + The status of all queued requests can be seen at + https://cds.climate.copernicus.eu/live/queue + Parameters ---------- - start: datetime like + start : datetime like First timestamp of the requested period - end: datetime like + end : datetime like Last timestamp of the requested period latitude: float or list in decimal degrees, between -90 and 90, north is positive (ISO 19115) + If latitude is a list, it should have the format [S, N] and + latitudes within the range are selected according to the grid. longitude : float or list in decimal degrees, between -180 and 180, east is positive (ISO 19115) - dataset_name: str, default: + If longitude is a list, it should have the format [W, E] and + longitudes within the range are selected according to the grid. + variables + dataset_name: str, default: 'reanalysis-era5-single-levels' Name of the dataset. Options are 'reanalysis-era5-single-levels', 'reanalysis-era5-single-levels-monthly-means', 'reanalysis-era5-land', or 'reanalysis-era5-land-monthly-means' product_type: str, {'reanalysis', 'ensemble_members', 'ensemble_mean', 'ensemble_spread'}, default: 'reanalysis' - variables - grid - file_format: {grib, netcdf}, default netcdf + grid : list or tuple, default: (0.25, 0.25) + file_format : {grib, netcdf}, default: netcdf File format of retrieved data. Note NetCDF is experimental. - cds_client: CDS API client object - map_variables: bool, default: True + cds_client: CDS API client object, optional + map_variables : bool, default: True When true, renames columns of the DataFrame to pvlib variable names where applicable. See variable ERA5_VARIABLE_MAP. - - - The returned data DataFrame includes the following fields: + Notes + ----- + The returned data DataFrame includes the following fields by default: ======================== ====== ========================================= Key, mapped key Format Description @@ -129,56 +168,66 @@ def get_era5(start, end, latitude, longitude, ` .. [4] `Climate Data Storage user registration ` - """ + """ # noqa: E501 if cds_client is None: cds_client = cdsapi.Client() # Area is selected by a box made by the four coordinates: [N,W,S,E] if type(latitude) == list: - area = latitude + longitude + area = [latitude[1], longitude[0], latitude[0], longitude[1]] else: - area = [latitude, longitude, latitude+0.001, longitude+0.001] + area = [latitude+0.001, longitude, latitude, longitude+0.001] + + params = { + 'product_type': product_type, + 'format': file_format, + 'variable': variables, + 'date': start.strftime('%Y-%m-%d') + '/' + end.strftime('%Y-%m-%d'), + 'time': ERA5_HOURS, + 'grid': grid, + 'area': area, + } + + # Retrieve path to the file + file_location = cds_client.retrieve(dataset_name, params) + + if file_format not in list(ERA5_EXTENSIONS): + raise ValueError(f"File format must be in {list(ERA5_EXTENSIONS)}") - cds_client.retrieve(dataset_name, - {'product_type': product_type, - 'format': file_format, - 'variable': variables, - 'date': start.strftime('%Y-%m-%d %H:%M') + '/' \ - + end.strftime('%Y-%m-%d %H:%M'), - 'grid': grid, - 'area': area, - }, - f'ERA5_test_data.{file_format}') + # Load file into memory + with requests.get(file_location.location) as res: + if file_format=='netcdf': # open netcdf files using xarray + ds = xr.open_dataset(res.content) -# Use simpler variable names, e.g., 2t + # Save the file locally if local_path has been specified + if local_path is not None: + with open(local_path, 'wb') as f: + f.write(res.content) + if (file_format=='grib') & (local_path is not None): + warnings.warn('Parsing of grib files is not supported.') + ds = xr.open_dataset(local_path, engine='cfgrib') + elif (file_format == 'grib') & (local_path is None): + raise ValueError('local_path must be specified when file format is ' + 'grib.') -# %% + return ds -start = pd.Timestamp(2020,1,1) -end = pd.Timestamp(2020,1,2) -latitude = 55 -longitude = 10 -get_era5(start, end, latitude, longitude, - dataset_name='reanalysis-era5-single-levels', - product_type='reanalysis', variables=DEFAULT_VARIABLES, - grid=[0.25, 0.25], file_format='netcdf', cds_client=None, - map_variables=True) - -# %% Example official - -c = cdsapi.Client() -c.retrieve("reanalysis-era5-single-levels", - {"variable": variables, - "product_type": "reanalysis", - "year": ['2018'], - "month": months, - "day": days, - "time": hours, - "format": "grib" - }, - "download.grib") - -# %% +def read_era5(filename, map_variables=True): + """Read an ERA5 netcdf file. + + Hint + ---- + The ERA5 time stamp convention is to label data periods by the right edge, + e.g., the time stamp 12:00 for hourly data refers to the period from 11.00 + to 12:00. + + """ + # load into memory + #with urlopen(filename) as f: + # ds = xr.open_dataset(f.read()) + + ds = xr.open_dataset(filename) #, chunks=chunks) + return ds From c135481687b37368587def23271c410b6d106d3f Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Mon, 26 Jul 2021 23:37:33 -0600 Subject: [PATCH 05/40] Fix stickler --- pvlib/iotools/era5.py | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/pvlib/iotools/era5.py b/pvlib/iotools/era5.py index b33c0f8fef..ff77388b79 100644 --- a/pvlib/iotools/era5.py +++ b/pvlib/iotools/era5.py @@ -41,8 +41,7 @@ def Client(*a, **kw): 'mean_surface_downward_short_wave_radiation_flux_clear_sky', 'mean_surface_direct_short_wave_radiation_flux', 'mean_surface_direct_short_wave_radiation_flux_clear_sky', - 'mean_top_downward_short_wave_radiation_flux' - ] + 'mean_top_downward_short_wave_radiation_flux'] ERA5_VARIABLE_MAP = { @@ -52,14 +51,12 @@ def Client(*a, **kw): 'mean_surface_downward_short_wave_radiation_flux_clear_sky': 'ghi_clear', 'mean_surface_direct_short_wave_radiation_flux': 'bhi', 'mean_surface_direct_short_wave_radiation_flux_clear_sky': 'bhi_clear', - 'mean_top_downward_short_wave_radiation_flux': 'ghi_extra', - } + 'mean_top_downward_short_wave_radiation_flux': 'ghi_extra'} ERA5_EXTENSIONS = { 'netcdf': '.nc', - 'grib': '.grib', - } + 'grib': '.grib'} ERA5_HOURS = [ '00:00', '01:00', '02:00', '03:00', '04:00', '05:00', '06:00', '07:00', @@ -95,7 +92,7 @@ def get_era5(latitude, longitude, start, end, Also, access requires user registration [3]_ and creating a local file with your personal API key, see [4]_ for instructions. - + Important --------- Retrieving data from the CDS data store is significanlty slower than @@ -104,7 +101,7 @@ def get_era5(latitude, longitude, start, end, You can check the status of your api at https://cds.climate.copernicus.eu/cdsapp#!/yourrequests - + The status of all queued requests can be seen at https://cds.climate.copernicus.eu/live/queue @@ -185,18 +182,17 @@ def get_era5(latitude, longitude, start, end, 'date': start.strftime('%Y-%m-%d') + '/' + end.strftime('%Y-%m-%d'), 'time': ERA5_HOURS, 'grid': grid, - 'area': area, - } + 'area': area} # Retrieve path to the file file_location = cds_client.retrieve(dataset_name, params) - + if file_format not in list(ERA5_EXTENSIONS): raise ValueError(f"File format must be in {list(ERA5_EXTENSIONS)}") # Load file into memory with requests.get(file_location.location) as res: - if file_format=='netcdf': # open netcdf files using xarray + if file_format == 'netcdf': # open netcdf files using xarray ds = xr.open_dataset(res.content) # Save the file locally if local_path has been specified @@ -204,7 +200,7 @@ def get_era5(latitude, longitude, start, end, with open(local_path, 'wb') as f: f.write(res.content) - if (file_format=='grib') & (local_path is not None): + if (file_format == 'grib') & (local_path is not None): warnings.warn('Parsing of grib files is not supported.') ds = xr.open_dataset(local_path, engine='cfgrib') elif (file_format == 'grib') & (local_path is None): @@ -222,12 +218,12 @@ def read_era5(filename, map_variables=True): The ERA5 time stamp convention is to label data periods by the right edge, e.g., the time stamp 12:00 for hourly data refers to the period from 11.00 to 12:00. - + """ # load into memory - #with urlopen(filename) as f: - # ds = xr.open_dataset(f.read()) + # with urlopen(filename) as f: + # ds = xr.open_dataset(f.read()) - ds = xr.open_dataset(filename) #, chunks=chunks) + ds = xr.open_dataset(filename) # chunks=chunks) return ds From f4e9242da6e8d572a2a60c205351839873322f52 Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Sun, 8 Aug 2021 22:30:33 +0200 Subject: [PATCH 06/40] Add xarray and cdsapi to requirements and setup.py --- ci/requirements-py36.yml | 2 ++ ci/requirements-py37.yml | 2 ++ ci/requirements-py38.yml | 2 ++ ci/requirements-py39.yml | 2 ++ setup.py | 2 +- 5 files changed, 9 insertions(+), 1 deletion(-) diff --git a/ci/requirements-py36.yml b/ci/requirements-py36.yml index c49455119f..f5716c4aa4 100644 --- a/ci/requirements-py36.yml +++ b/ci/requirements-py36.yml @@ -1,6 +1,7 @@ name: test_env channels: - defaults + - cdsapi - conda-forge dependencies: - coveralls @@ -27,6 +28,7 @@ dependencies: - shapely # pvfactors dependency - siphon # conda-forge - statsmodels + - xarray - pip: - dataclasses - nrel-pysam>=2.0 diff --git a/ci/requirements-py37.yml b/ci/requirements-py37.yml index 3203b004d1..6c9fe196f6 100644 --- a/ci/requirements-py37.yml +++ b/ci/requirements-py37.yml @@ -1,6 +1,7 @@ name: test_env channels: - defaults + - cdsapi - conda-forge dependencies: - coveralls @@ -27,6 +28,7 @@ dependencies: - shapely # pvfactors dependency - siphon # conda-forge - statsmodels + - xarray - pip: - nrel-pysam>=2.0 - pvfactors==1.4.1 diff --git a/ci/requirements-py38.yml b/ci/requirements-py38.yml index ca3a968335..3d0040b58c 100644 --- a/ci/requirements-py38.yml +++ b/ci/requirements-py38.yml @@ -1,6 +1,7 @@ name: test_env channels: - defaults + - cdsapi - conda-forge dependencies: - coveralls @@ -27,6 +28,7 @@ dependencies: - shapely # pvfactors dependency - siphon # conda-forge - statsmodels + - xarray - pip: - nrel-pysam>=2.0 - pvfactors==1.4.1 diff --git a/ci/requirements-py39.yml b/ci/requirements-py39.yml index 16c6449158..069b5dc026 100644 --- a/ci/requirements-py39.yml +++ b/ci/requirements-py39.yml @@ -1,6 +1,7 @@ name: test_env channels: - defaults + - cdsapi - conda-forge dependencies: - coveralls @@ -27,6 +28,7 @@ dependencies: - shapely # pvfactors dependency # - siphon # conda-forge - statsmodels + - xarray - pip: # - nrel-pysam>=2.0 # install error on windows - pvfactors==1.4.1 diff --git a/setup.py b/setup.py index 216dc34a28..21b2606273 100755 --- a/setup.py +++ b/setup.py @@ -54,7 +54,7 @@ EXTRAS_REQUIRE = { 'optional': ['cython', 'ephem', 'netcdf4', 'nrel-pysam', 'numba', 'pvfactors', 'siphon', 'statsmodels', 'tables', - 'cftime >= 1.1.1'], + 'cftime >= 1.1.1', 'xarray', 'cdsapi'], 'doc': ['ipython', 'matplotlib', 'sphinx == 3.1.2', 'sphinx_rtd_theme==0.5.0', 'sphinx-gallery', 'docutils == 0.15.2', 'pillow', 'netcdf4', 'siphon', 'tables', From af3067e4798fca25067d8314df03e77b611d9fcc Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Sun, 8 Aug 2021 22:30:55 +0200 Subject: [PATCH 07/40] Remove grib support and update variable_map --- pvlib/iotools/era5.py | 172 +++++++++++++++++++++--------------------- 1 file changed, 87 insertions(+), 85 deletions(-) diff --git a/pvlib/iotools/era5.py b/pvlib/iotools/era5.py index ff77388b79..33346be9a6 100644 --- a/pvlib/iotools/era5.py +++ b/pvlib/iotools/era5.py @@ -3,8 +3,8 @@ """ import requests -import warnings +# Can probably remove the netCDF4 dependency try: import netCDF4 except ImportError: @@ -32,27 +32,33 @@ def Client(*a, **kw): raise ImportError( 'Retrieving ERA5 data requires cdsapi to be installed.') -ERA5_DEFAULT_VARIABLES = [ - '10m_u_component_of_wind', - '10m_v_component_of_wind', - '2m_temperature', - 'surface_pressure', - 'mean_surface_downward_short_wave_radiation_flux', - 'mean_surface_downward_short_wave_radiation_flux_clear_sky', - 'mean_surface_direct_short_wave_radiation_flux', - 'mean_surface_direct_short_wave_radiation_flux_clear_sky', - 'mean_top_downward_short_wave_radiation_flux'] +CDSAPI_URL = 'https://cds.climate.copernicus.eu/api/v2' +ERA5_DEFAULT_VARIABLES = [ + '2m_temperature', # t2m + '10m_u_component_of_wind', # u10 + '10m_v_component_of_wind', # v10 + 'surface_pressure', # sp + 'mean_surface_downward_short_wave_radiation_flux', # msdwswrf + 'mean_surface_downward_short_wave_radiation_flux_clear_sky', # msdwswrfcs + 'mean_surface_direct_short_wave_radiation_flux', # msdrswrf + 'mean_surface_direct_short_wave_radiation_flux_clear_sky', # msdrswrfcs + ] + +# The returned data uses short-names, whereas the request requires CDS variable +# names - passing short-names results in an "Ambiguous" error being raised ERA5_VARIABLE_MAP = { - '2m_temperature': 'temp_air', - 'surface_pressure': 'pressure', - 'mean_surface_downward_short_wave_radiation_flux': 'ghi', - 'mean_surface_downward_short_wave_radiation_flux_clear_sky': 'ghi_clear', - 'mean_surface_direct_short_wave_radiation_flux': 'bhi', - 'mean_surface_direct_short_wave_radiation_flux_clear_sky': 'bhi_clear', - 'mean_top_downward_short_wave_radiation_flux': 'ghi_extra'} - + 't2m': 'temp_air', + 'd2m': 'temp_dew', + 'sp': 'pressure', + 'msdwswrf': 'ghi', + 'msdwswrfcs': 'ghi_clear', + 'msdwlwrf': 'lwd', + 'msdwlwrfcs': 'lwd_clear', + 'msdrswrf': 'bhi', # check this + 'msdrswrfcs': 'bhi_clear', # check this + 'mtdwswrf': 'ghi_extra'} ERA5_EXTENSIONS = { 'netcdf': '.nc', @@ -64,11 +70,10 @@ def Client(*a, **kw): '16:00', '17:00', '18:00', '19:00', '20:00', '21:00', '22:00', '23:00'] -def get_era5(latitude, longitude, start, end, +def get_era5(latitude, longitude, start, end, api_key=None, variables=ERA5_DEFAULT_VARIABLES, dataset_name='reanalysis-era5-single-levels', - product_type='reanalysis', - grid=(0.25, 0.25), local_path=None, file_format='netcdf', + product_type='reanalysis', grid=(0.25, 0.25), local_path=None, cds_client=None, map_variables=True): """ Retrieve ERA5 reanalysis data from the Copernicus Data Store (CDS). @@ -80,86 +85,83 @@ def get_era5(latitude, longitude, start, end, Temporal resolution: hourly Spatial resolution: 0.25° by 0.25° Spatial coverage: global - Projection: regular latitude-longitude grid Time-stamp: from the previous time stamp and backwards, i.e. end of period For the reanalysis, the accumulation period is over the 1 hour up to the validity date and time. + Note the variables specified should be the variable names used by in the + CDS. The returned data contains the short-name versions of the variables. + See [4]_ for a list of variables names and units. + Hint ---- - In order to use the this function the package [cdsapi](https://github.com/ecmwf/cdsapi) - needs to be installed [3]_. - - Also, access requires user registration [3]_ and creating a local file with - your personal API key, see [4]_ for instructions. - - Important - --------- - Retrieving data from the CDS data store is significanlty slower than - other solar radiation services. Requests are first queued before being - executed, and the process can easily exceed 20 minutes. + In order to use the this function the package + [cdsapi](https://github.com/ecmwf/cdsapi) needs to be installed [3]_. - You can check the status of your api at - https://cds.climate.copernicus.eu/cdsapp#!/yourrequests + Access requires user registration [3]_. The obtaining API key can either be + passed directly to the function or be saved in a local file as described in + [4]_. - The status of all queued requests can be seen at - https://cds.climate.copernicus.eu/live/queue + You can check the status of your requests + [here](https://cds.climate.copernicus.eu/cdsapp#!/yourrequests) and the + status of all queued requests + [here](https://cds.climate.copernicus.eu/live/queue), Parameters ---------- - start : datetime like - First timestamp of the requested period - end : datetime like - Last timestamp of the requested period latitude: float or list in decimal degrees, between -90 and 90, north is positive (ISO 19115) If latitude is a list, it should have the format [S, N] and latitudes within the range are selected according to the grid. - longitude : float or list + longitude: float or list in decimal degrees, between -180 and 180, east is positive (ISO 19115) If longitude is a list, it should have the format [W, E] and longitudes within the range are selected according to the grid. - variables - dataset_name: str, default: 'reanalysis-era5-single-levels' - Name of the dataset. Options are 'reanalysis-era5-single-levels', - 'reanalysis-era5-single-levels-monthly-means', - 'reanalysis-era5-land', or 'reanalysis-era5-land-monthly-means' + start: datetime like + First day of the requested period + end: datetime like + Last day of the requested period + api_key: str, optional + Personal API key for the CDS + variables: list, default: ERA5_DEFAULT_VARIABLES + List of variables to retrieve (requires CDS variable names) + dataset: str, default: {'reanalysis-era5-single-levels', 'reanalysis-era5-land'} + Name of the dataset product_type: str, {'reanalysis', 'ensemble_members', 'ensemble_mean', 'ensemble_spread'}, default: 'reanalysis' - grid : list or tuple, default: (0.25, 0.25) - file_format : {grib, netcdf}, default: netcdf - File format of retrieved data. Note NetCDF is experimental. + ERA5 product type + grid: list or tuple, default: (0.25, 0.25) + User specified grid resolution cds_client: CDS API client object, optional + CDS API client map_variables : bool, default: True When true, renames columns of the DataFrame to pvlib variable names where applicable. See variable ERA5_VARIABLE_MAP. Notes ----- - The returned data DataFrame includes the following fields by default: + The returned data includes the following fields by default: ======================== ====== ========================================= Key, mapped key Format Description ======================== ====== ========================================= **Mapped field names are returned when the map_variables argument is True** --------------------------------------------------------------------------- - 10m_u_component_of_wind float Horizontal air speed towards the east, at a height of 10 m [m/s] - 10m_v_component_of_wind float Horizontal air speed towards the north, at a height of 10 m [m/s] - Clear sky GHI, ghi_clear float Clear sky global radiation on horizontal - 2m_temperature float Air temperature at 2m above the ground (K) - surface_pressure float Atmospheric pressure at the ground (Pa) - toa_incident_solar_radiation float Horizontal solar irradiation at top of atmosphere (J/m^2) - clear_sky_direct_solar_radiation_at_surface float Clear-sky direct horizontal irradiance (J/m^2) - surface_solar_radiation_downward_clear_sky float Clear-sky global iradiation (J/m^2) - surface_solar_radiation_downwards float Global horizontal irradiation (GHI) (J/m^2) - total_sky_direct_solar_radiation_at_surface float Direct/beam horizontal irradiation (BHI) (J/m^2) + 2tm, temp_air float Air temperature at 2 m above ground (K) + u10 float Horizontal air speed towards east at 10 m [m/s] + v10 float Horizontal air speed towards north at 10 m [m/s] + sp, pressure float Atmospheric pressure at the ground (Pa) + msdwswrf, ghi float Mean surface downward short-wave radiation flux [W/m^2] + msdwswrfcs, ghi_clear float Mean surface downward short-wave radiation flux, clear sky [W/m^2] + msdrswrf, bhi float Mean surface direct short-wave radiation flux [W/m^2] + msdrswrfcs, bhi_clear float Mean surface direct short-wave radiation flux, clear sky [W/m^2] ======================== ====== ========================================= References ---------- .. [1] `ERA5 hourly data on single levels from 1979 to present ` - .. [2] `ERA5 hourly data on single levels from 1979 to present + .. [2] `ERA5: data documentation ` .. [3] `How to use the CDS API ` @@ -167,17 +169,18 @@ def get_era5(latitude, longitude, start, end, ` """ # noqa: E501 if cds_client is None: - cds_client = cdsapi.Client() + cds_client = cdsapi.Client(url=CDSAPI_URL, key=api_key) - # Area is selected by a box made by the four coordinates: [N,W,S,E] + # Area is selected by a box made by the four coordinates: [N, W, S, E] if type(latitude) == list: area = [latitude[1], longitude[0], latitude[0], longitude[1]] else: - area = [latitude+0.001, longitude, latitude, longitude+0.001] + area = [latitude+0.005, longitude-0.005, + latitude-0.005, longitude+0.005] params = { 'product_type': product_type, - 'format': file_format, + 'format': 'netcdf', 'variable': variables, 'date': start.strftime('%Y-%m-%d') + '/' + end.strftime('%Y-%m-%d'), 'time': ERA5_HOURS, @@ -187,27 +190,15 @@ def get_era5(latitude, longitude, start, end, # Retrieve path to the file file_location = cds_client.retrieve(dataset_name, params) - if file_format not in list(ERA5_EXTENSIONS): - raise ValueError(f"File format must be in {list(ERA5_EXTENSIONS)}") - # Load file into memory with requests.get(file_location.location) as res: - if file_format == 'netcdf': # open netcdf files using xarray - ds = xr.open_dataset(res.content) # Save the file locally if local_path has been specified if local_path is not None: with open(local_path, 'wb') as f: f.write(res.content) - if (file_format == 'grib') & (local_path is not None): - warnings.warn('Parsing of grib files is not supported.') - ds = xr.open_dataset(local_path, engine='cfgrib') - elif (file_format == 'grib') & (local_path is None): - raise ValueError('local_path must be specified when file format is ' - 'grib.') - - return ds + return read_era5(res.content, map_variables=map_variables) def read_era5(filename, map_variables=True): @@ -219,11 +210,22 @@ def read_era5(filename, map_variables=True): e.g., the time stamp 12:00 for hourly data refers to the period from 11.00 to 12:00. + + If the file contains only one location, then a DataFrame is returned, + otherwise a xarray dataset is returned. + """ - # load into memory - # with urlopen(filename) as f: - # ds = xr.open_dataset(f.read()) + ds = xr.open_dataset(filename) + + metadata = ds.attrs - ds = xr.open_dataset(filename) # chunks=chunks) + if map_variables: + # Renaming of xarray datasets throws an error if keys are missing + ds = ds.rename_vars( + {k: v for k, v in ERA5_VARIABLE_MAP.items() if k in list(ds)}) - return ds + if (ds['latitude'].size == 1) & (ds['longitude'].size == 1): + data = ds.to_dataframe().droplevel(['latitude','longitude']) + return data, metadata + else: + return ds, metadata From b2c400cdf74d8c3142be9305201fd8d35846fb8c Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Sun, 8 Aug 2021 22:43:51 +0200 Subject: [PATCH 08/40] Fix stickler --- ci/requirements-py36.yml | 2 +- ci/requirements-py37.yml | 2 +- ci/requirements-py38.yml | 2 +- ci/requirements-py39.yml | 2 +- pvlib/iotools/era5.py | 18 ++++-------------- 5 files changed, 8 insertions(+), 18 deletions(-) diff --git a/ci/requirements-py36.yml b/ci/requirements-py36.yml index f5716c4aa4..3422fb7ccb 100644 --- a/ci/requirements-py36.yml +++ b/ci/requirements-py36.yml @@ -1,9 +1,9 @@ name: test_env channels: - defaults - - cdsapi - conda-forge dependencies: + - cdsapi - coveralls - cython - ephem diff --git a/ci/requirements-py37.yml b/ci/requirements-py37.yml index 6c9fe196f6..3af5c5d849 100644 --- a/ci/requirements-py37.yml +++ b/ci/requirements-py37.yml @@ -1,9 +1,9 @@ name: test_env channels: - defaults - - cdsapi - conda-forge dependencies: + - cdsapi - coveralls - cython - ephem diff --git a/ci/requirements-py38.yml b/ci/requirements-py38.yml index 3d0040b58c..36eee3ab9c 100644 --- a/ci/requirements-py38.yml +++ b/ci/requirements-py38.yml @@ -1,9 +1,9 @@ name: test_env channels: - defaults - - cdsapi - conda-forge dependencies: + - cdsapi - coveralls - cython - ephem diff --git a/ci/requirements-py39.yml b/ci/requirements-py39.yml index 069b5dc026..76df1ec957 100644 --- a/ci/requirements-py39.yml +++ b/ci/requirements-py39.yml @@ -1,9 +1,9 @@ name: test_env channels: - defaults - - cdsapi - conda-forge dependencies: + - cdsapi - coveralls - cython - ephem diff --git a/pvlib/iotools/era5.py b/pvlib/iotools/era5.py index 33346be9a6..deba2c2a55 100644 --- a/pvlib/iotools/era5.py +++ b/pvlib/iotools/era5.py @@ -4,16 +4,6 @@ import requests -# Can probably remove the netCDF4 dependency -try: - import netCDF4 -except ImportError: - class netCDF4: - @staticmethod - def Dataset(*a, **kw): - raise ImportError( - 'Reading ERA5 data requires netCDF4 to be installed.') - try: import xarray as xr except ImportError: @@ -42,9 +32,9 @@ def Client(*a, **kw): 'surface_pressure', # sp 'mean_surface_downward_short_wave_radiation_flux', # msdwswrf 'mean_surface_downward_short_wave_radiation_flux_clear_sky', # msdwswrfcs - 'mean_surface_direct_short_wave_radiation_flux', # msdrswrf + 'mean_surface_direct_short_wave_radiation_flux', # msdrswrf 'mean_surface_direct_short_wave_radiation_flux_clear_sky', # msdrswrfcs - ] +] # The returned data uses short-names, whereas the request requires CDS variable # names - passing short-names results in an "Ambiguous" error being raised @@ -91,7 +81,7 @@ def get_era5(latitude, longitude, start, end, api_key=None, Note the variables specified should be the variable names used by in the CDS. The returned data contains the short-name versions of the variables. - See [4]_ for a list of variables names and units. + See [4]_ for a list of variables names and units. Hint ---- @@ -225,7 +215,7 @@ def read_era5(filename, map_variables=True): {k: v for k, v in ERA5_VARIABLE_MAP.items() if k in list(ds)}) if (ds['latitude'].size == 1) & (ds['longitude'].size == 1): - data = ds.to_dataframe().droplevel(['latitude','longitude']) + data = ds.to_dataframe().droplevel(['latitude', 'longitude']) return data, metadata else: return ds, metadata From bb62d7f4f43fe3a8f5689367d6bc3a9b58a25761 Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Mon, 9 Aug 2021 11:40:26 +0200 Subject: [PATCH 09/40] Add era5 to api.rst, __init__, and whatsnewfile --- docs/sphinx/source/api.rst | 2 ++ docs/sphinx/source/whatsnew/v0.9.0.rst | 4 ++++ pvlib/iotools/__init__.py | 2 ++ 3 files changed, 8 insertions(+) diff --git a/docs/sphinx/source/api.rst b/docs/sphinx/source/api.rst index 0e5438a7fc..879ad94659 100644 --- a/docs/sphinx/source/api.rst +++ b/docs/sphinx/source/api.rst @@ -491,6 +491,8 @@ of sources and file formats relevant to solar energy modeling. iotools.get_cams iotools.read_cams iotools.parse_cams + iotools.get_era5 + iotools.read_era5 A :py:class:`~pvlib.location.Location` object may be created from metadata in some files. diff --git a/docs/sphinx/source/whatsnew/v0.9.0.rst b/docs/sphinx/source/whatsnew/v0.9.0.rst index 6771e5fb42..2286961085 100644 --- a/docs/sphinx/source/whatsnew/v0.9.0.rst +++ b/docs/sphinx/source/whatsnew/v0.9.0.rst @@ -103,6 +103,10 @@ Deprecations Enhancements ~~~~~~~~~~~~ +* Add :func:`~pvlib.iotools.get_era5` and + :func:`~pvlib.iotools.read_era5` for retrieving and reading + ERA5 reanalysis netcdf files from the Climate Data Store (CDS) + files. (:pull:`1264`) * Add :func:`~pvlib.iotools.read_bsrn` for reading BSRN solar radiation data files. (:pull:`1145`, :issue:`1015`) * Add :func:`~pvlib.iotools.get_cams`, diff --git a/pvlib/iotools/__init__.py b/pvlib/iotools/__init__.py index b717c801ca..b56c13cd13 100644 --- a/pvlib/iotools/__init__.py +++ b/pvlib/iotools/__init__.py @@ -17,3 +17,5 @@ from pvlib.iotools.sodapro import get_cams # noqa: F401 from pvlib.iotools.sodapro import read_cams # noqa: F401 from pvlib.iotools.sodapro import parse_cams # noqa: F401 +from pvlib.iotools.sodapro import get_era5 # noqa: F401 +from pvlib.iotools.sodapro import parse_era5 # noqa: F401 From 9f6b15fb3c81590672a18db34b2f0dc97f7c6c14 Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Mon, 9 Aug 2021 11:54:40 +0200 Subject: [PATCH 10/40] Fix error in __init__.py --- pvlib/iotools/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pvlib/iotools/__init__.py b/pvlib/iotools/__init__.py index b56c13cd13..a0d1e4b437 100644 --- a/pvlib/iotools/__init__.py +++ b/pvlib/iotools/__init__.py @@ -17,5 +17,5 @@ from pvlib.iotools.sodapro import get_cams # noqa: F401 from pvlib.iotools.sodapro import read_cams # noqa: F401 from pvlib.iotools.sodapro import parse_cams # noqa: F401 -from pvlib.iotools.sodapro import get_era5 # noqa: F401 -from pvlib.iotools.sodapro import parse_era5 # noqa: F401 +from pvlib.iotools.era5 import get_era5 # noqa: F401 +from pvlib.iotools.era5 import parse_era5 # noqa: F401 From 9a22c04a0f0adb85018add2e9ebed5415971ac7e Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Mon, 9 Aug 2021 11:56:59 +0200 Subject: [PATCH 11/40] Change parse to read in __init__.py --- pvlib/iotools/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pvlib/iotools/__init__.py b/pvlib/iotools/__init__.py index a0d1e4b437..cfa92d1968 100644 --- a/pvlib/iotools/__init__.py +++ b/pvlib/iotools/__init__.py @@ -18,4 +18,4 @@ from pvlib.iotools.sodapro import read_cams # noqa: F401 from pvlib.iotools.sodapro import parse_cams # noqa: F401 from pvlib.iotools.era5 import get_era5 # noqa: F401 -from pvlib.iotools.era5 import parse_era5 # noqa: F401 +from pvlib.iotools.era5 import read_era5 # noqa: F401 From 21bedd1c0962c52ab3f8d4c0ed3ba8de90e35e68 Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Mon, 9 Aug 2021 12:16:42 +0200 Subject: [PATCH 12/40] Update get_era5 documentation --- pvlib/iotools/era5.py | 45 ++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/pvlib/iotools/era5.py b/pvlib/iotools/era5.py index deba2c2a55..91fdc31077 100644 --- a/pvlib/iotools/era5.py +++ b/pvlib/iotools/era5.py @@ -68,43 +68,43 @@ def get_era5(latitude, longitude, start, end, api_key=None, """ Retrieve ERA5 reanalysis data from the Copernicus Data Store (CDS). - An overview of ERA5 is given in [1]_. Data is retrieved using the CDSAPI - [3]_. + An overview of ERA5 is given in [1]_ and [2]_. Data is retrieved using the + CDSAPI [3]_. - Temporal coverage: 1979 to present - Temporal resolution: hourly - Spatial resolution: 0.25° by 0.25° - Spatial coverage: global + * Temporal coverage: 1979 to present + * Temporal resolution: hourly + * Spatial resolution: 0.25° by 0.25° + * Spatial coverage: global Time-stamp: from the previous time stamp and backwards, i.e. end of period For the reanalysis, the accumulation period is over the 1 hour up to the validity date and time. - Note the variables specified should be the variable names used by in the - CDS. The returned data contains the short-name versions of the variables. - See [4]_ for a list of variables names and units. + Variables should be specified according to the naming convention used by + the CDS. The returned data contains the short-name versions of the + variables. See [4]_ for a list of variables names and units. Hint ---- In order to use the this function the package - [cdsapi](https://github.com/ecmwf/cdsapi) needs to be installed [3]_. + `cdsapi `_ needs to be installed [3]_. Access requires user registration [3]_. The obtaining API key can either be passed directly to the function or be saved in a local file as described in [4]_. You can check the status of your requests - [here](https://cds.climate.copernicus.eu/cdsapp#!/yourrequests) and the + `here `_ and the status of all queued requests - [here](https://cds.climate.copernicus.eu/live/queue), + `here `_, Parameters ---------- latitude: float or list - in decimal degrees, between -90 and 90, north is positive (ISO 19115) + in decimal degrees, between -90 and 90, north is positive (ISO 19115). If latitude is a list, it should have the format [S, N] and latitudes within the range are selected according to the grid. longitude: float or list - in decimal degrees, between -180 and 180, east is positive (ISO 19115) + in decimal degrees, between -180 and 180, east is positive (ISO 19115). If longitude is a list, it should have the format [W, E] and longitudes within the range are selected according to the grid. start: datetime like @@ -114,11 +114,12 @@ def get_era5(latitude, longitude, start, end, api_key=None, api_key: str, optional Personal API key for the CDS variables: list, default: ERA5_DEFAULT_VARIABLES - List of variables to retrieve (requires CDS variable names) - dataset: str, default: {'reanalysis-era5-single-levels', 'reanalysis-era5-land'} - Name of the dataset + List of variables to retrieve (according to CDS naming convention) + dataset: str, default: {'reanalysis-era5-single-levels', + 'reanalysis-era5-land'} + Name of the dataset to retrieve the variables from product_type: str, {'reanalysis', 'ensemble_members', 'ensemble_mean', - 'ensemble_spread'}, default: 'reanalysis' + 'ensemble_spread'}, default: 'reanalysis' ERA5 product type grid: list or tuple, default: (0.25, 0.25) User specified grid resolution @@ -150,13 +151,13 @@ def get_era5(latitude, longitude, start, end, api_key=None, References ---------- .. [1] `ERA5 hourly data on single levels from 1979 to present - ` + `_ .. [2] `ERA5: data documentation - ` + `_ .. [3] `How to use the CDS API - ` + `_ .. [4] `Climate Data Storage user registration - ` + `_ """ # noqa: E501 if cds_client is None: cds_client = cdsapi.Client(url=CDSAPI_URL, key=api_key) From 3422ddf151f6f4371c520ccfdd6b85119cb07d38 Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Wed, 11 Aug 2021 13:20:01 +0200 Subject: [PATCH 13/40] Improve docs and use open_mfdataset in read_era5 --- pvlib/iotools/era5.py | 100 ++++++++++++++++++++++++++++-------------- 1 file changed, 68 insertions(+), 32 deletions(-) diff --git a/pvlib/iotools/era5.py b/pvlib/iotools/era5.py index 91fdc31077..8dd520c13a 100644 --- a/pvlib/iotools/era5.py +++ b/pvlib/iotools/era5.py @@ -1,6 +1,8 @@ """Functions to retreive and read ERA5 data from the CDS. .. codeauthor:: Adam R. Jensen """ +# The functions only support single-level 2D data and not 3D / pressure-level +# data. Also, monthly datasets and grib files are no supported. import requests @@ -25,6 +27,9 @@ def Client(*a, **kw): CDSAPI_URL = 'https://cds.climate.copernicus.eu/api/v2' +# The returned data uses shortNames, whereas the request requires variable +# names according to the CDS convention - passing shortNames results in an +# "Ambiguous" error being raised ERA5_DEFAULT_VARIABLES = [ '2m_temperature', # t2m '10m_u_component_of_wind', # u10 @@ -36,8 +41,6 @@ def Client(*a, **kw): 'mean_surface_direct_short_wave_radiation_flux_clear_sky', # msdrswrfcs ] -# The returned data uses short-names, whereas the request requires CDS variable -# names - passing short-names results in an "Ambiguous" error being raised ERA5_VARIABLE_MAP = { 't2m': 'temp_air', 'd2m': 'temp_dew', @@ -46,14 +49,10 @@ def Client(*a, **kw): 'msdwswrfcs': 'ghi_clear', 'msdwlwrf': 'lwd', 'msdwlwrfcs': 'lwd_clear', - 'msdrswrf': 'bhi', # check this - 'msdrswrfcs': 'bhi_clear', # check this + 'msdrswrf': 'bhi', + 'msdrswrfcs': 'bhi_clear', 'mtdwswrf': 'ghi_extra'} -ERA5_EXTENSIONS = { - 'netcdf': '.nc', - 'grib': '.grib'} - ERA5_HOURS = [ '00:00', '01:00', '02:00', '03:00', '04:00', '05:00', '06:00', '07:00', '08:00', '09:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', @@ -63,39 +62,39 @@ def Client(*a, **kw): def get_era5(latitude, longitude, start, end, api_key=None, variables=ERA5_DEFAULT_VARIABLES, dataset_name='reanalysis-era5-single-levels', - product_type='reanalysis', grid=(0.25, 0.25), local_path=None, + product_type='reanalysis', grid=(0.25, 0.25), local_filename=None, cds_client=None, map_variables=True): """ Retrieve ERA5 reanalysis data from the Copernicus Data Store (CDS). - An overview of ERA5 is given in [1]_ and [2]_. Data is retrieved using the - CDSAPI [3]_. - * Temporal coverage: 1979 to present * Temporal resolution: hourly * Spatial resolution: 0.25° by 0.25° * Spatial coverage: global + An overview of ERA5 is given in [1]_ and [2]_. Data is retrieved using the + CDSAPI [3]_. + Time-stamp: from the previous time stamp and backwards, i.e. end of period - For the reanalysis, the accumulation period is over the 1 hour up to the validity date and time. + For the reanalysis, the accumulation period is over the 1 hour up to the + validity date and time. Variables should be specified according to the naming convention used by the CDS. The returned data contains the short-name versions of the - variables. See [4]_ for a list of variables names and units. + variables. See [2]_ for a list of variables names and units. Hint ---- - In order to use the this function the package - `cdsapi `_ needs to be installed [3]_. + In order to use the this function the package cdsapi [5]__ needs to be + installed [3]_. The CDSAPI keywords are described in [6]_. - Access requires user registration [3]_. The obtaining API key can either be - passed directly to the function or be saved in a local file as described in - [4]_. + Access requires user registration, see [4]_. The obtaining API key can + either be passed directly to the function or be saved in a local file as + described in [3]_. - You can check the status of your requests - `here `_ and the - status of all queued requests - `here `_, + It is possible to check your + `request status `_ + and the `status of all queued requests `_. Parameters ---------- @@ -123,20 +122,22 @@ def get_era5(latitude, longitude, start, end, api_key=None, ERA5 product type grid: list or tuple, default: (0.25, 0.25) User specified grid resolution + local_filename: str or path-like, optional + Filename of where to save data. Should have ".nc" extension. cds_client: CDS API client object, optional CDS API client map_variables : bool, default: True When true, renames columns of the DataFrame to pvlib variable names where applicable. See variable ERA5_VARIABLE_MAP. - Notes + Notes # Requirements and user registration ----- The returned data includes the following fields by default: ======================== ====== ========================================= Key, mapped key Format Description ======================== ====== ========================================= - **Mapped field names are returned when the map_variables argument is True** + *Mapped field names are returned when the map_variables argument is True* --------------------------------------------------------------------------- 2tm, temp_air float Air temperature at 2 m above ground (K) u10 float Horizontal air speed towards east at 10 m [m/s] @@ -148,16 +149,29 @@ def get_era5(latitude, longitude, start, end, api_key=None, msdrswrfcs, bhi_clear float Mean surface direct short-wave radiation flux, clear sky [W/m^2] ======================== ====== ========================================= + Returns + ------- + data: DataFrame + ERA5 timeseries data, fields depend on the requested data. data is a + pandas DataFrame if a single latitude and longitude is requested and + an xarray DataSet for multi-location requests. + metadata: dict + metadata for the time-series + References ---------- .. [1] `ERA5 hourly data on single levels from 1979 to present `_ - .. [2] `ERA5: data documentation + .. [2] `ERA5 data documentation `_ .. [3] `How to use the CDS API `_ .. [4] `Climate Data Storage user registration `_ + .. [5] `cdsapi source code + `_ + .. [6] `Climate Data Store (CDS) API Keywords + `_ """ # noqa: E501 if cds_client is None: cds_client = cdsapi.Client(url=CDSAPI_URL, key=api_key) @@ -185,8 +199,8 @@ def get_era5(latitude, longitude, start, end, api_key=None, with requests.get(file_location.location) as res: # Save the file locally if local_path has been specified - if local_path is not None: - with open(local_path, 'wb') as f: + if local_filename is not None: + with open(local_filename, 'wb') as f: f.write(res.content) return read_era5(res.content, map_variables=map_variables) @@ -195,18 +209,40 @@ def get_era5(latitude, longitude, start, end, api_key=None, def read_era5(filename, map_variables=True): """Read an ERA5 netcdf file. + Parameters + ---------- + filename: str or path-like or list + Filename of a netcdf file containing ERA5 data or list of filenames. + map_variables : bool, default: True + When true, renames columns of the DataFrame to pvlib variable names + where applicable. See variable ERA5_VARIABLE_MAP. + Hint ---- The ERA5 time stamp convention is to label data periods by the right edge, e.g., the time stamp 12:00 for hourly data refers to the period from 11.00 to 12:00. + Returns + ------- + data: DataFrame + ERA5 timeseries data, fields depend on the requested data. A pandas + DataFrame is returned if the file contains a single location and + otherwise an xarray DataSet is returned. + metadata: dict + metadata for the time-series - If the file contains only one location, then a DataFrame is returned, - otherwise a xarray dataset is returned. - + References + ---------- + .. [1] `ERA5 hourly data on single levels from 1979 to present + `_ + .. [2] `ERA5 data documentation + `_ """ - ds = xr.open_dataset(filename) + if isinstance(filename, (list, tuple)): # open multiple-files (mf) + ds = xr.open_mfdataset(filename) + else: + ds = xr.open_dataset(filename) metadata = ds.attrs From 545bafaece023e050b82017290d44b12d620d59f Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Wed, 11 Aug 2021 13:20:32 +0200 Subject: [PATCH 14/40] Coverage for ERA5 incl. test file --- pvlib/data/era5_testfile.nc | Bin 0 -> 178676 bytes pvlib/tests/conftest.py | 10 +++++ pvlib/tests/iotools/test_era5.py | 71 +++++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+) create mode 100644 pvlib/data/era5_testfile.nc create mode 100644 pvlib/tests/iotools/test_era5.py diff --git a/pvlib/data/era5_testfile.nc b/pvlib/data/era5_testfile.nc new file mode 100644 index 0000000000000000000000000000000000000000..484d7b159a1d3564707f01f2eafb9bceade0cbca GIT binary patch literal 178676 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�mUz@ZsGQfX__s-DZcRRy_yaQfs%JF{f47*Yd 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 Date: Wed, 11 Aug 2021 13:20:50 +0200 Subject: [PATCH 15/40] Export CDSAPI_KEY in conda_linux.yml --- ci/azure/conda_linux.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/ci/azure/conda_linux.yml b/ci/azure/conda_linux.yml index 3bf8215cc4..2ebbda2243 100644 --- a/ci/azure/conda_linux.yml +++ b/ci/azure/conda_linux.yml @@ -40,6 +40,7 @@ jobs: export NREL_API_KEY=$(nrelApiKey) export BSRN_FTP_USERNAME=$(BSRN_FTP_USERNAME) export BSRN_FTP_PASSWORD=$(BSRN_FTP_PASSWORD) + export CDSAPI_KEY=$(CDSAPI_KEY) pytest pvlib --remote-data --junitxml=junit/test-results.xml --cov --cov-report=xml --cov-report=html displayName: 'pytest' - task: PublishTestResults@2 From 041732f08a6a420e19e7b07e4a91d0c13a29c814 Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Wed, 11 Aug 2021 13:50:28 +0200 Subject: [PATCH 16/40] Fix stickler --- pvlib/iotools/era5.py | 2 +- pvlib/tests/iotools/test_era5.py | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pvlib/iotools/era5.py b/pvlib/iotools/era5.py index 8dd520c13a..30050ac92d 100644 --- a/pvlib/iotools/era5.py +++ b/pvlib/iotools/era5.py @@ -9,7 +9,7 @@ try: import xarray as xr except ImportError: - class xarray: + class xr: @staticmethod def open_dataset(*a, **kw): raise ImportError( diff --git a/pvlib/tests/iotools/test_era5.py b/pvlib/tests/iotools/test_era5.py index 633a483cb6..8a841fcce4 100644 --- a/pvlib/tests/iotools/test_era5.py +++ b/pvlib/tests/iotools/test_era5.py @@ -38,7 +38,7 @@ def expected_columns_mapped(): 'bhi_clear'] -def test_read_era5_variable(expected_index, expected_columns): +def test_read_era5(expected_index, expected_columns): data, meta = read_era5(DATA_DIR / 'era5_testfile.nc', map_variables=False) assert (expected_columns == data.columns).all() assert_index_equal(data.index, expected_index) @@ -50,6 +50,7 @@ def test_read_era5_variable_mapped(expected_index, expected_columns_mapped): assert_index_equal(data.index, expected_index) assert data.notna().all().all() + @requires_cds_credentials @pytest.mark.remote_data @pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) @@ -57,14 +58,13 @@ def test_get_era5(cds_api_key, expected_index): data, meta = get_era5( latitude=55.7, longitude=12.5, - start=pd.Timestamp(2020,1,1), - end=pd.Timestamp(2020,1,1), + start=pd.Timestamp(2020, 1, 1), + end=pd.Timestamp(2020, 1, 1), variables=['mean_surface_downward_short_wave_radiation_flux_clear_sky', '2m_temperature'], api_key=cds_api_key, local_filename='era5_test_data.nc', # save file - map_variables=True, - ) + map_variables=True) assert 'temp_air' in data.columns assert 'ghi_clear' in data.columns assert_index_equal(data.index, expected_index[:24]) From 93bd4ec0c985cfd6f755ed96cf8fdf2156cdf5ac Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Wed, 11 Aug 2021 13:57:29 +0200 Subject: [PATCH 17/40] Install xarray with pip in requirements-py36 --- ci/requirements-py36.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/requirements-py36.yml b/ci/requirements-py36.yml index 3422fb7ccb..c59550196f 100644 --- a/ci/requirements-py36.yml +++ b/ci/requirements-py36.yml @@ -28,8 +28,8 @@ dependencies: - shapely # pvfactors dependency - siphon # conda-forge - statsmodels - - xarray - pip: - dataclasses - nrel-pysam>=2.0 - pvfactors==1.4.1 + - xarray From 519b0600b902b3261f462e462d088c1891151f89 Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Wed, 11 Aug 2021 14:00:20 +0200 Subject: [PATCH 18/40] Include xarray in TEST_REQUIRE in setup.py --- ci/requirements-py36.yml | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/requirements-py36.yml b/ci/requirements-py36.yml index c59550196f..3422fb7ccb 100644 --- a/ci/requirements-py36.yml +++ b/ci/requirements-py36.yml @@ -28,8 +28,8 @@ dependencies: - shapely # pvfactors dependency - siphon # conda-forge - statsmodels + - xarray - pip: - dataclasses - nrel-pysam>=2.0 - pvfactors==1.4.1 - - xarray diff --git a/setup.py b/setup.py index 21b2606273..a96be4af41 100755 --- a/setup.py +++ b/setup.py @@ -50,7 +50,7 @@ TESTS_REQUIRE = ['nose', 'pytest', 'pytest-cov', 'pytest-mock', 'requests-mock', 'pytest-timeout', 'pytest-rerunfailures', - 'pytest-remotedata'] + 'pytest-remotedata', 'xarray'] EXTRAS_REQUIRE = { 'optional': ['cython', 'ephem', 'netcdf4', 'nrel-pysam', 'numba', 'pvfactors', 'siphon', 'statsmodels', 'tables', From b732c766094ea1a9335deaa808baeb3a4c5eb7fc Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Wed, 11 Aug 2021 15:58:03 +0200 Subject: [PATCH 19/40] Add UID to era5 tests --- pvlib/tests/iotools/test_era5.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pvlib/tests/iotools/test_era5.py b/pvlib/tests/iotools/test_era5.py index 8a841fcce4..a5db752bc5 100644 --- a/pvlib/tests/iotools/test_era5.py +++ b/pvlib/tests/iotools/test_era5.py @@ -16,7 +16,7 @@ def cds_api_key(): Users should obtain their own credentials as described in the `get_bsrn` documentation.""" - return os.environ["CDSAPI_KEY"] + return '98568:' + os.environ["CDSAPI_KEY"] @pytest.fixture From 4c911ace506010e140020cf3fc6a61d01450f181 Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Wed, 11 Aug 2021 17:38:58 +0200 Subject: [PATCH 20/40] Add requires_xarray to conftest.py --- pvlib/tests/conftest.py | 10 ++++++++++ pvlib/tests/iotools/test_era5.py | 5 ++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/pvlib/tests/conftest.py b/pvlib/tests/conftest.py index 22ff4fc866..db22e5f252 100644 --- a/pvlib/tests/conftest.py +++ b/pvlib/tests/conftest.py @@ -115,6 +115,16 @@ def assert_frame_equal(left, right, **kwargs): not has_statsmodels, reason='requires statsmodels') +try: + import xarray as xr # noqa: F401 + has_xarray = True +except ImportError: + has_xarray = False + +requires_xarray = pytest.mark.skipif( + not has_xarray reason='requires xarray + + try: import tables has_tables = True diff --git a/pvlib/tests/iotools/test_era5.py b/pvlib/tests/iotools/test_era5.py index a5db752bc5..1b4e644352 100644 --- a/pvlib/tests/iotools/test_era5.py +++ b/pvlib/tests/iotools/test_era5.py @@ -7,7 +7,7 @@ import os from pvlib.iotools import read_era5, get_era5 from ..conftest import (DATA_DIR, RERUNS, RERUNS_DELAY, assert_index_equal, - requires_cds_credentials) + requires_cds_credentials, requires_xarray) @pytest.fixture(scope="module") @@ -38,12 +38,14 @@ def expected_columns_mapped(): 'bhi_clear'] +@requires_xarray def test_read_era5(expected_index, expected_columns): data, meta = read_era5(DATA_DIR / 'era5_testfile.nc', map_variables=False) assert (expected_columns == data.columns).all() assert_index_equal(data.index, expected_index) +@requires_xarray def test_read_era5_variable_mapped(expected_index, expected_columns_mapped): data, meta = read_era5(DATA_DIR / 'era5_testfile.nc') assert (expected_columns_mapped == data.columns).all() @@ -51,6 +53,7 @@ def test_read_era5_variable_mapped(expected_index, expected_columns_mapped): assert data.notna().all().all() +@requires_xarray @requires_cds_credentials @pytest.mark.remote_data @pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) From f1b83a2d9e169d225c243885b758a77546dd5a93 Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Wed, 11 Aug 2021 17:45:42 +0200 Subject: [PATCH 21/40] Renaming get_era5 inputs --- pvlib/iotools/era5.py | 16 ++++++++++------ pvlib/tests/conftest.py | 2 +- pvlib/tests/iotools/test_era5.py | 2 +- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/pvlib/iotools/era5.py b/pvlib/iotools/era5.py index 30050ac92d..a5b9589ad6 100644 --- a/pvlib/iotools/era5.py +++ b/pvlib/iotools/era5.py @@ -14,6 +14,10 @@ class xr: def open_dataset(*a, **kw): raise ImportError( 'Reading ERA5 data requires xarray to be installed.') + @staticmethod + def open_mfdataset(*a, **kw): + raise ImportError( + 'Reading ERA5 data requires xarray to be installed.') try: import cdsapi @@ -61,8 +65,8 @@ def Client(*a, **kw): def get_era5(latitude, longitude, start, end, api_key=None, variables=ERA5_DEFAULT_VARIABLES, - dataset_name='reanalysis-era5-single-levels', - product_type='reanalysis', grid=(0.25, 0.25), local_filename=None, + dataset='reanalysis-era5-single-levels', + product_type='reanalysis', grid=(0.25, 0.25), save_path=None, cds_client=None, map_variables=True): """ Retrieve ERA5 reanalysis data from the Copernicus Data Store (CDS). @@ -122,7 +126,7 @@ def get_era5(latitude, longitude, start, end, api_key=None, ERA5 product type grid: list or tuple, default: (0.25, 0.25) User specified grid resolution - local_filename: str or path-like, optional + save_path: str or path-like, optional Filename of where to save data. Should have ".nc" extension. cds_client: CDS API client object, optional CDS API client @@ -193,14 +197,14 @@ def get_era5(latitude, longitude, start, end, api_key=None, 'area': area} # Retrieve path to the file - file_location = cds_client.retrieve(dataset_name, params) + file_location = cds_client.retrieve(dataset, params) # Load file into memory with requests.get(file_location.location) as res: # Save the file locally if local_path has been specified - if local_filename is not None: - with open(local_filename, 'wb') as f: + if save_path is not None: + with open(save_path, 'wb') as f: f.write(res.content) return read_era5(res.content, map_variables=map_variables) diff --git a/pvlib/tests/conftest.py b/pvlib/tests/conftest.py index db22e5f252..c16adcdaef 100644 --- a/pvlib/tests/conftest.py +++ b/pvlib/tests/conftest.py @@ -122,7 +122,7 @@ def assert_frame_equal(left, right, **kwargs): has_xarray = False requires_xarray = pytest.mark.skipif( - not has_xarray reason='requires xarray + not has_xarray, reason='requires xarray') try: diff --git a/pvlib/tests/iotools/test_era5.py b/pvlib/tests/iotools/test_era5.py index 1b4e644352..e4202aa505 100644 --- a/pvlib/tests/iotools/test_era5.py +++ b/pvlib/tests/iotools/test_era5.py @@ -66,7 +66,7 @@ def test_get_era5(cds_api_key, expected_index): variables=['mean_surface_downward_short_wave_radiation_flux_clear_sky', '2m_temperature'], api_key=cds_api_key, - local_filename='era5_test_data.nc', # save file + save_path='era5_test_data.nc', map_variables=True) assert 'temp_air' in data.columns assert 'ghi_clear' in data.columns From 7a1353199b8290476ebe5d292005deb20cfb99b8 Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Wed, 11 Aug 2021 18:05:21 +0200 Subject: [PATCH 22/40] Updated CDSAPI_KEY usage --- pvlib/iotools/era5.py | 3 ++- pvlib/tests/iotools/test_era5.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/pvlib/iotools/era5.py b/pvlib/iotools/era5.py index a5b9589ad6..8b94e36a83 100644 --- a/pvlib/iotools/era5.py +++ b/pvlib/iotools/era5.py @@ -14,6 +14,7 @@ class xr: def open_dataset(*a, **kw): raise ImportError( 'Reading ERA5 data requires xarray to be installed.') + @staticmethod def open_mfdataset(*a, **kw): raise ImportError( @@ -210,7 +211,7 @@ def get_era5(latitude, longitude, start, end, api_key=None, return read_era5(res.content, map_variables=map_variables) -def read_era5(filename, map_variables=True): +def read_era5(filename, output_format=None, map_variables=True): """Read an ERA5 netcdf file. Parameters diff --git a/pvlib/tests/iotools/test_era5.py b/pvlib/tests/iotools/test_era5.py index e4202aa505..4227818344 100644 --- a/pvlib/tests/iotools/test_era5.py +++ b/pvlib/tests/iotools/test_era5.py @@ -16,7 +16,7 @@ def cds_api_key(): Users should obtain their own credentials as described in the `get_bsrn` documentation.""" - return '98568:' + os.environ["CDSAPI_KEY"] + return os.environ["CDSAPI_KEY"] @pytest.fixture From 87b6a50258183ea9524391a9dee972712e8a8e8c Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Wed, 11 Aug 2021 20:11:44 +0200 Subject: [PATCH 23/40] Extend test coverage --- pvlib/data/era5_testfile_1day.nc | Bin 0 -> 3956 bytes pvlib/tests/iotools/test_era5.py | 38 ++++++++++++++++++++++++++++--- 2 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 pvlib/data/era5_testfile_1day.nc diff --git a/pvlib/data/era5_testfile_1day.nc b/pvlib/data/era5_testfile_1day.nc new file mode 100644 index 0000000000000000000000000000000000000000..fc7ce91abcd197e33a99bdccea61af8b1f184ec9 GIT binary patch literal 3956 zcmc(h2~ZPP7=S|rLBloH(bhV3Y3+KJMN0=E&zAoGjmN*L*Q$RR?*HENb`2v=gI4dtg z)6>^Hr5{NvHMl7YHF2V36(-?#7#|d`rqnb^X-S$UXl)V|pF}4RX_>=`yh%j9z~$*B ztDa{i#$Y7XN;RdVk_eU6CaGA);xMW#NDxWJ%z;8x9>=R1&mc%0VM7A45Tun*F^Dm- zDg%;`MuiN>239EXd?m+AtiU5PNo&;F1S+1UHOhpR6`FZfsNvBM|#k55nr))3hLH`IiMl?0ZMSc{Dn zkYpD;3bDR%coMjREo^3|JyCoye}f-g&)MCwE6fk*@1E<+mcM^;(??kT3jGbW5Mt-f zBn`_3%=ue1Rqu2b;ox`!!B{OeD-Q<>p5e{uIM16b{4{PCyo~Q}ZkV01>T)g259oWZ z+Q*|(PoDVye9wNK?-4j}a?$3AM4-Hff+TRAf7)I#Jm#_SX}%{vTze_=;Po6Ve}#FM z4?!MV1MTx@on3&<$PzYz6-956M~D)_Ti)Pz4z>n49;-*3pl>j~!Jdd%1e(GuqQN0L z1ng&^_&og_$PrHFI9lM17O*yw`wO;GvZ@%%UtxSgM-Ud+7iw5G;J#30vWO?@ohJ-d z2k(I35TXf=aMFPaSVBMs4*m~VdBSM6HGm8X5oZ$J((=bMn!@+i3H^NKRP2ZG<8P~4t zdTM;Src`wg-P-mw$A@ejA5LHy>Dg7&sBR*+Vtaitd8xV?=?Gz?RrtUUTsP?jD`!1g za`!dIMf*Z=XJ2OuC1U;qQa0!APoFaaDe9+&`_0SmwbR=@^K1Oz|? zB)|?70FLpCC!Th$&Z-(ZI5j)Ir)E*={_LryP?ODmd}^uFolgsq!;Ykuf0z+7Au7A? ztv=P=zUUT{(k*#a?~58^th#+{q^a)4Cw~?7Sh4ibvQzg?R3EF{TvnB{5Y2q#l5e~J zUFQz^FhYLdr=8W?D{HE1w&d>99?WvdOTNF%D9U1X^-4=`*LO|zKigzlQl5(fp zUOS;~%n?>?PB-l^Zq7YA)HeE(y=2l#M%Lv*o75KWF#1W&!{VEFZ)mRSeh%AtVtw7V zds|wpUR^PE;Rj1B%blNJDoLLmJa?B%KDT@6lm#^#j5Y0cgzWnLkot$jy<1)1xa2eH zW~gTrx|SCGIkUsO)CE_|^C~7U;ujvN=(POH%E~n>zOJn<-r4ipHhaF>?>svHwEcYa zuer5dZiU>-{ClH9-ezsbww>n1hEs#IW0H00*}5a6rZN4^(b9#cG4J literal 0 HcmV?d00001 diff --git a/pvlib/tests/iotools/test_era5.py b/pvlib/tests/iotools/test_era5.py index 4227818344..79f8bafb90 100644 --- a/pvlib/tests/iotools/test_era5.py +++ b/pvlib/tests/iotools/test_era5.py @@ -3,6 +3,7 @@ """ import pandas as pd +import numpy as np import pytest import os from pvlib.iotools import read_era5, get_era5 @@ -21,7 +22,7 @@ def cds_api_key(): @pytest.fixture def expected_index(): - index = pd.date_range('2020-1-1', freq='1h', periods=8784) + index = pd.date_range('2020-1-1', freq='1h', periods=8832) index.name = 'time' return index @@ -42,17 +43,25 @@ def expected_columns_mapped(): def test_read_era5(expected_index, expected_columns): data, meta = read_era5(DATA_DIR / 'era5_testfile.nc', map_variables=False) assert (expected_columns == data.columns).all() - assert_index_equal(data.index, expected_index) + assert_index_equal(data.index, expected_index[:8784]) @requires_xarray def test_read_era5_variable_mapped(expected_index, expected_columns_mapped): data, meta = read_era5(DATA_DIR / 'era5_testfile.nc') assert (expected_columns_mapped == data.columns).all() - assert_index_equal(data.index, expected_index) + assert_index_equal(data.index, expected_index[:8784]) assert data.notna().all().all() +@requires_xarray +def test_read_era5_multiple_files(expected_index): + filenames = \ + [DATA_DIR / f for f in ['era5_testfile.nc', 'era5_testfile_1day.nc']] + data, meta = read_era5(filenames) + assert_index_equal(data.index, expected_index) + + @requires_xarray @requires_cds_credentials @pytest.mark.remote_data @@ -72,3 +81,26 @@ def test_get_era5(cds_api_key, expected_index): assert 'ghi_clear' in data.columns assert_index_equal(data.index, expected_index[:24]) assert data.notna().all().all() + + +@requires_xarray +@requires_cds_credentials +@pytest.mark.remote_data +@pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) +def test_get_era5_area(cds_api_key, expected_index): + data, meta = get_era5( + latitude=[55.7, 55.7+0.25*2], + longitude=[12.5, 55.7+0.25*2], + start=pd.Timestamp(2020, 1, 1), + end=pd.Timestamp(2020, 1, 1), + variables=['mean_surface_downward_short_wave_radiation_flux_clear_sky', + '2m_temperature'], + api_key=cds_api_key, + save_path='era5_test_data.nc', + map_variables=True) + assert 'temp_air' in data.variables.mapping.keys() + assert 'time' in data.variables.mapping.keys() + assert 'longitude' in data.variables.mapping.keys() + assert np.isclose(data.latitude.values, [56.2 , 55.95, 55.7]).all() + assert (data.time.values == + expected_index[:24].to_pydatetime().astype('datetime64[ns]')).all() From bff729951f99e9ac4586ccf5388ee7a375ec3b6b Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Mon, 16 Aug 2021 12:03:05 +0200 Subject: [PATCH 24/40] Add dask as optional dependency --- ci/requirements-py36.yml | 1 + ci/requirements-py37.yml | 1 + ci/requirements-py38.yml | 1 + ci/requirements-py39.yml | 1 + setup.py | 4 ++-- 5 files changed, 6 insertions(+), 2 deletions(-) diff --git a/ci/requirements-py36.yml b/ci/requirements-py36.yml index 3422fb7ccb..5dfd44c8f1 100644 --- a/ci/requirements-py36.yml +++ b/ci/requirements-py36.yml @@ -6,6 +6,7 @@ dependencies: - cdsapi - coveralls - cython + - dask - ephem - netcdf4 - nose diff --git a/ci/requirements-py37.yml b/ci/requirements-py37.yml index 3af5c5d849..af45eefda0 100644 --- a/ci/requirements-py37.yml +++ b/ci/requirements-py37.yml @@ -6,6 +6,7 @@ dependencies: - cdsapi - coveralls - cython + - dask - ephem - netcdf4 - nose diff --git a/ci/requirements-py38.yml b/ci/requirements-py38.yml index 36eee3ab9c..f8fc6e58eb 100644 --- a/ci/requirements-py38.yml +++ b/ci/requirements-py38.yml @@ -6,6 +6,7 @@ dependencies: - cdsapi - coveralls - cython + - dask - ephem - netcdf4 - nose diff --git a/ci/requirements-py39.yml b/ci/requirements-py39.yml index 76df1ec957..9001c995a5 100644 --- a/ci/requirements-py39.yml +++ b/ci/requirements-py39.yml @@ -6,6 +6,7 @@ dependencies: - cdsapi - coveralls - cython + - dask - ephem # - netcdf4 # pulls in a different version of numpy with ImportError - nose diff --git a/setup.py b/setup.py index a96be4af41..9038487ae8 100755 --- a/setup.py +++ b/setup.py @@ -50,11 +50,11 @@ TESTS_REQUIRE = ['nose', 'pytest', 'pytest-cov', 'pytest-mock', 'requests-mock', 'pytest-timeout', 'pytest-rerunfailures', - 'pytest-remotedata', 'xarray'] + 'pytest-remotedata'] EXTRAS_REQUIRE = { 'optional': ['cython', 'ephem', 'netcdf4', 'nrel-pysam', 'numba', 'pvfactors', 'siphon', 'statsmodels', 'tables', - 'cftime >= 1.1.1', 'xarray', 'cdsapi'], + 'cftime >= 1.1.1', 'xarray', 'dask', 'cdsapi'], 'doc': ['ipython', 'matplotlib', 'sphinx == 3.1.2', 'sphinx_rtd_theme==0.5.0', 'sphinx-gallery', 'docutils == 0.15.2', 'pillow', 'netcdf4', 'siphon', 'tables', From 5de52bc65a4397f409bf00f3ea444c7abfd76eeb Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Mon, 16 Aug 2021 12:35:00 +0200 Subject: [PATCH 25/40] Update documentation --- pvlib/iotools/era5.py | 79 +++++++++++++++++++------------- pvlib/tests/iotools/test_era5.py | 2 +- 2 files changed, 48 insertions(+), 33 deletions(-) diff --git a/pvlib/iotools/era5.py b/pvlib/iotools/era5.py index 8b94e36a83..fc8cbf237d 100644 --- a/pvlib/iotools/era5.py +++ b/pvlib/iotools/era5.py @@ -29,9 +29,6 @@ def Client(*a, **kw): raise ImportError( 'Retrieving ERA5 data requires cdsapi to be installed.') -CDSAPI_URL = 'https://cds.climate.copernicus.eu/api/v2' - - # The returned data uses shortNames, whereas the request requires variable # names according to the CDS convention - passing shortNames results in an # "Ambiguous" error being raised @@ -63,43 +60,50 @@ def Client(*a, **kw): '08:00', '09:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00', '19:00', '20:00', '21:00', '22:00', '23:00'] +CDSAPI_URL = 'https://cds.climate.copernicus.eu/api/v2' + def get_era5(latitude, longitude, start, end, api_key=None, variables=ERA5_DEFAULT_VARIABLES, dataset='reanalysis-era5-single-levels', product_type='reanalysis', grid=(0.25, 0.25), save_path=None, - cds_client=None, map_variables=True): + cds_client=None, outputformat=None, map_variables=True): """ Retrieve ERA5 reanalysis data from the Copernicus Data Store (CDS). * Temporal coverage: 1979 to present * Temporal resolution: hourly - * Spatial resolution: 0.25° by 0.25° * Spatial coverage: global + * Spatial resolution: 0.25° by 0.25° An overview of ERA5 is given in [1]_ and [2]_. Data is retrieved using the CDSAPI [3]_. + ERA5 time stamps are always in UTC and Time-stamp: from the previous time stamp and backwards, i.e. end of period For the reanalysis, the accumulation period is over the 1 hour up to the validity date and time. - Variables should be specified according to the naming convention used by - the CDS. The returned data contains the short-name versions of the - variables. See [2]_ for a list of variables names and units. + .. admonition:: Time reference + The ERA5 time stamp convention is to label data periods by the right + edge, e.g., the time stamp 12:00 for hourly data refers to the period + from 11.00 to 12:00. + + .. admonition:: Usage notes + To use this function the package cdsapi [5]_ needs to be installed + [3]_. The CDSAPI keywords are described in [6]_. - Hint - ---- - In order to use the this function the package cdsapi [5]__ needs to be - installed [3]_. The CDSAPI keywords are described in [6]_. + Variables should be specified according to the naming convention used + by the CDS. The returned data contains the short-name versions of the + variables. See [2]_ for a list of variables names and units. - Access requires user registration, see [4]_. The obtaining API key can - either be passed directly to the function or be saved in a local file as - described in [3]_. + Access requires user registration, see [4]_. The obtaining API key can + either be passed directly to the function or be saved in a local file + as described in [3]_. - It is possible to check your - `request status `_ - and the `status of all queued requests `_. + It is possible to check your + `request status `_ + and the `status of all queued requests `_. Parameters ---------- @@ -131,11 +135,15 @@ def get_era5(latitude, longitude, start, end, api_key=None, Filename of where to save data. Should have ".nc" extension. cds_client: CDS API client object, optional CDS API client - map_variables : bool, default: True + outputformat: {'dataframe', 'dataset'}, optional + Type of data object to return. Default is to return a pandas DataFrame + if file only contains one location and otherwise return an xarray + dataset. + map_variables: bool, default: True When true, renames columns of the DataFrame to pvlib variable names where applicable. See variable ERA5_VARIABLE_MAP. - Notes # Requirements and user registration + Notes ----- The returned data includes the following fields by default: @@ -145,8 +153,8 @@ def get_era5(latitude, longitude, start, end, api_key=None, *Mapped field names are returned when the map_variables argument is True* --------------------------------------------------------------------------- 2tm, temp_air float Air temperature at 2 m above ground (K) - u10 float Horizontal air speed towards east at 10 m [m/s] - v10 float Horizontal air speed towards north at 10 m [m/s] + u10 float Horizontal airspeed towards east at 10 m [m/s] + v10 float Horizontal airspeed towards north at 10 m [m/s] sp, pressure float Atmospheric pressure at the ground (Pa) msdwswrf, ghi float Mean surface downward short-wave radiation flux [W/m^2] msdwswrfcs, ghi_clear float Mean surface downward short-wave radiation flux, clear sky [W/m^2] @@ -157,12 +165,16 @@ def get_era5(latitude, longitude, start, end, api_key=None, Returns ------- data: DataFrame - ERA5 timeseries data, fields depend on the requested data. data is a + ERA5 time-series data, fields depend on the requested data. data is a pandas DataFrame if a single latitude and longitude is requested and an xarray DataSet for multi-location requests. metadata: dict metadata for the time-series + See Also + -------- + pvlib.iotools.read_era5 + References ---------- .. [1] `ERA5 hourly data on single levels from 1979 to present @@ -208,7 +220,8 @@ def get_era5(latitude, longitude, start, end, api_key=None, with open(save_path, 'wb') as f: f.write(res.content) - return read_era5(res.content, map_variables=map_variables) + return read_era5(res.content, map_variables=map_variables, + outputformat=outputformat) def read_era5(filename, output_format=None, map_variables=True): @@ -218,25 +231,27 @@ def read_era5(filename, output_format=None, map_variables=True): ---------- filename: str or path-like or list Filename of a netcdf file containing ERA5 data or list of filenames. - map_variables : bool, default: True + outputformat: {'dataframe', 'dataset'}, optional + Type of data object to return. Default is to return a pandas DataFrame + if file only contains one location and otherwise return an xarray + dataset. + map_variables: bool, default: True When true, renames columns of the DataFrame to pvlib variable names where applicable. See variable ERA5_VARIABLE_MAP. - Hint - ---- - The ERA5 time stamp convention is to label data periods by the right edge, - e.g., the time stamp 12:00 for hourly data refers to the period from 11.00 - to 12:00. - Returns ------- data: DataFrame - ERA5 timeseries data, fields depend on the requested data. A pandas + ERA5 timeseries data, fields depend on the available data. A pandas DataFrame is returned if the file contains a single location and otherwise an xarray DataSet is returned. metadata: dict metadata for the time-series + See Also + -------- + pvlib.iotools.get_era5 + References ---------- .. [1] `ERA5 hourly data on single levels from 1979 to present diff --git a/pvlib/tests/iotools/test_era5.py b/pvlib/tests/iotools/test_era5.py index 79f8bafb90..0a9143493c 100644 --- a/pvlib/tests/iotools/test_era5.py +++ b/pvlib/tests/iotools/test_era5.py @@ -101,6 +101,6 @@ def test_get_era5_area(cds_api_key, expected_index): assert 'temp_air' in data.variables.mapping.keys() assert 'time' in data.variables.mapping.keys() assert 'longitude' in data.variables.mapping.keys() - assert np.isclose(data.latitude.values, [56.2 , 55.95, 55.7]).all() + assert np.isclose(data.latitude.values, [56.2, 55.95, 55.7]).all() assert (data.time.values == expected_index[:24].to_pydatetime().astype('datetime64[ns]')).all() From 0721f153908eec9b78b64a5bf58733f8afbf964a Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Mon, 16 Aug 2021 13:02:28 +0200 Subject: [PATCH 26/40] More documentation updates --- pvlib/iotools/era5.py | 45 ++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/pvlib/iotools/era5.py b/pvlib/iotools/era5.py index fc8cbf237d..3c328406ca 100644 --- a/pvlib/iotools/era5.py +++ b/pvlib/iotools/era5.py @@ -79,25 +79,26 @@ def get_era5(latitude, longitude, start, end, api_key=None, An overview of ERA5 is given in [1]_ and [2]_. Data is retrieved using the CDSAPI [3]_. - ERA5 time stamps are always in UTC and - Time-stamp: from the previous time stamp and backwards, i.e. end of period - For the reanalysis, the accumulation period is over the 1 hour up to the - validity date and time. + ERA5 time stamps are always in UTC and refer to the period from the + timestamp and to the previous time stamp, i.e. timestamp corresponds to the + end of the period (right label). .. admonition:: Time reference + The ERA5 time stamp convention is to label data periods by the right edge, e.g., the time stamp 12:00 for hourly data refers to the period from 11.00 to 12:00. .. admonition:: Usage notes - To use this function the package cdsapi [5]_ needs to be installed - [3]_. The CDSAPI keywords are described in [6]_. + + To use this function the package cdsapi [4]_ needs to be installed + [3]_. The CDSAPI keywords are described in [5]_. Variables should be specified according to the naming convention used by the CDS. The returned data contains the short-name versions of the variables. See [2]_ for a list of variables names and units. - Access requires user registration, see [4]_. The obtaining API key can + Access requires user registration, see [6]_. The obtaining API key can either be passed directly to the function or be saved in a local file as described in [3]_. @@ -123,9 +124,9 @@ def get_era5(latitude, longitude, start, end, api_key=None, Personal API key for the CDS variables: list, default: ERA5_DEFAULT_VARIABLES List of variables to retrieve (according to CDS naming convention) - dataset: str, default: {'reanalysis-era5-single-levels', - 'reanalysis-era5-land'} - Name of the dataset to retrieve the variables from + dataset: str, default 'reanalysis-era5-single-levels' + Name of the dataset to retrieve the variables from. Can be either + 'reanalysis-era5-single-levels' or 'reanalysis-era5-land'. product_type: str, {'reanalysis', 'ensemble_members', 'ensemble_mean', 'ensemble_spread'}, default: 'reanalysis' ERA5 product type @@ -183,12 +184,12 @@ def get_era5(latitude, longitude, start, end, api_key=None, `_ .. [3] `How to use the CDS API `_ - .. [4] `Climate Data Storage user registration - `_ - .. [5] `cdsapi source code + .. [4] `cdsapi source code `_ - .. [6] `Climate Data Store (CDS) API Keywords + .. [5] `Climate Data Store (CDS) API Keywords `_ + .. [6] `Climate Data Storage user registration + `_ """ # noqa: E501 if cds_client is None: cds_client = cdsapi.Client(url=CDSAPI_URL, key=api_key) @@ -225,7 +226,7 @@ def get_era5(latitude, longitude, start, end, api_key=None, def read_era5(filename, output_format=None, map_variables=True): - """Read an ERA5 netcdf file. + """Read one or more ERA5 netcdf files. Parameters ---------- @@ -236,17 +237,16 @@ def read_era5(filename, output_format=None, map_variables=True): if file only contains one location and otherwise return an xarray dataset. map_variables: bool, default: True - When true, renames columns of the DataFrame to pvlib variable names - where applicable. See variable ERA5_VARIABLE_MAP. + When true, renames columns to pvlib variable names where applicable. + See variable ERA5_VARIABLE_MAP. Returns ------- - data: DataFrame + data: DataFrame or dataset ERA5 timeseries data, fields depend on the available data. A pandas - DataFrame is returned if the file contains a single location and - otherwise an xarray DataSet is returned. + Object type depends on outputformat. metadata: dict - metadata for the time-series + Metadata for the time-series. See Also -------- @@ -259,7 +259,8 @@ def read_era5(filename, output_format=None, map_variables=True): .. [2] `ERA5 data documentation `_ """ - if isinstance(filename, (list, tuple)): # open multiple-files (mf) + # open multiple-files - requires dask + if isinstance(filename, (list, tuple)): ds = xr.open_mfdataset(filename) else: ds = xr.open_dataset(filename) From 2e90c67f486cf0120345cc13819553c816981f34 Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Mon, 16 Aug 2021 13:33:29 +0200 Subject: [PATCH 27/40] Extend parsed metadata --- pvlib/iotools/era5.py | 61 +++++++++++++++++++++++++++---------------- 1 file changed, 38 insertions(+), 23 deletions(-) diff --git a/pvlib/iotools/era5.py b/pvlib/iotools/era5.py index 3c328406ca..bf390261d6 100644 --- a/pvlib/iotools/era5.py +++ b/pvlib/iotools/era5.py @@ -29,6 +29,19 @@ def Client(*a, **kw): raise ImportError( 'Retrieving ERA5 data requires cdsapi to be installed.') + +def extra_metadata_from_dataset(ds): + meta = {} + for v in list(ds.variables): + meta[v] = { + 'name': ds[v].name, + 'long_name': ds[v].long_name} + if v.lower() != 'time': + meta[v].update({'units': ds[v].units}) + meta.update(ds.attrs) + return meta + + # The returned data uses shortNames, whereas the request requires variable # names according to the CDS convention - passing shortNames results in an # "Ambiguous" error being raised @@ -67,7 +80,7 @@ def get_era5(latitude, longitude, start, end, api_key=None, variables=ERA5_DEFAULT_VARIABLES, dataset='reanalysis-era5-single-levels', product_type='reanalysis', grid=(0.25, 0.25), save_path=None, - cds_client=None, outputformat=None, map_variables=True): + cds_client=None, output_format=None, map_variables=True): """ Retrieve ERA5 reanalysis data from the Copernicus Data Store (CDS). @@ -79,15 +92,14 @@ def get_era5(latitude, longitude, start, end, api_key=None, An overview of ERA5 is given in [1]_ and [2]_. Data is retrieved using the CDSAPI [3]_. - ERA5 time stamps are always in UTC and refer to the period from the - timestamp and to the previous time stamp, i.e. timestamp corresponds to the - end of the period (right label). + .. admonition:: Time reference - The ERA5 time stamp convention is to label data periods by the right - edge, e.g., the time stamp 12:00 for hourly data refers to the period - from 11.00 to 12:00. + ERA5 time stamps are in UTC and refer to the period from the timestamp + and to the previous time stamp, i.e. timestamp corresponds to the + end of the period (right label). E.g., the time stamp 12:00 for hourly + data refers to the period from 11.00 to 12:00. .. admonition:: Usage notes @@ -136,10 +148,10 @@ def get_era5(latitude, longitude, start, end, api_key=None, Filename of where to save data. Should have ".nc" extension. cds_client: CDS API client object, optional CDS API client - outputformat: {'dataframe', 'dataset'}, optional + output_format: {'dataframe', 'dataset'}, optional Type of data object to return. Default is to return a pandas DataFrame if file only contains one location and otherwise return an xarray - dataset. + Dataset. map_variables: bool, default: True When true, renames columns of the DataFrame to pvlib variable names where applicable. See variable ERA5_VARIABLE_MAP. @@ -166,11 +178,11 @@ def get_era5(latitude, longitude, start, end, api_key=None, Returns ------- data: DataFrame - ERA5 time-series data, fields depend on the requested data. data is a - pandas DataFrame if a single latitude and longitude is requested and - an xarray DataSet for multi-location requests. + ERA5 time-series data, fields depend on the requested data. The + returned object is either a pandas DataFrame or an xarray dataset, see + the output_format parameter. metadata: dict - metadata for the time-series + Metadata for the time-series. See Also -------- @@ -184,8 +196,8 @@ def get_era5(latitude, longitude, start, end, api_key=None, `_ .. [3] `How to use the CDS API `_ - .. [4] `cdsapi source code - `_ + .. [4] `CDSAPI source code + `_ .. [5] `Climate Data Store (CDS) API Keywords `_ .. [6] `Climate Data Storage user registration @@ -222,7 +234,7 @@ def get_era5(latitude, longitude, start, end, api_key=None, f.write(res.content) return read_era5(res.content, map_variables=map_variables, - outputformat=outputformat) + output_format=output_format) def read_era5(filename, output_format=None, map_variables=True): @@ -231,8 +243,8 @@ def read_era5(filename, output_format=None, map_variables=True): Parameters ---------- filename: str or path-like or list - Filename of a netcdf file containing ERA5 data or list of filenames. - outputformat: {'dataframe', 'dataset'}, optional + Filename of a netcdf file containing ERA5 data or a list of filenames. + output_format: {'dataframe', 'dataset'}, optional Type of data object to return. Default is to return a pandas DataFrame if file only contains one location and otherwise return an xarray dataset. @@ -242,9 +254,10 @@ def read_era5(filename, output_format=None, map_variables=True): Returns ------- - data: DataFrame or dataset - ERA5 timeseries data, fields depend on the available data. A pandas - Object type depends on outputformat. + data: DataFrame + ERA5 time-series data, fields depend on the requested data. The + returned object is either a pandas DataFrame or an xarray Dataset, see + the output_format parameter. metadata: dict Metadata for the time-series. @@ -265,14 +278,16 @@ def read_era5(filename, output_format=None, map_variables=True): else: ds = xr.open_dataset(filename) - metadata = ds.attrs + metadata = {}#extra_metadata_from_dataset(ds) if map_variables: # Renaming of xarray datasets throws an error if keys are missing ds = ds.rename_vars( {k: v for k, v in ERA5_VARIABLE_MAP.items() if k in list(ds)}) - if (ds['latitude'].size == 1) & (ds['longitude'].size == 1): + if (output_format == 'dataframe') or ( + (output_format is None) & (ds['latitude'].size == 1) & + (ds['longitude'].size == 1)): data = ds.to_dataframe().droplevel(['latitude', 'longitude']) return data, metadata else: From 9f0a62427ff7624578663ff9c07071a012c26862 Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Mon, 16 Aug 2021 14:01:53 +0200 Subject: [PATCH 28/40] Coverage for output_format parameter --- pvlib/iotools/era5.py | 46 ++++++++++++++++---------------- pvlib/tests/iotools/test_era5.py | 15 ++++++++++- 2 files changed, 37 insertions(+), 24 deletions(-) diff --git a/pvlib/iotools/era5.py b/pvlib/iotools/era5.py index bf390261d6..8d18b3d6b3 100644 --- a/pvlib/iotools/era5.py +++ b/pvlib/iotools/era5.py @@ -30,16 +30,17 @@ def Client(*a, **kw): 'Retrieving ERA5 data requires cdsapi to be installed.') -def extra_metadata_from_dataset(ds): - meta = {} +def extract_metadata_from_dataset(ds): + metadata = {} for v in list(ds.variables): - meta[v] = { + metadata[v] = { 'name': ds[v].name, 'long_name': ds[v].long_name} if v.lower() != 'time': - meta[v].update({'units': ds[v].units}) - meta.update(ds.attrs) - return meta + metadata[v].update({'units': ds[v].units}) + metadata['dims'] = dict(ds.dims) + metadata.update(ds.attrs) # add arbitrary metadata + return metadata # The returned data uses shortNames, whereas the request requires variable @@ -84,7 +85,7 @@ def get_era5(latitude, longitude, start, end, api_key=None, """ Retrieve ERA5 reanalysis data from the Copernicus Data Store (CDS). - * Temporal coverage: 1979 to present + * Temporal coverage: 1979 to present (latency of ~5 days) * Temporal resolution: hourly * Spatial coverage: global * Spatial resolution: 0.25° by 0.25° @@ -92,27 +93,25 @@ def get_era5(latitude, longitude, start, end, api_key=None, An overview of ERA5 is given in [1]_ and [2]_. Data is retrieved using the CDSAPI [3]_. - - .. admonition:: Time reference - ERA5 time stamps are in UTC and refer to the period from the timestamp - and to the previous time stamp, i.e. timestamp corresponds to the - end of the period (right label). E.g., the time stamp 12:00 for hourly - data refers to the period from 11.00 to 12:00. + ERA5 time stamps are in UTC and corresponds to the end of the period + (right labeled). E.g., the time stamp 12:00 for hourly data refers to + the period from 11.00 to 12:00. .. admonition:: Usage notes - To use this function the package cdsapi [4]_ needs to be installed + To use this function the package CDSAPI [4]_ needs to be installed [3]_. The CDSAPI keywords are described in [5]_. - Variables should be specified according to the naming convention used - by the CDS. The returned data contains the short-name versions of the - variables. See [2]_ for a list of variables names and units. + Requested variables should be specified according to the naming + convention used by the CDS. The returned data contains the short-name + versions of the variables. See [2]_ for a list of variables names and + units. - Access requires user registration, see [6]_. The obtaining API key can - either be passed directly to the function or be saved in a local file - as described in [3]_. + Access to the CDS requires user registration, see [6]_. The obtaining + API key can either be passed directly to the function or be saved in a + local file as described in [3]_. It is possible to check your `request status `_ @@ -278,7 +277,7 @@ def read_era5(filename, output_format=None, map_variables=True): else: ds = xr.open_dataset(filename) - metadata = {}#extra_metadata_from_dataset(ds) + metadata = extract_metadata_from_dataset(ds) if map_variables: # Renaming of xarray datasets throws an error if keys are missing @@ -286,9 +285,10 @@ def read_era5(filename, output_format=None, map_variables=True): {k: v for k, v in ERA5_VARIABLE_MAP.items() if k in list(ds)}) if (output_format == 'dataframe') or ( - (output_format is None) & (ds['latitude'].size == 1) & + (output_format == None) & (ds['latitude'].size == 1) & (ds['longitude'].size == 1)): - data = ds.to_dataframe().droplevel(['latitude', 'longitude']) + if (ds['latitude'].size == 1) & (ds['longitude'].size == 1): + data = ds.to_dataframe().droplevel(['latitude', 'longitude']) return data, metadata else: return ds, metadata diff --git a/pvlib/tests/iotools/test_era5.py b/pvlib/tests/iotools/test_era5.py index 0a9143493c..3c9c05ae72 100644 --- a/pvlib/tests/iotools/test_era5.py +++ b/pvlib/tests/iotools/test_era5.py @@ -44,7 +44,12 @@ def test_read_era5(expected_index, expected_columns): data, meta = read_era5(DATA_DIR / 'era5_testfile.nc', map_variables=False) assert (expected_columns == data.columns).all() assert_index_equal(data.index, expected_index[:8784]) - + # Test meta + assert meta['msdwswrf'] == { + 'name': 'msdwswrf', + 'long_name': 'Mean surface downward short-wave radiation flux', + 'units': 'W m**-2'} + assert 'dims' in meta.keys() @requires_xarray def test_read_era5_variable_mapped(expected_index, expected_columns_mapped): @@ -54,6 +59,14 @@ def test_read_era5_variable_mapped(expected_index, expected_columns_mapped): assert data.notna().all().all() +@requires_xarray +def test_read_era5_output_format(expected_index, expected_columns_mapped): + import xarray as xr + data, meta = read_era5(DATA_DIR / 'era5_testfile.nc', + output_format='dataset') + assert isinstance(data, xr.Dataset) + + @requires_xarray def test_read_era5_multiple_files(expected_index): filenames = \ From 792166697e9fa790bda91ea6f1066b0906a7bdec Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Mon, 16 Aug 2021 14:06:03 +0200 Subject: [PATCH 29/40] Fix stickler --- pvlib/iotools/era5.py | 2 +- pvlib/tests/iotools/test_era5.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pvlib/iotools/era5.py b/pvlib/iotools/era5.py index 8d18b3d6b3..8e322c8ebd 100644 --- a/pvlib/iotools/era5.py +++ b/pvlib/iotools/era5.py @@ -285,7 +285,7 @@ def read_era5(filename, output_format=None, map_variables=True): {k: v for k, v in ERA5_VARIABLE_MAP.items() if k in list(ds)}) if (output_format == 'dataframe') or ( - (output_format == None) & (ds['latitude'].size == 1) & + (output_format is None) & (ds['latitude'].size == 1) & (ds['longitude'].size == 1)): if (ds['latitude'].size == 1) & (ds['longitude'].size == 1): data = ds.to_dataframe().droplevel(['latitude', 'longitude']) diff --git a/pvlib/tests/iotools/test_era5.py b/pvlib/tests/iotools/test_era5.py index 3c9c05ae72..32c08cc78f 100644 --- a/pvlib/tests/iotools/test_era5.py +++ b/pvlib/tests/iotools/test_era5.py @@ -51,6 +51,7 @@ def test_read_era5(expected_index, expected_columns): 'units': 'W m**-2'} assert 'dims' in meta.keys() + @requires_xarray def test_read_era5_variable_mapped(expected_index, expected_columns_mapped): data, meta = read_era5(DATA_DIR / 'era5_testfile.nc') From 03e4a5fb398318e777ca64c8557b49e942d20549 Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Mon, 16 Aug 2021 14:45:07 +0200 Subject: [PATCH 30/40] Update description of test_get_cams_bad_request --- pvlib/tests/iotools/test_sodapro.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pvlib/tests/iotools/test_sodapro.py b/pvlib/tests/iotools/test_sodapro.py index 10f9a1e8c9..431ca036b7 100644 --- a/pvlib/tests/iotools/test_sodapro.py +++ b/pvlib/tests/iotools/test_sodapro.py @@ -244,7 +244,7 @@ def test_get_cams(requests_mock, testfile, index, columns, values, dtypes, def test_get_cams_bad_request(requests_mock): - """Test that a the correct errors/warnings ares raised for invalid + """Test that the correct errors/warnings are raised for invalid requests inputs. Also tests if the specified server url gets used""" # Subset of an xml file returned for errornous requests From 5e1db86dc3fe045620e0256205c7e989321cb971 Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Mon, 16 Aug 2021 21:11:32 +0200 Subject: [PATCH 31/40] Implement changes from review by kanderso-nrel --- docs/sphinx/source/whatsnew/v0.9.0.rst | 2 -- pvlib/iotools/era5.py | 29 +++++++++++++------------- pvlib/tests/iotools/test_era5.py | 2 +- pvlib/tests/iotools/test_sodapro.py | 1 - 4 files changed, 16 insertions(+), 18 deletions(-) diff --git a/docs/sphinx/source/whatsnew/v0.9.0.rst b/docs/sphinx/source/whatsnew/v0.9.0.rst index f50b7e3c97..d2a47d8b22 100644 --- a/docs/sphinx/source/whatsnew/v0.9.0.rst +++ b/docs/sphinx/source/whatsnew/v0.9.0.rst @@ -111,8 +111,6 @@ Enhancements :func:`~pvlib.iotools.read_era5` for retrieving and reading ERA5 reanalysis netcdf files from the Climate Data Store (CDS) files. (:pull:`1264`) -* Add :func:`~pvlib.iotools.read_bsrn` for reading BSRN solar radiation data - files. (:pull:`1145`, :issue:`1015`) * Added :func:`~pvlib.iotools.read_pvgis_hourly` and :func:`~pvlib.iotools.get_pvgis_hourly` for reading and retrieving hourly solar radiation data and PV power output from PVGIS. (:pull:`1186`, diff --git a/pvlib/iotools/era5.py b/pvlib/iotools/era5.py index 8e322c8ebd..30c5d91161 100644 --- a/pvlib/iotools/era5.py +++ b/pvlib/iotools/era5.py @@ -30,14 +30,14 @@ def Client(*a, **kw): 'Retrieving ERA5 data requires cdsapi to be installed.') -def extract_metadata_from_dataset(ds): +def _extract_metadata_from_dataset(ds): metadata = {} for v in list(ds.variables): metadata[v] = { 'name': ds[v].name, 'long_name': ds[v].long_name} if v.lower() != 'time': - metadata[v].update({'units': ds[v].units}) + metadata[v]['units'] = ds[v].units metadata['dims'] = dict(ds.dims) metadata.update(ds.attrs) # add arbitrary metadata return metadata @@ -97,7 +97,7 @@ def get_era5(latitude, longitude, start, end, api_key=None, ERA5 time stamps are in UTC and corresponds to the end of the period (right labeled). E.g., the time stamp 12:00 for hourly data refers to - the period from 11.00 to 12:00. + the period from 11:00 to 12:00. .. admonition:: Usage notes @@ -132,14 +132,14 @@ def get_era5(latitude, longitude, start, end, api_key=None, end: datetime like Last day of the requested period api_key: str, optional - Personal API key for the CDS + Personal API key for the CDS with the format "uid:key" e.g. + '00000:aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee' variables: list, default: ERA5_DEFAULT_VARIABLES List of variables to retrieve (according to CDS naming convention) dataset: str, default 'reanalysis-era5-single-levels' Name of the dataset to retrieve the variables from. Can be either 'reanalysis-era5-single-levels' or 'reanalysis-era5-land'. - product_type: str, {'reanalysis', 'ensemble_members', 'ensemble_mean', - 'ensemble_spread'}, default: 'reanalysis' + product_type: str, {'reanalysis', 'ensemble_members', 'ensemble_mean', 'ensemble_spread'}, default: 'reanalysis' ERA5 product type grid: list or tuple, default: (0.25, 0.25) User specified grid resolution @@ -164,10 +164,10 @@ def get_era5(latitude, longitude, start, end, api_key=None, ======================== ====== ========================================= *Mapped field names are returned when the map_variables argument is True* --------------------------------------------------------------------------- - 2tm, temp_air float Air temperature at 2 m above ground (K) + 2tm, temp_air float Air temperature at 2 m above ground [K] u10 float Horizontal airspeed towards east at 10 m [m/s] v10 float Horizontal airspeed towards north at 10 m [m/s] - sp, pressure float Atmospheric pressure at the ground (Pa) + sp, pressure float Atmospheric pressure at the ground [Pa] msdwswrf, ghi float Mean surface downward short-wave radiation flux [W/m^2] msdwswrfcs, ghi_clear float Mean surface downward short-wave radiation flux, clear sky [W/m^2] msdrswrf, bhi float Mean surface direct short-wave radiation flux [W/m^2] @@ -206,9 +206,9 @@ def get_era5(latitude, longitude, start, end, api_key=None, cds_client = cdsapi.Client(url=CDSAPI_URL, key=api_key) # Area is selected by a box made by the four coordinates: [N, W, S, E] - if type(latitude) == list: + try: area = [latitude[1], longitude[0], latitude[0], longitude[1]] - else: + except TypeError: area = [latitude+0.005, longitude-0.005, latitude-0.005, longitude+0.005] @@ -227,7 +227,7 @@ def get_era5(latitude, longitude, start, end, api_key=None, # Load file into memory with requests.get(file_location.location) as res: - # Save the file locally if local_path has been specified + # Save the file locally if save_path has been specified if save_path is not None: with open(save_path, 'wb') as f: f.write(res.content) @@ -271,13 +271,13 @@ def read_era5(filename, output_format=None, map_variables=True): .. [2] `ERA5 data documentation `_ """ - # open multiple-files - requires dask + # open multiple-files (mf) requires dask if isinstance(filename, (list, tuple)): ds = xr.open_mfdataset(filename) else: ds = xr.open_dataset(filename) - metadata = extract_metadata_from_dataset(ds) + metadata = _extract_metadata_from_dataset(ds) if map_variables: # Renaming of xarray datasets throws an error if keys are missing @@ -287,8 +287,9 @@ def read_era5(filename, output_format=None, map_variables=True): if (output_format == 'dataframe') or ( (output_format is None) & (ds['latitude'].size == 1) & (ds['longitude'].size == 1)): + data = ds.to_dataframe() if (ds['latitude'].size == 1) & (ds['longitude'].size == 1): - data = ds.to_dataframe().droplevel(['latitude', 'longitude']) + data.droplevel(['latitude', 'longitude']) return data, metadata else: return ds, metadata diff --git a/pvlib/tests/iotools/test_era5.py b/pvlib/tests/iotools/test_era5.py index 32c08cc78f..5ce9c06bc8 100644 --- a/pvlib/tests/iotools/test_era5.py +++ b/pvlib/tests/iotools/test_era5.py @@ -15,7 +15,7 @@ def cds_api_key(): """Supplies pvlib-python's CDS API key. - Users should obtain their own credentials as described in the `get_bsrn` + Users should obtain their own credentials as described in the `get_era5` documentation.""" return os.environ["CDSAPI_KEY"] diff --git a/pvlib/tests/iotools/test_sodapro.py b/pvlib/tests/iotools/test_sodapro.py index 431ca036b7..ee4922cd15 100644 --- a/pvlib/tests/iotools/test_sodapro.py +++ b/pvlib/tests/iotools/test_sodapro.py @@ -143,7 +143,6 @@ 0.9897]]) -# @pytest.fixture def generate_expected_dataframe(values, columns, index, dtypes): """Create dataframe from arrays of values, columns and index, in order to use this dataframe to compare to. From dd443e4fb3b10a06ae283a0db1515579929d1ae9 Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Tue, 17 Aug 2021 17:28:28 +0200 Subject: [PATCH 32/40] Remove cds_client input parameter --- pvlib/iotools/era5.py | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/pvlib/iotools/era5.py b/pvlib/iotools/era5.py index 30c5d91161..c94d5c34fb 100644 --- a/pvlib/iotools/era5.py +++ b/pvlib/iotools/era5.py @@ -81,7 +81,7 @@ def get_era5(latitude, longitude, start, end, api_key=None, variables=ERA5_DEFAULT_VARIABLES, dataset='reanalysis-era5-single-levels', product_type='reanalysis', grid=(0.25, 0.25), save_path=None, - cds_client=None, output_format=None, map_variables=True): + output_format=None, map_variables=True): """ Retrieve ERA5 reanalysis data from the Copernicus Data Store (CDS). @@ -145,8 +145,6 @@ def get_era5(latitude, longitude, start, end, api_key=None, User specified grid resolution save_path: str or path-like, optional Filename of where to save data. Should have ".nc" extension. - cds_client: CDS API client object, optional - CDS API client output_format: {'dataframe', 'dataset'}, optional Type of data object to return. Default is to return a pandas DataFrame if file only contains one location and otherwise return an xarray @@ -202,8 +200,7 @@ def get_era5(latitude, longitude, start, end, api_key=None, .. [6] `Climate Data Storage user registration `_ """ # noqa: E501 - if cds_client is None: - cds_client = cdsapi.Client(url=CDSAPI_URL, key=api_key) + cds_client = cdsapi.Client(url=CDSAPI_URL, key=api_key) # Area is selected by a box made by the four coordinates: [N, W, S, E] try: @@ -214,20 +211,20 @@ def get_era5(latitude, longitude, start, end, api_key=None, params = { 'product_type': product_type, - 'format': 'netcdf', 'variable': variables, 'date': start.strftime('%Y-%m-%d') + '/' + end.strftime('%Y-%m-%d'), 'time': ERA5_HOURS, 'grid': grid, - 'area': area} + 'area': area, + 'format': 'netcdf'} - # Retrieve path to the file + # Retrieve remote path to the file file_location = cds_client.retrieve(dataset, params) # Load file into memory with requests.get(file_location.location) as res: - # Save the file locally if save_path has been specified + # Save the file locally if save_path has been specified if save_path is not None: with open(save_path, 'wb') as f: f.write(res.content) From c25780eea00b457d077eeb1e6317d68f4fd71128 Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Tue, 17 Aug 2021 23:01:03 +0200 Subject: [PATCH 33/40] Localize dataframe and add helper functions to pvlib.tools --- pvlib/iotools/era5.py | 22 +++++--------- pvlib/tests/iotools/test_era5.py | 7 +++-- pvlib/tools.py | 49 ++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 17 deletions(-) diff --git a/pvlib/iotools/era5.py b/pvlib/iotools/era5.py index c94d5c34fb..398529f82b 100644 --- a/pvlib/iotools/era5.py +++ b/pvlib/iotools/era5.py @@ -5,6 +5,8 @@ # data. Also, monthly datasets and grib files are no supported. import requests +from pvlib.tools import (_extract_metadata_from_dataset, + _convert_C_to_K_in_dataset) try: import xarray as xr @@ -30,19 +32,6 @@ def Client(*a, **kw): 'Retrieving ERA5 data requires cdsapi to be installed.') -def _extract_metadata_from_dataset(ds): - metadata = {} - for v in list(ds.variables): - metadata[v] = { - 'name': ds[v].name, - 'long_name': ds[v].long_name} - if v.lower() != 'time': - metadata[v]['units'] = ds[v].units - metadata['dims'] = dict(ds.dims) - metadata.update(ds.attrs) # add arbitrary metadata - return metadata - - # The returned data uses shortNames, whereas the request requires variable # names according to the CDS convention - passing shortNames results in an # "Ambiguous" error being raised @@ -200,7 +189,7 @@ def get_era5(latitude, longitude, start, end, api_key=None, .. [6] `Climate Data Storage user registration `_ """ # noqa: E501 - cds_client = cdsapi.Client(url=CDSAPI_URL, key=api_key) + cds_client = cdsapi.Client(url=CDSAPI_URL, key=api_key, verify=1) # Area is selected by a box made by the four coordinates: [N, W, S, E] try: @@ -274,6 +263,7 @@ def read_era5(filename, output_format=None, map_variables=True): else: ds = xr.open_dataset(filename) + ds = _convert_C_to_K_in_dataset(ds) metadata = _extract_metadata_from_dataset(ds) if map_variables: @@ -285,8 +275,10 @@ def read_era5(filename, output_format=None, map_variables=True): (output_format is None) & (ds['latitude'].size == 1) & (ds['longitude'].size == 1)): data = ds.to_dataframe() + # Localize timezone to UTC + data.index = data.index.set_levels(data.index.get_level_values('time').tz_localize('utc'), 'time') # noqa: E501 if (ds['latitude'].size == 1) & (ds['longitude'].size == 1): - data.droplevel(['latitude', 'longitude']) + data = data.droplevel(['latitude', 'longitude']) return data, metadata else: return ds, metadata diff --git a/pvlib/tests/iotools/test_era5.py b/pvlib/tests/iotools/test_era5.py index 5ce9c06bc8..bac6c3daac 100644 --- a/pvlib/tests/iotools/test_era5.py +++ b/pvlib/tests/iotools/test_era5.py @@ -22,7 +22,7 @@ def cds_api_key(): @pytest.fixture def expected_index(): - index = pd.date_range('2020-1-1', freq='1h', periods=8832) + index = pd.date_range('2020-1-1', freq='1h', periods=8832, tz='UTC') index.name = 'time' return index @@ -50,6 +50,9 @@ def test_read_era5(expected_index, expected_columns): 'long_name': 'Mean surface downward short-wave radiation flux', 'units': 'W m**-2'} assert 'dims' in meta.keys() + # Test conversion of K to C + assert meta['t2m']['units'] == 'C' + assert np.isclose(data['t2m'].iloc[0], 2.8150635) # temperature in deg C @requires_xarray @@ -61,7 +64,7 @@ def test_read_era5_variable_mapped(expected_index, expected_columns_mapped): @requires_xarray -def test_read_era5_output_format(expected_index, expected_columns_mapped): +def test_read_era5_output_format(): import xarray as xr data, meta = read_era5(DATA_DIR / 'era5_testfile.nc', output_format='dataset') diff --git a/pvlib/tools.py b/pvlib/tools.py index eef80a3b37..18bb9ae30c 100644 --- a/pvlib/tools.py +++ b/pvlib/tools.py @@ -344,3 +344,52 @@ def _golden_sect_DataFrame(params, VL, VH, func): raise Exception("EXCEPTION:iterations exceeded maximum (50)") return func(df, 'V1'), df['V1'] + + +def _extract_metadata_from_dataset(ds): + """ + Generate a dictionary of metadata from an xarray dataset. + + Parameters + ---------- + ds : dataset + dataset containing time series data. + + Returns + ------- + metadata : dict + Dictionary containing metadata. + """ + metadata = {} + for v in list(ds.variables): + metadata[v] = { + 'name': ds[v].name, + 'long_name': ds[v].long_name} + if 'units' in ds[v].attrs: + metadata[v]['units'] = ds[v].units + metadata['dims'] = dict(ds.dims) + metadata.update(ds.attrs) # add arbitrary metadata + return metadata + + +def _convert_C_to_K_in_dataset(ds): + """ + Convert all variables in an xarray dataset that have the unit Kelvin to + degrees Celsius. + + Parameters + ---------- + ds : dataset + dataset containing time series data. + + Returns + ------- + ds : dataset + dataset where variables with temperature variables in Celsius + """ + for v in list(ds.variables): + if 'units' in ds[v].attrs: + if 'K' == ds[v].attrs['units']: + ds[v].data = ds[v].data - 273.15 + ds[v].attrs['units'] = 'C' + return ds From 5a00ad54993caf393024bae516bfadf7a3613683 Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Thu, 19 Aug 2021 22:48:07 +0200 Subject: [PATCH 34/40] Reformat imports of non-standard packages --- pvlib/iotools/era5.py | 36 ++++++++++++++---------------------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/pvlib/iotools/era5.py b/pvlib/iotools/era5.py index 398529f82b..bd283cd688 100644 --- a/pvlib/iotools/era5.py +++ b/pvlib/iotools/era5.py @@ -9,28 +9,14 @@ _convert_C_to_K_in_dataset) try: - import xarray as xr + import cdsapi except ImportError: - class xr: - @staticmethod - def open_dataset(*a, **kw): - raise ImportError( - 'Reading ERA5 data requires xarray to be installed.') - - @staticmethod - def open_mfdataset(*a, **kw): - raise ImportError( - 'Reading ERA5 data requires xarray to be installed.') + cdsapi = None try: - import cdsapi + import xarray as xr except ImportError: - class cdsapi: - @staticmethod - def Client(*a, **kw): - raise ImportError( - 'Retrieving ERA5 data requires cdsapi to be installed.') - + xr = None # The returned data uses shortNames, whereas the request requires variable # names according to the CDS convention - passing shortNames results in an @@ -165,8 +151,8 @@ def get_era5(latitude, longitude, start, end, api_key=None, ------- data: DataFrame ERA5 time-series data, fields depend on the requested data. The - returned object is either a pandas DataFrame or an xarray dataset, see - the output_format parameter. + returned object is either a pandas DataFrame or an xarray dataset, + depending on the output_format parameter. metadata: dict Metadata for the time-series. @@ -189,6 +175,9 @@ def get_era5(latitude, longitude, start, end, api_key=None, .. [6] `Climate Data Storage user registration `_ """ # noqa: E501 + if cdsapi is None: + raise ImportError('Retrieving ERA5 data requires cdsapi to be installed.') # noqa: E501 + cds_client = cdsapi.Client(url=CDSAPI_URL, key=api_key, verify=1) # Area is selected by a box made by the four coordinates: [N, W, S, E] @@ -241,8 +230,8 @@ def read_era5(filename, output_format=None, map_variables=True): ------- data: DataFrame ERA5 time-series data, fields depend on the requested data. The - returned object is either a pandas DataFrame or an xarray Dataset, see - the output_format parameter. + returned object is either a pandas DataFrame or an xarray dataset, + depending on the output_format parameter. metadata: dict Metadata for the time-series. @@ -257,6 +246,9 @@ def read_era5(filename, output_format=None, map_variables=True): .. [2] `ERA5 data documentation `_ """ + if xr is None: + raise ImportError('Reading ERA5 data requires xarray to be installed.') + # open multiple-files (mf) requires dask if isinstance(filename, (list, tuple)): ds = xr.open_mfdataset(filename) From 46f38c12303e55ca9645aadbd1fedee897ad14ac Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Fri, 20 Aug 2021 13:25:05 +0200 Subject: [PATCH 35/40] Set quit=True in cds_client and add depdencies in whatsnew --- docs/sphinx/source/whatsnew/v0.9.0.rst | 1 + pvlib/iotools/era5.py | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/sphinx/source/whatsnew/v0.9.0.rst b/docs/sphinx/source/whatsnew/v0.9.0.rst index d2a47d8b22..54358625a4 100644 --- a/docs/sphinx/source/whatsnew/v0.9.0.rst +++ b/docs/sphinx/source/whatsnew/v0.9.0.rst @@ -218,6 +218,7 @@ Documentation Requirements ~~~~~~~~~~~~ * ``dataclasses`` is required for python 3.6 +* xarray, dask, and cdsapi are now optional requirements. (:pull:`1264`) Contributors ~~~~~~~~~~~~ diff --git a/pvlib/iotools/era5.py b/pvlib/iotools/era5.py index bd283cd688..55211c386d 100644 --- a/pvlib/iotools/era5.py +++ b/pvlib/iotools/era5.py @@ -178,7 +178,8 @@ def get_era5(latitude, longitude, start, end, api_key=None, if cdsapi is None: raise ImportError('Retrieving ERA5 data requires cdsapi to be installed.') # noqa: E501 - cds_client = cdsapi.Client(url=CDSAPI_URL, key=api_key, verify=1) + cds_client = cdsapi.Client(url=CDSAPI_URL, key=api_key, + verify=1, quiet=True) # Area is selected by a box made by the four coordinates: [N, W, S, E] try: From cde8a4af1a4f1b1cc05b0b0f66729400a7718d1a Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Fri, 20 Aug 2021 23:55:45 +0200 Subject: [PATCH 36/40] Rename variables before extracting metadata --- pvlib/iotools/era5.py | 8 ++++---- pvlib/tests/iotools/test_era5.py | 2 ++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/pvlib/iotools/era5.py b/pvlib/iotools/era5.py index 55211c386d..10c3a45326 100644 --- a/pvlib/iotools/era5.py +++ b/pvlib/iotools/era5.py @@ -256,20 +256,20 @@ def read_era5(filename, output_format=None, map_variables=True): else: ds = xr.open_dataset(filename) - ds = _convert_C_to_K_in_dataset(ds) - metadata = _extract_metadata_from_dataset(ds) - if map_variables: # Renaming of xarray datasets throws an error if keys are missing ds = ds.rename_vars( {k: v for k, v in ERA5_VARIABLE_MAP.items() if k in list(ds)}) + ds = _convert_C_to_K_in_dataset(ds) + metadata = _extract_metadata_from_dataset(ds) + if (output_format == 'dataframe') or ( (output_format is None) & (ds['latitude'].size == 1) & (ds['longitude'].size == 1)): data = ds.to_dataframe() # Localize timezone to UTC - data.index = data.index.set_levels(data.index.get_level_values('time').tz_localize('utc'), 'time') # noqa: E501 + data.index = data.index.set_levels(data.index.get_level_values('time').tz_localize('utc'), level='time') # noqa: E501 if (ds['latitude'].size == 1) & (ds['longitude'].size == 1): data = data.droplevel(['latitude', 'longitude']) return data, metadata diff --git a/pvlib/tests/iotools/test_era5.py b/pvlib/tests/iotools/test_era5.py index bac6c3daac..bfe2d76bbf 100644 --- a/pvlib/tests/iotools/test_era5.py +++ b/pvlib/tests/iotools/test_era5.py @@ -61,6 +61,8 @@ def test_read_era5_variable_mapped(expected_index, expected_columns_mapped): assert (expected_columns_mapped == data.columns).all() assert_index_equal(data.index, expected_index[:8784]) assert data.notna().all().all() + assert meta['temp_air'] == { + 'name': 'temp_air', 'long_name': '2 metre temperature', 'units': 'C'} @requires_xarray From 3f96eec5063572e4ef14b01292e5b3ff10b5d0b3 Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Fri, 27 Aug 2021 21:16:16 +0200 Subject: [PATCH 37/40] Change file_location to file_url and remove lat/lon offset --- pvlib/iotools/era5.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pvlib/iotools/era5.py b/pvlib/iotools/era5.py index 10c3a45326..88ca0ef614 100644 --- a/pvlib/iotools/era5.py +++ b/pvlib/iotools/era5.py @@ -185,8 +185,7 @@ def get_era5(latitude, longitude, start, end, api_key=None, try: area = [latitude[1], longitude[0], latitude[0], longitude[1]] except TypeError: - area = [latitude+0.005, longitude-0.005, - latitude-0.005, longitude+0.005] + area = [latitude, longitude, latitude, longitude] params = { 'product_type': product_type, @@ -197,11 +196,12 @@ def get_era5(latitude, longitude, start, end, api_key=None, 'area': area, 'format': 'netcdf'} - # Retrieve remote path to the file - file_location = cds_client.retrieve(dataset, params) + # Retrieve request url + request = cds_client.retrieve(dataset, params) + file_url = request.location # Load file into memory - with requests.get(file_location.location) as res: + with requests.get(file_url) as res: # Save the file locally if save_path has been specified if save_path is not None: From 5db2fef0fadfc381c2475644be14b267b58dd44e Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Fri, 27 Aug 2021 21:30:40 +0200 Subject: [PATCH 38/40] Remove has_tables from conftest.py --- pvlib/tests/conftest.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/pvlib/tests/conftest.py b/pvlib/tests/conftest.py index c16adcdaef..149e3c820a 100644 --- a/pvlib/tests/conftest.py +++ b/pvlib/tests/conftest.py @@ -125,15 +125,6 @@ def assert_frame_equal(left, right, **kwargs): not has_xarray, reason='requires xarray') -try: - import tables - has_tables = True -except ImportError: - has_tables = False - -requires_tables = pytest.mark.skipif(not has_tables, reason='requires tables') - - try: import ephem has_ephem = True From 6534c66ab8e5f31067d1a3e222b2528b185bb67d Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Fri, 27 Aug 2021 21:32:12 +0200 Subject: [PATCH 39/40] Revert "Merge branch 'era5' of https://github.com/AdamRJensen/pvlib-python into era5" This reverts commit f6443fcd1c3dea2148e07f84d7d5eab2dcd19bfe, reversing changes made to 5db2fef0fadfc381c2475644be14b267b58dd44e. --- README.md | 32 +++--- azure-pipelines.yml | 2 +- ci/azure/posix_no_39.yml | 39 -------- ci/requirements-py36-min.yml | 2 - ci/requirements-py36.yml | 1 - ci/requirements-py37.yml | 1 - .../_images/pvlib_powered_logo_horiz.png | Bin 127851 -> 0 bytes .../_images/pvlib_powered_logo_vert.png | Bin 111495 -> 0 bytes docs/sphinx/source/index.rst | 18 +--- docs/sphinx/source/introtutorial.rst | 15 ++- docs/sphinx/source/timetimezones.rst | 4 +- docs/sphinx/source/whatsnew/v0.9.0.rst | 30 +----- pvlib/clearsky.py | 8 +- pvlib/forecast.py | 15 +-- pvlib/iotools/bsrn.py | 7 +- pvlib/iotools/ecmwf_macc.py | 28 +++--- pvlib/iotools/psm3.py | 68 +++++-------- pvlib/iotools/pvgis.py | 92 ++++++------------ pvlib/iotools/sodapro.py | 14 +-- pvlib/ivtools/sde.py | 2 +- pvlib/location.py | 6 +- pvlib/pvsystem.py | 13 ++- pvlib/tests/iotools/test_psm3.py | 38 ++++---- pvlib/tests/iotools/test_pvgis.py | 85 +++++----------- pvlib/tests/test_clearsky.py | 9 +- pvlib/tests/test_location.py | 3 +- pvlib/tests/test_modelchain.py | 8 +- pvlib/tests/test_tracking.py | 15 --- pvlib/tracking.py | 4 +- setup.py | 6 +- 30 files changed, 197 insertions(+), 368 deletions(-) delete mode 100644 ci/azure/posix_no_39.yml delete mode 100644 docs/sphinx/source/_images/pvlib_powered_logo_horiz.png delete mode 100644 docs/sphinx/source/_images/pvlib_powered_logo_vert.png diff --git a/README.md b/README.md index 2911388d29..941906c247 100644 --- a/README.md +++ b/README.md @@ -111,24 +111,11 @@ Please see the [Contributing page](http://pvlib-python.readthedocs.io/en/stable/ The long-term success of pvlib-python requires substantial community support. -Citing -====== - -If you use pvlib-python in a published work, please cite: - - William F. Holmgren, Clifford W. Hansen, and Mark A. Mikofski. - "pvlib python: a python package for modeling solar energy systems." - Journal of Open Source Software, 3(29), 884, (2018). - https://doi.org/10.21105/joss.00884 - -Please also cite the DOI corresponding to the specific version of -pvlib-python that you used. pvlib-python DOIs are listed at -[Zenodo.org](https://zenodo.org/search?page=1&size=20&q=conceptrecid:593284&all_versions&sort=-version) +License +======= -If you use pvlib-python in a commercial or publicly-available application, please -consider displaying one of the "powered by pvlib" logos: +BSD 3-clause - Getting support =============== @@ -146,12 +133,19 @@ change something about pvlib, then please make an issue on our [GitHub issues page](https://github.com/pvlib/pvlib-python/issues). +Citing +====== -License -======= +If you use pvlib-python in a published work, please cite: -BSD 3-clause. + William F. Holmgren, Clifford W. Hansen, and Mark A. Mikofski. + "pvlib python: a python package for modeling solar energy systems." + Journal of Open Source Software, 3(29), 884, (2018). + https://doi.org/10.21105/joss.00884 +Please also cite the DOI corresponding to the specific version of +pvlib-python that you used. pvlib-python DOIs are listed at +[Zenodo.org](https://zenodo.org/search?page=1&size=20&q=conceptrecid:593284&all_versions&sort=-version) NumFOCUS ======== diff --git a/azure-pipelines.yml b/azure-pipelines.yml index ec594f152b..005f3fa3c6 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -12,7 +12,7 @@ jobs: vmImage: ubuntu-16.04 -- template: ci/azure/posix_no_39.yml +- template: ci/azure/posix.yml parameters: name: Test_bare_macOS vmImage: macOS-10.14 diff --git a/ci/azure/posix_no_39.yml b/ci/azure/posix_no_39.yml deleted file mode 100644 index 16966cebef..0000000000 --- a/ci/azure/posix_no_39.yml +++ /dev/null @@ -1,39 +0,0 @@ -parameters: - name: '' - vmImage: '' - -jobs: -- job: ${{ parameters.name }} - pool: - vmImage: ${{ parameters.vmImage }} - strategy: - matrix: - Python36: - python.version: '3.6' - Python37: - python.version: '3.7' - Python38: - python.version: '3.8' - - steps: - - task: UsePythonVersion@0 - inputs: - versionSpec: '$(python.version)' - - - script: | - pip install pytest pytest-cov pytest-mock requests-mock pytest-timeout pytest-azurepipelines pytest-rerunfailures pytest-remotedata - pip install -e . - pytest pvlib --junitxml=junit/test-results.xml --cov=com --cov-report=xml --cov-report=html - displayName: 'Test with pytest' - - - task: PublishTestResults@2 - condition: succeededOrFailed() - inputs: - testResultsFiles: '**/test-*.xml' - testRunTitle: 'Publish test results for Python $(python.version)' - - - task: PublishCodeCoverageResults@1 - inputs: - codeCoverageTool: Cobertura - summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml' - reportDirectory: '$(System.DefaultWorkingDirectory)/**/htmlcov' diff --git a/ci/requirements-py36-min.yml b/ci/requirements-py36-min.yml index efcb166e68..84adcb360d 100644 --- a/ci/requirements-py36-min.yml +++ b/ci/requirements-py36-min.yml @@ -5,7 +5,6 @@ dependencies: - coveralls - nose - pip - - pytables # tables when using pip+PyPI - pytest - pytest-cov - pytest-mock @@ -21,4 +20,3 @@ dependencies: - pytest-rerunfailures # conda version is >3.6 - pytest-remotedata # conda package is 0.3.0, needs > 0.3.1 - requests-mock - - numexpr==2.6.2 # needed for tables, but newest version is not compatible with numpy 1.12 \ No newline at end of file diff --git a/ci/requirements-py36.yml b/ci/requirements-py36.yml index b668483806..5dfd44c8f1 100644 --- a/ci/requirements-py36.yml +++ b/ci/requirements-py36.yml @@ -3,7 +3,6 @@ channels: - defaults - conda-forge dependencies: - - blosc=1.14.3 # newest version breaks tables (pytables) on windows - cdsapi - coveralls - cython diff --git a/ci/requirements-py37.yml b/ci/requirements-py37.yml index e1dd5c929d..af45eefda0 100644 --- a/ci/requirements-py37.yml +++ b/ci/requirements-py37.yml @@ -3,7 +3,6 @@ channels: - defaults - conda-forge dependencies: - - blosc=1.14.3 # newest version breaks tables (pytables) on windows - cdsapi - coveralls - cython diff --git a/docs/sphinx/source/_images/pvlib_powered_logo_horiz.png b/docs/sphinx/source/_images/pvlib_powered_logo_horiz.png deleted file mode 100644 index 71dd1d35425bd97eb09855b8cb53ebfc26da6bda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 127851 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
  • Z*lc%Ny{dWi3Qm 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□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 NPDWWe|Gu%`{{d>bs!ad@ diff --git a/docs/sphinx/source/_images/pvlib_powered_logo_vert.png b/docs/sphinx/source/_images/pvlib_powered_logo_vert.png deleted file mode 100644 index f23697144a493057c428be97901028254f967b26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111495 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%0DBSe9QwC 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 diff --git a/docs/sphinx/source/index.rst b/docs/sphinx/source/index.rst index c2fe9ff106..1717ec233f 100644 --- a/docs/sphinx/source/index.rst +++ b/docs/sphinx/source/index.rst @@ -9,7 +9,8 @@ functions and classes for simulating the performance of photovoltaic energy systems. pvlib python was originally ported from the PVLIB MATLAB toolbox developed at Sandia National Laboratories and it implements many of the models and methods developed at the Labs. More information on -Sandia Labs PV performance modeling programs can be found at the `PVPMC `_. We collaborate with the PVLIB MATLAB project, +Sandia Labs PV performance modeling programs can be found at +https://pvpmc.sandia.gov/. We collaborate with the PVLIB MATLAB project, but operate independently of it. The source code for pvlib python is hosted on `github @@ -49,16 +50,6 @@ Please also cite the DOI corresponding to the specific version of pvlib python that you used. pvlib python DOIs are listed at `Zenodo.org `_ -If you use pvlib-python in a commercial or publicly-available -application, please consider displaying one of the "powered by pvlib" -logos: - -.. image:: _images/pvlib_powered_logo_horiz.png - :width: 300 - -.. image:: _images/pvlib_powered_logo_vert.png - :width: 300 - Additional pvlib python publications include: * J. S. Stein, “The photovoltaic performance modeling @@ -82,10 +73,6 @@ Additional pvlib python publications include: "An Open Source Solar Power Forecasting Tool Using PVLIB-Python," in 43rd Photovoltaic Specialists Conference, 2016. -License -======= - -`BSD 3-clause `_. NumFOCUS ======== @@ -96,6 +83,7 @@ pvlib python is a `NumFOCUS Affiliated Project None + target(server, startdate, stopdate, params, filename) -> None Examples -------- @@ -161,12 +161,12 @@ def get_ecmwf_macc(filename, params, start, end, lookup_params=True, params = '/'.join(PARAMS.get(p) for p in params) except TypeError: params = PARAMS.get(params) - startdate = start.strftime('%Y-%m-%d') - enddate = end.strftime('%Y-%m-%d') + startdate = startdate.strftime('%Y-%m-%d') + stopdate = stopdate.strftime('%Y-%m-%d') if not server: server = ECMWFDataServer() t = threading.Thread(target=target, daemon=True, - args=(server, startdate, enddate, params, filename)) + args=(server, startdate, stopdate, params, filename)) t.start() return t @@ -191,8 +191,8 @@ def __init__(self, filename): # time resolution in hours self.time_size = self.data.dimensions['time'].size self.start_time = self.data['time'][0] - self.end_time = self.data['time'][-1] - self.time_range = self.end_time - self.start_time + self.stop_time = self.data['time'][-1] + self.time_range = self.stop_time - self.start_time self.delta_time = self.time_range / (self.time_size - 1) def get_nearest_indices(self, latitude, longitude): @@ -281,7 +281,7 @@ def read_ecmwf_macc(filename, latitude, longitude, utc_time_range=None): longitude : float longitude in degrees utc_time_range : sequence of datetime.datetime - pair of start and end naive or UTC date-times + pair of start and stop naive or UTC date-times Returns ------- @@ -295,9 +295,9 @@ def read_ecmwf_macc(filename, latitude, longitude, utc_time_range=None): if utc_time_range: start_idx = netCDF4.date2index( utc_time_range[0], nctime, select='before') - end_idx = netCDF4.date2index( + stop_idx = netCDF4.date2index( utc_time_range[-1], nctime, select='after') - time_slice = slice(start_idx, end_idx + 1) + time_slice = slice(start_idx, stop_idx + 1) else: time_slice = slice(0, ecmwf_macc.time_size) times = netCDF4.num2date(nctime[time_slice], nctime.units) diff --git a/pvlib/iotools/psm3.py b/pvlib/iotools/psm3.py index 44fba674b1..758884160a 100644 --- a/pvlib/iotools/psm3.py +++ b/pvlib/iotools/psm3.py @@ -28,11 +28,6 @@ def get_psm3(latitude, longitude, api_key, email, names='tmy', interval=60, Retrieve NSRDB PSM3 timeseries weather data from the PSM3 API. The NSRDB is described in [1]_ and the PSM3 API is described in [2]_, [3]_, and [4]_. - .. versionchanged:: 0.9.0 - The function now returns a tuple where the first element is a dataframe - and the second element is a dictionary containing metadata. Previous - versions of this function had the return values switched. - Parameters ---------- latitude : float or int @@ -66,11 +61,11 @@ def get_psm3(latitude, longitude, api_key, email, names='tmy', interval=60, Returns ------- - data : pandas.DataFrame - timeseries data from NREL PSM3 - metadata : dict + headers : dict metadata from NREL PSM3 about the record, see :func:`pvlib.iotools.parse_psm3` for fields + data : pandas.DataFrame + timeseries data from NREL PSM3 Raises ------ @@ -175,11 +170,6 @@ def parse_psm3(fbuf): Parse an NSRDB PSM3 weather file (formatted as SAM CSV). The NSRDB is described in [1]_ and the SAM CSV format is described in [2]_. - .. versionchanged:: 0.9.0 - The function now returns a tuple where the first element is a dataframe - and the second element is a dictionary containing metadata. Previous - versions of this function had the return values switched. - Parameters ---------- fbuf: file-like object @@ -187,18 +177,15 @@ def parse_psm3(fbuf): Returns ------- + headers : dict + metadata from NREL PSM3 about the record, see notes for fields data : pandas.DataFrame timeseries data from NREL PSM3 - metadata : dict - metadata from NREL PSM3 about the record, see notes for fields Notes ----- - The return is a tuple with two items. The first item is a dataframe with - the PSM3 timeseries data. - - The second item is a dictionary with metadata from NREL PSM3 about the - record containing the following fields: + The return is a tuple with two items. The first item is a header with + metadata from NREL PSM3 about the record containing the following fields: * Source * Location ID @@ -247,11 +234,13 @@ def parse_psm3(fbuf): * Surface Albedo Units * Version + The second item is a dataframe with the PSM3 timeseries data. + Examples -------- >>> # Read a local PSM3 file: >>> with open(filename, 'r') as f: # doctest: +SKIP - ... df, metadata = iotools.parse_psm3(f) # doctest: +SKIP + ... metadata, df = iotools.parse_psm3(f) # doctest: +SKIP See Also -------- @@ -265,17 +254,17 @@ def parse_psm3(fbuf): `_ """ # The first 2 lines of the response are headers with metadata - metadata_fields = fbuf.readline().split(',') - metadata_fields[-1] = metadata_fields[-1].strip() # strip trailing newline - metadata_values = fbuf.readline().split(',') - metadata_values[-1] = metadata_values[-1].strip() # strip trailing newline - metadata = dict(zip(metadata_fields, metadata_values)) - # the response is all strings, so set some metadata types to numbers - metadata['Local Time Zone'] = int(metadata['Local Time Zone']) - metadata['Time Zone'] = int(metadata['Time Zone']) - metadata['Latitude'] = float(metadata['Latitude']) - metadata['Longitude'] = float(metadata['Longitude']) - metadata['Elevation'] = int(metadata['Elevation']) + header_fields = fbuf.readline().split(',') + header_fields[-1] = header_fields[-1].strip() # strip trailing newline + header_values = fbuf.readline().split(',') + header_values[-1] = header_values[-1].strip() # strip trailing newline + header = dict(zip(header_fields, header_values)) + # the response is all strings, so set some header types to numbers + header['Local Time Zone'] = int(header['Local Time Zone']) + header['Time Zone'] = int(header['Time Zone']) + header['Latitude'] = float(header['Latitude']) + header['Longitude'] = float(header['Longitude']) + header['Elevation'] = int(header['Elevation']) # get the column names so we can set the dtypes columns = fbuf.readline().split(',') columns[-1] = columns[-1].strip() # strip trailing newline @@ -293,10 +282,10 @@ def parse_psm3(fbuf): dtidx = pd.to_datetime( data[['Year', 'Month', 'Day', 'Hour', 'Minute']]) # in USA all timezones are integers - tz = 'Etc/GMT%+d' % -metadata['Time Zone'] + tz = 'Etc/GMT%+d' % -header['Time Zone'] data.index = pd.DatetimeIndex(dtidx).tz_localize(tz) - return data, metadata + return header, data def read_psm3(filename): @@ -304,11 +293,6 @@ def read_psm3(filename): Read an NSRDB PSM3 weather file (formatted as SAM CSV). The NSRDB is described in [1]_ and the SAM CSV format is described in [2]_. - .. versionchanged:: 0.9.0 - The function now returns a tuple where the first element is a dataframe - and the second element is a dictionary containing metadata. Previous - versions of this function had the return values switched. - Parameters ---------- filename: str @@ -316,11 +300,11 @@ def read_psm3(filename): Returns ------- - data : pandas.DataFrame - timeseries data from NREL PSM3 - metadata : dict + headers : dict metadata from NREL PSM3 about the record, see :func:`pvlib.iotools.parse_psm3` for fields + data : pandas.DataFrame + timeseries data from NREL PSM3 See Also -------- diff --git a/pvlib/iotools/pvgis.py b/pvlib/iotools/pvgis.py index 3bb2f977c6..d43d4db87e 100644 --- a/pvlib/iotools/pvgis.py +++ b/pvlib/iotools/pvgis.py @@ -20,8 +20,6 @@ import requests import pandas as pd from pvlib.iotools import read_epw, parse_epw -import warnings -from pvlib._deprecation import pvlibDeprecationWarning URL = 'https://re.jrc.ec.europa.eu/api/' @@ -365,19 +363,19 @@ def read_pvgis_hourly(filename, pvgis_format=None, map_variables=True): raise ValueError(err_msg) -def get_pvgis_tmy(latitude, longitude, outputformat='json', usehorizon=True, +def get_pvgis_tmy(lat, lon, outputformat='json', usehorizon=True, userhorizon=None, startyear=None, endyear=None, url=URL, - map_variables=None, timeout=30): + timeout=30): """ Get TMY data from PVGIS. For more information see the PVGIS [1]_ TMY tool documentation [2]_. Parameters ---------- - latitude : float + lat : float Latitude in degrees north - longitude : float - Longitude in degrees east + lon : float + Longitude in dgrees east outputformat : str, default 'json' Must be in ``['csv', 'basic', 'epw', 'json']``. See PVGIS TMY tool documentation [2]_ for more info. @@ -394,9 +392,6 @@ def get_pvgis_tmy(latitude, longitude, outputformat='json', usehorizon=True, last year to calculate TMY, must be at least 10 years from first year url : str, default :const:`pvlib.iotools.pvgis.URL` base url of PVGIS API, append ``tmy`` to get TMY endpoint - map_variables: bool - When true, renames columns of the Dataframe to pvlib variable names - where applicable. See variable PVGIS_VARIABLE_MAP. timeout : int, default 30 time in seconds to wait for server response before timeout @@ -408,8 +403,8 @@ def get_pvgis_tmy(latitude, longitude, outputformat='json', usehorizon=True, TMY year for each month, ``None`` for basic and EPW inputs : dict the inputs, ``None`` for basic and EPW - metadata : list or dict - file metadata, ``None`` for basic + meta : list or dict + meta data, ``None`` for basic Raises ------ @@ -431,7 +426,7 @@ def get_pvgis_tmy(latitude, longitude, outputformat='json', usehorizon=True, `_ """ # use requests to format the query string by passing params dictionary - params = {'lat': latitude, 'lon': longitude, 'outputformat': outputformat} + params = {'lat': lat, 'lon': lon, 'outputformat': outputformat} # pvgis only likes 0 for False, and 1 for True, not strings, also the # default for usehorizon is already 1 (ie: True), so only set if False if not usehorizon: @@ -457,34 +452,22 @@ def get_pvgis_tmy(latitude, longitude, outputformat='json', usehorizon=True, data = None, None, None, None if outputformat == 'json': src = res.json() - data, months_selected, inputs, meta = _parse_pvgis_tmy_json(src) + return _parse_pvgis_tmy_json(src) elif outputformat == 'csv': with io.BytesIO(res.content) as src: - data, months_selected, inputs, meta = _parse_pvgis_tmy_csv(src) + data = _parse_pvgis_tmy_csv(src) elif outputformat == 'basic': with io.BytesIO(res.content) as src: - data, months_selected, inputs, meta = _parse_pvgis_tmy_basic(src) + data = _parse_pvgis_tmy_basic(src) elif outputformat == 'epw': with io.StringIO(res.content.decode('utf-8')) as src: data, meta = parse_epw(src) - months_selected, inputs = None, None + data = (data, None, None, meta) else: # this line is never reached because if outputformat is not valid then # the response is HTTP/1.1 400 BAD REQUEST which is handled earlier pass - - if map_variables is None: - warnings.warn( - 'PVGIS variable names will be renamed to pvlib conventions by ' - 'default starting in pvlib 0.10.0. Specify map_variables=True ' - 'to enable that behavior now, or specify map_variables=False ' - 'to hide this warning.', pvlibDeprecationWarning - ) - map_variables = False - if map_variables: - data = data.rename(columns=PVGIS_VARIABLE_MAP) - - return data, months_selected, inputs, meta + return data def _parse_pvgis_tmy_json(src): @@ -538,7 +521,7 @@ def _parse_pvgis_tmy_basic(src): return data, None, None, None -def read_pvgis_tmy(filename, pvgis_format=None, map_variables=None): +def read_pvgis_tmy(filename, pvgis_format=None): """ Read a file downloaded from PVGIS. @@ -554,10 +537,6 @@ def read_pvgis_tmy(filename, pvgis_format=None, map_variables=None): ``outputformat='basic'``, please set `pvgis_format` to ``'basic'``. If `filename` is a buffer, then `pvgis_format` is required and must be in ``['csv', 'epw', 'json', 'basic']``. - map_variables: bool - When true, renames columns of the Dataframe to pvlib variable names - where applicable. See variable PVGIS_VARIABLE_MAP. - Returns ------- @@ -567,8 +546,8 @@ def read_pvgis_tmy(filename, pvgis_format=None, map_variables=None): TMY year for each month, ``None`` for basic and EPW inputs : dict the inputs, ``None`` for basic and EPW - metadata : list or dict - file metadata, ``None`` for basic + meta : list or dict + meta data, ``None`` for basic Raises ------ @@ -591,6 +570,7 @@ def read_pvgis_tmy(filename, pvgis_format=None, map_variables=None): outputformat = Path(filename).suffix[1:].lower() else: outputformat = pvgis_format + # parse the pvgis file based on the output format, either 'epw', 'json', # 'csv', or 'basic' @@ -600,7 +580,7 @@ def read_pvgis_tmy(filename, pvgis_format=None, map_variables=None): data, meta = parse_epw(filename) except AttributeError: # str/path has no .read() attribute data, meta = read_epw(filename) - months_selected, inputs = None, None + return data, None, None, meta # NOTE: json, csv, and basic output formats have parsers defined as private # functions in this module @@ -608,44 +588,30 @@ def read_pvgis_tmy(filename, pvgis_format=None, map_variables=None): # JSON: use Python built-in json module to convert file contents to a # Python dictionary, and pass the dictionary to the _parse_pvgis_tmy_json() # function from this module - elif outputformat == 'json': + if outputformat == 'json': try: src = json.load(filename) except AttributeError: # str/path has no .read() attribute with open(str(filename), 'r') as fbuf: src = json.load(fbuf) - data, months_selected, inputs, meta = _parse_pvgis_tmy_json(src) + return _parse_pvgis_tmy_json(src) # CSV or basic: use the correct parser from this module # eg: _parse_pvgis_tmy_csv() or _parse_pvgist_tmy_basic() - elif outputformat in ['csv', 'basic']: + if outputformat in ['csv', 'basic']: # get the correct parser function for this output format from globals() pvgis_parser = globals()['_parse_pvgis_tmy_{:s}'.format(outputformat)] # NOTE: pvgis_parse() is a pvgis parser function from this module, # either _parse_pvgis_tmy_csv() or _parse_pvgist_tmy_basic() try: - data, months_selected, inputs, meta = pvgis_parser(filename) + pvgis_data = pvgis_parser(filename) except AttributeError: # str/path has no .read() attribute with open(str(filename), 'rb') as fbuf: - data, months_selected, inputs, meta = pvgis_parser(fbuf) - - else: - # raise exception if pvgis format isn't in ['csv','basic','epw','json'] - err_msg = ( - "pvgis format '{:s}' was unknown, must be either 'epw', 'json', " - "'csv', or 'basic'").format(outputformat) - raise ValueError(err_msg) - - if map_variables is None: - warnings.warn( - 'PVGIS variable names will be renamed to pvlib conventions by ' - 'default starting in pvlib 0.10.0. Specify map_variables=True ' - 'to enable that behavior now, or specify map_variables=False ' - 'to hide this warning.', pvlibDeprecationWarning - ) - map_variables = False - if map_variables: - data = data.rename(columns=PVGIS_VARIABLE_MAP) - - return data, months_selected, inputs, meta + pvgis_data = pvgis_parser(fbuf) + return pvgis_data + # raise exception if pvgis format isn't in ['csv', 'basic', 'epw', 'json'] + err_msg = ( + "pvgis format '{:s}' was unknown, must be either 'epw', 'json', 'csv'" + ", or 'basic'").format(outputformat) + raise ValueError(err_msg) diff --git a/pvlib/iotools/sodapro.py b/pvlib/iotools/sodapro.py index 68fa82a396..a27e6f1423 100644 --- a/pvlib/iotools/sodapro.py +++ b/pvlib/iotools/sodapro.py @@ -41,7 +41,7 @@ '0 year 1 month 0 day 0 h 0 min 0 s': '1M'} -def get_cams(latitude, longitude, start, end, email, identifier='mcclear', +def get_cams(start, end, latitude, longitude, email, identifier='mcclear', altitude=None, time_step='1h', time_ref='UT', verbose=False, integrated=False, label=None, map_variables=True, server='www.soda-is.com', timeout=30): @@ -62,19 +62,19 @@ def get_cams(latitude, longitude, start, end, email, identifier='mcclear', Parameters ---------- - latitude: float - in decimal degrees, between -90 and 90, north is positive (ISO 19115) - longitude : float - in decimal degrees, between -180 and 180, east is positive (ISO 19115) start: datetime like First day of the requested period end: datetime like Last day of the requested period + latitude: float + in decimal degrees, between -90 and 90, north is positive (ISO 19115) + longitude : float + in decimal degrees, between -180 and 180, east is positive (ISO 19115) email: str Email address linked to a SoDa account identifier: {'mcclear', 'cams_radiation'} Specify whether to retrieve CAMS Radiation or McClear parameters - altitude: float, optional + altitude: float, default: None Altitude in meters. If None, then the altitude is determined from the NASA SRTM database time_step: str, {'1min', '15min', '1h', '1d', '1M'}, default: '1h' @@ -96,7 +96,7 @@ def get_cams(latitude, longitude, start, end, email, identifier='mcclear', where applicable. See variable CAMS_VARIABLE_MAP. server: str, default: 'www.soda-is.com' Main server (www.soda-is.com) or backup mirror server (pro.soda-is.com) - timeout : int, default: 30 + timeout : int, default 30 Time in seconds to wait for server response before timeout Returns diff --git a/pvlib/ivtools/sde.py b/pvlib/ivtools/sde.py index dad1add22f..1042a19736 100644 --- a/pvlib/ivtools/sde.py +++ b/pvlib/ivtools/sde.py @@ -90,7 +90,7 @@ def fit_sandia_simple(voltage, current, v_oc=None, i_sc=None, v_mp_i_mp=None, I = I_{L} - I_{0} (\exp \frac{V + I R_{s}}{nNsVth} - 1) - \frac{V + I R_{s}}{R_{sh}} - See :py:func:`pvlib.pvsystem.singlediode` for definition of the parameters. + See :py:func:`pvsystem.singlediode` for definition of the parameters. The extraction method [2]_ proceeds in six steps. diff --git a/pvlib/location.py b/pvlib/location.py index 97767a5801..93d54fcd9e 100644 --- a/pvlib/location.py +++ b/pvlib/location.py @@ -164,7 +164,7 @@ def from_epw(cls, metadata, data=None, **kwargs): def get_solarposition(self, times, pressure=None, temperature=12, **kwargs): """ - Uses the :py:func:`pvlib.solarposition.get_solarposition` function + Uses the :py:func:`solarposition.get_solarposition` function to calculate the solar zenith, azimuth, etc. at this location. Parameters @@ -173,11 +173,11 @@ def get_solarposition(self, times, pressure=None, temperature=12, Must be localized or UTC will be assumed. pressure : None, float, or array-like, default None If None, pressure will be calculated using - :py:func:`pvlib.atmosphere.alt2pres` and ``self.altitude``. + :py:func:`atmosphere.alt2pres` and ``self.altitude``. temperature : None, float, or array-like, default 12 kwargs - passed to :py:func:`pvlib.solarposition.get_solarposition` + passed to :py:func:`solarposition.get_solarposition` Returns ------- diff --git a/pvlib/pvsystem.py b/pvlib/pvsystem.py index 6bb89f34a3..eb288978d4 100644 --- a/pvlib/pvsystem.py +++ b/pvlib/pvsystem.py @@ -627,7 +627,7 @@ def sapm(self, effective_irradiance, temp_cell): @deprecated('0.9', alternative='PVSystem.get_cell_temperature', removal='0.10.0') def sapm_celltemp(self, poa_global, temp_air, wind_speed): - """Uses :py:func:`pvlib.temperature.sapm_cell` to calculate cell + """Uses :py:func:`temperature.sapm_cell` to calculate cell temperatures. Parameters @@ -720,7 +720,7 @@ def sapm_effective_irradiance(self, poa_direct, poa_diffuse, @deprecated('0.9', alternative='PVSystem.get_cell_temperature', removal='0.10.0') def pvsyst_celltemp(self, poa_global, temp_air, wind_speed=1.0): - """Uses :py:func:`pvlib.temperature.pvsyst_cell` to calculate cell + """Uses :py:func:`temperature.pvsyst_cell` to calculate cell temperature. Parameters @@ -756,7 +756,7 @@ def pvsyst_celltemp(self, poa_global, temp_air, wind_speed=1.0): removal='0.10.0') def faiman_celltemp(self, poa_global, temp_air, wind_speed=1.0): """ - Use :py:func:`pvlib.temperature.faiman` to calculate cell temperature. + Use :py:func:`temperature.faiman` to calculate cell temperature. Parameters ---------- @@ -791,7 +791,7 @@ def faiman_celltemp(self, poa_global, temp_air, wind_speed=1.0): removal='0.10.0') def fuentes_celltemp(self, poa_global, temp_air, wind_speed): """ - Use :py:func:`pvlib.temperature.fuentes` to calculate cell temperature. + Use :py:func:`temperature.fuentes` to calculate cell temperature. Parameters ---------- @@ -834,8 +834,7 @@ def fuentes_celltemp(self, poa_global, temp_air, wind_speed): def noct_sam_celltemp(self, poa_global, temp_air, wind_speed, effective_irradiance=None): """ - Use :py:func:`pvlib.temperature.noct_sam` to calculate cell - temperature. + Use :py:func:`temperature.noct_sam` to calculate cell temperature. Parameters ---------- @@ -872,7 +871,7 @@ def noct_sam_celltemp(self, poa_global, temp_air, wind_speed, @_unwrap_single_value def first_solar_spectral_loss(self, pw, airmass_absolute): """ - Use :py:func:`pvlib.atmosphere.first_solar_spectral_correction` to + Use the :py:func:`first_solar_spectral_correction` function to calculate the spectral loss modifier. The model coefficients are specific to the module's cell type, and are determined by searching for one of the following keys in self.module_parameters (in order): diff --git a/pvlib/tests/iotools/test_psm3.py b/pvlib/tests/iotools/test_psm3.py index 0b02c3c291..ca3a5e3034 100644 --- a/pvlib/tests/iotools/test_psm3.py +++ b/pvlib/tests/iotools/test_psm3.py @@ -17,7 +17,7 @@ YEAR_TEST_DATA_5MIN = DATA_DIR / 'test_psm3_2019_5min.csv' MANUAL_TEST_DATA = DATA_DIR / 'test_read_psm3.csv' LATITUDE, LONGITUDE = 40.5137, -108.5449 -METADATA_FIELDS = [ +HEADER_FIELDS = [ 'Source', 'Location ID', 'City', 'State', 'Country', 'Latitude', 'Longitude', 'Time Zone', 'Elevation', 'Local Time Zone', 'Dew Point Units', 'DHI Units', 'DNI Units', 'GHI Units', @@ -46,7 +46,7 @@ def nrel_api_key(): return demo_key -def assert_psm3_equal(data, metadata, expected): +def assert_psm3_equal(header, data, expected): """check consistency of PSM3 data""" # check datevec columns assert np.allclose(data.Year, expected.Year) @@ -65,48 +65,48 @@ def assert_psm3_equal(data, metadata, expected): assert np.allclose(data['Wind Speed'], expected['Wind Speed']) assert np.allclose(data['Wind Direction'], expected['Wind Direction']) # check header - for mf in METADATA_FIELDS: - assert mf in metadata + for hf in HEADER_FIELDS: + assert hf in header # check timezone - assert (data.index.tzinfo.zone == 'Etc/GMT%+d' % -metadata['Time Zone']) + assert (data.index.tzinfo.zone == 'Etc/GMT%+d' % -header['Time Zone']) @pytest.mark.remote_data @pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) def test_get_psm3_tmy(nrel_api_key): """test get_psm3 with a TMY""" - data, metadata = psm3.get_psm3(LATITUDE, LONGITUDE, nrel_api_key, - PVLIB_EMAIL, names='tmy-2017') + header, data = psm3.get_psm3(LATITUDE, LONGITUDE, nrel_api_key, + PVLIB_EMAIL, names='tmy-2017') expected = pd.read_csv(TMY_TEST_DATA) - assert_psm3_equal(data, metadata, expected) + assert_psm3_equal(header, data, expected) @pytest.mark.remote_data @pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) def test_get_psm3_singleyear(nrel_api_key): """test get_psm3 with a single year""" - data, metadata = psm3.get_psm3(LATITUDE, LONGITUDE, nrel_api_key, - PVLIB_EMAIL, names='2017', interval=30) + header, data = psm3.get_psm3(LATITUDE, LONGITUDE, nrel_api_key, + PVLIB_EMAIL, names='2017', interval=30) expected = pd.read_csv(YEAR_TEST_DATA) - assert_psm3_equal(data, metadata, expected) + assert_psm3_equal(header, data, expected) @pytest.mark.remote_data @pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) def test_get_psm3_5min(nrel_api_key): """test get_psm3 for 5-minute data""" - data, metadata = psm3.get_psm3(LATITUDE, LONGITUDE, nrel_api_key, - PVLIB_EMAIL, names='2019', interval=5) + header, data = psm3.get_psm3(LATITUDE, LONGITUDE, nrel_api_key, + PVLIB_EMAIL, names='2019', interval=5) assert len(data) == 525600/5 first_day = data.loc['2019-01-01'] expected = pd.read_csv(YEAR_TEST_DATA_5MIN) - assert_psm3_equal(first_day, metadata, expected) + assert_psm3_equal(header, first_day, expected) @pytest.mark.remote_data @pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) def test_get_psm3_check_leap_day(nrel_api_key): - data_2012, _ = psm3.get_psm3(LATITUDE, LONGITUDE, nrel_api_key, + _, data_2012 = psm3.get_psm3(LATITUDE, LONGITUDE, nrel_api_key, PVLIB_EMAIL, names="2012", interval=60, leap_day=True) assert len(data_2012) == (8760 + 24) @@ -149,13 +149,13 @@ def io_input(request): def test_parse_psm3(io_input): """test parse_psm3""" - data, metadata = psm3.parse_psm3(io_input) + header, data = psm3.parse_psm3(io_input) expected = pd.read_csv(YEAR_TEST_DATA) - assert_psm3_equal(data, metadata, expected) + assert_psm3_equal(header, data, expected) def test_read_psm3(): """test read_psm3""" - data, metadata = psm3.read_psm3(MANUAL_TEST_DATA) + header, data = psm3.read_psm3(MANUAL_TEST_DATA) expected = pd.read_csv(YEAR_TEST_DATA) - assert_psm3_equal(data, metadata, expected) + assert_psm3_equal(header, data, expected) diff --git a/pvlib/tests/iotools/test_pvgis.py b/pvlib/tests/iotools/test_pvgis.py index 5a097d25e5..fc0638ed74 100644 --- a/pvlib/tests/iotools/test_pvgis.py +++ b/pvlib/tests/iotools/test_pvgis.py @@ -9,9 +9,7 @@ import requests from pvlib.iotools import get_pvgis_tmy, read_pvgis_tmy from pvlib.iotools import get_pvgis_hourly, read_pvgis_hourly -from ..conftest import (DATA_DIR, RERUNS, RERUNS_DELAY, assert_frame_equal, - fail_on_pvlib_version) -from pvlib._deprecation import pvlibDeprecationWarning +from ..conftest import DATA_DIR, RERUNS, RERUNS_DELAY, assert_frame_equal # PVGIS Hourly tests @@ -358,28 +356,11 @@ def csv_meta(meta_expected): in meta_expected['outputs']['tmy_hourly']['variables'].items()] -@pytest.fixture -def pvgis_tmy_mapped_columns(): - return ['temp_air', 'relative_humidity', 'ghi', 'dni', 'dhi', 'IR(h)', - 'wind_speed', 'wind_direction', 'pressure'] - - -@fail_on_pvlib_version('0.10') -@pytest.mark.remote_data -@pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) -def test_pvgis_tmy_variable_map_deprecating_warning_0_10(): - with pytest.warns(pvlibDeprecationWarning, match='names will be renamed'): - _ = get_pvgis_tmy(45, 8) - with pytest.warns(pvlibDeprecationWarning, match='names will be renamed'): - fn = DATA_DIR / 'tmy_45.000_8.000_2005_2016.epw' - _ = read_pvgis_tmy(fn) - - @pytest.mark.remote_data @pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) def test_get_pvgis_tmy(expected, month_year_expected, inputs_expected, meta_expected): - pvgis_data = get_pvgis_tmy(45, 8, map_variables=False) + pvgis_data = get_pvgis_tmy(45, 8) _compare_pvgis_tmy_json(expected, month_year_expected, inputs_expected, meta_expected, pvgis_data) @@ -412,28 +393,26 @@ def _compare_pvgis_tmy_json(expected, month_year_expected, inputs_expected, @pytest.mark.remote_data @pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) def test_get_pvgis_tmy_kwargs(userhorizon_expected): - _, _, inputs, _ = get_pvgis_tmy(45, 8, usehorizon=False, - map_variables=False) + _, _, inputs, _ = get_pvgis_tmy(45, 8, usehorizon=False) assert inputs['meteo_data']['use_horizon'] is False data, _, _, _ = get_pvgis_tmy( - 45, 8, userhorizon=[0, 10, 20, 30, 40, 15, 25, 5], map_variables=False) + 45, 8, userhorizon=[0, 10, 20, 30, 40, 15, 25, 5]) assert np.allclose( data['G(h)'], userhorizon_expected['G(h)'].values) assert np.allclose( data['Gb(n)'], userhorizon_expected['Gb(n)'].values) assert np.allclose( data['Gd(h)'], userhorizon_expected['Gd(h)'].values) - _, _, inputs, _ = get_pvgis_tmy(45, 8, startyear=2005, map_variables=False) + _, _, inputs, _ = get_pvgis_tmy(45, 8, startyear=2005) assert inputs['meteo_data']['year_min'] == 2005 - _, _, inputs, _ = get_pvgis_tmy(45, 8, endyear=2016, map_variables=False) + _, _, inputs, _ = get_pvgis_tmy(45, 8, endyear=2016) assert inputs['meteo_data']['year_max'] == 2016 @pytest.mark.remote_data @pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) def test_get_pvgis_tmy_basic(expected, meta_expected): - pvgis_data = get_pvgis_tmy(45, 8, outputformat='basic', - map_variables=False) + pvgis_data = get_pvgis_tmy(45, 8, outputformat='basic') _compare_pvgis_tmy_basic(expected, meta_expected, pvgis_data) @@ -448,7 +427,7 @@ def _compare_pvgis_tmy_basic(expected, meta_expected, pvgis_data): @pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) def test_get_pvgis_tmy_csv(expected, month_year_expected, inputs_expected, meta_expected, csv_meta): - pvgis_data = get_pvgis_tmy(45, 8, outputformat='csv', map_variables=False) + pvgis_data = get_pvgis_tmy(45, 8, outputformat='csv') _compare_pvgis_tmy_csv(expected, month_year_expected, inputs_expected, meta_expected, csv_meta, pvgis_data) @@ -479,7 +458,7 @@ def _compare_pvgis_tmy_csv(expected, month_year_expected, inputs_expected, @pytest.mark.remote_data @pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) def test_get_pvgis_tmy_epw(expected, epw_meta): - pvgis_data = get_pvgis_tmy(45, 8, outputformat='epw', map_variables=False) + pvgis_data = get_pvgis_tmy(45, 8, outputformat='epw') _compare_pvgis_tmy_epw(expected, epw_meta, pvgis_data) @@ -502,33 +481,19 @@ def test_get_pvgis_tmy_error(): get_pvgis_tmy(45, 8, url='https://re.jrc.ec.europa.eu/') -@pytest.mark.remote_data -@pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) -def test_get_pvgis_map_variables(pvgis_tmy_mapped_columns): - actual, _, _, _ = get_pvgis_tmy(45, 8, map_variables=True) - assert all([c in pvgis_tmy_mapped_columns for c in actual.columns]) - - -def test_read_pvgis_tmy_map_variables(pvgis_tmy_mapped_columns): - fn = DATA_DIR / 'tmy_45.000_8.000_2005_2016.json' - actual, _, _, _ = read_pvgis_tmy(fn, map_variables=True) - assert all([c in pvgis_tmy_mapped_columns for c in actual.columns]) - - def test_read_pvgis_tmy_json(expected, month_year_expected, inputs_expected, meta_expected): fn = DATA_DIR / 'tmy_45.000_8.000_2005_2016.json' # infer outputformat from file extensions - pvgis_data = read_pvgis_tmy(fn, map_variables=False) + pvgis_data = read_pvgis_tmy(fn) _compare_pvgis_tmy_json(expected, month_year_expected, inputs_expected, meta_expected, pvgis_data) # explicit pvgis outputformat - pvgis_data = read_pvgis_tmy(fn, pvgis_format='json', map_variables=False) + pvgis_data = read_pvgis_tmy(fn, pvgis_format='json') _compare_pvgis_tmy_json(expected, month_year_expected, inputs_expected, meta_expected, pvgis_data) with fn.open('r') as fbuf: - pvgis_data = read_pvgis_tmy(fbuf, pvgis_format='json', - map_variables=False) + pvgis_data = read_pvgis_tmy(fbuf, pvgis_format='json') _compare_pvgis_tmy_json(expected, month_year_expected, inputs_expected, meta_expected, pvgis_data) @@ -536,14 +501,13 @@ def test_read_pvgis_tmy_json(expected, month_year_expected, inputs_expected, def test_read_pvgis_tmy_epw(expected, epw_meta): fn = DATA_DIR / 'tmy_45.000_8.000_2005_2016.epw' # infer outputformat from file extensions - pvgis_data = read_pvgis_tmy(fn, map_variables=False) + pvgis_data = read_pvgis_tmy(fn) _compare_pvgis_tmy_epw(expected, epw_meta, pvgis_data) # explicit pvgis outputformat - pvgis_data = read_pvgis_tmy(fn, pvgis_format='epw', map_variables=False) + pvgis_data = read_pvgis_tmy(fn, pvgis_format='epw') _compare_pvgis_tmy_epw(expected, epw_meta, pvgis_data) with fn.open('r') as fbuf: - pvgis_data = read_pvgis_tmy(fbuf, pvgis_format='epw', - map_variables=False) + pvgis_data = read_pvgis_tmy(fbuf, pvgis_format='epw') _compare_pvgis_tmy_epw(expected, epw_meta, pvgis_data) @@ -551,16 +515,15 @@ def test_read_pvgis_tmy_csv(expected, month_year_expected, inputs_expected, meta_expected, csv_meta): fn = DATA_DIR / 'tmy_45.000_8.000_2005_2016.csv' # infer outputformat from file extensions - pvgis_data = read_pvgis_tmy(fn, map_variables=False) + pvgis_data = read_pvgis_tmy(fn) _compare_pvgis_tmy_csv(expected, month_year_expected, inputs_expected, meta_expected, csv_meta, pvgis_data) # explicit pvgis outputformat - pvgis_data = read_pvgis_tmy(fn, pvgis_format='csv', map_variables=False) + pvgis_data = read_pvgis_tmy(fn, pvgis_format='csv') _compare_pvgis_tmy_csv(expected, month_year_expected, inputs_expected, meta_expected, csv_meta, pvgis_data) with fn.open('rb') as fbuf: - pvgis_data = read_pvgis_tmy(fbuf, pvgis_format='csv', - map_variables=False) + pvgis_data = read_pvgis_tmy(fbuf, pvgis_format='csv') _compare_pvgis_tmy_csv(expected, month_year_expected, inputs_expected, meta_expected, csv_meta, pvgis_data) @@ -569,22 +532,20 @@ def test_read_pvgis_tmy_basic(expected, meta_expected): fn = DATA_DIR / 'tmy_45.000_8.000_2005_2016.txt' # XXX: can't infer outputformat from file extensions for basic with pytest.raises(ValueError, match="pvgis format 'txt' was unknown"): - read_pvgis_tmy(fn, map_variables=False) + read_pvgis_tmy(fn) # explicit pvgis outputformat - pvgis_data = read_pvgis_tmy(fn, pvgis_format='basic', map_variables=False) + pvgis_data = read_pvgis_tmy(fn, pvgis_format='basic') _compare_pvgis_tmy_basic(expected, meta_expected, pvgis_data) with fn.open('rb') as fbuf: - pvgis_data = read_pvgis_tmy(fbuf, pvgis_format='basic', - map_variables=False) + pvgis_data = read_pvgis_tmy(fbuf, pvgis_format='basic') _compare_pvgis_tmy_basic(expected, meta_expected, pvgis_data) # file buffer raises TypeError if passed to pathlib.Path() with pytest.raises(TypeError): - read_pvgis_tmy(fbuf, map_variables=False) + read_pvgis_tmy(fbuf) def test_read_pvgis_tmy_exception(): bad_outputformat = 'bad' err_msg = f"pvgis format '{bad_outputformat:s}' was unknown" with pytest.raises(ValueError, match=err_msg): - read_pvgis_tmy('filename', pvgis_format=bad_outputformat, - map_variables=False) + read_pvgis_tmy('filename', pvgis_format=bad_outputformat) diff --git a/pvlib/tests/test_clearsky.py b/pvlib/tests/test_clearsky.py index 15fc74e383..1e7d89d82d 100644 --- a/pvlib/tests/test_clearsky.py +++ b/pvlib/tests/test_clearsky.py @@ -16,7 +16,7 @@ from pvlib import atmosphere from pvlib import irradiance -from .conftest import DATA_DIR +from .conftest import requires_tables, DATA_DIR def test_ineichen_series(): @@ -189,6 +189,7 @@ def test_ineichen_altitude(): assert_frame_equal(expected, out) +@requires_tables def test_lookup_linke_turbidity(): times = pd.date_range(start='2014-06-24', end='2014-06-25', freq='12h', tz='America/Phoenix') @@ -201,6 +202,7 @@ def test_lookup_linke_turbidity(): assert_series_equal(expected, out) +@requires_tables def test_lookup_linke_turbidity_leapyear(): times = pd.date_range(start='2016-06-24', end='2016-06-25', freq='12h', tz='America/Phoenix') @@ -213,6 +215,7 @@ def test_lookup_linke_turbidity_leapyear(): assert_series_equal(expected, out) +@requires_tables def test_lookup_linke_turbidity_nointerp(): times = pd.date_range(start='2014-06-24', end='2014-06-25', freq='12h', tz='America/Phoenix') @@ -223,6 +226,7 @@ def test_lookup_linke_turbidity_nointerp(): assert_series_equal(expected, out) +@requires_tables def test_lookup_linke_turbidity_months(): times = pd.date_range(start='2014-04-01', end='2014-07-01', freq='1M', tz='America/Phoenix') @@ -233,6 +237,7 @@ def test_lookup_linke_turbidity_months(): assert_series_equal(expected, out) +@requires_tables def test_lookup_linke_turbidity_months_leapyear(): times = pd.date_range(start='2016-04-01', end='2016-07-01', freq='1M', tz='America/Phoenix') @@ -243,6 +248,7 @@ def test_lookup_linke_turbidity_months_leapyear(): assert_series_equal(expected, out) +@requires_tables def test_lookup_linke_turbidity_nointerp_months(): times = pd.date_range(start='2014-04-10', end='2014-07-10', freq='1M', tz='America/Phoenix') @@ -474,6 +480,7 @@ def test_simplified_solis_nans_series(): assert_frame_equal(expected, out) +@requires_tables def test_linke_turbidity_corners(): """Test Linke turbidity corners out of bounds.""" months = pd.DatetimeIndex('%d/1/2016' % (m + 1) for m in range(12)) diff --git a/pvlib/tests/test_location.py b/pvlib/tests/test_location.py index a4b69e5cb2..20a849a667 100644 --- a/pvlib/tests/test_location.py +++ b/pvlib/tests/test_location.py @@ -15,7 +15,7 @@ from pvlib.location import Location from pvlib.solarposition import declination_spencer71 from pvlib.solarposition import equation_of_time_spencer71 -from .conftest import requires_ephem +from .conftest import requires_ephem, requires_tables def test_location_required(): @@ -77,6 +77,7 @@ def times(): freq='3H') +@requires_tables def test_get_clearsky(mocker, times): tus = Location(32.2, -111, 'US/Arizona', 700, 'Tucson') m = mocker.spy(pvlib.clearsky, 'ineichen') diff --git a/pvlib/tests/test_modelchain.py b/pvlib/tests/test_modelchain.py index b42acfa54e..e52bda72bd 100644 --- a/pvlib/tests/test_modelchain.py +++ b/pvlib/tests/test_modelchain.py @@ -13,7 +13,7 @@ from .conftest import assert_series_equal, assert_frame_equal import pytest -from .conftest import fail_on_pvlib_version +from .conftest import fail_on_pvlib_version, requires_tables @pytest.fixture(scope='function') @@ -1778,7 +1778,7 @@ def test_ModelChain_no_extra_kwargs(sapm_dc_snl_ac_system, location): ModelChain(sapm_dc_snl_ac_system, location, arbitrary_kwarg='value') -@fail_on_pvlib_version('0.10') +@fail_on_pvlib_version('1.0') def test_ModelChain_attributes_deprecated_10(sapm_dc_snl_ac_system, location): match = 'Use ModelChain.results' mc = ModelChain(sapm_dc_snl_ac_system, location) @@ -1788,6 +1788,7 @@ def test_ModelChain_attributes_deprecated_10(sapm_dc_snl_ac_system, location): mc.aoi = 5 +@requires_tables def test_basic_chain_alt_az(sam_data, cec_inverter_parameters, sapm_temperature_cs5p_220m): times = pd.date_range(start='20160101 1200-0700', @@ -1809,6 +1810,7 @@ def test_basic_chain_alt_az(sam_data, cec_inverter_parameters, assert_series_equal(ac, expected) +@requires_tables def test_basic_chain_altitude_pressure(sam_data, cec_inverter_parameters, sapm_temperature_cs5p_220m): times = pd.date_range(start='20160101 1200-0700', @@ -1859,6 +1861,7 @@ def test_complete_irradiance_clean_run(sapm_dc_snl_ac_system, location): pd.Series([9, 5], index=times, name='ghi')) +@requires_tables def test_complete_irradiance(sapm_dc_snl_ac_system, location): """Check calculations""" mc = ModelChain(sapm_dc_snl_ac_system, location) @@ -1887,6 +1890,7 @@ def test_complete_irradiance(sapm_dc_snl_ac_system, location): @pytest.mark.filterwarnings("ignore:This function is not safe at the moment") @pytest.mark.parametrize("input_type", [tuple, list]) +@requires_tables def test_complete_irradiance_arrays( sapm_dc_snl_ac_system_same_arrays, location, input_type): """ModelChain.complete_irradiance can accept a tuple of weather diff --git a/pvlib/tests/test_tracking.py b/pvlib/tests/test_tracking.py index 7e51adc956..9a589e403a 100644 --- a/pvlib/tests/test_tracking.py +++ b/pvlib/tests/test_tracking.py @@ -502,18 +502,3 @@ def test_slope_aware_backtracking(): np.testing.assert_allclose( truetracking['tracker_theta'], expected_data['TrueTracking'], rtol=1e-3, atol=1e-3) - - -def test_singleaxis_aoi_gh1221(): - # vertical tracker - loc = pvlib.location.Location(40.1134, -88.3695) - dr = pd.date_range( - start='02-Jun-1998 00:00:00', end='02-Jun-1998 23:55:00', freq='5T', - tz='Etc/GMT+6') - sp = loc.get_solarposition(dr) - tr = pvlib.tracking.singleaxis( - sp['apparent_zenith'], sp['azimuth'], axis_tilt=90, axis_azimuth=180, - max_angle=0.001, backtrack=False) - fixed = pvlib.irradiance.aoi(90, 180, sp['apparent_zenith'], sp['azimuth']) - fixed[np.isnan(tr['aoi'])] = np.nan - assert np.allclose(tr['aoi'], fixed, equal_nan=True) diff --git a/pvlib/tracking.py b/pvlib/tracking.py index 732108dec2..032b35d44a 100644 --- a/pvlib/tracking.py +++ b/pvlib/tracking.py @@ -458,9 +458,7 @@ def singleaxis(apparent_zenith, apparent_azimuth, sun_vec = np.array([xp, yp, zp]) # calculate angle-of-incidence on panel - # TODO: use irradiance.aoi - projection = np.clip(np.sum(sun_vec*panel_norm, axis=0), -1, 1) - aoi = np.degrees(np.arccos(projection)) + aoi = np.degrees(np.arccos(np.abs(np.sum(sun_vec*panel_norm, axis=0)))) # Calculate panel tilt and azimuth in a coordinate system where the panel # tilt is the angle from horizontal, and the panel azimuth is the compass diff --git a/setup.py b/setup.py index 13d8020d7a..9038487ae8 100755 --- a/setup.py +++ b/setup.py @@ -42,8 +42,7 @@ 'pandas >= 0.22.0', 'pytz', 'requests', - 'scipy >= 1.2.0', - 'tables'] + 'scipy >= 1.2.0'] # include dataclasses as a dependency only on python 3.6 if sys.version_info.major == 3 and sys.version_info.minor == 6: @@ -54,8 +53,7 @@ 'pytest-remotedata'] EXTRAS_REQUIRE = { 'optional': ['cython', 'ephem', 'netcdf4', 'nrel-pysam', 'numba', - - 'pvfactors', 'siphon', 'statsmodels', + 'pvfactors', 'siphon', 'statsmodels', 'tables', 'cftime >= 1.1.1', 'xarray', 'dask', 'cdsapi'], 'doc': ['ipython', 'matplotlib', 'sphinx == 3.1.2', 'sphinx_rtd_theme==0.5.0', 'sphinx-gallery', 'docutils == 0.15.2', From 3ae53270ab45743b086db91888ae18622388b04d Mon Sep 17 00:00:00 2001 From: AdamRJensen Date: Fri, 27 Aug 2021 21:50:22 +0200 Subject: [PATCH 40/40] Revert back to 3f96eec --- README.md | 32 +++--- azure-pipelines.yml | 2 +- ci/azure/posix_no_39.yml | 39 ++++++++ ci/requirements-py36-min.yml | 2 + ci/requirements-py36.yml | 1 + ci/requirements-py37.yml | 1 + .../_images/pvlib_powered_logo_horiz.png | Bin 0 -> 127851 bytes .../_images/pvlib_powered_logo_vert.png | Bin 0 -> 111495 bytes docs/sphinx/source/index.rst | 18 +++- docs/sphinx/source/introtutorial.rst | 15 +-- docs/sphinx/source/timetimezones.rst | 4 +- docs/sphinx/source/whatsnew/v0.9.0.rst | 30 +++++- pvlib/clearsky.py | 8 +- pvlib/forecast.py | 15 ++- pvlib/iotools/bsrn.py | 7 +- pvlib/iotools/ecmwf_macc.py | 28 +++--- pvlib/iotools/psm3.py | 68 ++++++++----- pvlib/iotools/pvgis.py | 92 ++++++++++++------ pvlib/iotools/sodapro.py | 14 +-- pvlib/ivtools/sde.py | 2 +- pvlib/location.py | 6 +- pvlib/pvsystem.py | 13 +-- pvlib/tests/iotools/test_psm3.py | 38 ++++---- pvlib/tests/iotools/test_pvgis.py | 85 +++++++++++----- pvlib/tests/test_clearsky.py | 9 +- pvlib/tests/test_location.py | 3 +- pvlib/tests/test_modelchain.py | 8 +- pvlib/tests/test_tracking.py | 15 +++ pvlib/tracking.py | 4 +- setup.py | 6 +- 30 files changed, 368 insertions(+), 197 deletions(-) create mode 100644 ci/azure/posix_no_39.yml create mode 100644 docs/sphinx/source/_images/pvlib_powered_logo_horiz.png create mode 100644 docs/sphinx/source/_images/pvlib_powered_logo_vert.png diff --git a/README.md b/README.md index 941906c247..2911388d29 100644 --- a/README.md +++ b/README.md @@ -111,11 +111,24 @@ Please see the [Contributing page](http://pvlib-python.readthedocs.io/en/stable/ The long-term success of pvlib-python requires substantial community support. -License -======= +Citing +====== + +If you use pvlib-python in a published work, please cite: + + William F. Holmgren, Clifford W. Hansen, and Mark A. Mikofski. + "pvlib python: a python package for modeling solar energy systems." + Journal of Open Source Software, 3(29), 884, (2018). + https://doi.org/10.21105/joss.00884 -BSD 3-clause +Please also cite the DOI corresponding to the specific version of +pvlib-python that you used. pvlib-python DOIs are listed at +[Zenodo.org](https://zenodo.org/search?page=1&size=20&q=conceptrecid:593284&all_versions&sort=-version) +If you use pvlib-python in a commercial or publicly-available application, please +consider displaying one of the "powered by pvlib" logos: + + Getting support =============== @@ -133,19 +146,12 @@ change something about pvlib, then please make an issue on our [GitHub issues page](https://github.com/pvlib/pvlib-python/issues). -Citing -====== -If you use pvlib-python in a published work, please cite: +License +======= - William F. Holmgren, Clifford W. Hansen, and Mark A. Mikofski. - "pvlib python: a python package for modeling solar energy systems." - Journal of Open Source Software, 3(29), 884, (2018). - https://doi.org/10.21105/joss.00884 +BSD 3-clause. -Please also cite the DOI corresponding to the specific version of -pvlib-python that you used. pvlib-python DOIs are listed at -[Zenodo.org](https://zenodo.org/search?page=1&size=20&q=conceptrecid:593284&all_versions&sort=-version) NumFOCUS ======== diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 005f3fa3c6..ec594f152b 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -12,7 +12,7 @@ jobs: vmImage: ubuntu-16.04 -- template: ci/azure/posix.yml +- template: ci/azure/posix_no_39.yml parameters: name: Test_bare_macOS vmImage: macOS-10.14 diff --git a/ci/azure/posix_no_39.yml b/ci/azure/posix_no_39.yml new file mode 100644 index 0000000000..16966cebef --- /dev/null +++ b/ci/azure/posix_no_39.yml @@ -0,0 +1,39 @@ +parameters: + name: '' + vmImage: '' + +jobs: +- job: ${{ parameters.name }} + pool: + vmImage: ${{ parameters.vmImage }} + strategy: + matrix: + Python36: + python.version: '3.6' + Python37: + python.version: '3.7' + Python38: + python.version: '3.8' + + steps: + - task: UsePythonVersion@0 + inputs: + versionSpec: '$(python.version)' + + - script: | + pip install pytest pytest-cov pytest-mock requests-mock pytest-timeout pytest-azurepipelines pytest-rerunfailures pytest-remotedata + pip install -e . + pytest pvlib --junitxml=junit/test-results.xml --cov=com --cov-report=xml --cov-report=html + displayName: 'Test with pytest' + + - task: PublishTestResults@2 + condition: succeededOrFailed() + inputs: + testResultsFiles: '**/test-*.xml' + testRunTitle: 'Publish test results for Python $(python.version)' + + - task: PublishCodeCoverageResults@1 + inputs: + codeCoverageTool: Cobertura + summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml' + reportDirectory: '$(System.DefaultWorkingDirectory)/**/htmlcov' diff --git a/ci/requirements-py36-min.yml b/ci/requirements-py36-min.yml index 84adcb360d..efcb166e68 100644 --- a/ci/requirements-py36-min.yml +++ b/ci/requirements-py36-min.yml @@ -5,6 +5,7 @@ dependencies: - coveralls - nose - pip + - pytables # tables when using pip+PyPI - pytest - pytest-cov - pytest-mock @@ -20,3 +21,4 @@ dependencies: - pytest-rerunfailures # conda version is >3.6 - pytest-remotedata # conda package is 0.3.0, needs > 0.3.1 - requests-mock + - numexpr==2.6.2 # needed for tables, but newest version is not compatible with numpy 1.12 \ No newline at end of file diff --git a/ci/requirements-py36.yml b/ci/requirements-py36.yml index 5dfd44c8f1..b668483806 100644 --- a/ci/requirements-py36.yml +++ b/ci/requirements-py36.yml @@ -3,6 +3,7 @@ channels: - defaults - conda-forge dependencies: + - blosc=1.14.3 # newest version breaks tables (pytables) on windows - cdsapi - coveralls - cython diff --git a/ci/requirements-py37.yml b/ci/requirements-py37.yml index af45eefda0..e1dd5c929d 100644 --- a/ci/requirements-py37.yml +++ b/ci/requirements-py37.yml @@ -3,6 +3,7 @@ channels: - defaults - conda-forge dependencies: + - blosc=1.14.3 # newest version breaks tables (pytables) on windows - cdsapi - coveralls - cython diff --git a/docs/sphinx/source/_images/pvlib_powered_logo_horiz.png b/docs/sphinx/source/_images/pvlib_powered_logo_horiz.png new file mode 100644 index 0000000000000000000000000000000000000000..71dd1d35425bd97eb09855b8cb53ebfc26da6bda GIT binary patch literal 127851 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

  • Z*lc%Ny{dWi3Qm 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□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 NPDWWe|Gu%`{{d>bs!ad@ literal 0 HcmV?d00001 diff --git a/docs/sphinx/source/_images/pvlib_powered_logo_vert.png b/docs/sphinx/source/_images/pvlib_powered_logo_vert.png new file mode 100644 index 0000000000000000000000000000000000000000..f23697144a493057c428be97901028254f967b26 GIT binary patch literal 111495 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%0DBSe9QwC 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 literal 0 HcmV?d00001 diff --git a/docs/sphinx/source/index.rst b/docs/sphinx/source/index.rst index 1717ec233f..c2fe9ff106 100644 --- a/docs/sphinx/source/index.rst +++ b/docs/sphinx/source/index.rst @@ -9,8 +9,7 @@ functions and classes for simulating the performance of photovoltaic energy systems. pvlib python was originally ported from the PVLIB MATLAB toolbox developed at Sandia National Laboratories and it implements many of the models and methods developed at the Labs. More information on -Sandia Labs PV performance modeling programs can be found at -https://pvpmc.sandia.gov/. We collaborate with the PVLIB MATLAB project, +Sandia Labs PV performance modeling programs can be found at the `PVPMC `_. We collaborate with the PVLIB MATLAB project, but operate independently of it. The source code for pvlib python is hosted on `github @@ -50,6 +49,16 @@ Please also cite the DOI corresponding to the specific version of pvlib python that you used. pvlib python DOIs are listed at `Zenodo.org `_ +If you use pvlib-python in a commercial or publicly-available +application, please consider displaying one of the "powered by pvlib" +logos: + +.. image:: _images/pvlib_powered_logo_horiz.png + :width: 300 + +.. image:: _images/pvlib_powered_logo_vert.png + :width: 300 + Additional pvlib python publications include: * J. S. Stein, “The photovoltaic performance modeling @@ -73,6 +82,10 @@ Additional pvlib python publications include: "An Open Source Solar Power Forecasting Tool Using PVLIB-Python," in 43rd Photovoltaic Specialists Conference, 2016. +License +======= + +`BSD 3-clause `_. NumFOCUS ======== @@ -83,7 +96,6 @@ pvlib python is a `NumFOCUS Affiliated Project None + target(server, startdate, enddate, params, filename) -> None Examples -------- @@ -161,12 +161,12 @@ def get_ecmwf_macc(filename, params, startdate, stopdate, lookup_params=True, params = '/'.join(PARAMS.get(p) for p in params) except TypeError: params = PARAMS.get(params) - startdate = startdate.strftime('%Y-%m-%d') - stopdate = stopdate.strftime('%Y-%m-%d') + startdate = start.strftime('%Y-%m-%d') + enddate = end.strftime('%Y-%m-%d') if not server: server = ECMWFDataServer() t = threading.Thread(target=target, daemon=True, - args=(server, startdate, stopdate, params, filename)) + args=(server, startdate, enddate, params, filename)) t.start() return t @@ -191,8 +191,8 @@ def __init__(self, filename): # time resolution in hours self.time_size = self.data.dimensions['time'].size self.start_time = self.data['time'][0] - self.stop_time = self.data['time'][-1] - self.time_range = self.stop_time - self.start_time + self.end_time = self.data['time'][-1] + self.time_range = self.end_time - self.start_time self.delta_time = self.time_range / (self.time_size - 1) def get_nearest_indices(self, latitude, longitude): @@ -281,7 +281,7 @@ def read_ecmwf_macc(filename, latitude, longitude, utc_time_range=None): longitude : float longitude in degrees utc_time_range : sequence of datetime.datetime - pair of start and stop naive or UTC date-times + pair of start and end naive or UTC date-times Returns ------- @@ -295,9 +295,9 @@ def read_ecmwf_macc(filename, latitude, longitude, utc_time_range=None): if utc_time_range: start_idx = netCDF4.date2index( utc_time_range[0], nctime, select='before') - stop_idx = netCDF4.date2index( + end_idx = netCDF4.date2index( utc_time_range[-1], nctime, select='after') - time_slice = slice(start_idx, stop_idx + 1) + time_slice = slice(start_idx, end_idx + 1) else: time_slice = slice(0, ecmwf_macc.time_size) times = netCDF4.num2date(nctime[time_slice], nctime.units) diff --git a/pvlib/iotools/psm3.py b/pvlib/iotools/psm3.py index 758884160a..44fba674b1 100644 --- a/pvlib/iotools/psm3.py +++ b/pvlib/iotools/psm3.py @@ -28,6 +28,11 @@ def get_psm3(latitude, longitude, api_key, email, names='tmy', interval=60, Retrieve NSRDB PSM3 timeseries weather data from the PSM3 API. The NSRDB is described in [1]_ and the PSM3 API is described in [2]_, [3]_, and [4]_. + .. versionchanged:: 0.9.0 + The function now returns a tuple where the first element is a dataframe + and the second element is a dictionary containing metadata. Previous + versions of this function had the return values switched. + Parameters ---------- latitude : float or int @@ -61,11 +66,11 @@ def get_psm3(latitude, longitude, api_key, email, names='tmy', interval=60, Returns ------- - headers : dict - metadata from NREL PSM3 about the record, see - :func:`pvlib.iotools.parse_psm3` for fields data : pandas.DataFrame timeseries data from NREL PSM3 + metadata : dict + metadata from NREL PSM3 about the record, see + :func:`pvlib.iotools.parse_psm3` for fields Raises ------ @@ -170,6 +175,11 @@ def parse_psm3(fbuf): Parse an NSRDB PSM3 weather file (formatted as SAM CSV). The NSRDB is described in [1]_ and the SAM CSV format is described in [2]_. + .. versionchanged:: 0.9.0 + The function now returns a tuple where the first element is a dataframe + and the second element is a dictionary containing metadata. Previous + versions of this function had the return values switched. + Parameters ---------- fbuf: file-like object @@ -177,15 +187,18 @@ def parse_psm3(fbuf): Returns ------- - headers : dict - metadata from NREL PSM3 about the record, see notes for fields data : pandas.DataFrame timeseries data from NREL PSM3 + metadata : dict + metadata from NREL PSM3 about the record, see notes for fields Notes ----- - The return is a tuple with two items. The first item is a header with - metadata from NREL PSM3 about the record containing the following fields: + The return is a tuple with two items. The first item is a dataframe with + the PSM3 timeseries data. + + The second item is a dictionary with metadata from NREL PSM3 about the + record containing the following fields: * Source * Location ID @@ -234,13 +247,11 @@ def parse_psm3(fbuf): * Surface Albedo Units * Version - The second item is a dataframe with the PSM3 timeseries data. - Examples -------- >>> # Read a local PSM3 file: >>> with open(filename, 'r') as f: # doctest: +SKIP - ... metadata, df = iotools.parse_psm3(f) # doctest: +SKIP + ... df, metadata = iotools.parse_psm3(f) # doctest: +SKIP See Also -------- @@ -254,17 +265,17 @@ def parse_psm3(fbuf): `_ """ # The first 2 lines of the response are headers with metadata - header_fields = fbuf.readline().split(',') - header_fields[-1] = header_fields[-1].strip() # strip trailing newline - header_values = fbuf.readline().split(',') - header_values[-1] = header_values[-1].strip() # strip trailing newline - header = dict(zip(header_fields, header_values)) - # the response is all strings, so set some header types to numbers - header['Local Time Zone'] = int(header['Local Time Zone']) - header['Time Zone'] = int(header['Time Zone']) - header['Latitude'] = float(header['Latitude']) - header['Longitude'] = float(header['Longitude']) - header['Elevation'] = int(header['Elevation']) + metadata_fields = fbuf.readline().split(',') + metadata_fields[-1] = metadata_fields[-1].strip() # strip trailing newline + metadata_values = fbuf.readline().split(',') + metadata_values[-1] = metadata_values[-1].strip() # strip trailing newline + metadata = dict(zip(metadata_fields, metadata_values)) + # the response is all strings, so set some metadata types to numbers + metadata['Local Time Zone'] = int(metadata['Local Time Zone']) + metadata['Time Zone'] = int(metadata['Time Zone']) + metadata['Latitude'] = float(metadata['Latitude']) + metadata['Longitude'] = float(metadata['Longitude']) + metadata['Elevation'] = int(metadata['Elevation']) # get the column names so we can set the dtypes columns = fbuf.readline().split(',') columns[-1] = columns[-1].strip() # strip trailing newline @@ -282,10 +293,10 @@ def parse_psm3(fbuf): dtidx = pd.to_datetime( data[['Year', 'Month', 'Day', 'Hour', 'Minute']]) # in USA all timezones are integers - tz = 'Etc/GMT%+d' % -header['Time Zone'] + tz = 'Etc/GMT%+d' % -metadata['Time Zone'] data.index = pd.DatetimeIndex(dtidx).tz_localize(tz) - return header, data + return data, metadata def read_psm3(filename): @@ -293,6 +304,11 @@ def read_psm3(filename): Read an NSRDB PSM3 weather file (formatted as SAM CSV). The NSRDB is described in [1]_ and the SAM CSV format is described in [2]_. + .. versionchanged:: 0.9.0 + The function now returns a tuple where the first element is a dataframe + and the second element is a dictionary containing metadata. Previous + versions of this function had the return values switched. + Parameters ---------- filename: str @@ -300,11 +316,11 @@ def read_psm3(filename): Returns ------- - headers : dict - metadata from NREL PSM3 about the record, see - :func:`pvlib.iotools.parse_psm3` for fields data : pandas.DataFrame timeseries data from NREL PSM3 + metadata : dict + metadata from NREL PSM3 about the record, see + :func:`pvlib.iotools.parse_psm3` for fields See Also -------- diff --git a/pvlib/iotools/pvgis.py b/pvlib/iotools/pvgis.py index d43d4db87e..3bb2f977c6 100644 --- a/pvlib/iotools/pvgis.py +++ b/pvlib/iotools/pvgis.py @@ -20,6 +20,8 @@ import requests import pandas as pd from pvlib.iotools import read_epw, parse_epw +import warnings +from pvlib._deprecation import pvlibDeprecationWarning URL = 'https://re.jrc.ec.europa.eu/api/' @@ -363,19 +365,19 @@ def read_pvgis_hourly(filename, pvgis_format=None, map_variables=True): raise ValueError(err_msg) -def get_pvgis_tmy(lat, lon, outputformat='json', usehorizon=True, +def get_pvgis_tmy(latitude, longitude, outputformat='json', usehorizon=True, userhorizon=None, startyear=None, endyear=None, url=URL, - timeout=30): + map_variables=None, timeout=30): """ Get TMY data from PVGIS. For more information see the PVGIS [1]_ TMY tool documentation [2]_. Parameters ---------- - lat : float + latitude : float Latitude in degrees north - lon : float - Longitude in dgrees east + longitude : float + Longitude in degrees east outputformat : str, default 'json' Must be in ``['csv', 'basic', 'epw', 'json']``. See PVGIS TMY tool documentation [2]_ for more info. @@ -392,6 +394,9 @@ def get_pvgis_tmy(lat, lon, outputformat='json', usehorizon=True, last year to calculate TMY, must be at least 10 years from first year url : str, default :const:`pvlib.iotools.pvgis.URL` base url of PVGIS API, append ``tmy`` to get TMY endpoint + map_variables: bool + When true, renames columns of the Dataframe to pvlib variable names + where applicable. See variable PVGIS_VARIABLE_MAP. timeout : int, default 30 time in seconds to wait for server response before timeout @@ -403,8 +408,8 @@ def get_pvgis_tmy(lat, lon, outputformat='json', usehorizon=True, TMY year for each month, ``None`` for basic and EPW inputs : dict the inputs, ``None`` for basic and EPW - meta : list or dict - meta data, ``None`` for basic + metadata : list or dict + file metadata, ``None`` for basic Raises ------ @@ -426,7 +431,7 @@ def get_pvgis_tmy(lat, lon, outputformat='json', usehorizon=True, `_ """ # use requests to format the query string by passing params dictionary - params = {'lat': lat, 'lon': lon, 'outputformat': outputformat} + params = {'lat': latitude, 'lon': longitude, 'outputformat': outputformat} # pvgis only likes 0 for False, and 1 for True, not strings, also the # default for usehorizon is already 1 (ie: True), so only set if False if not usehorizon: @@ -452,22 +457,34 @@ def get_pvgis_tmy(lat, lon, outputformat='json', usehorizon=True, data = None, None, None, None if outputformat == 'json': src = res.json() - return _parse_pvgis_tmy_json(src) + data, months_selected, inputs, meta = _parse_pvgis_tmy_json(src) elif outputformat == 'csv': with io.BytesIO(res.content) as src: - data = _parse_pvgis_tmy_csv(src) + data, months_selected, inputs, meta = _parse_pvgis_tmy_csv(src) elif outputformat == 'basic': with io.BytesIO(res.content) as src: - data = _parse_pvgis_tmy_basic(src) + data, months_selected, inputs, meta = _parse_pvgis_tmy_basic(src) elif outputformat == 'epw': with io.StringIO(res.content.decode('utf-8')) as src: data, meta = parse_epw(src) - data = (data, None, None, meta) + months_selected, inputs = None, None else: # this line is never reached because if outputformat is not valid then # the response is HTTP/1.1 400 BAD REQUEST which is handled earlier pass - return data + + if map_variables is None: + warnings.warn( + 'PVGIS variable names will be renamed to pvlib conventions by ' + 'default starting in pvlib 0.10.0. Specify map_variables=True ' + 'to enable that behavior now, or specify map_variables=False ' + 'to hide this warning.', pvlibDeprecationWarning + ) + map_variables = False + if map_variables: + data = data.rename(columns=PVGIS_VARIABLE_MAP) + + return data, months_selected, inputs, meta def _parse_pvgis_tmy_json(src): @@ -521,7 +538,7 @@ def _parse_pvgis_tmy_basic(src): return data, None, None, None -def read_pvgis_tmy(filename, pvgis_format=None): +def read_pvgis_tmy(filename, pvgis_format=None, map_variables=None): """ Read a file downloaded from PVGIS. @@ -537,6 +554,10 @@ def read_pvgis_tmy(filename, pvgis_format=None): ``outputformat='basic'``, please set `pvgis_format` to ``'basic'``. If `filename` is a buffer, then `pvgis_format` is required and must be in ``['csv', 'epw', 'json', 'basic']``. + map_variables: bool + When true, renames columns of the Dataframe to pvlib variable names + where applicable. See variable PVGIS_VARIABLE_MAP. + Returns ------- @@ -546,8 +567,8 @@ def read_pvgis_tmy(filename, pvgis_format=None): TMY year for each month, ``None`` for basic and EPW inputs : dict the inputs, ``None`` for basic and EPW - meta : list or dict - meta data, ``None`` for basic + metadata : list or dict + file metadata, ``None`` for basic Raises ------ @@ -570,7 +591,6 @@ def read_pvgis_tmy(filename, pvgis_format=None): outputformat = Path(filename).suffix[1:].lower() else: outputformat = pvgis_format - # parse the pvgis file based on the output format, either 'epw', 'json', # 'csv', or 'basic' @@ -580,7 +600,7 @@ def read_pvgis_tmy(filename, pvgis_format=None): data, meta = parse_epw(filename) except AttributeError: # str/path has no .read() attribute data, meta = read_epw(filename) - return data, None, None, meta + months_selected, inputs = None, None # NOTE: json, csv, and basic output formats have parsers defined as private # functions in this module @@ -588,30 +608,44 @@ def read_pvgis_tmy(filename, pvgis_format=None): # JSON: use Python built-in json module to convert file contents to a # Python dictionary, and pass the dictionary to the _parse_pvgis_tmy_json() # function from this module - if outputformat == 'json': + elif outputformat == 'json': try: src = json.load(filename) except AttributeError: # str/path has no .read() attribute with open(str(filename), 'r') as fbuf: src = json.load(fbuf) - return _parse_pvgis_tmy_json(src) + data, months_selected, inputs, meta = _parse_pvgis_tmy_json(src) # CSV or basic: use the correct parser from this module # eg: _parse_pvgis_tmy_csv() or _parse_pvgist_tmy_basic() - if outputformat in ['csv', 'basic']: + elif outputformat in ['csv', 'basic']: # get the correct parser function for this output format from globals() pvgis_parser = globals()['_parse_pvgis_tmy_{:s}'.format(outputformat)] # NOTE: pvgis_parse() is a pvgis parser function from this module, # either _parse_pvgis_tmy_csv() or _parse_pvgist_tmy_basic() try: - pvgis_data = pvgis_parser(filename) + data, months_selected, inputs, meta = pvgis_parser(filename) except AttributeError: # str/path has no .read() attribute with open(str(filename), 'rb') as fbuf: - pvgis_data = pvgis_parser(fbuf) - return pvgis_data + data, months_selected, inputs, meta = pvgis_parser(fbuf) + + else: + # raise exception if pvgis format isn't in ['csv','basic','epw','json'] + err_msg = ( + "pvgis format '{:s}' was unknown, must be either 'epw', 'json', " + "'csv', or 'basic'").format(outputformat) + raise ValueError(err_msg) + + if map_variables is None: + warnings.warn( + 'PVGIS variable names will be renamed to pvlib conventions by ' + 'default starting in pvlib 0.10.0. Specify map_variables=True ' + 'to enable that behavior now, or specify map_variables=False ' + 'to hide this warning.', pvlibDeprecationWarning + ) + map_variables = False + if map_variables: + data = data.rename(columns=PVGIS_VARIABLE_MAP) + + return data, months_selected, inputs, meta - # raise exception if pvgis format isn't in ['csv', 'basic', 'epw', 'json'] - err_msg = ( - "pvgis format '{:s}' was unknown, must be either 'epw', 'json', 'csv'" - ", or 'basic'").format(outputformat) - raise ValueError(err_msg) diff --git a/pvlib/iotools/sodapro.py b/pvlib/iotools/sodapro.py index a27e6f1423..68fa82a396 100644 --- a/pvlib/iotools/sodapro.py +++ b/pvlib/iotools/sodapro.py @@ -41,7 +41,7 @@ '0 year 1 month 0 day 0 h 0 min 0 s': '1M'} -def get_cams(start, end, latitude, longitude, email, identifier='mcclear', +def get_cams(latitude, longitude, start, end, email, identifier='mcclear', altitude=None, time_step='1h', time_ref='UT', verbose=False, integrated=False, label=None, map_variables=True, server='www.soda-is.com', timeout=30): @@ -62,19 +62,19 @@ def get_cams(start, end, latitude, longitude, email, identifier='mcclear', Parameters ---------- - start: datetime like - First day of the requested period - end: datetime like - Last day of the requested period latitude: float in decimal degrees, between -90 and 90, north is positive (ISO 19115) longitude : float in decimal degrees, between -180 and 180, east is positive (ISO 19115) + start: datetime like + First day of the requested period + end: datetime like + Last day of the requested period email: str Email address linked to a SoDa account identifier: {'mcclear', 'cams_radiation'} Specify whether to retrieve CAMS Radiation or McClear parameters - altitude: float, default: None + altitude: float, optional Altitude in meters. If None, then the altitude is determined from the NASA SRTM database time_step: str, {'1min', '15min', '1h', '1d', '1M'}, default: '1h' @@ -96,7 +96,7 @@ def get_cams(start, end, latitude, longitude, email, identifier='mcclear', where applicable. See variable CAMS_VARIABLE_MAP. server: str, default: 'www.soda-is.com' Main server (www.soda-is.com) or backup mirror server (pro.soda-is.com) - timeout : int, default 30 + timeout : int, default: 30 Time in seconds to wait for server response before timeout Returns diff --git a/pvlib/ivtools/sde.py b/pvlib/ivtools/sde.py index 1042a19736..dad1add22f 100644 --- a/pvlib/ivtools/sde.py +++ b/pvlib/ivtools/sde.py @@ -90,7 +90,7 @@ def fit_sandia_simple(voltage, current, v_oc=None, i_sc=None, v_mp_i_mp=None, I = I_{L} - I_{0} (\exp \frac{V + I R_{s}}{nNsVth} - 1) - \frac{V + I R_{s}}{R_{sh}} - See :py:func:`pvsystem.singlediode` for definition of the parameters. + See :py:func:`pvlib.pvsystem.singlediode` for definition of the parameters. The extraction method [2]_ proceeds in six steps. diff --git a/pvlib/location.py b/pvlib/location.py index 93d54fcd9e..97767a5801 100644 --- a/pvlib/location.py +++ b/pvlib/location.py @@ -164,7 +164,7 @@ def from_epw(cls, metadata, data=None, **kwargs): def get_solarposition(self, times, pressure=None, temperature=12, **kwargs): """ - Uses the :py:func:`solarposition.get_solarposition` function + Uses the :py:func:`pvlib.solarposition.get_solarposition` function to calculate the solar zenith, azimuth, etc. at this location. Parameters @@ -173,11 +173,11 @@ def get_solarposition(self, times, pressure=None, temperature=12, Must be localized or UTC will be assumed. pressure : None, float, or array-like, default None If None, pressure will be calculated using - :py:func:`atmosphere.alt2pres` and ``self.altitude``. + :py:func:`pvlib.atmosphere.alt2pres` and ``self.altitude``. temperature : None, float, or array-like, default 12 kwargs - passed to :py:func:`solarposition.get_solarposition` + passed to :py:func:`pvlib.solarposition.get_solarposition` Returns ------- diff --git a/pvlib/pvsystem.py b/pvlib/pvsystem.py index eb288978d4..6bb89f34a3 100644 --- a/pvlib/pvsystem.py +++ b/pvlib/pvsystem.py @@ -627,7 +627,7 @@ def sapm(self, effective_irradiance, temp_cell): @deprecated('0.9', alternative='PVSystem.get_cell_temperature', removal='0.10.0') def sapm_celltemp(self, poa_global, temp_air, wind_speed): - """Uses :py:func:`temperature.sapm_cell` to calculate cell + """Uses :py:func:`pvlib.temperature.sapm_cell` to calculate cell temperatures. Parameters @@ -720,7 +720,7 @@ def sapm_effective_irradiance(self, poa_direct, poa_diffuse, @deprecated('0.9', alternative='PVSystem.get_cell_temperature', removal='0.10.0') def pvsyst_celltemp(self, poa_global, temp_air, wind_speed=1.0): - """Uses :py:func:`temperature.pvsyst_cell` to calculate cell + """Uses :py:func:`pvlib.temperature.pvsyst_cell` to calculate cell temperature. Parameters @@ -756,7 +756,7 @@ def pvsyst_celltemp(self, poa_global, temp_air, wind_speed=1.0): removal='0.10.0') def faiman_celltemp(self, poa_global, temp_air, wind_speed=1.0): """ - Use :py:func:`temperature.faiman` to calculate cell temperature. + Use :py:func:`pvlib.temperature.faiman` to calculate cell temperature. Parameters ---------- @@ -791,7 +791,7 @@ def faiman_celltemp(self, poa_global, temp_air, wind_speed=1.0): removal='0.10.0') def fuentes_celltemp(self, poa_global, temp_air, wind_speed): """ - Use :py:func:`temperature.fuentes` to calculate cell temperature. + Use :py:func:`pvlib.temperature.fuentes` to calculate cell temperature. Parameters ---------- @@ -834,7 +834,8 @@ def fuentes_celltemp(self, poa_global, temp_air, wind_speed): def noct_sam_celltemp(self, poa_global, temp_air, wind_speed, effective_irradiance=None): """ - Use :py:func:`temperature.noct_sam` to calculate cell temperature. + Use :py:func:`pvlib.temperature.noct_sam` to calculate cell + temperature. Parameters ---------- @@ -871,7 +872,7 @@ def noct_sam_celltemp(self, poa_global, temp_air, wind_speed, @_unwrap_single_value def first_solar_spectral_loss(self, pw, airmass_absolute): """ - Use the :py:func:`first_solar_spectral_correction` function to + Use :py:func:`pvlib.atmosphere.first_solar_spectral_correction` to calculate the spectral loss modifier. The model coefficients are specific to the module's cell type, and are determined by searching for one of the following keys in self.module_parameters (in order): diff --git a/pvlib/tests/iotools/test_psm3.py b/pvlib/tests/iotools/test_psm3.py index ca3a5e3034..0b02c3c291 100644 --- a/pvlib/tests/iotools/test_psm3.py +++ b/pvlib/tests/iotools/test_psm3.py @@ -17,7 +17,7 @@ YEAR_TEST_DATA_5MIN = DATA_DIR / 'test_psm3_2019_5min.csv' MANUAL_TEST_DATA = DATA_DIR / 'test_read_psm3.csv' LATITUDE, LONGITUDE = 40.5137, -108.5449 -HEADER_FIELDS = [ +METADATA_FIELDS = [ 'Source', 'Location ID', 'City', 'State', 'Country', 'Latitude', 'Longitude', 'Time Zone', 'Elevation', 'Local Time Zone', 'Dew Point Units', 'DHI Units', 'DNI Units', 'GHI Units', @@ -46,7 +46,7 @@ def nrel_api_key(): return demo_key -def assert_psm3_equal(header, data, expected): +def assert_psm3_equal(data, metadata, expected): """check consistency of PSM3 data""" # check datevec columns assert np.allclose(data.Year, expected.Year) @@ -65,48 +65,48 @@ def assert_psm3_equal(header, data, expected): assert np.allclose(data['Wind Speed'], expected['Wind Speed']) assert np.allclose(data['Wind Direction'], expected['Wind Direction']) # check header - for hf in HEADER_FIELDS: - assert hf in header + for mf in METADATA_FIELDS: + assert mf in metadata # check timezone - assert (data.index.tzinfo.zone == 'Etc/GMT%+d' % -header['Time Zone']) + assert (data.index.tzinfo.zone == 'Etc/GMT%+d' % -metadata['Time Zone']) @pytest.mark.remote_data @pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) def test_get_psm3_tmy(nrel_api_key): """test get_psm3 with a TMY""" - header, data = psm3.get_psm3(LATITUDE, LONGITUDE, nrel_api_key, - PVLIB_EMAIL, names='tmy-2017') + data, metadata = psm3.get_psm3(LATITUDE, LONGITUDE, nrel_api_key, + PVLIB_EMAIL, names='tmy-2017') expected = pd.read_csv(TMY_TEST_DATA) - assert_psm3_equal(header, data, expected) + assert_psm3_equal(data, metadata, expected) @pytest.mark.remote_data @pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) def test_get_psm3_singleyear(nrel_api_key): """test get_psm3 with a single year""" - header, data = psm3.get_psm3(LATITUDE, LONGITUDE, nrel_api_key, - PVLIB_EMAIL, names='2017', interval=30) + data, metadata = psm3.get_psm3(LATITUDE, LONGITUDE, nrel_api_key, + PVLIB_EMAIL, names='2017', interval=30) expected = pd.read_csv(YEAR_TEST_DATA) - assert_psm3_equal(header, data, expected) + assert_psm3_equal(data, metadata, expected) @pytest.mark.remote_data @pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) def test_get_psm3_5min(nrel_api_key): """test get_psm3 for 5-minute data""" - header, data = psm3.get_psm3(LATITUDE, LONGITUDE, nrel_api_key, - PVLIB_EMAIL, names='2019', interval=5) + data, metadata = psm3.get_psm3(LATITUDE, LONGITUDE, nrel_api_key, + PVLIB_EMAIL, names='2019', interval=5) assert len(data) == 525600/5 first_day = data.loc['2019-01-01'] expected = pd.read_csv(YEAR_TEST_DATA_5MIN) - assert_psm3_equal(header, first_day, expected) + assert_psm3_equal(first_day, metadata, expected) @pytest.mark.remote_data @pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) def test_get_psm3_check_leap_day(nrel_api_key): - _, data_2012 = psm3.get_psm3(LATITUDE, LONGITUDE, nrel_api_key, + data_2012, _ = psm3.get_psm3(LATITUDE, LONGITUDE, nrel_api_key, PVLIB_EMAIL, names="2012", interval=60, leap_day=True) assert len(data_2012) == (8760 + 24) @@ -149,13 +149,13 @@ def io_input(request): def test_parse_psm3(io_input): """test parse_psm3""" - header, data = psm3.parse_psm3(io_input) + data, metadata = psm3.parse_psm3(io_input) expected = pd.read_csv(YEAR_TEST_DATA) - assert_psm3_equal(header, data, expected) + assert_psm3_equal(data, metadata, expected) def test_read_psm3(): """test read_psm3""" - header, data = psm3.read_psm3(MANUAL_TEST_DATA) + data, metadata = psm3.read_psm3(MANUAL_TEST_DATA) expected = pd.read_csv(YEAR_TEST_DATA) - assert_psm3_equal(header, data, expected) + assert_psm3_equal(data, metadata, expected) diff --git a/pvlib/tests/iotools/test_pvgis.py b/pvlib/tests/iotools/test_pvgis.py index fc0638ed74..5a097d25e5 100644 --- a/pvlib/tests/iotools/test_pvgis.py +++ b/pvlib/tests/iotools/test_pvgis.py @@ -9,7 +9,9 @@ import requests from pvlib.iotools import get_pvgis_tmy, read_pvgis_tmy from pvlib.iotools import get_pvgis_hourly, read_pvgis_hourly -from ..conftest import DATA_DIR, RERUNS, RERUNS_DELAY, assert_frame_equal +from ..conftest import (DATA_DIR, RERUNS, RERUNS_DELAY, assert_frame_equal, + fail_on_pvlib_version) +from pvlib._deprecation import pvlibDeprecationWarning # PVGIS Hourly tests @@ -356,11 +358,28 @@ def csv_meta(meta_expected): in meta_expected['outputs']['tmy_hourly']['variables'].items()] +@pytest.fixture +def pvgis_tmy_mapped_columns(): + return ['temp_air', 'relative_humidity', 'ghi', 'dni', 'dhi', 'IR(h)', + 'wind_speed', 'wind_direction', 'pressure'] + + +@fail_on_pvlib_version('0.10') +@pytest.mark.remote_data +@pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) +def test_pvgis_tmy_variable_map_deprecating_warning_0_10(): + with pytest.warns(pvlibDeprecationWarning, match='names will be renamed'): + _ = get_pvgis_tmy(45, 8) + with pytest.warns(pvlibDeprecationWarning, match='names will be renamed'): + fn = DATA_DIR / 'tmy_45.000_8.000_2005_2016.epw' + _ = read_pvgis_tmy(fn) + + @pytest.mark.remote_data @pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) def test_get_pvgis_tmy(expected, month_year_expected, inputs_expected, meta_expected): - pvgis_data = get_pvgis_tmy(45, 8) + pvgis_data = get_pvgis_tmy(45, 8, map_variables=False) _compare_pvgis_tmy_json(expected, month_year_expected, inputs_expected, meta_expected, pvgis_data) @@ -393,26 +412,28 @@ def _compare_pvgis_tmy_json(expected, month_year_expected, inputs_expected, @pytest.mark.remote_data @pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) def test_get_pvgis_tmy_kwargs(userhorizon_expected): - _, _, inputs, _ = get_pvgis_tmy(45, 8, usehorizon=False) + _, _, inputs, _ = get_pvgis_tmy(45, 8, usehorizon=False, + map_variables=False) assert inputs['meteo_data']['use_horizon'] is False data, _, _, _ = get_pvgis_tmy( - 45, 8, userhorizon=[0, 10, 20, 30, 40, 15, 25, 5]) + 45, 8, userhorizon=[0, 10, 20, 30, 40, 15, 25, 5], map_variables=False) assert np.allclose( data['G(h)'], userhorizon_expected['G(h)'].values) assert np.allclose( data['Gb(n)'], userhorizon_expected['Gb(n)'].values) assert np.allclose( data['Gd(h)'], userhorizon_expected['Gd(h)'].values) - _, _, inputs, _ = get_pvgis_tmy(45, 8, startyear=2005) + _, _, inputs, _ = get_pvgis_tmy(45, 8, startyear=2005, map_variables=False) assert inputs['meteo_data']['year_min'] == 2005 - _, _, inputs, _ = get_pvgis_tmy(45, 8, endyear=2016) + _, _, inputs, _ = get_pvgis_tmy(45, 8, endyear=2016, map_variables=False) assert inputs['meteo_data']['year_max'] == 2016 @pytest.mark.remote_data @pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) def test_get_pvgis_tmy_basic(expected, meta_expected): - pvgis_data = get_pvgis_tmy(45, 8, outputformat='basic') + pvgis_data = get_pvgis_tmy(45, 8, outputformat='basic', + map_variables=False) _compare_pvgis_tmy_basic(expected, meta_expected, pvgis_data) @@ -427,7 +448,7 @@ def _compare_pvgis_tmy_basic(expected, meta_expected, pvgis_data): @pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) def test_get_pvgis_tmy_csv(expected, month_year_expected, inputs_expected, meta_expected, csv_meta): - pvgis_data = get_pvgis_tmy(45, 8, outputformat='csv') + pvgis_data = get_pvgis_tmy(45, 8, outputformat='csv', map_variables=False) _compare_pvgis_tmy_csv(expected, month_year_expected, inputs_expected, meta_expected, csv_meta, pvgis_data) @@ -458,7 +479,7 @@ def _compare_pvgis_tmy_csv(expected, month_year_expected, inputs_expected, @pytest.mark.remote_data @pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) def test_get_pvgis_tmy_epw(expected, epw_meta): - pvgis_data = get_pvgis_tmy(45, 8, outputformat='epw') + pvgis_data = get_pvgis_tmy(45, 8, outputformat='epw', map_variables=False) _compare_pvgis_tmy_epw(expected, epw_meta, pvgis_data) @@ -481,19 +502,33 @@ def test_get_pvgis_tmy_error(): get_pvgis_tmy(45, 8, url='https://re.jrc.ec.europa.eu/') +@pytest.mark.remote_data +@pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) +def test_get_pvgis_map_variables(pvgis_tmy_mapped_columns): + actual, _, _, _ = get_pvgis_tmy(45, 8, map_variables=True) + assert all([c in pvgis_tmy_mapped_columns for c in actual.columns]) + + +def test_read_pvgis_tmy_map_variables(pvgis_tmy_mapped_columns): + fn = DATA_DIR / 'tmy_45.000_8.000_2005_2016.json' + actual, _, _, _ = read_pvgis_tmy(fn, map_variables=True) + assert all([c in pvgis_tmy_mapped_columns for c in actual.columns]) + + def test_read_pvgis_tmy_json(expected, month_year_expected, inputs_expected, meta_expected): fn = DATA_DIR / 'tmy_45.000_8.000_2005_2016.json' # infer outputformat from file extensions - pvgis_data = read_pvgis_tmy(fn) + pvgis_data = read_pvgis_tmy(fn, map_variables=False) _compare_pvgis_tmy_json(expected, month_year_expected, inputs_expected, meta_expected, pvgis_data) # explicit pvgis outputformat - pvgis_data = read_pvgis_tmy(fn, pvgis_format='json') + pvgis_data = read_pvgis_tmy(fn, pvgis_format='json', map_variables=False) _compare_pvgis_tmy_json(expected, month_year_expected, inputs_expected, meta_expected, pvgis_data) with fn.open('r') as fbuf: - pvgis_data = read_pvgis_tmy(fbuf, pvgis_format='json') + pvgis_data = read_pvgis_tmy(fbuf, pvgis_format='json', + map_variables=False) _compare_pvgis_tmy_json(expected, month_year_expected, inputs_expected, meta_expected, pvgis_data) @@ -501,13 +536,14 @@ def test_read_pvgis_tmy_json(expected, month_year_expected, inputs_expected, def test_read_pvgis_tmy_epw(expected, epw_meta): fn = DATA_DIR / 'tmy_45.000_8.000_2005_2016.epw' # infer outputformat from file extensions - pvgis_data = read_pvgis_tmy(fn) + pvgis_data = read_pvgis_tmy(fn, map_variables=False) _compare_pvgis_tmy_epw(expected, epw_meta, pvgis_data) # explicit pvgis outputformat - pvgis_data = read_pvgis_tmy(fn, pvgis_format='epw') + pvgis_data = read_pvgis_tmy(fn, pvgis_format='epw', map_variables=False) _compare_pvgis_tmy_epw(expected, epw_meta, pvgis_data) with fn.open('r') as fbuf: - pvgis_data = read_pvgis_tmy(fbuf, pvgis_format='epw') + pvgis_data = read_pvgis_tmy(fbuf, pvgis_format='epw', + map_variables=False) _compare_pvgis_tmy_epw(expected, epw_meta, pvgis_data) @@ -515,15 +551,16 @@ def test_read_pvgis_tmy_csv(expected, month_year_expected, inputs_expected, meta_expected, csv_meta): fn = DATA_DIR / 'tmy_45.000_8.000_2005_2016.csv' # infer outputformat from file extensions - pvgis_data = read_pvgis_tmy(fn) + pvgis_data = read_pvgis_tmy(fn, map_variables=False) _compare_pvgis_tmy_csv(expected, month_year_expected, inputs_expected, meta_expected, csv_meta, pvgis_data) # explicit pvgis outputformat - pvgis_data = read_pvgis_tmy(fn, pvgis_format='csv') + pvgis_data = read_pvgis_tmy(fn, pvgis_format='csv', map_variables=False) _compare_pvgis_tmy_csv(expected, month_year_expected, inputs_expected, meta_expected, csv_meta, pvgis_data) with fn.open('rb') as fbuf: - pvgis_data = read_pvgis_tmy(fbuf, pvgis_format='csv') + pvgis_data = read_pvgis_tmy(fbuf, pvgis_format='csv', + map_variables=False) _compare_pvgis_tmy_csv(expected, month_year_expected, inputs_expected, meta_expected, csv_meta, pvgis_data) @@ -532,20 +569,22 @@ def test_read_pvgis_tmy_basic(expected, meta_expected): fn = DATA_DIR / 'tmy_45.000_8.000_2005_2016.txt' # XXX: can't infer outputformat from file extensions for basic with pytest.raises(ValueError, match="pvgis format 'txt' was unknown"): - read_pvgis_tmy(fn) + read_pvgis_tmy(fn, map_variables=False) # explicit pvgis outputformat - pvgis_data = read_pvgis_tmy(fn, pvgis_format='basic') + pvgis_data = read_pvgis_tmy(fn, pvgis_format='basic', map_variables=False) _compare_pvgis_tmy_basic(expected, meta_expected, pvgis_data) with fn.open('rb') as fbuf: - pvgis_data = read_pvgis_tmy(fbuf, pvgis_format='basic') + pvgis_data = read_pvgis_tmy(fbuf, pvgis_format='basic', + map_variables=False) _compare_pvgis_tmy_basic(expected, meta_expected, pvgis_data) # file buffer raises TypeError if passed to pathlib.Path() with pytest.raises(TypeError): - read_pvgis_tmy(fbuf) + read_pvgis_tmy(fbuf, map_variables=False) def test_read_pvgis_tmy_exception(): bad_outputformat = 'bad' err_msg = f"pvgis format '{bad_outputformat:s}' was unknown" with pytest.raises(ValueError, match=err_msg): - read_pvgis_tmy('filename', pvgis_format=bad_outputformat) + read_pvgis_tmy('filename', pvgis_format=bad_outputformat, + map_variables=False) diff --git a/pvlib/tests/test_clearsky.py b/pvlib/tests/test_clearsky.py index 1e7d89d82d..15fc74e383 100644 --- a/pvlib/tests/test_clearsky.py +++ b/pvlib/tests/test_clearsky.py @@ -16,7 +16,7 @@ from pvlib import atmosphere from pvlib import irradiance -from .conftest import requires_tables, DATA_DIR +from .conftest import DATA_DIR def test_ineichen_series(): @@ -189,7 +189,6 @@ def test_ineichen_altitude(): assert_frame_equal(expected, out) -@requires_tables def test_lookup_linke_turbidity(): times = pd.date_range(start='2014-06-24', end='2014-06-25', freq='12h', tz='America/Phoenix') @@ -202,7 +201,6 @@ def test_lookup_linke_turbidity(): assert_series_equal(expected, out) -@requires_tables def test_lookup_linke_turbidity_leapyear(): times = pd.date_range(start='2016-06-24', end='2016-06-25', freq='12h', tz='America/Phoenix') @@ -215,7 +213,6 @@ def test_lookup_linke_turbidity_leapyear(): assert_series_equal(expected, out) -@requires_tables def test_lookup_linke_turbidity_nointerp(): times = pd.date_range(start='2014-06-24', end='2014-06-25', freq='12h', tz='America/Phoenix') @@ -226,7 +223,6 @@ def test_lookup_linke_turbidity_nointerp(): assert_series_equal(expected, out) -@requires_tables def test_lookup_linke_turbidity_months(): times = pd.date_range(start='2014-04-01', end='2014-07-01', freq='1M', tz='America/Phoenix') @@ -237,7 +233,6 @@ def test_lookup_linke_turbidity_months(): assert_series_equal(expected, out) -@requires_tables def test_lookup_linke_turbidity_months_leapyear(): times = pd.date_range(start='2016-04-01', end='2016-07-01', freq='1M', tz='America/Phoenix') @@ -248,7 +243,6 @@ def test_lookup_linke_turbidity_months_leapyear(): assert_series_equal(expected, out) -@requires_tables def test_lookup_linke_turbidity_nointerp_months(): times = pd.date_range(start='2014-04-10', end='2014-07-10', freq='1M', tz='America/Phoenix') @@ -480,7 +474,6 @@ def test_simplified_solis_nans_series(): assert_frame_equal(expected, out) -@requires_tables def test_linke_turbidity_corners(): """Test Linke turbidity corners out of bounds.""" months = pd.DatetimeIndex('%d/1/2016' % (m + 1) for m in range(12)) diff --git a/pvlib/tests/test_location.py b/pvlib/tests/test_location.py index 20a849a667..a4b69e5cb2 100644 --- a/pvlib/tests/test_location.py +++ b/pvlib/tests/test_location.py @@ -15,7 +15,7 @@ from pvlib.location import Location from pvlib.solarposition import declination_spencer71 from pvlib.solarposition import equation_of_time_spencer71 -from .conftest import requires_ephem, requires_tables +from .conftest import requires_ephem def test_location_required(): @@ -77,7 +77,6 @@ def times(): freq='3H') -@requires_tables def test_get_clearsky(mocker, times): tus = Location(32.2, -111, 'US/Arizona', 700, 'Tucson') m = mocker.spy(pvlib.clearsky, 'ineichen') diff --git a/pvlib/tests/test_modelchain.py b/pvlib/tests/test_modelchain.py index e52bda72bd..b42acfa54e 100644 --- a/pvlib/tests/test_modelchain.py +++ b/pvlib/tests/test_modelchain.py @@ -13,7 +13,7 @@ from .conftest import assert_series_equal, assert_frame_equal import pytest -from .conftest import fail_on_pvlib_version, requires_tables +from .conftest import fail_on_pvlib_version @pytest.fixture(scope='function') @@ -1778,7 +1778,7 @@ def test_ModelChain_no_extra_kwargs(sapm_dc_snl_ac_system, location): ModelChain(sapm_dc_snl_ac_system, location, arbitrary_kwarg='value') -@fail_on_pvlib_version('1.0') +@fail_on_pvlib_version('0.10') def test_ModelChain_attributes_deprecated_10(sapm_dc_snl_ac_system, location): match = 'Use ModelChain.results' mc = ModelChain(sapm_dc_snl_ac_system, location) @@ -1788,7 +1788,6 @@ def test_ModelChain_attributes_deprecated_10(sapm_dc_snl_ac_system, location): mc.aoi = 5 -@requires_tables def test_basic_chain_alt_az(sam_data, cec_inverter_parameters, sapm_temperature_cs5p_220m): times = pd.date_range(start='20160101 1200-0700', @@ -1810,7 +1809,6 @@ def test_basic_chain_alt_az(sam_data, cec_inverter_parameters, assert_series_equal(ac, expected) -@requires_tables def test_basic_chain_altitude_pressure(sam_data, cec_inverter_parameters, sapm_temperature_cs5p_220m): times = pd.date_range(start='20160101 1200-0700', @@ -1861,7 +1859,6 @@ def test_complete_irradiance_clean_run(sapm_dc_snl_ac_system, location): pd.Series([9, 5], index=times, name='ghi')) -@requires_tables def test_complete_irradiance(sapm_dc_snl_ac_system, location): """Check calculations""" mc = ModelChain(sapm_dc_snl_ac_system, location) @@ -1890,7 +1887,6 @@ def test_complete_irradiance(sapm_dc_snl_ac_system, location): @pytest.mark.filterwarnings("ignore:This function is not safe at the moment") @pytest.mark.parametrize("input_type", [tuple, list]) -@requires_tables def test_complete_irradiance_arrays( sapm_dc_snl_ac_system_same_arrays, location, input_type): """ModelChain.complete_irradiance can accept a tuple of weather diff --git a/pvlib/tests/test_tracking.py b/pvlib/tests/test_tracking.py index 9a589e403a..7e51adc956 100644 --- a/pvlib/tests/test_tracking.py +++ b/pvlib/tests/test_tracking.py @@ -502,3 +502,18 @@ def test_slope_aware_backtracking(): np.testing.assert_allclose( truetracking['tracker_theta'], expected_data['TrueTracking'], rtol=1e-3, atol=1e-3) + + +def test_singleaxis_aoi_gh1221(): + # vertical tracker + loc = pvlib.location.Location(40.1134, -88.3695) + dr = pd.date_range( + start='02-Jun-1998 00:00:00', end='02-Jun-1998 23:55:00', freq='5T', + tz='Etc/GMT+6') + sp = loc.get_solarposition(dr) + tr = pvlib.tracking.singleaxis( + sp['apparent_zenith'], sp['azimuth'], axis_tilt=90, axis_azimuth=180, + max_angle=0.001, backtrack=False) + fixed = pvlib.irradiance.aoi(90, 180, sp['apparent_zenith'], sp['azimuth']) + fixed[np.isnan(tr['aoi'])] = np.nan + assert np.allclose(tr['aoi'], fixed, equal_nan=True) diff --git a/pvlib/tracking.py b/pvlib/tracking.py index 032b35d44a..732108dec2 100644 --- a/pvlib/tracking.py +++ b/pvlib/tracking.py @@ -458,7 +458,9 @@ def singleaxis(apparent_zenith, apparent_azimuth, sun_vec = np.array([xp, yp, zp]) # calculate angle-of-incidence on panel - aoi = np.degrees(np.arccos(np.abs(np.sum(sun_vec*panel_norm, axis=0)))) + # TODO: use irradiance.aoi + projection = np.clip(np.sum(sun_vec*panel_norm, axis=0), -1, 1) + aoi = np.degrees(np.arccos(projection)) # Calculate panel tilt and azimuth in a coordinate system where the panel # tilt is the angle from horizontal, and the panel azimuth is the compass diff --git a/setup.py b/setup.py index 9038487ae8..13d8020d7a 100755 --- a/setup.py +++ b/setup.py @@ -42,7 +42,8 @@ 'pandas >= 0.22.0', 'pytz', 'requests', - 'scipy >= 1.2.0'] + 'scipy >= 1.2.0', + 'tables'] # include dataclasses as a dependency only on python 3.6 if sys.version_info.major == 3 and sys.version_info.minor == 6: @@ -53,7 +54,8 @@ 'pytest-remotedata'] EXTRAS_REQUIRE = { 'optional': ['cython', 'ephem', 'netcdf4', 'nrel-pysam', 'numba', - 'pvfactors', 'siphon', 'statsmodels', 'tables', + + 'pvfactors', 'siphon', 'statsmodels', 'cftime >= 1.1.1', 'xarray', 'dask', 'cdsapi'], 'doc': ['ipython', 'matplotlib', 'sphinx == 3.1.2', 'sphinx_rtd_theme==0.5.0', 'sphinx-gallery', 'docutils == 0.15.2',