Repository: systemml
Updated Branches:
  refs/heads/master d91d24a9f -> 131b647b1


http://git-wip-us.apache.org/repos/asf/systemml/blob/131b647b/src/main/java/org/apache/sysml/runtime/matrix/data/MatrixBlock.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/data/MatrixBlock.java 
b/src/main/java/org/apache/sysml/runtime/matrix/data/MatrixBlock.java
index fb14acb..c20d347 100644
--- a/src/main/java/org/apache/sysml/runtime/matrix/data/MatrixBlock.java
+++ b/src/main/java/org/apache/sysml/runtime/matrix/data/MatrixBlock.java
@@ -527,7 +527,7 @@ public class MatrixBlock extends MatrixValue implements 
CacheBlock, Externalizab
        
        public double[] getDenseBlockValues() {
                return (denseBlock != null) ?
-                       denseBlock.values(0) : null;
+                       denseBlock.valuesAt(0) : null;
        }
        
        public SparseBlock getSparseBlock() {
@@ -2721,8 +2721,8 @@ public class MatrixBlock extends MatrixValue implements 
CacheBlock, Externalizab
                        //unary op, incl nnz maintenance
                        long nnz = 0;
                        for( int bi=0; bi<da.numBlocks(); bi++ ) {
-                               double[] a = da.values(bi);
-                               double[] c = dc.values(bi);
+                               double[] a = da.valuesAt(bi);
+                               double[] c = dc.valuesAt(bi);
                                int len = da.size(bi);
                                for( int i=0; i<len; i++ ) {
                                        c[i] = op.fn.execute(a[i]);
@@ -4116,12 +4116,14 @@ public class MatrixBlock extends MatrixValue implements 
CacheBlock, Externalizab
                                        throw new 
DMLRuntimeException("unrecognized correctionLocation: 
"+op.aggOp.correctionLocation); 
                        }
                }
+               
+               //prepare result matrix block
                if(result==null)
                        result=new MatrixBlock(tempCellIndex.row, 
tempCellIndex.column, false);
                else
                        result.reset(tempCellIndex.row, tempCellIndex.column, 
false);
-               
                MatrixBlock ret = (MatrixBlock) result;
+               
                if( LibMatrixAgg.isSupportedUnaryAggregateOperator(op) ) {
                        if( op.getNumThreads() > 1 )
                                LibMatrixAgg.aggregateUnaryMatrix(this, ret, 
op, op.getNumThreads());
@@ -4146,91 +4148,52 @@ public class MatrixBlock extends MatrixValue implements 
CacheBlock, Externalizab
                //initialize result
                if(op.aggOp.initialValue!=0)
                        result.reset(result.rlen, result.clen, 
op.aggOp.initialValue);
-               
                CellIndex tempCellIndex = new CellIndex(-1,-1);
-               KahanObject buffer=new KahanObject(0,0);
-               int r = 0, c = 0;
+               KahanObject buffer = new KahanObject(0,0);
                
-               if(sparse)
-               {
-                       if(sparseBlock!=null)
-                       {
-                               SparseBlock a = sparseBlock;
-                               
-                               for(r=0; r<Math.min(rlen, a.numRows()); r++)
-                               {
-                                       if(a.isEmpty(r)) 
-                                               continue;
-                                       int apos = a.pos(r);
-                                       int alen = a.size(r);
-                                       int[] aix = a.indexes(r);
-                                       double[] aval = a.values(r);
-                                       
-                                       for(int i=apos; i<apos+alen; i++) {
-                                               tempCellIndex.set(r, aix[i]);
-                                               
op.indexFn.execute(tempCellIndex, tempCellIndex);
-                                               
incrementalAggregateUnaryHelp(op.aggOp, result, 
-                                                               
tempCellIndex.row, tempCellIndex.column, aval[i], buffer);
-                                       }
+               if( sparse && sparseBlock!=null ) {
+                       SparseBlock a = sparseBlock;
+                       for(int r=0; r<Math.min(rlen, a.numRows()); r++) {
+                               if(a.isEmpty(r)) continue;
+                               int apos = a.pos(r);
+                               int alen = a.size(r);
+                               int[] aix = a.indexes(r);
+                               double[] aval = a.values(r);
+                               for(int i=apos; i<apos+alen; i++) {
+                                       tempCellIndex.set(r, aix[i]);
+                                       op.indexFn.execute(tempCellIndex, 
tempCellIndex);
+                                       incrementalAggregateUnaryHelp(op.aggOp, 
result, 
+                                                       tempCellIndex.row, 
tempCellIndex.column, aval[i], buffer);
                                }
                        }
                }
-               else
-               {
-                       if(denseBlock!=null)
-                       {
-                               double[] a = getDenseBlockValues();
-                               int limit=rlen*clen;
-                               for(int i=0; i<limit; i++)
-                               {
-                                       r=i/clen;
-                                       c=i%clen;
-                                       tempCellIndex.set(r, c);
+               else if( !sparse && denseBlock!=null ) {
+                       DenseBlock a = getDenseBlock();
+                       for(int i=0; i<rlen; i++)
+                               for(int j=0; j<clen; j++) {
+                                       tempCellIndex.set(i, j);
                                        op.indexFn.execute(tempCellIndex, 
tempCellIndex);
-                                       incrementalAggregateUnaryHelp(op.aggOp, 
result, tempCellIndex.row, tempCellIndex.column, a[i], buffer);
+                                       incrementalAggregateUnaryHelp(op.aggOp, 
result,
+                                               tempCellIndex.row, 
tempCellIndex.column, a.get(i, j), buffer);
                                }
-                       }
                }
        }
        
        private void denseAggregateUnaryHelp(AggregateUnaryOperator op, 
MatrixBlock result,
                        int blockingFactorRow, int blockingFactorCol, 
MatrixIndexes indexesIn) throws DMLRuntimeException
        {
-               //initialize 
                if(op.aggOp.initialValue!=0)
                        result.reset(result.rlen, result.clen, 
op.aggOp.initialValue);
-               
                CellIndex tempCellIndex = new CellIndex(-1,-1);
                KahanObject buffer=new KahanObject(0,0);
-               
                for(int i=0; i<rlen; i++)
-                       for(int j=0; j<clen; j++)
-                       {
+                       for(int j=0; j<clen; j++) {
                                tempCellIndex.set(i, j);
                                op.indexFn.execute(tempCellIndex, 
tempCellIndex);
-
-                               if(op.aggOp.correctionExists
-                                  && op.aggOp.correctionLocation == 
CorrectionLocationType.LASTCOLUMN
-                                  && op.aggOp.increOp.fn instanceof Builtin 
-                                  && ( ((Builtin)(op.aggOp.increOp.fn)).bFunc 
== Builtin.BuiltinCode.MAXINDEX
-                                       || 
((Builtin)(op.aggOp.increOp.fn)).bFunc == Builtin.BuiltinCode.MININDEX) 
-                                       ){
-                                       double currMaxValue = 
result.quickGetValue(i, 1);
-                                       long newMaxIndex = 
UtilFunctions.computeCellIndex(indexesIn.getColumnIndex(), blockingFactorCol, 
j);
-                                       double newMaxValue = quickGetValue(i, 
j);
-                                       double update = 
op.aggOp.increOp.fn.execute(newMaxValue, currMaxValue);
-                                                  
-                                       
//System.out.println("currV="+currMaxValue+",newV="+newMaxValue+",newIX="+newMaxIndex+",update="+update);
-                                       if(update == 1){
-                                               result.quickSetValue(i, 0, 
newMaxIndex);
-                                               result.quickSetValue(i, 1, 
newMaxValue);
-                                       }
-                               }else
-                                       incrementalAggregateUnaryHelp(op.aggOp, 
result, tempCellIndex.row, tempCellIndex.column, quickGetValue(i,j), buffer);
+                               incrementalAggregateUnaryHelp(op.aggOp, result, 
tempCellIndex.row, tempCellIndex.column, quickGetValue(i,j), buffer);
                        }
        }
        
-       
        private static void incrementalAggregateUnaryHelp(AggregateOperator 
aggOp, MatrixBlock result, int row, int column, 
                        double newvalue, KahanObject buffer) throws 
DMLRuntimeException
        {
@@ -4846,7 +4809,7 @@ public class MatrixBlock extends MatrixValue implements 
CacheBlock, Externalizab
        }
 
        public MatrixBlock groupedAggOperations(MatrixValue tgt, MatrixValue 
wghts, MatrixValue ret, int ngroups, Operator op, int k) 
-               throws DMLRuntimeException              
+               throws DMLRuntimeException
        {
                //setup input matrices
                MatrixBlock target = checkType(tgt);
@@ -4868,16 +4831,13 @@ public class MatrixBlock extends MatrixValue implements 
CacheBlock, Externalizab
                        numGroups = ngroups;
                
                // Determine the number of groups
-               if( numGroups <= 0 ) //reuse if available
-               {
+               if( numGroups <= 0 ) { //reuse if available
                        double min = this.min();
                        double max = this.max();
-                       
                        if ( min <= 0 )
                                throw new DMLRuntimeException("Invalid value (" 
+ min + ") encountered in 'groups' while computing groupedAggregate");
                        if ( max <= 0 )
                                throw new DMLRuntimeException("Invalid value (" 
+ max + ") encountered in 'groups' while computing groupedAggregate.");
-               
                        numGroups = (int) max;
                }
        

http://git-wip-us.apache.org/repos/asf/systemml/blob/131b647b/src/main/java/org/apache/sysml/runtime/matrix/operators/BinaryOperator.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/operators/BinaryOperator.java 
b/src/main/java/org/apache/sysml/runtime/matrix/operators/BinaryOperator.java
index 7e95a42..60cae66 100644
--- 
a/src/main/java/org/apache/sysml/runtime/matrix/operators/BinaryOperator.java
+++ 
b/src/main/java/org/apache/sysml/runtime/matrix/operators/BinaryOperator.java
@@ -100,4 +100,9 @@ public class BinaryOperator  extends Operator implements 
Serializable
                        
                return OpOp2.INVALID;
        }
+       
+       @Override
+       public String toString() {
+               return "BinaryOperator("+fn.getClass().getSimpleName()+")";
+       }
 }

Reply via email to