Skip to content

Commit 3de3174

Browse files
committed
Change output to Series or array depending on wind speed
1 parent 826f740 commit 3de3174

File tree

2 files changed

+46
-28
lines changed

2 files changed

+46
-28
lines changed

tests/test_power_output.py

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -181,26 +181,38 @@ def test_power_curve_density_correction(self):
181181

182182
# Test wind_speed as pd.Series with density and power_curve as
183183
# pd.Series and np.array
184-
power_output_exp = [0.0, 461.00290572240806, 0.0]
185-
assert power_curve_density_correction(**parameters) == power_output_exp
184+
power_output_exp = pd.Series(data=[0.0, 461.00290572, 0.0],
185+
name='feedin_wind_turbine')
186+
assert_series_equal(power_curve_density_correction(**parameters),
187+
power_output_exp)
186188
parameters['density'] = np.array(parameters['density'])
187-
assert power_curve_density_correction(**parameters) == power_output_exp
189+
assert_series_equal(power_curve_density_correction(**parameters),
190+
power_output_exp)
188191
parameters['power_curve_values'] = np.array(
189192
parameters['power_curve_values'])
190193
parameters['power_curve_wind_speeds'] = np.array(
191194
parameters['power_curve_wind_speeds'])
192-
assert power_curve_density_correction(**parameters) == power_output_exp
195+
assert_series_equal(power_curve_density_correction(**parameters),
196+
power_output_exp)
193197

194198
# Test wind_speed as np.array with density and power_curve as np.array
195199
# and pd.Series
196-
assert power_curve_density_correction(**parameters) == power_output_exp
200+
parameters['wind_speed'] = np.array(parameters['wind_speed'])
201+
power_output_exp = np.array([0.0, 461.00290572, 0.0])
202+
assert_allclose(power_curve_density_correction(**parameters),
203+
power_output_exp)
204+
assert isinstance(power_curve(**parameters), np.ndarray)
197205
parameters['density'] = pd.Series(data=parameters['density'])
198-
assert power_curve_density_correction(**parameters) == power_output_exp
206+
assert_allclose(power_curve_density_correction(**parameters),
207+
power_output_exp)
208+
assert isinstance(power_curve(**parameters), np.ndarray)
199209
parameters['power_curve_wind_speeds'] = pd.Series(
200210
data=parameters['power_curve_wind_speeds'])
201211
parameters['power_curve_values'] = pd.Series(
202212
data=parameters['power_curve_values'])
203-
assert power_curve_density_correction(**parameters) == power_output_exp
213+
assert_allclose(power_curve_density_correction(**parameters),
214+
power_output_exp)
215+
assert isinstance(power_curve(**parameters), np.ndarray)
204216

205217
# Raise TypeError due to density is None
206218
with pytest.raises(TypeError):

windpowerlib/power_output.py

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -78,24 +78,24 @@ def power_coefficient_curve(wind_speed, power_coefficient_curve_wind_speeds,
7878
power_output = (1 / 8 * density * rotor_diameter ** 2 * np.pi *
7979
np.power(wind_speed, 3) *
8080
power_coefficient_time_series)
81+
# Power_output as pd.Series if wind_speed is pd.Series (else: np.array)
82+
if isinstance(wind_speed, pd.Series):
83+
power_output = pd.Series(data=power_output, index=wind_speed.index,
84+
name='feedin_wind_turbine')
85+
else:
86+
power_output = np.array(power_output)
8187
elif density_correction is True:
8288
power_curve_values = (1 / 8 * 1.225 * rotor_diameter ** 2 * np.pi *
83-
np.power(power_coefficient_curve_wind_speeds, 3) *
84-
power_coefficient_curve_values)
89+
np.power(power_coefficient_curve_wind_speeds,
90+
3) *
91+
power_coefficient_curve_values)
8592
power_output = power_curve_density_correction(
8693
wind_speed, power_coefficient_curve_wind_speeds,
8794
power_curve_values, density)
8895
else:
8996
raise TypeError("'{0}' is an invalid type. ".format(type(
9097
density_correction)) + "`density_correction` must " +
9198
"be Boolean (True or False).")
92-
93-
# Power_output as pd.Series if wind_speed is pd.Series (else: np.array)
94-
if isinstance(wind_speed, pd.Series):
95-
power_output = pd.Series(data=power_output, index=wind_speed.index,
96-
name='feedin_wind_turbine')
97-
else:
98-
power_output = np.array(power_output)
9999
return power_output
100100

101101

@@ -142,19 +142,19 @@ def power_curve(wind_speed, power_curve_wind_speeds, power_curve_values,
142142
if density_correction is False:
143143
power_output = np.interp(wind_speed, power_curve_wind_speeds,
144144
power_curve_values, left=0, right=0)
145+
# Power_output as pd.Series if wind_speed is pd.Series (else: np.array)
146+
if isinstance(wind_speed, pd.Series):
147+
power_output = pd.Series(data=power_output, index=wind_speed.index,
148+
name='feedin_wind_turbine')
149+
else:
150+
power_output = np.array(power_output)
145151
elif density_correction is True:
146152
power_output = power_curve_density_correction(
147153
wind_speed, power_curve_wind_speeds, power_curve_values, density)
148154
else:
149155
raise TypeError("'{0}' is an invalid type. ".format(type(
150156
density_correction)) + "`density_correction` must " +
151157
"be Boolean (True or False).")
152-
# Power_output as pd.Series if wind_speed is pd.Series (else: np.array)
153-
if isinstance(wind_speed, pd.Series):
154-
power_output = pd.Series(data=power_output, index=wind_speed.index,
155-
name='feedin_wind_turbine')
156-
else:
157-
power_output = np.array(power_output)
158158
return power_output
159159

160160

@@ -228,9 +228,15 @@ def power_curve_density_correction(wind_speed, power_curve_wind_speeds,
228228
raise TypeError("`density` is None. For the calculation with a " +
229229
"density corrected power curve density at hub " +
230230
"height is needed.")
231-
return [(np.interp(wind_speed[i],
232-
power_curve_wind_speeds * (1.225 / density[i])**(
233-
np.interp(power_curve_wind_speeds, [7.5, 12.5],
234-
[1/3, 2/3])),
235-
power_curve_values, left=0, right=0))
236-
for i in range(len(wind_speed))]
231+
power_output = [(np.interp(
232+
wind_speed[i], power_curve_wind_speeds * (1.225 / density[i]) ** (
233+
np.interp(power_curve_wind_speeds, [7.5, 12.5], [1/3, 2/3])),
234+
power_curve_values, left=0, right=0)) for i in range(len(wind_speed))]
235+
236+
# Power_output as pd.Series if wind_speed is pd.Series (else: np.array)
237+
if isinstance(wind_speed, pd.Series):
238+
power_output = pd.Series(data=power_output, index=wind_speed.index,
239+
name='feedin_wind_turbine')
240+
else:
241+
power_output = np.array(power_output)
242+
return power_output

0 commit comments

Comments
 (0)