diff options
author | Aaron LI <aly@aaronly.me> | 2017-08-13 15:20:08 +0800 |
---|---|---|
committer | Aaron LI <aly@aaronly.me> | 2017-08-13 15:20:08 +0800 |
commit | c8abb89e71c98c2b2ec3c7360a6c26debf114f21 (patch) | |
tree | a1af4bc7195437e65416cbf75b7e9d1a2de029fe | |
parent | 4146bd76834abe2055a50b215a34cf98747f5d37 (diff) | |
download | fg21sim-c8abb89e71c98c2b2ec3c7360a6c26debf114f21.tar.bz2 |
sky.py: Overload common arithmetic operators
Signed-off-by: Aaron LI <aly@aaronly.me>
-rw-r--r-- | fg21sim/sky.py | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/fg21sim/sky.py b/fg21sim/sky.py index 53586c0..e019b2a 100644 --- a/fg21sim/sky.py +++ b/fg21sim/sky.py @@ -4,6 +4,11 @@ """ Generic simulation sky supporting both sky patch and HEALPix all-sky maps. + +References +---------- +* Python - 3. Data Model + https://docs.python.org/3/reference/datamodel.html#special-method-names """ import logging @@ -72,6 +77,59 @@ class SkyBase: self.clobber_ = clobber self.checksum_ = checksum + def __add__(self, other): + """Binary arithmetic operation: ``+``.""" + if isinstance(other, self.__class__): + return self.data + other.data + elif isinstance(other, (int, float, np.ndarray)): + return self.data + other + else: + raise NotImplemented + + def __sub__(self, other): + """Binary arithmetic operation: ``-``.""" + if isinstance(other, self.__class__): + return self.data - other.data + elif isinstance(other, (int, float, np.ndarray)): + return self.data - other + else: + raise NotImplemented + + def __mul__(self, other): + """Binary arithmetic operation: ``*``.""" + if isinstance(other, self.__class__): + return self.data * other.data + elif isinstance(other, (int, float, np.ndarray)): + return self.data * other + else: + raise NotImplemented + + def __truediv__(self, other): + """Binary arithmetic operation: ``/``.""" + if isinstance(other, self.__class__): + return self.data / other.data + elif isinstance(other, (int, float, np.ndarray)): + return self.data / other + else: + raise NotImplemented + + def __pow__(self, other): + """Binary arithmetic operation: ``**``.""" + if isinstance(other, self.__class__): + return self.data ** other.data + elif isinstance(other, (int, float, np.ndarray)): + return self.data ** other + else: + raise NotImplemented + + def __neg__(self): + """Unary arithmetic operation: ``-``.""" + return -self.data + + def __abs__(self): + """Unary arithmetic operation: ``abs()``.""" + return np.abs(self.data) + @property def shape(self): """ |