Prado EFO PVA
rule.py
Go to the documentation of this file.
1 # -*- coding: utf-8 -*-
2 """
3 Created on Sat May 9 08:06:12 2020
4 
5 @author: cd
6 """
7 
8 import abc
9 import numpy as np
10 from efo.time import TimeBase
11 
12 # TODO: Create RuleStack class that sub-classes RuleBase - would need to figure out how set
13 # ...the qMin and qMax properties. Might be better to have RuleStack be it's own thing
14 
15 
16 class RuleBase(metaclass=abc.ABCMeta):
17  # TODO: Subrule could also be passed as an optional initializer with a default val
18  def __init__(self, name, time):
19  self.namename = name
20  self.subRulesubRule = None
21  # TODO: Should use error handling instead
22  if issubclass(type(time), TimeBase):
23  self.TT = time
24  self.releaserelease = np.zeros(time.nSteps)
25  super().__init__()
26 
27  def set_subrule(self, subRule):
28  self.subRulesubRule = subRule
29 
30  # @abc.abstractmethod
31  def calc_release(self, rlsProposed, *, rlsPrev=None, rlsUnCtrl=None, stor=None, qIn=None):
32  if self.subRulesubRule:
33  rlsProposed = self.subRulesubRule.calc_release(rlsProposed,
34  rlsPrev=rlsPrev, rlsUnCtrl=rlsUnCtrl, stor=stor, qIn=qIn)
35  return rlsProposed
36 
37  @classmethod
38  def __subclasshook__(cls, C):
39  if cls is RuleBase:
40  attrs = set(dir(C))
41  if set(cls.__abstractmethods__) <= attrs:
42  return True
43  return NotImplemented
44 
45 
47  def __init__(self, name, time):
48  # Call super class constructor
49  super().__init__(name, time)
50 
51  def set_release(self, timeStep, rlsSpecified):
52  iSpec = self.TT.steps == timeStep
53  self.releaserelease[iSpec] = rlsSpecified
54 
55  # TODO: Why do rlsPrev and qIn have default vals but the other don't?
56  # TODO: Seems like they should all have default vals
57  def calc_release(self, rlsProposed, rlsUnCtrl, stor, rlsPrev=None, qIn=None):
58  return self.releaserelease[self.TT.step]
def __init__(self, name, time)
Definition: rule.py:18
def __subclasshook__(cls, C)
Definition: rule.py:38
def calc_release(self, rlsProposed, *rlsPrev=None, rlsUnCtrl=None, stor=None, qIn=None)
Definition: rule.py:31
def set_subrule(self, subRule)
Definition: rule.py:27
def __init__(self, name, time)
Definition: rule.py:47
def set_release(self, timeStep, rlsSpecified)
Definition: rule.py:51
def calc_release(self, rlsProposed, rlsUnCtrl, stor, rlsPrev=None, qIn=None)
Definition: rule.py:57