package jscl.math.operator; import jscl.math.*; import javax.annotation.Nonnull; public abstract class Operator extends AbstractFunction { protected Operator(String name, Generic parameters[]) { super(name, parameters); } @Nonnull protected static Variable[] toVariables(@Nonnull Generic vector) throws NotVariableException { return toVariables((JsclVector) vector); } @Nonnull protected static Variable[] toVariables(@Nonnull JsclVector vector) throws NotVariableException { final Generic element[] = vector.elements(); final Variable variable[] = new Variable[element.length]; for (int i = 0; i < element.length; i++) { variable[i] = element[i].variableValue(); } return variable; } public Generic antiDerivative(Variable variable) throws NotIntegrableException { throw new NotIntegrableException(this); } @Nonnull public Generic derivative(Variable variable) { if (isIdentity(variable)) { return JsclInteger.valueOf(1); } else { return JsclInteger.valueOf(0); } } @Override public Generic selfElementary() { return expressionValue(); } @Override public Generic selfSimplify() { return expressionValue(); } @Override public Generic selfNumeric() { return numeric(); } public Generic numeric() { throw new ArithmeticException(); } public boolean isConstant(Variable variable) { return !isIdentity(variable); } @Nonnull public abstract Operator newInstance(@Nonnull Generic[] parameters); }