113        for(
auto ii : 
Internal) InExternal.append(ii);
 
  114        for(
auto ii : 
External) InExternal.append(ii);
 
  118                for(
auto ii : InExternal) 
ISP.append(it*ii);
 
  124        if(
ISP.nops() > pdim) {
 
  125            cout << 
"ISP = " << 
ISP << endl;
 
  126            cout << 
"Propagator = " << 
Propagator << endl;
 
  127            throw Error(
"Direct::Export: #(ISP) > #(Propagator).");
 
  132        for(
auto item : 
ISP) {
 
  134            Symbol si(
"P"+to_string(_pic));
 
  136            sp2s.append(
w*item==
w*si);
 
  137            sp2s.append(item==si);
 
  138            s2sp.append(si==item);
 
  142        for(
int i=0; i<
ISP.nops(); i++) { 
 
  146            if(eq.has(iWF(
w))) 
throw Error(
"Direct::Export, iWF used in eq.");
 
  147            leqns.append(eq == iWF(i));
 
  149        auto s2p = lsolve(leqns, ss);
 
  150        if(s2p.nops() != 
ISP.nops()) 
throw Error(
"Direct::Export: lsolve failed.");
 
  154            for(
auto p2 : InExternal)
 
  155            DSP.append(lst{p1,p2});
 
  160        for(
int i=0; i<pdim; i++) nsa.append(
a(i));
 
  167            for(
int i=0; i<pdim; i++) {
 
  169                ns[i] = nsa.op(i) + 1;
 
  170                auto dp = Propagator.op(i).subs(ilp==ss).diff(ss).subs(ss==ilp);
 
  171                ibp -= (
a(i)+Shift[i]) * F(ns) * dp;
 
  176            ibp = ibp.subs(sp2s);
 
  177            ibp = ibp.subs(Replacement);
 
  181            for(
int i=0; i<pdim; i++) {
 
  182                auto ci = ibp.coeff(iWF(i), 1);
 
  183                ci = MapFunction([i](
const ex &e, MapFunction &self)->ex {
 
  184                    if(!e.has(F(
w))) 
return e;
 
  185                    else if(e.match(F(
w))) {
 
  186                        lst tmp = ex_to<lst>(e.op(0));
 
  187                        tmp[i] = tmp.op(i)-1;
 
  189                    } 
else return e.map(self);
 
  193            res += ibp.subs(lst{iWF(
w)==0});
 
  194            auto cilp = iep.coeff(ilp);
 
  195            if(!is_zero(cilp)) res += 
d*cilp*F(nsa);
 
  200        for(
auto lpi : Internal) {
 
  203            for(
int i=0; i<pdim; i++) ns0.append(1);
 
  204            for(
int i=0; i<pdim; i++) {
 
  205                if(Propagator.op(i).has(lpi)) ns0[i] = -1;
 
  206                else ns_vec.push_back(i);
 
  208            for(
int n=0; n<std::pow(2,ns_vec.size()); n++) {
 
  211                for(
int j=0; j<ns_vec.size(); j++) {
 
  212                    if((cn%2)==1) ns1[ns_vec[j]] = -1;
 
  223            for(
int i=0; i<pdim; i++) ns0.append(1);
 
  224            size_t tot = std::pow(2LL,pdim);
 
  225            for(
size_t n=0; n<tot; n++) {
 
  229                for(
int j=0; j<pdim; j++) {
 
  230                    if((cn%2)==1) { ns1[j] = -1; sector[j] = 0; }
 
  238                int pdim = Propagator.nops();
 
  239                for(
int i=0; i<pdim; i++) ws.append(wild(i));
 
  240                Rules.append(F(ProblemNumber, ws)==0);
 
  248cout << ibps_o << endl;
 
  250        for(
auto ibp : ibps_o) {
 
  251            for(
int s=-3; s<=3; s++) {
 
  252                ibps.append(ibp.subs(
a(
w)==
a(
w)+s));
 
  256        size_t ltot = std::pow(3L,pdim); 
 
  263            for(
int i=0; i<pdim; i++) {
 
  264                auto im = (cli % 3)-1;
 
  265                if(im==0) cibps = ex_to<lst>(
subs(cibps,
a(i)==0));
 
  271            map<int,exvector> sum_fs;
 
  274            find(cibps,F(
w),fset);
 
  276            for(
auto fi : fset) {
 
  278                auto ns = fi.op(0).subs(
a(
w)==0);
 
  279                for(
int i=0; i<pdim; i++) {
 
  281                    if(csec[i]==-1) sum -= 
ex2int(ni);
 
  282                    else if(csec[i]==1) sum += 
ex2int(ni);
 
  283                    else sum += abs(
ex2int(ni));
 
  285                sum_fs[sum].push_back(fi);
 
  289            for(
auto kv : sum_fs) sum_tot.append(lst{kv.first, kv.second.size()});
 
  292            matrix mat(cibps.nops(), fset.size());
 
  295            for(
auto st : sum_tot) {
 
  296                auto fs = sum_fs[
ex2int(st.op(0))];
 
  298                for(
int cc=0; cc<fs.size(); cc++) {
 
  299                    fvec.push_back(fs[cc]);
 
  301                    for(
auto ibp : cibps) {
 
  302                        mat(row,ccol+cc) = ibp.coeff(fs[cc]);
 
  309            auto mr = RowReduce(mat);
 
  311            for(
int r=0; r<mat.rows(); r++) {
 
  313                for(
auto ti : sum_tot) {
 
  314                    int ct = 
ex2int(ti.op(1));
 
  315                    for(
int k=0; k<ct; k++) {
 
  317                        if(mr(r,c).is_zero()) 
continue;
 
  318                        else if(c1==-1) c1=c;
 
  323                        for(
int ci=c1+1; ci<mat.cols(); ci++) sol -= mr(r,ci)/mr(r,c1)*fvec[ci];
 
  324                        auto ns0 = fvec[c1].op(0).subs(
a(
w)==0);
 
  326                        for(
int i=0; i<ns0.nops(); i++) {
 
  327                            if(csec[i]==0) 
continue;
 
  328                            if(!ns0.op(i).is_zero()) aSH[
a(i)]=
a(i)-ns0.op(i);
 
  334                        vector<vector<int>> fns;
 
  336                            fi = fi.subs(
a(
w)==0);
 
  338                            for(
auto it : fi.op(0)) ns.push_back(0-
ex2int(it));
 
  342                        for(
int i=0; i<csec.size(); i++) {
 
  346                                    if(ns[i]<min) min = ns[i];
 
  348                                cond.cs.push_back(make_pair(-1,min));
 
  349                            } 
else if(csec[i]==1) {
 
  352                                    if(ns[i]>max) max = ns[i];
 
  354                                cond.cs.push_back(make_pair(1,max));
 
  356                                cond.cs.push_back(make_pair(0,
ex2int(ns0.op(i))));
 
  360                        res.append(lst{cond.cs2ex(),sol});
 
  370        for(
auto its : ret) {
 
  371        for(
auto item : its) {
 
  373            cond.ex2cs(item.op(0));
 
  374            ConSolVec.push_back(make_pair(cond,item.op(1)));