示例#1
0
 @Override
 public IExpr evaluate(final IAST ast) {
   Validate.checkRange(ast, 2, 3);
   IExpr arg = F.evalExpandAll(ast.get(1));
   try {
     if (arg.isTimes() || arg.isPower()) {
       IExpr[] parts = Apart.getFractionalParts(arg);
       if (parts != null) {
         if (parts[0].isPlus() && parts[1].isPlus()) {
           IAST[] numParts = ((IAST) parts[0]).split(new PolynomialPredicate());
           IAST[] denParts = ((IAST) parts[1]).split(new PolynomialPredicate());
           IExpr denParts0 = F.eval(denParts[0]);
           if (!denParts0.equals(F.C1)) {
             IExpr[] result = Cancel.cancelGCD(numParts[0], denParts0);
             if (result != null) {
               return F.Times(
                   result[0], numParts[1], F.Power(F.Times(result[1], denParts[1]), F.CN1));
             }
           }
         }
       }
     }
   } catch (JASConversionException jce) {
     if (Config.DEBUG) {
       jce.printStackTrace();
     }
   }
   return arg;
 }
示例#2
0
    public boolean apply(IExpr expr) {
      if (expr.isRational()) {
        return true;
      }
      if (expr.isSymbol()) {
        return true;
      }
      if (expr.isTimes() || expr.isPlus()) {
        IAST ast = (IAST) expr;
        for (int i = 1; i < ast.size(); i++) {
          if (!apply(ast.get(i))) {
            return false;
          }
        }
        return true;
      }
      if (expr.isPower() && ((IAST) expr).get(1).isSymbol() && ((IAST) expr).get(2).isInteger()) {
        try {
          int in = ((IInteger) ((IAST) expr).get(2)).toInt();
          if (in > 0) {
            return true;
          }
        } catch (ArithmeticException ae) {

        }
        return false;
      }
      return false;
    }