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 3f9e903e3f [SYSTEMDS-3674] Fix robustness print of
matrices/frames/lists
3f9e903e3f is described below
commit 3f9e903e3f153552f2865fddf7cdb040e25e1cea
Author: Matthias Boehm <[email protected]>
AuthorDate: Thu Mar 21 17:55:29 2024 +0100
[SYSTEMDS-3674] Fix robustness print of matrices/frames/lists
This patch adds a rewrite to inject toString primitives during initial
compilation and recompilation in order to mitigate incomprehensible
errors on printing non-scalars (e.g., in conditional control flow
where parser errors are turned into warnings).
---
.../apache/sysds/hops/rewrite/HopRewriteUtils.java | 4 +++-
.../rewrite/RewriteAlgebraicSimplificationStatic.java | 19 +++++++++++++++++--
2 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/src/main/java/org/apache/sysds/hops/rewrite/HopRewriteUtils.java
b/src/main/java/org/apache/sysds/hops/rewrite/HopRewriteUtils.java
index b2460e7697..eab6a861f8 100644
--- a/src/main/java/org/apache/sysds/hops/rewrite/HopRewriteUtils.java
+++ b/src/main/java/org/apache/sysds/hops/rewrite/HopRewriteUtils.java
@@ -697,7 +697,9 @@ public class HopRewriteUtils {
}
public static ParameterizedBuiltinOp createParameterizedBuiltinOp(Hop
input, LinkedHashMap<String,Hop> args, ParamBuiltinOp op) {
- ParameterizedBuiltinOp pbop = new ParameterizedBuiltinOp("tmp",
DataType.MATRIX, ValueType.FP64, op, args);
+ DataType dt = op == ParamBuiltinOp.TOSTRING ? DataType.SCALAR :
DataType.MATRIX;
+ ValueType vt = op == ParamBuiltinOp.TOSTRING ? ValueType.STRING
: ValueType.FP64;
+ ParameterizedBuiltinOp pbop = new ParameterizedBuiltinOp("tmp",
dt, vt, op, args);
pbop.setBlocksize(input.getBlocksize());
copyLineNumbers(input, pbop);
pbop.refreshSizeInformation();
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 a867735e50..f1065ea832 100644
---
a/src/main/java/org/apache/sysds/hops/rewrite/RewriteAlgebraicSimplificationStatic.java
+++
b/src/main/java/org/apache/sysds/hops/rewrite/RewriteAlgebraicSimplificationStatic.java
@@ -190,10 +190,11 @@ public class RewriteAlgebraicSimplificationStatic extends
HopRewriteRule
hi = simplifyCumsumColOrFullAggregates(hi);
//e.g., colSums(cumsum(X)) -> cumSums(X*seq(nrow(X),1))
hi = simplifyCumsumReverse(hop, hi, i);
//e.g., rev(cumsum(rev(X))) -> X + colSums(X) - cumsum(X)
- hi = simplifyNotOverComparisons(hop, hi, i);
//e.g., !(A>B) -> (A<=B)
-
+ hi = simplifyNotOverComparisons(hop, hi, i);
//e.g., !(A>B) -> (A<=B)
//hi = removeUnecessaryPPred(hop, hi, i);
//e.g., ppred(X,X,"==")->matrix(1,rows=nrow(X),cols=ncol(X))
+ hi = fixNonScalarPrint(hop, hi, i);
//e.g., print(m) -> print(toString(m))
+
//process childs recursively after rewrites (to
investigate pattern newly created by rewrites)
if( !descendFirst )
rule_AlgebraicSimplification(hi, descendFirst);
@@ -2016,6 +2017,20 @@ public class RewriteAlgebraicSimplificationStatic
extends HopRewriteRule
return hi;
}
+ private static Hop fixNonScalarPrint(Hop parent, Hop hi, int pos) {
+ if(HopRewriteUtils.isUnary(parent, OpOp1.PRINT) &&
!hi.getDataType().isScalar()) {
+ LinkedHashMap<String, Hop> args = new LinkedHashMap<>();
+ args.put("target", hi);
+ Hop newHop =
HopRewriteUtils.createParameterizedBuiltinOp(
+ hi, args, ParamBuiltinOp.TOSTRING);
+ HopRewriteUtils.replaceChildReference(parent, hi,
newHop, pos);
+ hi = newHop;
+ LOG.debug("Applied fixNonScalarPrint (line " +
hi.getBeginLine() + ")");
+ }
+
+ return hi;
+ }
+
/**
* NOTE: currently disabled since this rewrite is INVALID in the
* presence of NaNs (because (NaN!=NaN) is true).