[SYSTEMML-1624] Fix correctness matrix-scalar pow (sparse-safeness)

This patch a correctness issue of right matrix-scalar pow operations and
the special case pow(X,0). This right scalar operator was marked
statically sparse-safe although it should be conditionally sparse-safe
if the given constant is not equal 0.


Project: http://git-wip-us.apache.org/repos/asf/systemml/repo
Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/f516e4bd
Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/f516e4bd
Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/f516e4bd

Branch: refs/heads/master
Commit: f516e4bdc9af606d2112564901ebb2e27467569d
Parents: ea805c8
Author: Matthias Boehm <[email protected]>
Authored: Wed Jun 21 23:07:52 2017 -0700
Committer: Matthias Boehm <[email protected]>
Committed: Wed Jun 21 23:07:52 2017 -0700

----------------------------------------------------------------------
 .../runtime/matrix/operators/RightScalarOperator.java     | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/systemml/blob/f516e4bd/src/main/java/org/apache/sysml/runtime/matrix/operators/RightScalarOperator.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/operators/RightScalarOperator.java
 
b/src/main/java/org/apache/sysml/runtime/matrix/operators/RightScalarOperator.java
index 9e87bcd..5a75c32 100644
--- 
a/src/main/java/org/apache/sysml/runtime/matrix/operators/RightScalarOperator.java
+++ 
b/src/main/java/org/apache/sysml/runtime/matrix/operators/RightScalarOperator.java
@@ -52,18 +52,12 @@ public class RightScalarOperator extends ScalarOperator
                        || (fn instanceof GreaterThanEquals && _constant>0)
                        || (fn instanceof LessThan && _constant<=0)
                        || (fn instanceof LessThanEquals && _constant<0)
-                       || (fn instanceof Divide && _constant!=0));
+                       || (fn instanceof Divide && _constant!=0)
+                       || (fn instanceof Power && _constant!=0));
        }
        
        @Override
        public double executeScalar(double in) throws DMLRuntimeException {
                return fn.execute(in, _constant);
        }
-       
-       @Override
-       protected boolean isSparseSafeStatic() {
-               //add power as only rhs op sparse safe (1^0=1 but 0^1=0).
-               return (super.isSparseSafeStatic() 
-                       || fn instanceof Power);
-       }
 }

Reply via email to