You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by jq...@apache.org on 2021/11/09 12:12:17 UTC

[flink-ml] 01/02: [FLINK-24354][FLIP-174] Remove old param-related classes

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

jqin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink-ml.git

commit 1f0fe565f8f79ac084d7763f5f0da3fdb36bfa00
Author: Dong Lin <li...@gmail.com>
AuthorDate: Sun Sep 26 21:37:32 2021 +0800

    [FLINK-24354][FLIP-174] Remove old param-related classes
---
 .../apache/flink/ml/api/misc/param/ParamInfo.java  | 151 -----------
 .../flink/ml/api/misc/param/ParamInfoFactory.java  | 134 ----------
 .../flink/ml/api/misc/param/ParamValidator.java    |  39 ---
 .../org/apache/flink/ml/api/misc/param/Params.java | 277 ---------------------
 .../apache/flink/ml/api/misc/param/WithParams.java |  60 -----
 .../flink/ml/util/param/ExtractParamInfosUtil.java |  71 ------
 .../org/apache/flink/ml/api/misc/ParamsTest.java   | 179 -------------
 .../ml/util/param/ExtractParamInfosUtilTest.java   | 109 --------
 8 files changed, 1020 deletions(-)

diff --git a/flink-ml-api/src/main/java/org/apache/flink/ml/api/misc/param/ParamInfo.java b/flink-ml-api/src/main/java/org/apache/flink/ml/api/misc/param/ParamInfo.java
deleted file mode 100644
index b0f7ce9..0000000
--- a/flink-ml-api/src/main/java/org/apache/flink/ml/api/misc/param/ParamInfo.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * 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.flink.ml.api.misc.param;
-
-import org.apache.flink.annotation.PublicEvolving;
-import org.apache.flink.util.Preconditions;
-
-/**
- * Definition of a parameter, including name, type, default value, validator and so on.
- *
- * <p>A parameter can either be optional or non-optional.
- *
- * <ul>
- *   <li>A non-optional parameter should not have a default value. Instead, its value must be
- *       provided by the users.
- *   <li>An optional parameter may or may not have a default value.
- * </ul>
- *
- * <p>Please see {@link Params#get(ParamInfo)} and {@link Params#contains(ParamInfo)} for more
- * details about the behavior.
- *
- * <p>A parameter may have aliases in addition to the parameter name for convenience and
- * compatibility purposes. One should not set values for both parameter name and an alias. One and
- * only one value should be set either under the parameter name or one of the alias.
- *
- * @param <V> the type of the param value
- */
-@PublicEvolving
-public class ParamInfo<V> {
-    private final String name;
-    private final String[] alias;
-    private final String description;
-    private final boolean isOptional;
-    private final boolean hasDefaultValue;
-    private final V defaultValue;
-    private final ParamValidator<V> validator;
-    private final Class<V> valueClass;
-
-    ParamInfo(
-            String name,
-            String[] alias,
-            String description,
-            boolean isOptional,
-            boolean hasDefaultValue,
-            V defaultValue,
-            ParamValidator<V> validator,
-            Class<V> valueClass) {
-        this.name = name;
-        this.alias = alias;
-        this.description = description;
-        this.isOptional = isOptional;
-        this.hasDefaultValue = hasDefaultValue;
-        this.defaultValue = defaultValue;
-        this.validator = validator;
-        this.valueClass = valueClass;
-    }
-
-    /**
-     * Returns the name of the parameter. The name must be unique in the stage the ParamInfo belongs
-     * to.
-     *
-     * @return the name of the parameter
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * Returns the aliases of the parameter. The alias will be an empty string array by default.
-     *
-     * @return the aliases of the parameter
-     */
-    public String[] getAlias() {
-        Preconditions.checkNotNull(alias);
-        return alias;
-    }
-
-    /**
-     * Returns the description of the parameter.
-     *
-     * @return the description of the parameter
-     */
-    public String getDescription() {
-        return description;
-    }
-
-    /**
-     * Returns whether the parameter is optional.
-     *
-     * @return {@code true} if the param is optional, {@code false} otherwise
-     */
-    public boolean isOptional() {
-        return isOptional;
-    }
-
-    /**
-     * Returns whether the parameter has a default value. Since {@code null} may also be a valid
-     * default value of a parameter, the return of getDefaultValue may be {@code null} even when
-     * this method returns true.
-     *
-     * @return {@code true} if the param is has a default value(even if it's a {@code null}), {@code
-     *     false} otherwise
-     */
-    public boolean hasDefaultValue() {
-        return hasDefaultValue;
-    }
-
-    /**
-     * Returns the default value of the parameter. The default value should be defined whenever
-     * possible. The default value can be a {@code null} even if hasDefaultValue returns true.
-     *
-     * @return the default value of the param, {@code null} if not defined
-     */
-    public V getDefaultValue() {
-        return defaultValue;
-    }
-
-    /**
-     * Returns the validator to validate the value of the parameter.
-     *
-     * @return the validator to validate the value of the parameter.
-     */
-    public ParamValidator<V> getValidator() {
-        return validator;
-    }
-
-    /**
-     * Returns the class of the param value. It's usually needed in serialization.
-     *
-     * @return the class of the param value
-     */
-    public Class<V> getValueClass() {
-        return valueClass;
-    }
-}
diff --git a/flink-ml-api/src/main/java/org/apache/flink/ml/api/misc/param/ParamInfoFactory.java b/flink-ml-api/src/main/java/org/apache/flink/ml/api/misc/param/ParamInfoFactory.java
deleted file mode 100644
index 5199a5d..0000000
--- a/flink-ml-api/src/main/java/org/apache/flink/ml/api/misc/param/ParamInfoFactory.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * 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.flink.ml.api.misc.param;
-
-/** Factory to create ParamInfo, all ParamInfos should be created via this class. */
-public class ParamInfoFactory {
-    /**
-     * Returns a ParamInfoBuilder to configure and build a new ParamInfo.
-     *
-     * @param name name of the new ParamInfo
-     * @param valueClass value class of the new ParamInfo
-     * @param <V> value type of the new ParamInfo
-     * @return a ParamInfoBuilder
-     */
-    public static <V> ParamInfoBuilder<V> createParamInfo(String name, Class<V> valueClass) {
-        return new ParamInfoBuilder<>(name, valueClass);
-    }
-
-    /**
-     * Builder to build a new ParamInfo. Builder is created by ParamInfoFactory with name and
-     * valueClass set.
-     *
-     * @param <V> value type of the new ParamInfo
-     */
-    public static class ParamInfoBuilder<V> {
-        private String name;
-        private String[] alias = new String[0];
-        private String description;
-        private boolean isOptional = true;
-        private boolean hasDefaultValue = false;
-        private V defaultValue;
-        private ParamValidator<V> validator;
-        private Class<V> valueClass;
-
-        ParamInfoBuilder(String name, Class<V> valueClass) {
-            this.name = name;
-            this.valueClass = valueClass;
-        }
-
-        /**
-         * Sets the aliases of the parameter.
-         *
-         * @return the builder itself
-         */
-        public ParamInfoBuilder<V> setAlias(String[] alias) {
-            this.alias = alias;
-            return this;
-        }
-
-        /**
-         * Sets the description of the parameter.
-         *
-         * @return the builder itself
-         */
-        public ParamInfoBuilder<V> setDescription(String description) {
-            this.description = description;
-            return this;
-        }
-
-        /**
-         * Sets the flag indicating the parameter is optional. The parameter is optional by default.
-         *
-         * @return the builder itself
-         */
-        public ParamInfoBuilder<V> setOptional() {
-            this.isOptional = true;
-            return this;
-        }
-
-        /**
-         * Sets the flag indicating the parameter is required.
-         *
-         * @return the builder itself
-         */
-        public ParamInfoBuilder<V> setRequired() {
-            this.isOptional = false;
-            return this;
-        }
-
-        /**
-         * Sets the flag indicating the parameter has default value, and sets the default value.
-         *
-         * @return the builder itself
-         */
-        public ParamInfoBuilder<V> setHasDefaultValue(V defaultValue) {
-            this.hasDefaultValue = true;
-            this.defaultValue = defaultValue;
-            return this;
-        }
-
-        /**
-         * Sets the validator to validate the parameter value set by users.
-         *
-         * @return the builder itself
-         */
-        public ParamInfoBuilder<V> setValidator(ParamValidator<V> validator) {
-            this.validator = validator;
-            return this;
-        }
-
-        /**
-         * Builds the defined ParamInfo and returns it. The ParamInfo will be immutable.
-         *
-         * @return the defined ParamInfo
-         */
-        public ParamInfo<V> build() {
-            return new ParamInfo<>(
-                    name,
-                    alias,
-                    description,
-                    isOptional,
-                    hasDefaultValue,
-                    defaultValue,
-                    validator,
-                    valueClass);
-        }
-    }
-}
diff --git a/flink-ml-api/src/main/java/org/apache/flink/ml/api/misc/param/ParamValidator.java b/flink-ml-api/src/main/java/org/apache/flink/ml/api/misc/param/ParamValidator.java
deleted file mode 100644
index d41c709..0000000
--- a/flink-ml-api/src/main/java/org/apache/flink/ml/api/misc/param/ParamValidator.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.flink.ml.api.misc.param;
-
-import org.apache.flink.annotation.PublicEvolving;
-
-import java.io.Serializable;
-
-/**
- * An interface used by {@link ParamInfo} to do validation when a parameter value is set.
- *
- * @param <V> the type of the value to validate
- */
-@PublicEvolving
-public interface ParamValidator<V> extends Serializable {
-    /**
-     * Validates a parameter value.
-     *
-     * @param value value to validate
-     * @return {@code true} if the value is valid, {@code false} otherwise
-     */
-    boolean validate(V value);
-}
diff --git a/flink-ml-api/src/main/java/org/apache/flink/ml/api/misc/param/Params.java b/flink-ml-api/src/main/java/org/apache/flink/ml/api/misc/param/Params.java
deleted file mode 100644
index e173a66..0000000
--- a/flink-ml-api/src/main/java/org/apache/flink/ml/api/misc/param/Params.java
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
- * 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.flink.ml.api.misc.param;
-
-import org.apache.flink.annotation.PublicEvolving;
-
-import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonProcessingException;
-import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * The map-like container class for parameter. This class is provided to unify the interaction with
- * parameters.
- */
-@PublicEvolving
-public class Params implements Serializable, Cloneable {
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * A mapping from param name to its value.
-     *
-     * <p>The value is stored in map using json format.
-     */
-    private final Map<String, String> params;
-
-    private transient ObjectMapper mapper;
-
-    public Params() {
-        this.params = new HashMap<>();
-    }
-
-    /**
-     * Return the number of params.
-     *
-     * @return Return the number of params.
-     */
-    public int size() {
-        return params.size();
-    }
-
-    /** Removes all of the params. The params will be empty after this call returns. */
-    public void clear() {
-        params.clear();
-    }
-
-    /**
-     * Returns <tt>true</tt> if this params contains no mappings.
-     *
-     * @return <tt>true</tt> if this map contains no mappings
-     */
-    public boolean isEmpty() {
-        return params.isEmpty();
-    }
-
-    /**
-     * Returns the value of the specific parameter, or default value defined in the {@code info} if
-     * this Params doesn't have a value set for the parameter. An exception will be thrown in the
-     * following cases because no value could be found for the specified parameter.
-     *
-     * <ul>
-     *   <li>Non-optional parameter: no value is defined in this params for a non-optional
-     *       parameter.
-     *   <li>Optional parameter: no value is defined in this params and no default value is defined.
-     * </ul>
-     *
-     * @param info the info of the specific parameter, usually with default value
-     * @param <V> the type of the specific parameter
-     * @return the value of the specific parameter, or default value defined in the {@code info} if
-     *     this Params doesn't contain the parameter
-     * @throws IllegalArgumentException if no value can be found for specified parameter
-     */
-    public <V> V get(ParamInfo<V> info) {
-        String value = null;
-        String usedParamName = null;
-        for (String nameOrAlias : getParamNameAndAlias(info)) {
-            if (params.containsKey(nameOrAlias)) {
-                if (usedParamName != null) {
-                    throw new IllegalArgumentException(
-                            String.format(
-                                    "Duplicate parameters of %s and %s",
-                                    usedParamName, nameOrAlias));
-                }
-                usedParamName = nameOrAlias;
-                value = params.get(nameOrAlias);
-            }
-        }
-
-        if (usedParamName != null) {
-            // The param value was set by the user.
-            return valueFromJson(value, info.getValueClass());
-        } else {
-            // The param value was not set by the user.
-            if (!info.isOptional()) {
-                throw new IllegalArgumentException(
-                        "Missing non-optional parameter " + info.getName());
-            } else if (!info.hasDefaultValue()) {
-                throw new IllegalArgumentException(
-                        "Cannot find default value for optional parameter " + info.getName());
-            }
-            return info.getDefaultValue();
-        }
-    }
-
-    /**
-     * Set the value of the specific parameter.
-     *
-     * @param info the info of the specific parameter to set.
-     * @param value the value to be set to the specific parameter.
-     * @param <V> the type of the specific parameter.
-     * @return the previous value of the specific parameter, or null if this Params didn't contain
-     *     the parameter before
-     * @throws RuntimeException if the {@code info} has a validator and the {@code value} is
-     *     evaluated as illegal by the validator
-     */
-    public <V> Params set(ParamInfo<V> info, V value) {
-        if (info.getValidator() != null && !info.getValidator().validate(value)) {
-            throw new RuntimeException(
-                    "Setting " + info.getName() + " as a invalid value:" + value);
-        }
-        params.put(info.getName(), valueToJson(value));
-        return this;
-    }
-
-    /**
-     * Removes the specific parameter from this Params.
-     *
-     * @param info the info of the specific parameter to remove
-     * @param <V> the type of the specific parameter
-     */
-    public <V> void remove(ParamInfo<V> info) {
-        params.remove(info.getName());
-        for (String a : info.getAlias()) {
-            params.remove(a);
-        }
-    }
-
-    /**
-     * Check whether this params has a value set for the given {@code info}.
-     *
-     * @return <tt>true</tt> if this params has a value set for the specified {@code info}, false
-     *     otherwise.
-     */
-    public <V> boolean contains(ParamInfo<V> info) {
-        return params.containsKey(info.getName())
-                || Arrays.stream(info.getAlias()).anyMatch(params::containsKey);
-    }
-
-    /**
-     * Returns a json containing all parameters in this Params. The json should be human-readable if
-     * possible.
-     *
-     * @return a json containing all parameters in this Params
-     */
-    public String toJson() {
-        assertMapperInited();
-        try {
-            return mapper.writeValueAsString(params);
-        } catch (JsonProcessingException e) {
-            throw new RuntimeException("Failed to serialize params to json", e);
-        }
-    }
-
-    /**
-     * Restores the parameters from the given json. The parameters should be exactly the same with
-     * the one who was serialized to the input json after the restoration.
-     *
-     * @param json the json String to restore from
-     */
-    @SuppressWarnings("unchecked")
-    public void loadJson(String json) {
-        assertMapperInited();
-        Map<String, String> params;
-        try {
-            params = mapper.readValue(json, Map.class);
-        } catch (IOException e) {
-            throw new RuntimeException("Failed to deserialize json:" + json, e);
-        }
-        this.params.putAll(params);
-    }
-
-    /**
-     * Factory method for constructing params.
-     *
-     * @param json the json string to load
-     * @return the {@code Params} loaded from the json string.
-     */
-    public static Params fromJson(String json) {
-        Params params = new Params();
-        params.loadJson(json);
-        return params;
-    }
-
-    /**
-     * Merge other params into this.
-     *
-     * @param otherParams other params
-     * @return this
-     */
-    public Params merge(Params otherParams) {
-        if (otherParams != null) {
-            this.params.putAll(otherParams.params);
-        }
-        return this;
-    }
-
-    /**
-     * Creates and returns a deep clone of this Params.
-     *
-     * @return a deep clone of this Params
-     */
-    @Override
-    public Params clone() {
-        Params newParams = new Params();
-        newParams.params.putAll(this.params);
-        return newParams;
-    }
-
-    private void assertMapperInited() {
-        if (mapper == null) {
-            mapper = new ObjectMapper();
-        }
-    }
-
-    private String valueToJson(Object value) {
-        assertMapperInited();
-        try {
-            if (value == null) {
-                return null;
-            }
-            return mapper.writeValueAsString(value);
-        } catch (JsonProcessingException e) {
-            throw new RuntimeException("Failed to serialize to json:" + value, e);
-        }
-    }
-
-    private <T> T valueFromJson(String json, Class<T> clazz) {
-        assertMapperInited();
-        try {
-            if (json == null) {
-                return null;
-            }
-            return mapper.readValue(json, clazz);
-        } catch (IOException e) {
-            throw new RuntimeException("Failed to deserialize json:" + json, e);
-        }
-    }
-
-    private <V> List<String> getParamNameAndAlias(ParamInfo<V> info) {
-        List<String> paramNames = new ArrayList<>(info.getAlias().length + 1);
-        paramNames.add(info.getName());
-        paramNames.addAll(Arrays.asList(info.getAlias()));
-        return paramNames;
-    }
-}
diff --git a/flink-ml-api/src/main/java/org/apache/flink/ml/api/misc/param/WithParams.java b/flink-ml-api/src/main/java/org/apache/flink/ml/api/misc/param/WithParams.java
deleted file mode 100644
index dfbf614..0000000
--- a/flink-ml-api/src/main/java/org/apache/flink/ml/api/misc/param/WithParams.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * 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.flink.ml.api.misc.param;
-
-/**
- * Parameters are widely used in machine learning realm. This class defines a common interface to
- * interact with classes with parameters.
- *
- * @param <T> the actual type of this WithParams, as the return type of setter
- */
-public interface WithParams<T> {
-    /**
-     * Returns the all the parameters.
-     *
-     * @return all the parameters.
-     */
-    Params getParams();
-
-    /**
-     * Set the value of a specific parameter.
-     *
-     * @param info the info of the specific param to set
-     * @param value the value to be set to the specific param
-     * @param <V> the type of the specific param
-     * @return the WithParams itself
-     */
-    @SuppressWarnings("unchecked")
-    default <V> T set(ParamInfo<V> info, V value) {
-        getParams().set(info, value);
-        return (T) this;
-    }
-
-    /**
-     * Returns the value of the specific param.
-     *
-     * @param info the info of the specific param, usually with default value
-     * @param <V> the type of the specific param
-     * @return the value of the specific param, or default value defined in the {@code info} if the
-     *     inner Params doesn't contains this param
-     */
-    default <V> V get(ParamInfo<V> info) {
-        return getParams().get(info);
-    }
-}
diff --git a/flink-ml-api/src/main/java/org/apache/flink/ml/util/param/ExtractParamInfosUtil.java b/flink-ml-api/src/main/java/org/apache/flink/ml/util/param/ExtractParamInfosUtil.java
deleted file mode 100644
index 5206c0a..0000000
--- a/flink-ml-api/src/main/java/org/apache/flink/ml/util/param/ExtractParamInfosUtil.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * 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.flink.ml.util.param;
-
-import org.apache.flink.ml.api.misc.param.ParamInfo;
-import org.apache.flink.ml.api.misc.param.WithParams;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.List;
-
-/** Utility to extract all ParamInfos defined in a WithParams, mainly used in persistence. */
-public final class ExtractParamInfosUtil {
-    private static final Logger LOG = LoggerFactory.getLogger(ExtractParamInfosUtil.class);
-
-    /**
-     * Extracts all ParamInfos defined in the given WithParams, including those in its superclasses
-     * and interfaces.
-     *
-     * @param s the WithParams to extract ParamInfos from
-     * @return the list of all ParamInfos defined in s
-     */
-    public static List<ParamInfo> extractParamInfos(WithParams s) {
-        return extractParamInfos(s, s.getClass());
-    }
-
-    private static List<ParamInfo> extractParamInfos(WithParams s, Class clz) {
-        List<ParamInfo> result = new ArrayList<>();
-        if (clz == null) {
-            return result;
-        }
-
-        Field[] fields = clz.getDeclaredFields();
-        for (Field f : fields) {
-            f.setAccessible(true);
-            if (ParamInfo.class.isAssignableFrom(f.getType())) {
-                try {
-                    result.add((ParamInfo) f.get(s));
-                } catch (IllegalAccessException e) {
-                    LOG.warn("Failed to extract param info {}, ignore it", f.getName(), e);
-                }
-            }
-        }
-
-        result.addAll(extractParamInfos(s, clz.getSuperclass()));
-        for (Class c : clz.getInterfaces()) {
-            result.addAll(extractParamInfos(s, c));
-        }
-
-        return result;
-    }
-}
diff --git a/flink-ml-api/src/test/java/org/apache/flink/ml/api/misc/ParamsTest.java b/flink-ml-api/src/test/java/org/apache/flink/ml/api/misc/ParamsTest.java
deleted file mode 100644
index 080e22b..0000000
--- a/flink-ml-api/src/test/java/org/apache/flink/ml/api/misc/ParamsTest.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * 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.flink.ml.api.misc;
-
-import org.apache.flink.ml.api.misc.param.ParamInfo;
-import org.apache.flink.ml.api.misc.param.ParamInfoFactory;
-import org.apache.flink.ml.api.misc.param.Params;
-
-import org.junit.Assert;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-
-/** Test for the behavior and validator of {@link Params}. */
-public class ParamsTest {
-    @Rule public ExpectedException thrown = ExpectedException.none();
-
-    @Test
-    public void testDefaultBehavior() {
-        Params params = new Params();
-
-        ParamInfo<String> optionalWithoutDefault =
-                ParamInfoFactory.createParamInfo("a", String.class).build();
-
-        // It should call params.contain to check when get the param in this case.
-        thrown.expect(RuntimeException.class);
-        thrown.expectMessage("Cannot find default value for optional parameter a");
-        params.get(optionalWithoutDefault);
-
-        ParamInfo<String> optionalWithDefault =
-                ParamInfoFactory.createParamInfo("a", String.class)
-                        .setHasDefaultValue("def")
-                        .build();
-        assert params.get(optionalWithDefault).equals("def");
-
-        ParamInfo<String> requiredWithDefault =
-                ParamInfoFactory.createParamInfo("a", String.class)
-                        .setRequired()
-                        .setHasDefaultValue("def")
-                        .build();
-        assert params.get(requiredWithDefault).equals("def");
-
-        ParamInfo<String> requiredWithoutDefault =
-                ParamInfoFactory.createParamInfo("a", String.class).setRequired().build();
-        thrown.expect(RuntimeException.class);
-        thrown.expectMessage("a not exist which is not optional and don't have a default value");
-        params.get(requiredWithoutDefault);
-    }
-
-    @Test
-    public void testValidator() {
-        Params params = new Params();
-
-        ParamInfo<Integer> intParam =
-                ParamInfoFactory.createParamInfo("a", Integer.class)
-                        .setValidator(i -> i > 0)
-                        .build();
-        params.set(intParam, 1);
-
-        thrown.expect(RuntimeException.class);
-        thrown.expectMessage("Setting a as a invalid value:0");
-        params.set(intParam, 0);
-    }
-
-    @Test
-    public void getOptionalParam() {
-        ParamInfo<String> key =
-                ParamInfoFactory.createParamInfo("key", String.class)
-                        .setHasDefaultValue(null)
-                        .setDescription("")
-                        .build();
-
-        Params params = new Params();
-        Assert.assertNull(params.get(key));
-
-        String val = "3";
-        params.set(key, val);
-        Assert.assertEquals(params.get(key), val);
-
-        params.set(key, null);
-        Assert.assertNull(params.get(key));
-    }
-
-    @Test
-    public void getOptionalWithoutDefaultParam() {
-        ParamInfo<String> key =
-                ParamInfoFactory.createParamInfo("key", String.class)
-                        .setOptional()
-                        .setDescription("")
-                        .build();
-        Params params = new Params();
-
-        try {
-            String val = params.get(key);
-            Assert.fail("Should throw exception.");
-        } catch (IllegalArgumentException ex) {
-            Assert.assertTrue(
-                    ex.getMessage().startsWith("Cannot find default value for optional parameter"));
-        }
-
-        Assert.assertFalse(params.contains(key));
-
-        String val = "3";
-        params.set(key, val);
-        Assert.assertEquals(params.get(key), val);
-
-        Assert.assertTrue(params.contains(key));
-
-        params.set(key, null);
-        Assert.assertNull(params.get(key));
-    }
-
-    @Test
-    public void getRequiredParam() {
-        ParamInfo<String> labelWithRequired =
-                ParamInfoFactory.createParamInfo("label", String.class)
-                        .setDescription("")
-                        .setRequired()
-                        .build();
-        Params params = new Params();
-        try {
-            params.get(labelWithRequired);
-            Assert.fail("failure");
-        } catch (IllegalArgumentException ex) {
-            Assert.assertTrue(ex.getMessage().startsWith("Missing non-optional parameter"));
-        }
-
-        params.set(labelWithRequired, null);
-        Assert.assertNull(params.get(labelWithRequired));
-
-        String val = "3";
-        params.set(labelWithRequired, val);
-        Assert.assertEquals(params.get(labelWithRequired), val);
-    }
-
-    @Test
-    public void testGetAliasParam() {
-        ParamInfo<String> predResultColName =
-                ParamInfoFactory.createParamInfo("predResultColName", String.class)
-                        .setDescription("Column name of predicted result.")
-                        .setRequired()
-                        .setAlias(new String[] {"predColName", "outputColName"})
-                        .build();
-
-        Params params = Params.fromJson("{\"predResultColName\":\"\\\"f0\\\"\"}");
-
-        Assert.assertEquals("f0", params.get(predResultColName));
-
-        params =
-                Params.fromJson(
-                        "{\"predResultColName\":\"\\\"f0\\\"\", \"predColName\":\"\\\"f0\\\"\"}");
-
-        try {
-            params.get(predResultColName);
-            Assert.fail("failure");
-        } catch (IllegalArgumentException ex) {
-            Assert.assertTrue(
-                    ex.getMessage()
-                            .startsWith(
-                                    "Duplicate parameters of predResultColName and predColName"));
-        }
-    }
-}
diff --git a/flink-ml-api/src/test/java/org/apache/flink/ml/util/param/ExtractParamInfosUtilTest.java b/flink-ml-api/src/test/java/org/apache/flink/ml/util/param/ExtractParamInfosUtilTest.java
deleted file mode 100644
index 1010bfb..0000000
--- a/flink-ml-api/src/test/java/org/apache/flink/ml/util/param/ExtractParamInfosUtilTest.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * 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.flink.ml.util.param;
-
-import org.apache.flink.ml.api.misc.param.ParamInfo;
-import org.apache.flink.ml.api.misc.param.ParamInfoFactory;
-import org.apache.flink.ml.api.misc.param.Params;
-import org.apache.flink.ml.api.misc.param.WithParams;
-
-import org.junit.Test;
-
-import java.util.Arrays;
-import java.util.List;
-
-/** Test for {@link ExtractParamInfosUtil}. */
-public class ExtractParamInfosUtilTest {
-
-    @Test
-    public void testExtractParamInfos() {
-        List<ParamInfo> noParamInfos =
-                ExtractParamInfosUtil.extractParamInfos(new WithNoParamInfo());
-        assert noParamInfos.isEmpty();
-
-        List<ParamInfo> classParamInfos =
-                ExtractParamInfosUtil.extractParamInfos(new WithTestParamInfo());
-        assert classParamInfos.size() == 1 && classParamInfos.get(0).getName().equals("KSC");
-
-        List<ParamInfo> allParamInfos =
-                ExtractParamInfosUtil.extractParamInfos(new TestParamInfoWithInheritedParamInfos());
-        String[] sortedCorrectParamNames = new String[] {"KCP", "KI", "KSC"};
-        assert allParamInfos.size() == 3
-                && Arrays.equals(
-                        sortedCorrectParamNames,
-                        allParamInfos.stream()
-                                .map(ParamInfo::getName)
-                                .sorted()
-                                .toArray(String[]::new));
-    }
-
-    /** Mock WithParams implementation with no ParamInfo. Only for test. */
-    public static class WithNoParamInfo implements WithParams<WithNoParamInfo> {
-
-        @Override
-        public Params getParams() {
-            return null;
-        }
-    }
-
-    /**
-     * Mock WithParams implementation with one ParamInfo. Only for test.
-     *
-     * @param <T> subclass of WithTestParamInfo
-     */
-    public static class WithTestParamInfo<T extends WithTestParamInfo> implements WithParams<T> {
-        public static final ParamInfo<String> KSC =
-                ParamInfoFactory.createParamInfo("KSC", String.class)
-                        .setDescription("key from super class")
-                        .build();
-
-        @Override
-        public Params getParams() {
-            return null;
-        }
-    }
-
-    /**
-     * Mock interface extending WithParams with one ParamInfo. Only for test.
-     *
-     * @param <T> implementation class of InterfaceWithParamInfo
-     */
-    public interface InterfaceWithParamInfo<T extends InterfaceWithParamInfo>
-            extends WithParams<T> {
-        ParamInfo<String> KI =
-                ParamInfoFactory.createParamInfo("KI", String.class)
-                        .setDescription("key from interface")
-                        .build();
-    }
-
-    /** Mock WithParams inheriting ParamInfos from superclass and interface. Only for test. */
-    public static class TestParamInfoWithInheritedParamInfos
-            extends WithTestParamInfo<TestParamInfoWithInheritedParamInfos>
-            implements InterfaceWithParamInfo<TestParamInfoWithInheritedParamInfos> {
-        private static final ParamInfo<String> KCP =
-                ParamInfoFactory.createParamInfo("KCP", String.class)
-                        .setDescription("key in the class which is private")
-                        .build();
-
-        @Override
-        public Params getParams() {
-            return null;
-        }
-    }
-}