Skip to content

Commit d8b82df

Browse files
committed
Fixing style errors.
1 parent bc786f1 commit d8b82df

File tree

2 files changed

+177
-103
lines changed

2 files changed

+177
-103
lines changed

tests/test_wind_farm.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -224,9 +224,12 @@ def test_wind_farm_efficiency_with_missing_efficiency(self):
224224
"""Test WindFarm.assign_power_curve() with missing efficiency while
225225
`wake_losses_model` is 'wind_farm_efficiency'."""
226226
wind_turbine_fleet = [
227-
{'wind_turbine': WindTurbine(**self.test_turbine),
228-
'number_of_turbines': 3}]
227+
{
228+
"wind_turbine": WindTurbine(**self.test_turbine),
229+
"number_of_turbines": 3,
230+
}
231+
]
229232
windfarm = WindFarm(wind_turbine_fleet=wind_turbine_fleet)
230-
msg = 'If you use `wake_losses_model`'
233+
msg = "If you use `wake_losses_model`"
231234
with pytest.raises(ValueError, match=msg):
232-
windfarm.assign_power_curve()
235+
windfarm.assign_power_curve()

windpowerlib/wind_farm.py

Lines changed: 170 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ class WindFarm(object):
113113
31200000.0
114114
"""
115115

116-
def __init__(self, wind_turbine_fleet, efficiency=None, name='', **kwargs):
116+
def __init__(self, wind_turbine_fleet, efficiency=None, name="", **kwargs):
117117

118118
self.wind_turbine_fleet = wind_turbine_fleet
119119
self.efficiency = efficiency
@@ -141,76 +141,100 @@ def check_and_complete_wind_turbine_fleet(self):
141141

142142
# check wind turbines
143143
try:
144-
for turbine in self.wind_turbine_fleet['wind_turbine']:
144+
for turbine in self.wind_turbine_fleet["wind_turbine"]:
145145
if not isinstance(turbine, WindTurbine):
146146
raise ValueError(
147-
'Wind turbine must be provided as WindTurbine object '
148-
'but was provided as {}.'.format(type(turbine)))
147+
"Wind turbine must be provided as WindTurbine object "
148+
"but was provided as {}.".format(type(turbine))
149+
)
149150
except KeyError:
150-
raise KeyError('Missing wind_turbine key/column in '
151-
'wind_turbine_fleet parameter.')
151+
raise KeyError(
152+
"Missing wind_turbine key/column in "
153+
"wind_turbine_fleet parameter."
154+
)
152155

153156
# add columns for number of turbines and total capacity if they don't
154157
# yet exist
155-
if 'number_of_turbines' not in self.wind_turbine_fleet.columns:
156-
self.wind_turbine_fleet['number_of_turbines'] = np.nan
157-
if 'total_capacity' not in self.wind_turbine_fleet.columns:
158-
self.wind_turbine_fleet['total_capacity'] = np.nan
158+
if "number_of_turbines" not in self.wind_turbine_fleet.columns:
159+
self.wind_turbine_fleet["number_of_turbines"] = np.nan
160+
if "total_capacity" not in self.wind_turbine_fleet.columns:
161+
self.wind_turbine_fleet["total_capacity"] = np.nan
159162

160163
# calculate number of turbines if necessary
161164
number_turbines_not_provided = self.wind_turbine_fleet[
162-
self.wind_turbine_fleet['number_of_turbines'].isnull()]
165+
self.wind_turbine_fleet["number_of_turbines"].isnull()
166+
]
163167
for ix, row in number_turbines_not_provided.iterrows():
164-
msg = 'Number of turbines of type {0} can not be deduced ' \
165-
'from total capacity. Please either provide ' \
166-
'`number_of_turbines` in the turbine fleet definition or ' \
167-
'set the nominal power of the wind turbine.'
168+
msg = (
169+
"Number of turbines of type {0} can not be deduced "
170+
"from total capacity. Please either provide "
171+
"`number_of_turbines` in the turbine fleet definition or "
172+
"set the nominal power of the wind turbine."
173+
)
168174
try:
169-
number_of_turbines = row['total_capacity'] / \
170-
row['wind_turbine'].nominal_power
175+
number_of_turbines = (
176+
row["total_capacity"] / row["wind_turbine"].nominal_power
177+
)
171178
if np.isnan(number_of_turbines):
172-
raise ValueError(msg.format(row['wind_turbine']))
179+
raise ValueError(msg.format(row["wind_turbine"]))
173180
else:
174-
self.wind_turbine_fleet.loc[ix, 'number_of_turbines'] = \
175-
number_of_turbines
181+
self.wind_turbine_fleet.loc[
182+
ix, "number_of_turbines"
183+
] = number_of_turbines
176184
except TypeError:
177-
raise ValueError(msg.format(row['wind_turbine']))
185+
raise ValueError(msg.format(row["wind_turbine"]))
178186

179187
# calculate total capacity if necessary and check that total capacity
180188
# and number of turbines is consistent if both are provided
181189
for ix, row in self.wind_turbine_fleet.iterrows():
182-
if np.isnan(row['total_capacity']):
190+
if np.isnan(row["total_capacity"]):
183191
try:
184-
self.wind_turbine_fleet.loc[ix, 'total_capacity'] = \
185-
row['number_of_turbines'] * \
186-
row['wind_turbine'].nominal_power
192+
self.wind_turbine_fleet.loc[ix, "total_capacity"] = (
193+
row["number_of_turbines"]
194+
* row["wind_turbine"].nominal_power
195+
)
187196
except TypeError:
188197
raise ValueError(
189-
'Total capacity of turbines of type {turbine} cannot '
190-
'be deduced. Please check if the nominal power of the '
191-
'wind turbine is set.'.format(
192-
turbine=row['wind_turbine']))
198+
"Total capacity of turbines of type {turbine} cannot "
199+
"be deduced. Please check if the nominal power of the "
200+
"wind turbine is set.".format(
201+
turbine=row["wind_turbine"]
202+
)
203+
)
193204
else:
194-
if not abs(row['total_capacity'] - (
195-
row['number_of_turbines'] *
196-
row['wind_turbine'].nominal_power)) < 1:
197-
self.wind_turbine_fleet.loc[ix, 'total_capacity'] = \
198-
row['number_of_turbines'] * \
199-
row['wind_turbine'].nominal_power
205+
if (
206+
not abs(
207+
row["total_capacity"]
208+
- (
209+
row["number_of_turbines"]
210+
* row["wind_turbine"].nominal_power
211+
)
212+
)
213+
< 1
214+
):
215+
self.wind_turbine_fleet.loc[ix, "total_capacity"] = (
216+
row["number_of_turbines"]
217+
* row["wind_turbine"].nominal_power
218+
)
200219
msg = (
201-
'The provided total capacity of WindTurbine {0} has '
202-
'been overwritten as it was not consistent with the '
203-
'number of turbines provided for this type.')
204-
warnings.warn(msg.format(row['wind_turbine']),
205-
tools.WindpowerlibUserWarning)
220+
"The provided total capacity of WindTurbine {0} has "
221+
"been overwritten as it was not consistent with the "
222+
"number of turbines provided for this type."
223+
)
224+
warnings.warn(
225+
msg.format(row["wind_turbine"]),
226+
tools.WindpowerlibUserWarning,
227+
)
206228

207229
def __repr__(self):
208-
if self.name is not '':
209-
return 'Wind farm: {name}'.format(name=self.name)
230+
if self.name is not "":
231+
return "Wind farm: {name}".format(name=self.name)
210232
else:
211-
return 'Wind farm with turbine fleet: [number, type]\n {}'.format(
233+
return "Wind farm with turbine fleet: [number, type]\n {}".format(
212234
self.wind_turbine_fleet.loc[
213-
:, ['number_of_turbines', 'wind_turbine']].values)
235+
:, ["number_of_turbines", "wind_turbine"]
236+
].values
237+
)
214238

215239
@property
216240
def nominal_power(self):
@@ -268,16 +292,24 @@ def mean_hub_height(self):
268292
269293
"""
270294
self.hub_height = np.exp(
271-
sum(np.log(row['wind_turbine'].hub_height) * row['total_capacity']
272-
for ix, row in self.wind_turbine_fleet.iterrows()) /
273-
self.nominal_power)
295+
sum(
296+
np.log(row["wind_turbine"].hub_height) * row["total_capacity"]
297+
for ix, row in self.wind_turbine_fleet.iterrows()
298+
)
299+
/ self.nominal_power
300+
)
274301
return self
275302

276-
def assign_power_curve(self, wake_losses_model='wind_farm_efficiency',
277-
smoothing=False, block_width=0.5,
278-
standard_deviation_method='turbulence_intensity',
279-
smoothing_order='wind_farm_power_curves',
280-
turbulence_intensity=None, **kwargs):
303+
def assign_power_curve(
304+
self,
305+
wake_losses_model="wind_farm_efficiency",
306+
smoothing=False,
307+
block_width=0.5,
308+
standard_deviation_method="turbulence_intensity",
309+
smoothing_order="wind_farm_power_curves",
310+
turbulence_intensity=None,
311+
**kwargs
312+
):
281313
r"""
282314
Calculates the power curve of a wind farm.
283315
@@ -327,87 +359,126 @@ def assign_power_curve(self, wake_losses_model='wind_farm_efficiency',
327359
328360
"""
329361
# Check if all wind turbines have a power curve as attribute
330-
for turbine in self.wind_turbine_fleet['wind_turbine']:
362+
for turbine in self.wind_turbine_fleet["wind_turbine"]:
331363
if turbine.power_curve is None:
332-
raise ValueError("For an aggregated wind farm power curve " +
333-
"each wind turbine needs a power curve " +
334-
"but `power_curve` of '{}' is None.".format(
335-
turbine))
364+
raise ValueError(
365+
"For an aggregated wind farm power curve "
366+
+ "each wind turbine needs a power curve "
367+
+ "but `power_curve` of '{}' is None.".format(turbine)
368+
)
336369
# Initialize data frame for power curve values
337370
df = pd.DataFrame()
338371
for ix, row in self.wind_turbine_fleet.iterrows():
339372
# Check if needed parameters are available and/or assign them
340373
if smoothing:
341-
if (standard_deviation_method == 'turbulence_intensity' and
342-
turbulence_intensity is None):
343-
if 'roughness_length' in kwargs and \
344-
kwargs['roughness_length'] is not None:
374+
if (
375+
standard_deviation_method == "turbulence_intensity"
376+
and turbulence_intensity is None
377+
):
378+
if (
379+
"roughness_length" in kwargs
380+
and kwargs["roughness_length"] is not None
381+
):
345382
# Calculate turbulence intensity and write to kwargs
346-
turbulence_intensity = (
347-
tools.estimate_turbulence_intensity(
348-
row['wind_turbine'].hub_height,
349-
kwargs['roughness_length']))
350-
kwargs['turbulence_intensity'] = turbulence_intensity
383+
turbulence_intensity = tools.estimate_turbulence_intensity(
384+
row["wind_turbine"].hub_height,
385+
kwargs["roughness_length"],
386+
)
387+
kwargs["turbulence_intensity"] = turbulence_intensity
351388
else:
352389
raise ValueError(
353-
"`roughness_length` must be defined for using " +
354-
"'turbulence_intensity' as " +
355-
"`standard_deviation_method` if " +
356-
"`turbulence_intensity` is not given")
390+
"`roughness_length` must be defined for using "
391+
+ "'turbulence_intensity' as "
392+
+ "`standard_deviation_method` if "
393+
+ "`turbulence_intensity` is not given"
394+
)
357395
# Get original power curve
358-
power_curve = pd.DataFrame(row['wind_turbine'].power_curve)
396+
power_curve = pd.DataFrame(row["wind_turbine"].power_curve)
359397
# Editions to the power curves before the summation
360-
if smoothing and smoothing_order == 'turbine_power_curves':
398+
if smoothing and smoothing_order == "turbine_power_curves":
361399
power_curve = power_curves.smooth_power_curve(
362-
power_curve['wind_speed'], power_curve['value'],
400+
power_curve["wind_speed"],
401+
power_curve["value"],
363402
standard_deviation_method=standard_deviation_method,
364-
block_width=block_width, **kwargs)
403+
block_width=block_width,
404+
**kwargs,
405+
)
365406
else:
366407
# Add value zero to start and end of curve as otherwise
367408
# problems can occur during the aggregation
368-
if power_curve.iloc[0]['wind_speed'] != 0.0:
409+
if power_curve.iloc[0]["wind_speed"] != 0.0:
369410
power_curve = pd.concat(
370-
[pd.DataFrame(data={
371-
'value': [0.0], 'wind_speed': [0.0]}),
372-
power_curve], join='inner')
373-
if power_curve.iloc[-1]['value'] != 0.0:
411+
[
412+
pd.DataFrame(
413+
data={"value": [0.0], "wind_speed": [0.0]}
414+
),
415+
power_curve,
416+
],
417+
join="inner",
418+
)
419+
if power_curve.iloc[-1]["value"] != 0.0:
374420
power_curve = pd.concat(
375-
[power_curve, pd.DataFrame(data={
376-
'wind_speed': [power_curve['wind_speed'].loc[
377-
power_curve.index[-1]] + 0.5],
378-
'value': [0.0]})], join='inner')
421+
[
422+
power_curve,
423+
pd.DataFrame(
424+
data={
425+
"wind_speed": [
426+
power_curve["wind_speed"].loc[
427+
power_curve.index[-1]
428+
]
429+
+ 0.5
430+
],
431+
"value": [0.0],
432+
}
433+
),
434+
],
435+
join="inner",
436+
)
379437
# Add power curves of all turbine types to data frame
380438
# (multiplied by turbine amount)
381439
df = pd.concat(
382-
[df, pd.DataFrame(power_curve.set_index(['wind_speed']) *
383-
row['number_of_turbines'])], axis=1)
440+
[
441+
df,
442+
pd.DataFrame(
443+
power_curve.set_index(["wind_speed"])
444+
* row["number_of_turbines"]
445+
),
446+
],
447+
axis=1,
448+
)
384449
# Aggregate all power curves
385450
wind_farm_power_curve = pd.DataFrame(
386-
df.interpolate(method='index').sum(axis=1))
387-
wind_farm_power_curve.columns = ['value']
451+
df.interpolate(method="index").sum(axis=1)
452+
)
453+
wind_farm_power_curve.columns = ["value"]
388454
wind_farm_power_curve.reset_index(inplace=True)
389455
# Apply power curve smoothing and consideration of wake losses
390456
# after the summation
391-
if smoothing and smoothing_order == 'wind_farm_power_curves':
457+
if smoothing and smoothing_order == "wind_farm_power_curves":
392458
wind_farm_power_curve = power_curves.smooth_power_curve(
393-
wind_farm_power_curve['wind_speed'],
394-
wind_farm_power_curve['value'],
459+
wind_farm_power_curve["wind_speed"],
460+
wind_farm_power_curve["value"],
395461
standard_deviation_method=standard_deviation_method,
396-
block_width=block_width, **kwargs)
397-
if wake_losses_model == 'wind_farm_efficiency':
462+
block_width=block_width,
463+
**kwargs,
464+
)
465+
if wake_losses_model == "wind_farm_efficiency":
398466
if self.efficiency is not None:
399-
wind_farm_power_curve = (
400-
power_curves.wake_losses_to_power_curve(
401-
wind_farm_power_curve['wind_speed'].values,
402-
wind_farm_power_curve['value'].values,
403-
wind_farm_efficiency=self.efficiency))
467+
wind_farm_power_curve = power_curves.wake_losses_to_power_curve(
468+
wind_farm_power_curve["wind_speed"].values,
469+
wind_farm_power_curve["value"].values,
470+
wind_farm_efficiency=self.efficiency,
471+
)
404472
else:
405473
msg = (
406474
"If you use `wake_losses_model` '{model}' your WindFarm "
407475
"needs an efficiency but `efficiency` is {eff}. \n\n"
408476
"Failing farm:\n {farm}"
409477
)
410-
raise ValueError(msg.format(model=wake_losses_model, farm=self,
411-
eff=self.efficiency))
478+
raise ValueError(
479+
msg.format(
480+
model=wake_losses_model, farm=self, eff=self.efficiency
481+
)
482+
)
412483
self.power_curve = wind_farm_power_curve
413484
return self

0 commit comments

Comments
 (0)