Skip to content

Commit

Permalink
Vector subtraction
Browse files Browse the repository at this point in the history
  • Loading branch information
markspanbroek committed Jan 10, 2019
1 parent d86aaf9 commit dbf642b
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,18 @@ public DRes<Matrix<DRes<SReal>>> sub(DRes<Matrix<DRes<SReal>>> a, Matrix<BigDeci
});
}

@Override
public DRes<Vector<DRes<SReal>>> subVectors(DRes<Vector<DRes<SReal>>> a, DRes<Vector<DRes<SReal>>> b) {
return builder.par(par -> {
Vector<DRes<SReal>> result = new Vector<>();
for (int i=0; i<a.out().size(); i++) {
DRes<SReal> element = par.realNumeric().sub(a.out().get(i), b.out().get(i));
result.add(element);
}
return () -> result;
});
}

@Override
public DRes<Matrix<DRes<SReal>>> mult(DRes<Matrix<DRes<SReal>>> a, Matrix<BigDecimal> b) {
return builder.seq(seq -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,12 @@ public interface RealLinearAlgebra extends ComputationDirectory {
* @return A deferred result computing a-b
*/
DRes<Matrix<DRes<SReal>>> sub(DRes<Matrix<DRes<SReal>>> a, Matrix<BigDecimal> n);


/**
* Subtracts two secret vectors.
*/
DRes<Vector<DRes<SReal>>> subVectors(DRes<Vector<DRes<SReal>>> a, DRes<Vector<DRes<SReal>>> b);

/**
* Multiplies two secret values and returns the result.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,20 @@ public void testMatrixSubtraction() {
}
}

@Test
public void testVectorSubtraction() {
Vector<BigDecimal> a = new Vector<>(asList(valueOf(1.0), valueOf(2.0)));
Vector<BigDecimal> b = new Vector<>(asList(valueOf(0.3), valueOf(0.4)));
List<BigDecimal> output = run(root-> {
DRes<Vector<DRes<SReal>>> closedA = root.realLinAlg().input(a, 1);
DRes<Vector<DRes<SReal>>> closedB = root.realLinAlg().input(b, 1);
DRes<Vector<DRes<SReal>>> closedResult = root.realLinAlg().subVectors(closedA, closedB);
DRes<Vector<DRes<BigDecimal>>> opened = root.realLinAlg().openVector(closedResult);
return () -> unwrap(opened);
});
assertEqual(output, asList(valueOf(0.7), valueOf(1.6)), 15);
}

@Test
public void testMatrixScale() {
// define input and output
Expand Down

0 comments on commit dbf642b

Please sign in to comment.