*/
/*
- * GiNaC Copyright (C) 1999-2003 Johannes Gutenberg University Mainz, Germany
+ * GiNaC Copyright (C) 1999-2004 Johannes Gutenberg University Mainz, Germany
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
// anonymous namespace for helper functions
namespace {
+
+// regulates the pole (used by 1/x-transformation)
+symbol H_polesign("IMSIGN");
+
// convert parameters from H to Li representation
// parameters are expected to be in expanded form, i.e. only 0, 1 and -1
}
if (allthesame) {
map_trafo_H_mult unify;
- return unify((pow(H(lst(1),1/arg).hold() + H(lst(0),1/arg).hold() - I*Pi, parameter.nops())
+ return unify((pow(H(lst(1),1/arg).hold() + H(lst(0),1/arg).hold() + H_polesign, parameter.nops())
/ factorial(parameter.nops())).expand());
}
}
// x -> 1/x
map_trafo_H_1overx trafo;
res *= trafo(H(m, xtemp));
+ if (cln::imagpart(x) <= 0) {
+ res = res.subs(H_polesign == -I*Pi);
+ } else {
+ res = res.subs(H_polesign == I*Pi);
+ }
}
// simplify result
if ((x == _ex1) && (*(--m.end()) != _ex0)) {
return convert_H_to_zeta(m);
}
-// if (step == 0) {
-// if (pos1 == _ex0) {
-// // all zero
-// if (x == _ex0) {
-// return H(m_, x).hold();
-// }
-// return pow(log(x), m.nops()) / factorial(m.nops());
-// } else {
-// // all (minus) one
-// return pow(-pos1*log(1-pos1*x), m.nops()) / factorial(m.nops());
-// }
-// } else if ((step == 1) && (pos1 == _ex0)){
-// // convertible to S
-// if (pos2 == _ex1) {
-// return S(n, p, x);
-// } else {
-// return pow(-1, p) * S(n, p, -x);
-// }
-// }
+ if (step == 0) {
+ if (pos1 == _ex0) {
+ // all zero
+ if (x == _ex0) {
+ return H(m_, x).hold();
+ }
+ return pow(log(x), m.nops()) / factorial(m.nops());
+ } else {
+ // all (minus) one
+ return pow(-pos1*log(1-pos1*x), m.nops()) / factorial(m.nops());
+ }
+ } else if ((step == 1) && (pos1 == _ex0)){
+ // convertible to S
+ if (pos2 == _ex1) {
+ return S(n, p, x);
+ } else {
+ return pow(-1, p) * S(n, p, -x);
+ }
+ }
if (x == _ex0) {
return _ex0;
}