You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@systemml.apache.org by mb...@apache.org on 2018/04/15 05:46:04 UTC
systemml git commit: [SYSTEMML-2245] Support for external UDFs with
variable num outputs
Repository: systemml
Updated Branches:
refs/heads/master 2e6e02f0b -> a044ab21d
[SYSTEMML-2245] Support for external UDFs with variable num outputs
This patch adds support for external (i.e., java-based) UDFs with
variable numbers of outputs which is unknown until the UDF has been
executed. In detail, we now allow external UDFs to override the default
assumption of a fixed number of outputs and only verify bound outputs
for UDFs where this is possible.
Project: http://git-wip-us.apache.org/repos/asf/systemml/repo
Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/a044ab21
Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/a044ab21
Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/a044ab21
Branch: refs/heads/master
Commit: a044ab21db1400dc18c85519f25fae4cec38e7b5
Parents: 2e6e02f
Author: Matthias Boehm <mb...@gmail.com>
Authored: Sat Apr 14 22:47:44 2018 -0700
Committer: Matthias Boehm <mb...@gmail.com>
Committed: Sat Apr 14 22:47:44 2018 -0700
----------------------------------------------------------------------
.../controlprogram/ExternalFunctionProgramBlock.java | 5 +++--
src/main/java/org/apache/sysml/udf/PackageFunction.java | 10 ++++++++++
2 files changed, 13 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/systemml/blob/a044ab21/src/main/java/org/apache/sysml/runtime/controlprogram/ExternalFunctionProgramBlock.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/controlprogram/ExternalFunctionProgramBlock.java b/src/main/java/org/apache/sysml/runtime/controlprogram/ExternalFunctionProgramBlock.java
index 72a7b2b..ae50592 100644
--- a/src/main/java/org/apache/sysml/runtime/controlprogram/ExternalFunctionProgramBlock.java
+++ b/src/main/java/org/apache/sysml/runtime/controlprogram/ExternalFunctionProgramBlock.java
@@ -285,8 +285,9 @@ public class ExternalFunctionProgramBlock extends FunctionProgramBlock
}
protected void verifyFunctionInputsOutputs(PackageFunction fun, CPOperand[] inputs, CPOperand[] outputs) {
- // verify number of outputs
- if( outputs.length != fun.getNumFunctionOutputs() ) {
+ // verify number of outputs if fixed, otherwise best effort handle of outputs
+ if( !fun.hasVarNumFunctionOutputs()
+ && outputs.length != fun.getNumFunctionOutputs() ) {
throw new DMLRuntimeException(
"Number of function outputs ("+fun.getNumFunctionOutputs()+") " +
"does not match with declaration ("+outputs.length+").");
http://git-wip-us.apache.org/repos/asf/systemml/blob/a044ab21/src/main/java/org/apache/sysml/udf/PackageFunction.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/udf/PackageFunction.java b/src/main/java/org/apache/sysml/udf/PackageFunction.java
index 408900c..016f58b 100644
--- a/src/main/java/org/apache/sysml/udf/PackageFunction.java
+++ b/src/main/java/org/apache/sysml/udf/PackageFunction.java
@@ -79,6 +79,16 @@ public abstract class PackageFunction implements Serializable
public abstract int getNumFunctionOutputs();
/**
+ * Indicates if the function has a variable number of outputs, that
+ * is unknown until the function has been executed.
+ *
+ * @return true if the number of outputs is unknown; otherwise false.
+ */
+ public boolean hasVarNumFunctionOutputs() {
+ return false;
+ }
+
+ /**
* Method to get a specific output of this package function. This method
* should be implemented in the user's function.
*