From eb27f30315568d5d2b537f91a4a211cf6bd5b97a Mon Sep 17 00:00:00 2001
From: Martin Reinecke <martin@mpa-garching.mpg.de>
Date: Mon, 7 Jan 2019 13:53:24 +0100
Subject: [PATCH] remove unused code

---
 nifty5/__init__.py                           |   2 -
 nifty5/operators/laplace_operator.py         | 100 -------------------
 nifty5/operators/smoothness_operator.py      |  57 -----------
 test/test_operators/test_adjoint.py          |  10 --
 test/test_operators/test_laplace_operator.py |  50 ----------
 5 files changed, 219 deletions(-)
 delete mode 100644 nifty5/operators/laplace_operator.py
 delete mode 100644 nifty5/operators/smoothness_operator.py
 delete mode 100644 test/test_operators/test_laplace_operator.py

diff --git a/nifty5/__init__.py b/nifty5/__init__.py
index df80e1405..7437f5474 100644
--- a/nifty5/__init__.py
+++ b/nifty5/__init__.py
@@ -32,7 +32,6 @@ from .operators.harmonic_operators import (
     HarmonicSmoothingOperator)
 from .operators.field_zero_padder import FieldZeroPadder
 from .operators.inversion_enabler import InversionEnabler
-from .operators.laplace_operator import LaplaceOperator
 from .operators.linear_operator import LinearOperator
 from .operators.mask_operator import MaskOperator
 from .operators.offset_operator import OffsetOperator
@@ -42,7 +41,6 @@ from .operators.sampling_enabler import SamplingEnabler
 from .operators.sandwich_operator import SandwichOperator
 from .operators.scaling_operator import ScalingOperator
 from .operators.slope_operator import SlopeOperator
-from .operators.smoothness_operator import SmoothnessOperator
 from .operators.symmetrizing_operator import SymmetrizingOperator
 from .operators.block_diagonal_operator import BlockDiagonalOperator
 from .operators.outer_product_operator import OuterProduct
diff --git a/nifty5/operators/laplace_operator.py b/nifty5/operators/laplace_operator.py
deleted file mode 100644
index 649b69508..000000000
--- a/nifty5/operators/laplace_operator.py
+++ /dev/null
@@ -1,100 +0,0 @@
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-#
-# Copyright(C) 2013-2018 Max-Planck-Society
-#
-# NIFTy is being developed at the Max-Planck-Institut fuer Astrophysik
-# and financially supported by the Studienstiftung des deutschen Volkes.
-
-from __future__ import absolute_import, division, print_function
-
-import numpy as np
-
-from .. import dobj
-from ..compat import *
-from ..domain_tuple import DomainTuple
-from ..domains.power_space import PowerSpace
-from ..field import Field
-from ..utilities import infer_space
-from .endomorphic_operator import EndomorphicOperator
-
-
-class LaplaceOperator(EndomorphicOperator):
-    """An irregular LaplaceOperator with free boundary and excluding monopole.
-
-    This LaplaceOperator implements the second derivative of a Field in
-    PowerSpace on logarithmic or linear scale with vanishing curvature at the
-    boundary, starting at the second entry of the Field. The second derivative
-    of the Field on the irregular grid is calculated using finite differences.
-
-    Parameters
-    ----------
-    logarithmic : bool, optional
-        Whether smoothness is calculated on a logarithmic scale or linear scale
-        default : True
-    space : int
-        The index of the domain on which the operator acts
-    """
-
-    def __init__(self, domain, space=None, logarithmic=True):
-        self._domain = DomainTuple.make(domain)
-        self._capability = self.TIMES | self.ADJOINT_TIMES
-        self._space = infer_space(self._domain, space)
-
-        if not isinstance(self._domain[self._space], PowerSpace):
-            raise ValueError("Operator must act on a PowerSpace.")
-
-        pos = self.domain[self._space].k_lengths.copy()
-        if logarithmic:
-            pos[1:] = np.log(pos[1:])
-            pos[0] = pos[1]-1.
-
-        self._dpos = pos[1:]-pos[:-1]  # defined between points
-        # centered distances (also has entries for the first and last point
-        # for convenience, but they will never affect the result)
-        self._dposc = np.empty_like(pos)
-        self._dposc[:-1] = self._dpos
-        self._dposc[-1] = 0.
-        self._dposc[1:] += self._dpos
-        self._dposc *= 0.5
-
-    def apply(self, x, mode):
-        self._check_input(x, mode)
-        axes = x.domain.axes[self._space]
-        axis = axes[0]
-        nval = len(self._dposc)
-        prefix = (slice(None),) * axis
-        sl_l = prefix + (slice(None, -1),)  # "left" slice
-        sl_r = prefix + (slice(1, None),)  # "right" slice
-        dpos = self._dpos.reshape((1,)*axis + (nval-1,))
-        dposc = self._dposc.reshape((1,)*axis + (nval,))
-        v, val = dobj.ensure_not_distributed(x.val, (axis,))
-        ret = np.empty_like(val)
-        if mode == self.TIMES:
-            deriv = (val[sl_r]-val[sl_l])/dpos  # defined between points
-            ret[sl_l] = deriv
-            ret[prefix + (-1,)] = 0.
-            ret[sl_r] -= deriv
-            ret /= dposc
-            ret[prefix + (slice(None, 2),)] = 0.
-            ret[prefix + (-1,)] = 0.
-        else:
-            val = val/dposc
-            val[prefix + (slice(None, 2),)] = 0.
-            val[prefix + (-1,)] = 0.
-            deriv = (val[sl_r]-val[sl_l])/dpos  # defined between points
-            ret[sl_l] = deriv
-            ret[prefix + (-1,)] = 0.
-            ret[sl_r] -= deriv
-        ret = dobj.from_local_data(x.shape, ret, dobj.distaxis(v))
-        return Field(self.domain, dobj.ensure_default_distributed(ret))
diff --git a/nifty5/operators/smoothness_operator.py b/nifty5/operators/smoothness_operator.py
deleted file mode 100644
index 113f6301f..000000000
--- a/nifty5/operators/smoothness_operator.py
+++ /dev/null
@@ -1,57 +0,0 @@
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-#
-# Copyright(C) 2013-2018 Max-Planck-Society
-#
-# NIFTy is being developed at the Max-Planck-Institut fuer Astrophysik
-# and financially supported by the Studienstiftung des deutschen Volkes.
-
-from __future__ import absolute_import, division, print_function
-
-from ..compat import *
-from .laplace_operator import LaplaceOperator
-from .scaling_operator import ScalingOperator
-
-
-def SmoothnessOperator(domain, strength=1., logarithmic=True, space=None):
-    """An operator measuring the smoothness on an irregular grid with respect
-    to some scale.
-
-    This operator applies the irregular LaplaceOperator and its adjoint to some
-    Field over a PowerSpace which corresponds to its smoothness and weights the
-    result with a scale parameter sigma. For this purpose we use free boundary
-    conditions in the LaplaceOperator, having no curvature at both ends. In
-    addition the first entry is ignored as well, corresponding to the overall
-    mean of the map. The mean is therefore not considered in the smoothness
-    prior.
-
-
-    Parameters
-    ----------
-    domain : Domain, tuple of Domain, or DomainTuple
-       The total domain of the operator's input and output fields
-    strength : nonnegative float
-        Specifies the strength of the SmoothnessOperator
-    logarithmic : bool, optional
-        Whether smoothness is calculated on a logarithmic scale or linear scale
-        default : True
-    space : int, optional
-       The index of the sub-domain on which the operator acts.
-       Can be omitted if `domain` only has one sub-domain.
-    """
-    if strength < 0:
-        raise ValueError("ERROR: strength must be nonnegative.")
-    if strength == 0.:
-        return ScalingOperator(0., domain)
-    laplace = LaplaceOperator(domain, logarithmic=logarithmic, space=space)
-    return laplace.adjoint(laplace).scale(strength**2)
diff --git a/test/test_operators/test_adjoint.py b/test/test_operators/test_adjoint.py
index 50be37c04..fa86a6e9d 100644
--- a/test/test_operators/test_adjoint.py
+++ b/test/test_operators/test_adjoint.py
@@ -170,16 +170,6 @@ class Consistency_Tests(unittest.TestCase):
                                                         dtype=dtype))
         ift.extra.consistency_check(op, dtype, dtype)
 
-    @expand(product(_pow_spaces, [np.float64, np.complex128]))
-    def testLaplace(self, sp, dtype):
-        op = ift.LaplaceOperator(sp)
-        ift.extra.consistency_check(op, dtype, dtype)
-
-    @expand(product(_pow_spaces, [np.float64, np.complex128]))
-    def testSmoothness(self, sp, dtype):
-        op = ift.SmoothnessOperator(sp)
-        ift.extra.consistency_check(op, dtype, dtype)
-
     @expand(product(_h_spaces+_p_spaces+_pow_spaces,
                     [np.float64, np.complex128]))
     def testGeometryRemover(self, sp, dtype):
diff --git a/test/test_operators/test_laplace_operator.py b/test/test_operators/test_laplace_operator.py
deleted file mode 100644
index 6891745a5..000000000
--- a/test/test_operators/test_laplace_operator.py
+++ /dev/null
@@ -1,50 +0,0 @@
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-#
-# Copyright(C) 2013-2018 Max-Planck-Society
-#
-# NIFTy is being developed at the Max-Planck-Institut fuer Astrophysik
-# and financially supported by the Studienstiftung des deutschen Volkes.
-
-import unittest
-from itertools import product
-from test.common import expand
-
-import nifty5 as ift
-import numpy as np
-from numpy.testing import assert_allclose
-
-
-class LaplaceOperatorTests(unittest.TestCase):
-    @expand(product([None, False, True], [False, True], [10, 100, 1000]))
-    def test_Laplace(self, log1, log2, sz):
-        s = ift.RGSpace(sz, harmonic=True)
-        bb = ift.PowerSpace.useful_binbounds(s, logarithmic=log1)
-        p = ift.PowerSpace(s, binbounds=bb)
-        L = ift.LaplaceOperator(p, logarithmic=log2)
-        fp = ift.Field.from_random("normal", domain=p, dtype=np.float64)
-        assert_allclose(L(fp).vdot(L(fp)), L.adjoint_times(L(fp)).vdot(fp))
-
-    @expand(product([10, 100, 1000]))
-    def test_Laplace2(self, sz):
-        s = ift.RGSpace(sz, harmonic=True, distances=0.764)
-        bb = ift.PowerSpace.useful_binbounds(s, logarithmic=False)
-        p = ift.PowerSpace(s, binbounds=bb)
-
-        foo = ift.PS_field(p, lambda k: 2*k**2)
-        L = ift.LaplaceOperator(p, logarithmic=False)
-
-        result = np.full(p.shape, 2*2.)
-        result[0] = result[1] = result[-1] = 0.
-
-        assert_allclose(L(foo).to_global_data(), result)
-- 
GitLab