package jscl.math.operator.product; import jscl.math.Generic; import jscl.math.Matrix; import jscl.math.Variable; import jscl.math.operator.Operator; import jscl.math.operator.VectorOperator; import jscl.mathml.MathML; import javax.annotation.Nonnull; public class MatrixProduct extends VectorOperator { public static final String NAME = "matrix"; public MatrixProduct(Generic matrix1, Generic matrix2) { super(NAME, new Generic[]{matrix1, matrix2}); } private MatrixProduct(Generic parameter[]) { super(NAME, parameter); } @Override public int getMinParameters() { return 2; } public Generic selfExpand() { if (Matrix.isMatrixProduct(parameters[0], parameters[1])) { return parameters[0].multiply(parameters[1]); } return expressionValue(); } public String toJava() { final StringBuilder result = new StringBuilder(); result.append(parameters[0].toJava()); result.append(".multiply("); result.append(parameters[1].toJava()); result.append(")"); return result.toString(); } @Nonnull @Override public Operator newInstance(@Nonnull Generic[] parameters) { return new MatrixProduct(parameters); } protected void bodyToMathML(MathML element) { parameters[0].toMathML(element, null); parameters[1].toMathML(element, null); } @Nonnull public Variable newInstance() { return new MatrixProduct(null, null); } }