Commit 3e991a41 authored by Martin Reinecke's avatar Martin Reinecke
Browse files

remove inverse smoothing code, since it was broken and unused

parent fa9303d5
Pipeline #16828 passed with stage
in 14 minutes and 6 seconds
...@@ -132,7 +132,7 @@ class DirectSmoothingOperator(SmoothingOperator): ...@@ -132,7 +132,7 @@ class DirectSmoothingOperator(SmoothingOperator):
return outarr return outarr
def _smooth(self, x, spaces, inverse): def _smooth(self, x, spaces):
# infer affected axes # infer affected axes
# we rely on the knowledge, that `spaces` is a tuple with length 1. # we rely on the knowledge, that `spaces` is a tuple with length 1.
affected_axes = x.domain_axes[spaces[0]] affected_axes = x.domain_axes[spaces[0]]
...@@ -203,18 +203,13 @@ class DirectSmoothingOperator(SmoothingOperator): ...@@ -203,18 +203,13 @@ class DirectSmoothingOperator(SmoothingOperator):
# currently only one axis is supported # currently only one axis is supported
data_axis = affected_axes[0] data_axis = affected_axes[0]
if inverse:
true_sigma = 1. / self.sigma
else:
true_sigma = self.sigma
local_result = self._apply_along_axis( local_result = self._apply_along_axis(
data_axis, data_axis,
augmented_data, augmented_data,
startindex=true_start, startindex=true_start,
endindex=true_end, endindex=true_end,
distances=augmented_distance_array, distances=augmented_distance_array,
smooth_length=true_sigma, smooth_length=self.sigma,
smoothing_width=self.effective_smoothing_width) smoothing_width=self.effective_smoothing_width)
result = x.copy_empty() result = x.copy_empty()
......
...@@ -17,7 +17,7 @@ class FFTSmoothingOperator(SmoothingOperator): ...@@ -17,7 +17,7 @@ class FFTSmoothingOperator(SmoothingOperator):
default_spaces=default_spaces) default_spaces=default_spaces)
self._transformator_cache = {} self._transformator_cache = {}
def _smooth(self, x, spaces, inverse): def _smooth(self, x, spaces):
# transform to the (global-)default codomain and perform all remaining # transform to the (global-)default codomain and perform all remaining
# steps therein # steps therein
transformator = self._get_transformator(x.dtype) transformator = self._get_transformator(x.dtype)
...@@ -46,13 +46,7 @@ class FFTSmoothingOperator(SmoothingOperator): ...@@ -46,13 +46,7 @@ class FFTSmoothingOperator(SmoothingOperator):
for i in xrange(len(transformed_x.shape))] for i in xrange(len(transformed_x.shape))]
local_kernel = np.reshape(local_kernel, reshaper) local_kernel = np.reshape(local_kernel, reshaper)
# apply the kernel local_transformed_x *= local_kernel
if inverse:
# avoid zeroes in the kernel to work around divisions by zero
local_kernel = np.maximum(1e-12,local_kernel)
local_transformed_x /= local_kernel
else:
local_transformed_x *= local_kernel
transformed_x.val.set_local_data(local_transformed_x, copy=False) transformed_x.val.set_local_data(local_transformed_x, copy=False)
......
...@@ -138,19 +138,6 @@ class SmoothingOperator(EndomorphicOperator): ...@@ -138,19 +138,6 @@ class SmoothingOperator(EndomorphicOperator):
self._sigma = sigma self._sigma = sigma
self._log_distances = log_distances self._log_distances = log_distances
def _inverse_times(self, x, spaces):
if self.sigma == 0:
return x.copy()
# the domain of the smoothing operator contains exactly one space.
# Hence, if spaces is None, but we passed LinearOperator's
# _check_input_compatibility, we know that x is also solely defined
# on that space
if spaces is None:
spaces = (0,)
return self._smooth(x, spaces, inverse=True)
def _times(self, x, spaces): def _times(self, x, spaces):
if self.sigma == 0: if self.sigma == 0:
return x.copy() return x.copy()
...@@ -162,7 +149,7 @@ class SmoothingOperator(EndomorphicOperator): ...@@ -162,7 +149,7 @@ class SmoothingOperator(EndomorphicOperator):
if spaces is None: if spaces is None:
spaces = (0,) spaces = (0,)
return self._smooth(x, spaces, inverse=False) return self._smooth(x, spaces)
# ---Mandatory properties and methods--- # ---Mandatory properties and methods---
@property @property
...@@ -188,5 +175,5 @@ class SmoothingOperator(EndomorphicOperator): ...@@ -188,5 +175,5 @@ class SmoothingOperator(EndomorphicOperator):
return self._log_distances return self._log_distances
@abc.abstractmethod @abc.abstractmethod
def _smooth(self, x, spaces, inverse): def _smooth(self, x, spaces):
raise NotImplementedError raise NotImplementedError
...@@ -69,15 +69,6 @@ class SmoothingOperator_Tests(unittest.TestCase): ...@@ -69,15 +69,6 @@ class SmoothingOperator_Tests(unittest.TestCase):
tt1 = op.times(rand1) tt1 = op.times(rand1)
assert_allclose(1, tt1.sum()) assert_allclose(1, tt1.sum())
@expand(product(spaces, [0., .5, 5.]))
def test_inverse_adjoint_times(self, space, sigma):
op = SmoothingOperator(space, sigma=sigma)
rand1 = Field.from_random('normal', domain=space)
rand2 = Field.from_random('normal', domain=space)
tt1 = rand1.vdot(op.inverse_times(rand2))
tt2 = rand2.vdot(op.inverse_adjoint_times(rand1))
assert_allclose(tt1, tt2)
@expand(product([128, 256], [1, 0.4], [0., 1., 3.7], @expand(product([128, 256], [1, 0.4], [0., 1., 3.7],
[np.float64, np.complex128])) [np.float64, np.complex128]))
def test_smooth_regular1(self, sz, d, sigma, tp): def test_smooth_regular1(self, sz, d, sigma, tp):
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment