# -*- coding: utf-8 -*-
"""Output request config to handle user output requests.
This module will allow for aliases and fix some typos.
Created on Mon Jul 8 09:37:23 2019
@author: gbuster
"""
import logging
from warnings import warn
from reV.utilities.exceptions import ConfigWarning
logger = logging.getLogger(__name__)
[docs]class OutputRequest(list):
"""Base output request list framework with request key correction logic."""
# map of commonly expected typos.
# keys are typos, values are correct var names
# all available output variables should be in the values
CORRECTIONS = {}
def __init__(self, inp):
"""
Parameters
----------
inp : list | tuple | str
List of requested reV output variables.
"""
if isinstance(inp, str):
inp = [inp]
for request in inp:
if request in self.CORRECTIONS.values():
self.append(request)
elif request in self.CORRECTIONS:
self.append(self.CORRECTIONS[request])
msg = ('Correcting output request "{}" to "{}".'
.format(request, self.CORRECTIONS[request]))
logger.warning(msg)
warn(msg, ConfigWarning)
else:
self.append(request)
logger.debug('Did not recognize requested output variable '
'"{}". Passing forward, but this may cause a '
'downstream error. Available known output '
'variables are: {}'
.format(request,
list(set(self.CORRECTIONS.values()))))
[docs]class SAMOutputRequest(OutputRequest):
"""SAM output request framework."""
# map of commonly expected typos.
# keys are typos, values are correct SAM var names
# all available SAM output variables should be in the values
CORRECTIONS = {'cf_means': 'cf_mean',
'cf': 'cf_mean',
'capacity': 'system_capacity',
'capacity_factor': 'cf_mean',
'capacityfactor': 'cf_mean',
'cf_profiles': 'cf_profile',
'profiles': 'cf_profile',
'profile': 'cf_profile',
'dni_means': 'dni_mean',
'ghi_means': 'ghi_mean',
'ws_means': 'ws_mean',
'generation': 'annual_energy',
'yield': 'energy_yield',
'generation_profile': 'gen_profile',
'generation_profiles': 'gen_profile',
'plane_of_array': 'poa',
'plane_of_array_irradiance': 'poa',
'gen_profiles': 'gen_profile',
'lcoe': 'lcoe_fcr',
'foc': 'fixed_operating_cost',
'voc': 'variable_operating_cost',
'fcr': 'fixed_charge_rate',
'cc': 'capital_cost',
'lcoe_nominal': 'lcoe_nom',
'real_lcoe': 'lcoe_real',
'net_present_value': 'project_return_aftertax_npv',
'npv': 'project_return_aftertax_npv',
'ppa': 'ppa_price',
'single_owner': 'ppa_price',
'singleowner': 'ppa_price',
'actual_irr': 'flip_actual_irr',
'irr': 'flip_actual_irr',
'cf_total_revenue': 'gross_revenue',
'total_cost': 'total_installed_cost',
'turbine': 'turbine_cost',
'sales_tax': 'sales_tax_cost',
'bos': 'bos_cost',
'albedo': 'surface_albedo',
'ac_power': 'ac',
'dc_power': 'dc',
'clipping': 'clipped_power',
'clipped': 'clipped_power',
'clip': 'clipped_power'
}