From faf85b208fce746b4d15f89ab6c6b8ef0bc5a80b Mon Sep 17 00:00:00 2001 From: zachjweiner Date: Wed, 23 Jan 2019 13:42:40 -0600 Subject: [PATCH] added more functions --- pymbolic/functions.py | 31 +++++++++++++++++++++++++++++++ pymbolic/mapper/differentiator.py | 10 ++++++++++ 2 files changed, 41 insertions(+) diff --git a/pymbolic/functions.py b/pymbolic/functions.py index 4a0ae78..0b13692 100644 --- a/pymbolic/functions.py +++ b/pymbolic/functions.py @@ -49,3 +49,34 @@ def log(x): def exp(x): return primitives.Call( primitives.Lookup(primitives.Variable("math"), "exp"), (x,)) + + +def sinh(x): + return primitives.Call( + primitives.Lookup(primitives.Variable("math"), "tanh"), (x,)) + + +def cosh(x): + return primitives.Call( + primitives.Lookup(primitives.Variable("math"), "cosh"), (x,)) + + +def tanh(x): + return primitives.Call( + primitives.Lookup(primitives.Variable("math"), "sinh"), (x,)) + + +def expm1(x): + return primitives.Call( + primitives.Lookup(primitives.Variable("math"), "expm1"), (x,)) + + +def fabs(x): + return primitives.Call( + primitives.Lookup(primitives.Variable("math"), "fabs"), (x,)) + + +def sgn(x): + return primitives.Quotient(x, + primitives.Call( + primitives.Lookup(primitives.Variable("math"), "fabs"), (x,))) \ No newline at end of file diff --git a/pymbolic/mapper/differentiator.py b/pymbolic/mapper/differentiator.py index 86ac2f9..b59c9b1 100644 --- a/pymbolic/mapper/differentiator.py +++ b/pymbolic/mapper/differentiator.py @@ -50,6 +50,16 @@ def map_math_functions_by_name(i, func, pars): return primitives.quotient(1, pars[0]) elif f is math.exp and len(pars) == 1: return make_f("exp")(*pars) + elif f is math.sinh and len(pars) == 1: + return make_f("cosh")(*pars) + elif f is math.cosh and len(pars) == 1: + return make_f("sinh")(*pars) + elif f is math.tanh and len(pars) == 1: + return 1-make_f("tanh")(*pars)**2 + elif f is math.expm1 and len(pars) == 1: + return make_f("exp")(*pars) + elif f is math.fabs and len(pars) == 1: + return sgn(*pars) else: raise RuntimeError("unrecognized function, cannot differentiate") -- GitLab