From 41d3585e278e271d5f30a75a201ea4d337438011 Mon Sep 17 00:00:00 2001 From: Martin Reinecke <martin@mpa-garching.mpg.de> Date: Tue, 30 Jan 2018 21:16:32 +0100 Subject: [PATCH] PEP8 work, revert some overly strict PEP8 --- nifty4/__init__.py | 16 ++++++++-------- nifty4/library/critical_power_curvature.py | 2 +- nifty4/library/critical_power_energy.py | 10 +++++----- .../log_normal_wiener_filter_curvature.py | 5 ++--- .../library/log_normal_wiener_filter_energy.py | 7 +++---- nifty4/library/noise_energy.py | 6 +++--- nifty4/library/nonlinear_power_curvature.py | 4 ++-- nifty4/library/response_operators.py | 8 ++++---- nifty4/library/wiener_filter_curvature.py | 9 ++++----- nifty4/library/wiener_filter_energy.py | 3 +-- nifty4/operators/scaling_operator.py | 4 ++-- nifty4/plotting/plot.py | 6 +++--- nifty4/sugar.py | 16 ++++++++++++++++ test/test_energies/test_map.py | 6 ++++-- test/test_energies/test_power.py | 3 ++- test/test_minimization/test_minimizers.py | 5 +++-- test/test_operators/test_adjoint.py | 1 + test/test_operators/test_fft_operator.py | 4 +--- 18 files changed, 65 insertions(+), 50 deletions(-) diff --git a/nifty4/__init__.py b/nifty4/__init__.py index b2d198f9f..2524edd7f 100644 --- a/nifty4/__init__.py +++ b/nifty4/__init__.py @@ -55,11 +55,11 @@ from .sugar import * from .plotting.plot import plot from . import library -__all__= ["DomainObject", "FieldArray", "Space", "RGSpace", "LMSpace", - "HPSpace", "GLSpace", "DOFSpace", "PowerSpace", "DomainTuple", - "LinearOperator", "EndomorphicOperator", "ScalingOperator", - "DiagonalOperator", "FFTOperator", "FFTSmoothingOperator", - "DirectSmoothingOperator", "ResponseOperator", "LaplaceOperator", - "PowerProjectionOperator", "InversionEnabler", - "Field", "sqrt", "exp", "log", - "Prober", "DiagonalProberMixin", "TraceProberMixin"] +__all__ = ["DomainObject", "FieldArray", "Space", "RGSpace", "LMSpace", + "HPSpace", "GLSpace", "DOFSpace", "PowerSpace", "DomainTuple", + "LinearOperator", "EndomorphicOperator", "ScalingOperator", + "DiagonalOperator", "FFTOperator", "FFTSmoothingOperator", + "DirectSmoothingOperator", "ResponseOperator", "LaplaceOperator", + "PowerProjectionOperator", "InversionEnabler", + "Field", "sqrt", "exp", "log", + "Prober", "DiagonalProberMixin", "TraceProberMixin"] diff --git a/nifty4/library/critical_power_curvature.py b/nifty4/library/critical_power_curvature.py index f8cff9f2f..8e4d16e21 100644 --- a/nifty4/library/critical_power_curvature.py +++ b/nifty4/library/critical_power_curvature.py @@ -22,4 +22,4 @@ from ..operators.diagonal_operator import DiagonalOperator def CriticalPowerCurvature(theta, T, inverter): theta = DiagonalOperator(theta) - return InversionEnabler(T + theta, inverter, theta.inverse_times) + return InversionEnabler(T+theta, inverter, theta.inverse_times) diff --git a/nifty4/library/critical_power_energy.py b/nifty4/library/critical_power_energy.py index d21ab497a..2f7f289ab 100644 --- a/nifty4/library/critical_power_energy.py +++ b/nifty4/library/critical_power_energy.py @@ -94,21 +94,21 @@ class CriticalPowerEnergy(Energy): sample = self.D.generate_posterior_sample() + self.m w += P(abs(sample)**2) - w *= 1. / self.samples + w *= 1./self.samples else: w = P(abs(self.m)**2) self._w = w - self._theta = exp(-self.position) * (self.q + self._w * 0.5) + self._theta = exp(-self.position) * (self.q + self._w*0.5) Tt = self.T(self.position) energy = self._theta.sum() - energy += self.position.sum() * (self.alpha - 0.5) - energy += 0.5 * self.position.vdot(Tt) + energy += self.position.sum() * (self.alpha-0.5) + energy += 0.5*self.position.vdot(Tt) self._value = energy.real gradient = -self._theta - gradient += self.alpha - 0.5 + gradient += self.alpha-0.5 gradient += Tt self._gradient = gradient diff --git a/nifty4/library/log_normal_wiener_filter_curvature.py b/nifty4/library/log_normal_wiener_filter_curvature.py index 395d3a5f9..a04badce2 100644 --- a/nifty4/library/log_normal_wiener_filter_curvature.py +++ b/nifty4/library/log_normal_wiener_filter_curvature.py @@ -20,7 +20,6 @@ from ..operators.inversion_enabler import InversionEnabler def LogNormalWienerFilterCurvature(R, N, S, ht, expp_sspace, inverter): - part1 = S.inverse LinResp = R * ht.adjoint * expp_sspace * ht - part3 = (LinResp.adjoint * N.inverse * LinResp) - return InversionEnabler(part1 + part3, inverter) + t_op = LinResp.adjoint * N.inverse * LinResp + return InversionEnabler(S.inverse + t_op, inverter) diff --git a/nifty4/library/log_normal_wiener_filter_energy.py b/nifty4/library/log_normal_wiener_filter_energy.py index 539ae962c..0e5922b40 100644 --- a/nifty4/library/log_normal_wiener_filter_energy.py +++ b/nifty4/library/log_normal_wiener_filter_energy.py @@ -19,7 +19,7 @@ from ..minimization.energy import Energy from ..utilities import memo from .log_normal_wiener_filter_curvature import LogNormalWienerFilterCurvature -from ..sugar import create_composed_fft_operator +from ..sugar import create_composed_ht_operator from ..field import exp @@ -52,8 +52,7 @@ class LogNormalWienerFilterEnergy(Energy): self._inverter = inverter if ht is None: - self._ht = create_composed_fft_operator(self.S.domain, - all_to='position') + self._ht = create_composed_ht_operator(self.S.domain) else: self._ht = ht @@ -63,7 +62,7 @@ class LogNormalWienerFilterEnergy(Energy): expp = self._ht.adjoint_times(self._expp_sspace) Rexppd = self.R(expp) - self.d NRexppd = self.N.inverse_times(Rexppd) - self._value = 0.5 * (self.position.vdot(Sp) + Rexppd.vdot(NRexppd)) + self._value = 0.5*(self.position.vdot(Sp) + Rexppd.vdot(NRexppd)) exppRNRexppd = self._ht.adjoint_times( self._expp_sspace * self._ht(self.R.adjoint_times(NRexppd))) self._gradient = Sp + exppRNRexppd diff --git a/nifty4/library/noise_energy.py b/nifty4/library/noise_energy.py index f9a2ac014..2ea0bcb8d 100644 --- a/nifty4/library/noise_energy.py +++ b/nifty4/library/noise_energy.py @@ -51,7 +51,7 @@ class NoiseEnergy(Energy): self.xi_sample_list = xi_sample_list self.inverter = inverter - A = Projection.adjoint_times(exp(.5 * self.t)) + A = Projection.adjoint_times(exp(.5*self.t)) self._gradient = None for sample in self.xi_sample_list: @@ -60,7 +60,7 @@ class NoiseEnergy(Energy): residual = self.d - \ self.Instrument(self.nonlinearity(map_s)) lh = .5 * residual.vdot(self.N.inverse_times(residual)) - grad = -.5 * self.N.inverse_times(residual.conjugate() * residual) + grad = -.5 * self.N.inverse_times(residual.conjugate()*residual) if self._gradient is None: self._value = lh @@ -75,7 +75,7 @@ class NoiseEnergy(Energy): self.q.vdot(exp(-self.position)) self._gradient *= 1. / len(self.xi_sample_list) - self._gradient += (self.alpha - 0.5) - self.q * (exp(-self.position)) + self._gradient += (self.alpha-0.5) - self.q*(exp(-self.position)) def at(self, position): return self.__class__( diff --git a/nifty4/library/nonlinear_power_curvature.py b/nifty4/library/nonlinear_power_curvature.py index 80e109099..a5a885a4d 100644 --- a/nifty4/library/nonlinear_power_curvature.py +++ b/nifty4/library/nonlinear_power_curvature.py @@ -26,7 +26,7 @@ def NonlinearPowerCurvature(tau, ht, Instrument, nonlinearity, Projection, N, for xi_sample in xi_sample_list: LinearizedResponse = LinearizedPowerResponse( Instrument, nonlinearity, ht, Projection, tau, xi_sample) - op = LinearizedResponse.adjoint * N.inverse * LinearizedResponse + op = LinearizedResponse.adjoint*N.inverse*LinearizedResponse result = op if result is None else result + op - result = result * (1. / len(xi_sample_list)) + T + result = result * (1./len(xi_sample_list)) + T return InversionEnabler(result, inverter) diff --git a/nifty4/library/response_operators.py b/nifty4/library/response_operators.py index 2027c5f01..ec7edfe78 100644 --- a/nifty4/library/response_operators.py +++ b/nifty4/library/response_operators.py @@ -20,11 +20,11 @@ from ..field import exp def LinearizedSignalResponse(Instrument, nonlinearity, ht, power, m): - return (Instrument * nonlinearity.derivative(m) * ht * power) + return Instrument * nonlinearity.derivative(m) * ht * power def LinearizedPowerResponse(Instrument, nonlinearity, ht, Projection, tau, xi): - power = exp(0.5 * tau) - position = ht(Projection.adjoint_times(power) * xi) + power = exp(0.5*tau) + position = ht(Projection.adjoint_times(power)*xi) linearization = nonlinearity.derivative(position) - return (0.5 * Instrument * linearization * ht * xi * Projection.adjoint * power) + return 0.5*Instrument*linearization*ht*xi*Projection.adjoint*power diff --git a/nifty4/library/wiener_filter_curvature.py b/nifty4/library/wiener_filter_curvature.py index 4262b1359..32159966e 100644 --- a/nifty4/library/wiener_filter_curvature.py +++ b/nifty4/library/wiener_filter_curvature.py @@ -45,7 +45,7 @@ class WienerFilterCurvature(EndomorphicOperator): self.R = R self.N = N self.S = S - op = R.adjoint * N.inverse * R + S.inverse + op = R.adjoint*N.inverse*R + S.inverse self._op = InversionEnabler(op, inverter, S.times) @property @@ -91,10 +91,9 @@ class WienerFilterCurvature(EndomorphicOperator): def generate_posterior_sample2(self): power = self.S.diagonal() - mock_signal = Field.from_random( - random_type="normal", - domain=self.S.domain, - dtype=power.dtype) + mock_signal = Field.from_random(random_type="normal", + domain=self.S.domain, + dtype=power.dtype) mock_signal *= sqrt(power) noise = self.N.diagonal() diff --git a/nifty4/library/wiener_filter_energy.py b/nifty4/library/wiener_filter_energy.py index 153fd4e1e..e8297a195 100644 --- a/nifty4/library/wiener_filter_energy.py +++ b/nifty4/library/wiener_filter_energy.py @@ -52,8 +52,7 @@ class WienerFilterEnergy(Energy): _j = self.R.adjoint_times(self.N.inverse_times(d)) self._j = _j Dx = self._curvature(self.position) - self._value = 0.5 * \ - self.position.vdot(Dx) - self._j.vdot(self.position) + self._value = 0.5*self.position.vdot(Dx) - self._j.vdot(self.position) self._gradient = Dx - self._j def at(self, position): diff --git a/nifty4/operators/scaling_operator.py b/nifty4/operators/scaling_operator.py index 40d34530c..2e3b976a6 100644 --- a/nifty4/operators/scaling_operator.py +++ b/nifty4/operators/scaling_operator.py @@ -69,7 +69,7 @@ class ScalingOperator(EndomorphicOperator): @property def inverse(self): - if self._factor!= 0.: + if self._factor != 0.: return ScalingOperator(1./self._factor, self._domain) from .inverse_operator import InverseOperator return InverseOperator(self) @@ -84,7 +84,7 @@ class ScalingOperator(EndomorphicOperator): @property def capability(self): - if self._factor==0.: + if self._factor == 0.: return self.TIMES | self.ADJOINT_TIMES return (self.TIMES | self.ADJOINT_TIMES | self.INVERSE_TIMES | self.ADJOINT_INVERSE_TIMES) diff --git a/nifty4/plotting/plot.py b/nifty4/plotting/plot.py index 75ed595cd..2d2ee9757 100644 --- a/nifty4/plotting/plot.py +++ b/nifty4/plotting/plot.py @@ -189,13 +189,13 @@ def plot(f, **kwargs): if fld.domain != dom: raise ValueError("domain mismatch") if not (isinstance(dom[0], PowerSpace) or - (isinstance(dom[0], RGSpace) and len(dom[0].shape)==1)): + (isinstance(dom[0], RGSpace) and len(dom[0].shape) == 1)): raise ValueError("PowerSpace or 1D RGSpace required") label = _get_kw("label", None, **kwargs) if label is None: label = [None] * len(f) - if not isinstance (label, list): + if not isinstance(label, list): label = [label] dom = dom[0] @@ -216,7 +216,7 @@ def plot(f, **kwargs): xcoord = np.arange(npoints, dtype=np.float64)*dist for i, fld in enumerate(f): ycoord = dobj.to_global_data(fld.val) - plt.plot(xcoord, ycoord,label=label[i]) + plt.plot(xcoord, ycoord, label=label[i]) _limit_xy(**kwargs) if label != ([None]*len(f)): plt.legend() diff --git a/nifty4/sugar.py b/nifty4/sugar.py index c4550d0d2..05ae727f7 100644 --- a/nifty4/sugar.py +++ b/nifty4/sugar.py @@ -23,6 +23,7 @@ from .field import Field, sqrt from .operators.diagonal_operator import DiagonalOperator from .operators.power_projection_operator import PowerProjectionOperator from .operators.fft_operator import FFTOperator +from .operators.harmonic_transform_operator import HarmonicTransformOperator from .domain_tuple import DomainTuple from . import dobj, utilities @@ -32,6 +33,7 @@ __all__ = ['PS_field', 'power_synthesize_nonrandom', 'create_power_field', 'create_power_operator', + 'create_composed_ht_operator', 'create_composed_fft_operator', 'create_harmonic_smoothing_operator'] @@ -241,6 +243,20 @@ def create_power_operator(domain, power_spectrum, space=None, dtype=None): spaces=space) +def create_composed_ht_operator(domain, codomain=None): + if codomain is None: + codomain = [None]*len(domain) + res = None + for i, space in enumerate(domain): + if isinstance(space, Space) and space.harmonic: + tdom = domain if res is None else res.target + op = HarmonicTransformOperator(tdom, codomain[i], i) + res = op if res is None else op*res + if res is None: + raise ValueError("empty operator") + return res + + def create_composed_fft_operator(domain, codomain=None, all_to='other'): if codomain is None: codomain = [None]*len(domain) diff --git a/test/test_energies/test_map.py b/test/test_energies/test_map.py index 484a7a029..dfa0f81e7 100644 --- a/test/test_energies/test_map.py +++ b/test/test_energies/test_map.py @@ -147,7 +147,8 @@ class Energy_Tests(unittest.TestCase): S = ift.create_power_operator(hspace, power_spectrum=_flat_PS) energy0 = ift.library.NonlinearWienerFilterEnergy( - position=xi0, d=d, Instrument=R, nonlinearity=f, ht=ht, power=A, N=N, S=S) + position=xi0, d=d, Instrument=R, nonlinearity=f, ht=ht, power=A, + N=N, S=S) energy1 = energy0.at(xi1) a = (energy1.value - energy0.value) / eps @@ -204,7 +205,8 @@ class Curvature_Tests(unittest.TestCase): @expand(product([ift.RGSpace(64, distances=.789), ift.RGSpace([32, 32], distances=.789)], - # Only linear case due to approximation of Hessian in the case of nontrivial nonlinearities. + # Only linear case due to approximation of Hessian in the + # case of nontrivial nonlinearities. [ift.library.Linear], [4, 78, 23])) def testNonlinearMapCurvature(self, space, nonlinearity, seed): diff --git a/test/test_energies/test_power.py b/test/test_energies/test_power.py index 0a5a84e77..743b7281c 100644 --- a/test/test_energies/test_power.py +++ b/test/test_energies/test_power.py @@ -70,7 +70,8 @@ class Energy_Tests(unittest.TestCase): inverter=inverter).curvature energy0 = ift.library.CriticalPowerEnergy( - position=tau0, m=s, inverter=inverter, D=D, samples=10, smoothness_prior=1.) + position=tau0, m=s, inverter=inverter, D=D, samples=10, + smoothness_prior=1.) energy1 = energy0.at(tau1) a = (energy1.value - energy0.value) / eps diff --git a/test/test_minimization/test_minimizers.py b/test/test_minimization/test_minimizers.py index 31460d292..aff783a63 100644 --- a/test/test_minimization/test_minimizers.py +++ b/test/test_minimization/test_minimizers.py @@ -41,7 +41,8 @@ class Test_Minimizers(unittest.TestCase): covariance = ift.DiagonalOperator(covariance_diagonal) required_result = ift.Field.ones(space, dtype=np.float64) - IC = ift.GradientNormController(tol_abs_gradnorm=1e-5, iteration_limit=1000) + IC = ift.GradientNormController(tol_abs_gradnorm=1e-5, + iteration_limit=1000) try: minimizer = minimizer_class(controller=IC) energy = ift.QuadraticEnergy(A=covariance, b=required_result, @@ -57,4 +58,4 @@ class Test_Minimizers(unittest.TestCase): rtol=1e-3, atol=1e-3) -#MR FIXME: add Rosenbrock test +# MR FIXME: add Rosenbrock test diff --git a/test/test_operators/test_adjoint.py b/test/test_operators/test_adjoint.py index af71fc24e..9472dbce3 100644 --- a/test/test_operators/test_adjoint.py +++ b/test/test_operators/test_adjoint.py @@ -39,6 +39,7 @@ def _check_adjointness(op, dtype=np.float64): op.inverse_adjoint_times(f1).vdot(f2), rtol=1e-8) + _h_RG_spaces = [ift.RGSpace(7, distances=0.2, harmonic=True), ift.RGSpace((12, 46), distances=(.2, .3), harmonic=True)] _h_spaces = _h_RG_spaces + [ift.LMSpace(17)] diff --git a/test/test_operators/test_fft_operator.py b/test/test_operators/test_fft_operator.py index 5f2f9f111..1eaa2cdf1 100644 --- a/test/test_operators/test_fft_operator.py +++ b/test/test_operators/test_fft_operator.py @@ -83,7 +83,6 @@ class FFTOperatorTests(unittest.TestCase): assert_allclose(ift.dobj.to_global_data(inp.val), ift.dobj.to_global_data(out.val), rtol=tol, atol=tol) - @expand(product([0, 1, 2], [np.float64, np.float32, np.complex64, np.complex128])) def test_composed_fft(self, index, dtype): @@ -98,9 +97,8 @@ class FFTOperatorTests(unittest.TestCase): assert_allclose(ift.dobj.to_global_data(inp.val), ift.dobj.to_global_data(out.val), rtol=tol, atol=tol) - @expand(product([ift.RGSpace(128, distances=3.76, harmonic=True), - ift.RGSpace((15,27), distances=(1.7,3.33), harmonic=True), + ift.RGSpace((15, 27), distances=(.7, .33), harmonic=True), ift.RGSpace(73, distances=0.5643)], [np.float64, np.float32, np.complex64, np.complex128])) def test_normalisation(self, space, tp): -- GitLab