Skip to content
Open
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
3 changes: 3 additions & 0 deletions docs/sphinx/source/whatsnew/v0.15.2.rst
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ Deprecations

Bug fixes
~~~~~~~~~
* Added test coverage for :py:func:`pvlib.irradiance.dirint` with
``np.array`` and ``pd.Series`` inputs.
(:issue:`2751`, :pull:`2752`)
* Corrects a bug in :py:func:`pvlib.temperature.fuentes`. If inputs were
data type integer, users can expect modeled cell temperature values to
increase slightly.
Expand Down
10 changes: 7 additions & 3 deletions pvlib/irradiance.py
Original file line number Diff line number Diff line change
Expand Up @@ -1964,9 +1964,9 @@ def dirint(ghi, solar_zenith, times, pressure=101325., use_delta_kt_prime=True,

Returns
-------
dni : array-like
The modeled direct normal irradiance, as provided by the
DIRINT model. [Wm⁻²]
dni : pd.Series
Estimated direct normal irradiance. Returns float if all inputs
are scalar, pd.Series otherwise. [Wm⁻²]

Notes
-----
Expand Down Expand Up @@ -2109,6 +2109,10 @@ def _dirint_bins(times, kt_prime, zenith, w, delta_kt_prime):
-------
tuple of kt_prime_bin, zenith_bin, w_bin, delta_kt_prime_bin
"""
# Ensure scalar inputs are converted to Series so that boolean masks
# produce a boolean Series rather than a scalar bool.
# Scalar bools cause KeyError in pandas >= 2.0. GH #XXXX

# @wholmgren: the following bin assignments use MATLAB's 1-indexing.
# Later, we'll subtract 1 to conform to Python's 0-indexing.

Expand Down
25 changes: 25 additions & 0 deletions tests/test_irradiance.py
Original file line number Diff line number Diff line change
Expand Up @@ -1140,6 +1140,31 @@ def test_dirindex_min_cos_zenith_max_zenith():
assert_series_equal(out, expected)


def test_dirint_array_inputs():
"""np.array inputs work correctly. GH #2751"""
times = pd.DatetimeIndex(['2023-06-21 12:00'], tz='UTC')

# np.array input (1-element) -- return pd.Series
result = irradiance.dirint(
ghi=np.array([500.0]),
solar_zenith=np.array([45.0]),
times=times,
use_delta_kt_prime=False
)
assert isinstance(result, pd.Series)
assert result.iloc[0] > 0

# pd.Series input -- return pd.Series
times2 = pd.date_range('2023-06-21 10:00', periods=3, freq='h', tz='UTC')
result2 = irradiance.dirint(
ghi=pd.Series([400, 500, 300], index=times2),
solar_zenith=pd.Series([50, 40, 60], index=times2),
times=times2
)
assert isinstance(result2, pd.Series)
assert (result2 >= 0).all()


def test_dni():
ghi = pd.Series([90, 100, 100, 100, 100])
dhi = pd.Series([100, 90, 50, 50, 50])
Expand Down
Loading