From 4fd78c1041a6d92cd4a48c6d089f58ef0b80f572 Mon Sep 17 00:00:00 2001 From: Lukas Platz <lplatz@mpa-garching.mpg.de> Date: Tue, 29 Oct 2019 16:24:56 +0100 Subject: [PATCH] add ift.log10, Field.log10, Linearization.log10 --- nifty5/data_objects/distributed_do.py | 4 ++-- nifty5/data_objects/numpy_do.py | 8 +++++--- nifty5/field.py | 2 +- nifty5/linearization.py | 5 +++++ nifty5/operators/operator.py | 2 +- nifty5/sugar.py | 2 +- test/test_field.py | 2 +- test/test_linearization.py | 2 +- 8 files changed, 17 insertions(+), 10 deletions(-) diff --git a/nifty5/data_objects/distributed_do.py b/nifty5/data_objects/distributed_do.py index 765b77c4f..004e2949c 100644 --- a/nifty5/data_objects/distributed_do.py +++ b/nifty5/data_objects/distributed_do.py @@ -32,7 +32,7 @@ __all__ = ["ntask", "rank", "master", "local_shape", "data_object", "full", "redistribute", "default_distaxis", "is_numpy", "absmax", "norm", "lock", "locked", "uniform_full", "transpose", "to_global_data_rw", "ensure_not_distributed", "ensure_default_distributed", - "tanh", "conjugate", "sin", "cos", "tan", + "tanh", "conjugate", "sin", "cos", "tan", "log10", "sinh", "cosh", "sinc", "absolute", "sign", "clip"] _comm = MPI.COMM_WORLD @@ -297,7 +297,7 @@ def _math_helper(x, function, out): _current_module = sys.modules[__name__] for f in ["sqrt", "exp", "log", "tanh", "conjugate", "sin", "cos", "tan", - "sinh", "cosh", "sinc", "absolute", "sign"]: + "sinh", "cosh", "sinc", "absolute", "sign", "log10"]: def func(f): def func2(x, out=None): return _math_helper(x, f, out) diff --git a/nifty5/data_objects/numpy_do.py b/nifty5/data_objects/numpy_do.py index ed0d96de8..02bd03fe8 100644 --- a/nifty5/data_objects/numpy_do.py +++ b/nifty5/data_objects/numpy_do.py @@ -18,9 +18,11 @@ # Data object module that uses simple numpy ndarrays. import numpy as np -from numpy import absolute, clip, cos, cosh, empty, empty_like, exp, full, log from numpy import ndarray as data_object -from numpy import ones, sign, sin, sinc, sinh, sqrt, tan, tanh, vdot, zeros +from numpy import empty, empty_like, ones, zeros, full +from numpy import absolute, sign, clip, vdot +from numpy import sin, cos, sinh, cosh, tan, tanh +from numpy import exp, log, log10, sqrt, sinc from .random import Random @@ -34,7 +36,7 @@ __all__ = ["ntask", "rank", "master", "local_shape", "data_object", "full", "lock", "locked", "uniform_full", "to_global_data_rw", "ensure_not_distributed", "ensure_default_distributed", "clip", "sin", "cos", "tan", "sinh", - "cosh", "absolute", "sign", "sinc"] + "cosh", "absolute", "sign", "sinc", "log10"] ntask = 1 rank = 0 diff --git a/nifty5/field.py b/nifty5/field.py index 5ba5fba3a..c04bbc649 100644 --- a/nifty5/field.py +++ b/nifty5/field.py @@ -682,7 +682,7 @@ for op in ["__iadd__", "__isub__", "__imul__", "__idiv__", return func2 setattr(Field, op, func(op)) -for f in ["sqrt", "exp", "log", "tanh", +for f in ["sqrt", "exp", "log", "log10", "tanh", "sin", "cos", "tan", "cosh", "sinh", "absolute", "sinc", "sign"]: def func(f): diff --git a/nifty5/linearization.py b/nifty5/linearization.py index 6c5b8cb20..816c74d32 100644 --- a/nifty5/linearization.py +++ b/nifty5/linearization.py @@ -330,6 +330,11 @@ class Linearization(object): tmp = self._val.log() return self.new(tmp, makeOp(1./self._val)(self._jac)) + def log10(self): + tmp = self._val.log10() + tmp2 = 1. / (self._val * np.log(10)) + return self.new(tmp, makeOp(tmp2)(self._jac)) + def sinh(self): tmp = self._val.sinh() tmp2 = self._val.cosh() diff --git a/nifty5/operators/operator.py b/nifty5/operators/operator.py index 21a8c6a89..90b88f784 100644 --- a/nifty5/operators/operator.py +++ b/nifty5/operators/operator.py @@ -159,7 +159,7 @@ class Operator(metaclass=NiftyMeta): for f in ["sqrt", "exp", "log", "tanh", "sigmoid", 'sin', 'cos', 'tan', - 'sinh', 'cosh', 'absolute', 'sinc', 'one_over']: + 'sinh', 'cosh', 'absolute', 'sinc', 'one_over', 'log10']: def func(f): def func2(self): fa = _FunctionApplier(self.target, f) diff --git a/nifty5/sugar.py b/nifty5/sugar.py index ffd775e84..26d78903d 100644 --- a/nifty5/sugar.py +++ b/nifty5/sugar.py @@ -389,7 +389,7 @@ def domain_union(domains): _current_module = sys.modules[__name__] -for f in ["sqrt", "exp", "log", "tanh", "sigmoid", +for f in ["sqrt", "exp", "log", "log10", "tanh", "sigmoid", "conjugate", 'sin', 'cos', 'tan', 'sinh', 'cosh', 'absolute', 'one_over', 'sinc']: def func(f): diff --git a/test/test_field.py b/test/test_field.py index 325cae05f..b52baf93f 100644 --- a/test/test_field.py +++ b/test/test_field.py @@ -329,7 +329,7 @@ def test_emptydomain(): @pmp('dom', [ift.RGSpace((8,), harmonic=True), ()]) @pmp('func', [ "exp", "log", "sin", "cos", "tan", "sinh", "cosh", "sinc", "absolute", - "sign" + "sign", "log10" ]) def test_funcs(num, dom, func): num = 5 diff --git a/test/test_linearization.py b/test/test_linearization.py index f9973900e..fa0c49e68 100644 --- a/test/test_linearization.py +++ b/test/test_linearization.py @@ -54,7 +54,7 @@ def test_special_gradients(): @pmp('f', [ 'log', 'exp', 'sqrt', 'sin', 'cos', 'tan', 'sinc', 'sinh', 'cosh', 'tanh', - 'absolute', 'one_over', 'sigmoid' + 'absolute', 'one_over', 'sigmoid', 'log10' ]) def test_actual_gradients(f): dom = ift.UnstructuredDomain((1,)) -- GitLab