3 Created on Sat May 9 13:10:31 2020
9 from efo.rule
import RuleBase
10 from efo.qin
import QinSpecified
12 from efo.lookup
import LkupTbl, LkupTblAnn, LkupTblElev, LkupTblInterp
22 def __init__(self, name, time, *, ruleType=MIN, rlsType=CTRL_RLS):
26 self.
qCompCurqCompCur = 0.
if ruleType == RuleComplianceBase.MIN
else np.inf
29 def get_qcomp(self, *, rlsPrev=None, rlsUnCtrl=None, stor=None, qIn=None, tsOffset=0):
34 if cls
is RuleComplianceBase:
36 if set(cls.__abstractmethods__) <= attrs:
40 def calc_release(self, rlsProposed, *, rlsPrev=None, rlsUnCtrl=None, stor=None, qIn=None):
42 rlsProposed, rlsPrev=rlsPrev, rlsUnCtrl=rlsUnCtrl, stor=stor, qIn=qIn)
43 qComp = self.
get_qcompget_qcomp(stor=stor, rlsUnCtrl=rlsUnCtrl, rlsPrev=rlsPrev, qIn=qIn)
44 release = min(rlsProposed, qComp)
if self.
ruleTyperuleType==RuleComplianceBase.MAX
else max(rlsProposed, qComp)
45 self.release[self.T.step] = release
50 def __init__(self, name, time, minQ, rlsType=RuleComplianceBase.CTRL_RLS):
53 super().
__init__(name, time, ruleType=RuleComplianceBase.MIN)
58 def get_qcomp(self, *, rlsPrev=None, rlsUnCtrl=None, stor=None, qIn=None, tsOffset=0):
64 def __init__(self, name, time, maxQ, pctBuffer=0., rlsType=RuleComplianceBase.CTRL_RLS):
66 super().
__init__(name, time, ruleType=RuleComplianceBase.MAX)
70 self.
maxQmaxQ = maxQ - maxQ*pctBuffer
72 def get_qcomp(self, *, rlsPrev=None, rlsUnCtrl=None, stor=None, qIn=None, tsOffset=0):
79 def __init__(self, name, time, hypso, xElev, yQ, rlsType=RuleComplianceBase.CTRL_RLS):
81 super().
__init__(name, time, ruleType=RuleComplianceBase.MAX)
83 self.
compQTblcompQTbl = LkupTblElev(name+
'_table', hypso, xElev, yQ)
85 def get_qcomp(self, *, stor, rlsUnCtrl, rlsPrev=None, qIn=None, tsOffset=0):
86 qCompLkUp = self.
compQTblcompQTbl.get_val(stor)
95 def __init__(self, name, time, monDayHr, minQsched, rlsType=RuleComplianceBase.CTRL_RLS, *,
96 typ='step', timeUnit=None, hydroCond=None):
98 super().
__init__(name, time, ruleType=RuleComplianceBase.MIN)
100 self.
compQschedcompQsched = LkupTblAnn(name+
'_sched',time, monDayHr, minQsched,
101 typ=typ, timeUnit=timeUnit)
104 def get_qcomp(self, *, rlsPrev=None, rlsUnCtrl=None, stor=None, qIn=None, tsOffset=0):
105 curDT = self.T.get_datetime_offset(tsOffset)
107 qCompSched = self.
compQschedcompQsched.get_val(curDT)
109 hc = self.
hydroCondhydroCond.get_hydrologic_cond(tsOffset=tsOffset)
116 def __init__(self, name, time, monDayHr, maxQsched, rlsType=RuleComplianceBase.CTRL_RLS, *,
117 typ='step', timeUnit=None, hydroCond=None):
119 super().
__init__(name, time, monDayHr, maxQsched, rlsType=rlsType,
120 typ=typ, timeUnit=timeUnit, hydroCond=hydroCond)
124 typ=typ, timeUnit=timeUnit)
130 ruleMax, jncDiversion, rlsType=RuleComplianceBase.CTRL_RLS):
132 super().
__init__(name, time, ruleType=RuleComplianceBase.MAX)
135 self.
qInSpecifiedqInSpecified = QinSpecified(name+
'_qInSpecified',time)
136 self.
qInSpecifiedqInSpecified.set_qin(tsOffset=0, qSpecified=0.)
139 def get_qcomp(self, *, rlsPrev=None, rlsUnCtrl=None, stor=None, qIn=None, tsOffset=0):
140 qMaxDiv = self.
ruleMaxDivruleMaxDiv.
get_qcomp(rlsPrev=rlsPrev, rlsUnCtrl=rlsUnCtrl, stor=stor, qIn=qIn, tsOffset=tsOffset)
141 qDemand = -self.
jncDiversionjncDiversion.calc_delta(ruleType=self.
ruleTyperuleType, tsOffset=tsOffset)
145 def calc_release(self, rlsProposed, *, rlsPrev=None, rlsUnCtrl=None, stor=None, qIn=None):
147 rlsProposed, rlsPrev=rlsPrev, rlsUnCtrl=rlsUnCtrl, stor=stor, qIn=qIn)
148 qDiv = min(self.
get_qcompget_qcompget_qcomp(rlsPrev=rlsPrev, rlsUnCtrl=rlsUnCtrl, stor=stor, qIn=qIn), rlsProposed)
149 self.
qInSpecifiedqInSpecified.set_qin(tsOffset=0, qSpecified=qDiv)
155 ruleMax, jncDiversion=None):
157 super().
__init__(name, time, ruleType=RuleComplianceBase.MAX)
161 def get_qcomp(self, *, rlsPrev=None, rlsUnCtrl=None, stor=None, qIn=None, tsOffset=0):
166 def calc_release(self, rlsProposed, *, rlsPrev=None, rlsUnCtrl=None, stor=None, qIn=None):
168 rlsProposed, rlsPrev=rlsPrev, rlsUnCtrl=rlsUnCtrl, stor=stor, qIn=qIn)
172 rlsUnCtrl=rlsUnCtrl, stor=stor, qIn=qIn)
173 self.
jncDiversionjncDiversion.set_qout(qOutSpecified=qDiv)
189 self.
_curCond_curCond = curHydroCond
193 def __init__(self, name, time, xQinMax, yRls, *, typ='step'):
195 super().
__init__(name, time, ruleType=RuleComplianceBase.MAX)
197 self.
qInMaxTblqInMaxTbl = LkupTblInterp(name+
'_QinMax', xQinMax, yRls)
199 self.
qInMaxTblqInMaxTbl = LkupTbl(name+
'_QinMax', xQinMax, yRls)
201 def get_qcomp(self, *, qIn, rlsPrev=None, rlsUnCtrl=None, stor=None, tsOffset=0):
208 def __init__(self, name, time, rlsSched, rampSched, ruleType, timeUnit='h', nHrs=1):
210 super().
__init__(name, time, ruleType=ruleType, rlsType=RuleComplianceBase.CTRL_RLS)
211 if timeUnit != time.timeUnit
or nHrs != time.nHrs:
212 if timeUnit ==
'h': rampSched = rampSched*(time.nHrs/nHrs)
214 self.
rampTblrampTbl = LkupTbl(name+
'_RampSched',rlsSched, rampSched)
217 def get_qcomp(self, *, rlsPrev, rlsUnCtrl=None, stor=None, qIn=None, tsOffset=0):
223 def __init__(self, name, time, rlsSched, drocSched, timeUnit='h', nHrs=1):
225 super().
__init__(name, time, rlsSched, drocSched, ruleType=RuleComplianceBase.MIN)
228 def get_qcomp(self, *, rlsPrev, rlsUnCtrl=None, stor=None, qIn=None, tsOffset=0):
234 def __init__(self, name, time, rlsSched, irocSched, timeUnit='h', nHrs=1):
236 super().
__init__(name, time, rlsSched, irocSched, ruleType=RuleComplianceBase.MAX)
def get_qcomp(self, *rlsPrev=None, rlsUnCtrl=None, stor=None, qIn=None, tsOffset=0)
def __subclasshook__(cls, C)
def calc_release(self, rlsProposed, *rlsPrev=None, rlsUnCtrl=None, stor=None, qIn=None)
def __init__(self, name, time, *ruleType=MIN, rlsType=CTRL_RLS)
def get_qcomp(self, *rlsPrev, rlsUnCtrl=None, stor=None, qIn=None, tsOffset=0)
def __init__(self, name, time, rlsSched, drocSched, timeUnit='h', nHrs=1)
def calc_release(self, rlsProposed, *rlsPrev=None, rlsUnCtrl=None, stor=None, qIn=None)
def __init__(self, name, time, *ruleMax, jncDiversion=None)
def get_qcomp(self, *rlsPrev=None, rlsUnCtrl=None, stor=None, qIn=None, tsOffset=0)
def calc_release(self, rlsProposed, *rlsPrev=None, rlsUnCtrl=None, stor=None, qIn=None)
def get_qcomp(self, *rlsPrev=None, rlsUnCtrl=None, stor=None, qIn=None, tsOffset=0)
def __init__(self, name, time, *ruleMax, jncDiversion, rlsType=RuleComplianceBase.CTRL_RLS)
def __init__(self, name, time, rlsSched, irocSched, timeUnit='h', nHrs=1)
def __init__(self, name, time, monDayHr, maxQsched, rlsType=RuleComplianceBase.CTRL_RLS, *typ='step', timeUnit=None, hydroCond=None)
def get_qcomp(self, *stor, rlsUnCtrl, rlsPrev=None, qIn=None, tsOffset=0)
def __init__(self, name, time, hypso, xElev, yQ, rlsType=RuleComplianceBase.CTRL_RLS)
def __init__(self, name, time, xQinMax, yRls, *typ='step')
def get_qcomp(self, *qIn, rlsPrev=None, rlsUnCtrl=None, stor=None, tsOffset=0)
def get_qcomp(self, *rlsPrev=None, rlsUnCtrl=None, stor=None, qIn=None, tsOffset=0)
def __init__(self, name, time, maxQ, pctBuffer=0., rlsType=RuleComplianceBase.CTRL_RLS)
def __init__(self, name, time, monDayHr, minQsched, rlsType=RuleComplianceBase.CTRL_RLS, *typ='step', timeUnit=None, hydroCond=None)
def get_qcomp(self, *rlsPrev=None, rlsUnCtrl=None, stor=None, qIn=None, tsOffset=0)
def __init__(self, name, time, minQ, rlsType=RuleComplianceBase.CTRL_RLS)
def get_qcomp(self, *rlsPrev=None, rlsUnCtrl=None, stor=None, qIn=None, tsOffset=0)
def get_qcomp(self, *rlsPrev, rlsUnCtrl=None, stor=None, qIn=None, tsOffset=0)
def __init__(self, name, time, rlsSched, rampSched, ruleType, timeUnit='h', nHrs=1)