diff --git a/nifty/__init__.py b/nifty/__init__.py index 67cec38a5fc68862cb0275314495bb17d6e2288f..c73c9628857770e9fe7d3ba95e5aa24afd11b178 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 0b21844ae8498256f986ceaa52e22021a58b4225..7089938769be878f328448c803f6662e821d3a11 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 b379750b2693ba40558f77d411c153ac671adda2..0000000000000000000000000000000000000000 --- 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 f1f47c8a7538d9207e562e8c5990698f74433e1d..079901fa9c1e49553970c2b8a222144be7359d99 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 59e89aa67b116b4c8bfe84f647854cf869e7c53d..f64e8d6f86d7d610ad5d9220b8071412b84a2a4a 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 b282e9cb42365b688c9cd574317c3d8123a2e0ab..8260167fbf73f2eed95c3dda246c3eb1ddd310d7 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 f08794ca24f23a277b748f51713edd96c4ac777c..8e85db1a93254882d700b8a92f4da8d6af97a3ab 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 06950054c6974621268f6c34730dc5c847bae0a1..9d46819a49f39d0946cad37c92fa327988158db2 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 85b1a5bb06d477c66a06861284c813c6fa3bbaf5..fbc464180c4c237bc3bde3c6a054b66c4b6f8489 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 fe91bdb4131f8e2d95b46736628d91eba02146b0..c5afbafb7a4644003812a5b97b3684b248444bea 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 0e5df8f463f9fc3ebac6c505609f487544002803..27ec215d5b0f7948cf0d8d130752b9ebafb45e2a 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 07a7eeddc8653d7f19e29aa634566c1a7f2e75e4..bae13793034aa4bf299586dd1bc54e1a6ca21ab9 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 79a1a68dad2a1c709040effe90de4a8e6c043822..0c01c01a3caf2d39f582ab227c9d492d21aeac5f 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 3718170da7c8a7f6e12865a954156ae164d3e226..81cfeff6b47c2379b62cf6b74d8ab961a0485b40 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 2e568cec98298ab8a7eadac106ddfe3f84dee111..0a34c939eccd6a895ca68c81cd85eb69385bd9d7 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 b0c0b1a02c1711dc0afdded41a413bd243deb28d..802ae2f0c7ba997f670c8d95420edabd8bf528f5 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 7c695aed48d96cae546b941ce0eb129a292ded20..cb20468e86ffaacbc906c8ebf5875a369d8b308c 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",