This is an automated email from the ASF dual-hosted git repository.

baunsgaard pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/systemds.git


The following commit(s) were added to refs/heads/main by this push:
     new f4ba2301f6 [MINOR] Fix rmempty tests and federated
f4ba2301f6 is described below

commit f4ba2301f6ad2550e2946f8a6296a36a72b25f4d
Author: OlgaOvcharenko <[email protected]>
AuthorDate: Wed Apr 20 01:33:22 2022 +0200

    [MINOR] Fix rmempty tests and federated
    
    This commit fixes both the rm empty test, and federated sparse rm empty.
    
    Closes #1590
    Closes #1587
---
 .../fed/ParameterizedBuiltinFEDInstruction.java    |   5 +-
 src/test/java/org/apache/sysds/test/TestUtils.java |  14 ++
 .../test/component/frame/FrameRemoveEmptyTest.java | 162 +++++++++++++++------
 .../primitives/FederatedRemoveEmptyTest.java       |  31 ++--
 .../transform/TransformFederatedEncodeApply.dml    |   1 -
 5 files changed, 154 insertions(+), 59 deletions(-)

diff --git 
a/src/main/java/org/apache/sysds/runtime/instructions/fed/ParameterizedBuiltinFEDInstruction.java
 
b/src/main/java/org/apache/sysds/runtime/instructions/fed/ParameterizedBuiltinFEDInstruction.java
index edae75ed39..2a1335426f 100644
--- 
a/src/main/java/org/apache/sysds/runtime/instructions/fed/ParameterizedBuiltinFEDInstruction.java
+++ 
b/src/main/java/org/apache/sysds/runtime/instructions/fed/ParameterizedBuiltinFEDInstruction.java
@@ -906,9 +906,8 @@ public class ParameterizedBuiltinFEDInstruction extends 
ComputationFEDInstructio
                @Override
                public FederatedResponse execute(ExecutionContext ec, Data... 
data) {
                        MatrixBlock mb = ((MatrixObject) 
data[0]).acquireReadAndRelease();
-                       int r = mb.getDenseBlockValues() != null ? 
mb.getNumRows() : 0;
-                       int c = mb.getDenseBlockValues() != null ? 
mb.getNumColumns() : 0;
-                       return new FederatedResponse(ResponseType.SUCCESS, new 
int[] {r, c});
+                       final int[] dims = mb.isEmpty() ? new int[] {0, 0} : 
new int[] {mb.getNumRows(), mb.getNumColumns()};
+                       return new FederatedResponse(ResponseType.SUCCESS, 
dims);
                }
 
                @Override
diff --git a/src/test/java/org/apache/sysds/test/TestUtils.java 
b/src/test/java/org/apache/sysds/test/TestUtils.java
index 4729e78bf0..ace1c10726 100644
--- a/src/test/java/org/apache/sysds/test/TestUtils.java
+++ b/src/test/java/org/apache/sysds/test/TestUtils.java
@@ -753,6 +753,11 @@ public class TestUtils
 
        public static void compareMatrices(double[][] expectedMatrix, 
double[][] actualMatrix, int rows, int cols,
                        double epsilon, String message) {
+               if(expectedMatrix.length != rows && expectedMatrix[0].length != 
cols)
+                       fail("Invalid number of rows and cols in expected");
+               if(actualMatrix.length != rows && actualMatrix[0].length != 
cols)
+                       fail("Invalid number of rows and cols in actual");
+               
                int countErrors = 0;
                for (int i = 0; i < rows && countErrors < 50; i++) {
                        for (int j = 0; j < cols && countErrors < 50; j++) {
@@ -1278,6 +1283,15 @@ public class TestUtils
                compareMatrices(ret1, ret2, m2.getNumRows(), 
m2.getNumColumns(), tolerance, message);
        }
 
+       public static void compareMatrices(MatrixBlock m1, double[][] m2, 
double tolerance, String message) {
+               double[][] ret1 = DataConverter.convertToDoubleMatrix(m1);
+               compareMatrices(ret1, m2, m1.getNumRows(), m1.getNumColumns(), 
tolerance, message);
+       }
+
+       public static void compareMatrices(double[][] m1, MatrixBlock m2, 
double tolerance, String message) {
+               double[][] ret2 = DataConverter.convertToDoubleMatrix(m2);
+               compareMatrices(m1, ret2, m2.getNumRows(), m2.getNumColumns(), 
tolerance, message);
+       }
 
        /**
         * Compares two matrices given as HashMaps. The matrix containing more 
nnz
diff --git 
a/src/test/java/org/apache/sysds/test/component/frame/FrameRemoveEmptyTest.java 
b/src/test/java/org/apache/sysds/test/component/frame/FrameRemoveEmptyTest.java
index 5f011da1a7..5fb0913c65 100644
--- 
a/src/test/java/org/apache/sysds/test/component/frame/FrameRemoveEmptyTest.java
+++ 
b/src/test/java/org/apache/sysds/test/component/frame/FrameRemoveEmptyTest.java
@@ -19,8 +19,12 @@
 
 package org.apache.sysds.test.component.frame;
 
+import static org.junit.Assert.fail;
+
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.sysds.api.DMLScript;
 import org.apache.sysds.common.Types;
 import org.apache.sysds.runtime.matrix.data.MatrixBlock;
@@ -32,51 +36,110 @@ import 
org.apache.sysds.test.functions.unary.matrix.RemoveEmptyTest;
 import org.junit.Test;
 
 public class FrameRemoveEmptyTest extends AutomatedTestBase {
+
+       private static final Log LOG = 
LogFactory.getLog(FrameRemoveEmptyTest.class.getName());
+
        private final static String TEST_NAME1 = "removeEmpty1";
        private final static String TEST_NAME2 = "removeEmpty2";
        private final static String TEST_DIR = "functions/frame/";
        private static final String TEST_CLASS_DIR = TEST_DIR + 
RemoveEmptyTest.class.getSimpleName() + "/";
 
-       private final static int _rows = 10;
-       private final static int _cols = 6;
-
-       private final static double _sparsityDense = 0.7;
+       private final static double _dense = 0.99;
+       private final static double _sparse = 0.1;
 
        @Override
        public void setUp() {
-               addTestConfiguration(TEST_NAME1, new 
TestConfiguration(TEST_CLASS_DIR, TEST_NAME1, new String[] {"V"}));
-               addTestConfiguration(TEST_NAME2, new 
TestConfiguration(TEST_CLASS_DIR, TEST_NAME1, new String[] {"V"}));
+               addTestConfiguration(TEST_NAME1, new 
TestConfiguration(TEST_CLASS_DIR, TEST_NAME1, new String[] {"R"}));
+               addTestConfiguration(TEST_NAME2, new 
TestConfiguration(TEST_CLASS_DIR, TEST_NAME1, new String[] {"R"}));
        }
 
        @Test
        public void testRemoveEmptyRowsCP() {
-               runTestRemoveEmpty(TEST_NAME1, "rows", Types.ExecType.CP, 
false, false);
+               runTestRemoveEmpty(TEST_NAME1, "rows", Types.ExecType.CP, 
false, false, 100, 100, _dense);
+       }
+
+       @Test
+       public void testRemoveEmptyRowsCPSparse() {
+               runTestRemoveEmpty(TEST_NAME1, "rows", Types.ExecType.CP, 
false, false, 100, 100, _sparse);
+       }
+
+       @Test
+       public void testRemoveEmptyRowsCPSparse2() {
+               runTestRemoveEmpty(TEST_NAME1, "rows", Types.ExecType.CP, 
false, false, 1000, 10, _sparse);
        }
 
        @Test
        public void testRemoveEmptyColsCP() {
-               runTestRemoveEmpty(TEST_NAME1, "cols", Types.ExecType.CP, 
false, false);
+               runTestRemoveEmpty(TEST_NAME1, "cols", Types.ExecType.CP, 
false, false, 100, 100, _dense);
+       }
+
+       @Test
+       public void testRemoveEmptyColsCPSparse() {
+               runTestRemoveEmpty(TEST_NAME1, "cols", Types.ExecType.CP, 
false, false, 100, 100, _sparse);
+       }
+
+       @Test
+       public void testRemoveEmptyColsCPSparse2() {
+               runTestRemoveEmpty(TEST_NAME1, "cols", Types.ExecType.CP, 
false, false, 10, 1000, _sparse);
        }
 
        @Test
        public void testRemoveEmptyRowsSelectFullCP() {
-               runTestRemoveEmpty(TEST_NAME2, "rows", Types.ExecType.CP, true, 
true);
+               runTestRemoveEmpty(TEST_NAME2, "rows", Types.ExecType.CP, true, 
true, 100, 100, _dense);
+       }
+
+       @Test
+       public void testRemoveEmptyRowsSelectFullCPSparse() {
+               runTestRemoveEmpty(TEST_NAME2, "rows", Types.ExecType.CP, true, 
true, 100, 100, _sparse);
+       }
+
+       @Test
+       public void testRemoveEmptyRowsSelectFullCPSparse2() {
+               runTestRemoveEmpty(TEST_NAME2, "rows", Types.ExecType.CP, true, 
true, 100, 10, _sparse);
        }
 
        @Test
-       public void testRemoveEmptyColsSelectFullCP() { 
runTestRemoveEmpty(TEST_NAME2, "cols", Types.ExecType.CP, true, true); }
+       public void testRemoveEmptyColsSelectFullCP() {
+               runTestRemoveEmpty(TEST_NAME2, "cols", Types.ExecType.CP, true, 
true, 100, 100, _dense);
+       }
+
+       @Test
+       public void testRemoveEmptyColsSelectFullCPSparse() {
+               runTestRemoveEmpty(TEST_NAME2, "cols", Types.ExecType.CP, true, 
true, 100, 100, _sparse);
+       }
 
        @Test
        public void testRemoveEmptyRowsSelectCP() {
-               runTestRemoveEmpty(TEST_NAME2, "rows", Types.ExecType.CP, true, 
false);
+               runTestRemoveEmpty(TEST_NAME2, "rows", Types.ExecType.CP, true, 
false, 100, 100, _dense);
+       }
+
+       @Test
+       public void testRemoveEmptyRowsSelectCPSparse() {
+               runTestRemoveEmpty(TEST_NAME2, "rows", Types.ExecType.CP, true, 
false, 100, 100, _sparse);
+       }
+
+       @Test
+       public void testRemoveEmptyRowsSelectCPSparse2() {
+               runTestRemoveEmpty(TEST_NAME2, "rows", Types.ExecType.CP, true, 
false, 100, 10, _sparse);
+       }
+
+       @Test
+       public void testRemoveEmptyRowsSelectCPSparse3() {
+               runTestRemoveEmpty(TEST_NAME2, "rows", Types.ExecType.CP, true, 
false, 100, 3, _sparse);
        }
 
        @Test
        public void testRemoveEmptyColsSelectCP() {
-               runTestRemoveEmpty(TEST_NAME2, "cols", Types.ExecType.CP, true, 
false);
+               runTestRemoveEmpty(TEST_NAME2, "cols", Types.ExecType.CP, true, 
false, 100, 100, _dense);
+       }
+
+       @Test
+       public void testRemoveEmptyColsSelectCPSparse() {
+               runTestRemoveEmpty(TEST_NAME2, "cols", Types.ExecType.CP, true, 
false, 100, 100, _sparse);
        }
 
-       private void runTestRemoveEmpty(String testname, String margin, 
Types.ExecType et, boolean bSelectIndex, boolean fullSelect) {
+       private void runTestRemoveEmpty(String testname, String margin, 
Types.ExecType et, boolean bSelectIndex,
+               boolean fullSelect, int rows, int cols, double sparsity) {
                Types.ExecMode platformOld = rtplatform;
                switch(et) {
                        case SPARK:
@@ -94,27 +157,33 @@ public class FrameRemoveEmptyTest extends 
AutomatedTestBase {
                try {
                        // register test configuration
                        TestConfiguration config = 
getTestConfiguration(testname);
-                       config.addVariable("rows", _rows);
-                       config.addVariable("cols", _cols);
+                       config.addVariable("rows", rows);
+                       config.addVariable("cols", cols);
                        loadTestConfiguration(config);
 
                        String HOME = SCRIPT_DIR + TEST_DIR;
                        fullDMLScriptName = HOME + testname + ".dml";
-                       programArgs = new String[] {"-explain", "-args", 
input("V"), input("I"), margin, output("V")};
+                       programArgs = new String[] {"-explain", "-args", 
input("V"), input("I"), margin, output("R")};
+
+                       Pair<MatrixBlock, MatrixBlock> data = 
createInputMatrix(margin, bSelectIndex, fullSelect, rows, cols, sparsity);
 
-                       Pair<MatrixBlock, MatrixBlock> data = 
createInputMatrix(margin, bSelectIndex, fullSelect);
                        MatrixBlock in = data.getKey();
                        MatrixBlock select = data.getValue();
 
-                       runTest(true, false, null, -1);
+                       runTest(null);
 
-                       double[][] outArray = 
TestUtils.convertHashMapToDoubleArray(readDMLMatrixFromOutputDir("V"));
-                       MatrixBlock out = new MatrixBlock(outArray.length, 
outArray[0].length, false);
-                       out.init(outArray, outArray.length, outArray[0].length);
+                       MatrixBlock expected = fullSelect ? in : 
in.removeEmptyOperations(new MatrixBlock(), margin.equals("rows"),
+                               false, select);
 
-                       MatrixBlock expected = fullSelect ? in :
-                               in.removeEmptyOperations(new MatrixBlock(), 
margin.equals("rows"), false, select);
-                       TestUtils.compareMatrices(expected, out, 0);
+                       double[][] out = 
TestUtils.convertHashMapToDoubleArray(readDMLMatrixFromOutputDir("R"));
+
+                       LOG.debug(expected.getNumRows() + "  " + out.length);
+
+                       TestUtils.compareMatrices(expected, out, 0, "");
+               }
+               catch(Exception e) {
+                       e.printStackTrace();
+                       fail("Failed test because of exception " + e);
                }
                finally {
                        // reset platform for additional tests
@@ -123,37 +192,37 @@ public class FrameRemoveEmptyTest extends 
AutomatedTestBase {
                }
        }
 
-       private Pair<MatrixBlock, MatrixBlock> createInputMatrix(String margin, 
boolean bSelectIndex, boolean fullSelect) {
+       private Pair<MatrixBlock, MatrixBlock> createInputMatrix(String margin, 
boolean bSelectIndex, boolean fullSelect,
+               int rows, int cols, double sparsity) {
                int rowsp = -1, colsp = -1;
                if(margin.equals("rows")) {
-                       rowsp = _rows / 2;
-                       colsp = _cols;
+                       rowsp = rows / 2;
+                       colsp = cols;
                }
                else {
-                       rowsp = _rows;
-                       colsp = _cols / 2;
+                       rowsp = rows;
+                       colsp = cols / 2;
                }
 
                // long seed = System.nanoTime();
-               double[][] V = getRandomMatrix(_rows, _cols, 0, 1,
-                       FrameRemoveEmptyTest._sparsityDense, 7);
+               double[][] V = getRandomMatrix(rows, cols, 0, 1, sparsity, 7);
                double[][] Vp = new double[rowsp][colsp];
                double[][] Ix;
                int innz = 0, vnnz = 0;
 
                // clear out every other row/column
                if(margin.equals("rows")) {
-                       Ix = new double[_rows][1];
-                       for(int i = 0; i < _rows; i++) {
+                       Ix = new double[rows][1];
+                       for(int i = 0; i < rows; i++) {
                                boolean clear = i % 2 != 0;
-                               if(clear  && !fullSelect) {
-                                       for(int j = 0; j < _cols; j++)
+                               if(clear && !fullSelect) {
+                                       for(int j = 0; j < cols; j++)
                                                V[i][j] = 0;
                                        Ix[i][0] = 0;
                                }
                                else {
                                        boolean bNonEmpty = false;
-                                       for(int j = 0; j < _cols; j++) {
+                                       for(int j = 0; j < cols; j++) {
                                                Vp[i / 2][j] = V[i][j];
                                                bNonEmpty |= V[i][j] != 0.0;
                                                vnnz += (V[i][j] == 0.0) ? 0 : 
1;
@@ -164,17 +233,17 @@ public class FrameRemoveEmptyTest extends 
AutomatedTestBase {
                        }
                }
                else {
-                       Ix = new double[1][_cols];
-                       for(int j = 0; j < _cols; j++) {
+                       Ix = new double[1][cols];
+                       for(int j = 0; j < cols; j++) {
                                boolean clear = j % 2 != 0;
                                if(clear && !fullSelect) {
-                                       for(int i = 0; i < _rows; i++)
+                                       for(int i = 0; i < rows; i++)
                                                V[i][j] = 0;
                                        Ix[0][j] = 0;
                                }
                                else {
                                        boolean bNonEmpty = false;
-                                       for(int i = 0; i < _rows; i++) {
+                                       for(int i = 0; i < rows; i++) {
                                                Vp[i][j / 2] = V[i][j];
                                                bNonEmpty |= V[i][j] != 0.0;
                                                vnnz += (V[i][j] == 0.0) ? 0 : 
1;
@@ -185,12 +254,12 @@ public class FrameRemoveEmptyTest extends 
AutomatedTestBase {
                        }
                }
 
-               MatrixCharacteristics imc = new 
MatrixCharacteristics(margin.equals("rows") ? FrameRemoveEmptyTest._rows : 1,
-                       margin.equals("rows") ? 1 : _cols, 1000, innz);
-               MatrixCharacteristics vmc = new MatrixCharacteristics(_rows, 
_cols, 1000, vnnz);
+               MatrixCharacteristics imc = new 
MatrixCharacteristics(margin.equals("rows") ? rows : 1,
+                       margin.equals("rows") ? 1 : cols, 1000, innz);
+               MatrixCharacteristics vmc = new MatrixCharacteristics(rows, 
cols, 1000, vnnz);
 
-               MatrixBlock in = new MatrixBlock(_rows, _cols, false);
-               in.init(V, _rows, _cols);
+               MatrixBlock in = new MatrixBlock(rows, cols, false);
+               in.init(V, rows, cols);
 
                MatrixBlock select = new MatrixBlock(Ix.length, Ix[0].length, 
false);
                select.init(Ix, Ix.length, Ix[0].length);
@@ -200,6 +269,9 @@ public class FrameRemoveEmptyTest extends AutomatedTestBase 
{
                if(bSelectIndex)
                        writeInputMatrixWithMTD("I", Ix, false, imc);
 
+               in.examSparsity();
+               select.examSparsity();
+
                return new ImmutablePair<>(in, select);
        }
 }
diff --git 
a/src/test/java/org/apache/sysds/test/functions/federated/primitives/FederatedRemoveEmptyTest.java
 
b/src/test/java/org/apache/sysds/test/functions/federated/primitives/FederatedRemoveEmptyTest.java
index af2b9bba84..3c3992f616 100644
--- 
a/src/test/java/org/apache/sysds/test/functions/federated/primitives/FederatedRemoveEmptyTest.java
+++ 
b/src/test/java/org/apache/sysds/test/functions/federated/primitives/FederatedRemoveEmptyTest.java
@@ -45,18 +45,30 @@ public class FederatedRemoveEmptyTest extends 
AutomatedTestBase {
        private static final String TEST_CLASS_DIR = TEST_DIR + 
FederatedRemoveEmptyTest.class.getSimpleName() + "/";
 
        private final static int blocksize = 1024;
+
        @Parameterized.Parameter()
        public int rows;
        @Parameterized.Parameter(1)
        public int cols;
        @Parameterized.Parameter(2)
        public boolean rowPartitioned;
+       @Parameterized.Parameter(3)
+       public double sparsity;
 
        @Parameterized.Parameters
        public static Collection<Object[]> data() {
                return Arrays.asList(new Object[][] {
-                       {20, 12, true},
-                       {20, 12, false}
+                       // dense
+                       {20, 12, true, 1.0},
+                       {20, 12, false, 1.0},
+                       // sparse
+                       {20, 12, true, 0.1},
+                       {20, 12, false, 0.1},
+                       {1000, 12, true, 0.1},
+                       {1000, 12, false, 0.1},
+                       {20, 1000, true, 0.1},
+                       {20, 1000, false, 0.1},
+                       {40, 40, true, 0} //  empty
                });
        }
 
@@ -94,10 +106,10 @@ public class FederatedRemoveEmptyTest extends 
AutomatedTestBase {
                        c = cols;
                }
 
-               double[][] X1 = getRandomMatrix(r, c, 1, 5, 1, 3);
-               double[][] X2 = getRandomMatrix(r, c, 1, 5, 1, 7);
-               double[][] X3 = getRandomMatrix(r, c, 1, 5, 1, 8);
-               double[][] X4 = getRandomMatrix(r, c, 1, 5, 1, 9);
+               double[][] X1 = getRandomMatrix(r, c, 1, 5, sparsity, 3);
+               double[][] X2 = getRandomMatrix(r, c, 1, 5, sparsity, 7);
+               double[][] X3 = getRandomMatrix(r, c, 1, 5, sparsity, 8);
+               double[][] X4 = getRandomMatrix(r, c, 1, 5, sparsity, 9);
 
                for(int k : new int[] {1, 2, 3}) {
                        Arrays.fill(X3[k], 0);
@@ -121,10 +133,9 @@ public class FederatedRemoveEmptyTest extends 
AutomatedTestBase {
                Thread t4 = startLocalFedWorkerThread(port4);
 
                rtplatform = execMode;
-               if(rtplatform == ExecMode.SPARK) {
-                       System.out.println(7);
+               if(rtplatform == ExecMode.SPARK) 
                        DMLScript.USE_LOCAL_SPARK_CONFIG = true;
-               }
+               
                TestConfiguration config = 
availableTestConfigurations.get(TEST_NAME);
                loadTestConfiguration(config);
 
@@ -160,4 +171,4 @@ public class FederatedRemoveEmptyTest extends 
AutomatedTestBase {
                DMLScript.USE_LOCAL_SPARK_CONFIG = sparkConfigOld;
 
        }
-}
+}
\ No newline at end of file
diff --git 
a/src/test/scripts/functions/transform/TransformFederatedEncodeApply.dml 
b/src/test/scripts/functions/transform/TransformFederatedEncodeApply.dml
index 4291993e8f..6305040e85 100644
--- a/src/test/scripts/functions/transform/TransformFederatedEncodeApply.dml
+++ b/src/test/scripts/functions/transform/TransformFederatedEncodeApply.dml
@@ -36,4 +36,3 @@ X2 = transformapply(target=F1, spec=jspec, meta=M);
 
 write(X, $TFDATA1, format="csv");
 write(X2, $TFDATA2, format="csv");
-

Reply via email to