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). 

Reply via email to