Commit 4fd78c10 authored by Lukas Platz's avatar Lukas Platz
Browse files

add ift.log10, Field.log10, Linearization.log10

parent de336041
Pipeline #62667 passed with stages
in 7 minutes and 24 seconds
...@@ -32,7 +32,7 @@ __all__ = ["ntask", "rank", "master", "local_shape", "data_object", "full", ...@@ -32,7 +32,7 @@ __all__ = ["ntask", "rank", "master", "local_shape", "data_object", "full",
"redistribute", "default_distaxis", "is_numpy", "absmax", "norm", "redistribute", "default_distaxis", "is_numpy", "absmax", "norm",
"lock", "locked", "uniform_full", "transpose", "to_global_data_rw", "lock", "locked", "uniform_full", "transpose", "to_global_data_rw",
"ensure_not_distributed", "ensure_default_distributed", "ensure_not_distributed", "ensure_default_distributed",
"tanh", "conjugate", "sin", "cos", "tan", "tanh", "conjugate", "sin", "cos", "tan", "log10",
"sinh", "cosh", "sinc", "absolute", "sign", "clip"] "sinh", "cosh", "sinc", "absolute", "sign", "clip"]
_comm = MPI.COMM_WORLD _comm = MPI.COMM_WORLD
...@@ -297,7 +297,7 @@ def _math_helper(x, function, out): ...@@ -297,7 +297,7 @@ def _math_helper(x, function, out):
_current_module = sys.modules[__name__] _current_module = sys.modules[__name__]
for f in ["sqrt", "exp", "log", "tanh", "conjugate", "sin", "cos", "tan", 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 func(f):
def func2(x, out=None): def func2(x, out=None):
return _math_helper(x, f, out) return _math_helper(x, f, out)
......
...@@ -18,9 +18,11 @@ ...@@ -18,9 +18,11 @@
# Data object module that uses simple numpy ndarrays. # Data object module that uses simple numpy ndarrays.
import numpy as np 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 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 from .random import Random
...@@ -34,7 +36,7 @@ __all__ = ["ntask", "rank", "master", "local_shape", "data_object", "full", ...@@ -34,7 +36,7 @@ __all__ = ["ntask", "rank", "master", "local_shape", "data_object", "full",
"lock", "locked", "uniform_full", "to_global_data_rw", "lock", "locked", "uniform_full", "to_global_data_rw",
"ensure_not_distributed", "ensure_default_distributed", "ensure_not_distributed", "ensure_default_distributed",
"clip", "sin", "cos", "tan", "sinh", "clip", "sin", "cos", "tan", "sinh",
"cosh", "absolute", "sign", "sinc"] "cosh", "absolute", "sign", "sinc", "log10"]
ntask = 1 ntask = 1
rank = 0 rank = 0
......
...@@ -682,7 +682,7 @@ for op in ["__iadd__", "__isub__", "__imul__", "__idiv__", ...@@ -682,7 +682,7 @@ for op in ["__iadd__", "__isub__", "__imul__", "__idiv__",
return func2 return func2
setattr(Field, op, func(op)) 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", "sin", "cos", "tan", "cosh", "sinh",
"absolute", "sinc", "sign"]: "absolute", "sinc", "sign"]:
def func(f): def func(f):
......
...@@ -330,6 +330,11 @@ class Linearization(object): ...@@ -330,6 +330,11 @@ class Linearization(object):
tmp = self._val.log() tmp = self._val.log()
return self.new(tmp, makeOp(1./self._val)(self._jac)) 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): def sinh(self):
tmp = self._val.sinh() tmp = self._val.sinh()
tmp2 = self._val.cosh() tmp2 = self._val.cosh()
......
...@@ -159,7 +159,7 @@ class Operator(metaclass=NiftyMeta): ...@@ -159,7 +159,7 @@ class Operator(metaclass=NiftyMeta):
for f in ["sqrt", "exp", "log", "tanh", "sigmoid", 'sin', 'cos', 'tan', 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 func(f):
def func2(self): def func2(self):
fa = _FunctionApplier(self.target, f) fa = _FunctionApplier(self.target, f)
......
...@@ -389,7 +389,7 @@ def domain_union(domains): ...@@ -389,7 +389,7 @@ def domain_union(domains):
_current_module = sys.modules[__name__] _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', "conjugate", 'sin', 'cos', 'tan', 'sinh', 'cosh',
'absolute', 'one_over', 'sinc']: 'absolute', 'one_over', 'sinc']:
def func(f): def func(f):
......
...@@ -329,7 +329,7 @@ def test_emptydomain(): ...@@ -329,7 +329,7 @@ def test_emptydomain():
@pmp('dom', [ift.RGSpace((8,), harmonic=True), ()]) @pmp('dom', [ift.RGSpace((8,), harmonic=True), ()])
@pmp('func', [ @pmp('func', [
"exp", "log", "sin", "cos", "tan", "sinh", "cosh", "sinc", "absolute", "exp", "log", "sin", "cos", "tan", "sinh", "cosh", "sinc", "absolute",
"sign" "sign", "log10"
]) ])
def test_funcs(num, dom, func): def test_funcs(num, dom, func):
num = 5 num = 5
......
...@@ -54,7 +54,7 @@ def test_special_gradients(): ...@@ -54,7 +54,7 @@ def test_special_gradients():
@pmp('f', [ @pmp('f', [
'log', 'exp', 'sqrt', 'sin', 'cos', 'tan', 'sinc', 'sinh', 'cosh', 'tanh', 'log', 'exp', 'sqrt', 'sin', 'cos', 'tan', 'sinc', 'sinh', 'cosh', 'tanh',
'absolute', 'one_over', 'sigmoid' 'absolute', 'one_over', 'sigmoid', 'log10'
]) ])
def test_actual_gradients(f): def test_actual_gradients(f):
dom = ift.UnstructuredDomain((1,)) dom = ift.UnstructuredDomain((1,))
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment