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

mboehm7 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 1690f13  [MINOR] Cleanup set operations (formatting, rm unnecessary 
ops)
1690f13 is described below

commit 1690f13861a1c1b7702b6811249bf0ff991fd352
Author: Matthias Boehm <[email protected]>
AuthorDate: Sat Dec 18 21:04:59 2021 +0100

    [MINOR] Cleanup set operations (formatting, rm unnecessary ops)
---
 scripts/builtin/intersect.dml | 17 ++++++++---------
 scripts/builtin/setdiff.dml   | 20 ++++++++------------
 scripts/builtin/union.dml     |  5 ++---
 scripts/builtin/unique.dml    | 20 ++++++++++----------
 4 files changed, 28 insertions(+), 34 deletions(-)

diff --git a/scripts/builtin/intersect.dml b/scripts/builtin/intersect.dml
index bf16c60..747e1bf 100644
--- a/scripts/builtin/intersect.dml
+++ b/scripts/builtin/intersect.dml
@@ -19,7 +19,7 @@
 #
 #-------------------------------------------------------------
 
-# Implements set intersection for numeric data  
+# Implements set intersection for numeric data
 
 
 # INPUT PARAMETERS:
@@ -39,14 +39,13 @@
 m_intersect = function(Matrix[Double] X, Matrix[Double] Y)
   return(Matrix[Double] R)
 {
-    X = unique(X);
-    Y = unique(Y);
+  X = unique(X);
+  Y = unique(Y);
+  combined = rbind(X, Y);
 
-    combined = rbind(X, Y);
+  combined = order(target=combined, by=1, decreasing=FALSE, 
index.return=FALSE);
+  temp = combined[1:nrow(combined)-1,] == combined[2:nrow(combined),];
+  mask = rbind(matrix(0,1,1), temp);
 
-    combined = order(target=combined, by=1, decreasing=FALSE, 
index.return=FALSE);
-    temp = combined[1:nrow(combined)-1,] != combined[2:nrow(combined),];
-    mask = rbind(matrix(1, rows = 1, cols = 1), rowSums(temp));
-
-    R = removeEmpty(target = combined, margin = "rows", select = !mask);
+  R = removeEmpty(target = combined, margin = "rows", select = mask);
 }
diff --git a/scripts/builtin/setdiff.dml b/scripts/builtin/setdiff.dml
index 72b01f8..df74591 100644
--- a/scripts/builtin/setdiff.dml
+++ b/scripts/builtin/setdiff.dml
@@ -36,18 +36,14 @@
 # 
---------------------------------------------------------------------------------------------
 # R               Matrix  ---         vector with all elements that are 
present in X but not in Y
 
-
 setdiff = function(Matrix[double] X, Matrix[double] Y)
-    return (matrix[double] R)
+  return (matrix[double] R)
 {
-    common = intersect(X, Y);
-    X = unique(X);
-    combined = rbind(X, common);
-    combined = order(target=combined, by=1, decreasing=FALSE, 
index.return=FALSE);
-    temp = combined[1:nrow(combined)-1,] != combined[2:nrow(combined),];
-    mask1 = rbind(rowSums(temp), matrix(1, rows=1, cols=1));
-    mask2 = rbind(matrix(1, rows = 1, cols = 1), rowSums(temp));
-
-    mask = mask1 & mask2;
-    R = removeEmpty(target = combined, margin = "rows", select = mask);
+  common = intersect(X, Y);
+  X = unique(X);
+  combined = order(target=rbind(X,common), by=1, decreasing=FALSE, 
index.return=FALSE);
+  temp = combined[1:nrow(combined)-1,] != combined[2:nrow(combined),];
+  mask = rbind(temp, matrix(1, 1, 1))
+       & rbind(matrix(1, 1, 1), temp);
+  R = removeEmpty(target = combined, margin = "rows", select = mask);
 }
diff --git a/scripts/builtin/union.dml b/scripts/builtin/union.dml
index fa3609b..b75e093 100644
--- a/scripts/builtin/union.dml
+++ b/scripts/builtin/union.dml
@@ -38,8 +38,7 @@
 
 
 union = function(Matrix[Double] X, Matrix[Double] Y)
-    return (matrix[double] R)
+  return (matrix[double] R)
 {
-    combined = rbind(X,Y);
-    R = unique(combined);
+  R = unique(rbind(X, Y));
 }
diff --git a/scripts/builtin/unique.dml b/scripts/builtin/unique.dml
index 94699be..f4db3bf 100644
--- a/scripts/builtin/unique.dml
+++ b/scripts/builtin/unique.dml
@@ -35,14 +35,14 @@
 # R               Matrix  ---         matrix with only unique rows
 
 unique = function(matrix[double] X)
-    return (matrix[double] R) {
-    if(nrow(X) > 1) {
-        X_sorted = order(target=X, by=1, decreasing=FALSE, index.return=FALSE);
-        temp = X_sorted[1:nrow(X_sorted)-1,] != X_sorted[2:nrow(X_sorted),];
-        mask = rbind(matrix(1, rows = 1, cols = 1), rowSums(temp));
-        R = removeEmpty(target = X_sorted, margin = "rows", select = mask);
-    }
-    else {
-        R = X
-    }
+  return (matrix[double] R)
+{
+  R = X
+  if(nrow(X) > 1) {
+    # sort-based approach (a generic alternative would be transformencode)
+    X_sorted = order(target=X, by=1, decreasing=FALSE, index.return=FALSE);
+    temp = X_sorted[1:nrow(X_sorted)-1,] != X_sorted[2:nrow(X_sorted),];
+    mask = rbind(matrix(1, 1, 1), temp);
+    R = removeEmpty(target = X_sorted, margin = "rows", select = mask);
+  }
 }

Reply via email to