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
17 changes: 16 additions & 1 deletion floris/wind_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,14 @@ def __init__(
if not isinstance(wind_speeds, np.ndarray):
raise TypeError("wind_speeds must be a NumPy array")

# Confirm that both wind_directions and wind_speeds are monitonically
# Confirm that none of wind_directions or wind_speeds contain NaN values
if np.isnan(wind_directions).any():
raise ValueError("wind_directions must not contain NaNs")

if np.isnan(wind_speeds).any():
raise ValueError("wind_speeds must not contain NaNs")

# Confirm that both wind_directions and wind_speeds are monotonically
# increasing and evenly spaced
if len(wind_directions) > 1:
# Check monotonically increasing
Expand Down Expand Up @@ -1125,6 +1132,14 @@ def __init__(
if not isinstance(turbulence_intensities, np.ndarray):
raise TypeError("turbulence_intensities must be a NumPy array")

# Check that wind_directions, wind_speeds, and turbulence_intensities do not contain NaNs
if np.isnan(wind_directions).any():
raise ValueError("wind_directions must not contain NaNs")
if np.isnan(wind_speeds).any():
raise ValueError("wind_speeds must not contain NaNs")
if np.isnan(turbulence_intensities).any():
raise ValueError("turbulence_intensities must not contain NaNs")

# Confirm that both wind_directions and wind_speeds
# and turbulence intensities are monotonically
# increasing and evenly spaced
Expand Down
28 changes: 28 additions & 0 deletions tests/wind_data_integration_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,21 @@ def test_time_series_instantiation():
with pytest.raises(TypeError):
TimeSeries(wind_directions, wind_speeds)

# Test instantiation with NaN values
with pytest.raises(ValueError, match="contain NaNs"):
TimeSeries(np.array([270, 280, np.nan]), wind_speeds, turbulence_intensities=0.06)
with pytest.raises(ValueError, match="contain NaNs"):
TimeSeries(wind_directions, np.array([np.nan, 5, 5,]), turbulence_intensities=0.06)
with pytest.raises(ValueError, match="contain NaNs"):
TimeSeries(wind_directions, wind_speeds, np.array([0.06, np.nan, 0.06]))
with pytest.raises(ValueError, match="contain NaNs"):
TimeSeries(
wind_directions,
wind_speeds,
0.06*np.ones_like(wind_speeds),
np.array([1.0, np.nan, 3.0])
)

# Test that passing a float TI returns a list of length matched to wind directions
time_series = TimeSeries(wind_directions, wind_speeds, turbulence_intensities=0.06)
np.testing.assert_allclose(time_series.turbulence_intensities, [0.06, 0.06, 0.06])
Expand Down Expand Up @@ -81,6 +96,12 @@ def test_wind_rose_init():
with pytest.raises(ValueError):
WindRose(np.array([290, 280, 270]), np.array([6, 7]), 0.06)

# Test that passing in a NaN value raises an error
with pytest.raises(ValueError, match="contain NaNs"):
WindRose(np.array([270, 280, np.nan]), np.array([6, 7]), 0.06)
with pytest.raises(ValueError, match="contain NaNs"):
WindRose(np.array([270, 280, 290]), np.array([np.nan, 7]), 0.06)

wind_directions = np.array([270, 280, 290])
wind_speeds = np.array([6, 7])

Expand Down Expand Up @@ -750,6 +771,13 @@ def test_wind_ti_rose_init():
with pytest.raises(ValueError):
WindTIRose(wind_directions, wind_speeds, turbulence_intensities, np.ones((3, 3, 3)))

# Test that passing in a NaN value raises an error
with pytest.raises(ValueError, match="contain NaNs"):
WindTIRose(np.array([270, 280, np.nan, 300]), wind_speeds, turbulence_intensities)
with pytest.raises(ValueError, match="contain NaNs"):
WindTIRose(wind_directions, np.array([6, np.nan, 8]), turbulence_intensities)
with pytest.raises(ValueError, match="contain NaNs"):
WindTIRose(wind_directions, wind_speeds, np.array([0.05, np.nan]))

def test_wind_ti_rose_grid():
wind_directions = np.array([270, 280, 290, 300])
Expand Down
Loading