Skip to content
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
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
71 changes: 40 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,25 @@ 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)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

since you're making formatting changes, possibly consider:

result = irradiance.get_extra_radiation(
    times, method='nrel', how='numba', numthreads=4)

this is blacker code, tho not quite completely Black

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree this better formatting in this case. Overall, I prefer the grey zone.

# 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 +143,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 +203,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 +268,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 +298,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 +493,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 +504,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 +516,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 +736,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