there is a 1/ep^2 term, so the s1 is not correct or I used the series in a wrong way?
#include <ginac/ginac.h>
using namespace GiNaC;
using namespace std;
int main(int argn, char** args) {
symbol x1("x1"),x2("x2"),x3("x3"),x4("x4");
symbol ep("ep");
ex expr = -2*pow(x1,-1 + ep)*(exp(3*ep*Euler)*pow(ep,-1)*pow(x2,-3*ep)*
pow(1 + x3 + x4 + x3*x4,-3*ep)*
pow(1 + x2 + x3 + x2*x3 + x4 + x2*x4 + x3*x4 + x2*x3*x4,-2 + 4*ep)*tgamma(3*ep) -
exp(3*ep*Euler)*pow(ep,-1)*pow(x2,-3*ep)*pow(1 + x3 + x4 + x3*x4,-3*ep)*
pow(1 + x2 + x3 + x1*x3 + x2*x3 + x4 + x2*x4 + x3*x4 + x1*x3*x4 + x2*x3*x4,
-2 + 4*ep)*tgamma(3*ep));
auto s1 = expr.series(ep,-1);
cout << s1.normal() << endl;
auto s2 = expr.series(ep,0);
cout << s2.normal() << endl;
return 0;
}