package org.matheclipse.core.reflection.system;
import java.util.ArrayList;
import java.util.List;
import org.matheclipse.core.basic.Config;
import org.matheclipse.core.convert.JASConvert;
import org.matheclipse.core.eval.exception.JASConversionException;
import org.matheclipse.core.eval.interfaces.AbstractFunctionEvaluator;
import org.matheclipse.core.expression.F;
import org.matheclipse.core.interfaces.IAST;
import org.matheclipse.core.interfaces.IExpr;
import org.matheclipse.core.interfaces.ISymbol;
import edu.jas.arith.BigRational;
import edu.jas.gbufd.GroebnerBasePartial;
import edu.jas.poly.GenPolynomial;
import edu.jas.poly.OptimizedPolynomialList;
public class GroebnerBasis extends AbstractFunctionEvaluator {
public GroebnerBasis() {
}
@Override
public IExpr evaluate(final IAST lst) {
if (lst.size() >= 3) {
try {
if (lst.arg1().isVector() < 0) {
return null;
}
if (lst.get(2).isVector() < 0) {
return null;
}
if (lst.size() == 3) {
IAST vars = (IAST) lst.get(2);
if (vars.size() <= 1) {
return null;
}
List varList = new ArrayList(vars.size() - 1);
String[] pvars = new String[vars.size() - 1];
for (int i = 1; i < vars.size(); i++) {
if (!vars.get(i).isSymbol()) {
return null;
}
varList.add((ISymbol) vars.get(i));
pvars[i - 1] = ((ISymbol) vars.get(i)).toString();
}
GroebnerBasePartial gbp = new GroebnerBasePartial();
IAST polys = (IAST) lst.arg1();
List> polyList = new ArrayList>(polys.size() - 1);
JASConvert jas = new JASConvert(varList, BigRational.ZERO);
for (int i = 1; i < polys.size(); i++) {
IExpr expr = F.evalExpandAll(polys.get(i));
GenPolynomial poly = jas.expr2JAS(expr);
polyList.add(poly);
}
OptimizedPolynomialList opl = gbp.partialGB(polyList, pvars);
// System.out.println(opl);
IAST resultList = F.List();
for (GenPolynomial p : opl.list) {
// System.out.println(p);
resultList.add(jas.poly2Expr(p, null));
}
return resultList;
}
} catch (JASConversionException e) {
if (Config.SHOW_STACKTRACE) {
e.printStackTrace();
}
}
}
return null;
}
}
Ads help maintain this website.