From f857bce031d147d7d60e9dc327b53b2e5f6dc27a Mon Sep 17 00:00:00 2001
From: "Vladimir V. Kisil" <kisilv@maths.leeds.ac.uk>
Date: Mon, 14 Oct 2019 15:51:08 +0100
Subject: [PATCH] Power law for exponent.

If it safe to evaluate (e^t)^s = e^(ts) at least in two cases:

a) t and s are reals, the respective formula can be found in
any analysis textbook.

b) if s is an integer, then the ambiguity of t up to the term 2*Pi*k
does not cause a different value.


Signed-off-by: Vladimir V. Kisil <kisilv@maths.leeds.ac.uk>
---
 ginac/inifcns_trans.cpp | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/ginac/inifcns_trans.cpp b/ginac/inifcns_trans.cpp
index 232db8c5..9ce96e24 100644
--- a/ginac/inifcns_trans.cpp
+++ b/ginac/inifcns_trans.cpp
@@ -128,6 +128,14 @@ static ex exp_conjugate(const ex & x)
 	return exp(x.conjugate());
 }
 
+static ex exp_power(const ex & x, const ex & a)
+{
+	if (a.info(info_flags::integer) || (x.info(info_flags::real) && a.info(info_flags::real)))
+		return exp(x*a);
+
+	return power(exp(x), a).hold();
+}
+
 REGISTER_FUNCTION(exp, eval_func(exp_eval).
                        evalf_func(exp_evalf).
                        expand_func(exp_expand).
@@ -135,6 +143,7 @@ REGISTER_FUNCTION(exp, eval_func(exp_eval).
                        real_part_func(exp_real_part).
                        imag_part_func(exp_imag_part).
                        conjugate_func(exp_conjugate).
+                       power_func(exp_power).
                        latex_name("\\exp"));
 
 //////////
-- 
2.20.1

