You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@systemml.apache.org by de...@apache.org on 2016/08/30 22:17:23 UTC

incubator-systemml git commit: [SYSTEMML-884] Fix Scala Map MLContext input

Repository: incubator-systemml
Updated Branches:
  refs/heads/master 01d643c67 -> b133401b4


[SYSTEMML-884] Fix Scala Map MLContext input

Update scala.collection.Map<String, Object> to scala.collection.Map.
to avoid asInstanceOf casts of ints/doubles/etc from Scala.
Add comments to input methods of Script.
Create output methods for Script.

Closes #227.


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

Branch: refs/heads/master
Commit: b133401b401fb1ddec5008c7f090067a50853b65
Parents: 01d643c
Author: Deron Eriksson <de...@us.ibm.com>
Authored: Tue Aug 30 15:14:09 2016 -0700
Committer: Deron Eriksson <de...@us.ibm.com>
Committed: Tue Aug 30 15:14:09 2016 -0700

----------------------------------------------------------------------
 .../org/apache/sysml/api/mlcontext/Script.java  | 93 +++++++++++++++++++-
 1 file changed, 90 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/b133401b/src/main/java/org/apache/sysml/api/mlcontext/Script.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/api/mlcontext/Script.java b/src/main/java/org/apache/sysml/api/mlcontext/Script.java
index dcd8fc3..4269c86 100644
--- a/src/main/java/org/apache/sysml/api/mlcontext/Script.java
+++ b/src/main/java/org/apache/sysml/api/mlcontext/Script.java
@@ -232,25 +232,59 @@ public class Script {
 		return this;
 	}
 
+	/**
+	 * Pass a map of inputs to the script.
+	 *
+	 * @param inputs
+	 *            map of inputs (parameters ($) and variables).
+	 * @return {@code this} Script object to allow chaining of methods
+	 */
 	public Script input(Map<String, Object> inputs) {
 		return in(inputs);
 	}
 
 	/**
 	 * Pass a Scala Map of inputs to the script.
+	 * <p>
+	 * Note that the {@code Map} key/value types are not explicitly specified on
+	 * this method because {@code [String, Any]} can't be recognized on the Java
+	 * side since {@code Any} doesn't have an equivalent in the Java class
+	 * hierarchy ({@code scala.Any} is a superclass of {@code scala.AnyRef},
+	 * which is equivalent to {@code java.lang.Object}). Therefore, specifying
+	 * {@code scala.collection.Map<String, Object>} as an input parameter to
+	 * this Java method is not encompassing enough and would require types such
+	 * as a {@code scala.Double} to be cast using {@code asInstanceOf[AnyRef]}.
 	 *
 	 * @param inputs
 	 *            Scala Map of inputs (parameters ($) and variables).
 	 * @return {@code this} Script object to allow chaining of methods
 	 */
-	public Script in(scala.collection.Map<String, Object> inputs) {
-		Map<String, Object> javaMap = JavaConversions.mapAsJavaMap(inputs);
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	public Script in(scala.collection.Map inputs) {
+		Map javaMap = JavaConversions.mapAsJavaMap(inputs);
 		in(javaMap);
 
 		return this;
 	}
 
-	public Script input(scala.collection.Map<String, Object> inputs) {
+	/**
+	 * Pass a Scala Map of inputs to the script.
+	 * <p>
+	 * Note that the {@code Map} key/value types are not explicitly specified on
+	 * this method because {@code [String, Any]} can't be recognized on the Java
+	 * side since {@code Any} doesn't have an equivalent in the Java class
+	 * hierarchy ({@code scala.Any} is a superclass of {@code scala.AnyRef},
+	 * which is equivalent to {@code java.lang.Object}). Therefore, specifying
+	 * {@code scala.collection.Map<String, Object>} as an input parameter to
+	 * this Java method is not encompassing enough and would require types such
+	 * as a {@code scala.Double} to be cast using {@code asInstanceOf[AnyRef]}.
+	 *
+	 * @param inputs
+	 *            Scala Map of inputs (parameters ($) and variables).
+	 * @return {@code this} Script object to allow chaining of methods
+	 */
+	@SuppressWarnings("rawtypes")
+	public Script input(scala.collection.Map inputs) {
 		return in(inputs);
 	}
 
@@ -282,6 +316,16 @@ public class Script {
 		return this;
 	}
 
+	/**
+	 * Pass a Scala Seq of inputs to the script. The inputs are either two-value
+	 * or three-value tuples, where the first value is the variable name, the
+	 * second value is the variable value, and the third optional value is the
+	 * metadata.
+	 *
+	 * @param inputs
+	 *            Scala Seq of inputs (parameters ($) and variables).
+	 * @return {@code this} Script object to allow chaining of methods
+	 */
 	public Script input(scala.collection.Seq<Object> inputs) {
 		return in(inputs);
 	}
@@ -308,6 +352,15 @@ public class Script {
 		return in(name, value, (MatrixMetadata) null);
 	}
 
+	/**
+	 * Register an input (parameter ($) or variable).
+	 *
+	 * @param name
+	 *            name of the input
+	 * @param value
+	 *            value of the input
+	 * @return {@code this} Script object to allow chaining of methods
+	 */
 	public Script input(String name, Object value) {
 		return in(name, value);
 	}
@@ -385,6 +438,18 @@ public class Script {
 		return this;
 	}
 
+	/**
+	 * Register an input (parameter ($) or variable) with optional matrix
+	 * metadata.
+	 *
+	 * @param name
+	 *            name of the input
+	 * @param value
+	 *            value of the input
+	 * @param matrixMetadata
+	 *            optional matrix metadata
+	 * @return {@code this} Script object to allow chaining of methods
+	 */
 	public Script input(String name, Object value, MatrixMetadata matrixMetadata) {
 		return in(name, value, matrixMetadata);
 	}
@@ -402,6 +467,17 @@ public class Script {
 	}
 
 	/**
+	 * Register an output variable.
+	 *
+	 * @param outputName
+	 *            name of the output variable
+	 * @return {@code this} Script object to allow chaining of methods
+	 */
+	public Script output(String outputName) {
+		return out(outputName);
+	}
+
+	/**
 	 * Register output variables.
 	 *
 	 * @param outputNames
@@ -414,6 +490,17 @@ public class Script {
 	}
 
 	/**
+	 * Register output variables.
+	 *
+	 * @param outputNames
+	 *            names of the output variables
+	 * @return {@code this} Script object to allow chaining of methods
+	 */
+	public Script output(String... outputNames) {
+		return output(outputNames);
+	}
+
+	/**
 	 * Clear the inputs, outputs, and symbol table.
 	 */
 	public void clearIOS() {