You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@systemds.apache.org by mb...@apache.org on 2020/10/10 12:40:46 UTC
[systemds] branch master updated: [MINOR] Fix various warnings
(UINT handling, generics, static)
This is an automated email from the ASF dual-hosted git repository.
mboehm7 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/systemds.git
The following commit(s) were added to refs/heads/master by this push:
new ab08fc5 [MINOR] Fix various warnings (UINT handling, generics, static)
ab08fc5 is described below
commit ab08fc5f45b74f4dbd57136ec2c735b0d37cd7a6
Author: Matthias Boehm <mb...@gmail.com>
AuthorDate: Sat Oct 10 14:40:20 2020 +0200
[MINOR] Fix various warnings (UINT handling, generics, static)
---
src/main/java/org/apache/sysds/hops/LiteralOp.java | 1 +
.../sysds/parser/BuiltinFunctionExpression.java | 1 +
.../apache/sysds/runtime/data/LibTensorAgg.java | 3 +-
.../org/apache/sysds/runtime/data/TensorBlock.java | 2 +
.../apache/sysds/runtime/util/DataConverter.java | 1 +
.../functions/privacy/PrivacyPropagatorTest.java | 367 ++++++++++-----------
6 files changed, 190 insertions(+), 185 deletions(-)
diff --git a/src/main/java/org/apache/sysds/hops/LiteralOp.java b/src/main/java/org/apache/sysds/hops/LiteralOp.java
index 31930e3..68d61e7 100644
--- a/src/main/java/org/apache/sysds/hops/LiteralOp.java
+++ b/src/main/java/org/apache/sysds/hops/LiteralOp.java
@@ -246,6 +246,7 @@ public class LiteralOp extends Hop
switch( getValueType() ) {
case BOOLEAN:
return String.valueOf(value_boolean);
+ case UINT8:
case INT32:
case INT64:
return String.valueOf(value_long);
diff --git a/src/main/java/org/apache/sysds/parser/BuiltinFunctionExpression.java b/src/main/java/org/apache/sysds/parser/BuiltinFunctionExpression.java
index 088e740..7181a3e 100644
--- a/src/main/java/org/apache/sysds/parser/BuiltinFunctionExpression.java
+++ b/src/main/java/org/apache/sysds/parser/BuiltinFunctionExpression.java
@@ -608,6 +608,7 @@ public class BuiltinFunctionExpression extends DataIdentifier
break;
case INT64:
case INT32:
+ case UINT8:
case BOOLEAN:
output.setValueType(ValueType.INT64);
break;
diff --git a/src/main/java/org/apache/sysds/runtime/data/LibTensorAgg.java b/src/main/java/org/apache/sysds/runtime/data/LibTensorAgg.java
index 8201f1a..b2b19da 100644
--- a/src/main/java/org/apache/sysds/runtime/data/LibTensorAgg.java
+++ b/src/main/java/org/apache/sysds/runtime/data/LibTensorAgg.java
@@ -245,7 +245,8 @@ public class LibTensorAgg {
break;
}
case INT64:
- case INT32: {
+ case INT32:
+ case UINT8: {
DenseBlock a = in.getDenseBlock();
long sum = 0;
int[] ix = new int[a.numDims()];
diff --git a/src/main/java/org/apache/sysds/runtime/data/TensorBlock.java b/src/main/java/org/apache/sysds/runtime/data/TensorBlock.java
index ea8cb53..030209d 100644
--- a/src/main/java/org/apache/sysds/runtime/data/TensorBlock.java
+++ b/src/main/java/org/apache/sysds/runtime/data/TensorBlock.java
@@ -590,6 +590,8 @@ public class TensorBlock implements CacheBlock, Externalizable {
long size = 8 + 1;
if (!bt.isSparse()) {
switch (bt._vt) {
+ case UINT8:
+ size += 1 * getLength(); break;
case INT32:
case FP32:
size += 4 * getLength(); break;
diff --git a/src/main/java/org/apache/sysds/runtime/util/DataConverter.java b/src/main/java/org/apache/sysds/runtime/util/DataConverter.java
index da2578a..9a6e761 100644
--- a/src/main/java/org/apache/sysds/runtime/util/DataConverter.java
+++ b/src/main/java/org/apache/sysds/runtime/util/DataConverter.java
@@ -1137,6 +1137,7 @@ public class DataConverter
value = 0.0;
sb.append(dfFormat(df, value));
break;
+ case UINT8:
case INT32:
case INT64:
sb.append(tb.get(ix));
diff --git a/src/test/java/org/apache/sysds/test/functions/privacy/PrivacyPropagatorTest.java b/src/test/java/org/apache/sysds/test/functions/privacy/PrivacyPropagatorTest.java
index 9fbf54c..0092247 100644
--- a/src/test/java/org/apache/sysds/test/functions/privacy/PrivacyPropagatorTest.java
+++ b/src/test/java/org/apache/sysds/test/functions/privacy/PrivacyPropagatorTest.java
@@ -123,28 +123,6 @@ public class PrivacyPropagatorTest extends AutomatedTestBase {
mmGeneralNoFineGrainedGeneralized(constraint1, constraint2, propagator);
}
-
- private void mmGeneralNoFineGrainedGeneralized(PrivacyConstraint constraint1, PrivacyConstraint constraint2, MatrixMultiplicationPropagator propagator){
- MatrixBlock inputMatrix1 = new MatrixBlock(10,20,15);
- MatrixBlock inputMatrix2 = new MatrixBlock(20,30,12);
- propagator.setFields(inputMatrix1, constraint1, inputMatrix2, constraint2);
- PrivacyConstraint mergedConstraint = propagator.propagate();
- assertTrue("Privacy should be set to Private", mergedConstraint.hasPrivateElements());
- assertFalse("Fine grained constraint should not be propagated", mergedConstraint.hasFineGrainedConstraints());
- }
-
- private void mmPropagationPrivateGeneralized(PrivacyLevel fineGrainedPrivacyLevel, MatrixMultiplicationPropagator propagator){
- MatrixBlock inputMatrix1 = new MatrixBlock(10,20,15);
- MatrixBlock inputMatrix2 = new MatrixBlock(20,30,12);
- PrivacyConstraint constraint1 = new PrivacyConstraint(PrivacyLevel.Private);
- constraint1.getFineGrainedPrivacy().put(new DataRange(new long[]{3,8},new long[]{2,5}), fineGrainedPrivacyLevel);
- PrivacyConstraint constraint2 = new PrivacyConstraint();
- propagator.setFields(inputMatrix1, constraint1, inputMatrix2, constraint2);
- PrivacyConstraint mergedConstraint = propagator.propagate();
- assertTrue("Privacy should be set to Private", mergedConstraint.hasPrivateElements());
- assertFalse("Fine grained constraint should not be propagated", mergedConstraint.hasFineGrainedConstraints());
- }
-
@Test
public void matrixMultiplicationPropagationTestPrivateGeneral(){
MatrixMultiplicationPropagator propagator = new MatrixMultiplicationPropagatorPrivateFirst();
@@ -180,33 +158,7 @@ public class PrivacyPropagatorTest extends AutomatedTestBase {
MatrixMultiplicationPropagator propagator = new MatrixMultiplicationPropagatorPrivateFirstOptimized();
mmPropagationPrivateGeneralized(PrivacyLevel.PrivateAggregation, propagator);
}
-
- private void mmPropagationTestPrivateFineGrainedGeneralized(MatrixMultiplicationPropagator propagator){
- MatrixBlock inputMatrix1 = new MatrixBlock(4,3,2);
- MatrixBlock inputMatrix2 = new MatrixBlock(3,3,4);
- PrivacyConstraint constraint1 = new PrivacyConstraint();
- constraint1.getFineGrainedPrivacy().put(new DataRange(new long[]{1,0},new long[]{1,1}), PrivacyLevel.Private);
- PrivacyConstraint constraint2 = new PrivacyConstraint();
- propagator.setFields(inputMatrix1, constraint1, inputMatrix2, constraint2);
- PrivacyConstraint mergedConstraint = propagator.propagate();
- assertTrue("Privacy should be set to Private", mergedConstraint.hasPrivateElements());
- assertTrue("Fine grained constraint should not be propagated", mergedConstraint.hasFineGrainedConstraints());
- assertTrue("Merged constraint should not contain privacy level PrivateAggregation", mergedConstraint.getFineGrainedPrivacy().getDataRangesOfPrivacyLevel(PrivacyLevel.PrivateAggregation).length == 0);
- Map<DataRange, PrivacyLevel> outputElement1 = mergedConstraint.getFineGrainedPrivacy().getPrivacyLevelOfElement(new long[]{1,0});
- Map<DataRange, PrivacyLevel> outputElement2 = mergedConstraint.getFineGrainedPrivacy().getPrivacyLevelOfElement(new long[]{1,1});
- Map<DataRange, PrivacyLevel> outputElement3 = mergedConstraint.getFineGrainedPrivacy().getPrivacyLevelOfElement(new long[]{1,2});
- assertEquals(1, outputElement1.size());
- assertEquals(1, outputElement2.size());
- assertEquals(1, outputElement3.size());
- assertTrue("Privacy level of element 1 is Private", outputElement1.containsValue(PrivacyLevel.Private));
- assertTrue("Privacy level of element 2 is Private", outputElement2.containsValue(PrivacyLevel.Private));
- assertTrue("Privacy level of element 3 is Private", outputElement3.containsValue(PrivacyLevel.Private));
- Map<DataRange, PrivacyLevel> expectedEmpty = mergedConstraint.getFineGrainedPrivacy().getPrivacyLevel(new DataRange(new long[]{2,0}, new long[]{3,2}));
- assertTrue("Any other index has no privacy constraint", expectedEmpty.isEmpty() ||
- (!expectedEmpty.containsValue(PrivacyLevel.Private)
- && !expectedEmpty.containsValue(PrivacyLevel.PrivateAggregation)));
- }
-
+
@Test
public void matrixMultiplicationPropagationTestPrivateFineGrained(){
MatrixMultiplicationPropagator propagator = new MatrixMultiplicationPropagatorPrivateFirst();
@@ -225,25 +177,6 @@ public class PrivacyPropagatorTest extends AutomatedTestBase {
mmPropagationTestPrivateFineGrainedGeneralized(propagator);
}
- private void mmPropagationTestPrivateFineGrained2Generalized(MatrixMultiplicationPropagator propagator){
- MatrixBlock inputMatrix1 = new MatrixBlock(4,3,2);
- MatrixBlock inputMatrix2 = new MatrixBlock(3,3,4);
- PrivacyConstraint constraint1 = new PrivacyConstraint();
- PrivacyConstraint constraint2 = new PrivacyConstraint();
- constraint2.getFineGrainedPrivacy().put(new DataRange(new long[]{1,0},new long[]{1,1}), PrivacyLevel.Private);
- propagator.setFields(inputMatrix1, constraint1, inputMatrix2, constraint2);
- PrivacyConstraint mergedConstraint = propagator.propagate();
- assertTrue("Privacy should be set to Private", mergedConstraint.hasPrivateElements());
- assertTrue("Fine grained constraint should not be propagated", mergedConstraint.hasFineGrainedConstraints());
- assertTrue("Merged constraint should not contain privacy level PrivateAggregation", mergedConstraint.getFineGrainedPrivacy().getDataRangesOfPrivacyLevel(PrivacyLevel.PrivateAggregation).length == 0);
- Map<DataRange, PrivacyLevel> outputRange = mergedConstraint.getFineGrainedPrivacy().getPrivacyLevel(new DataRange(new long[]{0,0},new long[]{3,1}));
- assertTrue("Privacy level is Private", outputRange.containsValue(PrivacyLevel.Private));
- Map<DataRange, PrivacyLevel> expectedEmpty = mergedConstraint.getFineGrainedPrivacy().getPrivacyLevel(new DataRange(new long[]{0,2}, new long[]{3,2}));
- assertTrue("Any other index has no privacy constraint", expectedEmpty.isEmpty() ||
- (!expectedEmpty.containsValue(PrivacyLevel.Private)
- && !expectedEmpty.containsValue(PrivacyLevel.PrivateAggregation)));
- }
-
@Test
public void matrixMultiplicationPropagationTestPrivateFineGrained2(){
MatrixMultiplicationPropagator propagator = new MatrixMultiplicationPropagatorPrivateFirst();
@@ -262,38 +195,6 @@ public class PrivacyPropagatorTest extends AutomatedTestBase {
mmPropagationTestPrivateFineGrained2Generalized(propagator);
}
- private void mmPropagationTestPrivatePrivateAggregationFineGrainedGeneralized(MatrixMultiplicationPropagator propagator){
- //Build
- MatrixBlock inputMatrix1 = new MatrixBlock(4,3,2);
- MatrixBlock inputMatrix2 = new MatrixBlock(3,3,4);
- PrivacyConstraint constraint1 = new PrivacyConstraint();
- constraint1.getFineGrainedPrivacy().put(new DataRange(new long[]{1,0},new long[]{1,1}), PrivacyLevel.Private);
- PrivacyConstraint constraint2 = new PrivacyConstraint();
- constraint2.getFineGrainedPrivacy().put(new DataRange(new long[]{1,0},new long[]{1,1}), PrivacyLevel.PrivateAggregation);
-
- //Execute
- propagator.setFields(inputMatrix1, constraint1, inputMatrix2, constraint2);
- PrivacyConstraint mergedConstraint = propagator.propagate();
-
- //Assert
- assertTrue("Privacy should be set to Private", mergedConstraint.hasPrivateElements());
- assertTrue("Fine grained constraint should not be propagated", mergedConstraint.hasFineGrainedConstraints());
- assertTrue("Merged constraint should not contain privacy level PrivateAggregation", mergedConstraint.getFineGrainedPrivacy().getDataRangesOfPrivacyLevel(PrivacyLevel.PrivateAggregation).length == 0);
- Map<DataRange, PrivacyLevel> outputElement1 = mergedConstraint.getFineGrainedPrivacy().getPrivacyLevelOfElement(new long[]{1,0});
- Map<DataRange, PrivacyLevel> outputElement2 = mergedConstraint.getFineGrainedPrivacy().getPrivacyLevelOfElement(new long[]{1,1});
- Map<DataRange, PrivacyLevel> outputElement3 = mergedConstraint.getFineGrainedPrivacy().getPrivacyLevelOfElement(new long[]{1,2});
- assertEquals(1, outputElement1.size());
- assertEquals(1, outputElement2.size());
- assertEquals(1, outputElement3.size());
- assertTrue("Privacy level of element 1 is Private", outputElement1.containsValue(PrivacyLevel.Private));
- assertTrue("Privacy level of element 2 is Private", outputElement2.containsValue(PrivacyLevel.Private));
- assertTrue("Privacy level of element 3 is Private", outputElement3.containsValue(PrivacyLevel.Private));
- Map<DataRange, PrivacyLevel> expectedEmpty = mergedConstraint.getFineGrainedPrivacy().getPrivacyLevel(new DataRange(new long[]{2,0}, new long[]{3,2}));
- assertTrue("Any other index has no privacy constraint", expectedEmpty.isEmpty() ||
- (!expectedEmpty.containsValue(PrivacyLevel.Private)
- && !expectedEmpty.containsValue(PrivacyLevel.PrivateAggregation)));
- }
-
@Test
public void matrixMultiplicationPropagationTestPrivatePrivateAggregationFineGrained(){
MatrixMultiplicationPropagator propagator = new MatrixMultiplicationPropagatorPrivateFirst();
@@ -337,21 +238,6 @@ public class PrivacyPropagatorTest extends AutomatedTestBase {
assertEquals("All values except one should be OperatorType.Aggregate", expected, actualArray[nonAggRow]);
}
- private void getOperatorTypesRowMultipleNonAggTestGeneralized(MatrixMultiplicationPropagator propagator){
- int rows = 4;
- int cols = 2;
- int nonAggRow = 2;
- MatrixBlock m1 = getMatrixBlock(rows, cols);
- // Make two rows NNZ=1
- m1.getDenseBlock().set(nonAggRow,0,0);
- m1.getDenseBlock().set(nonAggRow+1,0,0);
- propagator.setFields(m1, null, null, null);
- OperatorType[] actualArray = propagator.getOperatorTypesRow();
- OperatorType expected = OperatorType.NonAggregate;
- assertEquals("All values except two should be OperatorType.Aggregate", expected, actualArray[nonAggRow]);
- assertEquals("All values except two should be OperatorType.Aggregate", expected, actualArray[nonAggRow+1]);
- }
-
@Test
public void getOperatorTypesRowMultipleNonAggTest(){
MatrixMultiplicationPropagator propagator = new MatrixMultiplicationPropagatorPrivateFirst();
@@ -384,37 +270,12 @@ public class PrivacyPropagatorTest extends AutomatedTestBase {
assertEquals("All values except one should be OperatorType.Aggregate", expected, actualArray[nonAggCol]);
}
- private void getOperatorTypesColMultipleNonAggTestGeneralized(MatrixMultiplicationPropagator propagator){
- int rows = 2;
- int cols = 3;
- int nonAggCol = 1;
- MatrixBlock m2 = getMatrixBlock(rows, cols);
- // Make two cols NNZ=1
- m2.getDenseBlock().set(0,nonAggCol,0);
- m2.getDenseBlock().set(0,nonAggCol+1,0);
- propagator.setFields(null, null, m2, null);
- OperatorType[] actualArray = propagator.getOperatorTypesCol();
- OperatorType expected = OperatorType.NonAggregate;
- assertEquals("All values except two should be OperatorType.Aggregate", expected, actualArray[nonAggCol]);
- assertEquals("All values except two should be OperatorType.Aggregate", expected, actualArray[nonAggCol+1]);
- }
-
@Test
public void getOperatorTypesColMultipleNonAggTest(){
MatrixMultiplicationPropagator propagator = new MatrixMultiplicationPropagatorPrivateFirst();
getOperatorTypesColMultipleNonAggTestGeneralized(propagator);
}
- private MatrixBlock getMatrixBlock(int rows, int cols){
- DenseBlock denseM = new DenseBlockLFP64(new int[]{rows,cols});
- for ( int r = 0; r < rows; r++ ){
- for ( int c = 0; c < cols; c++ ){
- denseM.set(r,c,r+c+1);
- }
- }
- return new MatrixBlock(rows,cols,denseM);
- }
-
@Test
public void matrixMultiplicationPropagationTestNonAgg(){
MatrixMultiplicationPropagator propagator = new MatrixMultiplicationPropagatorPrivateFirst();
@@ -451,27 +312,6 @@ public class PrivacyPropagatorTest extends AutomatedTestBase {
NonAggGeneralizedTest(PrivacyLevel.Private, propagator);
}
- private void NonAggGeneralizedTest(PrivacyLevel privacyLevel, MatrixMultiplicationPropagator propagator){
- int nonAggRow = 2;
- MatrixBlock m1 = getMatrixBlock(4,2);
- MatrixBlock m2 = getMatrixBlock(2, 3);
- m1.getDenseBlock().set(nonAggRow,0,0);
- PrivacyConstraint constraint1 = new PrivacyConstraint();
- constraint1.getFineGrainedPrivacy().putRow(nonAggRow,2,privacyLevel);
- PrivacyConstraint constraint2 = new PrivacyConstraint();
- propagator.setFields(m1, constraint1, m2, constraint2);
- PrivacyConstraint mergedPrivacyConstraint = propagator.propagate();
- Map<DataRange, PrivacyLevel> constraints = mergedPrivacyConstraint.getFineGrainedPrivacy().getPrivacyLevel(new DataRange(new long[]{nonAggRow,0}, new long[]{nonAggRow,1}));
- assertTrue("Output constraints should contain the privacy level " + privacyLevel.toString(),
- constraints.containsValue(privacyLevel));
- if ( privacyLevel == PrivacyLevel.Private)
- assertFalse("Output constraints should not contain the privacy level PrivateAggregation",
- constraints.containsValue(PrivacyLevel.PrivateAggregation));
- else if ( privacyLevel == PrivacyLevel.PrivateAggregation )
- assertFalse("Output constraints should not contain the privacy level Private",
- constraints.containsValue(PrivacyLevel.Private));
- }
-
@Test
public void matrixMultiplicationPropagationTestNonAgg2(){
MatrixMultiplicationPropagator propagator = new MatrixMultiplicationPropagatorPrivateFirst();
@@ -508,27 +348,6 @@ public class PrivacyPropagatorTest extends AutomatedTestBase {
NonAggGeneralizedColTest(PrivacyLevel.Private, propagator);
}
- private void NonAggGeneralizedColTest(PrivacyLevel privacyLevel, MatrixMultiplicationPropagator propagator){
- int nonAggCol = 2;
- MatrixBlock m1 = getMatrixBlock(4,2);
- MatrixBlock m2 = getMatrixBlock(2, 3);
- m2.getDenseBlock().set(0,nonAggCol,0);
- PrivacyConstraint constraint1 = new PrivacyConstraint();
- PrivacyConstraint constraint2 = new PrivacyConstraint();
- constraint2.getFineGrainedPrivacy().putCol(nonAggCol,4,privacyLevel);
- propagator.setFields(m1, constraint1, m2, constraint2);
- PrivacyConstraint mergedPrivacyConstraint = propagator.propagate();
- Map<DataRange, PrivacyLevel> constraints = mergedPrivacyConstraint.getFineGrainedPrivacy().getPrivacyLevel(new DataRange(new long[]{0,nonAggCol}, new long[]{3,nonAggCol}));
- assertTrue("Output constraints should contain the privacy level " + privacyLevel.toString(),
- constraints.containsValue(privacyLevel));
- if ( privacyLevel == PrivacyLevel.Private)
- assertFalse("Output constraints should not contain the privacy level PrivateAggregation",
- constraints.containsValue(PrivacyLevel.PrivateAggregation));
- else if ( privacyLevel == PrivacyLevel.PrivateAggregation )
- assertFalse("Output constraints should not contain the privacy level Private",
- constraints.containsValue(PrivacyLevel.Private));
- }
-
@Test
public void matrixMultiplicationPropagationTestNonAggRowColNA(){
MatrixMultiplicationPropagator propagator = new MatrixMultiplicationPropagatorPrivateFirst();
@@ -564,8 +383,188 @@ public class PrivacyPropagatorTest extends AutomatedTestBase {
MatrixMultiplicationPropagator propagator = new MatrixMultiplicationPropagatorPrivateFirstOptimized();
NonAggGeneralizedRowColTest(PrivacyLevel.PrivateAggregation, false, propagator);
}
+
+ private static void mmGeneralNoFineGrainedGeneralized(PrivacyConstraint constraint1, PrivacyConstraint constraint2, MatrixMultiplicationPropagator propagator){
+ MatrixBlock inputMatrix1 = new MatrixBlock(10,20,15);
+ MatrixBlock inputMatrix2 = new MatrixBlock(20,30,12);
+ propagator.setFields(inputMatrix1, constraint1, inputMatrix2, constraint2);
+ PrivacyConstraint mergedConstraint = propagator.propagate();
+ assertTrue("Privacy should be set to Private", mergedConstraint.hasPrivateElements());
+ assertFalse("Fine grained constraint should not be propagated", mergedConstraint.hasFineGrainedConstraints());
+ }
+
+ private static void mmPropagationPrivateGeneralized(PrivacyLevel fineGrainedPrivacyLevel, MatrixMultiplicationPropagator propagator){
+ MatrixBlock inputMatrix1 = new MatrixBlock(10,20,15);
+ MatrixBlock inputMatrix2 = new MatrixBlock(20,30,12);
+ PrivacyConstraint constraint1 = new PrivacyConstraint(PrivacyLevel.Private);
+ constraint1.getFineGrainedPrivacy().put(new DataRange(new long[]{3,8},new long[]{2,5}), fineGrainedPrivacyLevel);
+ PrivacyConstraint constraint2 = new PrivacyConstraint();
+ propagator.setFields(inputMatrix1, constraint1, inputMatrix2, constraint2);
+ PrivacyConstraint mergedConstraint = propagator.propagate();
+ assertTrue("Privacy should be set to Private", mergedConstraint.hasPrivateElements());
+ assertFalse("Fine grained constraint should not be propagated", mergedConstraint.hasFineGrainedConstraints());
+ }
- private void NonAggGeneralizedRowColTest(PrivacyLevel privacyLevel, boolean putElement, MatrixMultiplicationPropagator propagator){
+ private static void mmPropagationTestPrivateFineGrainedGeneralized(MatrixMultiplicationPropagator propagator){
+ MatrixBlock inputMatrix1 = new MatrixBlock(4,3,2);
+ MatrixBlock inputMatrix2 = new MatrixBlock(3,3,4);
+ PrivacyConstraint constraint1 = new PrivacyConstraint();
+ constraint1.getFineGrainedPrivacy().put(new DataRange(new long[]{1,0},new long[]{1,1}), PrivacyLevel.Private);
+ PrivacyConstraint constraint2 = new PrivacyConstraint();
+ propagator.setFields(inputMatrix1, constraint1, inputMatrix2, constraint2);
+ PrivacyConstraint mergedConstraint = propagator.propagate();
+ assertTrue("Privacy should be set to Private", mergedConstraint.hasPrivateElements());
+ assertTrue("Fine grained constraint should not be propagated", mergedConstraint.hasFineGrainedConstraints());
+ assertTrue("Merged constraint should not contain privacy level PrivateAggregation", mergedConstraint.getFineGrainedPrivacy().getDataRangesOfPrivacyLevel(PrivacyLevel.PrivateAggregation).length == 0);
+ Map<DataRange, PrivacyLevel> outputElement1 = mergedConstraint.getFineGrainedPrivacy().getPrivacyLevelOfElement(new long[]{1,0});
+ Map<DataRange, PrivacyLevel> outputElement2 = mergedConstraint.getFineGrainedPrivacy().getPrivacyLevelOfElement(new long[]{1,1});
+ Map<DataRange, PrivacyLevel> outputElement3 = mergedConstraint.getFineGrainedPrivacy().getPrivacyLevelOfElement(new long[]{1,2});
+ assertEquals(1, outputElement1.size());
+ assertEquals(1, outputElement2.size());
+ assertEquals(1, outputElement3.size());
+ assertTrue("Privacy level of element 1 is Private", outputElement1.containsValue(PrivacyLevel.Private));
+ assertTrue("Privacy level of element 2 is Private", outputElement2.containsValue(PrivacyLevel.Private));
+ assertTrue("Privacy level of element 3 is Private", outputElement3.containsValue(PrivacyLevel.Private));
+ Map<DataRange, PrivacyLevel> expectedEmpty = mergedConstraint.getFineGrainedPrivacy().getPrivacyLevel(new DataRange(new long[]{2,0}, new long[]{3,2}));
+ assertTrue("Any other index has no privacy constraint", expectedEmpty.isEmpty() ||
+ (!expectedEmpty.containsValue(PrivacyLevel.Private)
+ && !expectedEmpty.containsValue(PrivacyLevel.PrivateAggregation)));
+ }
+
+ private static void mmPropagationTestPrivatePrivateAggregationFineGrainedGeneralized(MatrixMultiplicationPropagator propagator){
+ //Build
+ MatrixBlock inputMatrix1 = new MatrixBlock(4,3,2);
+ MatrixBlock inputMatrix2 = new MatrixBlock(3,3,4);
+ PrivacyConstraint constraint1 = new PrivacyConstraint();
+ constraint1.getFineGrainedPrivacy().put(new DataRange(new long[]{1,0},new long[]{1,1}), PrivacyLevel.Private);
+ PrivacyConstraint constraint2 = new PrivacyConstraint();
+ constraint2.getFineGrainedPrivacy().put(new DataRange(new long[]{1,0},new long[]{1,1}), PrivacyLevel.PrivateAggregation);
+
+ //Execute
+ propagator.setFields(inputMatrix1, constraint1, inputMatrix2, constraint2);
+ PrivacyConstraint mergedConstraint = propagator.propagate();
+
+ //Assert
+ assertTrue("Privacy should be set to Private", mergedConstraint.hasPrivateElements());
+ assertTrue("Fine grained constraint should not be propagated", mergedConstraint.hasFineGrainedConstraints());
+ assertTrue("Merged constraint should not contain privacy level PrivateAggregation", mergedConstraint.getFineGrainedPrivacy().getDataRangesOfPrivacyLevel(PrivacyLevel.PrivateAggregation).length == 0);
+ Map<DataRange, PrivacyLevel> outputElement1 = mergedConstraint.getFineGrainedPrivacy().getPrivacyLevelOfElement(new long[]{1,0});
+ Map<DataRange, PrivacyLevel> outputElement2 = mergedConstraint.getFineGrainedPrivacy().getPrivacyLevelOfElement(new long[]{1,1});
+ Map<DataRange, PrivacyLevel> outputElement3 = mergedConstraint.getFineGrainedPrivacy().getPrivacyLevelOfElement(new long[]{1,2});
+ assertEquals(1, outputElement1.size());
+ assertEquals(1, outputElement2.size());
+ assertEquals(1, outputElement3.size());
+ assertTrue("Privacy level of element 1 is Private", outputElement1.containsValue(PrivacyLevel.Private));
+ assertTrue("Privacy level of element 2 is Private", outputElement2.containsValue(PrivacyLevel.Private));
+ assertTrue("Privacy level of element 3 is Private", outputElement3.containsValue(PrivacyLevel.Private));
+ Map<DataRange, PrivacyLevel> expectedEmpty = mergedConstraint.getFineGrainedPrivacy().getPrivacyLevel(new DataRange(new long[]{2,0}, new long[]{3,2}));
+ assertTrue("Any other index has no privacy constraint", expectedEmpty.isEmpty() ||
+ (!expectedEmpty.containsValue(PrivacyLevel.Private)
+ && !expectedEmpty.containsValue(PrivacyLevel.PrivateAggregation)));
+ }
+
+ private static void mmPropagationTestPrivateFineGrained2Generalized(MatrixMultiplicationPropagator propagator){
+ MatrixBlock inputMatrix1 = new MatrixBlock(4,3,2);
+ MatrixBlock inputMatrix2 = new MatrixBlock(3,3,4);
+ PrivacyConstraint constraint1 = new PrivacyConstraint();
+ PrivacyConstraint constraint2 = new PrivacyConstraint();
+ constraint2.getFineGrainedPrivacy().put(new DataRange(new long[]{1,0},new long[]{1,1}), PrivacyLevel.Private);
+ propagator.setFields(inputMatrix1, constraint1, inputMatrix2, constraint2);
+ PrivacyConstraint mergedConstraint = propagator.propagate();
+ assertTrue("Privacy should be set to Private", mergedConstraint.hasPrivateElements());
+ assertTrue("Fine grained constraint should not be propagated", mergedConstraint.hasFineGrainedConstraints());
+ assertTrue("Merged constraint should not contain privacy level PrivateAggregation", mergedConstraint.getFineGrainedPrivacy().getDataRangesOfPrivacyLevel(PrivacyLevel.PrivateAggregation).length == 0);
+ Map<DataRange, PrivacyLevel> outputRange = mergedConstraint.getFineGrainedPrivacy().getPrivacyLevel(new DataRange(new long[]{0,0},new long[]{3,1}));
+ assertTrue("Privacy level is Private", outputRange.containsValue(PrivacyLevel.Private));
+ Map<DataRange, PrivacyLevel> expectedEmpty = mergedConstraint.getFineGrainedPrivacy().getPrivacyLevel(new DataRange(new long[]{0,2}, new long[]{3,2}));
+ assertTrue("Any other index has no privacy constraint", expectedEmpty.isEmpty() ||
+ (!expectedEmpty.containsValue(PrivacyLevel.Private)
+ && !expectedEmpty.containsValue(PrivacyLevel.PrivateAggregation)));
+ }
+
+ private static void getOperatorTypesRowMultipleNonAggTestGeneralized(MatrixMultiplicationPropagator propagator){
+ int rows = 4;
+ int cols = 2;
+ int nonAggRow = 2;
+ MatrixBlock m1 = getMatrixBlock(rows, cols);
+ // Make two rows NNZ=1
+ m1.getDenseBlock().set(nonAggRow,0,0);
+ m1.getDenseBlock().set(nonAggRow+1,0,0);
+ propagator.setFields(m1, null, null, null);
+ OperatorType[] actualArray = propagator.getOperatorTypesRow();
+ OperatorType expected = OperatorType.NonAggregate;
+ assertEquals("All values except two should be OperatorType.Aggregate", expected, actualArray[nonAggRow]);
+ assertEquals("All values except two should be OperatorType.Aggregate", expected, actualArray[nonAggRow+1]);
+ }
+
+ private static void getOperatorTypesColMultipleNonAggTestGeneralized(MatrixMultiplicationPropagator propagator){
+ int rows = 2;
+ int cols = 3;
+ int nonAggCol = 1;
+ MatrixBlock m2 = getMatrixBlock(rows, cols);
+ // Make two cols NNZ=1
+ m2.getDenseBlock().set(0,nonAggCol,0);
+ m2.getDenseBlock().set(0,nonAggCol+1,0);
+ propagator.setFields(null, null, m2, null);
+ OperatorType[] actualArray = propagator.getOperatorTypesCol();
+ OperatorType expected = OperatorType.NonAggregate;
+ assertEquals("All values except two should be OperatorType.Aggregate", expected, actualArray[nonAggCol]);
+ assertEquals("All values except two should be OperatorType.Aggregate", expected, actualArray[nonAggCol+1]);
+ }
+
+ private static MatrixBlock getMatrixBlock(int rows, int cols){
+ DenseBlock denseM = new DenseBlockLFP64(new int[]{rows,cols});
+ for ( int r = 0; r < rows; r++ ){
+ for ( int c = 0; c < cols; c++ ){
+ denseM.set(r,c,r+c+1);
+ }
+ }
+ return new MatrixBlock(rows,cols,denseM);
+ }
+
+ private static void NonAggGeneralizedTest(PrivacyLevel privacyLevel, MatrixMultiplicationPropagator propagator){
+ int nonAggRow = 2;
+ MatrixBlock m1 = getMatrixBlock(4,2);
+ MatrixBlock m2 = getMatrixBlock(2, 3);
+ m1.getDenseBlock().set(nonAggRow,0,0);
+ PrivacyConstraint constraint1 = new PrivacyConstraint();
+ constraint1.getFineGrainedPrivacy().putRow(nonAggRow,2,privacyLevel);
+ PrivacyConstraint constraint2 = new PrivacyConstraint();
+ propagator.setFields(m1, constraint1, m2, constraint2);
+ PrivacyConstraint mergedPrivacyConstraint = propagator.propagate();
+ Map<DataRange, PrivacyLevel> constraints = mergedPrivacyConstraint.getFineGrainedPrivacy().getPrivacyLevel(new DataRange(new long[]{nonAggRow,0}, new long[]{nonAggRow,1}));
+ assertTrue("Output constraints should contain the privacy level " + privacyLevel.toString(),
+ constraints.containsValue(privacyLevel));
+ if ( privacyLevel == PrivacyLevel.Private)
+ assertFalse("Output constraints should not contain the privacy level PrivateAggregation",
+ constraints.containsValue(PrivacyLevel.PrivateAggregation));
+ else if ( privacyLevel == PrivacyLevel.PrivateAggregation )
+ assertFalse("Output constraints should not contain the privacy level Private",
+ constraints.containsValue(PrivacyLevel.Private));
+ }
+
+ private static void NonAggGeneralizedColTest(PrivacyLevel privacyLevel, MatrixMultiplicationPropagator propagator){
+ int nonAggCol = 2;
+ MatrixBlock m1 = getMatrixBlock(4,2);
+ MatrixBlock m2 = getMatrixBlock(2, 3);
+ m2.getDenseBlock().set(0,nonAggCol,0);
+ PrivacyConstraint constraint1 = new PrivacyConstraint();
+ PrivacyConstraint constraint2 = new PrivacyConstraint();
+ constraint2.getFineGrainedPrivacy().putCol(nonAggCol,4,privacyLevel);
+ propagator.setFields(m1, constraint1, m2, constraint2);
+ PrivacyConstraint mergedPrivacyConstraint = propagator.propagate();
+ Map<DataRange, PrivacyLevel> constraints = mergedPrivacyConstraint.getFineGrainedPrivacy().getPrivacyLevel(new DataRange(new long[]{0,nonAggCol}, new long[]{3,nonAggCol}));
+ assertTrue("Output constraints should contain the privacy level " + privacyLevel.toString(),
+ constraints.containsValue(privacyLevel));
+ if ( privacyLevel == PrivacyLevel.Private)
+ assertFalse("Output constraints should not contain the privacy level PrivateAggregation",
+ constraints.containsValue(PrivacyLevel.PrivateAggregation));
+ else if ( privacyLevel == PrivacyLevel.PrivateAggregation )
+ assertFalse("Output constraints should not contain the privacy level Private",
+ constraints.containsValue(PrivacyLevel.Private));
+ }
+
+ private static void NonAggGeneralizedRowColTest(PrivacyLevel privacyLevel, boolean putElement, MatrixMultiplicationPropagator propagator){
int nonAgg = 2;
MatrixBlock m1 = getMatrixBlock(4,2);
MatrixBlock m2 = getMatrixBlock(2, 3);
@@ -583,7 +582,7 @@ public class PrivacyPropagatorTest extends AutomatedTestBase {
int privacyLevelSum = 0;
DataRange levelRange = null;
PrivacyLevel level = PrivacyLevel.None;
- for ( Map.Entry constraint : constraints )
+ for ( Map.Entry<DataRange, PrivacyLevel> constraint : constraints )
if ( constraint.getValue() == privacyLevel ){
privacyLevelSum++;
levelRange = (DataRange)constraint.getKey();