You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@systemml.apache.org by mb...@apache.org on 2017/11/08 21:48:35 UTC

systemml git commit: [MINOR] Additional input/output verification in flaky JMLC test

Repository: systemml
Updated Branches:
  refs/heads/master ec024661a -> a03065299


[MINOR] Additional input/output verification in flaky JMLC test

Project: http://git-wip-us.apache.org/repos/asf/systemml/repo
Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/a0306529
Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/a0306529
Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/a0306529

Branch: refs/heads/master
Commit: a03065299a11487655863f4077df9c4af97829e1
Parents: ec02466
Author: Matthias Boehm <mb...@gmail.com>
Authored: Wed Nov 8 13:49:50 2017 -0800
Committer: Matthias Boehm <mb...@gmail.com>
Committed: Wed Nov 8 13:49:50 2017 -0800

----------------------------------------------------------------------
 .../functions/jmlc/MulticlassSVMScoreTest.java  | 44 ++++++++++++--------
 1 file changed, 26 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/systemml/blob/a0306529/src/test/java/org/apache/sysml/test/integration/functions/jmlc/MulticlassSVMScoreTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/sysml/test/integration/functions/jmlc/MulticlassSVMScoreTest.java b/src/test/java/org/apache/sysml/test/integration/functions/jmlc/MulticlassSVMScoreTest.java
index eca6e52..519ebac 100644
--- a/src/test/java/org/apache/sysml/test/integration/functions/jmlc/MulticlassSVMScoreTest.java
+++ b/src/test/java/org/apache/sysml/test/integration/functions/jmlc/MulticlassSVMScoreTest.java
@@ -39,7 +39,6 @@ import org.junit.Test;
 
 public class MulticlassSVMScoreTest extends AutomatedTestBase
 {
-	
 	private final static String TEST_NAME = "m-svm-score";
 	private final static String TEST_DIR = "functions/jmlc/";
 	private final static String MODEL_FILE = "sentiment_model.mtx";
@@ -49,15 +48,17 @@ public class MulticlassSVMScoreTest extends AutomatedTestBase
 	private final static int rows = 107;
 	private final static int cols = 46; //fixed
 	
-	private final static int nRuns = 5;
+	private final static int nRuns = 3;
 	
 	private final static double sparsity1 = 0.7;
 	private final static double sparsity2 = 0.1;
 	
+	//This testcase recently caused intermittent test failures on jenkins that are not 
+	//reproducible in local environments; hence we perform additional sanity checks here.
+	private final static boolean CHECK_IN_OUT = true;
 	
 	@Override
-	public void setUp() 
-	{
+	public void setUp() {
 		addTestConfiguration(TEST_NAME, new TestConfiguration(TEST_CLASS_DIR, TEST_NAME, new String[] { "predicted_y" }) ); 
 	}
 	
@@ -88,10 +89,14 @@ public class MulticlassSVMScoreTest extends AutomatedTestBase
 		loadTestConfiguration(config);
 	
 		//generate inputs
-		ArrayList<double[][]> Xset = generateInputs(nRuns, rows, cols, sparse?sparsity2:sparsity1); 
+		ArrayList<double[][]> Xset = generateInputs(nRuns, rows, cols, sparse?sparsity2:sparsity1);
+		if( CHECK_IN_OUT )
+			checkSelfEquivalence(Xset, rows, cols);
 		
 		//run DML via JMLC
 		ArrayList<double[][]> Yset = execDMLScriptviaJMLC( Xset, flags );
+		if( CHECK_IN_OUT )
+			checkSelfEquivalence(Yset, rows, 1);
 		
 		//run R and compare results to DML result
 		String HOME = SCRIPT_DIR + TEST_DIR;
@@ -99,8 +104,8 @@ public class MulticlassSVMScoreTest extends AutomatedTestBase
 		rCmd = getRCmd(inputDir(), expectedDir());
 
 		//write model data once
-		MatrixBlock mb = DataConverter.readMatrixFromHDFS(SCRIPT_DIR + TEST_DIR + MODEL_FILE, 
-				                       InputInfo.TextCellInputInfo, rows, cols, 1000, 1000);
+		MatrixBlock mb = DataConverter.readMatrixFromHDFS(SCRIPT_DIR + TEST_DIR + MODEL_FILE,
+				InputInfo.TextCellInputInfo, rows, cols, 1000, 1000);
 		double[][] W = DataConverter.convertToDoubleMatrix( mb );
 		writeInputMatrix("W", W, true);
 		
@@ -108,7 +113,7 @@ public class MulticlassSVMScoreTest extends AutomatedTestBase
 		for( int i=0; i<nRuns; i++ )
 		{
 			//write input data
-			writeInputMatrix("X", Xset.get(i), true);	
+			writeInputMatrix("X", Xset.get(i), true);
 			
 			//run the R script
 			runRScript(true); 
@@ -117,7 +122,7 @@ public class MulticlassSVMScoreTest extends AutomatedTestBase
 			HashMap<CellIndex, Double> rfile = readRMatrixFromFS("predicted_y");
 			double[][] expected = TestUtils.convertHashMapToDoubleArray(rfile, rows, 1);
 			
-			TestUtils.compareMatrices(expected, Yset.get(i), rows, 1, eps);	
+			TestUtils.compareMatrices(expected, Yset.get(i), rows, 1, eps);
 		}
 	}
 
@@ -140,7 +145,7 @@ public class MulticlassSVMScoreTest extends AutomatedTestBase
 			boolean parsePyDML = false;
 			
 			//read and precompile script
-			String script = conn.readScript(SCRIPT_DIR + TEST_DIR + TEST_NAME + ".dml");	
+			String script = conn.readScript(SCRIPT_DIR + TEST_DIR + TEST_NAME + ".dml");
 			PreparedScript pstmt = conn.prepareScript(script, new String[]{"X","W"}, new String[]{"predicted_y"}, parsePyDML);
 			
 			//read model
@@ -162,13 +167,11 @@ public class MulticlassSVMScoreTest extends AutomatedTestBase
 				ret.add(Y); //keep result for comparison
 			}
 		}
-		catch(Exception ex)
-		{
+		catch(Exception ex) {
 			ex.printStackTrace();
 			throw new IOException(ex);
 		}
-		finally
-		{
+		finally {
 			if( conn != null )
 				conn.close();
 		}
@@ -178,13 +181,18 @@ public class MulticlassSVMScoreTest extends AutomatedTestBase
 		return ret;
 	}
 
-	private ArrayList<double[][]> generateInputs( int num, int rows, int cols, double sparsity )
-	{
+	private ArrayList<double[][]> generateInputs( int num, int rows, int cols, double sparsity ) {
 		ArrayList<double[][]> ret = new ArrayList<double[][]>();
 		for( int i=0; i<num; i++ )
-			ret.add(getRandomMatrix(rows, cols, -1, 1, sparsity, i));
-		
+			ret.add(getRandomMatrix(rows, cols, -1, 1, sparsity, 7));
 		return ret;
 	}
 	
+	private void checkSelfEquivalence(ArrayList<double[][]> data, int rows, int cols) {
+		if( data == null || data.size() < 2 )
+			return;
+		double[][] data0 = data.get(0);
+		for(int i=1; i<data.size(); i++)
+			TestUtils.compareMatrices(data0, data.get(i), rows, cols, eps);
+	}
 }
\ No newline at end of file