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; + } } }
