Helpers and Plotting#
Plotting#
Provides expoerimental plotting routines to help with simulation diagnostics.
- wombat.utilities.plot.plot_farm_layout(windfarm, figure_kwargs=None, plot_kwargs=None, return_fig=False)[source]#
Plot the graph representation of the windfarm as represented through WOMBAT.
- Args:
- figure_kwargsdict, optional
Customized keyword arguments for matplotlib figure instantiation that will passed as
plt.figure(**figure_kwargs). Defaults to {}.
- plot_kwargsdict, optional
Customized parameters for
networkx.draw()
that can will passed asnx.draw(**figure_kwargs)
. Defaults towith_labels=True
,horizontalalignment=right
,verticalalignment=bottom
,font_weight=bold
,font_size=10
, andnode_color=#E37225
.- return_figbool, optional
Whether or not to return the figure and axes objects for further editing and/or saving. Defaults to False.
- Return type:
None
|tuple
[figure
,axes
]- Returns:
None | tuple[plt.figure, plt.axes]: _description_
- Parameters:
windfarm (Windfarm)
figure_kwargs (dict | None)
plot_kwargs (dict | None)
return_fig (bool)
- wombat.utilities.plot.plot_farm_availability(sim, which='energy', individual_turbines=False, farm_95_CI=False, figure_kwargs=None, plot_kwargs=None, legend_kwargs=None, tick_fontsize=12, label_fontsize=16, return_fig=False)[source]#
Plots a line chart of the monthly availability at the wind farm level.
- Parameters:
sim (Simulation) -- A
Simulation
object that has been run.which (str) -- One of "time" or "energy", to indicate the basis for the availability calculation, by default "energy".
individual_turbines (bool, optional) -- Indicates if faint gray lines should be added in the background for the availability of each turbine, by default False.
farm_95_CI (bool, optional) -- Indicates if the 95% CI area fill should be added in the background.
figure_kwargs (dict, optional) -- Custom parameters for
plt.figure()
, by defaultfigsize=(15, 7)
anddpi=300
.plot_kwargs (dict, optional) -- Custom parameters to be passed to
ax.plot()
, by default a label consisting of the simulation name and project-level availability.legend_kwargs (dict, optional) -- Custom parameters to be passed to
ax.legend()
, by defaultfontsize=14
.tick_fontsize (int, optional) -- The x- and y-axis tick label fontsize, by default 12.
label_fontsize (int, optional) -- The x- and y-axis label fontsize, by default 16.
return_fig (bool, optional) -- If
True
, return the figure and Axes object, otherwise don't, by default False.
- Return type:
tuple
[Figure
|Axes
] |None
- Returns:
tuple[plt.Figure, plt.Axes] | None -- See
return_fig
for details. _description_
- wombat.utilities.plot.plot_operational_levels(sim, figure_kwargs=None, cbar_label_fontsize=14, return_fig=False)[source]#
Plots an hourly view of the operational levels of the wind farm and individual turbines as a heatmap.
- Parameters:
sim (Simulation) -- A
Simulation
object that has been run.figure_kwargs (dict, optional) -- Custom settings for
plt.figure()
, by defaultfigsize=(15, 10)
anddpi=300
.cbar_label_fontsize (int, optional) -- The default fontsize used in the color bar legend for the axis label, by default 14.
return_fig (bool, optional) -- If
True
, return the figure and Axes object, otherwise don't, by default False.
- Returns:
tuple[plt.Figure, plt.Axes] | None -- See
return_fig
for details.
Logging functions#
General logging methods.
- wombat.utilities.logging.setup_logger(logger_name, log_file, level=20, capacity=500)[source]#
Creates the logging infrastructure for a given logging category.
TODO: Figure out how to type check
logging.INFO
;Callable
?- Parameters:
logger_name (str) -- Name to assign to the logger.
log_file (Path) -- File name and path for where the log data should be saved.
level (Any, optional) -- Logging level, by default logging.INFO.
capacity (int)
- Return type:
None
- wombat.utilities.logging.format_events_log_message(simulation_time, env_time, system_id, system_name, part_id, part_name, system_ol, part_ol, agent, action, reason, additional, duration, request_id, location='na', materials_cost=0, hourly_labor_cost=0, salary_labor_cost=0, equipment_cost=0)[source]#
Formats the logging messages into the expected format for logging.
- Parameters:
simulation_time (datetime64) -- Timestamp within the simulation time.
env_time (float) -- Environment simulation time (
Environment.now
).system_id (str) -- Turbine ID,
System.id
.system_name (str) -- Turbine name,
System.name
.part_id (str) -- Subassembly, component, or cable ID,
_.id
.part_name (str) -- Subassembly, component, or cable name,
_.name
.system_ol (int | float) -- System operating level,
System.operating_level
. Use an empty string for n/a.part_ol (int | float) -- Subassembly, component, or cable operating level,
_.operating_level
. Use an empty string for n/a.agent (str) -- Agent performin the action.
action (str) -- Action that was taken.
reason (str) -- Reason an action was taken.
additional (str) -- Any additional information that needs to be logged.
duration (float) -- Length of time the action lasted.
request_id (str) -- The
RepairRequest.request_id
or "na".location (str) -- The location of where the event ocurred: should be one of site, port, enroute, or system, by default "na".
materials_cost (int | float, optional) -- Total cost of materials for action, in USD, by default 0.
hourly_labor_cost (int | float, optional) -- Total cost of hourly labor for action, in USD, by default 0.
salary_labor_cost (int | float, optional) -- Total cost of salaried labor for action, in USD, by default 0.
equipment_cost (int | float, optional) -- Total cost of equipment for action, in USD, by default 0.
- Return type:
str
- Returns:
str -- Formatted message for consistent logging.[summary]
Time Calculations#
General methods for time-based calculations.
- wombat.utilities.time.parse_date(value)[source]#
Thin wrapper for
dateutil.parser.parse
that converts string dates and returns back None or the original value if it's None or adatetime.datetime
object, respectively.- Parameters:
value (str | None | datetime.datetime) -- A month/date or month-date formatted string to be converted to a
datetime.datetime
object, ordatetime.datetime
object, or None.- Return type:
datetime
|None
- Returns:
datetime.datetime | None -- A converted
datetime.datetime
object or None.
- wombat.utilities.time.convert_dt_to_hours(diff)[source]#
Convert a
datetime.timedelta
object to number of hours at the seconds resolution.- Parameters:
diff (datetime.timedelta) -- The difference between two
datetime.datetime
objects.- Return type:
float
- Returns:
float -- Number of hours between to
datetime.datetime
objects.
- wombat.utilities.time.hours_until_future_hour(dt, hour)[source]#
Number of hours until a future hour in the same day for
hour
<= 24, otherwise, it is the number of hours until a time in the proceeding days.- Parameters:
dt (datetime.datetime) -- Focal datetime.
hour (int) -- Hour that is later in the day, in 24 hour time.
- Return type:
float
- Returns:
float -- Number of hours between the two times.
- wombat.utilities.time.check_working_hours(env_start, env_end, workday_start, workday_end)[source]#
Checks the working hours of a port or servicing equipment, and overrides a default (-1) to the environment's settings, otherwise returns back the input hours.
- Parameters:
env_start (int) -- The starting hour for the environment's shift
env_end (int) -- The ending hour for the environment's shift
workday_start (int) -- The starting hour to be checked.
workday_end (int) -- The ending hour to be checked.
- Return type:
tuple
[int
,int
]- Returns:
tuple[int, int] -- The starting and ending hour to be applied back to the port or servicing equipment.
- wombat.utilities.time.calculate_cost(duration, rate, n_rate=1, daily_rate=False)[source]#
Calculates the equipment cost, or labor cost for either salaried or hourly employees.
- Parameters:
duration (int | float) -- Length of time, in hours.
rate (float) -- The labor or equipment rate, in $USD/hour.
n_rate (int) -- Total number of of the rate to be applied, more than one if``rate`` is broken down by number of individual laborers (if rate is a labor rate), by default 1.
daily_rate (bool, optional) -- Indicator for if the
rate
is a daily rate (True), or hourly rate (False), by default False.
- Return type:
float
- Returns:
float -- The total cost of the labor performed.
Miscellaneous#
Provides various utility functions that don't fit within a common theme.
- wombat.utilities.utilities._mean(*args)[source]#
Multiplies two numbers. Used for a reduce operation.
- Parameters:
args (int | float) -- The values to compute the mean over
- Return type:
float
- Returns:
float -- The average of the values provided
- wombat.utilities.utilities.create_variable_from_string(string)[source]#
Creates a valid Python variable style string from a passed string.
- Parameters:
string (str) -- The string to convert into a Python-friendly variable name.
- Return type:
str
- Returns:
str -- A Python-valid variable name.
Examples
>>> example_string = "*Electrical!*_ _System$*_" >>> print(create_variable_from_string(example_string)) 'electrical_system'
- wombat.utilities.utilities.IEC_power_curve(windspeed_column, power_column, bin_width=0.5, windspeed_start=0.0, windspeed_end=30.0)[source]#
Direct copyfrom OpenOA: NREL/OpenOA Use IEC 61400-12-1-2 method for creating wind-speed binned power curve.
- Parameters:
windspeed_column (np.ndarray | pandas.Series) -- The power curve's windspeed values, in m/s.
power_column (np.ndarray | pandas.Series) -- The power curve's output power values, in kW.
bin_width (float) -- Width of windspeed bin, default is 0.5 m/s according to standard, by default 0.5.
windspeed_start (float) -- Left edge of first windspeed bin, where all proceeding values will be 0.0, by default 0.0.
windspeed_end (float) -- Right edge of last windspeed bin, where all following values will be 0.0, by default 30.0.
- Return type:
Callable
- Returns:
- Callable
Python function of the power curve, of type (Array[float] -> Array[float]), that maps input windspeed value(s) to ouptut power value(s).