Prado EFO PVA
hypso.py
Go to the documentation of this file.
1 # -*- coding: utf-8 -*-
2 """
3 Created on Wed May 6 10:52:54 2020
4 
5 @author: cd
6 """
7 
8 
9 import abc
10 import numpy as np
11 from scipy.interpolate import interp1d
12 
13 class HypsoBase(metaclass=abc.ABCMeta):
14  def __init__(self, name):
15  self.namename = name
16  super().__init__()
17  @abc.abstractmethod
18  def stor2elev(self, stor):
19  pass
20  @abc.abstractmethod
21  def stor2area(self, stor):
22  pass
23  @classmethod
24  def __subclasshook__(cls,C):
25  if cls is HypsoBase:
26  attrs = set(dir(C))
27  if set(cls.__abstractmethods__) <= attrs:
28  return True
29  return NotImplemented
30 
31 
33  def __init__(self, name, elev, stor, area):
34  # Call super class constructor
35  super().__init__(name)
36  self.elevelev = elev
37  self.storstor = stor
38  self.areaarea = area
39  self.interpFncElevinterpFncElev = interp1d(self.storstor, self.elevelev, kind='cubic', fill_value='extrapolate')
40  self.interpFncAreainterpFncArea = interp1d(self.storstor, self.areaarea, kind='cubic', fill_value='extrapolate')
41  self.interpFncStorinterpFncStor = interp1d(self.elevelev, self.storstor, kind='cubic', fill_value='extrapolate')
42 
43  def stor2elev(self, stor):
44  # if isinstance(stor, np.ndarray):
45  # elevReturn = np.empty(stor.size)
46  # for i, curStor in enumerate(stor):
47  # elevReturn[i] = np.interp(curStor, self.stor, self.elev)
48  # return elevReturn
49  # else:
50  # return np.interp(stor, self.stor, self.elev)
51  return self.interpFncElevinterpFncElev(stor)
52 
53  def stor2area(self, stor):
54  # if isinstance(stor, np.ndarray):
55  # areaReturn = np.empty(stor.size)
56  # for i, curStor in enumerate(stor):
57  # areaReturn[i] = np.interp(curStor, self.stor, self.area)
58  # return areaReturn
59  # else:
60  # return np.interp(stor, self.stor, self.area)
61  return self.interpFncAreainterpFncArea(stor)
62 
63  def elev2stor(self, elev):
64  # if isinstance(elev, np.ndarray):
65  # storReturn = np.empty(elev.size)
66  # for i, curElev in enumerate(elev):
67  # storReturn[i] = np.interp(curElev, self.elev, self.stor)
68  # return storReturn
69  # else:
70  # return np.interp(elev, self.elev, self.stor)
71  return self.interpFncStorinterpFncStor(elev)
def __init__(self, name)
Definition: hypso.py:14
def stor2area(self, stor)
Definition: hypso.py:21
def stor2elev(self, stor)
Definition: hypso.py:18
def __subclasshook__(cls, C)
Definition: hypso.py:24
interpFncStor
Definition: hypso.py:41
interpFncElev
Definition: hypso.py:39
def __init__(self, name, elev, stor, area)
Definition: hypso.py:33
def stor2area(self, stor)
Definition: hypso.py:53
def elev2stor(self, elev)
Definition: hypso.py:63
def stor2elev(self, stor)
Definition: hypso.py:43
interpFncArea
Definition: hypso.py:40