This is an automated email from the ASF dual-hosted git repository.

mboehm7 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/systemds.git


The following commit(s) were added to refs/heads/main by this push:
     new 52ecb73eab [MINOR] Improved error handling transform spec parsing
52ecb73eab is described below

commit 52ecb73eab2eda323602e3105ccfd6e9d4111572
Author: Matthias Boehm <[email protected]>
AuthorDate: Tue Oct 18 13:42:36 2022 -0400

    [MINOR] Improved error handling transform spec parsing
    
    So far transformencode returned incomprehensible parsing errors during
    runtime when an encoder type was incorrectly specified (e.g., dummy
    instead of dummycode) because the encoder constructions creates lists
    for known encoders and assumes everything else to be pass-through.
    
    We now do explicit checks for invalid encoders with proper error
    handling.
---
 .../sysds/runtime/transform/encode/EncoderFactory.java  |  1 +
 .../sysds/runtime/transform/meta/TfMetaUtils.java       | 17 +++++++++++++++++
 2 files changed, 18 insertions(+)

diff --git 
a/src/main/java/org/apache/sysds/runtime/transform/encode/EncoderFactory.java 
b/src/main/java/org/apache/sysds/runtime/transform/encode/EncoderFactory.java
index f7f7a7f990..ce5ecda583 100644
--- 
a/src/main/java/org/apache/sysds/runtime/transform/encode/EncoderFactory.java
+++ 
b/src/main/java/org/apache/sysds/runtime/transform/encode/EncoderFactory.java
@@ -74,6 +74,7 @@ public class EncoderFactory {
                        List<ColumnEncoderComposite> lencoders = new 
ArrayList<>();
                        HashMap<Integer, List<ColumnEncoder>> colEncoders = new 
HashMap<>();
                        boolean ids = jSpec.containsKey("ids") && 
jSpec.getBoolean("ids");
+                       TfMetaUtils.checkValidEncoders(jSpec);
 
                        // prepare basic id lists (recode, feature hash, 
dummycode, pass-through)
                        List<Integer> rcIDs = Arrays.asList(ArrayUtils
diff --git 
a/src/main/java/org/apache/sysds/runtime/transform/meta/TfMetaUtils.java 
b/src/main/java/org/apache/sysds/runtime/transform/meta/TfMetaUtils.java
index 801e3ef0a7..335855d56a 100644
--- a/src/main/java/org/apache/sysds/runtime/transform/meta/TfMetaUtils.java
+++ b/src/main/java/org/apache/sysds/runtime/transform/meta/TfMetaUtils.java
@@ -28,8 +28,11 @@ import java.io.InputStreamReader;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map.Entry;
+import java.util.Set;
 
 import org.apache.commons.lang.ArrayUtils;
 import org.apache.sysds.api.jmlc.Connection;
@@ -473,4 +476,18 @@ public class TfMetaUtils
                        return IOUtilFunctions.toString(is);
                }
        }
+
+       @SuppressWarnings("unchecked")
+       public static void checkValidEncoders(JSONObject jSpec) {
+               Set<String> validEncoders = new HashSet<>();
+               validEncoders.addAll(Arrays.asList("ids","K"));
+               for( TfMethod tf : TfMethod.values() )
+                       validEncoders.add(tf.toString());
+               Iterator<String> keys = jSpec.keys();
+               while( keys.hasNext() ) {
+                       String key = keys.next();
+                       if( !validEncoders.contains(key) )
+                               throw new DMLRuntimeException("Transform 
specification includes an invalid encoder: "+key);
+               }
+       }
 }

Reply via email to