Repository: incubator-systemml
Updated Branches:
  refs/heads/master 701b9e319 -> b7657dbc3


[SYSTEMML-886] Add setStatistics and setExplain to the PythonAPI

Closes #226.


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

Branch: refs/heads/master
Commit: b7657dbc32187d1a983f3adbbd618082ec8cec76
Parents: 701b9e3
Author: MechCoder <[email protected]>
Authored: Fri Sep 2 15:06:14 2016 -0700
Committer: Mike Dusenberry <[email protected]>
Committed: Fri Sep 2 15:06:14 2016 -0700

----------------------------------------------------------------------
 .../apache/sysml/api/mlcontext/MLContext.java   | 67 +++++++++++++-------
 src/main/python/systemml/mlcontext.py           | 38 ++++++++++-
 2 files changed, 81 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/b7657dbc/src/main/java/org/apache/sysml/api/mlcontext/MLContext.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/api/mlcontext/MLContext.java 
b/src/main/java/org/apache/sysml/api/mlcontext/MLContext.java
index be37575..88c937b 100644
--- a/src/main/java/org/apache/sysml/api/mlcontext/MLContext.java
+++ b/src/main/java/org/apache/sysml/api/mlcontext/MLContext.java
@@ -6,9 +6,9 @@
  * 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
@@ -146,7 +146,7 @@ public class MLContext {
        /**
         * Retrieve the currently active MLContext. This is used internally by
         * SystemML via MLContextProxy.
-        * 
+        *
         * @return the active MLContext
         */
        public static MLContext getActiveMLContext() {
@@ -156,7 +156,7 @@ public class MLContext {
        /**
         * Create an MLContext based on a SparkContext for interaction with 
SystemML
         * on Spark.
-        * 
+        *
         * @param sparkContext
         *            SparkContext
         */
@@ -167,7 +167,7 @@ public class MLContext {
        /**
         * Create an MLContext based on a JavaSparkContext for interaction with
         * SystemML on Spark.
-        * 
+        *
         * @param javaSparkContext
         *            JavaSparkContext
         */
@@ -178,7 +178,7 @@ public class MLContext {
        /**
         * Create an MLContext based on a SparkContext for interaction with 
SystemML
         * on Spark, optionally monitor performance.
-        * 
+        *
         * @param sc
         *            SparkContext object.
         * @param monitorPerformance
@@ -193,7 +193,7 @@ public class MLContext {
         * Initialize MLContext. Verify Spark version supported, set default
         * execution mode, set MLContextProxy, set default config, set compiler
         * config, and configure monitoring if needed.
-        * 
+        *
         * @param sc
         *            SparkContext object.
         * @param monitorPerformance
@@ -242,7 +242,7 @@ public class MLContext {
        /**
         * Set configuration property, such as
         * {@code setConfigProperty("localtmpdir", "/tmp/systemml")}.
-        * 
+        *
         * @param propertyName
         *            property name
         * @param propertyValue
@@ -259,7 +259,7 @@ public class MLContext {
 
        /**
         * Execute a DML or PYDML Script.
-        * 
+        *
         * @param script
         *            The DML or PYDML Script object to execute.
         */
@@ -275,7 +275,7 @@ public class MLContext {
         * Execute a DML or PYDML Script object using a ScriptExecutor. The
         * ScriptExecutor class can be extended to allow the modification of the
         * default execution pathway.
-        * 
+        *
         * @param script
         *            the DML or PYDML Script object
         * @param scriptExecutor
@@ -304,7 +304,7 @@ public class MLContext {
 
        /**
         * Set SystemML configuration based on a configuration file.
-        * 
+        *
         * @param configFilePath
         *            path to the configuration file
         */
@@ -314,7 +314,7 @@ public class MLContext {
 
        /**
         * Obtain the SparkMonitoringUtil if it is available.
-        * 
+        *
         * @return the SparkMonitoringUtil if it is available.
         */
        public SparkMonitoringUtil getSparkMonitoringUtil() {
@@ -323,7 +323,7 @@ public class MLContext {
 
        /**
         * Obtain the SparkContext associated with this MLContext.
-        * 
+        *
         * @return the SparkContext associated with this MLContext.
         */
        public SparkContext getSparkContext() {
@@ -333,7 +333,7 @@ public class MLContext {
        /**
         * Whether or not an explanation of the DML/PYDML program should be 
output
         * to standard output.
-        * 
+        *
         * @return {@code true} if explanation should be output, {@code false}
         *         otherwise
         */
@@ -344,7 +344,7 @@ public class MLContext {
        /**
         * Whether or not an explanation of the DML/PYDML program should be 
output
         * to standard output.
-        * 
+        *
         * @param explain
         *            {@code true} if explanation should be output, {@code 
false}
         *            otherwise
@@ -356,7 +356,7 @@ public class MLContext {
        /**
         * Set the level of program explanation that should be displayed if 
explain
         * is set to true.
-        * 
+        *
         * @param explainLevel
         *            the level of program explanation
         */
@@ -365,6 +365,27 @@ public class MLContext {
        }
 
        /**
+        * Set the level of program explanation that should be displayed if 
explain
+        * is set to true.
+        *
+        * @param explainLevel
+        *            string denoting program explanation
+        */
+       public void setExplainLevel(String explainLevel) {
+               if (explainLevel != null) {
+                       for (ExplainLevel exp : ExplainLevel.values()) {
+                               String expString = exp.toString();
+                               if (expString.equalsIgnoreCase(explainLevel)) {
+                                       setExplainLevel(exp);
+                                       return;
+                               }
+                       }
+               }
+               throw new MLContextException("Failed to parse explain level: "+ 
explainLevel + " " +
+                               "(valid types: hops, runtime, recompile_hops, 
recompile_runtime).");
+       }
+
+       /**
         * Used internally by MLContextProxy.
         *
         */
@@ -377,7 +398,7 @@ public class MLContext {
                                DataExpression exp = (DataExpression) source;
                                // Do not check metadata file for registered 
reads
                                exp.setCheckMetadata(false);
-                               
+
                                //Value retured from getVarParam is of type 
stringidentifier at runtime, but at compile type its Expression
                                //Could not find better way to compare this 
condition.
                                Expression datatypeExp = 
((DataExpression)source).getVarParam("data_type");
@@ -402,7 +423,7 @@ public class MLContext {
                                                                blp, bcp, elp, 
ecp));
                                                
exp.addVarParam(DataExpression.VALUETYPEPARAM, new StringIdentifier("double", 
source.getFilename(),
                                                                blp, bcp, elp, 
ecp));
-       
+
                                                if (mo.getMetaData() instanceof 
MatrixFormatMetaData) {
                                                        MatrixFormatMetaData 
metaData = (MatrixFormatMetaData) mo.getMetaData();
                                                        if 
(metaData.getOutputInfo() == OutputInfo.CSVOutputInfo) {
@@ -492,7 +513,7 @@ public class MLContext {
        /**
         * Whether or not statistics of the DML/PYDML program execution should 
be
         * output to standard output.
-        * 
+        *
         * @return {@code true} if statistics should be output, {@code false}
         *         otherwise
         */
@@ -503,7 +524,7 @@ public class MLContext {
        /**
         * Whether or not statistics of the DML/PYDML program execution should 
be
         * output to standard output.
-        * 
+        *
         * @param statistics
         *            {@code true} if statistics should be output, {@code false}
         *            otherwise
@@ -515,7 +536,7 @@ public class MLContext {
 
        /**
         * Obtain a map of the scripts that have executed.
-        * 
+        *
         * @return a map of the scripts that have executed
         */
        public Map<String, Script> getScripts() {
@@ -524,7 +545,7 @@ public class MLContext {
 
        /**
         * Obtain a script that has executed by name.
-        * 
+        *
         * @param name
         *            the name of the script
         * @return the script corresponding to the name
@@ -539,7 +560,7 @@ public class MLContext {
 
        /**
         * Display the history of scripts that have executed.
-        * 
+        *
         * @return the history of scripts that have executed
         */
        public String history() {

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/b7657dbc/src/main/python/systemml/mlcontext.py
----------------------------------------------------------------------
diff --git a/src/main/python/systemml/mlcontext.py 
b/src/main/python/systemml/mlcontext.py
index c578a8e..da8e025 100644
--- a/src/main/python/systemml/mlcontext.py
+++ b/src/main/python/systemml/mlcontext.py
@@ -19,6 +19,8 @@
 #
 #-------------------------------------------------------------
 
+__all__ = ['MLResults', 'MLContext', 'Script', 'dml', 'pydml']
+
 import os
 
 try:
@@ -26,6 +28,7 @@ try:
     from py4j.java_gateway import JavaObject
 except ImportError:
     raise ImportError('Unable to import JavaObject from py4j.java_gateway. 
Hint: Make sure you are running with pyspark')
+
 from pyspark import SparkContext
 import pyspark.mllib.common
 from pyspark.sql import DataFrame, SQLContext
@@ -298,5 +301,38 @@ class MLContext(object):
             script_java.out(val)
         return MLResults(self._ml.execute(script_java), self._sc)
 
+    def setStatistics(self, statistics):
+        """
+        Whether or not to output statistics (such as execution time, elapsed 
time)
+        about script executions.
 
-__all__ = ['MLResults', 'MLContext', 'Script', 'dml', 'pydml']
+        Parameters
+        ----------
+        statistics: boolean
+        """
+        self._ml.setStatistics(bool(statistics))
+        return self
+
+    def setExplain(self, explain):
+        """
+        Explanation about the program. Mainly intended for developers.
+
+        Parameters
+        ----------
+        explain: boolean
+        """
+        self._ml.setExplain(bool(explain))
+        return self
+
+    def setExplainLevel(self, explainLevel):
+        """
+        Set explain level.
+
+        Parameters
+        ----------
+        explainLevel: string
+            Can be one of "hops", "runtime", "recompile_hops", 
"recompile_runtime"
+            or in the above in upper case.
+        """
+        self._ml.setExplainLevel(explainLevel)
+        return self

Reply via email to