Repository: systemml Updated Branches: refs/heads/master 642a00638 -> ae15272b0
[HOTFIX] Fix old uni/bivar stats tests, incl better error handling lix This patch fixes dml script issues of old univariate and bivariate statistics tests. Specifically, the new dense block abstraction revealed issues on left indexing where the source block was smaller than the target index range. We now also perform better error handling regarding correct indexing ranges in left indexing operations to guard against incorrect results if these invalid ranges are not detected. Project: http://git-wip-us.apache.org/repos/asf/systemml/repo Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/ae15272b Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/ae15272b Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/ae15272b Branch: refs/heads/master Commit: ae15272b059422e25982b42906e87ea1df769c77 Parents: 642a006 Author: Matthias Boehm <[email protected]> Authored: Tue Jan 2 19:50:44 2018 -0800 Committer: Matthias Boehm <[email protected]> Committed: Tue Jan 2 19:50:44 2018 -0800 ---------------------------------------------------------------------- .../sysml/runtime/matrix/data/MatrixBlock.java | 19 +++++++++---------- .../applications/parfor/parfor_bivariate0.dml | 6 +++--- .../applications/parfor/parfor_bivariate1.dml | 6 +++--- .../applications/parfor/parfor_bivariate2.dml | 6 +++--- .../applications/parfor/parfor_bivariate3.dml | 6 +++--- .../applications/parfor/parfor_bivariate4.dml | 6 +++--- .../applications/parfor/parfor_univariate0.dml | 2 +- .../applications/parfor/parfor_univariate1.dml | 2 +- .../applications/parfor/parfor_univariate4.dml | 2 +- .../functions/parfor/parfor_optimizer2.dml | 6 +++--- .../functions/parfor/parfor_optimizer2b.dml | 6 +++--- 11 files changed, 33 insertions(+), 34 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/systemml/blob/ae15272b/src/main/java/org/apache/sysml/runtime/matrix/data/MatrixBlock.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/matrix/data/MatrixBlock.java b/src/main/java/org/apache/sysml/runtime/matrix/data/MatrixBlock.java index 3f344c6..2336588 100644 --- a/src/main/java/org/apache/sysml/runtime/matrix/data/MatrixBlock.java +++ b/src/main/java/org/apache/sysml/runtime/matrix/data/MatrixBlock.java @@ -3488,19 +3488,18 @@ public class MatrixBlock extends MatrixValue implements CacheBlock, Externalizab public MatrixBlock leftIndexingOperations(MatrixBlock rhsMatrix, int rl, int ru, int cl, int cu, MatrixBlock ret, UpdateType update) throws DMLRuntimeException - { + { // Check the validity of bounds - if ( rl < 0 || rl >= getNumRows() || ru < rl || ru >= getNumRows() - || cl < 0 || cu >= getNumColumns() || cu < cl || cu >= getNumColumns() ) { - throw new DMLRuntimeException("Invalid values for matrix indexing: ["+(rl+1)+":"+(ru+1)+"," + (cl+1)+":"+(cu+1)+"] " + - "must be within matrix dimensions ["+getNumRows()+","+getNumColumns()+"]."); + if( rl < 0 || rl >= getNumRows() || ru < rl || ru >= getNumRows() + || cl < 0 || cu >= getNumColumns() || cu < cl || cu >= getNumColumns() ) { + throw new DMLRuntimeException("Invalid values for matrix indexing: ["+(rl+1)+":"+(ru+1)+"," + + (cl+1)+":"+(cu+1)+"] " + "must be within matrix dimensions ["+getNumRows()+","+getNumColumns()+"]."); } - - if ( (ru-rl+1) < rhsMatrix.getNumRows() || (cu-cl+1) < rhsMatrix.getNumColumns()) { + if( (ru-rl+1) != rhsMatrix.getNumRows() || (cu-cl+1) != rhsMatrix.getNumColumns() ) { throw new DMLRuntimeException("Invalid values for matrix indexing: " + - "dimensions of the source matrix ["+rhsMatrix.getNumRows()+"x" + rhsMatrix.getNumColumns() + "] " + - "do not match the shape of the matrix specified by indices [" + - (rl+1) +":" + (ru+1) + ", " + (cl+1) + ":" + (cu+1) + "]."); + "dimensions of the source matrix ["+rhsMatrix.getNumRows()+"x" + rhsMatrix.getNumColumns() + "] " + + "do not match the shape of the matrix specified by indices [" + + (rl+1) +":" + (ru+1) + ", " + (cl+1) + ":" + (cu+1) + "] (i.e., ["+(ru-rl+1)+"x"+(cu-cl+1)+"])."); } MatrixBlock result = ret; http://git-wip-us.apache.org/repos/asf/systemml/blob/ae15272b/src/test/scripts/applications/parfor/parfor_bivariate0.dml ---------------------------------------------------------------------- diff --git a/src/test/scripts/applications/parfor/parfor_bivariate0.dml b/src/test/scripts/applications/parfor/parfor_bivariate0.dml index 662b745..18e84e1 100644 --- a/src/test/scripts/applications/parfor/parfor_bivariate0.dml +++ b/src/test/scripts/applications/parfor/parfor_bivariate0.dml @@ -117,9 +117,9 @@ for( i in 1:s1size ) { } basestats[7,pairID] = eta; basestats[8,pairID] = f; - cat_counts[,pairID] = counts; - cat_means[,pairID] = means; - cat_vars[,pairID] = vars; + cat_counts[1:nrow(counts),pairID] = counts; + cat_means[1:nrow(means),pairID] = means; + cat_vars[1:nrow(vars),pairID] = vars; } else { # nominal-ordinal or ordinal-nominal http://git-wip-us.apache.org/repos/asf/systemml/blob/ae15272b/src/test/scripts/applications/parfor/parfor_bivariate1.dml ---------------------------------------------------------------------- diff --git a/src/test/scripts/applications/parfor/parfor_bivariate1.dml b/src/test/scripts/applications/parfor/parfor_bivariate1.dml index 42a956d..c485b28 100644 --- a/src/test/scripts/applications/parfor/parfor_bivariate1.dml +++ b/src/test/scripts/applications/parfor/parfor_bivariate1.dml @@ -113,9 +113,9 @@ parfor( i in 1:s1size, par=4, mode=LOCAL, check=0, opt=NONE) { } basestats[7,pairID] = eta; basestats[8,pairID] = f; - cat_counts[,pairID] = counts; - cat_means[,pairID] = means; - cat_vars[,pairID] = vars; + cat_counts[1:nrow(counts),pairID] = counts; + cat_means[1:nrow(means),pairID] = means; + cat_vars[1:nrow(vars),pairID] = vars; } else { # nominal-ordinal or ordinal-nominal http://git-wip-us.apache.org/repos/asf/systemml/blob/ae15272b/src/test/scripts/applications/parfor/parfor_bivariate2.dml ---------------------------------------------------------------------- diff --git a/src/test/scripts/applications/parfor/parfor_bivariate2.dml b/src/test/scripts/applications/parfor/parfor_bivariate2.dml index 8ee59b7..d8789e9 100644 --- a/src/test/scripts/applications/parfor/parfor_bivariate2.dml +++ b/src/test/scripts/applications/parfor/parfor_bivariate2.dml @@ -113,9 +113,9 @@ parfor( i in 1:s1size, par=4, mode=LOCAL, check=0, opt=NONE) { } basestats[7,pairID] = eta; basestats[8,pairID] = f; - cat_counts[,pairID] = counts; - cat_means[,pairID] = means; - cat_vars[,pairID] = vars; + cat_counts[1:nrow(counts),pairID] = counts; + cat_means[1:nrow(means),pairID] = means; + cat_vars[1:nrow(vars),pairID] = vars; } else { # nominal-ordinal or ordinal-nominal http://git-wip-us.apache.org/repos/asf/systemml/blob/ae15272b/src/test/scripts/applications/parfor/parfor_bivariate3.dml ---------------------------------------------------------------------- diff --git a/src/test/scripts/applications/parfor/parfor_bivariate3.dml b/src/test/scripts/applications/parfor/parfor_bivariate3.dml index f5c43ef..a639c39 100644 --- a/src/test/scripts/applications/parfor/parfor_bivariate3.dml +++ b/src/test/scripts/applications/parfor/parfor_bivariate3.dml @@ -113,9 +113,9 @@ parfor( i in 1:s1size, par=4, mode=REMOTE_MR, check=0, opt=NONE) { } basestats[7,pairID] = eta; basestats[8,pairID] = f; - cat_counts[,pairID] = counts; - cat_means[,pairID] = means; - cat_vars[,pairID] = vars; + cat_counts[1:nrow(counts),pairID] = counts; + cat_means[1:nrow(means),pairID] = means; + cat_vars[1:nrow(vars),pairID] = vars; } else { # nominal-ordinal or ordinal-nominal http://git-wip-us.apache.org/repos/asf/systemml/blob/ae15272b/src/test/scripts/applications/parfor/parfor_bivariate4.dml ---------------------------------------------------------------------- diff --git a/src/test/scripts/applications/parfor/parfor_bivariate4.dml b/src/test/scripts/applications/parfor/parfor_bivariate4.dml index c2e78d5..db189ba 100644 --- a/src/test/scripts/applications/parfor/parfor_bivariate4.dml +++ b/src/test/scripts/applications/parfor/parfor_bivariate4.dml @@ -116,9 +116,9 @@ parfor( i in 1:s1size, check=0) { } basestats[7,pairID] = eta; basestats[8,pairID] = f; - cat_counts[,pairID] = counts; - cat_means[,pairID] = means; - cat_vars[,pairID] = vars; + cat_counts[1:nrow(counts),pairID] = counts; + cat_means[1:nrow(means),pairID] = means; + cat_vars[1:nrow(vars),pairID] = vars; } else { # nominal-ordinal or ordinal-nominal http://git-wip-us.apache.org/repos/asf/systemml/blob/ae15272b/src/test/scripts/applications/parfor/parfor_univariate0.dml ---------------------------------------------------------------------- diff --git a/src/test/scripts/applications/parfor/parfor_univariate0.dml b/src/test/scripts/applications/parfor/parfor_univariate0.dml index 448c1c3..be6fee2 100644 --- a/src/test/scripts/applications/parfor/parfor_univariate0.dml +++ b/src/test/scripts/applications/parfor/parfor_univariate0.dml @@ -151,7 +151,7 @@ else { baseStats[17,i] = numModes; if (max_kind > 1) { - countsArray[,i] = cat_counts; + countsArray[1:nrow(cat_counts),i] = cat_counts; } } } http://git-wip-us.apache.org/repos/asf/systemml/blob/ae15272b/src/test/scripts/applications/parfor/parfor_univariate1.dml ---------------------------------------------------------------------- diff --git a/src/test/scripts/applications/parfor/parfor_univariate1.dml b/src/test/scripts/applications/parfor/parfor_univariate1.dml index ad1e78f..72f5c96 100644 --- a/src/test/scripts/applications/parfor/parfor_univariate1.dml +++ b/src/test/scripts/applications/parfor/parfor_univariate1.dml @@ -151,7 +151,7 @@ else { baseStats[17,i] = numModes; if (max_kind > 1) { - countsArray[,i] = cat_counts; + countsArray[1:nrow(cat_counts),i] = cat_counts; } } } http://git-wip-us.apache.org/repos/asf/systemml/blob/ae15272b/src/test/scripts/applications/parfor/parfor_univariate4.dml ---------------------------------------------------------------------- diff --git a/src/test/scripts/applications/parfor/parfor_univariate4.dml b/src/test/scripts/applications/parfor/parfor_univariate4.dml index 62646ef..abe17a8 100644 --- a/src/test/scripts/applications/parfor/parfor_univariate4.dml +++ b/src/test/scripts/applications/parfor/parfor_univariate4.dml @@ -151,7 +151,7 @@ else { baseStats[17,i] = numModes; if (max_kind > 1) { - countsArray[,i] = cat_counts; + countsArray[1:nrow(cat_counts),i] = cat_counts; } } } http://git-wip-us.apache.org/repos/asf/systemml/blob/ae15272b/src/test/scripts/functions/parfor/parfor_optimizer2.dml ---------------------------------------------------------------------- diff --git a/src/test/scripts/functions/parfor/parfor_optimizer2.dml b/src/test/scripts/functions/parfor/parfor_optimizer2.dml index bc8cdc0..b857c75 100644 --- a/src/test/scripts/functions/parfor/parfor_optimizer2.dml +++ b/src/test/scripts/functions/parfor/parfor_optimizer2.dml @@ -119,9 +119,9 @@ parfor( i in 1:s1size, check=0, opt=RULEBASED) { } basestats[7,pairID] = dummy*eta; basestats[8,pairID] = dummy*f; - cat_counts[,pairID] = counts; - cat_means[,pairID] = means; - cat_vars[,pairID] = vars; + cat_counts[1:nrow(counts),pairID] = counts; + cat_means[1:nrow(means),pairID] = means; + cat_vars[1:nrow(vars),pairID] = vars; } else { # nominal-ordinal or ordinal-nominal http://git-wip-us.apache.org/repos/asf/systemml/blob/ae15272b/src/test/scripts/functions/parfor/parfor_optimizer2b.dml ---------------------------------------------------------------------- diff --git a/src/test/scripts/functions/parfor/parfor_optimizer2b.dml b/src/test/scripts/functions/parfor/parfor_optimizer2b.dml index 6b41058..386b5ae 100644 --- a/src/test/scripts/functions/parfor/parfor_optimizer2b.dml +++ b/src/test/scripts/functions/parfor/parfor_optimizer2b.dml @@ -119,9 +119,9 @@ parfor( i in 1:s1size, check=0, opt=HEURISTIC) { } basestats[7,pairID] = dummy*eta; basestats[8,pairID] = dummy*f; - cat_counts[,pairID] = counts; - cat_means[,pairID] = means; - cat_vars[,pairID] = vars; + cat_counts[1:nrow(counts),pairID] = counts; + cat_means[1:nrow(means),pairID] = means; + cat_vars[1:nrow(vars),pairID] = vars; } else { # nominal-ordinal or ordinal-nominal
