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

baunsgaard pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/systemds.git

commit 657a1bacca9a83dba1632df156979fec7bfaee5a
Author: baunsgaard <[email protected]>
AuthorDate: Wed Oct 19 17:02:34 2022 +0200

    [SYSTEMDS-3445] N Way combining Interface
---
 .../sysds/runtime/compress/colgroup/AColGroup.java | 26 +++++++++++++++++++++-
 .../runtime/compress/colgroup/ColGroupConst.java   |  9 ++++++++
 .../runtime/compress/colgroup/ColGroupDDC.java     |  6 +++++
 .../runtime/compress/colgroup/ColGroupDDCFOR.java  |  5 +++++
 .../runtime/compress/colgroup/ColGroupEmpty.java   |  8 +++++++
 .../colgroup/ColGroupLinearFunctional.java         |  5 +++++
 .../runtime/compress/colgroup/ColGroupOLE.java     |  5 +++++
 .../runtime/compress/colgroup/ColGroupRLE.java     |  5 +++++
 .../runtime/compress/colgroup/ColGroupSDC.java     |  5 +++++
 .../runtime/compress/colgroup/ColGroupSDCFOR.java  |  5 +++++
 .../compress/colgroup/ColGroupSDCSingle.java       |  5 +++++
 .../compress/colgroup/ColGroupSDCSingleZeros.java  |  5 +++++
 .../compress/colgroup/ColGroupSDCZeros.java        |  5 +++++
 .../compress/colgroup/ColGroupUncompressed.java    |  5 +++++
 .../sysds/runtime/compress/lib/CLALibCombine.java  |  5 +----
 .../compress/colgroup/ColGroupNegativeTests.java   | 12 ++++++++++
 16 files changed, 111 insertions(+), 5 deletions(-)

diff --git 
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/AColGroup.java 
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/AColGroup.java
index efaef22cde..10c374b29f 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/colgroup/AColGroup.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/colgroup/AColGroup.java
@@ -611,10 +611,34 @@ public abstract class AColGroup implements Serializable {
         * If it is not possible or very inefficient null is returned.
         * 
         * @param g The other column group
-        * @return A combined column group
+        * @return A combined column group or null
         */
        public abstract AColGroup append(AColGroup g);
 
+       /**
+        * Append all column groups in the list provided together in one go 
allocating the output once.
+        * 
+        * If it is not possible or very inefficient null is returned.
+        * 
+        * @param groups The groups to combine.
+        * @return A combined column group or null
+        */
+       public static AColGroup appendN(AColGroup[] groups) {
+               return groups[0].appendNInternal(groups);
+       }
+
+       /**
+        * Append all column groups in the list provided together with this.
+        * 
+        * A Important detail is the first entry in the group == this, and 
should not be appended twice.
+        * 
+        * If it is not possible or very inefficient null is returned.
+        * 
+        * @param groups The groups to combine.
+        * @return A combined column group or null
+        */
+       protected abstract AColGroup appendNInternal(AColGroup[] groups);
+
        @Override
        public String toString() {
                StringBuilder sb = new StringBuilder();
diff --git 
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupConst.java 
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupConst.java
index aa1b5e229e..91f4ff4003 100644
--- 
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupConst.java
+++ 
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupConst.java
@@ -21,6 +21,7 @@ package org.apache.sysds.runtime.compress.colgroup;
 
 import java.io.DataInput;
 import java.io.IOException;
+import java.util.Arrays;
 
 import org.apache.sysds.runtime.compress.DMLCompressionException;
 import org.apache.sysds.runtime.compress.colgroup.dictionary.ADictionary;
@@ -527,6 +528,14 @@ public class ColGroupConst extends ADictBasedColGroup {
                return null;
        }
 
+       @Override
+       public AColGroup appendNInternal(AColGroup[] g) {
+               for(int i = 0; i < g.length; i++)
+                       if(!Arrays.equals(_colIndexes, g[i]._colIndexes) || 
!this._dict.eq(((ColGroupConst) g[i])._dict))
+                               return null;
+               return this;
+       }
+
        @Override
        public String toString() {
                StringBuilder sb = new StringBuilder();
diff --git 
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupDDC.java 
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupDDC.java
index ce2c691cca..9ef46554d0 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupDDC.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupDDC.java
@@ -506,6 +506,12 @@ public class ColGroupDDC extends APreAgg {
                return null;
        }
 
+
+       @Override
+       public AColGroup appendNInternal(AColGroup[] g) {
+               return null;
+       }
+
        @Override
        public String toString() {
                StringBuilder sb = new StringBuilder();
diff --git 
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupDDCFOR.java 
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupDDCFOR.java
index b2f3ff1dd5..effc025de1 100644
--- 
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupDDCFOR.java
+++ 
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupDDCFOR.java
@@ -445,6 +445,11 @@ public class ColGroupDDCFOR extends AMorphingMMColGroup {
                return null;
        }
 
+       @Override
+       public AColGroup appendNInternal(AColGroup[] g) {
+               return null;
+       }
+
        @Override
        public String toString() {
                StringBuilder sb = new StringBuilder();
diff --git 
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupEmpty.java 
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupEmpty.java
index 27230957ec..b5133c73e3 100644
--- 
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupEmpty.java
+++ 
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupEmpty.java
@@ -319,4 +319,12 @@ public class ColGroupEmpty extends AColGroupCompressed {
                return null;
        }
 
+       @Override
+       public AColGroup appendNInternal(AColGroup[] g) {
+               for(int i = 0; i < g.length; i++)
+                       if(!Arrays.equals(_colIndexes, g[i]._colIndexes))
+                               return null;
+               return this;
+       }
+
 }
diff --git 
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupLinearFunctional.java
 
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupLinearFunctional.java
index 45e474e3b8..4482dfe6ed 100644
--- 
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupLinearFunctional.java
+++ 
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupLinearFunctional.java
@@ -670,4 +670,9 @@ public class ColGroupLinearFunctional extends 
AColGroupCompressed {
                return null;
        }
 
+       @Override
+       public AColGroup appendNInternal(AColGroup[] g) {
+               return null;
+       }
+
 }
diff --git 
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupOLE.java 
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupOLE.java
index 04fb526513..d92fda137a 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupOLE.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupOLE.java
@@ -660,4 +660,9 @@ public class ColGroupOLE extends AColGroupOffset {
                return null;
        }
 
+       @Override
+       public AColGroup appendNInternal(AColGroup[] g) {
+               return null;
+       }
+
 }
diff --git 
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupRLE.java 
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupRLE.java
index bda8175267..426ad96493 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupRLE.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupRLE.java
@@ -972,6 +972,11 @@ public class ColGroupRLE extends AColGroupOffset {
                return null;
        }
 
+       @Override
+       public AColGroup appendNInternal(AColGroup[] g) {
+               return null;
+       }
+
        @Override
        public String toString() {
                StringBuilder sb = new StringBuilder();
diff --git 
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDC.java 
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDC.java
index f266f9a8fb..d36cd0289b 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDC.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDC.java
@@ -582,6 +582,11 @@ public class ColGroupSDC extends ASDC {
                return null;
        }
 
+       @Override
+       public AColGroup appendNInternal(AColGroup[] g) {
+               return null;
+       }
+
        @Override
        public String toString() {
                StringBuilder sb = new StringBuilder();
diff --git 
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCFOR.java 
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCFOR.java
index a47edbbf72..30f0e7568e 100644
--- 
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCFOR.java
+++ 
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCFOR.java
@@ -444,6 +444,11 @@ public class ColGroupSDCFOR extends ASDC {
                return null;
        }
 
+       @Override
+       public AColGroup appendNInternal(AColGroup[] g) {
+               return null;
+       }
+
        @Override
        public String toString() {
                StringBuilder sb = new StringBuilder();
diff --git 
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCSingle.java
 
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCSingle.java
index af397f5049..6a2851e753 100644
--- 
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCSingle.java
+++ 
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCSingle.java
@@ -581,6 +581,11 @@ public class ColGroupSDCSingle extends ASDC {
                return null;
        }
 
+       @Override
+       public AColGroup appendNInternal(AColGroup[] g) {
+               return null;
+       }
+
        @Override
        public String toString() {
                StringBuilder sb = new StringBuilder();
diff --git 
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCSingleZeros.java
 
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCSingleZeros.java
index 24eb000398..e044446b33 100644
--- 
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCSingleZeros.java
+++ 
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCSingleZeros.java
@@ -814,6 +814,11 @@ public class ColGroupSDCSingleZeros extends ASDCZero {
                return null;
        }
 
+       @Override
+       public AColGroup appendNInternal(AColGroup[] g) {
+               return null;
+       }
+
        @Override
        public String toString() {
                StringBuilder sb = new StringBuilder();
diff --git 
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCZeros.java
 
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCZeros.java
index 5d9e2b4ddb..2d4fc037e8 100644
--- 
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCZeros.java
+++ 
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCZeros.java
@@ -725,6 +725,11 @@ public class ColGroupSDCZeros extends ASDCZero {
                return null;
        }
 
+       @Override
+       public AColGroup appendNInternal(AColGroup[] g) {
+               return null;
+       }
+
        @Override
        public String toString() {
                StringBuilder sb = new StringBuilder();
diff --git 
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupUncompressed.java
 
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupUncompressed.java
index 7c173cb6d1..a56d681d31 100644
--- 
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupUncompressed.java
+++ 
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupUncompressed.java
@@ -775,6 +775,11 @@ public class ColGroupUncompressed extends AColGroup {
                return null;
        }
 
+       @Override
+       public AColGroup appendNInternal(AColGroup[] g) {
+               return null;
+       }
+
        @Override
        public String toString() {
                StringBuilder sb = new StringBuilder();
diff --git 
a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibCombine.java 
b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibCombine.java
index ca54f7d181..1e01a3b423 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibCombine.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibCombine.java
@@ -187,9 +187,6 @@ public class CLALibCombine {
        }
 
        private static AColGroup combineN(AColGroup[] groups) {
-               AColGroup r = groups[0];
-               for(int i = 1; i < groups.length && r != null; i++)
-                       r = r.append(groups[i]);
-               return r;
+               return AColGroup.appendN(groups);
        }
 }
diff --git 
a/src/test/java/org/apache/sysds/test/component/compress/colgroup/ColGroupNegativeTests.java
 
b/src/test/java/org/apache/sysds/test/component/compress/colgroup/ColGroupNegativeTests.java
index 135228ffdd..02bd763e8b 100644
--- 
a/src/test/java/org/apache/sysds/test/component/compress/colgroup/ColGroupNegativeTests.java
+++ 
b/src/test/java/org/apache/sysds/test/component/compress/colgroup/ColGroupNegativeTests.java
@@ -360,6 +360,12 @@ public class ColGroupNegativeTests {
                        // TODO Auto-generated method stub
                        return null;
                }
+
+               @Override
+               protected AColGroup appendNInternal(AColGroup[] groups) {
+                       // TODO Auto-generated method stub
+                       return null;
+               }
        }
 
        private class FakeDictBasedColGroup extends ADictBasedColGroup {
@@ -572,5 +578,11 @@ public class ColGroupNegativeTests {
                        // TODO Auto-generated method stub
                        return null;
                }
+
+               @Override
+               protected AColGroup appendNInternal(AColGroup[] groups) {
+                       // TODO Auto-generated method stub
+                       return null;
+               }
        }
 }

Reply via email to