You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@systemml.apache.org by na...@apache.org on 2017/03/06 22:22:43 UTC

incubator-systemml git commit: toString now prints NaN & Infinity like how as.scalar prints them

Repository: incubator-systemml
Updated Branches:
  refs/heads/master 8936e4f8a -> c7eebddb1


toString now prints NaN & Infinity like how as.scalar prints them

Closes #415


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

Branch: refs/heads/master
Commit: c7eebddb17820398ac5e8ee740c6944d893ec95a
Parents: 8936e4f
Author: Nakul Jindal <na...@gmail.com>
Authored: Mon Mar 6 14:22:22 2017 -0800
Committer: Nakul Jindal <na...@gmail.com>
Committed: Mon Mar 6 14:22:22 2017 -0800

----------------------------------------------------------------------
 .../sysml/runtime/util/DataConverter.java       | 26 ++++++++++++++++----
 1 file changed, 21 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/c7eebddb/src/main/java/org/apache/sysml/runtime/util/DataConverter.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/util/DataConverter.java b/src/main/java/org/apache/sysml/runtime/util/DataConverter.java
index d4348b7..699a602 100644
--- a/src/main/java/org/apache/sysml/runtime/util/DataConverter.java
+++ b/src/main/java/org/apache/sysml/runtime/util/DataConverter.java
@@ -779,6 +779,22 @@ public class DataConverter
 			System.arraycopy(mb.getDenseBlock(), 0, dest, destPos, rows*cols);
 		}
 	}
+	
+	/**
+	 * Convenience method to print NaN & Infinity compliant with how as.scalar prints them.
+	 * {@link DecimalFormat} prints NaN as \uFFFD and Infinity as \u221E
+	 * http://docs.oracle.com/javase/6/docs/api/java/text/DecimalFormat.html
+	 * @param df	The {@link DecimalFormat} instance, constructed with the appropriate options
+	 * @param value	The double value to print
+	 * @return	a string formatted with the {@link DecimalFormat} instance or "NaN" or "Infinity" or "-Infinity"
+	 */
+	private static String dfFormat(DecimalFormat df, double value) {
+		if (Double.isNaN(value) || Double.isInfinite(value)){
+			return Double.toString(value);
+		} else {
+			return df.format(value);
+		}
+	}
 
 	public static String toString(MatrixBlock mb) {
 		return toString(mb, false, " ", "\n", mb.getNumRows(), mb.getNumColumns(), 3);
@@ -826,7 +842,7 @@ public class DataConverter
 					if (row < rowLength && col < colLength) {
 						// Print (row+1) and (col+1) since for a DML user, everything is 1-indexed
 						sb.append(row+1).append(separator).append(col+1).append(separator);
-						sb.append(df.format(value)).append(lineseparator);
+						sb.append(dfFormat(df, value)).append(lineseparator);
 					}
 				}
 			} else {	// Block is in dense format
@@ -835,7 +851,7 @@ public class DataConverter
 						double value = mb.getValue(i, j);
 						if (value != 0.0){
 							sb.append(i+1).append(separator).append(j+1).append(separator);
-							sb.append(df.format(value)).append(lineseparator);
+							sb.append(dfFormat(df, value)).append(lineseparator);
 						}
 					}
 				}
@@ -845,11 +861,11 @@ public class DataConverter
 			for (int i=0; i<rowLength; i++){
 				for (int j=0; j<colLength-1; j++){
 					double value = mb.quickGetValue(i, j);
-					sb.append(df.format(value));
+					sb.append(dfFormat(df, value));
 					sb.append(separator);
 				}
 				double value = mb.quickGetValue(i, colLength-1);
-				sb.append(df.format(value));	// Do not put separator after last element
+				sb.append(dfFormat(df, value));	// Do not put separator after last element
 				sb.append(lineseparator);
 			}
 		}
@@ -910,7 +926,7 @@ public class DataConverter
 			for( int j=0; j<colLength; j++ ) {
 				if( row[j]!=null ) {
 					if( fb.getSchema()[j] == ValueType.DOUBLE )
-						sb.append(df.format(row[j]));
+						sb.append(dfFormat(df, (Double)row[j]));
 					else
 						sb.append(row[j]);
 					if( j != colLength-1 )