@Test public void doesNotRedoWorkAlreadyDoneOnLazyEval() { AtomicInteger n = new AtomicInteger(0); DoubleVertex start = new GaussianVertex(0, 1); DoubleVertex blackBox = new BlackBoxVertex(start, n); DoubleVertex pluck0 = blackBox.lambda(blackBox.getShape(), bb -> DoubleTensor.scalar(bb.getValue(0)), null, null); DoubleVertex pluck1 = blackBox.lambda(blackBox.getShape(), bb -> DoubleTensor.scalar(bb.getValue(1)), null, null); DoubleVertex pluck2 = blackBox.lambda(blackBox.getShape(), bb -> DoubleTensor.scalar(bb.getValue(2)), null, null); pluck0.lazyEval(); pluck1.lazyEval(); pluck2.lazyEval(); assertEquals(1, n.get()); assertEquals(0, pluck0.getValue(0), 0.0); assertEquals(1, pluck1.getValue(0), 0.0); assertEquals(2, pluck2.getValue(0), 0.0); } }
@Test public void canTakeInverseCorrectly() { DoubleTensor matrix = DoubleTensor.arange(1, 5).reshape(2, 2); DoubleVertex inputVertex = new ConstantDoubleVertex(matrix); DoubleVertex inverseVertex = inputVertex.matrixInverse(); inverseVertex.lazyEval(); DoubleTensor expected = DoubleTensor.create(new double[]{-2, 1, 1.5, -0.5}, 2, 2); assertEquals(expected, inverseVertex.getValue()); }
@Test public void scalarTensorsInvertCorrectly() { DoubleTensor oneByOneMatrix = new ScalarDoubleTensor(2.0).reshape(1, 1); DoubleVertex input = new ConstantDoubleVertex(oneByOneMatrix); DoubleVertex inverse = input.matrixInverse(); inverse.lazyEval(); assertEquals(0.5, inverse.getValue().scalar(), 1e-6); }
public void doubleExample() { //%%SNIPPET_START%% DescribeVertex DoubleVertex A = new GaussianVertex(0, 1); DoubleVertex B = new GaussianVertex(0, 1); DoubleVertex C = A.plus(B); //%%SNIPPET_END%% DescribeVertex //%%SNIPPET_START%% DescribePropagate A.setAndCascade(1.234); //%%SNIPPET_END%% DescribePropagate //%%SNIPPET_START%% DescribeLazy A.setValue(1.234); B.setValue(4.321); C.lazyEval(); //%%SNIPPET_END%% DescribeLazy //%%SNIPPET_START%% DescribeCascade A.setValue(1.234); B.setValue(4.321); VertexValuePropagation.cascadeUpdate(A, B); //%%SNIPPET_END%% DescribeCascade }