Source code for biosteam.evaluation._indicator

# -*- coding: utf-8 -*-
# BioSTEAM: The Biorefinery Simulation and Techno-Economic Analysis Modules
# Copyright (C) 2020-2023, Yoel Cortes-Pena <yoelcortes@gmail.com>
# 
# This module is under the UIUC open-source license. See 
# github.com/BioSTEAMDevelopmentGroup/biosteam/blob/master/LICENSE.txt
# for license details.
"""
"""
from ._variable import Variable

__all__ = ('Indicator', 'indicator', 'Metric', 'metric')

[docs] class Indicator(Variable): """ Create an Indicator object that serves as an argument for Model objects. Parameters ---------- name : str Name of indicator. units : str Indicator units of measure. getter : function Should take no arguments and return the indicator value. element : str Element corresponding to indicator """ __slots__ = ('getter', 'last_value') distribution = None def __init__(self, name, getter, units=None, element=None): if name is None and hasattr(getter, '__name__'): name = getter.__name__ super().__init__(name, units, element) self.getter = getter
[docs] def __call__(self): self.last_value = self.getter() return self.last_value
[docs] def get(self): """Return value of indicator. This method used cached values.""" try: return self.last_value except: self.last_value = self.getter() return self.last_value
[docs] def difference(self): """Return the difference between the current indicator value and the last one evaluated by calling this object.""" return self.getter() - self.last_value
def indicator(getter=None, name=None, units=None, element='Biorefinery'): if not getter: return lambda getter: indicator(getter, name, units, element) return Indicator(name, getter, units, element) metric = indicator Metric = Indicator