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 2020/05/25 19:12:14 UTC

[systemml] branch master updated: [SYSTEMDS-393] Fix convergence condition of connected components builtin

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/systemml.git


The following commit(s) were added to refs/heads/master by this push:
     new b66a3c0  [SYSTEMDS-393] Fix convergence condition of connected components builtin
b66a3c0 is described below

commit b66a3c006ce6a3a888653e2d1accec479cc756fd
Author: Matthias Boehm <mb...@gmail.com>
AuthorDate: Mon May 25 21:11:52 2020 +0200

    [SYSTEMDS-393] Fix convergence condition of connected components builtin
---
 scripts/builtin/components.dml                           |  2 +-
 .../test/functions/builtin/BuiltinComponentsTest.java    | 16 +++++++++++-----
 .../scripts/functions/builtin/ConnectedComponents.dml    |  4 ++--
 3 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/scripts/builtin/components.dml b/scripts/builtin/components.dml
index f760a49..51d96db 100644
--- a/scripts/builtin/components.dml
+++ b/scripts/builtin/components.dml
@@ -40,7 +40,7 @@ m_components = function(Matrix[Double] G, Integer maxi = 0, Boolean verbose = TR
   iter = 1;
 
   # iterative computation of connected components
-  while( diff > 0 & (maxi==0 | maxi<=iter) ) {
+  while( diff > 0 & (maxi==0 | iter<=maxi) ) {
     u = max(rowMaxs(G * t(c)), c);
     diff = sum(u != c)
     c = u; # update assignment
diff --git a/src/test/java/org/apache/sysds/test/functions/builtin/BuiltinComponentsTest.java b/src/test/java/org/apache/sysds/test/functions/builtin/BuiltinComponentsTest.java
index e541f9d..8c1b05b 100644
--- a/src/test/java/org/apache/sysds/test/functions/builtin/BuiltinComponentsTest.java
+++ b/src/test/java/org/apache/sysds/test/functions/builtin/BuiltinComponentsTest.java
@@ -45,20 +45,25 @@ public class BuiltinComponentsTest extends AutomatedTestBase {
 
 	@Test
 	public void testConnectedComponents11CP() {
-		runConnectedComponentsTest(11, LopProperties.ExecType.CP);
+		runConnectedComponentsTest(11, 0, LopProperties.ExecType.CP);
 	}
 	
 	@Test
 	public void testConnectedComponents201CP() {
-		runConnectedComponentsTest(201, LopProperties.ExecType.CP);
+		runConnectedComponentsTest(201, 0, LopProperties.ExecType.CP);
 	}
 	
 	@Test
 	public void testConnectedComponents2001CP() {
-		runConnectedComponentsTest(2001, LopProperties.ExecType.CP);
+		runConnectedComponentsTest(2001, 0, LopProperties.ExecType.CP);
+	}
+	
+	@Test
+	public void testConnectedComponents11Maxi100CP() {
+		runConnectedComponentsTest(11, 100, LopProperties.ExecType.CP);
 	}
 
-	private void runConnectedComponentsTest(int numVertices, ExecType instType)
+	private void runConnectedComponentsTest(int numVertices, int maxi, ExecType instType)
 	{
 		Types.ExecMode platformOld = setExecMode(instType);
 
@@ -68,7 +73,8 @@ public class BuiltinComponentsTest extends AutomatedTestBase {
 
 			String HOME = SCRIPT_DIR + TEST_DIR;
 			fullDMLScriptName = HOME + TEST_NAME + ".dml";
-			programArgs = new String[]{ "-args", input("X"), output("R")};
+			programArgs = new String[]{ "-args",
+				input("X"), String.valueOf(maxi), output("R")};
 
 			//generate actual dataset (3 components)
 			double[][] X = new double[numVertices-3][2];
diff --git a/src/test/scripts/functions/builtin/ConnectedComponents.dml b/src/test/scripts/functions/builtin/ConnectedComponents.dml
index 0c6fbe7..56403a8 100644
--- a/src/test/scripts/functions/builtin/ConnectedComponents.dml
+++ b/src/test/scripts/functions/builtin/ConnectedComponents.dml
@@ -23,6 +23,6 @@ X = read($1)
 n = max(X);
 G = table(X[,1], X[, 2], n, n)
 G = G + t(G); #symmetry
-C = components(G=G, verbose=FALSE)
+C = components(G=G, maxi=$2, verbose=FALSE)
 
-write(C, $2)
+write(C, $3)