From 12712d9513b7bb7d35743d3a516ffad9c6eabf9c Mon Sep 17 00:00:00 2001 From: theos <theo.steininger@ultimanet.de> Date: Tue, 18 Oct 2016 03:30:19 +0200 Subject: [PATCH] Made use of keepers.logging compatible with inheritance. --- nifty/__init__.py | 4 +- nifty/field.py | 9 ++-- nifty/logger.py | 5 --- nifty/minimization/__init__.py | 3 ++ nifty/minimization/conjugate_gradient.py | 41 +++++++++---------- .../diagonal_operator/diagonal_operator.py | 5 +-- .../transformations/gllmtransformation.py | 7 +--- .../transformations/lmgltransformation.py | 7 +--- .../transformations/rg_transforms.py | 7 ++-- .../transformations/rgrgtransformation.py | 9 ++-- .../transformations/transformation.py | 4 +- .../linear_operator/linear_operator.py | 3 +- .../propagator_operator.py | 3 -- nifty/spaces/gl_space/gl_space.py | 7 +--- nifty/spaces/lm_space/lm_space.py | 8 +--- nifty/spaces/space/space.py | 4 +- setup.py | 4 +- 17 files changed, 55 insertions(+), 75 deletions(-) delete mode 100644 nifty/logger.py diff --git a/nifty/__init__.py b/nifty/__init__.py index 67cec38a5..c73c96288 100644 --- a/nifty/__init__.py +++ b/nifty/__init__.py @@ -26,7 +26,9 @@ mpl.use('Agg') from .version import __version__ -from logger import logger +# initialize the logger instance +from keepers import MPILogger +logger = MPILogger() import dummys diff --git a/nifty/field.py b/nifty/field.py index 0b21844ae..708993876 100644 --- a/nifty/field.py +++ b/nifty/field.py @@ -14,11 +14,10 @@ from nifty.spaces.power_space import PowerSpace import nifty.nifty_utilities as utilities from nifty.random import Random -import logging -logger = logging.getLogger('NIFTy.Field') +from keepers import Loggable -class Field(object): +class Field(object, Loggable): # ---Initialization methods--- def __init__(self, domain=None, val=None, dtype=None, field_type=None, @@ -116,7 +115,7 @@ class Field(object): elif isinstance(val, Field): distribution_strategy = val.distribution_strategy else: - logger.info("Datamodel set to default!") + self.logger.info("Datamodel set to default!") distribution_strategy = gc['default_distribution_strategy'] elif distribution_strategy not in DISTRIBUTION_STRATEGIES['global']: raise ValueError( @@ -387,7 +386,7 @@ class Field(object): result_list[0].domain_axes[power_space_index]) if pindex.distribution_strategy is not local_distribution_strategy: - logger.warn( + self.logger.warn( "The distribution_stragey of pindex does not fit the " "slice_local distribution strategy of the synthesized field.") diff --git a/nifty/logger.py b/nifty/logger.py deleted file mode 100644 index b379750b2..000000000 --- a/nifty/logger.py +++ /dev/null @@ -1,5 +0,0 @@ -# -*- coding: utf-8 -*- - -from keepers import MPILogger - -logger = MPILogger() diff --git a/nifty/minimization/__init__.py b/nifty/minimization/__init__.py index f1f47c8a7..079901fa9 100644 --- a/nifty/minimization/__init__.py +++ b/nifty/minimization/__init__.py @@ -1,3 +1,6 @@ # -*- coding: utf-8 -*- +from line_searching import * from conjugate_gradient import ConjugateGradient +from quasi_newton_minimizer import QuasiNewtonMinimizer +from steepest_descent import SteepestDescent diff --git a/nifty/minimization/conjugate_gradient.py b/nifty/minimization/conjugate_gradient.py index 59e89aa67..f64e8d6f8 100644 --- a/nifty/minimization/conjugate_gradient.py +++ b/nifty/minimization/conjugate_gradient.py @@ -4,9 +4,6 @@ from __future__ import division import numpy as np -import logging -logger = logging.getLogger('NIFTy.CG') - class ConjugateGradient(object): def __init__(self, convergence_tolerance=1E-4, convergence_level=3, @@ -82,16 +79,16 @@ class ConjugateGradient(object): d = self.preconditioner(r) previous_gamma = r.dot(d) if previous_gamma == 0: - logger.info("The starting guess is already perfect solution for " - "the inverse problem.") + self.logger.info("The starting guess is already perfect solution " + "for the inverse problem.") return x0, self.convergence_level+1 norm_b = np.sqrt(b.dot(b)) x = x0 convergence = 0 iteration_number = 1 - logger.info("Starting conjugate gradient.") + self.logger.info("Starting conjugate gradient.") - while(True): + while True: if self.callback is not None: self.callback(x, iteration_number) @@ -99,19 +96,19 @@ class ConjugateGradient(object): alpha = previous_gamma/d.dot(q) if not np.isfinite(alpha): - logger.error("Alpha became infinite! Stopping.") + self.logger.error("Alpha became infinite! Stopping.") return x0, 0 x += d * alpha reset = False if alpha.real < 0: - logger.warn("Positive definiteness of A violated!") + self.logger.warn("Positive definiteness of A violated!") reset = True if self.reset_count is not None: reset += (iteration_number % self.reset_count == 0) if reset: - logger.info("Resetting conjugate directions.") + self.logger.info("Resetting conjugate directions.") r = b - A(x) else: r -= q * alpha @@ -120,35 +117,37 @@ class ConjugateGradient(object): gamma = r.dot(s) if gamma.real < 0: - logger.warn("Positive definitness of preconditioner violated!") + self.logger.warn("Positive definitness of preconditioner " + "violated!") beta = max(0, gamma/previous_gamma) delta = np.sqrt(gamma)/norm_b - logger.debug("Iteration : %08u alpha = %3.1E beta = %3.1E " - "delta = %3.1E" % - (iteration_number, - np.real(alpha), - np.real(beta), - np.real(delta))) + self.logger.debug("Iteration : %08u alpha = %3.1E " + "beta = %3.1E delta = %3.1E" % + (iteration_number, + np.real(alpha), + np.real(beta), + np.real(delta))) if gamma == 0: convergence = self.convergence_level+1 - logger.info("Reached infinite convergence.") + self.logger.info("Reached infinite convergence.") break elif abs(delta) < self.convergence_tolerance: convergence += 1 - logger.info("Updated convergence level to: %u" % convergence) + self.logger.info("Updated convergence level to: %u" % + convergence) if convergence == self.convergence_level: - logger.info("Reached target convergence level.") + self.logger.info("Reached target convergence level.") break else: convergence = max(0, convergence-1) if self.iteration_limit is not None: if iteration_number == self.iteration_limit: - logger.warn("Reached iteration limit. Stopping.") + self.logger.warn("Reached iteration limit. Stopping.") break d = s + d * beta diff --git a/nifty/operators/diagonal_operator/diagonal_operator.py b/nifty/operators/diagonal_operator/diagonal_operator.py index b282e9cb4..8260167fb 100644 --- a/nifty/operators/diagonal_operator/diagonal_operator.py +++ b/nifty/operators/diagonal_operator/diagonal_operator.py @@ -9,9 +9,6 @@ from nifty.config import nifty_configuration as gc from nifty.field import Field from nifty.operators.endomorphic_operator import EndomorphicOperator -import logging -logger = logging.getLogger('NIFTy.DiagonalOperator') - class DiagonalOperator(EndomorphicOperator): @@ -119,7 +116,7 @@ class DiagonalOperator(EndomorphicOperator): elif isinstance(val, Field): distribution_strategy = val.distribution_strategy else: - logger.info("Datamodel set to default!") + self.logger.info("Datamodel set to default!") distribution_strategy = gc['default_distribution_strategy'] elif distribution_strategy not in DISTRIBUTION_STRATEGIES['all']: raise ValueError( diff --git a/nifty/operators/fft_operator/transformations/gllmtransformation.py b/nifty/operators/fft_operator/transformations/gllmtransformation.py index f08794ca2..8e85db1a9 100644 --- a/nifty/operators/fft_operator/transformations/gllmtransformation.py +++ b/nifty/operators/fft_operator/transformations/gllmtransformation.py @@ -5,9 +5,6 @@ from nifty import GLSpace, LMSpace from slicing_transformation import SlicingTransformation import lm_transformation_factory as ltf -import logging -logger = logging.getLogger('NIFTy.GLLMTransformation') - libsharp = gdi.get('libsharp_wrapper_gl') @@ -121,8 +118,8 @@ class GLLMTransformation(SlicingTransformation): elif inp.dtype == np.dtype('float64'): return libsharp.map2alm(inp, **kwargs) else: - logger.debug("performing dtype conversion for libsharp " - "compatibility.") + self.logger.debug("performing dtype conversion for libsharp " + "compatibility.") casted_inp = inp.astype(np.dtype('float64'), copy=False) result = libsharp.map2alm(casted_inp, **kwargs) return result diff --git a/nifty/operators/fft_operator/transformations/lmgltransformation.py b/nifty/operators/fft_operator/transformations/lmgltransformation.py index 06950054c..9d46819a4 100644 --- a/nifty/operators/fft_operator/transformations/lmgltransformation.py +++ b/nifty/operators/fft_operator/transformations/lmgltransformation.py @@ -5,9 +5,6 @@ from nifty import GLSpace, LMSpace from slicing_transformation import SlicingTransformation import lm_transformation_factory as ltf -import logging -logger = logging.getLogger('NIFTy.LMGLTransformation') - libsharp = gdi.get('libsharp_wrapper_gl') @@ -128,8 +125,8 @@ class LMGLTransformation(SlicingTransformation): elif inp.dtype == np.dtype('complex128'): return libsharp.alm2map(inp, **kwargs) else: - logger.debug("performing dtype conversion for libsharp " - "compatibility.") + self.logger.debug("Performing dtype conversion for libsharp " + "compatibility.") casted_inp = inp.astype(np.dtype('complex128'), copy=False) result = libsharp.alm2map(casted_inp, **kwargs) return result diff --git a/nifty/operators/fft_operator/transformations/rg_transforms.py b/nifty/operators/fft_operator/transformations/rg_transforms.py index 85b1a5bb0..fbc464180 100644 --- a/nifty/operators/fft_operator/transformations/rg_transforms.py +++ b/nifty/operators/fft_operator/transformations/rg_transforms.py @@ -5,13 +5,12 @@ from d2o import distributed_data_object, STRATEGIES from nifty.config import dependency_injector as gdi import nifty.nifty_utilities as utilities -import logging -logger = logging.getLogger('NIFTy.RGTransforms') +from keepers import Loggable pyfftw = gdi.get('pyfftw') -class Transform(object): +class Transform(object, Loggable): """ A generic fft object without any implementation. """ @@ -297,7 +296,7 @@ class FFTW(Transform): def _repack_to_fftw_and_transform(self, val, axes, **kwargs): temp_val = val.copy_empty(distribution_strategy='fftw') - logger.info("Repacking d2o to fftw distribution strategy") + self.logger.info("Repacking d2o to fftw distribution strategy") temp_val.set_full_data(val, copy=False) # Recursive call to transform diff --git a/nifty/operators/fft_operator/transformations/rgrgtransformation.py b/nifty/operators/fft_operator/transformations/rgrgtransformation.py index fe91bdb41..c5afbafb7 100644 --- a/nifty/operators/fft_operator/transformations/rgrgtransformation.py +++ b/nifty/operators/fft_operator/transformations/rgrgtransformation.py @@ -4,9 +4,6 @@ from rg_transforms import FFTW, GFFT from nifty.config import dependency_injector as gdi from nifty import RGSpace, nifty_configuration -import logging -logger = logging.getLogger('NIFTy.RGRGTransformation') - class RGRGTransformation(Transformation): def __init__(self, domain, codomain=None, module=None): @@ -84,8 +81,8 @@ class RGRGTransformation(Transformation): cls.check_codomain(domain, new_space) return new_space - @staticmethod - def check_codomain(domain, codomain): + @classmethod + def check_codomain(cls, domain, codomain): if not isinstance(domain, RGSpace): raise TypeError('ERROR: domain is not a RGSpace') @@ -104,7 +101,7 @@ class RGRGTransformation(Transformation): if codomain.harmonic and not issubclass(codomain.dtype.type, np.complexfloating): - logger.warn("codomain is harmonic but dtype is real.") + cls.logger.warn("Codomain is harmonic but dtype is real.") # Check if the distances match, i.e. dist' = 1 / (num * dist) if not np.all( diff --git a/nifty/operators/fft_operator/transformations/transformation.py b/nifty/operators/fft_operator/transformations/transformation.py index 0e5df8f46..27ec215d5 100644 --- a/nifty/operators/fft_operator/transformations/transformation.py +++ b/nifty/operators/fft_operator/transformations/transformation.py @@ -1,8 +1,10 @@ import abc +from keepers import Loggable -class Transformation(object): + +class Transformation(object, Loggable): """ A generic transformation which defines a static check_codomain method for all transforms. diff --git a/nifty/operators/linear_operator/linear_operator.py b/nifty/operators/linear_operator/linear_operator.py index 07a7eeddc..bae137930 100644 --- a/nifty/operators/linear_operator/linear_operator.py +++ b/nifty/operators/linear_operator/linear_operator.py @@ -2,13 +2,14 @@ import abc +from keepers import Loggable from nifty.field import Field from nifty.spaces import Space from nifty.field_types import FieldType import nifty.nifty_utilities as utilities -class LinearOperator(object): +class LinearOperator(object, Loggable): __metaclass__ = abc.ABCMeta def __init__(self): diff --git a/nifty/operators/propagator_operator/propagator_operator.py b/nifty/operators/propagator_operator/propagator_operator.py index 79a1a68da..0c01c01a3 100644 --- a/nifty/operators/propagator_operator/propagator_operator.py +++ b/nifty/operators/propagator_operator/propagator_operator.py @@ -6,9 +6,6 @@ from nifty.field import Field from nifty.operators import EndomorphicOperator,\ FFTOperator -import logging -logger = logging.getLogger('NIFTy.PropagatorOperator') - class PropagatorOperator(EndomorphicOperator): diff --git a/nifty/spaces/gl_space/gl_space.py b/nifty/spaces/gl_space/gl_space.py index 3718170da..81cfeff6b 100644 --- a/nifty/spaces/gl_space/gl_space.py +++ b/nifty/spaces/gl_space/gl_space.py @@ -10,9 +10,6 @@ from nifty.config import nifty_configuration as gc,\ dependency_injector as gdi import nifty.nifty_utilities as utilities -import logging -logger = logging.getLogger('NIFTy.GLSpace') - gl = gdi.get('libsharp_wrapper_gl') GL_DISTRIBUTION_STRATEGIES = DISTRIBUTION_STRATEGIES['global'] @@ -207,6 +204,6 @@ class GLSpace(Space): else: nlon = int(nlon) if nlon != 2 * self.nlat - 1: - logger.warn("nlon was set to an unrecommended value: " - "nlon <> 2*nlat-1.") + self.logger.warn("nlon was set to an unrecommended value: " + "nlon <> 2*nlat-1.") return nlon diff --git a/nifty/spaces/lm_space/lm_space.py b/nifty/spaces/lm_space/lm_space.py index 2e568cec9..0a34c939e 100644 --- a/nifty/spaces/lm_space/lm_space.py +++ b/nifty/spaces/lm_space/lm_space.py @@ -11,9 +11,6 @@ from lm_helper import _distance_array_helper from d2o import arange -import logging -logger = logging.getLogger('NIFTy.LMSpace') - gl = gdi.get('libsharp_wrapper_gl') hp = gdi.get('healpy') @@ -178,9 +175,8 @@ class LMSpace(Space): def _parse_lmax(self, lmax): lmax = np.int(lmax) if lmax < 1: - raise ValueError( - "negative lmax is not allowed.") + raise ValueError("Negative lmax is not allowed.") # exception lmax == 2 (nside == 1) if (lmax % 2 == 0) and (lmax > 2): - logger.warn("unrecommended parameter (lmax <> 2*n+1).") + self.logger.warn("Unrecommended parameter (lmax <> 2*n+1).") return lmax diff --git a/nifty/spaces/space/space.py b/nifty/spaces/space/space.py index b0c0b1a02..802ae2f0c 100644 --- a/nifty/spaces/space/space.py +++ b/nifty/spaces/space/space.py @@ -146,8 +146,10 @@ import abc import numpy as np +from keepers import Loggable -class Space(object): + +class Space(object, Loggable): """ .. __ __ .. /__/ / /_ diff --git a/setup.py b/setup.py index 7c695aed4..cb20468e8 100644 --- a/setup.py +++ b/setup.py @@ -44,9 +44,9 @@ setup(name="ift_nifty", ]), include_dirs=[numpy.get_include()], dependency_links=[ - 'git+https://gitlab.mpcdf.mpg.de/ift/keepers.git#egg=keepers-0.3.0', + 'git+https://gitlab.mpcdf.mpg.de/ift/keepers.git#egg=keepers-0.3.2', 'git+https://gitlab.mpcdf.mpg.de/ift/d2o.git#egg=d2o-1.0.4'], - install_requires=['keepers>=0.3.0', 'd2o>=1.0.4'], + install_requires=['keepers>=0.3.2', 'd2o>=1.0.4'], package_data={'nifty.demos': ['demo_faraday_map.npy'], }, license="GPLv3", -- GitLab