Repository: incubator-systemml
Updated Branches:
  refs/heads/master 873bae76b -> 457bbd3a4


http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/457bbd3a/src/test/java/org/apache/sysml/test/integration/mlcontext/MLContextTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/sysml/test/integration/mlcontext/MLContextTest.java 
b/src/test/java/org/apache/sysml/test/integration/mlcontext/MLContextTest.java
new file mode 100644
index 0000000..4441105
--- /dev/null
+++ 
b/src/test/java/org/apache/sysml/test/integration/mlcontext/MLContextTest.java
@@ -0,0 +1,1713 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.sysml.test.integration.mlcontext;
+
+import static org.apache.sysml.api.mlcontext.ScriptFactory.dml;
+import static org.apache.sysml.api.mlcontext.ScriptFactory.dmlFromFile;
+import static org.apache.sysml.api.mlcontext.ScriptFactory.dmlFromInputStream;
+import static org.apache.sysml.api.mlcontext.ScriptFactory.dmlFromLocalFile;
+import static org.apache.sysml.api.mlcontext.ScriptFactory.dmlFromUrl;
+import static org.apache.sysml.api.mlcontext.ScriptFactory.pydml;
+import static org.apache.sysml.api.mlcontext.ScriptFactory.pydmlFromFile;
+import static 
org.apache.sysml.api.mlcontext.ScriptFactory.pydmlFromInputStream;
+import static org.apache.sysml.api.mlcontext.ScriptFactory.pydmlFromLocalFile;
+import static org.apache.sysml.api.mlcontext.ScriptFactory.pydmlFromUrl;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.spark.SparkConf;
+import org.apache.spark.api.java.JavaRDD;
+import org.apache.spark.api.java.JavaSparkContext;
+import org.apache.spark.api.java.function.Function;
+import org.apache.spark.rdd.RDD;
+import org.apache.spark.sql.DataFrame;
+import org.apache.spark.sql.Row;
+import org.apache.spark.sql.RowFactory;
+import org.apache.spark.sql.SQLContext;
+import org.apache.spark.sql.types.DataTypes;
+import org.apache.spark.sql.types.StructField;
+import org.apache.spark.sql.types.StructType;
+import org.apache.sysml.api.mlcontext.BinaryBlockMatrix;
+import org.apache.sysml.api.mlcontext.MLContext;
+import org.apache.sysml.api.mlcontext.MLContextConversionUtil;
+import org.apache.sysml.api.mlcontext.MLContextException;
+import org.apache.sysml.api.mlcontext.MLResults;
+import org.apache.sysml.api.mlcontext.MatrixFormat;
+import org.apache.sysml.api.mlcontext.MatrixMetadata;
+import org.apache.sysml.api.mlcontext.Script;
+import org.apache.sysml.api.mlcontext.ScriptExecutor;
+import org.apache.sysml.runtime.controlprogram.caching.MatrixObject;
+import org.apache.sysml.test.integration.AutomatedTestBase;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Test;
+
+import scala.Tuple2;
+import scala.Tuple3;
+import scala.collection.Iterator;
+import scala.collection.JavaConversions;
+import scala.collection.Seq;
+
+public class MLContextTest extends AutomatedTestBase {
+       protected final static String TEST_DIR = 
"org/apache/sysml/api/mlcontext";
+       protected final static String TEST_NAME = "MLContext";
+
+       static SparkConf conf;
+       static JavaSparkContext sc;
+       MLContext ml;
+
+       @Override
+       public void setUp() {
+               addTestConfiguration(TEST_DIR, TEST_NAME);
+               getAndLoadTestConfiguration(TEST_NAME);
+
+               if (conf == null) {
+                       conf = new 
SparkConf().setAppName("MLContextTest").setMaster("local");
+               }
+               if (sc == null) {
+                       sc = new JavaSparkContext(conf);
+               }
+               ml = new MLContext(sc);
+               // ml.setExplain(true);
+       }
+
+       @Test
+       public void testCreateDMLScriptBasedOnStringAndExecute() {
+               System.out.println("MLContextTest - create DML script based on 
string and execute");
+               String testString = "Create DML script based on string and 
execute";
+               setExpectedStdOut(testString);
+               Script script = dml("print('" + testString + "');");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testCreatePYDMLScriptBasedOnStringAndExecute() {
+               System.out.println("MLContextTest - create PYDML script based 
on string and execute");
+               String testString = "Create PYDML script based on string and 
execute";
+               setExpectedStdOut(testString);
+               Script script = pydml("print('" + testString + "')");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testCreateDMLScriptBasedOnFileAndExecute() {
+               System.out.println("MLContextTest - create DML script based on 
file and execute");
+               setExpectedStdOut("hello world");
+               Script script = dmlFromFile(baseDirectory + File.separator + 
"hello-world.dml");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testCreatePYDMLScriptBasedOnFileAndExecute() {
+               System.out.println("MLContextTest - create PYDML script based 
on file and execute");
+               setExpectedStdOut("hello world");
+               Script script = pydmlFromFile(baseDirectory + File.separator + 
"hello-world.pydml");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testCreateDMLScriptBasedOnInputStreamAndExecute() throws 
FileNotFoundException {
+               System.out.println("MLContextTest - create DML script based on 
InputStream and execute");
+               setExpectedStdOut("hello world");
+               File file = new File(baseDirectory + File.separator + 
"hello-world.dml");
+               InputStream is = new FileInputStream(file);
+               Script script = dmlFromInputStream(is);
+               ml.execute(script);
+       }
+
+       @Test
+       public void testCreatePYDMLScriptBasedOnInputStreamAndExecute() throws 
FileNotFoundException {
+               System.out.println("MLContextTest - create PYDML script based 
on InputStream and execute");
+               setExpectedStdOut("hello world");
+               File file = new File(baseDirectory + File.separator + 
"hello-world.pydml");
+               InputStream is = new FileInputStream(file);
+               Script script = pydmlFromInputStream(is);
+               ml.execute(script);
+       }
+
+       @Test
+       public void testCreateDMLScriptBasedOnLocalFileAndExecute() {
+               System.out.println("MLContextTest - create DML script based on 
local file and execute");
+               setExpectedStdOut("hello world");
+               File file = new File(baseDirectory + File.separator + 
"hello-world.dml");
+               Script script = dmlFromLocalFile(file);
+               ml.execute(script);
+       }
+
+       @Test
+       public void testCreatePYDMLScriptBasedOnLocalFileAndExecute() {
+               System.out.println("MLContextTest - create PYDML script based 
on local file and execute");
+               setExpectedStdOut("hello world");
+               File file = new File(baseDirectory + File.separator + 
"hello-world.pydml");
+               Script script = pydmlFromLocalFile(file);
+               ml.execute(script);
+       }
+
+       @Test
+       public void testCreateDMLScriptBasedOnURL() throws 
MalformedURLException {
+               System.out.println("MLContextTest - create DML script based on 
URL");
+               String urlString = 
"https://raw.githubusercontent.com/apache/incubator-systemml/master/src/test/scripts/applications/hits/HITS.dml";;
+               URL url = new URL(urlString);
+               Script script = dmlFromUrl(url);
+               String expectedContent = "Licensed to the Apache Software 
Foundation";
+               String s = script.getScriptString();
+               assertTrue("Script string doesn't contain expected content: " + 
expectedContent, s.contains(expectedContent));
+       }
+
+       @Test
+       public void testCreatePYDMLScriptBasedOnURL() throws 
MalformedURLException {
+               System.out.println("MLContextTest - create PYDML script based 
on URL");
+               String urlString = 
"https://raw.githubusercontent.com/apache/incubator-systemml/master/src/test/scripts/applications/hits/HITS.pydml";;
+               URL url = new URL(urlString);
+               Script script = pydmlFromUrl(url);
+               String expectedContent = "Licensed to the Apache Software 
Foundation";
+               String s = script.getScriptString();
+               assertTrue("Script string doesn't contain expected content: " + 
expectedContent, s.contains(expectedContent));
+       }
+
+       @Test
+       public void testCreateDMLScriptBasedOnURLString() throws 
MalformedURLException {
+               System.out.println("MLContextTest - create DML script based on 
URL string");
+               String urlString = 
"https://raw.githubusercontent.com/apache/incubator-systemml/master/src/test/scripts/applications/hits/HITS.dml";;
+               Script script = dmlFromUrl(urlString);
+               String expectedContent = "Licensed to the Apache Software 
Foundation";
+               String s = script.getScriptString();
+               assertTrue("Script string doesn't contain expected content: " + 
expectedContent, s.contains(expectedContent));
+       }
+
+       @Test
+       public void testCreatePYDMLScriptBasedOnURLString() throws 
MalformedURLException {
+               System.out.println("MLContextTest - create PYDML script based 
on URL string");
+               String urlString = 
"https://raw.githubusercontent.com/apache/incubator-systemml/master/src/test/scripts/applications/hits/HITS.pydml";;
+               Script script = pydmlFromUrl(urlString);
+               String expectedContent = "Licensed to the Apache Software 
Foundation";
+               String s = script.getScriptString();
+               assertTrue("Script string doesn't contain expected content: " + 
expectedContent, s.contains(expectedContent));
+       }
+
+       @Test
+       public void testExecuteDMLScript() {
+               System.out.println("MLContextTest - execute DML script");
+               String testString = "hello dml world!";
+               setExpectedStdOut(testString);
+               Script script = new Script("print('" + testString + "');", 
org.apache.sysml.api.mlcontext.ScriptType.DML);
+               ml.execute(script);
+       }
+
+       @Test
+       public void testExecutePYDMLScript() {
+               System.out.println("MLContextTest - execute PYDML script");
+               String testString = "hello pydml world!";
+               setExpectedStdOut(testString);
+               Script script = new Script("print('" + testString + "')", 
org.apache.sysml.api.mlcontext.ScriptType.PYDML);
+               ml.execute(script);
+       }
+
+       @Test
+       public void testInputParametersAddDML() {
+               System.out.println("MLContextTest - input parameters add DML");
+
+               String s = "x = $X; y = $Y; print('x + y = ' + (x + y));";
+               Script script = dml(s).in("$X", 3).in("$Y", 4);
+               setExpectedStdOut("x + y = 7");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testInputParametersAddPYDML() {
+               System.out.println("MLContextTest - input parameters add 
PYDML");
+
+               String s = "x = $X\ny = $Y\nprint('x + y = ' + (x + y))";
+               Script script = pydml(s).in("$X", 3).in("$Y", 4);
+               setExpectedStdOut("x + y = 7");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testJavaRDDCSVSumDML() {
+               System.out.println("MLContextTest - JavaRDD<String> CSV sum 
DML");
+
+               List<String> list = new ArrayList<String>();
+               list.add("1,2,3");
+               list.add("4,5,6");
+               list.add("7,8,9");
+               JavaRDD<String> javaRDD = sc.parallelize(list);
+
+               Script script = dml("print('sum: ' + sum(M));").in("M", 
javaRDD);
+               setExpectedStdOut("sum: 45.0");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testJavaRDDCSVSumPYDML() {
+               System.out.println("MLContextTest - JavaRDD<String> CSV sum 
PYDML");
+
+               List<String> list = new ArrayList<String>();
+               list.add("1,2,3");
+               list.add("4,5,6");
+               list.add("7,8,9");
+               JavaRDD<String> javaRDD = sc.parallelize(list);
+
+               Script script = pydml("print('sum: ' + sum(M))").in("M", 
javaRDD);
+               setExpectedStdOut("sum: 45.0");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testJavaRDDIJVSumDML() {
+               System.out.println("MLContextTest - JavaRDD<String> IJV sum 
DML");
+
+               List<String> list = new ArrayList<String>();
+               list.add("1 1 5");
+               list.add("2 2 5");
+               list.add("3 3 5");
+               JavaRDD<String> javaRDD = sc.parallelize(list);
+
+               MatrixMetadata mm = new MatrixMetadata(MatrixFormat.IJV, 3, 3);
+
+               Script script = dml("print('sum: ' + sum(M));").in("M", 
javaRDD, mm);
+               setExpectedStdOut("sum: 15.0");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testJavaRDDIJVSumPYDML() {
+               System.out.println("MLContextTest - JavaRDD<String> IJV sum 
PYDML");
+
+               List<String> list = new ArrayList<String>();
+               list.add("1 1 5");
+               list.add("2 2 5");
+               list.add("3 3 5");
+               JavaRDD<String> javaRDD = sc.parallelize(list);
+
+               MatrixMetadata mm = new MatrixMetadata(MatrixFormat.IJV, 3, 3);
+
+               Script script = pydml("print('sum: ' + sum(M))").in("M", 
javaRDD, mm);
+               setExpectedStdOut("sum: 15.0");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testJavaRDDAndInputParameterDML() {
+               System.out.println("MLContextTest - JavaRDD<String> and input 
parameter DML");
+
+               List<String> list = new ArrayList<String>();
+               list.add("1,2");
+               list.add("3,4");
+               JavaRDD<String> javaRDD = sc.parallelize(list);
+
+               String s = "M = M + $X; print('sum: ' + sum(M));";
+               Script script = dml(s).in("M", javaRDD).in("$X", 1);
+               setExpectedStdOut("sum: 14.0");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testJavaRDDAndInputParameterPYDML() {
+               System.out.println("MLContextTest - JavaRDD<String> and input 
parameter PYDML");
+
+               List<String> list = new ArrayList<String>();
+               list.add("1,2");
+               list.add("3,4");
+               JavaRDD<String> javaRDD = sc.parallelize(list);
+
+               String s = "M = M + $X\nprint('sum: ' + sum(M))";
+               Script script = pydml(s).in("M", javaRDD).in("$X", 1);
+               setExpectedStdOut("sum: 14.0");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testInputMapDML() {
+               System.out.println("MLContextTest - input map DML");
+
+               List<String> list = new ArrayList<String>();
+               list.add("10,20");
+               list.add("30,40");
+               final JavaRDD<String> javaRDD = sc.parallelize(list);
+
+               Map<String, Object> inputs = new HashMap<String, Object>() {
+                       private static final long serialVersionUID = 1L;
+                       {
+                               put("$X", 2);
+                               put("M", javaRDD);
+                       }
+               };
+
+               String s = "M = M + $X; print('sum: ' + sum(M));";
+               Script script = dml(s).in(inputs);
+               setExpectedStdOut("sum: 108.0");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testInputMapPYDML() {
+               System.out.println("MLContextTest - input map PYDML");
+
+               List<String> list = new ArrayList<String>();
+               list.add("10,20");
+               list.add("30,40");
+               final JavaRDD<String> javaRDD = sc.parallelize(list);
+
+               Map<String, Object> inputs = new HashMap<String, Object>() {
+                       private static final long serialVersionUID = 1L;
+                       {
+                               put("$X", 2);
+                               put("M", javaRDD);
+                       }
+               };
+
+               String s = "M = M + $X\nprint('sum: ' + sum(M))";
+               Script script = pydml(s).in(inputs);
+               setExpectedStdOut("sum: 108.0");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testCustomExecutionStepDML() {
+               System.out.println("MLContextTest - custom execution step DML");
+               String testString = "custom execution step";
+               setExpectedStdOut(testString);
+               Script script = new Script("print('" + testString + "');", 
org.apache.sysml.api.mlcontext.ScriptType.DML);
+
+               ScriptExecutor scriptExecutor = new ScriptExecutor() {
+                       // turn off global data flow optimization check
+                       @Override
+                       protected void globalDataFlowOptimization() {
+                               return;
+                       }
+               };
+               ml.execute(script, scriptExecutor);
+       }
+
+       @Test
+       public void testCustomExecutionStepPYDML() {
+               System.out.println("MLContextTest - custom execution step 
PYDML");
+               String testString = "custom execution step";
+               setExpectedStdOut(testString);
+               Script script = new Script("print('" + testString + "')", 
org.apache.sysml.api.mlcontext.ScriptType.PYDML);
+
+               ScriptExecutor scriptExecutor = new ScriptExecutor() {
+                       // turn off global data flow optimization check
+                       @Override
+                       protected void globalDataFlowOptimization() {
+                               return;
+                       }
+               };
+               ml.execute(script, scriptExecutor);
+       }
+
+       @Test
+       public void testRDDSumCSVDML() {
+               System.out.println("MLContextTest - RDD<String> CSV sum DML");
+
+               List<String> list = new ArrayList<String>();
+               list.add("1,1,1");
+               list.add("2,2,2");
+               list.add("3,3,3");
+               JavaRDD<String> javaRDD = sc.parallelize(list);
+               RDD<String> rdd = JavaRDD.toRDD(javaRDD);
+
+               Script script = dml("print('sum: ' + sum(M));").in("M", rdd);
+               setExpectedStdOut("sum: 18.0");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testRDDSumCSVPYDML() {
+               System.out.println("MLContextTest - RDD<String> CSV sum PYDML");
+
+               List<String> list = new ArrayList<String>();
+               list.add("1,1,1");
+               list.add("2,2,2");
+               list.add("3,3,3");
+               JavaRDD<String> javaRDD = sc.parallelize(list);
+               RDD<String> rdd = JavaRDD.toRDD(javaRDD);
+
+               Script script = pydml("print('sum: ' + sum(M))").in("M", rdd);
+               setExpectedStdOut("sum: 18.0");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testRDDSumIJVDML() {
+               System.out.println("MLContextTest - RDD<String> IJV sum DML");
+
+               List<String> list = new ArrayList<String>();
+               list.add("1 1 1");
+               list.add("2 1 2");
+               list.add("1 2 3");
+               list.add("3 3 4");
+               JavaRDD<String> javaRDD = sc.parallelize(list);
+               RDD<String> rdd = JavaRDD.toRDD(javaRDD);
+
+               MatrixMetadata mm = new MatrixMetadata(MatrixFormat.IJV, 3, 3);
+
+               Script script = dml("print('sum: ' + sum(M));").in("M", rdd, 
mm);
+               setExpectedStdOut("sum: 10.0");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testRDDSumIJVPYDML() {
+               System.out.println("MLContextTest - RDD<String> IJV sum PYDML");
+
+               List<String> list = new ArrayList<String>();
+               list.add("1 1 1");
+               list.add("2 1 2");
+               list.add("1 2 3");
+               list.add("3 3 4");
+               JavaRDD<String> javaRDD = sc.parallelize(list);
+               RDD<String> rdd = JavaRDD.toRDD(javaRDD);
+
+               MatrixMetadata mm = new MatrixMetadata(MatrixFormat.IJV, 3, 3);
+
+               Script script = pydml("print('sum: ' + sum(M))").in("M", rdd, 
mm);
+               setExpectedStdOut("sum: 10.0");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testDataFrameSumDML() {
+               System.out.println("MLContextTest - DataFrame sum DML");
+
+               List<String> list = new ArrayList<String>();
+               list.add("10,20,30");
+               list.add("40,50,60");
+               list.add("70,80,90");
+               JavaRDD<String> javaRddString = sc.parallelize(list);
+
+               JavaRDD<Row> javaRddRow = javaRddString.map(new 
CommaSeparatedValueStringToRow());
+               SQLContext sqlContext = new SQLContext(sc);
+               List<StructField> fields = new ArrayList<StructField>();
+               fields.add(DataTypes.createStructField("C1", 
DataTypes.StringType, true));
+               fields.add(DataTypes.createStructField("C2", 
DataTypes.StringType, true));
+               fields.add(DataTypes.createStructField("C3", 
DataTypes.StringType, true));
+               StructType schema = DataTypes.createStructType(fields);
+               DataFrame dataFrame = sqlContext.createDataFrame(javaRddRow, 
schema);
+
+               Script script = dml("print('sum: ' + sum(M));").in("M", 
dataFrame);
+               setExpectedStdOut("sum: 450.0");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testDataFrameSumPYDML() {
+               System.out.println("MLContextTest - DataFrame sum PYDML");
+
+               List<String> list = new ArrayList<String>();
+               list.add("10,20,30");
+               list.add("40,50,60");
+               list.add("70,80,90");
+               JavaRDD<String> javaRddString = sc.parallelize(list);
+
+               JavaRDD<Row> javaRddRow = javaRddString.map(new 
CommaSeparatedValueStringToRow());
+               SQLContext sqlContext = new SQLContext(sc);
+               List<StructField> fields = new ArrayList<StructField>();
+               fields.add(DataTypes.createStructField("C1", 
DataTypes.StringType, true));
+               fields.add(DataTypes.createStructField("C2", 
DataTypes.StringType, true));
+               fields.add(DataTypes.createStructField("C3", 
DataTypes.StringType, true));
+               StructType schema = DataTypes.createStructType(fields);
+               DataFrame dataFrame = sqlContext.createDataFrame(javaRddRow, 
schema);
+
+               Script script = pydml("print('sum: ' + sum(M))").in("M", 
dataFrame);
+               setExpectedStdOut("sum: 450.0");
+               ml.execute(script);
+       }
+
+       static class CommaSeparatedValueStringToRow implements Function<String, 
Row> {
+               private static final long serialVersionUID = 
-7871020122671747808L;
+
+               public Row call(String str) throws Exception {
+                       String[] fields = str.split(",");
+                       return RowFactory.create((Object[]) fields);
+               }
+       }
+
+       @Test
+       public void testCSVMatrixFileInputParameterSumDML() {
+               System.out.println("MLContextTest - CSV matrix file input 
parameter sum DML");
+
+               String s = "M = read($Min); print('sum: ' + sum(M));";
+               String csvFile = baseDirectory + File.separator + "1234.csv";
+               setExpectedStdOut("sum: 10.0");
+               ml.execute(dml(s).in("$Min", csvFile));
+       }
+
+       @Test
+       public void testCSVMatrixFileInputParameterSumPYDML() {
+               System.out.println("MLContextTest - CSV matrix file input 
parameter sum PYDML");
+
+               String s = "M = load($Min)\nprint('sum: ' + sum(M))";
+               String csvFile = baseDirectory + File.separator + "1234.csv";
+               setExpectedStdOut("sum: 10.0");
+               ml.execute(pydml(s).in("$Min", csvFile));
+       }
+
+       @Test
+       public void testCSVMatrixFileInputVariableSumDML() {
+               System.out.println("MLContextTest - CSV matrix file input 
variable sum DML");
+
+               String s = "M = read(Min); print('sum: ' + sum(M));";
+               String csvFile = baseDirectory + File.separator + "1234.csv";
+               setExpectedStdOut("sum: 10.0");
+               ml.execute(dml(s).in("Min", csvFile));
+       }
+
+       @Test
+       public void testCSVMatrixFileInputVariableSumPYDML() {
+               System.out.println("MLContextTest - CSV matrix file input 
variable sum PYDML");
+
+               String s = "M = load(Min)\nprint('sum: ' + sum(M))";
+               String csvFile = baseDirectory + File.separator + "1234.csv";
+               setExpectedStdOut("sum: 10.0");
+               ml.execute(pydml(s).in("Min", csvFile));
+       }
+
+       @Test
+       public void test2DDoubleSumDML() {
+               System.out.println("MLContextTest - two-dimensional double 
array sum DML");
+
+               double[][] matrix = new double[][] { { 10.0, 20.0 }, { 30.0, 
40.0 } };
+
+               Script script = dml("print('sum: ' + sum(M));").in("M", matrix);
+               setExpectedStdOut("sum: 100.0");
+               ml.execute(script);
+       }
+
+       @Test
+       public void test2DDoubleSumPYDML() {
+               System.out.println("MLContextTest - two-dimensional double 
array sum PYDML");
+
+               double[][] matrix = new double[][] { { 10.0, 20.0 }, { 30.0, 
40.0 } };
+
+               Script script = pydml("print('sum: ' + sum(M))").in("M", 
matrix);
+               setExpectedStdOut("sum: 100.0");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testAddScalarIntegerInputsDML() {
+               System.out.println("MLContextTest - add scalar integer inputs 
DML");
+               String s = "total = in1 + in2; print('total: ' + total);";
+               Script script = dml(s).in("in1", 1).in("in2", 2);
+               setExpectedStdOut("total: 3");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testAddScalarIntegerInputsPYDML() {
+               System.out.println("MLContextTest - add scalar integer inputs 
PYDML");
+               String s = "total = in1 + in2\nprint('total: ' + total)";
+               Script script = pydml(s).in("in1", 1).in("in2", 2);
+               setExpectedStdOut("total: 3");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testInputScalaMapDML() {
+               System.out.println("MLContextTest - input Scala map DML");
+
+               List<String> list = new ArrayList<String>();
+               list.add("10,20");
+               list.add("30,40");
+               final JavaRDD<String> javaRDD = sc.parallelize(list);
+
+               Map<String, Object> inputs = new HashMap<String, Object>() {
+                       private static final long serialVersionUID = 1L;
+                       {
+                               put("$X", 2);
+                               put("M", javaRDD);
+                       }
+               };
+
+               scala.collection.mutable.Map<String, Object> scalaMap = 
JavaConversions.asScalaMap(inputs);
+
+               String s = "M = M + $X; print('sum: ' + sum(M));";
+               Script script = dml(s).in(scalaMap);
+               setExpectedStdOut("sum: 108.0");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testInputScalaMapPYDML() {
+               System.out.println("MLContextTest - input Scala map PYDML");
+
+               List<String> list = new ArrayList<String>();
+               list.add("10,20");
+               list.add("30,40");
+               final JavaRDD<String> javaRDD = sc.parallelize(list);
+
+               Map<String, Object> inputs = new HashMap<String, Object>() {
+                       private static final long serialVersionUID = 1L;
+                       {
+                               put("$X", 2);
+                               put("M", javaRDD);
+                       }
+               };
+
+               scala.collection.mutable.Map<String, Object> scalaMap = 
JavaConversions.asScalaMap(inputs);
+
+               String s = "M = M + $X\nprint('sum: ' + sum(M))";
+               Script script = pydml(s).in(scalaMap);
+               setExpectedStdOut("sum: 108.0");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testOutputDoubleArrayMatrixDML() {
+               System.out.println("MLContextTest - output double array matrix 
DML");
+               String s = "M = matrix('1 2 3 4', rows=2, cols=2);";
+               double[][] matrix = 
ml.execute(dml(s).out("M")).getDoubleMatrix("M");
+               Assert.assertEquals(1.0, matrix[0][0], 0);
+               Assert.assertEquals(2.0, matrix[0][1], 0);
+               Assert.assertEquals(3.0, matrix[1][0], 0);
+               Assert.assertEquals(4.0, matrix[1][1], 0);
+       }
+
+       @Test
+       public void testOutputDoubleArrayMatrixPYDML() {
+               System.out.println("MLContextTest - output double array matrix 
PYDML");
+               String s = "M = full('1 2 3 4', rows=2, cols=2)";
+               double[][] matrix = 
ml.execute(pydml(s).out("M")).getDoubleMatrix("M");
+               Assert.assertEquals(1.0, matrix[0][0], 0);
+               Assert.assertEquals(2.0, matrix[0][1], 0);
+               Assert.assertEquals(3.0, matrix[1][0], 0);
+               Assert.assertEquals(4.0, matrix[1][1], 0);
+       }
+
+       @Test
+       public void testOutputScalarLongDML() {
+               System.out.println("MLContextTest - output scalar long DML");
+               String s = "m = 5;";
+               long result = ml.execute(dml(s).out("m")).getLong("m");
+               Assert.assertEquals(5, result);
+       }
+
+       @Test
+       public void testOutputScalarLongPYDML() {
+               System.out.println("MLContextTest - output scalar long PYDML");
+               String s = "m = 5";
+               long result = ml.execute(pydml(s).out("m")).getLong("m");
+               Assert.assertEquals(5, result);
+       }
+
+       @Test
+       public void testOutputScalarDoubleDML() {
+               System.out.println("MLContextTest - output scalar double DML");
+               String s = "m = 1.23";
+               double result = ml.execute(dml(s).out("m")).getDouble("m");
+               Assert.assertEquals(1.23, result, 0);
+       }
+
+       @Test
+       public void testOutputScalarDoublePYDML() {
+               System.out.println("MLContextTest - output scalar double 
PYDML");
+               String s = "m = 1.23";
+               double result = ml.execute(pydml(s).out("m")).getDouble("m");
+               Assert.assertEquals(1.23, result, 0);
+       }
+
+       @Test
+       public void testOutputScalarBooleanDML() {
+               System.out.println("MLContextTest - output scalar boolean DML");
+               String s = "m = FALSE;";
+               boolean result = ml.execute(dml(s).out("m")).getBoolean("m");
+               Assert.assertEquals(false, result);
+       }
+
+       @Test
+       public void testOutputScalarBooleanPYDML() {
+               System.out.println("MLContextTest - output scalar boolean 
PYDML");
+               String s = "m = False";
+               boolean result = ml.execute(pydml(s).out("m")).getBoolean("m");
+               Assert.assertEquals(false, result);
+       }
+
+       @Test
+       public void testOutputScalarStringDML() {
+               System.out.println("MLContextTest - output scalar string DML");
+               String s = "m = 'hello';";
+               String result = ml.execute(dml(s).out("m")).getString("m");
+               Assert.assertEquals("hello", result);
+       }
+
+       @Test
+       public void testOutputScalarStringPYDML() {
+               System.out.println("MLContextTest - output scalar string 
PYDML");
+               String s = "m = 'hello'";
+               String result = ml.execute(pydml(s).out("m")).getString("m");
+               Assert.assertEquals("hello", result);
+       }
+
+       @Test
+       public void testInputFrameDML() {
+               System.out.println("MLContextTest - input frame DML");
+
+               String s = "M = read(Min, data_type='frame', format='csv'); 
print(toString(M));";
+               String csvFile = baseDirectory + File.separator + 
"one-two-three-four.csv";
+               Script script = dml(s).in("Min", csvFile);
+               setExpectedStdOut("one");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testInputFramePYDML() {
+               System.out.println("MLContextTest - input frame PYDML");
+
+               String s = "M = load(Min, data_type='frame', 
format='csv')\nprint(toString(M))";
+               String csvFile = baseDirectory + File.separator + 
"one-two-three-four.csv";
+               Script script = pydml(s).in("Min", csvFile);
+               setExpectedStdOut("one");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testOutputFrameDML() {
+               System.out.println("MLContextTest - output frame DML");
+
+               String s = "M = read(Min, data_type='frame', format='csv');";
+               String csvFile = baseDirectory + File.separator + 
"one-two-three-four.csv";
+               Script script = dml(s).in("Min", csvFile).out("M");
+               String[][] frame = ml.execute(script).getFrame("M");
+               Assert.assertEquals("one", frame[0][0]);
+               Assert.assertEquals("two", frame[0][1]);
+               Assert.assertEquals("three", frame[1][0]);
+               Assert.assertEquals("four", frame[1][1]);
+       }
+
+       @Test
+       public void testOutputFramePYDML() {
+               System.out.println("MLContextTest - output frame PYDML");
+
+               String s = "M = load(Min, data_type='frame', format='csv')";
+               String csvFile = baseDirectory + File.separator + 
"one-two-three-four.csv";
+               Script script = pydml(s).in("Min", csvFile).out("M");
+               String[][] frame = ml.execute(script).getFrame("M");
+               Assert.assertEquals("one", frame[0][0]);
+               Assert.assertEquals("two", frame[0][1]);
+               Assert.assertEquals("three", frame[1][0]);
+               Assert.assertEquals("four", frame[1][1]);
+       }
+
+       @Test
+       public void testOutputJavaRDDStringIJVDML() {
+               System.out.println("MLContextTest - output Java RDD String IJV 
DML");
+
+               String s = "M = matrix('1 2 3 4', rows=2, cols=2);";
+               Script script = dml(s).out("M");
+               MLResults results = ml.execute(script);
+               JavaRDD<String> javaRDDStringIJV = 
results.getJavaRDDStringIJV("M");
+               List<String> lines = javaRDDStringIJV.collect();
+               Assert.assertEquals("1 1 1.0", lines.get(0));
+               Assert.assertEquals("1 2 2.0", lines.get(1));
+               Assert.assertEquals("2 1 3.0", lines.get(2));
+               Assert.assertEquals("2 2 4.0", lines.get(3));
+       }
+
+       @Test
+       public void testOutputJavaRDDStringIJVPYDML() {
+               System.out.println("MLContextTest - output Java RDD String IJV 
PYDML");
+
+               String s = "M = full('1 2 3 4', rows=2, cols=2)";
+               Script script = pydml(s).out("M");
+               MLResults results = ml.execute(script);
+               JavaRDD<String> javaRDDStringIJV = 
results.getJavaRDDStringIJV("M");
+               List<String> lines = javaRDDStringIJV.collect();
+               Assert.assertEquals("1 1 1.0", lines.get(0));
+               Assert.assertEquals("1 2 2.0", lines.get(1));
+               Assert.assertEquals("2 1 3.0", lines.get(2));
+               Assert.assertEquals("2 2 4.0", lines.get(3));
+       }
+
+       @Test
+       public void testOutputJavaRDDStringCSVDenseDML() {
+               System.out.println("MLContextTest - output Java RDD String CSV 
Dense DML");
+
+               String s = "M = matrix('1 2 3 4', rows=2, cols=2); 
print(toString(M));";
+               Script script = dml(s).out("M");
+               MLResults results = ml.execute(script);
+               JavaRDD<String> javaRDDStringCSV = 
results.getJavaRDDStringCSV("M");
+               List<String> lines = javaRDDStringCSV.collect();
+               Assert.assertEquals("1.0,2.0", lines.get(0));
+               Assert.assertEquals("3.0,4.0", lines.get(1));
+       }
+
+       @Test
+       public void testOutputJavaRDDStringCSVDensePYDML() {
+               System.out.println("MLContextTest - output Java RDD String CSV 
Dense PYDML");
+
+               String s = "M = full('1 2 3 4', rows=2, 
cols=2)\nprint(toString(M))";
+               Script script = pydml(s).out("M");
+               MLResults results = ml.execute(script);
+               JavaRDD<String> javaRDDStringCSV = 
results.getJavaRDDStringCSV("M");
+               List<String> lines = javaRDDStringCSV.collect();
+               Assert.assertEquals("1.0,2.0", lines.get(0));
+               Assert.assertEquals("3.0,4.0", lines.get(1));
+       }
+
+       /**
+        * Reading from dense and sparse matrices is handled differently, so we 
have
+        * tests for both dense and sparse matrices.
+        */
+       @Test
+       public void testOutputJavaRDDStringCSVSparseDML() {
+               System.out.println("MLContextTest - output Java RDD String CSV 
Sparse DML");
+
+               String s = "M = matrix(0, rows=10, cols=10); M[1,1]=1; 
M[1,2]=2; M[2,1]=3; M[2,2]=4; print(toString(M));";
+               Script script = dml(s).out("M");
+               MLResults results = ml.execute(script);
+               JavaRDD<String> javaRDDStringCSV = 
results.getJavaRDDStringCSV("M");
+               List<String> lines = javaRDDStringCSV.collect();
+               Assert.assertEquals("1.0,2.0", lines.get(0));
+               Assert.assertEquals("3.0,4.0", lines.get(1));
+       }
+
+       /**
+        * Reading from dense and sparse matrices is handled differently, so we 
have
+        * tests for both dense and sparse matrices.
+        */
+       @Test
+       public void testOutputJavaRDDStringCSVSparsePYDML() {
+               System.out.println("MLContextTest - output Java RDD String CSV 
Sparse PYDML");
+
+               String s = "M = full(0, rows=10, 
cols=10)\nM[0,0]=1\nM[0,1]=2\nM[1,0]=3\nM[1,1]=4\nprint(toString(M))";
+               Script script = pydml(s).out("M");
+               MLResults results = ml.execute(script);
+               JavaRDD<String> javaRDDStringCSV = 
results.getJavaRDDStringCSV("M");
+               List<String> lines = javaRDDStringCSV.collect();
+               Assert.assertEquals("1.0,2.0", lines.get(0));
+               Assert.assertEquals("3.0,4.0", lines.get(1));
+       }
+
+       @Test
+       public void testOutputRDDStringIJVDML() {
+               System.out.println("MLContextTest - output RDD String IJV DML");
+
+               String s = "M = matrix('1 2 3 4', rows=2, cols=2);";
+               Script script = dml(s).out("M");
+               MLResults results = ml.execute(script);
+               RDD<String> rddStringIJV = results.getRDDStringIJV("M");
+               Iterator<String> iterator = rddStringIJV.toLocalIterator();
+               Assert.assertEquals("1 1 1.0", iterator.next());
+               Assert.assertEquals("1 2 2.0", iterator.next());
+               Assert.assertEquals("2 1 3.0", iterator.next());
+               Assert.assertEquals("2 2 4.0", iterator.next());
+       }
+
+       @Test
+       public void testOutputRDDStringIJVPYDML() {
+               System.out.println("MLContextTest - output RDD String IJV 
PYDML");
+
+               String s = "M = full('1 2 3 4', rows=2, cols=2)";
+               Script script = pydml(s).out("M");
+               MLResults results = ml.execute(script);
+               RDD<String> rddStringIJV = results.getRDDStringIJV("M");
+               Iterator<String> iterator = rddStringIJV.toLocalIterator();
+               Assert.assertEquals("1 1 1.0", iterator.next());
+               Assert.assertEquals("1 2 2.0", iterator.next());
+               Assert.assertEquals("2 1 3.0", iterator.next());
+               Assert.assertEquals("2 2 4.0", iterator.next());
+       }
+
+       @Test
+       public void testOutputRDDStringCSVDenseDML() {
+               System.out.println("MLContextTest - output RDD String CSV Dense 
DML");
+
+               String s = "M = matrix('1 2 3 4', rows=2, cols=2); 
print(toString(M));";
+               Script script = dml(s).out("M");
+               MLResults results = ml.execute(script);
+               RDD<String> rddStringCSV = results.getRDDStringCSV("M");
+               Iterator<String> iterator = rddStringCSV.toLocalIterator();
+               Assert.assertEquals("1.0,2.0", iterator.next());
+               Assert.assertEquals("3.0,4.0", iterator.next());
+       }
+
+       @Test
+       public void testOutputRDDStringCSVDensePYDML() {
+               System.out.println("MLContextTest - output RDD String CSV Dense 
PYDML");
+
+               String s = "M = full('1 2 3 4', rows=2, 
cols=2)\nprint(toString(M))";
+               Script script = pydml(s).out("M");
+               MLResults results = ml.execute(script);
+               RDD<String> rddStringCSV = results.getRDDStringCSV("M");
+               Iterator<String> iterator = rddStringCSV.toLocalIterator();
+               Assert.assertEquals("1.0,2.0", iterator.next());
+               Assert.assertEquals("3.0,4.0", iterator.next());
+       }
+
+       @Test
+       public void testOutputRDDStringCSVSparseDML() {
+               System.out.println("MLContextTest - output RDD String CSV 
Sparse DML");
+
+               String s = "M = matrix(0, rows=10, cols=10); M[1,1]=1; 
M[1,2]=2; M[2,1]=3; M[2,2]=4; print(toString(M));";
+               Script script = dml(s).out("M");
+               MLResults results = ml.execute(script);
+               RDD<String> rddStringCSV = results.getRDDStringCSV("M");
+               Iterator<String> iterator = rddStringCSV.toLocalIterator();
+               Assert.assertEquals("1.0,2.0", iterator.next());
+               Assert.assertEquals("3.0,4.0", iterator.next());
+       }
+
+       @Test
+       public void testOutputRDDStringCSVSparsePYDML() {
+               System.out.println("MLContextTest - output RDD String CSV 
Sparse PYDML");
+
+               String s = "M = full(0, rows=10, 
cols=10)\nM[0,0]=1\nM[0,1]=2\nM[1,0]=3\nM[1,1]=4\nprint(toString(M))";
+               Script script = pydml(s).out("M");
+               MLResults results = ml.execute(script);
+               RDD<String> rddStringCSV = results.getRDDStringCSV("M");
+               Iterator<String> iterator = rddStringCSV.toLocalIterator();
+               Assert.assertEquals("1.0,2.0", iterator.next());
+               Assert.assertEquals("3.0,4.0", iterator.next());
+       }
+
+       @Test
+       public void testOutputDataFrameDML() {
+               System.out.println("MLContextTest - output DataFrame DML");
+
+               String s = "M = matrix('1 2 3 4', rows=2, cols=2);";
+               Script script = dml(s).out("M");
+               MLResults results = ml.execute(script);
+               DataFrame dataFrame = results.getDataFrame("M");
+               List<Row> list = dataFrame.collectAsList();
+               Row row1 = list.get(0);
+               Assert.assertEquals(0.0, row1.getDouble(0), 0.0);
+               Assert.assertEquals(1.0, row1.getDouble(1), 0.0);
+               Assert.assertEquals(2.0, row1.getDouble(2), 0.0);
+
+               Row row2 = list.get(1);
+               Assert.assertEquals(1.0, row2.getDouble(0), 0.0);
+               Assert.assertEquals(3.0, row2.getDouble(1), 0.0);
+               Assert.assertEquals(4.0, row2.getDouble(2), 0.0);
+       }
+
+       @Test
+       public void testOutputDataFramePYDML() {
+               System.out.println("MLContextTest - output DataFrame PYDML");
+
+               String s = "M = full('1 2 3 4', rows=2, cols=2)";
+               Script script = pydml(s).out("M");
+               MLResults results = ml.execute(script);
+               DataFrame dataFrame = results.getDataFrame("M");
+               List<Row> list = dataFrame.collectAsList();
+               Row row1 = list.get(0);
+               Assert.assertEquals(0.0, row1.getDouble(0), 0.0);
+               Assert.assertEquals(1.0, row1.getDouble(1), 0.0);
+               Assert.assertEquals(2.0, row1.getDouble(2), 0.0);
+
+               Row row2 = list.get(1);
+               Assert.assertEquals(1.0, row2.getDouble(0), 0.0);
+               Assert.assertEquals(3.0, row2.getDouble(1), 0.0);
+               Assert.assertEquals(4.0, row2.getDouble(2), 0.0);
+       }
+
+       @Test
+       public void testTwoScriptsDML() {
+               System.out.println("MLContextTest - two scripts with inputs and 
outputs DML");
+
+               double[][] m1 = new double[][] { { 1.0, 2.0 }, { 3.0, 4.0 } };
+               String s1 = "sum1 = sum(m1);";
+               double sum1 = ml.execute(dml(s1).in("m1", 
m1).out("sum1")).getDouble("sum1");
+               Assert.assertEquals(10.0, sum1, 0.0);
+
+               double[][] m2 = new double[][] { { 5.0, 6.0 }, { 7.0, 8.0 } };
+               String s2 = "sum2 = sum(m2);";
+               double sum2 = ml.execute(dml(s2).in("m2", 
m2).out("sum2")).getDouble("sum2");
+               Assert.assertEquals(26.0, sum2, 0.0);
+       }
+
+       @Test
+       public void testTwoScriptsPYDML() {
+               System.out.println("MLContextTest - two scripts with inputs and 
outputs PYDML");
+
+               double[][] m1 = new double[][] { { 1.0, 2.0 }, { 3.0, 4.0 } };
+               String s1 = "sum1 = sum(m1)";
+               double sum1 = ml.execute(pydml(s1).in("m1", 
m1).out("sum1")).getDouble("sum1");
+               Assert.assertEquals(10.0, sum1, 0.0);
+
+               double[][] m2 = new double[][] { { 5.0, 6.0 }, { 7.0, 8.0 } };
+               String s2 = "sum2 = sum(m2)";
+               double sum2 = ml.execute(pydml(s2).in("m2", 
m2).out("sum2")).getDouble("sum2");
+               Assert.assertEquals(26.0, sum2, 0.0);
+       }
+
+       @Test
+       public void testOneScriptTwoExecutionsDML() {
+               System.out.println("MLContextTest - one script with two 
executions DML");
+
+               Script script = new 
Script(org.apache.sysml.api.mlcontext.ScriptType.DML);
+
+               double[][] m1 = new double[][] { { 1.0, 2.0 }, { 3.0, 4.0 } };
+               script.setScriptString("sum1 = sum(m1);").in("m1", 
m1).out("sum1");
+               ml.execute(script);
+               Assert.assertEquals(10.0, script.results().getDouble("sum1"), 
0.0);
+
+               script.clearAll();
+
+               double[][] m2 = new double[][] { { 5.0, 6.0 }, { 7.0, 8.0 } };
+               script.setScriptString("sum2 = sum(m2);").in("m2", 
m2).out("sum2");
+               ml.execute(script);
+               Assert.assertEquals(26.0, script.results().getDouble("sum2"), 
0.0);
+       }
+
+       @Test
+       public void testOneScriptTwoExecutionsPYDML() {
+               System.out.println("MLContextTest - one script with two 
executions PYDML");
+
+               Script script = new 
Script(org.apache.sysml.api.mlcontext.ScriptType.PYDML);
+
+               double[][] m1 = new double[][] { { 1.0, 2.0 }, { 3.0, 4.0 } };
+               script.setScriptString("sum1 = sum(m1)").in("m1", 
m1).out("sum1");
+               ml.execute(script);
+               Assert.assertEquals(10.0, script.results().getDouble("sum1"), 
0.0);
+
+               script.clearAll();
+
+               double[][] m2 = new double[][] { { 5.0, 6.0 }, { 7.0, 8.0 } };
+               script.setScriptString("sum2 = sum(m2)").in("m2", 
m2).out("sum2");
+               ml.execute(script);
+               Assert.assertEquals(26.0, script.results().getDouble("sum2"), 
0.0);
+       }
+
+       @Test
+       public void testInputParameterBooleanDML() {
+               System.out.println("MLContextTest - input parameter boolean 
DML");
+
+               String s = "x = $X; if (x == TRUE) { print('yes'); }";
+               Script script = dml(s).in("$X", true);
+               setExpectedStdOut("yes");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testInputParameterBooleanPYDML() {
+               System.out.println("MLContextTest - input parameter boolean 
PYDML");
+
+               String s = "x = $X\nif (x == True):\n  print('yes')";
+               Script script = pydml(s).in("$X", true);
+               setExpectedStdOut("yes");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testMultipleOutDML() {
+               System.out.println("MLContextTest - multiple out DML");
+
+               String s = "M = matrix('1 2 3 4', rows=2, cols=2); N = sum(M)";
+               // alternative to .out("M").out("N")
+               MLResults results = ml.execute(dml(s).out("M", "N"));
+               double[][] matrix = results.getDoubleMatrix("M");
+               double sum = results.getDouble("N");
+               Assert.assertEquals(1.0, matrix[0][0], 0);
+               Assert.assertEquals(2.0, matrix[0][1], 0);
+               Assert.assertEquals(3.0, matrix[1][0], 0);
+               Assert.assertEquals(4.0, matrix[1][1], 0);
+               Assert.assertEquals(10.0, sum, 0);
+       }
+
+       @Test
+       public void testMultipleOutPYDML() {
+               System.out.println("MLContextTest - multiple out PYDML");
+
+               String s = "M = full('1 2 3 4', rows=2, cols=2)\nN = sum(M)";
+               // alternative to .out("M").out("N")
+               MLResults results = ml.execute(pydml(s).out("M", "N"));
+               double[][] matrix = results.getDoubleMatrix("M");
+               double sum = results.getDouble("N");
+               Assert.assertEquals(1.0, matrix[0][0], 0);
+               Assert.assertEquals(2.0, matrix[0][1], 0);
+               Assert.assertEquals(3.0, matrix[1][0], 0);
+               Assert.assertEquals(4.0, matrix[1][1], 0);
+               Assert.assertEquals(10.0, sum, 0);
+       }
+
+       @Test
+       public void testOutputMatrixObjectDML() {
+               System.out.println("MLContextTest - output matrix object DML");
+               String s = "M = matrix('1 2 3 4', rows=2, cols=2);";
+               MatrixObject mo = 
ml.execute(dml(s).out("M")).getMatrixObject("M");
+               RDD<String> rddStringCSV = 
MLContextConversionUtil.matrixObjectToRDDStringCSV(mo);
+               Iterator<String> iterator = rddStringCSV.toLocalIterator();
+               Assert.assertEquals("1.0,2.0", iterator.next());
+               Assert.assertEquals("3.0,4.0", iterator.next());
+       }
+
+       @Test
+       public void testOutputMatrixObjectPYDML() {
+               System.out.println("MLContextTest - output matrix object 
PYDML");
+               String s = "M = full('1 2 3 4', rows=2, cols=2);";
+               MatrixObject mo = 
ml.execute(pydml(s).out("M")).getMatrixObject("M");
+               RDD<String> rddStringCSV = 
MLContextConversionUtil.matrixObjectToRDDStringCSV(mo);
+               Iterator<String> iterator = rddStringCSV.toLocalIterator();
+               Assert.assertEquals("1.0,2.0", iterator.next());
+               Assert.assertEquals("3.0,4.0", iterator.next());
+       }
+
+       @Test
+       public void testInputBinaryBlockMatrixDML() {
+               System.out.println("MLContextTest - input BinaryBlockMatrix 
DML");
+
+               List<String> list = new ArrayList<String>();
+               list.add("10,20,30");
+               list.add("40,50,60");
+               list.add("70,80,90");
+               JavaRDD<String> javaRddString = sc.parallelize(list);
+
+               JavaRDD<Row> javaRddRow = javaRddString.map(new 
CommaSeparatedValueStringToRow());
+               SQLContext sqlContext = new SQLContext(sc);
+               List<StructField> fields = new ArrayList<StructField>();
+               fields.add(DataTypes.createStructField("C1", 
DataTypes.StringType, true));
+               fields.add(DataTypes.createStructField("C2", 
DataTypes.StringType, true));
+               fields.add(DataTypes.createStructField("C3", 
DataTypes.StringType, true));
+               StructType schema = DataTypes.createStructType(fields);
+               DataFrame dataFrame = sqlContext.createDataFrame(javaRddRow, 
schema);
+
+               BinaryBlockMatrix binaryBlockMatrix = new 
BinaryBlockMatrix(dataFrame);
+               Script script = dml("avg = avg(M);").in("M", 
binaryBlockMatrix).out("avg");
+               double avg = ml.execute(script).getDouble("avg");
+               Assert.assertEquals(50.0, avg, 0.0);
+       }
+
+       @Test
+       public void testInputBinaryBlockMatrixPYDML() {
+               System.out.println("MLContextTest - input BinaryBlockMatrix 
PYDML");
+
+               List<String> list = new ArrayList<String>();
+               list.add("10,20,30");
+               list.add("40,50,60");
+               list.add("70,80,90");
+               JavaRDD<String> javaRddString = sc.parallelize(list);
+
+               JavaRDD<Row> javaRddRow = javaRddString.map(new 
CommaSeparatedValueStringToRow());
+               SQLContext sqlContext = new SQLContext(sc);
+               List<StructField> fields = new ArrayList<StructField>();
+               fields.add(DataTypes.createStructField("C1", 
DataTypes.StringType, true));
+               fields.add(DataTypes.createStructField("C2", 
DataTypes.StringType, true));
+               fields.add(DataTypes.createStructField("C3", 
DataTypes.StringType, true));
+               StructType schema = DataTypes.createStructType(fields);
+               DataFrame dataFrame = sqlContext.createDataFrame(javaRddRow, 
schema);
+
+               BinaryBlockMatrix binaryBlockMatrix = new 
BinaryBlockMatrix(dataFrame);
+               Script script = pydml("avg = avg(M)").in("M", 
binaryBlockMatrix).out("avg");
+               double avg = ml.execute(script).getDouble("avg");
+               Assert.assertEquals(50.0, avg, 0.0);
+       }
+
+       @Test
+       public void testOutputBinaryBlockMatrixDML() {
+               System.out.println("MLContextTest - output BinaryBlockMatrix 
DML");
+               String s = "M = matrix('1 2 3 4', rows=2, cols=2);";
+               BinaryBlockMatrix binaryBlockMatrix = 
ml.execute(dml(s).out("M")).getBinaryBlockMatrix("M");
+
+               JavaRDD<String> javaRDDStringIJV = MLContextConversionUtil
+                               
.binaryBlockMatrixToJavaRDDStringIJV(binaryBlockMatrix);
+               List<String> lines = javaRDDStringIJV.collect();
+               Assert.assertEquals("1 1 1.0", lines.get(0));
+               Assert.assertEquals("1 2 2.0", lines.get(1));
+               Assert.assertEquals("2 1 3.0", lines.get(2));
+               Assert.assertEquals("2 2 4.0", lines.get(3));
+       }
+
+       @Test
+       public void testOutputBinaryBlockMatrixPYDML() {
+               System.out.println("MLContextTest - output BinaryBlockMatrix 
PYDML");
+               String s = "M = full('1 2 3 4', rows=2, cols=2);";
+               BinaryBlockMatrix binaryBlockMatrix = 
ml.execute(pydml(s).out("M")).getBinaryBlockMatrix("M");
+
+               JavaRDD<String> javaRDDStringIJV = MLContextConversionUtil
+                               
.binaryBlockMatrixToJavaRDDStringIJV(binaryBlockMatrix);
+               List<String> lines = javaRDDStringIJV.collect();
+               Assert.assertEquals("1 1 1.0", lines.get(0));
+               Assert.assertEquals("1 2 2.0", lines.get(1));
+               Assert.assertEquals("2 1 3.0", lines.get(2));
+               Assert.assertEquals("2 2 4.0", lines.get(3));
+       }
+
+       @Test
+       public void testOutputListStringCSVDenseDML() {
+               System.out.println("MLContextTest - output List String CSV 
Dense DML");
+
+               String s = "M = matrix('1 2 3 4', rows=2, cols=2); 
print(toString(M));";
+               Script script = dml(s).out("M");
+               MLResults results = ml.execute(script);
+               MatrixObject mo = results.getMatrixObject("M");
+               List<String> lines = 
MLContextConversionUtil.matrixObjectToListStringCSV(mo);
+               Assert.assertEquals("1.0,2.0", lines.get(0));
+               Assert.assertEquals("3.0,4.0", lines.get(1));
+       }
+
+       @Test
+       public void testOutputListStringCSVDensePYDML() {
+               System.out.println("MLContextTest - output List String CSV 
Dense PYDML");
+
+               String s = "M = full('1 2 3 4', rows=2, 
cols=2)\nprint(toString(M))";
+               Script script = pydml(s).out("M");
+               MLResults results = ml.execute(script);
+               MatrixObject mo = results.getMatrixObject("M");
+               List<String> lines = 
MLContextConversionUtil.matrixObjectToListStringCSV(mo);
+               Assert.assertEquals("1.0,2.0", lines.get(0));
+               Assert.assertEquals("3.0,4.0", lines.get(1));
+       }
+
+       @Test
+       public void testOutputListStringCSVSparseDML() {
+               System.out.println("MLContextTest - output List String CSV 
Sparse DML");
+
+               String s = "M = matrix(0, rows=10, cols=10); M[1,1]=1; 
M[1,2]=2; M[2,1]=3; M[2,2]=4; print(toString(M));";
+               Script script = dml(s).out("M");
+               MLResults results = ml.execute(script);
+               MatrixObject mo = results.getMatrixObject("M");
+               List<String> lines = 
MLContextConversionUtil.matrixObjectToListStringCSV(mo);
+               Assert.assertEquals("1.0,2.0", lines.get(0));
+               Assert.assertEquals("3.0,4.0", lines.get(1));
+       }
+
+       @Test
+       public void testOutputListStringCSVSparsePYDML() {
+               System.out.println("MLContextTest - output List String CSV 
Sparse PYDML");
+
+               String s = "M = full(0, rows=10, 
cols=10)\nM[0,0]=1\nM[0,1]=2\nM[1,0]=3\nM[1,1]=4\nprint(toString(M))";
+               Script script = pydml(s).out("M");
+               MLResults results = ml.execute(script);
+               MatrixObject mo = results.getMatrixObject("M");
+               List<String> lines = 
MLContextConversionUtil.matrixObjectToListStringCSV(mo);
+               Assert.assertEquals("1.0,2.0", lines.get(0));
+               Assert.assertEquals("3.0,4.0", lines.get(1));
+       }
+
+       @Test
+       public void testOutputListStringIJVDenseDML() {
+               System.out.println("MLContextTest - output List String IJV 
Dense DML");
+
+               String s = "M = matrix('1 2 3 4', rows=2, cols=2); 
print(toString(M));";
+               Script script = dml(s).out("M");
+               MLResults results = ml.execute(script);
+               MatrixObject mo = results.getMatrixObject("M");
+               List<String> lines = 
MLContextConversionUtil.matrixObjectToListStringIJV(mo);
+               Assert.assertEquals("1 1 1.0", lines.get(0));
+               Assert.assertEquals("1 2 2.0", lines.get(1));
+               Assert.assertEquals("2 1 3.0", lines.get(2));
+               Assert.assertEquals("2 2 4.0", lines.get(3));
+       }
+
+       @Test
+       public void testOutputListStringIJVDensePYDML() {
+               System.out.println("MLContextTest - output List String IJV 
Dense PYDML");
+
+               String s = "M = full('1 2 3 4', rows=2, 
cols=2)\nprint(toString(M))";
+               Script script = pydml(s).out("M");
+               MLResults results = ml.execute(script);
+               MatrixObject mo = results.getMatrixObject("M");
+               List<String> lines = 
MLContextConversionUtil.matrixObjectToListStringIJV(mo);
+               Assert.assertEquals("1 1 1.0", lines.get(0));
+               Assert.assertEquals("1 2 2.0", lines.get(1));
+               Assert.assertEquals("2 1 3.0", lines.get(2));
+               Assert.assertEquals("2 2 4.0", lines.get(3));
+       }
+
+       @Test
+       public void testOutputListStringIJVSparseDML() {
+               System.out.println("MLContextTest - output List String IJV 
Sparse DML");
+
+               String s = "M = matrix(0, rows=10, cols=10); M[1,1]=1; 
M[1,2]=2; M[2,1]=3; M[2,2]=4; print(toString(M));";
+               Script script = dml(s).out("M");
+               MLResults results = ml.execute(script);
+               MatrixObject mo = results.getMatrixObject("M");
+               List<String> lines = 
MLContextConversionUtil.matrixObjectToListStringIJV(mo);
+               Assert.assertEquals("1 1 1.0", lines.get(0));
+               Assert.assertEquals("1 2 2.0", lines.get(1));
+               Assert.assertEquals("2 1 3.0", lines.get(2));
+               Assert.assertEquals("2 2 4.0", lines.get(3));
+       }
+
+       @Test
+       public void testOutputListStringIJVSparsePYDML() {
+               System.out.println("MLContextTest - output List String IJV 
Sparse PYDML");
+
+               String s = "M = full(0, rows=10, 
cols=10)\nM[0,0]=1\nM[0,1]=2\nM[1,0]=3\nM[1,1]=4\nprint(toString(M))";
+               Script script = pydml(s).out("M");
+               MLResults results = ml.execute(script);
+               MatrixObject mo = results.getMatrixObject("M");
+               List<String> lines = 
MLContextConversionUtil.matrixObjectToListStringIJV(mo);
+               Assert.assertEquals("1 1 1.0", lines.get(0));
+               Assert.assertEquals("1 2 2.0", lines.get(1));
+               Assert.assertEquals("2 1 3.0", lines.get(2));
+               Assert.assertEquals("2 2 4.0", lines.get(3));
+       }
+
+       @Test
+       public void testJavaRDDGoodMetadataDML() {
+               System.out.println("MLContextTest - JavaRDD<String> good 
metadata DML");
+
+               List<String> list = new ArrayList<String>();
+               list.add("1,2,3");
+               list.add("4,5,6");
+               list.add("7,8,9");
+               JavaRDD<String> javaRDD = sc.parallelize(list);
+
+               MatrixMetadata mm = new MatrixMetadata(3, 3, 9);
+
+               Script script = dml("print('sum: ' + sum(M));").in("M", 
javaRDD, mm);
+               setExpectedStdOut("sum: 45.0");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testJavaRDDGoodMetadataPYDML() {
+               System.out.println("MLContextTest - JavaRDD<String> good 
metadata PYDML");
+
+               List<String> list = new ArrayList<String>();
+               list.add("1,2,3");
+               list.add("4,5,6");
+               list.add("7,8,9");
+               JavaRDD<String> javaRDD = sc.parallelize(list);
+
+               MatrixMetadata mm = new MatrixMetadata(3, 3, 9);
+
+               Script script = pydml("print('sum: ' + sum(M))").in("M", 
javaRDD, mm);
+               setExpectedStdOut("sum: 45.0");
+               ml.execute(script);
+       }
+
+       @Test(expected = MLContextException.class)
+       public void testJavaRDDBadMetadataDML() {
+               System.out.println("MLContextTest - JavaRDD<String> bad 
metadata DML");
+
+               List<String> list = new ArrayList<String>();
+               list.add("1,2,3");
+               list.add("4,5,6");
+               list.add("7,8,9");
+               JavaRDD<String> javaRDD = sc.parallelize(list);
+
+               MatrixMetadata mm = new MatrixMetadata(1, 1, 9);
+
+               Script script = dml("print('sum: ' + sum(M));").in("M", 
javaRDD, mm);
+               ml.execute(script);
+       }
+
+       @Test(expected = MLContextException.class)
+       public void testJavaRDDBadMetadataPYDML() {
+               System.out.println("MLContextTest - JavaRDD<String> bad 
metadata PYML");
+
+               List<String> list = new ArrayList<String>();
+               list.add("1,2,3");
+               list.add("4,5,6");
+               list.add("7,8,9");
+               JavaRDD<String> javaRDD = sc.parallelize(list);
+
+               MatrixMetadata mm = new MatrixMetadata(1, 1, 9);
+
+               Script script = dml("print('sum: ' + sum(M))").in("M", javaRDD, 
mm);
+               ml.execute(script);
+       }
+
+       @Test
+       public void testRDDGoodMetadataDML() {
+               System.out.println("MLContextTest - RDD<String> good metadata 
DML");
+
+               List<String> list = new ArrayList<String>();
+               list.add("1,1,1");
+               list.add("2,2,2");
+               list.add("3,3,3");
+               JavaRDD<String> javaRDD = sc.parallelize(list);
+               RDD<String> rdd = JavaRDD.toRDD(javaRDD);
+
+               MatrixMetadata mm = new MatrixMetadata(3, 3, 9);
+
+               Script script = dml("print('sum: ' + sum(M));").in("M", rdd, 
mm);
+               setExpectedStdOut("sum: 18.0");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testRDDGoodMetadataPYDML() {
+               System.out.println("MLContextTest - RDD<String> good metadata 
PYDML");
+
+               List<String> list = new ArrayList<String>();
+               list.add("1,1,1");
+               list.add("2,2,2");
+               list.add("3,3,3");
+               JavaRDD<String> javaRDD = sc.parallelize(list);
+               RDD<String> rdd = JavaRDD.toRDD(javaRDD);
+
+               MatrixMetadata mm = new MatrixMetadata(3, 3, 9);
+
+               Script script = pydml("print('sum: ' + sum(M))").in("M", rdd, 
mm);
+               setExpectedStdOut("sum: 18.0");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testDataFrameGoodMetadataDML() {
+               System.out.println("MLContextTest - DataFrame good metadata 
DML");
+
+               List<String> list = new ArrayList<String>();
+               list.add("10,20,30");
+               list.add("40,50,60");
+               list.add("70,80,90");
+               JavaRDD<String> javaRddString = sc.parallelize(list);
+
+               JavaRDD<Row> javaRddRow = javaRddString.map(new 
CommaSeparatedValueStringToRow());
+               SQLContext sqlContext = new SQLContext(sc);
+               List<StructField> fields = new ArrayList<StructField>();
+               fields.add(DataTypes.createStructField("C1", 
DataTypes.StringType, true));
+               fields.add(DataTypes.createStructField("C2", 
DataTypes.StringType, true));
+               fields.add(DataTypes.createStructField("C3", 
DataTypes.StringType, true));
+               StructType schema = DataTypes.createStructType(fields);
+               DataFrame dataFrame = sqlContext.createDataFrame(javaRddRow, 
schema);
+
+               MatrixMetadata mm = new MatrixMetadata(3, 3, 9);
+
+               Script script = dml("print('sum: ' + sum(M));").in("M", 
dataFrame, mm);
+               setExpectedStdOut("sum: 450.0");
+               ml.execute(script);
+       }
+
+       @Test
+       public void testDataFrameGoodMetadataPYDML() {
+               System.out.println("MLContextTest - DataFrame good metadata 
PYDML");
+
+               List<String> list = new ArrayList<String>();
+               list.add("10,20,30");
+               list.add("40,50,60");
+               list.add("70,80,90");
+               JavaRDD<String> javaRddString = sc.parallelize(list);
+
+               JavaRDD<Row> javaRddRow = javaRddString.map(new 
CommaSeparatedValueStringToRow());
+               SQLContext sqlContext = new SQLContext(sc);
+               List<StructField> fields = new ArrayList<StructField>();
+               fields.add(DataTypes.createStructField("C1", 
DataTypes.StringType, true));
+               fields.add(DataTypes.createStructField("C2", 
DataTypes.StringType, true));
+               fields.add(DataTypes.createStructField("C3", 
DataTypes.StringType, true));
+               StructType schema = DataTypes.createStructType(fields);
+               DataFrame dataFrame = sqlContext.createDataFrame(javaRddRow, 
schema);
+
+               MatrixMetadata mm = new MatrixMetadata(3, 3, 9);
+
+               Script script = pydml("print('sum: ' + sum(M))").in("M", 
dataFrame, mm);
+               setExpectedStdOut("sum: 450.0");
+               ml.execute(script);
+       }
+
+       @SuppressWarnings({ "rawtypes", "unchecked" })
+       @Test
+       public void testInputTupleSeqNoMetadataDML() {
+               System.out.println("MLContextTest - Tuple sequence no metadata 
DML");
+
+               List<String> list1 = new ArrayList<String>();
+               list1.add("1,2");
+               list1.add("3,4");
+               JavaRDD<String> javaRDD1 = sc.parallelize(list1);
+               RDD<String> rdd1 = JavaRDD.toRDD(javaRDD1);
+
+               List<String> list2 = new ArrayList<String>();
+               list2.add("5,6");
+               list2.add("7,8");
+               JavaRDD<String> javaRDD2 = sc.parallelize(list2);
+               RDD<String> rdd2 = JavaRDD.toRDD(javaRDD2);
+
+               Tuple2 tuple1 = new Tuple2("m1", rdd1);
+               Tuple2 tuple2 = new Tuple2("m2", rdd2);
+               List tupleList = new ArrayList();
+               tupleList.add(tuple1);
+               tupleList.add(tuple2);
+               Seq seq = JavaConversions.asScalaBuffer(tupleList).toSeq();
+
+               Script script = dml("print('sums: ' + sum(m1) + ' ' + 
sum(m2));").in(seq);
+               setExpectedStdOut("sums: 10.0 26.0");
+               ml.execute(script);
+       }
+
+       @SuppressWarnings({ "rawtypes", "unchecked" })
+       @Test
+       public void testInputTupleSeqNoMetadataPYDML() {
+               System.out.println("MLContextTest - Tuple sequence no metadata 
PYDML");
+
+               List<String> list1 = new ArrayList<String>();
+               list1.add("1,2");
+               list1.add("3,4");
+               JavaRDD<String> javaRDD1 = sc.parallelize(list1);
+               RDD<String> rdd1 = JavaRDD.toRDD(javaRDD1);
+
+               List<String> list2 = new ArrayList<String>();
+               list2.add("5,6");
+               list2.add("7,8");
+               JavaRDD<String> javaRDD2 = sc.parallelize(list2);
+               RDD<String> rdd2 = JavaRDD.toRDD(javaRDD2);
+
+               Tuple2 tuple1 = new Tuple2("m1", rdd1);
+               Tuple2 tuple2 = new Tuple2("m2", rdd2);
+               List tupleList = new ArrayList();
+               tupleList.add(tuple1);
+               tupleList.add(tuple2);
+               Seq seq = JavaConversions.asScalaBuffer(tupleList).toSeq();
+
+               Script script = pydml("print('sums: ' + sum(m1) + ' ' + 
sum(m2))").in(seq);
+               setExpectedStdOut("sums: 10.0 26.0");
+               ml.execute(script);
+       }
+
+       @SuppressWarnings({ "rawtypes", "unchecked" })
+       @Test
+       public void testInputTupleSeqWithMetadataDML() {
+               System.out.println("MLContextTest - Tuple sequence with 
metadata DML");
+
+               List<String> list1 = new ArrayList<String>();
+               list1.add("1,2");
+               list1.add("3,4");
+               JavaRDD<String> javaRDD1 = sc.parallelize(list1);
+               RDD<String> rdd1 = JavaRDD.toRDD(javaRDD1);
+
+               List<String> list2 = new ArrayList<String>();
+               list2.add("5,6");
+               list2.add("7,8");
+               JavaRDD<String> javaRDD2 = sc.parallelize(list2);
+               RDD<String> rdd2 = JavaRDD.toRDD(javaRDD2);
+
+               MatrixMetadata mm1 = new MatrixMetadata(2, 2);
+               MatrixMetadata mm2 = new MatrixMetadata(2, 2);
+
+               Tuple3 tuple1 = new Tuple3("m1", rdd1, mm1);
+               Tuple3 tuple2 = new Tuple3("m2", rdd2, mm2);
+               List tupleList = new ArrayList();
+               tupleList.add(tuple1);
+               tupleList.add(tuple2);
+               Seq seq = JavaConversions.asScalaBuffer(tupleList).toSeq();
+
+               Script script = dml("print('sums: ' + sum(m1) + ' ' + 
sum(m2));").in(seq);
+               setExpectedStdOut("sums: 10.0 26.0");
+               ml.execute(script);
+       }
+
+       @SuppressWarnings({ "rawtypes", "unchecked" })
+       @Test
+       public void testInputTupleSeqWithMetadataPYDML() {
+               System.out.println("MLContextTest - Tuple sequence with 
metadata PYDML");
+
+               List<String> list1 = new ArrayList<String>();
+               list1.add("1,2");
+               list1.add("3,4");
+               JavaRDD<String> javaRDD1 = sc.parallelize(list1);
+               RDD<String> rdd1 = JavaRDD.toRDD(javaRDD1);
+
+               List<String> list2 = new ArrayList<String>();
+               list2.add("5,6");
+               list2.add("7,8");
+               JavaRDD<String> javaRDD2 = sc.parallelize(list2);
+               RDD<String> rdd2 = JavaRDD.toRDD(javaRDD2);
+
+               MatrixMetadata mm1 = new MatrixMetadata(2, 2);
+               MatrixMetadata mm2 = new MatrixMetadata(2, 2);
+
+               Tuple3 tuple1 = new Tuple3("m1", rdd1, mm1);
+               Tuple3 tuple2 = new Tuple3("m2", rdd2, mm2);
+               List tupleList = new ArrayList();
+               tupleList.add(tuple1);
+               tupleList.add(tuple2);
+               Seq seq = JavaConversions.asScalaBuffer(tupleList).toSeq();
+
+               Script script = pydml("print('sums: ' + sum(m1) + ' ' + 
sum(m2))").in(seq);
+               setExpectedStdOut("sums: 10.0 26.0");
+               ml.execute(script);
+       }
+
+       // NOTE: Uncomment these tests once they work
+
+       // @SuppressWarnings({ "rawtypes", "unchecked" })
+       // @Test
+       // public void testInputTupleSeqWithAndWithoutMetadataDML() {
+       // System.out.println("MLContextTest - Tuple sequence with and without 
metadata DML");
+       //
+       // List<String> list1 = new ArrayList<String>();
+       // list1.add("1,2");
+       // list1.add("3,4");
+       // JavaRDD<String> javaRDD1 = sc.parallelize(list1);
+       // RDD<String> rdd1 = JavaRDD.toRDD(javaRDD1);
+       //
+       // List<String> list2 = new ArrayList<String>();
+       // list2.add("5,6");
+       // list2.add("7,8");
+       // JavaRDD<String> javaRDD2 = sc.parallelize(list2);
+       // RDD<String> rdd2 = JavaRDD.toRDD(javaRDD2);
+       //
+       // MatrixMetadata mm1 = new MatrixMetadata(2, 2);
+       //
+       // Tuple3 tuple1 = new Tuple3("m1", rdd1, mm1);
+       // Tuple2 tuple2 = new Tuple2("m2", rdd2);
+       // List tupleList = new ArrayList();
+       // tupleList.add(tuple1);
+       // tupleList.add(tuple2);
+       // Seq seq = JavaConversions.asScalaBuffer(tupleList).toSeq();
+       //
+       // Script script =
+       // dml("print('sums: ' + sum(m1) + ' ' + sum(m2));").in(seq);
+       // setExpectedStdOut("sums: 10.0 26.0");
+       // ml.execute(script);
+       // }
+       //
+       // @SuppressWarnings({ "rawtypes", "unchecked" })
+       // @Test
+       // public void testInputTupleSeqWithAndWithoutMetadataPYDML() {
+       // System.out.println("MLContextTest - Tuple sequence with and without 
metadata PYDML");
+       //
+       // List<String> list1 = new ArrayList<String>();
+       // list1.add("1,2");
+       // list1.add("3,4");
+       // JavaRDD<String> javaRDD1 = sc.parallelize(list1);
+       // RDD<String> rdd1 = JavaRDD.toRDD(javaRDD1);
+       //
+       // List<String> list2 = new ArrayList<String>();
+       // list2.add("5,6");
+       // list2.add("7,8");
+       // JavaRDD<String> javaRDD2 = sc.parallelize(list2);
+       // RDD<String> rdd2 = JavaRDD.toRDD(javaRDD2);
+       //
+       // MatrixMetadata mm1 = new MatrixMetadata(2, 2);
+       //
+       // Tuple3 tuple1 = new Tuple3("m1", rdd1, mm1);
+       // Tuple2 tuple2 = new Tuple2("m2", rdd2);
+       // List tupleList = new ArrayList();
+       // tupleList.add(tuple1);
+       // tupleList.add(tuple2);
+       // Seq seq = JavaConversions.asScalaBuffer(tupleList).toSeq();
+       //
+       // Script script =
+       // pydml("print('sums: ' + sum(m1) + ' ' + sum(m2))").in(seq);
+       // setExpectedStdOut("sums: 10.0 26.0");
+       // ml.execute(script);
+       // }
+
+       @After
+       public void tearDown() {
+               super.tearDown();
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/457bbd3a/src/test/scripts/org/apache/sysml/api/mlcontext/1234.csv
----------------------------------------------------------------------
diff --git a/src/test/scripts/org/apache/sysml/api/mlcontext/1234.csv 
b/src/test/scripts/org/apache/sysml/api/mlcontext/1234.csv
new file mode 100644
index 0000000..e055049
--- /dev/null
+++ b/src/test/scripts/org/apache/sysml/api/mlcontext/1234.csv
@@ -0,0 +1,2 @@
+1.0,2.0
+3.0,4.0

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/457bbd3a/src/test/scripts/org/apache/sysml/api/mlcontext/1234.csv.mtd
----------------------------------------------------------------------
diff --git a/src/test/scripts/org/apache/sysml/api/mlcontext/1234.csv.mtd 
b/src/test/scripts/org/apache/sysml/api/mlcontext/1234.csv.mtd
new file mode 100644
index 0000000..d57e93d
--- /dev/null
+++ b/src/test/scripts/org/apache/sysml/api/mlcontext/1234.csv.mtd
@@ -0,0 +1,13 @@
+{
+    "data_type": "matrix",
+    "value_type": "double",
+    "rows": 2,
+    "cols": 2,
+    "nnz": 4,
+    "format": "csv",
+    "header": false,
+    "sep": ",",
+    "description": {
+        "author": "SystemML"
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/457bbd3a/src/test/scripts/org/apache/sysml/api/mlcontext/hello-world.dml
----------------------------------------------------------------------
diff --git a/src/test/scripts/org/apache/sysml/api/mlcontext/hello-world.dml 
b/src/test/scripts/org/apache/sysml/api/mlcontext/hello-world.dml
new file mode 100644
index 0000000..32e8eb5
--- /dev/null
+++ b/src/test/scripts/org/apache/sysml/api/mlcontext/hello-world.dml
@@ -0,0 +1,22 @@
+#-------------------------------------------------------------
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+#-------------------------------------------------------------
+
+print('hello world');

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/457bbd3a/src/test/scripts/org/apache/sysml/api/mlcontext/hello-world.pydml
----------------------------------------------------------------------
diff --git a/src/test/scripts/org/apache/sysml/api/mlcontext/hello-world.pydml 
b/src/test/scripts/org/apache/sysml/api/mlcontext/hello-world.pydml
new file mode 100644
index 0000000..01c348b
--- /dev/null
+++ b/src/test/scripts/org/apache/sysml/api/mlcontext/hello-world.pydml
@@ -0,0 +1,22 @@
+#-------------------------------------------------------------
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+#-------------------------------------------------------------
+
+print('hello world')

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/457bbd3a/src/test/scripts/org/apache/sysml/api/mlcontext/one-two-three-four.csv
----------------------------------------------------------------------
diff --git 
a/src/test/scripts/org/apache/sysml/api/mlcontext/one-two-three-four.csv 
b/src/test/scripts/org/apache/sysml/api/mlcontext/one-two-three-four.csv
new file mode 100644
index 0000000..eedf6ea
--- /dev/null
+++ b/src/test/scripts/org/apache/sysml/api/mlcontext/one-two-three-four.csv
@@ -0,0 +1,2 @@
+one,two
+three,four

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/457bbd3a/src/test/scripts/org/apache/sysml/api/mlcontext/one-two-three-four.csv.mtd
----------------------------------------------------------------------
diff --git 
a/src/test/scripts/org/apache/sysml/api/mlcontext/one-two-three-four.csv.mtd 
b/src/test/scripts/org/apache/sysml/api/mlcontext/one-two-three-four.csv.mtd
new file mode 100644
index 0000000..8c6dcd1
--- /dev/null
+++ b/src/test/scripts/org/apache/sysml/api/mlcontext/one-two-three-four.csv.mtd
@@ -0,0 +1,5 @@
+{  
+    "data_type": "frame",  
+    "format": "csv",  
+    "header": false
+}

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/457bbd3a/src/test_suites/java/org/apache/sysml/test/integration/mlcontext/ZPackageSuite.java
----------------------------------------------------------------------
diff --git 
a/src/test_suites/java/org/apache/sysml/test/integration/mlcontext/ZPackageSuite.java
 
b/src/test_suites/java/org/apache/sysml/test/integration/mlcontext/ZPackageSuite.java
new file mode 100644
index 0000000..5687a55
--- /dev/null
+++ 
b/src/test_suites/java/org/apache/sysml/test/integration/mlcontext/ZPackageSuite.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.sysml.test.integration.mlcontext;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+/** Group together the tests in this package/related subpackages into a single 
suite so that the Maven build
+ *  won't run two of them at once. Since the DML and PyDML equivalent tests 
currently share the same directories,
+ *  they should not be run in parallel. */
+@RunWith(Suite.class)
[email protected]({
+  org.apache.sysml.test.integration.mlcontext.MLContextTest.class
+})
+
+
+/** This class is just a holder for the above JUnit annotations. */
+public class ZPackageSuite {
+
+}

Reply via email to