Skip to content

avoid and silence warnings #698

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 11 commits into from
May 6, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions docs/sphinx/source/whatsnew/v0.6.2.rst
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,15 @@ Bug fixes
near horizon. (:issue:`656`)
* Fixed numpy warnings in :py:func:`~pvlib.tracking.singleaxis` when
comparing NaN values to limits. (:issue:`622`)
* Silenced divide by 0 irradiance warnings in
:py:func:`~pvlib.irradiance.klucher` and
:py:func:`~pvlib.pvsystem.calcparams_desoto`. (:issue:`698`)
* Fix :py:class:`~pvlib.forecast.NDFD` model by updating variables.


Testing
~~~~~~~
* Remove most expected warnings emitted by test suite. (:issue:`698`)


Contributors
Expand Down
15 changes: 9 additions & 6 deletions pvlib/forecast.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@
import warnings

warnings.warn(
'The forecast module algorithms and features are highly experimental. ' +
'The API may change, the functionality may be consolidated into an io ' +
'The forecast module algorithms and features are highly experimental. '
'The API may change, the functionality may be consolidated into an io '
'module, or the module may be separated into its own package.')


Expand Down Expand Up @@ -97,7 +97,7 @@ class ForecastModel(object):
"""

access_url_key = 'NetcdfSubset'
catalog_url = 'http://thredds.ucar.edu/thredds/catalog.xml'
catalog_url = 'https://thredds.ucar.edu/thredds/catalog.xml'
base_tds_url = catalog_url.split('/thredds/')[0]
data_format = 'netcdf'

Expand Down Expand Up @@ -789,6 +789,9 @@ def __init__(self, set_type='best'):
self.variables = {
'temp_air': 'Temperature_surface',
'wind_speed_gust': 'Wind_speed_gust_surface',
# 'temp_air': 'Temperature_height_above_ground', # GH 702
# 'wind_speed_u': 'u-component_of_wind_height_above_ground',
# 'wind_speed_v': 'v-component_of_wind_height_above_ground',
'total_clouds': 'Total_cloud_cover_entire_atmosphere',
'low_clouds': 'Low_cloud_cover_UnknownLevelType-214',
'mid_clouds': 'Medium_cloud_cover_UnknownLevelType-224',
Expand Down Expand Up @@ -830,6 +833,7 @@ def process_data(self, data, cloud_cover='total_clouds', **kwargs):
data = super(HRRR_ESRL, self).process_data(data, **kwargs)
data['temp_air'] = self.kelvin_to_celsius(data['temp_air'])
data['wind_speed'] = self.gust_to_speed(data)
# data['wind_speed'] = self.uv_to_speed(data) # GH 702
irrads = self.cloud_cover_to_irradiance(data[cloud_cover], **kwargs)
data = data.join(irrads, how='outer')
return data[self.output_variables]
Expand Down Expand Up @@ -1036,9 +1040,8 @@ def __init__(self, set_type='best'):
model_type = 'Forecast Products and Analyses'
model = 'National Weather Service CONUS Forecast Grids (CONDUIT)'
self.variables = {
'temp_air': 'Temperature_surface',
'wind_speed': 'Wind_speed_surface',
'wind_speed_gust': 'Wind_speed_gust_surface',
'temp_air': 'Temperature_height_above_ground',
'wind_speed': 'Wind_speed_height_above_ground',
'total_clouds': 'Total_cloud_cover_surface', }
self.output_variables = [
'temp_air',
Expand Down
5 changes: 4 additions & 1 deletion pvlib/irradiance.py
Original file line number Diff line number Diff line change
Expand Up @@ -750,7 +750,10 @@ def klucher(surface_tilt, surface_azimuth, dhi, ghi, solar_zenith,
solar_zenith, solar_azimuth)
cos_tt = np.maximum(cos_tt, 0) # GH 526

F = 1 - ((dhi / ghi) ** 2)
# silence warning from 0 / 0
with np.errstate(invalid='ignore'):
F = 1 - ((dhi / ghi) ** 2)

try:
# fails with single point input
F.fillna(0, inplace=True)
Expand Down
4 changes: 3 additions & 1 deletion pvlib/pvsystem.py
Original file line number Diff line number Diff line change
Expand Up @@ -1276,7 +1276,9 @@ def calcparams_desoto(effective_irradiance, temp_cell,
# by applying reflection and soiling losses to broadband plane of array
# irradiance and not applying a spectral loss modifier, i.e.,
# spectral_modifier = 1.0.
Rsh = R_sh_ref * (irrad_ref / effective_irradiance)
# use errstate to silence divide by warning
with np.errstate(divide='ignore'):
Rsh = R_sh_ref * (irrad_ref / effective_irradiance)
Rs = R_s

return IL, I0, Rs, Rsh, nNsVth
Expand Down
2 changes: 1 addition & 1 deletion pvlib/test/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ def has_numba():
try:
import numba
except ImportError:
return True
return False
else:
vers = numba.__version__.split('.')
if int(vers[0] + vers[1]) < 17:
Expand Down
7 changes: 4 additions & 3 deletions pvlib/test/test_clearsky.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import pytz

import pytest
from numpy.testing import assert_almost_equal, assert_allclose
from numpy.testing import assert_allclose
from pandas.util.testing import assert_frame_equal, assert_series_equal

from pvlib.location import Location
Expand Down Expand Up @@ -308,8 +308,9 @@ def test_simplified_solis_scalar_neg_elevation():


def test_simplified_solis_series_elevation():
expected = pd.DataFrame(np.array([[959.335463, 1064.653145, 129.125602]]),
columns=['dni', 'ghi', 'dhi'])
expected = pd.DataFrame(
np.array([[959.335463, 1064.653145, 129.125602]]),
columns=['dni', 'ghi', 'dhi'])
expected = expected[['ghi', 'dni', 'dhi']]

out = clearsky.simplified_solis(pd.Series(80))
Expand Down
16 changes: 10 additions & 6 deletions pvlib/test/test_forecast.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,10 @@


if has_siphon:
from pvlib.forecast import GFS, HRRR_ESRL, HRRR, NAM, NDFD, RAP
with warnings.catch_warnings():
# don't emit import warning
warnings.simplefilter("ignore")
from pvlib.forecast import GFS, HRRR_ESRL, HRRR, NAM, NDFD, RAP

# setup times and location to be tested. Tucson, AZ
_latitude = 32.2
Expand All @@ -27,7 +30,8 @@
HRRR_ESRL, marks=[
skip_windows,
pytest.mark.xfail(reason="HRRR_ESRL is unreliable"),
pytest.mark.timeout(timeout=60)])]
pytest.mark.timeout(timeout=60),
pytest.mark.filterwarnings('ignore:.*experimental')])]
_working_models = []
_variables = ['temp_air', 'wind_speed', 'total_clouds', 'low_clouds',
'mid_clouds', 'high_clouds', 'dni', 'dhi', 'ghi']
Expand Down Expand Up @@ -75,21 +79,21 @@ def test_process_data(model):
def test_vert_level():
amodel = NAM()
vert_level = 5000
data = amodel.get_processed_data(_latitude, _longitude, _start, _end,
vert_level=vert_level)
amodel.get_processed_data(_latitude, _longitude, _start, _end,
vert_level=vert_level)


@requires_siphon
def test_datetime():
amodel = NAM()
start = datetime.now()
end = start + timedelta(days=1)
data = amodel.get_processed_data(_latitude, _longitude , start, end)
amodel.get_processed_data(_latitude, _longitude, start, end)


@requires_siphon
def test_queryvariables():
amodel = GFS()
old_variables = amodel.variables
new_variables = ['u-component_of_wind_height_above_ground']
data = amodel.get_data(_latitude, _longitude, _start, _end,
query_variables=new_variables)
Expand Down
70 changes: 39 additions & 31 deletions pvlib/test/test_irradiance.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import datetime
from collections import OrderedDict
import warnings

import numpy as np
from numpy import array, nan
Expand Down Expand Up @@ -107,18 +108,24 @@ def test_get_extra_radiation(input, expected, method):
assert_allclose(out, expected, atol=1)


@requires_numba
def test_get_extra_radiation_nrel_numba(times):
result = irradiance.get_extra_radiation(times, method='nrel', how='numba',
numthreads=8)
assert_allclose(result, [1322.332316, 1322.296282, 1322.261205, 1322.227091])


def test_get_extra_radiation_epoch_year():
out = irradiance.get_extra_radiation(doy, method='nrel', epoch_year=2012)
assert_allclose(out, 1382.4926804890767, atol=0.1)


@requires_numba
def test_get_extra_radiation_nrel_numba(times):
with warnings.catch_warnings():
# don't warn on method reload or num threads
warnings.simplefilter("ignore")
result = irradiance.get_extra_radiation(
times, method='nrel', how='numba', numthreads=4)
# and reset to no-numba state
irradiance.get_extra_radiation(times, method='nrel')
assert_allclose(result,
[1322.332316, 1322.296282, 1322.261205, 1322.227091])


def test_get_extra_radiation_invalid():
with pytest.raises(ValueError):
irradiance.get_extra_radiation(300, method='invalid')
Expand All @@ -135,13 +142,15 @@ def test_grounddiffuse_simple_series(irrad_data):


def test_grounddiffuse_albedo_0(irrad_data):
ground_irrad = irradiance.get_ground_diffuse(40, irrad_data['ghi'], albedo=0)
ground_irrad = irradiance.get_ground_diffuse(
40, irrad_data['ghi'], albedo=0)
assert 0 == ground_irrad.all()


def test_grounddiffuse_albedo_invalid_surface(irrad_data):
with pytest.raises(KeyError):
irradiance.get_ground_diffuse(40, irrad_data['ghi'], surface_type='invalid')
irradiance.get_ground_diffuse(
40, irrad_data['ghi'], surface_type='invalid')


def test_grounddiffuse_albedo_surface(irrad_data):
Expand Down Expand Up @@ -193,35 +202,33 @@ def test_klucher_series(irrad_data, ephem_data):


def test_haydavies(irrad_data, ephem_data, dni_et):
result = irradiance.haydavies(40, 180, irrad_data['dhi'], irrad_data['dni'],
dni_et,
ephem_data['apparent_zenith'],
ephem_data['azimuth'])
result = irradiance.haydavies(
40, 180, irrad_data['dhi'], irrad_data['dni'], dni_et,
ephem_data['apparent_zenith'], ephem_data['azimuth'])
# values from matlab 1.4 code
assert_allclose(result, [0, 27.1775, 102.9949, 33.1909], atol=1e-4)


def test_reindl(irrad_data, ephem_data, dni_et):
result = irradiance.reindl(40, 180, irrad_data['dhi'], irrad_data['dni'],
irrad_data['ghi'], dni_et,
ephem_data['apparent_zenith'],
ephem_data['azimuth'])
result = irradiance.reindl(
40, 180, irrad_data['dhi'], irrad_data['dni'], irrad_data['ghi'],
dni_et, ephem_data['apparent_zenith'], ephem_data['azimuth'])
# values from matlab 1.4 code
assert_allclose(result, [np.nan, 27.9412, 104.1317, 34.1663], atol=1e-4)


def test_king(irrad_data, ephem_data):
result = irradiance.king(40, irrad_data['dhi'], irrad_data['ghi'],
ephem_data['apparent_zenith'])
ephem_data['apparent_zenith'])
assert_allclose(result, [0, 44.629352, 115.182626, 79.719855], atol=1e-4)


def test_perez(irrad_data, ephem_data, dni_et, relative_airmass):
dni = irrad_data['dni'].copy()
dni.iloc[2] = np.nan
out = irradiance.perez(40, 180, irrad_data['dhi'], dni,
dni_et, ephem_data['apparent_zenith'],
ephem_data['azimuth'], relative_airmass)
dni_et, ephem_data['apparent_zenith'],
ephem_data['azimuth'], relative_airmass)
expected = pd.Series(np.array(
[ 0. , 31.46046871, np.nan, 45.45539877]),
index=irrad_data.index)
Expand Down Expand Up @@ -260,8 +267,9 @@ def test_perez_arrays(irrad_data, ephem_data, dni_et, relative_airmass):
dni = irrad_data['dni'].copy()
dni.iloc[2] = np.nan
out = irradiance.perez(40, 180, irrad_data['dhi'].values, dni.values,
dni_et, ephem_data['apparent_zenith'].values,
ephem_data['azimuth'].values, relative_airmass.values)
dni_et, ephem_data['apparent_zenith'].values,
ephem_data['azimuth'].values,
relative_airmass.values)
expected = np.array(
[ 0. , 31.46046871, np.nan, 45.45539877])
assert_allclose(out, expected, atol=1e-2)
Expand Down Expand Up @@ -289,8 +297,8 @@ def test_sky_diffuse_zenith_close_to_90(model):


def test_liujordan():
expected = pd.DataFrame(np.
array([[863.859736967, 653.123094076, 220.65905025]]),
expected = pd.DataFrame(np.array(
[[863.859736967, 653.123094076, 220.65905025]]),
columns=['ghi', 'dni', 'dhi'],
index=[0])
out = irradiance.liujordan(
Expand Down Expand Up @@ -484,7 +492,7 @@ def test_dirint_nans():


def test_dirint_tdew():
times = pd.DatetimeIndex(['2014-06-24T12-0700','2014-06-24T18-0700'])
times = pd.DatetimeIndex(['2014-06-24T12-0700', '2014-06-24T18-0700'])
ghi = pd.Series([1038.62, 254.53], index=times)
zenith = pd.Series([10.567, 72.469], index=times)
pressure = 93193.
Expand All @@ -495,7 +503,7 @@ def test_dirint_tdew():


def test_dirint_no_delta_kt():
times = pd.DatetimeIndex(['2014-06-24T12-0700','2014-06-24T18-0700'])
times = pd.DatetimeIndex(['2014-06-24T12-0700', '2014-06-24T18-0700'])
ghi = pd.Series([1038.62, 254.53], index=times)
zenith = pd.Series([10.567, 72.469], index=times)
pressure = 93193.
Expand All @@ -507,16 +515,16 @@ def test_dirint_no_delta_kt():

def test_dirint_coeffs():
coeffs = irradiance._get_dirint_coeffs()
assert coeffs[0,0,0,0] == 0.385230
assert coeffs[0,1,2,1] == 0.229970
assert coeffs[3,2,6,3] == 1.032260
assert coeffs[0, 0, 0, 0] == 0.385230
assert coeffs[0, 1, 2, 1] == 0.229970
assert coeffs[3, 2, 6, 3] == 1.032260


def test_dirint_min_cos_zenith_max_zenith():
# map out behavior under difficult conditions with various
# limiting kwargs settings
# times don't have any physical relevance
times = pd.DatetimeIndex(['2014-06-24T12-0700','2014-06-24T18-0700'])
times = pd.DatetimeIndex(['2014-06-24T12-0700', '2014-06-24T18-0700'])
ghi = pd.Series([0, 1], index=times)
solar_zenith = pd.Series([90, 89.99], index=times)

Expand Down Expand Up @@ -727,7 +735,7 @@ def test_dirindex_min_cos_zenith_max_zenith():
# map out behavior under difficult conditions with various
# limiting kwargs settings
# times don't have any physical relevance
times = pd.DatetimeIndex(['2014-06-24T12-0700','2014-06-24T18-0700'])
times = pd.DatetimeIndex(['2014-06-24T12-0700', '2014-06-24T18-0700'])
ghi = pd.Series([0, 1], index=times)
ghi_clearsky = pd.Series([0, 1], index=times)
dni_clearsky = pd.Series([0, 5], index=times)
Expand Down
15 changes: 7 additions & 8 deletions pvlib/test/test_location.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,14 @@
from pvlib.location import Location
from pvlib.solarposition import declination_spencer71
from pvlib.solarposition import equation_of_time_spencer71
from test_solarposition import expected_solpos, golden_mst
from test_solarposition import golden

from test_solarposition import expected_solpos, golden, golden_mst
from conftest import requires_ephem, requires_scipy


def test_location_required():
Location(32.2, -111)


def test_location_all():
Location(32.2, -111, 'US/Arizona', 700, 'Tucson')

Expand Down Expand Up @@ -71,7 +70,7 @@ def test_location_print_pytz():
' longitude: -111',
' altitude: 700',
' tz: US/Arizona'
])
])
assert tus.__str__() == expected_str


Expand Down Expand Up @@ -212,7 +211,7 @@ def test_get_clearsky_simplified_solis_aod_pw(times):
def test_get_clearsky_valueerror(times):
tus = Location(32.2, -111, 'US/Arizona', 700, 'Tucson')
with pytest.raises(ValueError):
clearsky = tus.get_clearsky(times, model='invalid_model')
tus.get_clearsky(times, model='invalid_model')


def test_from_tmy_3():
Expand Down Expand Up @@ -275,7 +274,7 @@ def test_get_airmass(times):
def test_get_airmass_valueerror(times):
tus = Location(32.2, -111, 'US/Arizona', 700, 'Tucson')
with pytest.raises(ValueError):
clearsky = tus.get_airmass(times, model='invalid_model')
tus.get_airmass(times, model='invalid_model')


def test_Location___repr__():
Expand All @@ -288,7 +287,7 @@ def test_Location___repr__():
' longitude: -111',
' altitude: 700',
' tz: US/Arizona'
])
])
assert tus.__repr__() == expected


Expand All @@ -315,4 +314,4 @@ def test_get_sun_rise_set_transit_valueerror(golden):
times = pd.DatetimeIndex(['2015-01-01 07:00:00', '2015-01-01 23:00:00'],
tz='MST')
with pytest.raises(ValueError):
result = golden.get_sun_rise_set_transit(times, method='eyeball')
golden.get_sun_rise_set_transit(times, method='eyeball')
Loading