Prado EFO PVA
outlet.py
Go to the documentation of this file.
1 # -*- coding: utf-8 -*-
2 """
3 Created on Thu May 7 06:13:47 2020
4 
5 @author: cd
6 """
7 
8 import abc
9 import numpy as np
10 from efo.lookup import LkupTblInterp
11 
12 
13 class OutletBase(metaclass=abc.ABCMeta):
14  def __init__(self, name, time):
15  self.namename = name
16  self.TT = time
17  self.rlsOutletrlsOutlet = np.empty(self.TT.nSteps)
18  super().__init__()
19  @abc.abstractmethod
20  def calc_release(self, stor):
21  pass
22  @classmethod
23  def __subclasshook__(cls, C):
24  if cls is OutletBase:
25  attrs = set(dir(C))
26  if set(cls.__abstractmethods__) <= attrs:
27  return True
28  return NotImplemented
29 
30 
31 # TODO: This class should keep track of its releases this way they don't have
32 # be tracked in the reseroir junction
34  def __init__(self, name, time, hypso, xElev, yQ):
35  # Call super class constructor
36  super().__init__(name, time)
37  # Convert rating table to storage
38  # xStor = np.interp(xElev, hypso.elev, hypso.stor)
39  xStor = hypso.elev2stor(xElev)
40  self.storVsQRatingTblstorVsQRatingTbl = LkupTblInterp(name, xStor, yQ)
41  def calc_release(self, stor):
42  self.rlsOutletrlsOutlet[self.TT.step] = self.storVsQRatingTblstorVsQRatingTbl.get_val(stor)
43  return self.rlsOutletrlsOutlet[self.TT.step].copy()
def __init__(self, name, time)
Definition: outlet.py:14
def __subclasshook__(cls, C)
Definition: outlet.py:23
def calc_release(self, stor)
Definition: outlet.py:20
def calc_release(self, stor)
Definition: outlet.py:41
def __init__(self, name, time, hypso, xElev, yQ)
Definition: outlet.py:34