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/06/22 03:51:12 UTC

systemml git commit: [SYSTEMML-1724] Remove Guava from compile-time dependencies

Repository: systemml
Updated Branches:
  refs/heads/master a5c834b27 -> 87cc5ee67


[SYSTEMML-1724] Remove Guava from compile-time dependencies

Remove addition of Guava compile-time dependency from SYSTEMML-1663.
Replace with Java 8 and standard collections classes.

Closes #549.


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

Branch: refs/heads/master
Commit: 87cc5ee67d055ed0628f3128b10dbdeb3ec149d5
Parents: a5c834b
Author: Dylan Hutchison <dh...@cs.washington.edu>
Authored: Wed Jun 21 20:50:33 2017 -0700
Committer: Matthias Boehm <mb...@gmail.com>
Committed: Wed Jun 21 20:50:33 2017 -0700

----------------------------------------------------------------------
 .../sysml/hops/rewrite/HopDagValidator.java     | 13 +++++----
 ...RewriteElementwiseMultChainOptimization.java | 29 +++++++++++---------
 2 files changed, 23 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/systemml/blob/87cc5ee6/src/main/java/org/apache/sysml/hops/rewrite/HopDagValidator.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/rewrite/HopDagValidator.java b/src/main/java/org/apache/sysml/hops/rewrite/HopDagValidator.java
index 9ac21fc..39c3afe 100644
--- a/src/main/java/org/apache/sysml/hops/rewrite/HopDagValidator.java
+++ b/src/main/java/org/apache/sysml/hops/rewrite/HopDagValidator.java
@@ -22,10 +22,10 @@ package org.apache.sysml.hops.rewrite;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-
 import org.apache.sysml.hops.DataOp;
 import org.apache.sysml.hops.FunctionOp;
 import org.apache.sysml.hops.Hop;
@@ -35,8 +35,6 @@ import org.apache.sysml.parser.Expression;
 import org.apache.sysml.runtime.DMLRuntimeException;
 import org.apache.sysml.utils.Explain;
 
-import com.google.common.collect.Lists;
-
 import static org.apache.sysml.hops.HopsException.check;
 
 /**
@@ -90,9 +88,12 @@ public class HopDagValidator {
 
 		//check visit status
 		final boolean seen = !state.seen.add(id);
-		check(seen == hop.isVisited(), hop,
-				"(parents: %s) seen previously is %b but does not match hop visit status",
-				Lists.transform(hop.getParent(), Hop::getHopID), seen);
+		if (seen != hop.isVisited()) {
+			String parentIDs = hop.getParent().stream()
+					.map(h -> Long.toString(h.getHopID())).collect(Collectors.joining(", "));
+			//noinspection ConstantConditions
+			check(false, hop, parentIDs, seen);
+		}
 		if (seen) return; // we saw the Hop previously, no need to re-validate
 		
 		//check parent linking

http://git-wip-us.apache.org/repos/asf/systemml/blob/87cc5ee6/src/main/java/org/apache/sysml/hops/rewrite/RewriteElementwiseMultChainOptimization.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/rewrite/RewriteElementwiseMultChainOptimization.java b/src/main/java/org/apache/sysml/hops/rewrite/RewriteElementwiseMultChainOptimization.java
index fe2a5d0..c2c3b11 100644
--- a/src/main/java/org/apache/sysml/hops/rewrite/RewriteElementwiseMultChainOptimization.java
+++ b/src/main/java/org/apache/sysml/hops/rewrite/RewriteElementwiseMultChainOptimization.java
@@ -21,6 +21,7 @@ package org.apache.sysml.hops.rewrite;
 
 import java.util.ArrayList;
 import java.util.Comparator;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
@@ -34,9 +35,6 @@ import org.apache.sysml.hops.HopsException;
 import org.apache.sysml.hops.LiteralOp;
 import org.apache.sysml.parser.Expression;
 
-import com.google.common.collect.HashMultiset;
-import com.google.common.collect.Multiset;
-
 /**
  * Prerequisite: RewriteCommonSubexpressionElimination must run before this rule.
  *
@@ -79,7 +77,7 @@ public class RewriteElementwiseMultChainOptimization extends HopRewriteRule {
 		if (isBinaryMult(root)) {
 			final Hop left = root.getInput().get(0), right = root.getInput().get(1);
 			final Set<BinaryOp> emults = new HashSet<>();
-			final Multiset<Hop> leaves = HashMultiset.create();
+			final Map<Hop, Integer> leaves = new HashMap<>(); // poor man's HashMultiset
 			findEMultsAndLeaves((BinaryOp)root, emults, leaves);
 
 			// 2. Ensure it is profitable to do a rewrite.
@@ -101,7 +99,7 @@ public class RewriteElementwiseMultChainOptimization extends HopRewriteRule {
 					final Hop newRoot = HopRewriteUtils.rewireAllParentChildReferences(root, replacement);
 
 					// 6. Recurse at leaves (no need to repeat the interior emults)
-					for (final Hop leaf : leaves.elementSet()) {
+					for (final Hop leaf : leaves.keySet()) {
 						recurseInputs(leaf);
 					}
 					return newRoot;
@@ -123,15 +121,15 @@ public class RewriteElementwiseMultChainOptimization extends HopRewriteRule {
 		}
 	}
 
-	private static Hop constructReplacement(final Set<BinaryOp> emults, final Multiset<Hop> leaves) {
+	private static Hop constructReplacement(final Set<BinaryOp> emults, final Map<Hop, Integer> leaves) {
 		// Sort by data type
 		final SortedMap<Hop,Integer> sorted = new TreeMap<>(compareByDataType);
-		for (final Multiset.Entry<Hop> entry : leaves.entrySet()) {
-			final Hop h = entry.getElement();
+		for (final Map.Entry<Hop, Integer> entry : leaves.entrySet()) {
+			final Hop h = entry.getKey();
 			// unlink parents that are in the emult set(we are throwing them away)
 			// keep other parents
 			h.getParent().removeIf(parent -> parent instanceof BinaryOp && emults.contains(parent));
-			sorted.put(h, entry.getCount());
+			sorted.put(h, entry.getValue());
 		}
 		// sorted contains all leaves, sorted by data type, stripped from their parents
 
@@ -244,7 +242,8 @@ public class RewriteElementwiseMultChainOptimization extends HopRewriteRule {
 	 * @param emults Out parameter. The set of BinaryOp element-wise multiply hops in the emult chain (including root).
 	 * @param leaves Out parameter. The multiset of multiplicands in the emult chain.
 	 */
-	private static void findEMultsAndLeaves(final BinaryOp root, final Set<BinaryOp> emults, final Multiset<Hop> leaves) {
+	private static void findEMultsAndLeaves(final BinaryOp root, final Set<BinaryOp> emults,
+			final Map<Hop, Integer> leaves) {
 		// Because RewriteCommonSubexpressionElimination already ran, it is safe to compare by equality.
 		emults.add(root);
 		
@@ -257,12 +256,16 @@ public class RewriteElementwiseMultChainOptimization extends HopRewriteRule {
 		if (isBinaryMult(left))
 			findEMultsAndLeaves((BinaryOp) left, emults, leaves);
 		else
-			leaves.add(left);
+			addMultiset(leaves, left);
 
 		if (isBinaryMult(right))
 			findEMultsAndLeaves((BinaryOp) right, emults, leaves);
 		else
-			leaves.add(right);
+			addMultiset(leaves, right);
+	}
+
+	private static <K> void addMultiset(final Map<K,Integer> map, final K k) {
+		map.put(k, map.getOrDefault(k, 0) + 1);
 	}
 
 	/**
@@ -271,7 +274,7 @@ public class RewriteElementwiseMultChainOptimization extends HopRewriteRule {
 	 * @param leaves The multiset of multiplicands in the emult chain.
 	 * @return If the multiset is worth optimizing.
 	 */
-	private static boolean isOptimizable(Set<BinaryOp> emults, final Multiset<Hop> leaves) {
+	private static boolean isOptimizable(final Set<BinaryOp> emults, final Map<Hop, Integer> leaves) {
 		return emults.size() >= 2;
 	}
 }