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 63e6efe593 [SYSTEMDS-3805] Fix rewrite issues and python test versions
63e6efe593 is described below
commit 63e6efe593d198e9ae7113ef0f5bdf219deba7cd
Author: Matthias Boehm <[email protected]>
AuthorDate: Thu Dec 12 12:30:45 2024 +0100
[SYSTEMDS-3805] Fix rewrite issues and python test versions
- fix remaining edge cases of scalar right indexing in codegen and
various setting with inconsistent paths
- Python document from 3.7 to 3.8 because not avaiable on ubuntu 24
---
.github/workflows/documentation.yml | 4 ++--
.../sysds/hops/codegen/template/TemplateCell.java | 3 ++-
.../sysds/hops/codegen/template/TemplateRow.java | 1 +
.../RewriteAlgebraicSimplificationDynamic.java | 16 +++++++--------
.../RewriteAlgebraicSimplificationStatic.java | 3 ++-
.../codegenalg/partone/AlgorithmLinregCG.java | 2 +-
.../functions/unary/matrix/EigenFactorizeTest.java | 18 +++++-----------
src/test/scripts/functions/unary/matrix/eigen.dml | 24 ++++------------------
8 files changed, 25 insertions(+), 46 deletions(-)
diff --git a/.github/workflows/documentation.yml
b/.github/workflows/documentation.yml
index 3cdc86e505..38871d375e 100644
--- a/.github/workflows/documentation.yml
+++ b/.github/workflows/documentation.yml
@@ -55,7 +55,7 @@ jobs:
distribution: ${{ matrix.javadist }}
java-version: ${{ matrix.java }}
cache: 'maven'
-
+
- name: Make Documentation SystemDS Java
run: mvn -ntp -P distribution package
@@ -69,7 +69,7 @@ jobs:
- name: Setup Python
uses: actions/setup-python@v5
with:
- python-version: 3.7
+ python-version: 3.8
architecture: 'x64'
- name: Cache Pip Dependencies
diff --git
a/src/main/java/org/apache/sysds/hops/codegen/template/TemplateCell.java
b/src/main/java/org/apache/sysds/hops/codegen/template/TemplateCell.java
index e902c8ec07..8d0dc273eb 100644
--- a/src/main/java/org/apache/sysds/hops/codegen/template/TemplateCell.java
+++ b/src/main/java/org/apache/sysds/hops/codegen/template/TemplateCell.java
@@ -85,7 +85,8 @@ public class TemplateCell extends TemplateBase
return hop.dimsKnown() && isValidOperation(hop)
&& !(hop.getDim1()==1 && hop.getDim2()==1)
|| (hop instanceof IndexingOp &&
hop.getInput().get(0).getDim2() >= 0
- && (((IndexingOp)hop).isColLowerEqualsUpper()
|| hop.getDim2()==1))
+ && (((IndexingOp)hop).isColLowerEqualsUpper()
|| hop.getDim2()==1)
+ && !((IndexingOp)hop).isScalarOutput())
|| (HopRewriteUtils.isDataGenOpWithLiteralInputs(hop,
OpOpDG.SEQ)
&&
HopRewriteUtils.hasOnlyUnaryBinaryParents(hop, true))
|| (HopRewriteUtils.isNary(hop, OpOpN.MIN, OpOpN.MAX,
OpOpN.PLUS) && hop.isMatrix())
diff --git
a/src/main/java/org/apache/sysds/hops/codegen/template/TemplateRow.java
b/src/main/java/org/apache/sysds/hops/codegen/template/TemplateRow.java
index d811c3c14b..4ac38b1487 100644
--- a/src/main/java/org/apache/sysds/hops/codegen/template/TemplateRow.java
+++ b/src/main/java/org/apache/sysds/hops/codegen/template/TemplateRow.java
@@ -111,6 +111,7 @@ public class TemplateRow extends TemplateBase
&& HopRewriteUtils.isAggUnaryOp(hop,
SUPPORTED_ROW_AGG))
|| (hop instanceof IndexingOp &&
hop.getInput().get(0).getDim1() > 1
&& hop.getInput().get(0).getDim2() >= 0
+ && !((IndexingOp)hop).isScalarOutput()
&&
HopRewriteUtils.isColumnRangeIndexing((IndexingOp)hop))
|| (HopRewriteUtils.isDnn(hop, OpOpDnn.BIASADD,
OpOpDnn.BIASMULT)
&& hop.getInput().get(0).dimsKnown() &&
hop.getInput().get(1).dimsKnown()
diff --git
a/src/main/java/org/apache/sysds/hops/rewrite/RewriteAlgebraicSimplificationDynamic.java
b/src/main/java/org/apache/sysds/hops/rewrite/RewriteAlgebraicSimplificationDynamic.java
index 9c1f2174d0..787b87716b 100644
---
a/src/main/java/org/apache/sysds/hops/rewrite/RewriteAlgebraicSimplificationDynamic.java
+++
b/src/main/java/org/apache/sysds/hops/rewrite/RewriteAlgebraicSimplificationDynamic.java
@@ -698,7 +698,7 @@ public class RewriteAlgebraicSimplificationDynamic extends
HopRewriteRule
HopRewriteUtils.cleanupUnreferenced(hi);
hi = input;
- LOG.debug("Applied
simplifyRowwiseAggregate1");
+ LOG.debug("Applied
simplifyRowwiseAggregate1 (line "+hi.getBeginLine()+")");
}
}
else if( input.getDim1() == 1 )
@@ -1371,7 +1371,7 @@ public class RewriteAlgebraicSimplificationDynamic
extends HopRewriteRule
if( HopRewriteUtils.isEqualSize(left, right) //dims(A)
== dims(B)
&& left.getDataType() == DataType.MATRIX
- && right.getDataType() == DataType.MATRIX )
+ && right.getDataType() == DataType.MATRIX )
{
OpOp2 applyOp = ( bop.getOp() == OpOp2.PLUS
//pattern a: sum(A+B)->sum(A)+sum(B)
|| bop.getOp() == OpOp2.MINUS )
//pattern b: sum(A-B)->sum(A)-sum(B)
@@ -1380,7 +1380,7 @@ public class RewriteAlgebraicSimplificationDynamic
extends HopRewriteRule
if( applyOp != null ) {
//create new subdag sum(A) bop sum(B)
AggUnaryOp sum1 =
HopRewriteUtils.createSum(left);
- AggUnaryOp sum2 =
HopRewriteUtils.createSum(right);
+ AggUnaryOp sum2 =
HopRewriteUtils.createSum(right);
BinaryOp newBin =
HopRewriteUtils.createBinary(sum1, sum2, applyOp);
//rewire new subdag
@@ -1389,8 +1389,8 @@ public class RewriteAlgebraicSimplificationDynamic
extends HopRewriteRule
hi = newBin;
- LOG.debug("Applied
pushdownSumOnAdditiveBinary.");
- }
+ LOG.debug("Applied
pushdownSumOnAdditiveBinary (line "+hi.getBeginLine()+").");
+ }
}
}
@@ -2292,7 +2292,7 @@ public class RewriteAlgebraicSimplificationDynamic
extends HopRewriteRule
//sum(v^2)/sum(v1*v2) --> as.scalar(t(v)%*%v) in order to
exploit tsmm vector dotproduct
//w/o materialization of intermediates
if( hi instanceof AggUnaryOp &&
((AggUnaryOp)hi).getOp()==AggOp.SUM //sum
- && ((AggUnaryOp)hi).getDirection()==Direction.RowCol
//full aggregate
+ && ((AggUnaryOp)hi).getDirection()==Direction.RowCol
//full aggregate
&& hi.getInput().get(0).getDim2() == 1 ) //vector (for
correctness)
{
Hop baLeft = null;
@@ -2337,12 +2337,12 @@ public class RewriteAlgebraicSimplificationDynamic
extends HopRewriteRule
UnaryOp cast =
HopRewriteUtils.createUnary(mmult, OpOp1.CAST_AS_SCALAR);
//rehang new subdag under parent node
- HopRewriteUtils.replaceChildReference(parent,
hi, cast, pos);
+ HopRewriteUtils.replaceChildReference(parent,
hi, cast, pos);
HopRewriteUtils.cleanupUnreferenced(hi, hi2);
hi = cast;
- LOG.debug("Applied simplifyDotProductSum.");
+ LOG.debug("Applied simplifyDotProductSum (line
"+hi.getBeginLine()+").");
}
}
diff --git
a/src/main/java/org/apache/sysds/hops/rewrite/RewriteAlgebraicSimplificationStatic.java
b/src/main/java/org/apache/sysds/hops/rewrite/RewriteAlgebraicSimplificationStatic.java
index d06f89d72e..d3c8757c13 100644
---
a/src/main/java/org/apache/sysds/hops/rewrite/RewriteAlgebraicSimplificationStatic.java
+++
b/src/main/java/org/apache/sysds/hops/rewrite/RewriteAlgebraicSimplificationStatic.java
@@ -1184,7 +1184,7 @@ public class RewriteAlgebraicSimplificationStatic extends
HopRewriteRule
HopRewriteUtils.replaceChildReference(parent, hi, bop,
pos);
- LOG.debug("Applied pushdownSumBinaryMult.");
+ LOG.debug("Applied pushdownSumBinaryMult (line
"+hi.getBeginLine()+").");
return bop;
}
return hi;
@@ -1514,6 +1514,7 @@ public class RewriteAlgebraicSimplificationStatic extends
HopRewriteRule
//as.scalar(X[i,1]) -> X[i,1] w/ scalar output
if( HopRewriteUtils.isUnary(hi, OpOp1.CAST_AS_SCALAR)
&& hi.getInput(0).getParent().size() == 1 // only
consumer
+ && hi.getParent().size() == 1 //avoid temp inconsistency
&& hi.getInput(0) instanceof IndexingOp
&& ((IndexingOp)hi.getInput(0)).isScalarOutput()
&& hi.getInput(0).isMatrix() //no frame support yet
diff --git
a/src/test/java/org/apache/sysds/test/functions/codegenalg/partone/AlgorithmLinregCG.java
b/src/test/java/org/apache/sysds/test/functions/codegenalg/partone/AlgorithmLinregCG.java
index 3061b53cde..bef7dc8a15 100644
---
a/src/test/java/org/apache/sysds/test/functions/codegenalg/partone/AlgorithmLinregCG.java
+++
b/src/test/java/org/apache/sysds/test/functions/codegenalg/partone/AlgorithmLinregCG.java
@@ -318,7 +318,7 @@ public class AlgorithmLinregCG extends AutomatedTestBase
loadTestConfiguration(config);
fullDMLScriptName = getScript();
- programArgs = new String[]{ "-stats", "-nvargs",
"X="+input("X"), "Y="+input("y"),
+ programArgs = new String[]{ "-explain","-stats",
"-nvargs", "X="+input("X"), "Y="+input("y"),
"icpt="+String.valueOf(intercept),
"tol="+String.valueOf(epsilon),
"maxi="+String.valueOf(maxiter), "reg=0.001",
"B="+output("w")};
diff --git
a/src/test/java/org/apache/sysds/test/functions/unary/matrix/EigenFactorizeTest.java
b/src/test/java/org/apache/sysds/test/functions/unary/matrix/EigenFactorizeTest.java
index 750f7d6dc2..0916286632 100644
---
a/src/test/java/org/apache/sysds/test/functions/unary/matrix/EigenFactorizeTest.java
+++
b/src/test/java/org/apache/sysds/test/functions/unary/matrix/EigenFactorizeTest.java
@@ -20,7 +20,6 @@
package org.apache.sysds.test.functions.unary.matrix;
import org.junit.Test;
-import org.apache.sysds.api.DMLScript;
import org.apache.sysds.common.Types.ExecMode;
import org.apache.sysds.runtime.meta.MatrixCharacteristics;
import org.apache.sysds.test.AutomatedTestBase;
@@ -74,13 +73,8 @@ public class EigenFactorizeTest extends AutomatedTestBase
}
private void runTestEigenFactorize( int rows, ExecMode rt)
- {
- ExecMode rtold = rtplatform;
- rtplatform = rt;
-
- boolean sparkConfigOld = DMLScript.USE_LOCAL_SPARK_CONFIG;
- if( rtplatform == ExecMode.SPARK )
- DMLScript.USE_LOCAL_SPARK_CONFIG = true;
+ {
+ ExecMode rtold = setExecMode(rt);
try
{
@@ -100,16 +94,14 @@ public class EigenFactorizeTest extends AutomatedTestBase
for(int i=0; i < numEigenValuesToEvaluate; i++) {
D[i][0] = 0.0;
}
- writeExpectedMatrix("D", D);
+ writeExpectedMatrix("D", D);
boolean exceptionExpected = false;
runTest(true, exceptionExpected, null, -1);
compareResults(1e-8);
}
finally {
- DMLScript.USE_LOCAL_SPARK_CONFIG = sparkConfigOld;
- rtplatform = rtold;
+ resetExecMode(rtold);
}
}
-
-}
\ No newline at end of file
+}
diff --git a/src/test/scripts/functions/unary/matrix/eigen.dml
b/src/test/scripts/functions/unary/matrix/eigen.dml
index 12a2f8788d..f863a0a8e6 100644
--- a/src/test/scripts/functions/unary/matrix/eigen.dml
+++ b/src/test/scripts/functions/unary/matrix/eigen.dml
@@ -7,9 +7,9 @@
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
-#
+#
# http://www.apache.org/licenses/LICENSE-2.0
-#
+#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -29,32 +29,16 @@ A = t(A) %*% A; # make the input matrix symmetric
[eval, evec] = eigen(A);
-/*
-B = evec %*% diag(eval) %*% t(evec);
-diff = sum(A - B);
-D = matrix(1,1,1);
-D = diff*D;
-*/
-
numEval = $2;
D = matrix(1, numEval, 1);
for ( i in 1:numEval ) {
Av = A %*% evec[,i];
+ while(FALSE){} #fix incorrect rewrite sequence
rhs = as.scalar(eval[i,1]) * evec[,i];
+ while(FALSE){} #fix incorrect rewrite sequence
diff = sum(Av-rhs);
D[i,1] = diff;
}
-/*
-# TODO: dummy if() must be removed
-v = evec[,1];
-Av = A %*% v;
-rhs = as.scalar(eval[1,1]) * evec[,1];
-diff = sum(Av-rhs);
-
-D = matrix(1,1,1);
-D = diff*D;
-*/
-
write(D, $3);