package mikera.vectorz.ops; import java.util.Arrays; import mikera.arrayz.INDArray; import mikera.vectorz.AVector; import mikera.vectorz.Op; public final class Constant extends ALinearOp { public final double value; public static final Constant ZERO=new Constant(0.0); public static final Constant HALF=new Constant(0.5); public static final Constant ONE=new Constant(1.0); public static final Constant TWO=new Constant(2.0); private Constant(double value) { this.value=value; } public static final Constant create(double constant) { if (constant==0) return ZERO; return new Constant(constant); } @Override public double apply(double x) { return value; } @Override public double applyInverse(double x) { return Double.NaN; } @Override public void applyTo(INDArray v) { v.fill(value); } @Override public void applyTo(AVector v) { v.fill(value); } @Override public void applyTo(double[] data) { Arrays.fill(data, value); } @Override public void applyTo(double[] data, int start,int length) { Arrays.fill(data,start,start+length,value); } @Override public double getFactor() { return 0.0; } @Override public double getConstant() { return value; } @Override public double minValue() { return value; } @Override public double maxValue() { return value; } @Override public double averageValue() { return value; } @Override public double derivative(double x) { return 0.0; } @Override public double derivativeForOutput(double y) { return 0.0; } @Override public Op getDerivativeOp() { return Constant.ZERO; } public Op compose(Op op) { return this; } public Op product(Op op) { if (value==0) return Constant.ZERO; return Linear.create(value, 0.0).compose(op); } }