Skip to content

Commit

Permalink
adding reverse operations to Raster class
Browse files Browse the repository at this point in the history
  • Loading branch information
Will Bierbower authored and Will Bierbower committed Apr 17, 2015
1 parent 054e852 commit 163d96a
Showing 1 changed file with 86 additions and 0 deletions.
86 changes: 86 additions & 0 deletions fauxgeo/raster.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,20 @@ def mul(x, y):
return mul
return self.local_op(raster, mul_closure)

def __rmul__(self, raster):
if type(raster) in [float, int]:
def mul_closure(nodata):
def mul(x):
return np.where((np.not_equal(x, nodata)), np.multiply(raster, x), nodata)
return mul
return self.local_op(raster, mul_closure, broadcast=True)
else:
def mul_closure(nodata):
def mul(x, y):
return np.where((np.not_equal(x, nodata)) & (np.not_equal(y, nodata)), np.multiply(y, x), nodata)
return mul
return self.local_op(raster, mul_closure)

def __div__(self, raster):
if type(raster) in [float, int]:
def div_closure(nodata):
Expand All @@ -132,6 +146,20 @@ def div(x, y):
return div
return self.local_op(raster, div_closure)

def __rdiv__(self, raster):
if type(raster) in [float, int]:
def div_closure(nodata):
def div(x):
return np.where((np.not_equal(x, nodata)), np.divide(raster, x), nodata)
return div
return self.local_op(raster, div_closure, broadcast=True)
else:
def div_closure(nodata):
def div(x, y):
return np.where((np.not_equal(x, nodata)) & (np.not_equal(y, nodata)), np.divide(y, x), nodata)
return div
return self.local_op(raster, div_closure)

def __add__(self, raster):
if type(raster) in [float, int]:
def add_closure(nodata):
Expand All @@ -146,6 +174,20 @@ def add(x, y):
return add
return self.local_op(raster, add_closure)

def __radd__(self, raster):
if type(raster) in [float, int]:
def add_closure(nodata):
def add(x):
return np.where((np.not_equal(x, nodata)), np.add(raster, x), nodata)
return add
return self.local_op(raster, add_closure, broadcast=True)
else:
def add_closure(nodata):
def add(x, y):
return np.where((np.not_equal(x, nodata)) & (np.not_equal(y, nodata)), np.add(y, x), nodata)
return add
return self.local_op(raster, add_closure)

def __sub__(self, raster):
if type(raster) in [float, int]:
def sub_closure(nodata):
Expand All @@ -160,6 +202,20 @@ def sub(x, y):
return sub
return self.local_op(raster, sub_closure)

def __rsub__(self, raster):
if type(raster) in [float, int]:
def sub_closure(nodata):
def sub(x):
return np.where((np.not_equal(x, nodata)), np.subtract(raster, x), nodata)
return sub
return self.local_op(raster, sub_closure, broadcast=True)
else:
def sub_closure(nodata):
def sub(x, y):
return np.where((np.not_equal(x, nodata)) & (np.not_equal(y, nodata)), np.subtract(y, x), nodata)
return sub
return self.local_op(raster, sub_closure)

def __pow__(self, raster):
if type(raster) in [float, int]:
# Implement broadcast operation
Expand All @@ -175,6 +231,36 @@ def powe(x, y):
return powe
return self.local_op(raster, pow_closure)

def __rpow__(self, raster):
if type(raster) in [float, int]:
# Implement broadcast operation
def pow_closure(nodata):
def powe(x):
return np.where((np.not_equal(x, nodata)), np.power(raster, x), nodata)
return powe
return self.local_op(raster, pow_closure, broadcast=True)
else:
def pow_closure(nodata):
def powe(x, y):
return np.where((np.not_equal(x, nodata)) & (np.not_equal(y, nodata)), np.power(y, x), nodata)
return powe
return self.local_op(raster, pow_closure)

def __mod__(self, raster):
if type(raster) in [float, int]:
# Implement broadcast operation
def mod_closure(nodata):
def mod(x):
return np.where((np.not_equal(x, nodata)), np.mod(x, raster), nodata)
return mod
return self.local_op(raster, mod_closure, broadcast=True)
else:
def mod_closure(nodata):
def mod(x, y):
return np.where((np.not_equal(x, nodata)) & (np.not_equal(y, nodata)), np.mod(x, y), nodata)
return mod
return self.local_op(raster, mod_closure)

def __eq__(self, raster):
if type(raster) in [float, int]:
return (self.get_bands() == raster)
Expand Down

0 comments on commit 163d96a

Please sign in to comment.