changeset 0:fcc5eaaec401 draft

planemo upload for repository https://github.com/bgruening/galaxytools/tree/master/tools/sklearn commit ab963ec9498bd05d2fb2f24f75adb2fccae7958c
author bgruening
date Wed, 15 May 2019 07:25:29 -0400
parents
children 6717e5cc4d05
files README.rst feature_selectors.py iraps_classifier.py main_macros.xml model_validations.py pk_whitelist.json preprocessors.py search_model_validation.py stacking_ensembles.py stacking_ensembles.xml test-data/GridSearchCV.zip test-data/LinearRegression01.zip test-data/LinearRegression02.zip test-data/RF01704.fasta test-data/RFE.zip test-data/RandomForestClassifier.zip test-data/RandomForestRegressor01.zip test-data/StackingCVRegressor01.zip test-data/StackingCVRegressor02.zip test-data/XGBRegressor01.zip test-data/abc_model01 test-data/abc_result01 test-data/abr_model01 test-data/abr_result01 test-data/accuracy_score.txt test-data/auc.txt test-data/average_precision_score.txt test-data/best_estimator_.zip test-data/best_params_.txt test-data/best_score_.tabular test-data/blobs.txt test-data/brier_score_loss.txt test-data/circles.txt test-data/class.txt test-data/classification_report.txt test-data/cluster_result01.txt test-data/cluster_result02.txt test-data/cluster_result03.txt test-data/cluster_result04.txt test-data/cluster_result05.txt test-data/cluster_result06.txt test-data/cluster_result07.txt test-data/cluster_result08.txt test-data/cluster_result09.txt test-data/cluster_result10.txt test-data/cluster_result11.txt test-data/cluster_result12.txt test-data/cluster_result13.txt test-data/cluster_result14.txt test-data/cluster_result15.txt test-data/cluster_result16.txt test-data/cluster_result17.txt test-data/cluster_result18.txt test-data/cluster_result19.txt test-data/cluster_result20.txt test-data/cluster_result21.txt test-data/confusion_matrix.txt test-data/converter_result01.json test-data/converter_result02.json test-data/csc_sparse1.mtx test-data/csc_sparse2.mtx test-data/csc_stack_result01.mtx test-data/csr_sparse1.mtx test-data/csr_sparse2.mtx test-data/csr_stack_result01.mtx test-data/empty_file.txt test-data/f1_score.txt test-data/fbeta_score.txt test-data/feature_importances_.tabular test-data/feature_selection_result01 test-data/feature_selection_result02 test-data/feature_selection_result03 test-data/feature_selection_result04 test-data/feature_selection_result05 test-data/feature_selection_result06 test-data/feature_selection_result07 test-data/feature_selection_result08 test-data/feature_selection_result09 test-data/feature_selection_result10 test-data/feature_selection_result11 test-data/feature_selection_result12 test-data/feature_selection_result13 test-data/final_estimator.zip test-data/friedman1.txt test-data/friedman2.txt test-data/friedman3.txt test-data/gaus.txt test-data/gbc_model01 test-data/gbc_result01 test-data/gbr_model01 test-data/gbr_prediction_result01.tabular test-data/get_params.tabular test-data/get_params01.tabular test-data/get_params02.tabular test-data/get_params03.tabular test-data/get_params04.tabular test-data/get_params05.tabular test-data/get_params06.tabular test-data/get_params07.tabular test-data/get_params08.tabular test-data/get_params09.tabular test-data/get_params10.tabular test-data/get_params11.tabular test-data/get_params12.tabular test-data/glm_model01 test-data/glm_model02 test-data/glm_model03 test-data/glm_model04 test-data/glm_model05 test-data/glm_model06 test-data/glm_model07 test-data/glm_model08 test-data/glm_result01 test-data/glm_result02 test-data/glm_result03 test-data/glm_result04 test-data/glm_result05 test-data/glm_result06 test-data/glm_result07 test-data/glm_result08 test-data/hamming_loss.txt test-data/hastie.txt test-data/hinge_loss.txt test-data/imblearn_X.tabular test-data/imblearn_y.tabular test-data/jaccard_similarity_score.txt test-data/lda_model01 test-data/lda_model02 test-data/lda_prediction_result01.tabular test-data/lda_prediction_result02.tabular test-data/log_loss.txt test-data/matthews_corrcoef.txt test-data/moons.txt test-data/mv_result02.tabular test-data/mv_result03.tabular test-data/mv_result05.tabular test-data/named_steps.txt test-data/nn_model01 test-data/nn_model02 test-data/nn_model03 test-data/nn_prediction_result01.tabular test-data/nn_prediction_result02.tabular test-data/nn_prediction_result03.tabular test-data/numeric_values.tabular test-data/pickle_blacklist test-data/pipeline01 test-data/pipeline02 test-data/pipeline03 test-data/pipeline04 test-data/pipeline05 test-data/pipeline06 test-data/pipeline07 test-data/pipeline08 test-data/pipeline09 test-data/pipeline10 test-data/pipeline11 test-data/pipeline12 test-data/pipeline13 test-data/pipeline14 test-data/pipeline15 test-data/precision_recall_curve.txt test-data/precision_recall_fscore_support.txt test-data/precision_score.txt test-data/prp_model01 test-data/prp_model02 test-data/prp_model03 test-data/prp_model04 test-data/prp_model05 test-data/prp_model06 test-data/prp_model07 test-data/prp_model08 test-data/prp_model09 test-data/prp_result01 test-data/prp_result02 test-data/prp_result03 test-data/prp_result04 test-data/prp_result05 test-data/prp_result06 test-data/prp_result07 test-data/prp_result08 test-data/prp_result09 test-data/pw_metric01.tabular test-data/pw_metric02.tabular test-data/pw_metric03.tabular test-data/qda_model01 test-data/qda_prediction_result01.tabular test-data/ranking_.tabular test-data/recall_score.txt test-data/regression.txt test-data/regression_X.tabular test-data/regression_metrics_result01 test-data/regression_metrics_result02 test-data/regression_metrics_result03 test-data/regression_metrics_result04 test-data/regression_metrics_result05 test-data/regression_metrics_result06 test-data/regression_test.tabular test-data/regression_test_X.tabular test-data/regression_test_y.tabular test-data/regression_train.tabular test-data/regression_y.tabular test-data/rfc_model01 test-data/rfc_result01 test-data/rfc_result02 test-data/rfr_model01 test-data/rfr_result01 test-data/roc_auc_score.txt test-data/roc_curve.txt test-data/scurve.txt test-data/searchCV01 test-data/searchCV02 test-data/sparse.mtx test-data/sparse_u.txt test-data/svc_model01 test-data/svc_model02 test-data/svc_model03 test-data/svc_prediction_result01.tabular test-data/svc_prediction_result02.tabular test-data/svc_prediction_result03.tabular test-data/swiss_r.txt test-data/test.tabular test-data/test2.tabular test-data/test3.tabular test-data/test_set.tabular test-data/train.tabular test-data/train_set.tabular test-data/vectorizer_result01.mtx test-data/vectorizer_result02.mtx test-data/vectorizer_result03.mtx test-data/vectorizer_result04.mtx test-data/y.tabular test-data/zero_one_loss.txt utils.py
diffstat 233 files changed, 65346 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/README.rst	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,146 @@
+Galaxy wrapper for scikit-learn library
+***************************************
+
+Contents
+========
+
+- `What is scikit-learn?`_
+	- `Scikit-learn main package groups`_
+	- `Tools offered by this wrapper`_
+
+- `Machine learning workflows`_
+	- `Supervised learning workflows`_
+	- `Unsupervised learning workflows`_
+
+
+____________________________
+
+
+.. _What is scikit-learn?:
+
+What is scikit-learn?
+=====================
+
+Scikit-learn is an open-source machine learning library for the Python programming language. It offers various algorithms for performing supervised and unsupervised learning as well as data preprocessing and transformation, model selection and evaluation, and dataset utilities. It is built upon SciPy (Scientific Python) library.
+
+Scikit-learn source code can be accessed at https://github.com/scikit-learn/scikit-learn.
+Detailed installation instructions can be found at http://scikit-learn.org/stable/install.html
+
+
+.. _Scikit-learn main package groups:
+
+Scikit-learn main package groups
+================================
+
+Scikit-learn provides the users with several main groups of related operations.
+These are:
+
+- Classification
+    - Identifying to which category an object belongs.
+- Regression
+    - Predicting a continuous-valued attribute associated with an object.
+- Clustering
+    - Automatic grouping of similar objects into sets.
+- Preprocessing
+    - Feature extraction and normalization.
+- Model selection and evaluation
+    - Comparing, validating and choosing parameters and models.
+- Dimensionality reduction
+    - Reducing the number of random variables to consider.
+
+Each group consists of a number of well-known algorithms from the category. For example, one can find hierarchical, spectral, kmeans, and other clustering methods in sklearn.cluster package.
+
+
+.. _Tools offered by this wrapper:
+
+Available tools in the current wrapper
+======================================
+
+The current release of the wrapper offers a subset of the packages from scikit-learn library. You can find:
+
+- A subset of classification metric functions
+- Linear and quadratic discriminant classifiers
+- Random forest and Ada boost classifiers and regressors
+- All the clustering methods
+- All support vector machine classifiers
+- A subset of data preprocessing estimator classes
+- Pairwise metric measurement functions
+
+In addition, several tools for performing matrix operations, generating problem-specific datasets, and encoding text and extracting features have been prepared to help the user with more advanced operations.
+
+.. _Machine learning workflows:
+
+Machine learning workflows
+==========================
+
+Machine learning is about processes. No matter what machine learning algorithm we use, we can apply typical workflows and dataflows to produce more robust models and better predictions.
+Here we discuss supervised and unsupervised learning workflows.
+
+.. _Supervised learning workflows:
+
+Supervised machine learning workflows
+=====================================
+
+**What is supervised learning?**
+
+In this machine learning task, given sample data which are labeled, the aim is to build a model which can predict the labels for new observations.
+In practice, there are five steps which we can go through to start from raw input data and end up getting reasonable predictions for new samples:
+
+1. Preprocess the data::
+
+    * Change the collected data into the proper format and datatype.
+    * Adjust the data quality by filling the missing values, performing
+    required scaling and normalizations, etc.
+    * Extract features which are the most meaningfull for the learning task.
+    * Split the ready dataset into training and test samples.
+
+2. Choose an algorithm::
+
+    * These factors help one to choose a learning algorithm:
+        - Nature of the data (e.g. linear vs. nonlinear data)
+        - Structure of the predicted output (e.g. binary vs. multilabel classification)
+        - Memory and time usage of the training
+        - Predictive accuracy on new data
+        - Interpretability of the predictions
+
+3. Choose a validation method
+
+	Every machine learning model should be evaluated before being put into practicical use.
+	There are numerous performance metrics to evaluate machine learning models.
+	For supervised learning, usually classification or regression metrics are used.
+
+	A validation method helps to evaluate the performance metrics of a trained model in order
+	to optimize its performance or ultimately switch to a more efficient model.
+	Cross-validation is a known validation method.
+
+4. Fit a model
+
+   Given the learning algorithm, validation method, and performance metric(s)
+   repeat the following steps::
+
+    * Train the model.
+    * Evaluate based on metrics.
+    * Optimize unitl satisfied.
+
+5. Use fitted model for prediction::
+
+	This is a final evaluation in which, the optimized model is used to make predictions
+	on unseen (here test) samples. After this, the model is put into production.
+
+.. _Unsupervised learning workflows:
+
+Unsupervised machine learning workflows
+=======================================
+
+**What is unsupervised learning?**
+
+Unlike supervised learning and more liklely in real life, here the initial data is not labeled.
+The task is to extract the structure from the data and group the samples based on their similarities.
+Clustering and dimensionality reduction are two famous examples of unsupervised learning tasks.
+
+In this case, the workflow is as follows::
+
+    * Preprocess the data (without splitting to train and test).
+    * Train a model.
+    * Evaluate and tune parameters.
+    * Analyse the model and test on real data.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/feature_selectors.py	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,357 @@
+"""
+DyRFE
+DyRFECV
+MyPipeline
+MyimbPipeline
+check_feature_importances
+"""
+import numpy as np
+
+from imblearn import under_sampling, over_sampling, combine
+from imblearn.pipeline import Pipeline as imbPipeline
+from sklearn import (cluster, compose, decomposition, ensemble,
+                     feature_extraction, feature_selection,
+                     gaussian_process, kernel_approximation,
+                     metrics, model_selection, naive_bayes,
+                     neighbors, pipeline, preprocessing,
+                     svm, linear_model, tree, discriminant_analysis)
+
+from sklearn.base import BaseEstimator
+from sklearn.base import MetaEstimatorMixin, clone, is_classifier
+from sklearn.feature_selection.rfe import _rfe_single_fit, RFE, RFECV
+from sklearn.model_selection import check_cv
+from sklearn.metrics.scorer import check_scoring
+from sklearn.utils import check_X_y, safe_indexing, safe_sqr
+from sklearn.utils._joblib import Parallel, delayed, effective_n_jobs
+
+
+class DyRFE(RFE):
+    """
+    Mainly used with DyRFECV
+
+    Parameters
+    ----------
+    estimator : object
+        A supervised learning estimator with a ``fit`` method that provides
+        information about feature importance either through a ``coef_``
+        attribute or through a ``feature_importances_`` attribute.
+    n_features_to_select : int or None (default=None)
+        The number of features to select. If `None`, half of the features
+        are selected.
+    step : int, float or list, optional (default=1)
+        If greater than or equal to 1, then ``step`` corresponds to the
+        (integer) number of features to remove at each iteration.
+        If within (0.0, 1.0), then ``step`` corresponds to the percentage
+        (rounded down) of features to remove at each iteration.
+        If list, a series of steps of features to remove at each iteration.
+        Iterations stops when steps finish
+    verbose : int, (default=0)
+        Controls verbosity of output.
+
+    """
+    def __init__(self, estimator, n_features_to_select=None, step=1,
+                 verbose=0):
+        super(DyRFE, self).__init__(estimator, n_features_to_select,
+                                    step, verbose)
+
+    def _fit(self, X, y, step_score=None):
+
+        if type(self.step) is not list:
+            return super(DyRFE, self)._fit(X, y, step_score)
+
+        # dynamic step
+        X, y = check_X_y(X, y, "csc")
+        # Initialization
+        n_features = X.shape[1]
+        if self.n_features_to_select is None:
+            n_features_to_select = n_features // 2
+        else:
+            n_features_to_select = self.n_features_to_select
+
+        step = []
+        for s in self.step:
+            if 0.0 < s < 1.0:
+                step.append(int(max(1, s * n_features)))
+            else:
+                step.append(int(s))
+            if s <= 0:
+                raise ValueError("Step must be >0")
+
+        support_ = np.ones(n_features, dtype=np.bool)
+        ranking_ = np.ones(n_features, dtype=np.int)
+
+        if step_score:
+            self.scores_ = []
+
+        step_i = 0
+        # Elimination
+        while np.sum(support_) > n_features_to_select and step_i < len(step):
+
+            # if last step is 1, will keep loop
+            if step_i == len(step) - 1 and step[step_i] != 0:
+                step.append(step[step_i])
+
+            # Remaining features
+            features = np.arange(n_features)[support_]
+
+            # Rank the remaining features
+            estimator = clone(self.estimator)
+            if self.verbose > 0:
+                print("Fitting estimator with %d features." % np.sum(support_))
+
+            estimator.fit(X[:, features], y)
+
+            # Get coefs
+            if hasattr(estimator, 'coef_'):
+                coefs = estimator.coef_
+            else:
+                coefs = getattr(estimator, 'feature_importances_', None)
+            if coefs is None:
+                raise RuntimeError('The classifier does not expose '
+                                   '"coef_" or "feature_importances_" '
+                                   'attributes')
+
+            # Get ranks
+            if coefs.ndim > 1:
+                ranks = np.argsort(safe_sqr(coefs).sum(axis=0))
+            else:
+                ranks = np.argsort(safe_sqr(coefs))
+
+            # for sparse case ranks is matrix
+            ranks = np.ravel(ranks)
+
+            # Eliminate the worse features
+            threshold =\
+                min(step[step_i], np.sum(support_) - n_features_to_select)
+
+            # Compute step score on the previous selection iteration
+            # because 'estimator' must use features
+            # that have not been eliminated yet
+            if step_score:
+                self.scores_.append(step_score(estimator, features))
+            support_[features[ranks][:threshold]] = False
+            ranking_[np.logical_not(support_)] += 1
+
+            step_i += 1
+
+        # Set final attributes
+        features = np.arange(n_features)[support_]
+        self.estimator_ = clone(self.estimator)
+        self.estimator_.fit(X[:, features], y)
+
+        # Compute step score when only n_features_to_select features left
+        if step_score:
+            self.scores_.append(step_score(self.estimator_, features))
+        self.n_features_ = support_.sum()
+        self.support_ = support_
+        self.ranking_ = ranking_
+
+        return self
+
+
+class DyRFECV(RFECV, MetaEstimatorMixin):
+    """
+    Compared with RFECV, DyRFECV offers flexiable `step` to eleminate
+    features, in the format of list, while RFECV supports only fixed number
+    of `step`.
+
+    Parameters
+    ----------
+    estimator : object
+        A supervised learning estimator with a ``fit`` method that provides
+        information about feature importance either through a ``coef_``
+        attribute or through a ``feature_importances_`` attribute.
+    step : int or float, optional (default=1)
+        If greater than or equal to 1, then ``step`` corresponds to the
+        (integer) number of features to remove at each iteration.
+        If within (0.0, 1.0), then ``step`` corresponds to the percentage
+        (rounded down) of features to remove at each iteration.
+        If list, a series of step to remove at each iteration. iteration stopes
+        when finishing all steps
+        Note that the last iteration may remove fewer than ``step`` features in
+        order to reach ``min_features_to_select``.
+    min_features_to_select : int, (default=1)
+        The minimum number of features to be selected. This number of features
+        will always be scored, even if the difference between the original
+        feature count and ``min_features_to_select`` isn't divisible by
+        ``step``.
+    cv : int, cross-validation generator or an iterable, optional
+        Determines the cross-validation splitting strategy.
+        Possible inputs for cv are:
+        - None, to use the default 3-fold cross-validation,
+        - integer, to specify the number of folds.
+        - :term:`CV splitter`,
+        - An iterable yielding (train, test) splits as arrays of indices.
+        For integer/None inputs, if ``y`` is binary or multiclass,
+        :class:`sklearn.model_selection.StratifiedKFold` is used. If the
+        estimator is a classifier or if ``y`` is neither binary nor multiclass,
+        :class:`sklearn.model_selection.KFold` is used.
+        Refer :ref:`User Guide <cross_validation>` for the various
+        cross-validation strategies that can be used here.
+        .. versionchanged:: 0.20
+            ``cv`` default value of None will change from 3-fold to 5-fold
+            in v0.22.
+    scoring : string, callable or None, optional, (default=None)
+        A string (see model evaluation documentation) or
+        a scorer callable object / function with signature
+        ``scorer(estimator, X, y)``.
+    verbose : int, (default=0)
+        Controls verbosity of output.
+    n_jobs : int or None, optional (default=None)
+        Number of cores to run in parallel while fitting across folds.
+        ``None`` means 1 unless in a :obj:`joblib.parallel_backend` context.
+        ``-1`` means using all processors. See :term:`Glossary <n_jobs>`
+        for more details.
+    """
+    def __init__(self, estimator, step=1, min_features_to_select=1, cv='warn',
+                 scoring=None, verbose=0, n_jobs=None):
+        super(DyRFECV, self).__init__(
+            estimator, step=step,
+            min_features_to_select=min_features_to_select,
+            cv=cv, scoring=scoring, verbose=verbose,
+            n_jobs=n_jobs)
+
+    def fit(self, X, y, groups=None):
+        """Fit the RFE model and automatically tune the number of selected
+           features.
+        Parameters
+        ----------
+        X : {array-like, sparse matrix}, shape = [n_samples, n_features]
+            Training vector, where `n_samples` is the number of samples and
+            `n_features` is the total number of features.
+        y : array-like, shape = [n_samples]
+            Target values (integers for classification, real numbers for
+            regression).
+        groups : array-like, shape = [n_samples], optional
+            Group labels for the samples used while splitting the dataset into
+            train/test set.
+        """
+        if type(self.step) is not list:
+            return super(DyRFECV, self).fit(X, y, groups)
+
+        X, y = check_X_y(X, y, "csr")
+
+        # Initialization
+        cv = check_cv(self.cv, y, is_classifier(self.estimator))
+        scorer = check_scoring(self.estimator, scoring=self.scoring)
+        n_features = X.shape[1]
+
+        step = []
+        for s in self.step:
+            if 0.0 < s < 1.0:
+                step.append(int(max(1, s * n_features)))
+            else:
+                step.append(int(s))
+            if s <= 0:
+                raise ValueError("Step must be >0")
+
+        # Build an RFE object, which will evaluate and score each possible
+        # feature count, down to self.min_features_to_select
+        rfe = DyRFE(estimator=self.estimator,
+                    n_features_to_select=self.min_features_to_select,
+                    step=self.step, verbose=self.verbose)
+
+        # Determine the number of subsets of features by fitting across
+        # the train folds and choosing the "features_to_select" parameter
+        # that gives the least averaged error across all folds.
+
+        # Note that joblib raises a non-picklable error for bound methods
+        # even if n_jobs is set to 1 with the default multiprocessing
+        # backend.
+        # This branching is done so that to
+        # make sure that user code that sets n_jobs to 1
+        # and provides bound methods as scorers is not broken with the
+        # addition of n_jobs parameter in version 0.18.
+
+        if effective_n_jobs(self.n_jobs) == 1:
+            parallel, func = list, _rfe_single_fit
+        else:
+            parallel = Parallel(n_jobs=self.n_jobs)
+            func = delayed(_rfe_single_fit)
+
+        scores = parallel(
+            func(rfe, self.estimator, X, y, train, test, scorer)
+            for train, test in cv.split(X, y, groups))
+
+        scores = np.sum(scores, axis=0)
+        diff = int(scores.shape[0]) - len(step)
+        if diff > 0:
+            step = np.r_[step, [step[-1]] * diff]
+        scores_rev = scores[::-1]
+        argmax_idx = len(scores) - np.argmax(scores_rev) - 1
+        n_features_to_select = max(
+            n_features - sum(step[:argmax_idx]),
+            self.min_features_to_select)
+
+        # Re-execute an elimination with best_k over the whole set
+        rfe = DyRFE(estimator=self.estimator,
+                    n_features_to_select=n_features_to_select, step=self.step,
+                    verbose=self.verbose)
+
+        rfe.fit(X, y)
+
+        # Set final attributes
+        self.support_ = rfe.support_
+        self.n_features_ = rfe.n_features_
+        self.ranking_ = rfe.ranking_
+        self.estimator_ = clone(self.estimator)
+        self.estimator_.fit(self.transform(X), y)
+
+        # Fixing a normalization error, n is equal to get_n_splits(X, y) - 1
+        # here, the scores are normalized by get_n_splits(X, y)
+        self.grid_scores_ = scores[::-1] / cv.get_n_splits(X, y, groups)
+        return self
+
+
+class MyPipeline(pipeline.Pipeline):
+    """
+    Extend pipeline object to have feature_importances_ attribute
+    """
+    def fit(self, X, y=None, **fit_params):
+        super(MyPipeline, self).fit(X, y, **fit_params)
+        estimator = self.steps[-1][-1]
+        if hasattr(estimator, 'coef_'):
+            coefs = estimator.coef_
+        else:
+            coefs = getattr(estimator, 'feature_importances_', None)
+        if coefs is None:
+            raise RuntimeError('The estimator in the pipeline does not expose '
+                               '"coef_" or "feature_importances_" '
+                               'attributes')
+        self.feature_importances_ = coefs
+        return self
+
+
+class MyimbPipeline(imbPipeline):
+    """
+    Extend imblance pipeline object to have feature_importances_ attribute
+    """
+    def fit(self, X, y=None, **fit_params):
+        super(MyimbPipeline, self).fit(X, y, **fit_params)
+        estimator = self.steps[-1][-1]
+        if hasattr(estimator, 'coef_'):
+            coefs = estimator.coef_
+        else:
+            coefs = getattr(estimator, 'feature_importances_', None)
+        if coefs is None:
+            raise RuntimeError('The estimator in the pipeline does not expose '
+                               '"coef_" or "feature_importances_" '
+                               'attributes')
+        self.feature_importances_ = coefs
+        return self
+
+
+def check_feature_importances(estimator):
+    """
+    For pipeline object which has no feature_importances_ property,
+    this function returns the same comfigured pipeline object with
+    attached the last estimator's feature_importances_.
+    """
+    if estimator.__class__.__module__ == 'sklearn.pipeline':
+        pipeline_steps = estimator.get_params()['steps']
+        estimator = MyPipeline(pipeline_steps)
+    elif estimator.__class__.__module__ == 'imblearn.pipeline':
+        pipeline_steps = estimator.get_params()['steps']
+        estimator = MyimbPipeline(pipeline_steps)
+    else:
+        return estimator
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iraps_classifier.py	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,569 @@
+"""
+class IRAPSCore
+class IRAPSClassifier
+class BinarizeTargetClassifier
+class BinarizeTargetRegressor
+class _BinarizeTargetScorer
+class _BinarizeTargetProbaScorer
+
+binarize_auc_scorer
+binarize_average_precision_scorer
+
+binarize_accuracy_scorer
+binarize_balanced_accuracy_scorer
+binarize_precision_scorer
+binarize_recall_scorer
+"""
+
+
+import numpy as np
+import random
+import warnings
+
+from abc import ABCMeta
+from scipy.stats import ttest_ind
+from sklearn import metrics
+from sklearn.base import BaseEstimator, clone, RegressorMixin
+from sklearn.externals import six
+from sklearn.feature_selection.univariate_selection import _BaseFilter
+from sklearn.metrics.scorer import _BaseScorer
+from sklearn.pipeline import Pipeline
+from sklearn.utils import as_float_array, check_X_y
+from sklearn.utils._joblib import Parallel, delayed
+from sklearn.utils.validation import (check_array, check_is_fitted,
+                                      check_memory, column_or_1d)
+
+
+VERSION = '0.1.1'
+
+
+class IRAPSCore(six.with_metaclass(ABCMeta, BaseEstimator)):
+    """
+    Base class of IRAPSClassifier
+    From sklearn BaseEstimator:
+        get_params()
+        set_params()
+
+    Parameters
+    ----------
+    n_iter : int
+        sample count
+
+    positive_thres : float
+        z_score shreshold to discretize positive target values
+
+    negative_thres : float
+        z_score threshold to discretize negative target values
+
+    verbose : int
+        0 or geater, if not 0, print progress
+
+    n_jobs : int, default=1
+        The number of CPUs to use to do the computation.
+
+    pre_dispatch : int, or string.
+        Controls the number of jobs that get dispatched during parallel
+        execution. Reducing this number can be useful to avoid an
+        explosion of memory consumption when more jobs get dispatched
+        than CPUs can process. This parameter can be:
+            - None, in which case all the jobs are immediately
+              created and spawned. Use this for lightweight and
+              fast-running jobs, to avoid delays due to on-demand
+              spawning of the jobs
+            - An int, giving the exact number of total jobs that are
+              spawned
+            - A string, giving an expression as a function of n_jobs,
+              as in '2*n_jobs'
+
+    random_state : int or None
+    """
+
+    def __init__(self, n_iter=1000, positive_thres=-1, negative_thres=0,
+                 verbose=0, n_jobs=1, pre_dispatch='2*n_jobs',
+                 random_state=None):
+        """
+        IRAPS turns towwards general Anomaly Detection
+        It comapares positive_thres with negative_thres,
+        and decide which portion is the positive target.
+        e.g.:
+        (positive_thres=-1, negative_thres=0)
+                 => positive = Z_score of target < -1
+        (positive_thres=1, negative_thres=0)
+                 => positive = Z_score of target > 1
+
+        Note: The positive targets here is always the
+            abnormal minority group.
+        """
+        self.n_iter = n_iter
+        self.positive_thres = positive_thres
+        self.negative_thres = negative_thres
+        self.verbose = verbose
+        self.n_jobs = n_jobs
+        self.pre_dispatch = pre_dispatch
+        self.random_state = random_state
+
+    def fit(self, X, y):
+        """
+        X: array-like (n_samples x n_features)
+        y: 1-d array-like (n_samples)
+        """
+        X, y = check_X_y(X, y, ['csr', 'csc'], multi_output=False)
+
+        def _stochastic_sampling(X, y, random_state=None, positive_thres=-1,
+                                 negative_thres=0):
+            # each iteration select a random number of random subset of
+            # training samples. this is somewhat different from the original
+            # IRAPS method, but effect is almost the same.
+            SAMPLE_SIZE = [0.25, 0.75]
+            n_samples = X.shape[0]
+
+            if random_state is None:
+                n_select = random.randint(int(n_samples * SAMPLE_SIZE[0]),
+                                          int(n_samples * SAMPLE_SIZE[1]))
+                index = random.sample(list(range(n_samples)), n_select)
+            else:
+                n_select = random.Random(random_state).randint(
+                                    int(n_samples * SAMPLE_SIZE[0]),
+                                    int(n_samples * SAMPLE_SIZE[1]))
+                index = random.Random(random_state).sample(
+                                    list(range(n_samples)), n_select)
+
+            X_selected, y_selected = X[index], y[index]
+
+            # Spliting by z_scores.
+            y_selected = (y_selected - y_selected.mean()) / y_selected.std()
+            if positive_thres < negative_thres:
+                X_selected_positive = X_selected[y_selected < positive_thres]
+                X_selected_negative = X_selected[y_selected > negative_thres]
+            else:
+                X_selected_positive = X_selected[y_selected > positive_thres]
+                X_selected_negative = X_selected[y_selected < negative_thres]
+
+            # For every iteration, at least 5 responders are selected
+            if X_selected_positive.shape[0] < 5:
+                warnings.warn("Warning: fewer than 5 positives were selected!")
+                return
+
+            # p_values
+            _, p = ttest_ind(X_selected_positive, X_selected_negative,
+                             axis=0, equal_var=False)
+
+            # fold_change == mean change?
+            # TODO implement other normalization method
+            positive_mean = X_selected_positive.mean(axis=0)
+            negative_mean = X_selected_negative.mean(axis=0)
+            mean_change = positive_mean - negative_mean
+            # mean_change = np.select(
+            #       [positive_mean > negative_mean,
+            #           positive_mean < negative_mean],
+            #       [positive_mean / negative_mean,
+            #           -negative_mean / positive_mean])
+            # mean_change could be adjusted by power of 2
+            # mean_change = 2**mean_change \
+            #       if mean_change>0 else -2**abs(mean_change)
+
+            return p, mean_change, negative_mean
+
+        parallel = Parallel(n_jobs=self.n_jobs, verbose=self.verbose,
+                            pre_dispatch=self.pre_dispatch)
+        if self.random_state is None:
+            res = parallel(delayed(_stochastic_sampling)(
+                    X, y, random_state=None,
+                    positive_thres=self.positive_thres,
+                    negative_thres=self.negative_thres)
+                        for i in range(self.n_iter))
+        else:
+            res = parallel(delayed(_stochastic_sampling)(
+                    X, y, random_state=seed,
+                    positive_thres=self.positive_thres,
+                    negative_thres=self.negative_thres)
+                        for seed in range(self.random_state,
+                                          self.random_state+self.n_iter))
+        res = [_ for _ in res if _]
+        if len(res) < 50:
+            raise ValueError("too few (%d) valid feature lists "
+                             "were generated!" % len(res))
+        pvalues = np.vstack([x[0] for x in res])
+        fold_changes = np.vstack([x[1] for x in res])
+        base_values = np.vstack([x[2] for x in res])
+
+        self.pvalues_ = np.asarray(pvalues)
+        self.fold_changes_ = np.asarray(fold_changes)
+        self.base_values_ = np.asarray(base_values)
+
+        return self
+
+
+def _iraps_core_fit(iraps_core, X, y):
+    return iraps_core.fit(X, y)
+
+
+class IRAPSClassifier(six.with_metaclass(ABCMeta, _BaseFilter,
+                                         BaseEstimator, RegressorMixin)):
+    """
+    Extend the bases of both sklearn feature_selector and classifier.
+    From sklearn BaseEstimator:
+        get_params()
+        set_params()
+    From sklearn _BaseFilter:
+        get_support()
+        fit_transform(X)
+        transform(X)
+    From sklearn RegressorMixin:
+        score(X, y): R2
+    New:
+        predict(X)
+        predict_label(X)
+        get_signature()
+    Properties:
+        discretize_value
+
+    Parameters
+    ----------
+    iraps_core: object
+    p_thres: float, threshold for p_values
+    fc_thres: float, threshold for fold change or mean difference
+    occurrence: float, occurrence rate selected by set of p_thres and fc_thres
+    discretize: float, threshold of z_score to discretize target value
+    memory: None, str or joblib.Memory object
+    min_signature_features: int, the mininum number of features in a signature
+    """
+
+    def __init__(self, iraps_core, p_thres=1e-4, fc_thres=0.1,
+                 occurrence=0.8, discretize=-1, memory=None,
+                 min_signature_features=1):
+        self.iraps_core = iraps_core
+        self.p_thres = p_thres
+        self.fc_thres = fc_thres
+        self.occurrence = occurrence
+        self.discretize = discretize
+        self.memory = memory
+        self.min_signature_features = min_signature_features
+
+    def fit(self, X, y):
+        memory = check_memory(self.memory)
+        cached_fit = memory.cache(_iraps_core_fit)
+        iraps_core = clone(self.iraps_core)
+        # allow pre-fitted iraps_core here
+        if not hasattr(iraps_core, 'pvalues_'):
+            iraps_core = cached_fit(iraps_core, X, y)
+        self.iraps_core_ = iraps_core
+
+        pvalues = as_float_array(iraps_core.pvalues_, copy=True)
+        # why np.nan is here?
+        pvalues[np.isnan(pvalues)] = np.finfo(pvalues.dtype).max
+
+        fold_changes = as_float_array(iraps_core.fold_changes_, copy=True)
+        fold_changes[np.isnan(fold_changes)] = 0.0
+
+        base_values = as_float_array(iraps_core.base_values_, copy=True)
+
+        p_thres = self.p_thres
+        fc_thres = self.fc_thres
+        occurrence = self.occurrence
+
+        mask_0 = np.zeros(pvalues.shape, dtype=np.int32)
+        # mark p_values less than the threashold
+        mask_0[pvalues <= p_thres] = 1
+        # mark fold_changes only when greater than the threashold
+        mask_0[abs(fold_changes) < fc_thres] = 0
+
+        # count the occurrence and mask greater than the threshold
+        counts = mask_0.sum(axis=0)
+        occurrence_thres = int(occurrence * iraps_core.n_iter)
+        mask = np.zeros(counts.shape, dtype=bool)
+        mask[counts >= occurrence_thres] = 1
+
+        # generate signature
+        fold_changes[mask_0 == 0] = 0.0
+        signature = fold_changes[:, mask].sum(axis=0) / counts[mask]
+        signature = np.vstack((signature, base_values[:, mask].mean(axis=0)))
+        # It's not clearn whether min_size could impact prediction
+        # performance
+        if signature is None\
+                or signature.shape[1] < self.min_signature_features:
+            raise ValueError("The classifier got None signature or the number "
+                             "of sinature feature is less than minimum!")
+
+        self.signature_ = np.asarray(signature)
+        self.mask_ = mask
+        # TODO: support other discretize method: fixed value, upper
+        # third quater, etc.
+        self.discretize_value = y.mean() + y.std() * self.discretize
+        if iraps_core.negative_thres > iraps_core.positive_thres:
+            self.less_is_positive = True
+        else:
+            self.less_is_positive = False
+
+        return self
+
+    def _get_support_mask(self):
+        """
+        return mask of feature selection indices
+        """
+        check_is_fitted(self, 'mask_')
+
+        return self.mask_
+
+    def get_signature(self):
+        """
+        return signature
+        """
+        check_is_fitted(self, 'signature_')
+
+        return self.signature_
+
+    def predict(self, X):
+        """
+        compute the correlation coefficient with irpas signature
+        """
+        signature = self.get_signature()
+
+        X = as_float_array(X)
+        X_transformed = self.transform(X) - signature[1]
+        corrcoef = np.array(
+            [np.corrcoef(signature[0], e)[0][1] for e in X_transformed])
+        corrcoef[np.isnan(corrcoef)] = np.finfo(np.float32).min
+
+        return corrcoef
+
+    def predict_label(self, X, clf_cutoff=0.4):
+        return self.predict(X) >= clf_cutoff
+
+
+class BinarizeTargetClassifier(BaseEstimator, RegressorMixin):
+    """
+    Convert continuous target to binary labels (True and False)
+    and apply a classification estimator.
+
+    Parameters
+    ----------
+    classifier: object
+        Estimator object such as derived from sklearn `ClassifierMixin`.
+
+    z_score: float, default=-1.0
+        Threshold value based on z_score. Will be ignored when
+        fixed_value is set
+
+    value: float, default=None
+        Threshold value
+
+    less_is_positive: boolean, default=True
+        When target is less the threshold value, it will be converted
+        to True, False otherwise.
+
+    Attributes
+    ----------
+    classifier_: object
+        Fitted classifier
+
+    discretize_value: float
+        The threshold value used to discretize True and False targets
+    """
+
+    def __init__(self, classifier, z_score=-1, value=None,
+                 less_is_positive=True):
+        self.classifier = classifier
+        self.z_score = z_score
+        self.value = value
+        self.less_is_positive = less_is_positive
+
+    def fit(self, X, y, sample_weight=None):
+        """
+        Convert y to True and False labels and then fit the classifier
+        with X and new y
+
+        Returns
+        ------
+        self: object
+        """
+        y = check_array(y, accept_sparse=False, force_all_finite=True,
+                        ensure_2d=False, dtype='numeric')
+        y = column_or_1d(y)
+
+        if self.value is None:
+            discretize_value = y.mean() + y.std() * self.z_score
+        else:
+            discretize_value = self.Value
+        self.discretize_value = discretize_value
+
+        if self.less_is_positive:
+            y_trans = y < discretize_value
+        else:
+            y_trans = y > discretize_value
+
+        self.classifier_ = clone(self.classifier)
+
+        if sample_weight is not None:
+            self.classifier_.fit(X, y_trans, sample_weight=sample_weight)
+        else:
+            self.classifier_.fit(X, y_trans)
+
+        if hasattr(self.classifier_, 'feature_importances_'):
+            self.feature_importances_ = self.classifier_.feature_importances_
+        if hasattr(self.classifier_, 'coef_'):
+            self.coef_ = self.classifier_.coef_
+        if hasattr(self.classifier_, 'n_outputs_'):
+            self.n_outputs_ = self.classifier_.n_outputs_
+        if hasattr(self.classifier_, 'n_features_'):
+            self.n_features_ = self.classifier_.n_features_
+
+        return self
+
+    def predict(self, X):
+        """
+        Predict class probabilities of X.
+        """
+        check_is_fitted(self, 'classifier_')
+        proba = self.classifier_.predict_proba(X)
+        return proba[:, 1]
+
+    def predict_label(self, X):
+        """Predict class label of X
+        """
+        check_is_fitted(self, 'classifier_')
+        return self.classifier_.predict(X)
+
+
+class _BinarizeTargetProbaScorer(_BaseScorer):
+    """
+    base class to make binarized target specific scorer
+    """
+
+    def __call__(self, clf, X, y, sample_weight=None):
+        clf_name = clf.__class__.__name__
+        # support pipeline object
+        if isinstance(clf, Pipeline):
+            main_estimator = clf.steps[-1][-1]
+        # support stacking ensemble estimators
+        # TODO support nested pipeline/stacking estimators
+        elif clf_name in ['StackingCVClassifier', 'StackingClassifier']:
+            main_estimator = clf.meta_clf_
+        elif clf_name in ['StackingCVRegressor', 'StackingRegressor']:
+            main_estimator = clf.meta_regr_
+        else:
+            main_estimator = clf
+
+        discretize_value = main_estimator.discretize_value
+        less_is_positive = main_estimator.less_is_positive
+
+        if less_is_positive:
+            y_trans = y < discretize_value
+        else:
+            y_trans = y > discretize_value
+
+        y_pred = clf.predict(X)
+        if sample_weight is not None:
+            return self._sign * self._score_func(y_trans, y_pred,
+                                                 sample_weight=sample_weight,
+                                                 **self._kwargs)
+        else:
+            return self._sign * self._score_func(y_trans, y_pred,
+                                                 **self._kwargs)
+
+
+# roc_auc
+binarize_auc_scorer =\
+        _BinarizeTargetProbaScorer(metrics.roc_auc_score, 1, {})
+
+# average_precision_scorer
+binarize_average_precision_scorer =\
+        _BinarizeTargetProbaScorer(metrics.average_precision_score, 1, {})
+
+# roc_auc_scorer
+iraps_auc_scorer = binarize_auc_scorer
+
+# average_precision_scorer
+iraps_average_precision_scorer = binarize_average_precision_scorer
+
+
+class BinarizeTargetRegressor(BaseEstimator, RegressorMixin):
+    """
+    Extend regression estimator to have discretize_value
+
+    Parameters
+    ----------
+    regressor: object
+        Estimator object such as derived from sklearn `RegressionMixin`.
+
+    z_score: float, default=-1.0
+        Threshold value based on z_score. Will be ignored when
+        fixed_value is set
+
+    value: float, default=None
+        Threshold value
+
+    less_is_positive: boolean, default=True
+        When target is less the threshold value, it will be converted
+        to True, False otherwise.
+
+    Attributes
+    ----------
+    regressor_: object
+        Fitted regressor
+
+    discretize_value: float
+        The threshold value used to discretize True and False targets
+    """
+
+    def __init__(self, regressor, z_score=-1, value=None,
+                 less_is_positive=True):
+        self.regressor = regressor
+        self.z_score = z_score
+        self.value = value
+        self.less_is_positive = less_is_positive
+
+    def fit(self, X, y, sample_weight=None):
+        """
+        Calculate the discretize_value fit the regressor with traning data
+
+        Returns
+        ------
+        self: object
+        """
+        y = check_array(y, accept_sparse=False, force_all_finite=True,
+                        ensure_2d=False, dtype='numeric')
+        y = column_or_1d(y)
+
+        if self.value is None:
+            discretize_value = y.mean() + y.std() * self.z_score
+        else:
+            discretize_value = self.Value
+        self.discretize_value = discretize_value
+
+        self.regressor_ = clone(self.regressor)
+
+        if sample_weight is not None:
+            self.regressor_.fit(X, y, sample_weight=sample_weight)
+        else:
+            self.regressor_.fit(X, y)
+
+        # attach classifier attributes
+        if hasattr(self.regressor_, 'feature_importances_'):
+            self.feature_importances_ = self.regressor_.feature_importances_
+        if hasattr(self.regressor_, 'coef_'):
+            self.coef_ = self.regressor_.coef_
+        if hasattr(self.regressor_, 'n_outputs_'):
+            self.n_outputs_ = self.regressor_.n_outputs_
+        if hasattr(self.regressor_, 'n_features_'):
+            self.n_features_ = self.regressor_.n_features_
+
+        return self
+
+    def predict(self, X):
+        """Predict target value of X
+        """
+        check_is_fitted(self, 'regressor_')
+        y_pred = self.regressor_.predict(X)
+        if not np.all((y_pred >= 0) & (y_pred <= 1)):
+            y_pred = (y_pred - y_pred.min()) / (y_pred.max() - y_pred.min())
+        if self.less_is_positive:
+            y_pred = 1 - y_pred
+        return y_pred
+
+
+# roc_auc_scorer
+regression_auc_scorer = binarize_auc_scorer
+
+# average_precision_scorer
+regression_average_precision_scorer = binarize_average_precision_scorer
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main_macros.xml	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,1865 @@
+<macros>
+  <token name="@VERSION@">1.0.0.4</token>
+
+  <xml name="python_requirements">
+      <requirements>
+          <requirement type="package" version="3.6">python</requirement>
+          <requirement type="package" version="0.20.3">scikit-learn</requirement>
+          <requirement type="package" version="0.24.2">pandas</requirement>
+          <requirement type="package" version="0.80">xgboost</requirement>
+          <requirement type="package" version="0.9.13">asteval</requirement>
+          <requirement type="package" version="0.6">skrebate</requirement>
+          <requirement type="package" version="0.4.2">imbalanced-learn</requirement>
+          <requirement type="package" version="0.16.0">mlxtend</requirement>
+          <yield/>
+      </requirements>
+  </xml>
+
+  <xml name="macro_stdio">
+    <stdio>
+        <exit_code range="1:" level="fatal" description="Error occurred. Please check Tool Standard Error"/>
+    </stdio>
+  </xml>
+
+
+  <!--Generic interface-->
+
+  <xml name="sl_Conditional" token_train="tabular" token_data="tabular" token_model="txt">
+    <conditional name="selected_tasks">
+        <param name="selected_task" type="select" label="Select a Classification Task">
+            <option value="train" selected="true">Train a model</option>
+            <option value="load">Load a model and predict</option>
+        </param>
+        <when value="load">
+            <param name="infile_model" type="data" format="@MODEL@" label="Models" help="Select a model file."/>
+            <param name="infile_data" type="data" format="@DATA@" label="Data (tabular)" help="Select the dataset you want to classify."/>
+            <param name="header" type="boolean" optional="True" truevalue="booltrue" falsevalue="boolfalse" checked="False" label="Does the dataset contain header:" />
+            <conditional name="prediction_options">
+                <param name="prediction_option" type="select" label="Select the type of prediction">
+                    <option value="predict">Predict class labels</option>
+                    <option value="advanced">Include advanced options</option>
+                </param>
+                <when value="predict">
+                </when>
+                <when value="advanced">
+                </when>
+            </conditional>
+        </when>
+        <when value="train">
+            <conditional name="selected_algorithms">
+                <yield />
+            </conditional>
+        </when>
+    </conditional>
+  </xml>
+
+  <xml name="advanced_section">
+    <section name="options" title="Advanced Options" expanded="False">
+      <yield />
+    </section>
+  </xml>
+
+
+  <!--Generalized Linear Models-->
+  <xml name="loss" token_help=" " token_select="false">
+    <param argument="loss" type="select" label="Loss function"  help="@HELP@">
+        <option value="squared_loss" selected="@SELECT@">squared loss</option>
+        <option value="huber">huber</option>
+        <option value="epsilon_insensitive">epsilon insensitive</option>
+        <option value="squared_epsilon_insensitive">squared epsilon insensitive</option>
+        <yield/>
+    </param>
+  </xml>
+
+  <xml name="penalty" token_help=" ">
+    <param argument="penalty" type="select" label="Penalty (regularization term)"  help="@HELP@">
+        <option value="l2" selected="true">l2</option>
+        <option value="l1">l1</option>
+        <option value="elasticnet">elastic net</option>
+        <option value="none">none</option>
+        <yield/>
+    </param>
+  </xml>
+
+  <xml name="l1_ratio" token_default_value="0.15" token_help=" ">
+    <param argument="l1_ratio" type="float" value="@DEFAULT_VALUE@" label="Elastic Net mixing parameter" help="@HELP@"/>
+  </xml>
+
+  <xml name="epsilon" token_default_value="0.1" token_help="Used if loss is ‘huber’, ‘epsilon_insensitive’, or ‘squared_epsilon_insensitive’. ">
+    <param argument="epsilon" type="float" value="@DEFAULT_VALUE@" label="Epsilon (epsilon-sensitive loss functions only)" help="@HELP@"/>
+  </xml>
+
+  <xml name="learning_rate_s" token_help=" " token_selected1="false" token_selected2="false">
+    <param argument="learning_rate" type="select" optional="true" label="Learning rate schedule"  help="@HELP@">
+        <option value="optimal" selected="@SELECTED1@">optimal</option>
+        <option value="constant">constant</option>
+        <option value="invscaling" selected="@SELECTED2@">inverse scaling</option>
+        <yield/>
+    </param>
+  </xml>
+
+  <xml name="eta0" token_default_value="0.0" token_help="Used with ‘constant’ or ‘invscaling’ schedules. ">
+    <param argument="eta0" type="float" value="@DEFAULT_VALUE@" label="Initial learning rate" help="@HELP@"/>
+  </xml>
+
+  <xml name="power_t" token_default_value="0.5" token_help=" ">
+    <param argument="power_t" type="float" value="@DEFAULT_VALUE@" label="Exponent for inverse scaling learning rate" help="@HELP@"/>
+  </xml>
+
+  <xml name="normalize" token_checked="false" token_help=" ">
+    <param argument="normalize" type="boolean" optional="true" truevalue="booltrue" falsevalue="boolfalse" checked="@CHECKED@" label="Normalize samples before training" help=" "/>
+  </xml>
+
+  <xml name="copy_X" token_checked="true" token_help=" ">
+    <param argument="copy_X" type="boolean" optional="true" truevalue="booltrue" falsevalue="boolfalse" checked="@CHECKED@" label="Use a copy of samples" help="If false, samples would be overwritten. "/>
+  </xml>
+
+  <xml name="ridge_params">
+    <expand macro="normalize"/>
+    <expand macro="alpha" default_value="1.0"/>
+    <expand macro="fit_intercept"/>
+    <expand macro="max_iter" default_value=""/>
+    <expand macro="tol" default_value="0.001" help_text="Precision of the solution. "/>
+    <!--class_weight-->
+    <expand macro="copy_X"/>
+    <param argument="solver" type="select" value="" label="Solver to use in the computational routines" help=" ">
+        <option value="auto" selected="true">auto</option>
+        <option value="svd">svd</option>
+        <option value="cholesky">cholesky</option>
+        <option value="lsqr">lsqr</option>
+        <option value="sparse_cg">sparse_cg</option>
+        <option value="sag">sag</option>
+    </param>
+    <expand macro="random_state"/>
+  </xml>
+
+  <!--Ensemble methods-->
+  <xml name="n_estimators" token_default_value="10" token_help=" ">
+    <param argument="n_estimators" type="integer" optional="true" value="@DEFAULT_VALUE@" label="Number of trees in the forest" help="@HELP@"/>
+  </xml>
+
+  <xml name="max_depth" token_default_value="" token_help=" ">
+    <param argument="max_depth" type="integer" optional="true" value="@DEFAULT_VALUE@" label="Maximum depth of the tree" help="@HELP@"/>
+  </xml>
+
+  <xml name="min_samples_split" token_type="integer" token_default_value="2" token_help=" ">
+    <param argument="min_samples_split" type="@TYPE@" optional="true" value="@DEFAULT_VALUE@" label="Minimum number of samples required to split an internal node" help="@HELP@"/>
+  </xml>
+
+  <xml name="min_samples_leaf" token_type="integer" token_default_value="1" token_label="Minimum number of samples in newly created leaves" token_help=" ">
+    <param argument="min_samples_leaf" type="@TYPE@" optional="true" value="@DEFAULT_VALUE@" label="@LABEL@" help="@HELP@"/>
+  </xml>
+
+  <xml name="min_weight_fraction_leaf" token_default_value="0.0" token_help=" ">
+    <param argument="min_weight_fraction_leaf" type="float" optional="true" value="@DEFAULT_VALUE@" label="Minimum weighted fraction of the input samples required to be at a leaf node" help="@HELP@"/>
+  </xml>
+
+  <xml name="max_leaf_nodes" token_default_value="" token_help=" ">
+    <param argument="max_leaf_nodes" type="integer" optional="true" value="@DEFAULT_VALUE@" label="Maximum number of leaf nodes in best-first method" help="@HELP@"/>
+  </xml>
+
+  <xml name="min_impurity_decrease" token_default_value="0" token_help=" ">
+    <param argument="min_impurity_decrease" type="float" value="@DEFAULT_VALUE@" optional="true" label="The threshold value of impurity for stopping node splitting" help="@HELP@"/>
+  </xml>
+
+  <xml name="bootstrap" token_checked="true" token_help=" ">
+    <param argument="bootstrap" type="boolean" optional="true" truevalue="booltrue" falsevalue="boolflase" checked="@CHECKED@" label="Use bootstrap samples for building trees." help="@HELP@"/>
+  </xml>
+
+  <xml name="criterion" token_help=" ">
+    <param argument="criterion" type="select" label="Function to measure the quality of a split"  help=" ">
+        <option value="gini" selected="true">Gini impurity</option>
+        <option value="entropy">Information gain</option>
+        <yield/>
+    </param>
+  </xml>
+
+  <xml name="criterion2" token_help="">
+    <param argument="criterion" type="select" label="Function to measure the quality of a split" >
+      <option value="mse">mse - mean squared error</option>
+      <option value="mae">mae - mean absolute error</option>
+      <yield/>
+    </param>
+  </xml>
+
+  <xml name="oob_score" token_checked="false" token_help=" ">
+    <param argument="oob_score" type="boolean" optional="true" truevalue="booltrue" falsevalue="boolfalse" checked="@CHECKED@" label="Use out-of-bag samples to estimate the generalization error" help="@HELP@"/>
+  </xml>
+
+  <xml name="max_features">
+    <conditional name="select_max_features">
+      <param argument="max_features" type="select" label="max_features">
+        <option value="auto" selected="true">auto - max_features=n_features</option>
+        <option value="sqrt">sqrt - max_features=sqrt(n_features)</option>
+        <option value="log2">log2 - max_features=log2(n_features)</option>
+        <option value="number_input">I want to type the number in or input None type</option>
+      </param>
+      <when value="auto">
+      </when>
+      <when value="sqrt">
+      </when>
+      <when value="log2">
+      </when>
+      <when value="number_input">
+        <param name="num_max_features" type="float" value="" optional="true" label="Input max_features number:" help="If int, consider the number of features at each split; If float, then max_features is a percentage and int(max_features * n_features) features are considered at each split."/>
+      </when>
+    </conditional>
+  </xml>
+
+  <xml name="verbose" token_default_value="0" token_help="If 1 then it prints progress and performance once in a while. If greater than 1 then it prints progress and performance for every tree.">
+    <param argument="verbose" type="integer" value="@DEFAULT_VALUE@" optional="true" label="Enable verbose output" help="@HELP@"/>
+  </xml>
+
+  <xml name="learning_rate" token_default_value="1.0" token_help=" ">
+    <param argument="learning_rate" type="float" optional="true" value="@DEFAULT_VALUE@" label="Learning rate" help="@HELP@"/>
+  </xml>
+
+  <xml name="subsample" token_help=" ">
+    <param argument="subsample" type="float" value="1.0" optional="true" label="The fraction of samples to be used for fitting the individual base learners" help="@HELP@"/>
+  </xml>
+
+  <xml name="presort">
+    <param argument="presort" type="select" label="Whether to presort the data to speed up the finding of best splits in fitting" >
+      <option value="auto" selected="true">auto</option>
+      <option value="true">true</option>
+      <option value="false">false</option>
+    </param>
+  </xml>
+
+  <!--Parameters-->
+  <xml name="tol" token_default_value="0.0" token_help_text="Early stopping heuristics based on the relative center changes. Set to default (0.0) to disable this convergence detection.">
+        <param argument="tol" type="float" optional="true" value="@DEFAULT_VALUE@" label="Tolerance" help="@HELP_TEXT@"/>
+  </xml>
+
+  <xml name="n_clusters" token_default_value="8">
+    <param argument="n_clusters" type="integer" optional="true" value="@DEFAULT_VALUE@" label="Number of clusters" help=" "/>
+  </xml>
+
+  <xml name="fit_intercept" token_checked="true">
+    <param argument="fit_intercept" type="boolean" optional="true" truevalue="booltrue" falsevalue="boolfalse" checked="@CHECKED@" label="Estimate the intercept" help="If false, the data is assumed to be already centered."/>
+  </xml>
+
+  <xml name="n_iter" token_default_value="5" token_help_text="The number of passes over the training data (aka epochs). ">
+    <param argument="n_iter" type="integer" optional="true" value="@DEFAULT_VALUE@" label="Number of iterations" help="@HELP_TEXT@"/>
+  </xml>
+
+  <xml name="shuffle" token_checked="true" token_help_text=" " token_label="Shuffle data after each iteration">
+    <param argument="shuffle" type="boolean" optional="true" truevalue="booltrue" falsevalue="boolfalse" checked="@CHECKED@" label="@LABEL@" help="@HELP_TEXT@"/>
+  </xml>
+
+  <xml name="random_state" token_default_value="" token_help_text="Integer number. The seed of the pseudo random number generator to use when shuffling the data. A fixed seed allows reproducible results. default=None.">
+    <param argument="random_state" type="integer" optional="true" value="@DEFAULT_VALUE@" label="Random seed number" help="@HELP_TEXT@"/>
+  </xml>
+
+  <xml name="warm_start" token_checked="true" token_help_text="When set to True, reuse the solution of the previous call to fit as initialization,otherwise, just erase the previous solution.">
+    <param argument="warm_start" type="boolean" optional="true" truevalue="booltrue" falsevalue="boolfalse" checked="@CHECKED@" label="Perform warm start" help="@HELP_TEXT@"/>
+  </xml>
+
+  <xml name="C" token_default_value="1.0" token_help_text="Penalty parameter C of the error term.">
+    <param argument="C" type="float" optional="true" value="@DEFAULT_VALUE@" label="Penalty parameter" help="@HELP_TEXT@"/>
+  </xml>
+
+  <!--xml name="class_weight" token_default_value="" token_help_text="">
+    <param argument="class_weight" type="" optional="true" value="@DEFAULT_VALUE@" label="" help="@HELP_TEXT@"/>
+  </xml-->
+
+  <xml name="alpha" token_default_value="0.0001" token_help_text="Constant that multiplies the regularization term if regularization is used. ">
+    <param argument="alpha" type="float" optional="true" value="@DEFAULT_VALUE@" label="Regularization coefficient" help="@HELP_TEXT@"/>
+  </xml>
+
+  <xml name="n_samples" token_default_value="100" token_help_text="The total number of points equally divided among clusters.">
+    <param argument="n_samples" type="integer" optional="true" value="@DEFAULT_VALUE@" label="Number of samples" help="@HELP_TEXT@"/>
+  </xml>
+
+  <xml name="n_features" token_default_value="2" token_help_text="Number of different numerical properties produced for each sample.">
+    <param argument="n_features" type="integer" optional="true" value="@DEFAULT_VALUE@" label="Number of features" help="@HELP_TEXT@"/>
+  </xml>
+
+  <xml name="noise" token_default_value="0.0" token_help_text="Floating point number. ">
+    <param argument="noise" type="float" optional="true" value="@DEFAULT_VALUE@" label="Standard deviation of the Gaussian noise added to the data" help="@HELP_TEXT@"/>
+  </xml>
+
+  <xml name="C" token_default_value="1.0" token_help_text="Penalty parameter C of the error term. ">
+      <param argument="C" type="float" optional="true" value="@DEFAULT_VALUE@" label="Penalty parameter" help="@HELP_TEXT@"/>
+  </xml>
+
+  <xml name="max_iter" token_default_value="300" token_label="Maximum number of iterations per single run" token_help_text=" ">
+      <param argument="max_iter" type="integer" optional="true" value="@DEFAULT_VALUE@" label="@LABEL@" help="@HELP_TEXT@"/>
+  </xml>
+
+  <xml name="n_init" token_default_value="10" >
+      <param argument="n_init" type="integer" optional="true" value="@DEFAULT_VALUE@" label="Number of runs with different centroid seeds" help=" "/>
+  </xml>
+
+  <xml name="init">
+      <param argument="init" type="select" label="Centroid initialization method"  help="''k-means++'' selects initial cluster centers that speed up convergence. ''random'' chooses k observations (rows) at random from data as initial centroids.">
+          <option value="k-means++">k-means++</option>
+          <option value="random">random</option>
+      </param>
+  </xml>
+
+  <xml name="gamma" token_default_value="1.0" token_label="Scaling parameter" token_help_text=" ">
+    <param argument="gamma" type="float" optional="true" value="@DEFAULT_VALUE@" label="@LABEL@" help="@HELP_TEXT@"/>
+  </xml>
+
+  <xml name="degree" token_default_value="3" token_label="Degree of the polynomial" token_help_text=" ">
+    <param argument="degree" type="integer" optional="true" value="@DEFAULT_VALUE@" label="@LABEL@" help="@HELP_TEXT@"/>
+  </xml>
+
+  <xml name="coef0" token_default_value="1" token_label="Zero coefficient" token_help_text=" ">
+    <param argument="coef0" type="integer" optional="true" value="@DEFAULT_VALUE@" label="@LABEL@" help="@HELP_TEXT@"/>
+  </xml>
+
+  <xml name="pos_label" token_default_value="">
+    <param argument="pos_label" type="integer" optional="true" value="@DEFAULT_VALUE@" label="Label of the positive class" help=" "/>
+  </xml>
+
+  <xml name="average">
+    <param argument="average" type="select" optional="true" label="Averaging type" help=" ">
+      <option value="micro">Calculate metrics globally by counting the total true positives, false negatives and false positives. (micro)</option>
+      <option value="samples">Calculate metrics for each instance, and find their average. Only meaningful for multilabel. (samples)</option>
+      <option value="macro">Calculate metrics for each label, and find their unweighted mean. This does not take label imbalance into account. (macro)</option>
+      <option value="weighted">Calculate metrics for each label, and find their average, weighted by support (the number of true instances for each label). This alters ‘macro’ to account for label imbalance; it can result in an F-score that is not between precision and recall. (weighted)</option>
+      <option value="None">None</option>
+      <yield/>
+    </param>
+  </xml>
+
+  <xml name="beta">
+    <param argument="beta" type="float" value="1.0" label="The strength of recall versus precision in the F-score" help=" "/>
+  </xml>
+
+
+  <!--Data interface-->
+
+  <xml name="samples_tabular" token_multiple1="false" token_multiple2="false">
+    <param name="infile1" type="data" format="tabular" label="Training samples dataset:"/>
+    <param name="header1" type="boolean" optional="true" truevalue="booltrue" falsevalue="boolfalse" checked="False" label="Does the dataset contain header:" />
+    <conditional name="column_selector_options_1">
+      <expand macro="samples_column_selector_options" multiple="@MULTIPLE1@"/>
+    </conditional>
+    <param name="infile2" type="data" format="tabular" label="Dataset containing class labels or target values:"/>
+    <param name="header2" type="boolean" optional="true" truevalue="booltrue" falsevalue="boolfalse" checked="False" label="Does the dataset contain header:" />
+    <conditional name="column_selector_options_2">
+      <expand macro="samples_column_selector_options" column_option="selected_column_selector_option2" col_name="col2" multiple="@MULTIPLE2@" infile="infile2"/>
+    </conditional>
+    <yield/>
+  </xml>
+
+  <xml name="samples_column_selector_options" token_column_option="selected_column_selector_option" token_col_name="col1" token_multiple="False" token_infile="infile1">
+    <param name="@COLUMN_OPTION@" type="select" label="Choose how to select data by column:">
+      <option value="by_index_number" selected="true">Select columns by column index number(s)</option>
+      <option value="all_but_by_index_number">All columns BUT by column index number(s)</option>
+      <option value="by_header_name">Select columns by column header name(s)</option>
+      <option value="all_but_by_header_name">All columns BUT by column header name(s)</option>
+      <option value="all_columns">All columns</option>
+    </param>
+    <when value="by_index_number">
+      <param name="@COL_NAME@" multiple="@MULTIPLE@" type="data_column" use_header_names="true" data_ref="@INFILE@" label="Select target column(s):"/>
+    </when>
+    <when value="all_but_by_index_number">
+      <param name="@COL_NAME@" multiple="@MULTIPLE@" type="data_column" use_header_names="true" data_ref="@INFILE@" label="Select target column(s):"/>
+    </when>
+    <when value="by_header_name">
+      <param name="@COL_NAME@" type="text" value="" label="Type header name(s):" help="Comma-separated string. For example: target1,target2"/>
+    </when>
+    <when value="all_but_by_header_name">
+      <param name="@COL_NAME@" type="text" value="" label="Type header name(s):" help="Comma-separated string. For example: target1,target2"/>
+    </when>
+    <when value="all_columns">
+    </when>
+  </xml>
+
+  <xml name="clf_inputs_extended" token_label1=" " token_label2=" " token_multiple="False">
+    <conditional name="true_columns">
+      <param name="selected_input1" type="select" label="Select the input type of true labels dataset:">
+          <option value="tabular" selected="true">Tabular</option>
+          <option value="sparse">Sparse</option>
+      </param>
+      <when value="tabular">
+        <param name="infile1" type="data" label="@LABEL1@"/>
+        <param name="col1" type="data_column" data_ref="infile1" label="Select the target column:"/>
+      </when>
+      <when value="sparse">
+          <param name="infile1" type="data" format="txt" label="@LABEL1@"/>
+      </when>
+    </conditional>
+    <conditional name="predicted_columns">
+      <param name="selected_input2" type="select" label="Select the input type of predicted labels dataset:">
+          <option value="tabular" selected="true">Tabular</option>
+          <option value="sparse">Sparse</option>
+      </param>
+      <when value="tabular">
+        <param name="infile2" type="data" label="@LABEL2@"/>
+        <param name="col2" multiple="@MULTIPLE@" type="data_column" data_ref="infile2" label="Select target column(s):"/>
+      </when>
+      <when value="sparse">
+          <param name="infile2" type="data" format="txt" label="@LABEL1@"/>
+      </when>
+    </conditional>
+  </xml>
+
+  <xml name="clf_inputs" token_label1="Dataset containing true labels (tabular):" token_label2="Dataset containing predicted values (tabular):" token_multiple1="False" token_multiple="False">
+    <param name="infile1" type="data" format="tabular" label="@LABEL1@"/>
+    <param name="header1" type="boolean" optional="True" truevalue="booltrue" falsevalue="boolfalse" checked="False" label="Does the dataset contain header:" />
+    <conditional name="column_selector_options_1">
+      <expand macro="samples_column_selector_options" multiple="@MULTIPLE1@"/>
+    </conditional>
+    <param name="infile2" type="data" format="tabular" label="@LABEL2@"/>
+    <param name="header2" type="boolean" optional="True" truevalue="booltrue" falsevalue="boolfalse" checked="False" label="Does the dataset contain header:" />
+    <conditional name="column_selector_options_2">
+      <expand macro="samples_column_selector_options" column_option="selected_column_selector_option2" col_name="col2" multiple="@MULTIPLE@" infile="infile2"/>
+    </conditional>
+  </xml>
+
+  <xml name="multiple_input" token_name="input_files" token_max_num="10" token_format="txt" token_label="Sparse matrix file (.mtx, .txt)" token_help_text="Specify a sparse matrix file in .txt format.">
+    <repeat name="@NAME@" min="1" max="@MAX_NUM@" title="Select input file(s):">
+        <param name="input" type="data" format="@FORMAT@" label="@LABEL@" help="@HELP_TEXT@"/>
+    </repeat>
+  </xml>
+
+  <xml name="sparse_target" token_label1="Select a sparse matrix:" token_label2="Select the tabular containing true labels:" token_multiple="False" token_format1="txt" token_format2="tabular" token_help1="" token_help2="">
+    <param name="infile1" type="data" format="@FORMAT1@" label="@LABEL1@" help="@HELP1@"/>
+    <param name="infile2" type="data" format="@FORMAT2@" label="@LABEL2@" help="@HELP2@"/>
+    <param name="col2" multiple="@MULTIPLE@" type="data_column" data_ref="infile2" label="Select target column(s):"/>
+  </xml>
+
+  <xml name="sl_mixed_input">
+    <conditional name="input_options">
+      <param name="selected_input" type="select" label="Select input type:">
+          <option value="tabular" selected="true">tabular data</option>
+          <option value="sparse">sparse matrix</option>
+      </param>
+      <when value="tabular">
+          <expand macro="samples_tabular" multiple1="true" multiple2="false"/>
+      </when>
+      <when value="sparse">
+          <expand macro="sparse_target"/>
+      </when>
+    </conditional>
+  </xml>
+
+  <!--Advanced options-->
+  <xml name="nn_advanced_options">
+    <section name="options" title="Advanced Options" expanded="False">
+      <yield/>
+      <param argument="weights" type="select" label="Weight function" help="Used in prediction.">
+          <option value="uniform" selected="true">Uniform weights. All points in each neighborhood are weighted equally. (Uniform)</option>
+          <option value="distance">Weight points by the inverse of their distance. (Distance)</option>
+      </param>
+      <param argument="algorithm" type="select" label="Neighbor selection algorithm" help=" ">
+          <option value="auto" selected="true">Auto</option>
+          <option value="ball_tree">BallTree</option>
+          <option value="kd_tree">KDTree</option>
+          <option value="brute">Brute-force</option>
+      </param>
+      <param argument="leaf_size" type="integer" value="30" label="Leaf size" help="Used with BallTree and KDTree. Affects the time and memory usage of the constructed tree."/>
+      <!--param name="metric"-->
+      <!--param name="p"-->
+      <!--param name="metric_params"-->
+    </section>
+  </xml>
+
+  <xml name="svc_advanced_options">
+    <section name="options" title="Advanced Options" expanded="False">
+        <yield/>
+        <param argument="kernel" type="select" optional="true" label="Kernel type" help="Kernel type to be used in the algorithm. If none is given, ‘rbf’ will be used.">
+            <option value="rbf" selected="true">rbf</option>
+            <option value="linear">linear</option>
+            <option value="poly">poly</option>
+            <option value="sigmoid">sigmoid</option>
+            <option value="precomputed">precomputed</option>
+        </param>
+        <param argument="degree" type="integer" optional="true" value="3" label="Degree of the polynomial (polynomial kernel only)" help="Ignored by other kernels. dafault : 3 "/>
+        <!--TODO: param argument="gamma" float, optional (default=’auto’) -->
+        <param argument="coef0" type="float" optional="true" value="0.0" label="Zero coefficient (polynomial and sigmoid kernels only)"
+            help="Independent term in kernel function. dafault: 0.0 "/>
+        <param argument="shrinking" type="boolean" optional="true" truevalue="booltrue" falsevalue="boolfalse" checked="true"
+            label="Use the shrinking heuristic" help=" "/>
+        <param argument="probability" type="boolean" optional="true" truevalue="booltrue" falsevalue="boolfalse" checked="false"
+            label="Enable probability estimates. " help="This must be enabled prior to calling fit, and will slow down that method."/>
+        <!-- param argument="cache_size"-->
+        <!--expand macro="class_weight"/-->
+        <expand macro="tol" default_value="0.001" help_text="Tolerance for stopping criterion. "/>
+        <expand macro="max_iter" default_value="-1" label="Solver maximum number of iterations" help_text="Hard limit on iterations within solver, or -1 for no limit."/>
+        <!--param argument="decision_function_shape"-->
+        <expand macro="random_state" help_text="Integer number. The seed of the pseudo random number generator to use when shuffling the data for probability estimation. A fixed seed allows reproducible results."/>
+    </section>
+  </xml>
+
+  <xml name="spectral_clustering_advanced_options">
+    <section name="options" title="Advanced Options" expanded="False">
+        <expand macro="n_clusters"/>
+        <param argument="eigen_solver" type="select" value="" label="Eigen solver" help="The eigenvalue decomposition strategy to use.">
+            <option value="arpack" selected="true">arpack</option>
+            <option value="lobpcg">lobpcg</option>
+            <option value="amg">amg</option>
+            <!--None-->
+        </param>
+        <expand macro="random_state"/>
+        <expand macro="n_init"/>
+        <param argument="gamma" type="float" optional="true" value="1.0" label="Kernel scaling factor" help="Scaling factor of RBF, polynomial, exponential chi^2 and sigmoid affinity kernel. Ignored for affinity=''nearest_neighbors''."/>
+        <param argument="affinity" type="select" label="Affinity" help="Affinity kernel to use. ">
+            <option value="rbf" selected="true">RBF</option>
+            <option value="precomputed">precomputed</option>
+            <option value="nearest_neighbors">Nearset neighbors</option>
+        </param>
+        <param argument="n_neighbors" type="integer" optional="true" value="10" label="Number of neighbors" help="Number of neighbors to use when constructing the affinity matrix using the nearest neighbors method. Ignored for affinity=''rbf''"/>
+        <!--param argument="eigen_tol"-->
+        <param argument="assign_labels" type="select" label="Assign labels" help="The strategy to use to assign labels in the embedding space.">
+            <option value="kmeans" selected="true">kmeans</option>
+            <option value="discretize">discretize</option>
+        </param>
+        <param argument="degree" type="integer" optional="true" value="3"
+            label="Degree of the polynomial (polynomial kernel only)" help="Ignored by other kernels. dafault : 3 "/>
+        <param argument="coef0" type="integer" optional="true" value="1"
+            label="Zero coefficient (polynomial and sigmoid kernels only)" help="Ignored by other kernels. dafault : 1 "/>
+        <!--param argument="kernel_params"-->
+    </section>
+  </xml>
+
+  <xml name="minibatch_kmeans_advanced_options">
+    <section name="options" title="Advanced Options" expanded="False">
+        <expand macro="n_clusters"/>
+        <expand macro="init"/>
+        <expand macro="n_init" default_value="3"/>
+        <expand macro="max_iter" default_value="100"/>
+        <expand macro="tol" help_text="Early stopping heuristics based on normalized center change. To disable set to 0.0 ."/>
+        <expand macro="random_state"/>
+        <param argument="batch_size" type="integer" optional="true" value="100" label="Batch size" help="Size of the mini batches."/>
+        <!--param argument="compute_labels"-->
+        <param argument="max_no_improvement" type="integer" optional="true" value="10" label="Maximum number of improvement attempts" help="
+        Convergence detection based on inertia (the consecutive number of mini batches that doe not yield an improvement on the smoothed inertia).
+        To disable, set max_no_improvement to None. "/>
+        <param argument="init_size" type="integer" optional="true" value="" label="Number of random initialization samples" help="Number of samples to randomly sample for speeding up the initialization . ( default: 3 * batch_size )"/>
+        <param argument="reassignment_ratio" type="float" optional="true" value="0.01" label="Re-assignment ratio" help="Controls the fraction of the maximum number of counts for a center to be reassigned. Higher values yield better clustering results."/>
+    </section>
+  </xml>
+
+  <xml name="kmeans_advanced_options">
+    <section name="options" title="Advanced Options" expanded="False">
+      <expand macro="n_clusters"/>
+      <expand macro="init"/>
+      <expand macro="n_init"/>
+      <expand macro="max_iter"/>
+      <expand macro="tol" default_value="0.0001" help_text="Relative tolerance with regards to inertia to declare convergence."/>
+      <!--param argument="precompute_distances"/-->
+      <expand macro="random_state"/>
+      <param argument="copy_x" type="boolean" optional="true" truevalue="booltrue" falsevalue="boolfalse" checked="true" label="Use a copy of data for precomputing distances" help="Mofifying the original data introduces small numerical differences caused by subtracting and then adding the data mean."/>
+      <expand macro="kmeans_algorithm"/>
+    </section>
+  </xml>
+
+  <xml name="kmeans_algorithm">
+    <param argument="algorithm" type="select" label="K-means algorithm to use:">
+      <option value="auto" selected="true">auto</option>
+      <option value="full">full</option>
+      <option value="elkan">elkan</option>
+    </param>
+  </xml>
+
+  <xml name="birch_advanced_options">
+    <section name="options" title="Advanced Options" expanded="False">
+      <param argument="threshold" type="float" optional="true" value="0.5" label="Subcluster radius threshold" help="The radius of the subcluster obtained by merging a new sample; the closest subcluster should be less than the threshold to avoid a new subcluster."/>
+      <param argument="branching_factor" type="integer" optional="true" value="50" label="Maximum number of subclusters per branch" help="Maximum number of CF subclusters in each node."/>
+      <expand macro="n_clusters" default_value="3"/>
+      <!--param argument="compute_labels"/-->
+    </section>
+  </xml>
+
+  <xml name="dbscan_advanced_options">
+    <section name="options" title="Advanced Options" expanded="False">
+      <param argument="eps" type="float" optional="true" value="0.5" label="Maximum neighborhood distance" help="The maximum distance between two samples for them to be considered as in the same neighborhood."/>
+      <param argument="min_samples" type="integer" optional="true" value="5" label="Minimal core point density" help="The number of samples (or total weight) in a neighborhood for a point (including the point itself) to be considered as a core point."/>
+      <param argument="metric" type="text" optional="true" value="euclidean" label="Metric" help="The metric to use when calculating distance between instances in a feature array."/>
+      <param argument="algorithm" type="select" label="Pointwise distance computation algorithm" help="The algorithm to be used by the NearestNeighbors module to compute pointwise distances and find nearest neighbors.">
+          <option value="auto" selected="true">auto</option>
+          <option value="ball_tree">ball_tree</option>
+          <option value="kd_tree">kd_tree</option>
+          <option value="brute">brute</option>
+      </param>
+      <param argument="leaf_size" type="integer" optional="true" value="30" label="Leaf size" help="Leaf size passed to BallTree or cKDTree. Memory and time efficieny factor in tree constrution and querying."/>
+    </section>
+  </xml>
+
+  <xml name="clustering_algorithms_options">
+    <conditional name="algorithm_options">
+      <param name="selected_algorithm" type="select" label="Clustering Algorithm">
+          <option value="KMeans" selected="true">KMeans</option>
+          <option value="SpectralClustering">Spectral Clustering</option>
+          <option value="MiniBatchKMeans">Mini Batch KMeans</option>
+          <option value="DBSCAN">DBSCAN</option>
+          <option value="Birch">Birch</option>
+      </param>
+      <when value="KMeans">
+          <expand macro="kmeans_advanced_options"/>
+      </when>
+      <when value="DBSCAN">
+          <expand macro="dbscan_advanced_options"/>
+      </when>
+      <when value="Birch">
+          <expand macro="birch_advanced_options"/>
+      </when>
+      <when value="SpectralClustering">
+          <expand macro="spectral_clustering_advanced_options"/>
+      </when>
+      <when value="MiniBatchKMeans">
+          <expand macro="minibatch_kmeans_advanced_options"/>
+      </when>
+    </conditional>
+  </xml>
+
+  <xml name="distance_metrics">
+    <param argument="metric" type="select" label="Distance metric" help=" ">
+      <option value="euclidean" selected="true">euclidean</option>
+      <option value="cityblock">cityblock</option>
+      <option value="cosine">cosine</option>
+      <option value="l1">l1</option>
+      <option value="l2">l2</option>
+      <option value="manhattan">manhattan</option>
+      <yield/>
+    </param>
+  </xml>
+
+  <xml name="distance_nonsparse_metrics">
+    <option value="braycurtis">braycurtis</option>
+    <option value="canberra">canberra</option>
+    <option value="chebyshev">chebyshev</option>
+    <option value="correlation">correlation</option>
+    <option value="dice">dice</option>
+    <option value="hamming">hamming</option>
+    <option value="jaccard">jaccard</option>
+    <option value="kulsinski">kulsinski</option>
+    <option value="mahalanobis">mahalanobis</option>
+    <option value="matching">matching</option>
+    <option value="minkowski">minkowski</option>
+    <option value="rogerstanimoto">rogerstanimoto</option>
+    <option value="russellrao">russellrao</option>
+    <option value="seuclidean">seuclidean</option>
+    <option value="sokalmichener">sokalmichener</option>
+    <option value="sokalsneath">sokalsneath</option>
+    <option value="sqeuclidean">sqeuclidean</option>
+    <option value="yule">yule</option>
+  </xml>
+
+  <xml name="pairwise_kernel_metrics">
+    <param argument="metric" type="select" label="Pirwise Kernel metric" help=" ">
+      <option value="rbf" selected="true">rbf</option>
+      <option value="sigmoid">sigmoid</option>
+      <option value="polynomial">polynomial</option>
+      <option value="linear" selected="true">linear</option>
+      <option value="chi2">chi2</option>
+      <option value="additive_chi2">additive_chi2</option>
+    </param>
+  </xml>
+
+  <xml name="sparse_pairwise_metric_functions">
+    <param name="selected_metric_function" type="select" label="Select the pairwise metric you want to compute:">
+      <option value="euclidean_distances" selected="true">Euclidean distance matrix</option>
+      <option value="pairwise_distances">Distance matrix</option>
+      <option value="pairwise_distances_argmin">Minimum distances between one point and a set of points</option>
+      <yield/>
+    </param>
+  </xml>
+
+  <xml name="pairwise_metric_functions">
+    <option value="additive_chi2_kernel" >Additive chi-squared kernel</option>
+    <option value="chi2_kernel">Exponential chi-squared kernel</option>
+    <option value="linear_kernel">Linear kernel</option>
+    <option value="manhattan_distances">L1 distances</option>
+    <option value="pairwise_kernels">Kernel</option>
+    <option value="polynomial_kernel">Polynomial kernel</option>
+    <option value="rbf_kernel">Gaussian (rbf) kernel</option>
+    <option value="laplacian_kernel">Laplacian kernel</option>
+  </xml>
+
+  <xml name="sparse_pairwise_condition">
+    <when value="pairwise_distances">
+      <section name="options" title="Advanced Options" expanded="False">
+          <expand macro="distance_metrics">
+              <yield/>
+          </expand>
+      </section>
+    </when>
+    <when value="euclidean_distances">
+      <section name="options" title="Advanced Options" expanded="False">
+          <param argument="squared" type="boolean" optional="true" truevalue="booltrue" falsevalue="boolfalse" checked="false"
+            label="Return squared Euclidean distances" help=" "/>
+      </section>
+    </when>
+  </xml>
+
+  <xml name="argmin_distance_condition">
+    <when value="pairwise_distances_argmin">
+      <section name="options" title="Advanced Options" expanded="False">
+          <param argument="axis" type="integer" optional="true" value="1" label="Axis" help="Axis along which the argmin and distances are to be computed."/>
+          <expand macro="distance_metrics">
+              <yield/>
+          </expand>
+          <param argument="batch_size" type="integer" optional="true" value="500" label="Batch size" help="Number of rows to be processed in each batch run."/>
+      </section>
+    </when>
+  </xml>
+
+  <xml name="sparse_preprocessors">
+    <param name="selected_pre_processor" type="select" label="Select a preprocessor:">
+      <option value="StandardScaler" selected="true">Standard Scaler (Standardizes features by removing the mean and scaling to unit variance)</option>
+      <option value="Binarizer">Binarizer (Binarizes data)</option>
+      <option value="Imputer">Imputer (Completes missing values)</option>
+      <option value="MaxAbsScaler">Max Abs Scaler (Scales features by their maximum absolute value)</option>
+      <option value="Normalizer">Normalizer (Normalizes samples individually to unit norm)</option>
+      <yield/>
+    </param>
+  </xml>
+
+  <xml name="sparse_preprocessors_ext">
+    <expand macro="sparse_preprocessors">
+      <option value="KernelCenterer">Kernel Centerer (Centers a kernel matrix)</option>
+      <option value="MinMaxScaler">Minmax Scaler (Scales features to a range)</option>
+      <option value="PolynomialFeatures">Polynomial Features (Generates polynomial and interaction features)</option>
+      <option value="RobustScaler">Robust Scaler (Scales features using outlier-invariance statistics)</option>
+    </expand>
+  </xml>
+
+  <xml name="sparse_preprocessor_options">
+    <when value="Binarizer">
+        <section name="options" title="Advanced Options" expanded="False">
+            <param argument="copy" type="boolean" optional="true" truevalue="booltrue" falsevalue="boolfalse" checked="true"
+                label="Use a copy of data for precomputing binarization" help=" "/>
+            <param argument="threshold" type="float" optional="true" value="0.0"
+                label="Threshold"
+                help="Feature values below or equal to this are replaced by 0, above it by 1. Threshold may not be less than 0 for operations on sparse matrices. "/>
+        </section>
+    </when>
+    <when value="Imputer">
+      <section name="options" title="Advanced Options" expanded="False">
+          <param argument="copy" type="boolean" optional="true" truevalue="booltrue" falsevalue="boolfalse" checked="true"
+            label="Use a copy of data for precomputing imputation" help=" "/>
+          <param argument="strategy" type="select" optional="true" label="Imputation strategy" help=" ">
+              <option value="mean" selected="true">Replace missing values using the mean along the axis</option>
+              <option value="median">Replace missing values using the median along the axis</option>
+              <option value="most_frequent">Replace missing using the most frequent value along the axis</option>
+          </param>
+          <param argument="missing_values" type="text" optional="true" value="NaN"
+                label="Placeholder for missing values" help="For missing values encoded as numpy.nan, use the string value “NaN”"/>
+          <!--param argument="axis" type="boolean" optional="true" truevalue="1" falsevalue="0"
+                label="Impute along axis = 1" help="If fasle, axis = 0 is selected for imputation. "/> -->
+          <!--param argument="axis" type="select" optional="true" label="The axis along which to impute" help=" ">
+              <option value="0" selected="true">Impute along columns</option>
+              <option value="1">Impute along rows</option>
+          </param-->
+      </section>
+    </when>
+    <when value="StandardScaler">
+      <section name="options" title="Advanced Options" expanded="False">
+        <param argument="copy" type="boolean" optional="true" truevalue="booltrue" falsevalue="boolfalse" checked="true"
+            label="Use a copy of data for performing inplace scaling" help=" "/>
+        <param argument="with_mean" type="boolean" optional="true" truevalue="booltrue" falsevalue="boolfalse" checked="true"
+            label="Center the data before scaling" help=" "/>
+        <param argument="with_std" type="boolean" optional="true" truevalue="booltrue" falsevalue="boolfalse" checked="true"
+            label="Scale the data to unit variance (or unit standard deviation)" help=" "/>
+      </section>
+    </when>
+    <when value="MaxAbsScaler">
+      <section name="options" title="Advanced Options" expanded="False">
+        <param argument="copy" type="boolean" optional="true" truevalue="booltrue" falsevalue="boolfalse" checked="true"
+            label="Use a copy of data for precomputing scaling" help=" "/>
+      </section>
+    </when>
+    <when value="Normalizer">
+      <section name="options" title="Advanced Options" expanded="False">
+        <param argument="norm" type="select" optional="true" label="The norm to use to normalize non zero samples" help=" ">
+          <option value="l1" selected="true">l1</option>
+          <option value="l2">l2</option>
+          <option value="max">max</option>
+        </param>
+        <param argument="copy" type="boolean" optional="true" truevalue="booltrue" falsevalue="boolfalse" checked="true"
+            label="Use a copy of data for precomputing row normalization" help=" "/>
+      </section>
+    </when>
+    <yield/>
+  </xml>
+
+  <xml name="sparse_preprocessor_options_ext">
+    <expand macro="sparse_preprocessor_options">
+      <when value="KernelCenterer">
+        <section name="options" title="Advanced Options" expanded="False">
+        </section>
+      </when>
+      <when value="MinMaxScaler">
+          <section name="options" title="Advanced Options" expanded="False">
+              <!--feature_range-->
+              <param argument="copy" type="boolean" optional="true" truevalue="booltrue" falsevalue="boolflase" checked="true"
+                  label="Use a copy of data for precomputing normalization" help=" "/>
+          </section>
+      </when>
+      <when value="PolynomialFeatures">
+          <section name="options" title="Advanced Options" expanded="False">
+              <param argument="degree" type="integer" optional="true" value="2" label="The degree of the polynomial features " help=""/>
+              <param argument="interaction_only" type="boolean" optional="true" truevalue="booltrue" falsevalue="boolflase" checked="false" label="Produce interaction features only" help="(Features that are products of at most degree distinct input features) "/>
+              <param argument="include_bias" type="boolean" optional="true" truevalue="booltrue" falsevalue="boolflase" checked="true" label="Include a bias column" help="Feature in which all polynomial powers are zero "/>
+          </section>
+      </when>
+      <when value="RobustScaler">
+          <section name="options" title="Advanced Options" expanded="False">
+              <!--=True, =True, copy=True-->
+              <param argument="with_centering" type="boolean" optional="true" truevalue="booltrue" falsevalue="boolflase" checked="true"
+                  label="Center the data before scaling" help=" "/>
+              <param argument="with_scaling" type="boolean" optional="true" truevalue="booltrue" falsevalue="boolflase" checked="true"
+                  label="Scale the data to interquartile range" help=" "/>
+              <param argument="copy" type="boolean" optional="true" truevalue="booltrue" falsevalue="boolflase" checked="true"
+                  label="Use a copy of data for inplace scaling" help=" "/>
+          </section>
+      </when>
+    </expand>
+  </xml>
+
+  <xml name="cv_splitter">
+    <option value="default" selected="true">default splitter</option>
+    <option value="KFold">KFold</option>
+    <option value="StratifiedKFold">StratifiedKFold</option>
+    <option value="LeaveOneOut">LeaveOneOut</option>
+    <option value="LeavePOut">LeavePOut</option>
+    <option value="RepeatedKFold">RepeatedKFold</option>
+    <option value="RepeatedStratifiedKFold">RepeatedStratifiedKFold</option>
+    <option value="ShuffleSplit">ShuffleSplit</option>
+    <option value="StratifiedShuffleSplit">StratifiedShuffleSplit</option>
+    <option value="TimeSeriesSplit">TimeSeriesSplit</option>
+    <option value="PredefinedSplit">PredefinedSplit</option>
+    <option value="OrderedKFold">OrderedKFold</option>
+    <option value="RepeatedOrderedKFold">RepeatedOrderedKFold</option>
+    <yield/>
+  </xml>
+
+  <xml name="cv_splitter_options">
+    <when value="default">
+      <expand macro="cv_n_splits"/>
+    </when>
+    <when value="KFold">
+      <expand macro="cv_n_splits"/>
+      <expand macro="cv_shuffle"/>
+      <expand macro="random_state"/>
+    </when>
+    <when value="StratifiedKFold">
+      <expand macro="cv_n_splits"/>
+      <expand macro="cv_shuffle"/>
+      <expand macro="random_state"/>
+    </when>
+    <when value="LeaveOneOut">
+    </when>
+    <when value="LeavePOut">
+      <param argument="p" type="integer" value="" label="p" help="Integer. Size of the test sets."/>
+    </when>
+    <when value="RepeatedKFold">
+      <expand macro="cv_n_splits" value="5"/>
+      <param argument="n_repeats" type="integer" value="10" label="n_repeats" help="Number of times cross-validator needs to be repeated." />
+      <expand macro="random_state" />
+    </when>
+    <when value="RepeatedStratifiedKFold">
+      <expand macro="cv_n_splits" value="5"/>
+      <param argument="n_repeats" type="integer" value="10" label="n_repeats" help="Number of times cross-validator needs to be repeated." />
+      <expand macro="random_state" />
+    </when>
+    <when value="ShuffleSplit">
+      <expand macro="cv_n_splits" value="10" help="Number of re-shuffling and splitting iterations."/>
+      <expand macro="cv_test_size" value="0.1" />
+      <expand macro="random_state"/>
+    </when>
+    <when value="StratifiedShuffleSplit">
+      <expand macro="cv_n_splits" value="10" help="Number of re-shuffling and splitting iterations."/>
+      <expand macro="cv_test_size" value="0.1" />
+      <expand macro="random_state"/>
+    </when>
+    <when value="TimeSeriesSplit">
+      <expand macro="cv_n_splits"/>
+      <param argument="max_train_size" type="integer" value="" optional="true" label="Maximum size of the training set" help="Maximum size for a single training set." />
+    </when>
+    <when value="PredefinedSplit">
+      <param argument="test_fold" type="text" value="" area="true" label="test_fold" help="List, e.g., [0, 1, -1, 1], represents two test sets, [X[0]] and [X[1], X[3]], X[2] is excluded from any test set due to '-1'."/>
+    </when>
+    <when value="OrderedKFold">
+      <expand macro="cv_n_splits"/>
+      <expand macro="cv_shuffle"/>
+      <expand macro="random_state"/>
+    </when>
+    <when value="RepeatedOrderedKFold">
+      <expand macro="cv_n_splits"/>
+      <param argument="n_repeats" type="integer" value="5"/>
+      <expand macro="random_state"/>
+    </when>
+    <yield/>
+  </xml>
+
+  <xml name="cv">
+    <conditional name="cv_selector">
+      <param name="selected_cv" type="select" label="Select the cv splitter:">
+        <expand macro="cv_splitter">
+          <option value="GroupKFold">GroupKFold</option>
+          <option value="GroupShuffleSplit">GroupShuffleSplit</option>
+          <option value="LeaveOneGroupOut">LeaveOneGroupOut</option>
+          <option value="LeavePGroupsOut">LeavePGroupsOut</option>
+        </expand>
+      </param>
+      <expand macro="cv_splitter_options">
+        <when value="GroupKFold">
+          <expand macro="cv_n_splits"/>
+          <expand macro="cv_groups" />
+        </when>
+        <when value="GroupShuffleSplit">
+          <expand macro="cv_n_splits" value="5"/>
+          <expand macro="cv_test_size"/>
+          <expand macro="random_state"/>
+          <expand macro="cv_groups"/>
+        </when>
+        <when value="LeaveOneGroupOut">
+          <expand macro="cv_groups"/>
+        </when>
+        <when value="LeavePGroupsOut">
+          <param argument="n_groups" type="integer" value="" label="n_groups" help="Number of groups (p) to leave out in the test split." />
+          <expand macro="cv_groups"/>
+        </when>
+      </expand>
+    </conditional>
+  </xml>
+
+  <xml name="cv_reduced">
+    <conditional name="cv_selector">
+      <param name="selected_cv" type="select" label="Select the cv splitter:">
+        <expand macro="cv_splitter"/>
+      </param>
+      <expand macro="cv_splitter_options"/>
+    </conditional>
+  </xml>
+
+  <xml name="cv_n_splits" token_value="3" token_help="Number of folds. Must be at least 2.">
+    <param argument="n_splits" type="integer" value="@VALUE@" min="2" label="n_splits" help="@HELP@"/>
+  </xml>
+
+  <xml name="cv_shuffle">
+    <param argument="shuffle" type="boolean" optional="true" truevalue="booltrue" falsevalue="boolfalse" checked="false" label="Whether to shuffle data before splitting" />
+  </xml>
+
+  <xml name="cv_test_size" token_value="0.2">
+    <param argument="test_size" type="float" value="@VALUE@" min="0.0" label="Portion or number of the test set" help="0.0-1.0, proportion of the dataset to include in the test split; >1, integer only, the absolute number of test samples "/>
+  </xml>
+
+  <xml name="cv_groups" >
+    <section name="groups_selector" title="Groups column selector" expanded="true">
+      <param name="infile_g" type="data" format="tabular" label="Choose dataset containing groups info:"/>
+      <param name="header_g" type="boolean" optional="true" truevalue="booltrue" falsevalue="boolfalse" checked="False" label="Does the dataset contain header:" />
+      <conditional name="column_selector_options_g">
+        <expand macro="samples_column_selector_options" column_option="selected_column_selector_option_g" col_name="col_g" multiple="False" infile="infile_g"/>
+      </conditional>
+    </section>
+  </xml>
+
+  <xml name="feature_selection_algorithms">
+    <option value="SelectKBest" selected="true">SelectKBest - Select features according to the k highest scores</option>
+    <option value="GenericUnivariateSelect">GenericUnivariateSelect - Univariate feature selector with configurable strategy</option>
+    <option value="SelectPercentile">SelectPercentile - Select features according to a percentile of the highest scores</option>
+    <option value="SelectFpr">SelectFpr - Filter: Select the p-values below alpha based on a FPR test</option>
+    <option value="SelectFdr">SelectFdr - Filter: Select the p-values for an estimated false discovery rate</option>
+    <option value="SelectFwe">SelectFwe - Filter: Select the p-values corresponding to Family-wise error rate</option>
+    <option value="VarianceThreshold">VarianceThreshold - Feature selector that removes all low-variance features</option>
+    <option value="SelectFromModel">SelectFromModel - Meta-transformer for selecting features based on importance weights</option>
+    <option value="RFE">RFE - Feature ranking with recursive feature elimination</option>
+    <option value="RFECV">RFECV - Feature ranking with recursive feature elimination and cross-validated selection of the best number of features</option>
+    <yield/>
+  </xml>
+
+  <xml name="feature_selection_algorithm_details">
+    <when value="GenericUnivariateSelect">
+      <expand macro="feature_selection_score_function" />
+      <section name="options" title="Advanced Options" expanded="False">
+        <param argument="mode" type="select" label="Feature selection mode">
+          <option value="percentile">percentile</option>
+          <option value="k_best">k_best</option>
+          <option value="fpr">fpr</option>
+          <option value="fdr">fdr</option>
+          <option value="fwe">fwe</option>
+        </param>
+        <param argument="param" type="float" value="" optional="true" label="Parameter of the corresponding mode" help="float or int depending on the feature selection mode" />
+      </section>
+    </when>
+    <when value="SelectPercentile">
+      <expand macro="feature_selection_score_function" />
+      <section name="options" title="Advanced Options" expanded="False">
+        <param argument="percentile" type="integer" value="10" optional="True" label="Percent of features to keep" />
+      </section>
+    </when>
+    <when value="SelectKBest">
+      <expand macro="feature_selection_score_function" />
+      <section name="options" title="Advanced Options" expanded="False">
+        <param argument="k" type="integer" value="10" optional="True" label="Number of top features to select" help="No 'all' option is supported." />
+      </section>
+    </when>
+    <when value="SelectFpr">
+      <expand macro="feature_selection_score_function" />
+      <section name="options" title="Advanced Options" expanded="False">
+        <param argument="alpha" type="float" value="" optional="True" label="Alpha" help="The highest p-value for features to be kept."/>
+      </section>
+    </when>
+    <when value="SelectFdr">
+      <expand macro="feature_selection_score_function" />
+      <section name="options" title="Advanced Options" expanded="False">
+        <param argument="alpha" type="float" value="" optional="True" label="Alpha" help="The highest uncorrected p-value for features to keep."/>
+      </section>
+    </when>
+    <when value="SelectFwe">
+      <expand macro="feature_selection_score_function" />
+      <section name="options" title="Advanced Options" expanded="False">
+        <param argument="alpha" type="float" value="" optional="True" label="Alpha" help="The highest uncorrected p-value for features to keep."/>
+      </section>
+    </when>
+    <when value="VarianceThreshold">
+      <section name="options" title="Options" expanded="False">
+        <param argument="threshold" type="float" value="0.0" optional="True" label="Threshold" help="Features with a training-set variance lower than this threshold will be removed."/>
+      </section>
+    </when>
+  </xml>
+
+  <xml name="feature_selection_SelectFromModel">
+    <when value="SelectFromModel">
+      <conditional name="model_inputter">
+        <param name="input_mode" type="select" label="Construct a new estimator from a selection list?" >
+          <option value="new" selected="true">Yes</option>
+          <option value="prefitted">No. Load a prefitted estimator</option>
+        </param>
+        <when value="new">
+          <expand macro="estimator_selector_fs"/>
+        </when>
+        <when value="prefitted">
+          <param name="fitted_estimator" type="data" format='zip' label="Load a prefitted estimator" />
+        </when>
+      </conditional>
+      <expand macro="feature_selection_SelectFromModel_options"/>
+    </when>
+  </xml>
+
+  <xml name="feature_selection_SelectFromModel_no_prefitted">
+    <when value="SelectFromModel">
+      <conditional name="model_inputter">
+        <param name="input_mode" type="select" label="Construct a new estimator from a selection list?" >
+          <option value="new" selected="true">Yes</option>
+        </param>
+        <when value="new">
+          <expand macro="estimator_selector_all"/>
+        </when>
+      </conditional>
+      <expand macro="feature_selection_SelectFromModel_options"/>
+    </when>
+  </xml>
+
+  <xml name="feature_selection_SelectFromModel_options">
+    <section name="options" title="Advanced Options" expanded="False">
+      <param argument="threshold" type="text" value="" optional="true" label="threshold" help="The threshold value to use for feature selection. e.g. 'mean', 'median', '1.25*mean'." />
+      <param argument="norm_order" type="integer" value="1" label="norm_order" help="Order of the norm used to filter the vectors of coefficients below threshold in the case where the coef_ attribute of the estimator is of dimension 2. " />
+      <param argument="max_features" type="integer" value="" optional="true" label="The maximum number of features selected scoring above threshold" help="To disable threshold and only select based on max_features, set threshold=-np.inf."/>
+    </section>
+  </xml>
+
+  <xml name="feature_selection_RFE">
+    <when value="RFE">
+      <yield/>
+      <section name="options" title="Advanced Options" expanded="False">
+        <param argument="n_features_to_select" type="integer" value="" optional="true" label="n_features_to_select" help="The number of features to select. If None, half of the features are selected." />
+        <param argument="step" type="float" value="1" label="step" optional="true" help="Default = 1. " />
+        <param argument="verbose" type="integer" value="0" label="verbose" help="Controls verbosity of output." />
+      </section>
+    </when>
+  </xml>
+
+  <xml name="feature_selection_RFECV_fs">
+    <when value="RFECV">
+      <yield/>
+      <section name="options" title="Advanced Options" expanded="False">
+        <param argument="step" type="float" value="1" label="step" optional="true" help="Default = 1. " />
+        <param argument="min_features_to_select" type="integer" value="1" optional="true" label="The minimum number of features to be selected"/>
+        <expand macro="cv"/>
+        <expand macro="scoring_selection"/>
+        <param argument="verbose" type="integer" value="0" label="verbose" help="Controls verbosity of output." />
+      </section>
+    </when>
+  </xml>
+
+  <xml name="feature_selection_RFECV_pipeline">
+    <when value="RFECV">
+      <yield/>
+      <section name="options" title="Advanced Options" expanded="False">
+        <param argument="step" type="float" value="1" label="step" optional="true" help="Default = 1. " />
+        <param argument="min_features_to_select" type="integer" value="1" optional="true" label="The minimum number of features to be selected"/>
+        <expand macro="cv_reduced"/>
+        <!-- TODO: group splitter support-->
+        <expand macro="scoring_selection"/>
+        <param argument="verbose" type="integer" value="0" label="verbose" help="Controls verbosity of output." />
+      </section>
+    </when>
+  </xml>
+
+  <xml name="feature_selection_DyRFECV_fs">
+    <when value="DyRFECV">
+      <yield/>
+      <section name="options" title="Advanced Options" expanded="False">
+        <param argument="step" type="text" size="30" value="1" label="step" optional="true" help="Default = 1. Support float, int and list." >
+          <sanitizer>
+            <valid initial="default">
+              <add value="["/>
+              <add value="]"/>
+            </valid>
+          </sanitizer>
+        </param>
+        <param argument="min_features_to_select" type="integer" value="1" optional="true" label="The minimum number of features to be selected"/>
+        <expand macro="cv"/>
+        <expand macro="scoring_selection"/>
+        <param argument="verbose" type="integer" value="0" label="verbose" help="Controls verbosity of output." />
+      </section>
+    </when>
+  </xml>
+
+  <xml name="feature_selection_pipeline">
+    <!--compare to `feature_selection_fs`, no fitted estimator for SelectFromModel and no custom estimator for RFE and RFECV-->
+    <conditional name="fs_algorithm_selector">
+      <param name="selected_algorithm" type="select" label="Select a feature selection algorithm">
+        <expand macro="feature_selection_algorithms"/>
+      </param>
+      <expand macro="feature_selection_algorithm_details"/>
+      <expand macro="feature_selection_SelectFromModel_no_prefitted"/>
+      <expand macro="feature_selection_RFE">
+        <expand macro="estimator_selector_all"/>
+      </expand>  
+      <expand macro="feature_selection_RFECV_pipeline">
+        <expand macro="estimator_selector_all"/>
+      </expand>
+      <!-- TODO: add DyRFECV to pipeline-->
+    </conditional>
+  </xml>
+
+  <xml name="feature_selection_fs">
+    <conditional name="fs_algorithm_selector">
+      <param name="selected_algorithm" type="select" label="Select a feature selection algorithm">
+        <expand macro="feature_selection_algorithms">
+          <option value="DyRFECV">DyRFECV - Extended RFECV with changeable steps</option>
+        </expand>
+      </param>
+      <expand macro="feature_selection_algorithm_details"/>
+      <expand macro="feature_selection_SelectFromModel"/>
+      <expand macro="feature_selection_RFE">
+        <expand macro="estimator_selector_fs"/>
+      </expand>  
+      <expand macro="feature_selection_RFECV_fs">
+        <expand macro="estimator_selector_fs"/>
+      </expand>
+      <expand macro="feature_selection_DyRFECV_fs">
+        <expand macro="estimator_selector_fs"/>
+      </expand>
+    </conditional>
+  </xml>
+
+  <xml name="feature_selection_score_function">
+    <param argument="score_func" type="select" label="Select a score function">
+      <option value="chi2">chi2 - Compute chi-squared stats between each non-negative feature and class</option>
+      <option value="f_classif">f_classif - Compute the ANOVA F-value for the provided sample</option>
+      <option value="f_regression">f_regression - Univariate linear regression tests</option>
+      <option value="mutual_info_classif">mutual_info_classif - Estimate mutual information for a discrete target variable</option>
+      <option value="mutual_info_regression">mutual_info_regression - Estimate mutual information for a continuous target variable</option>
+    </param>
+  </xml>
+
+  <xml name="model_validation_common_options">
+    <expand macro="cv"/>
+    <!-- expand macro="verbose"/> -->
+    <yield/>
+  </xml>
+
+  <xml name="scoring_selection">
+    <conditional name="scoring">
+      <param name="primary_scoring" type="select" multiple="false" label="Select the primary metric (scoring):" help="Metric to refit the best estimator.">
+        <option value="default" selected="true">default with estimator</option>
+        <option value="accuracy">Classification -- 'accuracy'</option>
+        <option value="balanced_accuracy">Classification -- 'balanced_accuracy'</option>
+        <option value="average_precision">Classification -- 'average_precision'</option>
+        <option value="f1">Classification -- 'f1'</option>
+        <option value="f1_micro">Classification -- 'f1_micro'</option>
+        <option value="f1_macro">Classification -- 'f1_macro'</option>
+        <option value="f1_weighted">Classification -- 'f1_weighted'</option>
+        <option value="f1_samples">Classification -- 'f1_samples'</option>
+        <option value="neg_log_loss">Classification -- 'neg_log_loss'</option>
+        <option value="precision">Classification -- 'precision'</option>
+        <option value="precision_micro">Classification -- 'precision_micro'</option>
+        <option value="precision_macro">Classification -- 'precision_macro'</option>
+        <option value="precision_wighted">Classification -- 'precision_wighted'</option>
+        <option value="precision_samples">Classification -- 'precision_samples'</option>
+        <option value="recall">Classification -- 'recall'</option>
+        <option value="recall_micro">Classification -- 'recall_micro'</option>
+        <option value="recall_macro">Classification -- 'recall_macro'</option>
+        <option value="recall_wighted">Classification -- 'recall_wighted'</option>
+        <option value="recall_samples">Classification -- 'recall_samples'</option>
+        <option value="roc_auc">Classification -- 'roc_auc'</option>
+        <option value="explained_variance">Regression -- 'explained_variance'</option>
+        <option value="neg_mean_absolute_error">Regression -- 'neg_mean_absolute_error'</option>
+        <option value="neg_mean_squared_error">Regression -- 'neg_mean_squared_error'</option>
+        <option value="neg_mean_squared_log_error">Regression -- 'neg_mean_squared_log_error'</option>
+        <option value="neg_median_absolute_error">Regression -- 'neg_median_absolute_error'</option>
+        <option value="r2">Regression -- 'r2'</option>
+        <option value="binarize_auc_scorer">anomaly detection -- binarize_auc_scorer</option>
+        <option value="binarize_average_precision_scorer">anomaly detection -- binarize_average_precision_scorer</option>
+      </param>
+      <when value="default"/>
+      <when value="accuracy"><expand macro="secondary_scoring_selection_classification"/></when>
+      <when value="balanced_accuracy"><expand macro="secondary_scoring_selection_classification"/></when>
+      <when value="average_precision"><expand macro="secondary_scoring_selection_classification"/></when>
+      <when value="f1"><expand macro="secondary_scoring_selection_classification"/></when>
+      <when value="f1_micro"><expand macro="secondary_scoring_selection_classification"/></when>
+      <when value="f1_macro"><expand macro="secondary_scoring_selection_classification"/></when>
+      <when value="f1_weighted"><expand macro="secondary_scoring_selection_classification"/></when>
+      <when value="f1_samples"><expand macro="secondary_scoring_selection_classification"/></when>
+      <when value="neg_log_loss"><expand macro="secondary_scoring_selection_classification"/></when>
+      <when value="precision"><expand macro="secondary_scoring_selection_classification"/></when>
+      <when value="precision_micro"><expand macro="secondary_scoring_selection_classification"/></when>
+      <when value="precision_macro"><expand macro="secondary_scoring_selection_classification"/></when>
+      <when value="precision_wighted"><expand macro="secondary_scoring_selection_classification"/></when>
+      <when value="precision_samples"><expand macro="secondary_scoring_selection_classification"/></when>
+      <when value="recall"><expand macro="secondary_scoring_selection_classification"/></when>
+      <when value="recall_micro"><expand macro="secondary_scoring_selection_classification"/></when>
+      <when value="recall_macro"><expand macro="secondary_scoring_selection_classification"/></when>
+      <when value="recall_wighted"><expand macro="secondary_scoring_selection_classification"/></when>
+      <when value="recall_samples"><expand macro="secondary_scoring_selection_classification"/></when>
+      <when value="roc_auc"><expand macro="secondary_scoring_selection_classification"/></when>
+      <when value="explained_variance"><expand macro="secondary_scoring_selection_regression"/></when>
+      <when value="neg_mean_absolute_error"><expand macro="secondary_scoring_selection_regression"/></when>
+      <when value="neg_mean_squared_error"><expand macro="secondary_scoring_selection_regression"/></when>
+      <when value="neg_mean_squared_log_error"><expand macro="secondary_scoring_selection_regression"/></when>
+      <when value="neg_median_absolute_error"><expand macro="secondary_scoring_selection_regression"/></when>
+      <when value="r2"><expand macro="secondary_scoring_selection_regression"/></when>
+      <when value="binarize_auc_scorer"><expand macro="secondary_scoring_selection_anormaly"/></when>
+      <when value="binarize_average_precision_scorer"><expand macro="secondary_scoring_selection_anormaly"/></when>
+    </conditional>
+  </xml>
+
+  <xml name="secondary_scoring_selection_classification">
+    <param name="secondary_scoring" type="select" multiple="true" label="Additional scoring used in multi-metric mode:" help="If the same metric with the primary is chosen, the metric will be ignored.">
+      <option value="accuracy">Classification -- 'accuracy'</option>
+      <option value="balanced_accuracy">Classification -- 'balanced_accuracy'</option>
+      <option value="average_precision">Classification -- 'average_precision'</option>
+      <option value="f1">Classification -- 'f1'</option>
+      <option value="f1_micro">Classification -- 'f1_micro'</option>
+      <option value="f1_macro">Classification -- 'f1_macro'</option>
+      <option value="f1_weighted">Classification -- 'f1_weighted'</option>
+      <option value="f1_samples">Classification -- 'f1_samples'</option>
+      <option value="neg_log_loss">Classification -- 'neg_log_loss'</option>
+      <option value="precision">Classification -- 'precision'</option>
+      <option value="precision_micro">Classification -- 'precision_micro'</option>
+      <option value="precision_macro">Classification -- 'precision_macro'</option>
+      <option value="precision_wighted">Classification -- 'precision_wighted'</option>
+      <option value="precision_samples">Classification -- 'precision_samples'</option>
+      <option value="recall">Classification -- 'recall'</option>
+      <option value="recall_micro">Classification -- 'recall_micro'</option>
+      <option value="recall_macro">Classification -- 'recall_macro'</option>
+      <option value="recall_wighted">Classification -- 'recall_wighted'</option>
+      <option value="recall_samples">Classification -- 'recall_samples'</option>
+      <option value="roc_auc">Classification -- 'roc_auc'</option>
+    </param>
+  </xml>
+
+  <xml name="secondary_scoring_selection_regression">
+    <param name="secondary_scoring" type="select" multiple="true" label="Additional scoring used in multi-metric mode:" help="If the same metric with the primary is chosen, the metric will be ignored.">
+      <option value="explained_variance">Regression -- 'explained_variance'</option>
+      <option value="neg_mean_absolute_error">Regression -- 'neg_mean_absolute_error'</option>
+      <option value="neg_mean_squared_error">Regression -- 'neg_mean_squared_error'</option>
+      <option value="neg_mean_squared_log_error">Regression -- 'neg_mean_squared_log_error'</option>
+      <option value="neg_median_absolute_error">Regression -- 'neg_median_absolute_error'</option>
+      <option value="r2">Regression -- 'r2'</option>
+    </param>
+  </xml>
+
+  <xml name="secondary_scoring_selection_anormaly">
+    <param name="secondary_scoring" type="select" multiple="true" label="Additional scoring used in multi-metric mode:" help="If the same metric with the primary is chosen, the metric will be ignored.">
+      <option value="binarize_auc_scorer">anomaly detection -- binarize_auc_scorer</option>
+      <option value="binarize_average_precision_scorer">anomaly detection -- binarize_average_precision_scorer</option>
+    </param>
+  </xml>
+
+  <xml name="pre_dispatch" token_type="hidden" token_default_value="all" token_help="Number of predispatched jobs for parallel execution">
+    <param argument="pre_dispatch" type="@TYPE@" value="@DEFAULT_VALUE@" optional="true" label="pre_dispatch" help="@HELP@"/>
+  </xml>
+
+  <xml name="search_cv_estimator">
+    <param name="infile_estimator" type="data" format="zip" label="Choose the dataset containing pipeline/estimator object"/>
+    <section name="search_params_builder" title="Search parameters Builder" expanded="true">
+      <param name="infile_params" type="data" format="tabular" label="Choose the dataset containing parameter names"/>
+      <repeat name="param_set" min="1" max="30" title="Parameter settings for search:">
+          <param name="sp_name" type="select" label="Choose a parameter name (with current value)">
+            <options from_dataset="infile_params" startswith="@">
+              <column name="name" index="2"/>
+              <column name="value" index="1"/>
+              <filter type="unique_value" name="unique_param" column="1"/>
+              <filter type="sort_by" name="sorted_param" column="2"/>
+            </options>
+          </param>
+          <param name="sp_list" type="text" value="" optional="true" label="Search list" help="list or array-like, for example: [1, 10, 100, 1000], [True, False] and ['auto', 'sqrt', None]. See `help` section for more examples">
+            <sanitizer>
+              <valid initial="default">
+                <add value="&apos;"/>
+                <add value="&quot;"/>
+                <add value="["/>
+                <add value="]"/>
+              </valid>
+            </sanitizer>
+          </param>
+      </repeat>
+    </section>
+  </xml>
+
+  <xml name="search_cv_options">
+      <expand macro="scoring_selection"/>
+      <expand macro="model_validation_common_options"/>
+      <!--expand macro="pre_dispatch" default_value="2*n_jobs" help="Controls the number of jobs that get dispatched during parallel execution"/-->
+      <param argument="iid" type="boolean" truevalue="booltrue" falsevalue="boolfalse" checked="true" label="iid" help="If True, data is identically distributed across the folds"/>
+      <param argument="refit" type="boolean" truevalue="booltrue" falsevalue="boolfalse" checked="true" label="refit" help="Refit an estimator using the best found parameters on the whole dataset."/>
+      <param argument="error_score" type="boolean" truevalue="booltrue" falsevalue="boolfalse" checked="true" label="Raise fit error:" help="If false, the metric score is assigned to NaN if an error occurs in estimator fitting and FitFailedWarning is raised."/>
+      <param argument="return_train_score" type="boolean" truevalue="booltrue" falsevalue="boolfalse" checked="false" label="return_train_score" help=""/>
+  </xml>
+
+  <xml name="estimator_module_options">
+      <option value="svm" selected="true">sklearn.svm</option>
+      <option value="linear_model">sklearn.linear_model</option>
+      <option value="ensemble">sklearn.ensemble</option>
+      <option value="naive_bayes">sklearn.naive_bayes</option>
+      <option value="tree">sklearn.tree</option>
+      <option value="neighbors">sklearn.neighbors</option>
+      <option value="xgboost">xgboost</option>
+      <yield/>
+  </xml>
+
+  <xml name="estimator_suboptions">
+      <when value="svm">
+        <param name="selected_estimator" type="select" label="Choose estimator class:">
+          <option value="LinearSVC" selected="true">LinearSVC</option>
+          <option value="LinearSVR">LinearSVR</option>
+          <option value="NuSVC">NuSVC</option>
+          <option value="NuSVR">NuSVR</option>
+          <option value="OneClassSVM">OneClassSVM</option>
+          <option value="SVC">SVC</option>
+          <option value="SVR">SVR</option>
+        </param>
+        <expand macro="estimator_params_text"/>
+      </when>
+      <when value="linear_model">
+        <param name="selected_estimator" type="select" label="Choose estimator class:">
+          <option value="ARDRegression" selected="true">ARDRegression</option>
+          <option value="BayesianRidge">BayesianRidge</option>
+          <option value="ElasticNet">ElasticNet</option>
+          <option value="ElasticNetCV">ElasticNetCV</option>
+          <option value="HuberRegressor">HuberRegressor</option>
+          <option value="Lars">Lars</option>
+          <option value="LarsCV">LarsCV</option>
+          <option value="Lasso">Lasso</option>
+          <option value="LassoCV">LassoCV</option>
+          <option value="LassoLars">LassoLars</option>
+          <option value="LassoLarsCV">LassoLarsCV</option>
+          <option value="LassoLarsIC">LassoLarsIC</option>
+          <option value="LinearRegression">LinearRegression</option>
+          <option value="LogisticRegression">LogisticRegression</option>
+          <option value="LogisticRegressionCV">LogisticRegressionCV</option>
+          <option value="MultiTaskLasso">MultiTaskLasso</option>
+          <option value="MultiTaskElasticNet">MultiTaskElasticNet</option>
+          <option value="MultiTaskLassoCV">MultiTaskLassoCV</option>
+          <option value="MultiTaskElasticNetCV">MultiTaskElasticNetCV</option>
+          <option value="OrthogonalMatchingPursuit">OrthogonalMatchingPursuit</option>
+          <option value="OrthogonalMatchingPursuitCV">OrthogonalMatchingPursuitCV</option>
+          <option value="PassiveAggressiveClassifier">PassiveAggressiveClassifier</option>
+          <option value="PassiveAggressiveRegressor">PassiveAggressiveRegressor</option>
+          <option value="Perceptron">Perceptron</option>
+          <option value="RANSACRegressor">RANSACRegressor</option>
+          <option value="Ridge">Ridge</option>
+          <option value="RidgeClassifier">RidgeClassifier</option>
+          <option value="RidgeClassifierCV">RidgeClassifierCV</option>
+          <option value="RidgeCV">RidgeCV</option>
+          <option value="SGDClassifier">SGDClassifier</option>
+          <option value="SGDRegressor">SGDRegressor</option>
+          <option value="TheilSenRegressor">TheilSenRegressor</option>
+        </param>
+        <expand macro="estimator_params_text"/>
+      </when>
+      <when value="ensemble">
+        <param name="selected_estimator" type="select" label="Choose estimator class:">
+          <option value="AdaBoostClassifier" selected="true">AdaBoostClassifier</option>
+          <option value="AdaBoostRegressor">AdaBoostRegressor</option>
+          <option value="BaggingClassifier">BaggingClassifier</option>
+          <option value="BaggingRegressor">BaggingRegressor</option>
+          <option value="ExtraTreesClassifier">ExtraTreesClassifier</option>
+          <option value="ExtraTreesRegressor">ExtraTreesRegressor</option>
+          <option value="GradientBoostingClassifier">GradientBoostingClassifier</option>
+          <option value="GradientBoostingRegressor">GradientBoostingRegressor</option>
+          <option value="IsolationForest">IsolationForest</option>
+          <option value="RandomForestClassifier">RandomForestClassifier</option>
+          <option value="RandomForestRegressor">RandomForestRegressor</option>
+          <option value="RandomTreesEmbedding">RandomTreesEmbedding</option>
+          <!--option value="VotingClassifier">VotingClassifier</option-->
+        </param>
+        <expand macro="estimator_params_text"/>
+      </when>
+      <when value="naive_bayes">
+        <param name="selected_estimator" type="select" label="Choose estimator class:">
+          <option value="BernoulliNB" selected="true">BernoulliNB</option>
+          <option value="GaussianNB">GaussianNB</option>
+          <option value="MultinomialNB">MultinomialNB</option>
+        </param>
+        <expand macro="estimator_params_text"/>
+      </when>
+      <when value="tree">
+        <param name="selected_estimator" type="select" label="Choose estimator class:">
+          <option value="DecisionTreeClassifier" selected="true">DecisionTreeClassifier</option>
+          <option value="DecisionTreeRegressor">DecisionTreeRegressor</option>
+          <option value="ExtraTreeClassifier">ExtraTreeClassifier</option>
+          <option value="ExtraTreeRegressor">ExtraTreeRegressor</option>
+        </param>
+        <expand macro="estimator_params_text"/>
+      </when>
+      <when value="neighbors">
+        <param name="selected_estimator" type="select" label="Choose estimator class:">
+          <option value="KNeighborsClassifier" selected="true">KNeighborsClassifier</option>
+          <option value="KNeighborsRegressor">KNeighborsRegressor</option>
+          <!--option value="BallTree">BallTree</option-->
+          <!--option value="KDTree">KDTree</option-->
+          <option value="KernelDensity">KernelDensity</option>
+          <option value="LocalOutlierFactor">LocalOutlierFactor</option>
+          <option value="RadiusNeighborsClassifier">RadiusNeighborsClassifier</option>
+          <option value="RadiusNeighborsRegressor">RadiusNeighborsRegressor</option>
+          <option value="NearestCentroid">NearestCentroid</option>
+          <option value="NearestNeighbors">NearestNeighbors</option>
+        </param>
+        <expand macro="estimator_params_text"/>
+      </when>
+      <when value="xgboost">
+        <param name="selected_estimator" type="select" label="Choose estimator class:">
+          <option value="XGBRegressor" selected="true">XGBRegressor</option>
+          <option value="XGBClassifier">XGBClassifier</option>
+        </param>
+        <expand macro="estimator_params_text"/>
+      </when>
+      <yield/>
+  </xml>
+
+  <xml name="estimator_selector_all">
+    <conditional name="estimator_selector">
+      <param name="selected_module" type="select" label="Choose the module that contains target estimator:" >
+        <expand macro="estimator_module_options"/>
+      </param>
+      <expand macro="estimator_suboptions"/>
+    </conditional>
+  </xml>
+
+  <xml name="estimator_selector_fs">
+    <conditional name="estimator_selector">
+      <param name="selected_module" type="select" label="Choose the module that contains target estimator:" >
+        <expand macro="estimator_module_options">
+            <option value="custom_estimator">Load a custom estimator</option>
+        </expand>
+      </param>
+      <expand macro="estimator_suboptions">
+        <when value="custom_estimator">
+            <param name="c_estimator" type="data" format="zip" label="Choose the dataset containing the custom estimator or pipeline:"/>
+        </when>
+      </expand>
+    </conditional>
+  </xml>
+
+  <xml name="estimator_params_text" token_label="Type in parameter settings if different from default:" token_default_value=''
+        token_help="Dictionary-capable, e.g., C=1, kernel='linear'. No double quotes. Leave this box blank for default estimator.">
+    <param name="text_params" type="text" value="@DEFAULT_VALUE@" optional="true" label="@LABEL@" help="@HELP@">
+      <sanitizer>
+        <valid initial="default">
+          <add value="&apos;"/>
+        </valid>
+      </sanitizer>
+    </param>
+  </xml>
+
+  <xml name="kernel_approximation_all">
+    <conditional name="kernel_approximation_selector">
+      <param name="select_algorithm" type="select" label="Choose a kernel approximation algorithm:">
+        <option value="Nystroem" selected="true">Nystroem</option>
+        <option value="RBFSampler">RBFSampler</option>
+        <option value="AdditiveChi2Sampler">AdditiveChi2Sampler</option>
+        <option value="SkewedChi2Sampler">SkewedChi2Sampler</option>
+      </param>
+      <when value="Nystroem">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): coef0=None, degree=None, gamma=None, kernel='rbf', kernel_params=None, n_components=100, random_state=None. No double quotes"/>
+      </when>
+      <when value="RBFSampler">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): gamma=1.0, n_components=100, random_state=None."/>
+      </when>
+      <when value="AdditiveChi2Sampler">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): sample_interval=None, sample_steps=2."/>
+      </when>
+      <when value="SkewedChi2Sampler">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): n_components=100, random_state=None, skewedness=1.0."/>
+      </when>
+    </conditional>
+  </xml>
+
+  <xml name="matrix_decomposition_all">
+    <conditional name="matrix_decomposition_selector">
+      <param name="select_algorithm" type="select" label="Choose a matrix decomposition algorithm:">
+        <option value="DictionaryLearning" selected="true">DictionaryLearning</option>
+        <option value="FactorAnalysis">FactorAnalysis</option>
+        <option value="FastICA">FastICA</option>
+        <option value="IncrementalPCA">IncrementalPCA</option>
+        <option value="KernelPCA">KernelPCA</option>
+        <option value="LatentDirichletAllocation">LatentDirichletAllocation</option>
+        <option value="MiniBatchDictionaryLearning">MiniBatchDictionaryLearning</option>
+        <option value="MiniBatchSparsePCA">MiniBatchSparsePCA</option>
+        <option value="NMF">NMF</option>
+        <option value="PCA">PCA</option>
+        <option value="SparsePCA">SparsePCA</option>
+        <!--option value="SparseCoder">SparseCoder</option-->
+        <option value="TruncatedSVD">TruncatedSVD</option>
+      </param>
+      <when value="DictionaryLearning">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): alpha=1, code_init=None, dict_init=None, fit_algorithm='lars', max_iter=1000, n_components=None, random_state=None, split_sign=False, tol=1e-08, transform_algorithm='omp', transform_alpha=None, transform_n_nonzero_coefs=None, verbose=False."/>
+      </when>
+      <when value="FactorAnalysis">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): copy=True, iterated_power=3, max_iter=1000, n_components=None, noise_variance_init=None, random_state=0, svd_method='randomized', tol=0.01."/>
+      </when>
+      <when value="FastICA">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): algorithm='parallel', fun='logcosh', fun_args=None, max_iter=200, n_components=None, random_state=None, tol=0.0001, w_init=None, whiten=True. No double quotes."/>
+      </when>
+      <when value="IncrementalPCA">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): batch_size=None, copy=True, n_components=None, whiten=False."/>
+      </when>
+      <when value="KernelPCA">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): alpha=1.0, coef0=1, copy_X=True, degree=3, eigen_solver='auto', fit_inverse_transform=False, gamma=None, kernel='linear', kernel_params=None, max_iter=None, n_components=None, random_state=None, remove_zero_eig=False, tol=0. No double quotes."/>
+      </when>
+      <when value="LatentDirichletAllocation">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): batch_size=128, doc_topic_prior=None, evaluate_every=-1, learning_decay=0.7, learning_method=None, learning_offset=10.0, max_doc_update_iter=100, max_iter=10, mean_change_tol=0.001, n_components=10, n_topics=None, perp_tol=0.1, random_state=None, topic_word_prior=None, total_samples=1000000.0, verbose=0."/>
+      </when>
+      <when value="MiniBatchDictionaryLearning">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): alpha=1, batch_size=3, dict_init=None, fit_algorithm='lars', n_components=None, n_iter=1000, random_state=None, shuffle=True, split_sign=False, transform_algorithm='omp', transform_alpha=None, transform_n_nonzero_coefs=None, verbose=False."/>
+      </when>
+      <when value="MiniBatchSparsePCA">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): alpha=1, batch_size=3, callback=None, method='lars', n_components=None, n_iter=100, random_state=None, ridge_alpha=0.01, shuffle=True, verbose=False."/>
+      </when>
+      <when value="NMF">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): alpha=0.0, beta_loss='frobenius', init=None, l1_ratio=0.0, max_iter=200, n_components=None, random_state=None, shuffle=False, solver='cd', tol=0.0001, verbose=0."/>
+      </when>
+      <when value="PCA">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): copy=True, iterated_power='auto', n_components=None, random_state=None, svd_solver='auto', tol=0.0, whiten=False."/>
+      </when>
+      <when value="SparsePCA">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): U_init=None, V_init=None, alpha=1, max_iter=1000, method='lars', n_components=None, random_state=None, ridge_alpha=0.01, tol=1e-08, verbose=False."/>
+      </when>
+      <when value="TruncatedSVD">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): algorithm='randomized', n_components=2, n_iter=5, random_state=None, tol=0.0."/>
+      </when>
+    </conditional>
+  </xml>
+
+  <xml name="FeatureAgglomeration">
+    <conditional name="FeatureAgglomeration_selector">
+      <param name="select_algorithm" type="select" label="Choose the algorithm:">
+        <option value="FeatureAgglomeration" selected="true">FeatureAgglomeration</option>
+      </param>
+      <when value="FeatureAgglomeration">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): affinity='euclidean', compute_full_tree='auto', connectivity=None, linkage='ward', memory=None, n_clusters=2, pooling_func=np.mean."/>
+      </when>
+    </conditional>
+  </xml>
+
+  <xml name="skrebate">
+    <conditional name="skrebate_selector">
+      <param name="select_algorithm" type="select" label="Choose the algorithm:">
+        <option value="ReliefF">ReliefF</option>
+        <option value="SURF">SURF</option>
+        <option value="SURFstar">SURFstar</option>
+        <option value="MultiSURF">MultiSURF</option>
+        <option value="MultiSURFstar">MultiSURFstar</option>
+        <!--option value="TuRF">TuRF</option> -->
+      </param>
+      <when value="ReliefF">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): discrete_threshold=10, n_features_to_select=10, n_neighbors=100, verbose=False."/>
+      </when>
+      <when value="SURF">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): discrete_threshold=10, n_features_to_select=10, verbose=False."/>
+      </when>
+      <when value="SURFstar">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): discrete_threshold=10, n_features_to_select=10, verbose=False."/>
+      </when>
+      <when value="MultiSURF">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): discrete_threshold=10, n_features_to_select=10, verbose=False."/>
+      </when>
+      <when value="MultiSURFstar">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): discrete_threshold=10, n_features_to_select=10, verbose=False."/>
+      </when>
+      <!--when value="TuRF">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): core_algorithm='ReliefF', discrete_threshold=10, n_features_to_select=10, n_neighbors=100, pct=0.5, verbose=False."/>
+      </when> -->
+    </conditional>
+  </xml>
+
+  <xml name="imbalanced_learn_sampling">
+    <conditional name="imblearn_selector">
+      <param name="select_algorithm" type="select" label="Choose the algorithm:">
+        <option value="under_sampling.ClusterCentroids" selected="true">under_sampling.ClusterCentroids</option>
+        <option value="under_sampling.CondensedNearestNeighbour">under_sampling.CondensedNearestNeighbour</option>
+        <option value="under_sampling.EditedNearestNeighbours">under_sampling.EditedNearestNeighbours</option>
+        <option value="under_sampling.RepeatedEditedNearestNeighbours">under_sampling.RepeatedEditedNearestNeighbours</option>
+        <option value="under_sampling.AllKNN">under_sampling.AllKNN</option>
+        <option value="under_sampling.InstanceHardnessThreshold">under_sampling.InstanceHardnessThreshold</option>
+        <option value="under_sampling.NearMiss">under_sampling.NearMiss</option>
+        <option value="under_sampling.NeighbourhoodCleaningRule">under_sampling.NeighbourhoodCleaningRule</option>
+        <option value="under_sampling.OneSidedSelection">under_sampling.OneSidedSelection</option>
+        <option value="under_sampling.RandomUnderSampler">under_sampling.RandomUnderSampler</option>
+        <option value="under_sampling.TomekLinks">under_sampling.TomekLinks</option>
+        <option value="over_sampling.ADASYN">over_sampling.ADASYN</option>
+        <option value="over_sampling.RandomOverSampler">over_sampling.RandomOverSampler</option>
+        <option value="over_sampling.SMOTE">over_sampling.SMOTE</option>
+        <option value="over_sampling.SVMSMOTE">over_sampling.SVMSMOTE</option>
+        <option value="over_sampling.BorderlineSMOTE">over_sampling.BorderlineSMOTE</option>
+        <option value="over_sampling.SMOTENC">over_sampling.SMOTENC</option>
+        <option value="combine.SMOTEENN">combine.SMOTEENN</option>
+        <option value="combine.SMOTETomek">combine.SMOTETomek</option>
+        <option value="Z_RandomOverSampler">Z_RandomOverSampler - for regression</option>
+      </param>
+      <when value="under_sampling.ClusterCentroids">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): sampling_strategy='auto', random_state=None, estimator=None, voting='auto'."/>
+      </when>
+      <when value="under_sampling.CondensedNearestNeighbour">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): sampling_strategy='auto', random_state=None, n_neighbors=None, n_seeds_S=1."/>
+      </when>
+      <when value="under_sampling.EditedNearestNeighbours">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): sampling_strategy='auto', random_state=None, n_neighbors=3, max_iter=100, kind_sel='all'."/>
+      </when>
+      <when value="under_sampling.RepeatedEditedNearestNeighbours">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): sampling_strategy='auto', random_state=None, n_neighbors=3, max_iter=100, kind_sel='all'."/>
+      </when>
+      <when value="under_sampling.AllKNN">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): sampling_strategy='auto', random_state=None, n_neighbors=3, kind_sel='all', allow_minority=False."/>
+      </when>
+      <when value="under_sampling.InstanceHardnessThreshold">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): estimator=None, sampling_strategy='auto', random_state=None, cv=5."/>
+      </when>
+      <when value="under_sampling.NearMiss">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): sampling_strategy='auto', random_state=None, version=1, n_neighbors=3, n_neighbors_ver3=3."/>
+      </when>
+      <when value="under_sampling.NeighbourhoodCleaningRule">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): sampling_strategy='auto', random_state=None, n_neighbors=3, kind_sel='all', threshold_cleaning=0.5."/>
+      </when>
+      <when value="under_sampling.OneSidedSelection">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): sampling_strategy='auto', random_state=None, n_neighbors=None, n_seeds_S=1."/>
+      </when>
+      <when value="under_sampling.RandomUnderSampler">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): sampling_strategy='auto', random_state=None, replacement=False."/>
+      </when>
+      <when value="under_sampling.TomekLinks">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): sampling_strategy='auto', random_state=None."/>
+      </when>
+      <when value="over_sampling.ADASYN">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): sampling_strategy='auto', random_state=None, n_neighbors=5."/>
+      </when>
+      <when value="over_sampling.RandomOverSampler">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): sampling_strategy='auto', random_state=None."/>
+      </when>
+      <when value="over_sampling.SMOTE">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): sampling_strategy='auto', random_state=None, k_neighbors=5."/>
+      </when>
+      <when value="over_sampling.SVMSMOTE">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): sampling_strategy='auto', k_neighbors=5, m_neighbors=10, out_step=0.5, random_state=None, svm_estimator=None."/>
+      </when>
+      <when value="over_sampling.BorderlineSMOTE">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): sampling_strategy='auto', k_neighbors=5, kind='borderline-1', m_neighbors=10, random_state=None."/>
+      </when>
+      <when value="over_sampling.SMOTENC">
+        <expand macro="estimator_params_text"
+              help="Default: categorical_features=[], sampling_strategy='auto', random_state=None, k_neighbors=5."/>
+      </when>
+      <when value="combine.SMOTEENN">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): sampling_strategy='auto', random_state=None, smote=None, enn=None."/>
+      </when>
+      <when value="combine.SMOTETomek">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): sampling_strategy='auto', random_state=None, smote=None, tomek=None."/>
+      </when>
+      <when value="Z_RandomOverSampler">
+        <expand macro="estimator_params_text"
+              help="Default(=blank): sampling_strategy='auto', random_state=None, negative_thres=0, positive_thres=-1."/>
+      </when>
+    </conditional>
+  </xml>
+
+  <xml name="stacking_ensemble_inputs">
+    <section name="options" title="Advanced Options" expanded="false">
+        <yield/>
+        <param argument="use_features_in_secondary" type="boolean" truevalue="booltrue" falsevalue="boolfalse" checked="false"/>
+        <param argument="store_train_meta_features" type="boolean" truevalue="booltrue" falsevalue="boolfalse" checked="false"/>
+    </section>
+  </xml>
+
+  <xml name="stacking_base_estimator">
+    <conditional name="estimator_selector">
+        <param name="selected_module" type="select" label="Choose the module that contains target estimator:" >
+            <expand macro="estimator_module_options">
+                <option value="custom_estimator">Load a custom estimator</option>
+            </expand>
+        </param>
+        <expand macro="estimator_suboptions">
+            <when value="custom_estimator">
+                <param name="c_estimator" type="data" format="zip" label="Choose the dataset containing the custom estimator or pipeline"/>
+            </when>
+        </expand>
+    </conditional>
+  </xml>
+
+  <!-- Outputs -->
+
+  <xml name="output">
+    <outputs>
+      <data format="tabular" name="outfile_predict">
+          <filter>selected_tasks['selected_task'] == 'load'</filter>
+      </data>
+      <data format="zip" name="outfile_fit" label="${tool.name}.${selected_tasks.selected_algorithms.selected_algorithm}">
+          <filter>selected_tasks['selected_task'] == 'train'</filter>
+      </data>
+    </outputs>
+  </xml>
+
+  <!--Citations-->
+  <xml name="eden_citation">
+    <citations>
+        <citation type="doi">10.5281/zenodo.15094</citation>
+    </citations>
+  </xml>
+
+  <xml name="sklearn_citation">
+    <citations>
+        <citation type="bibtex">
+          @article{scikit-learn,
+            title={Scikit-learn: Machine Learning in {P}ython},
+            author={Pedregosa, F. and Varoquaux, G. and Gramfort, A. and Michel, V.
+                    and Thirion, B. and Grisel, O. and Blondel, M. and Prettenhofer, P.
+                    and Weiss, R. and Dubourg, V. and Vanderplas, J. and Passos, A. and
+                    Cournapeau, D. and Brucher, M. and Perrot, M. and Duchesnay, E.},
+            journal={Journal of Machine Learning Research},
+            volume={12},
+            pages={2825--2830},
+            year={2011}
+          }
+        </citation>
+        <yield/>
+    </citations>
+  </xml>
+
+  <xml name="scipy_citation">
+    <citations>
+        <citation type="bibtex">
+          @Misc{,
+          author =    {Eric Jones and Travis Oliphant and Pearu Peterson and others},
+          title =     {{SciPy}: Open source scientific tools for {Python}},
+          year =      {2001--},
+          url = "http://www.scipy.org/",
+          note = {[Online; accessed 2016-04-09]}
+        }
+        </citation>
+    </citations>
+  </xml>
+
+  <xml name="skrebate_citation">
+    <citation type="bibtex">
+      @article{DBLP:journals/corr/abs-1711-08477,
+        author    = {Ryan J. Urbanowicz and
+                    Randal S. Olson and
+                    Peter Schmitt and
+                    Melissa Meeker and
+                    Jason H. Moore},
+        title     = {Benchmarking Relief-Based Feature Selection Methods},
+        journal   = {CoRR},
+        volume    = {abs/1711.08477},
+        year      = {2017},
+        url       = {http://arxiv.org/abs/1711.08477},
+        archivePrefix = {arXiv},
+        eprint    = {1711.08477},
+        timestamp = {Mon, 13 Aug 2018 16:46:04 +0200},
+        biburl    = {https://dblp.org/rec/bib/journals/corr/abs-1711-08477},
+        bibsource = {dblp computer science bibliography, https://dblp.org}
+      }
+    </citation>
+  </xml>
+
+  <xml name="xgboost_citation">
+    <citation type="bibtex">
+      @inproceedings{Chen:2016:XST:2939672.2939785,
+        author = {Chen, Tianqi and Guestrin, Carlos},
+        title = {{XGBoost}: A Scalable Tree Boosting System},
+        booktitle = {Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining},
+        series = {KDD '16},
+        year = {2016},
+        isbn = {978-1-4503-4232-2},
+        location = {San Francisco, California, USA},
+        pages = {785--794},
+        numpages = {10},
+        url = {http://doi.acm.org/10.1145/2939672.2939785},
+        doi = {10.1145/2939672.2939785},
+        acmid = {2939785},
+        publisher = {ACM},
+        address = {New York, NY, USA},
+        keywords = {large-scale machine learning},
+      }
+    </citation>
+  </xml>
+
+    <xml name="imblearn_citation">
+    <citation type="bibtex">
+      @article{JMLR:v18:16-365,
+        author  = {Guillaume  Lema{{\^i}}tre and Fernando Nogueira and Christos K. Aridas},
+        title   = {Imbalanced-learn: A Python Toolbox to Tackle the Curse of Imbalanced Datasets in Machine Learning},
+        journal = {Journal of Machine Learning Research},
+        year    = {2017},
+        volume  = {18},
+        number  = {17},
+        pages   = {1-5},
+        url     = {http://jmlr.org/papers/v18/16-365.html}
+      }
+    </citation>
+  </xml>
+
+</macros>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/model_validations.py	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,252 @@
+"""
+class
+-----
+OrderedKFold
+RepeatedOrderedKold
+
+
+function
+--------
+train_test_split
+"""
+
+import numpy as np
+import warnings
+
+from itertools import chain
+from math import ceil, floor
+from sklearn.model_selection import (GroupShuffleSplit, ShuffleSplit,
+                                     StratifiedShuffleSplit)
+from sklearn.model_selection._split import _BaseKFold, _RepeatedSplits
+from sklearn.utils import check_random_state, indexable, safe_indexing
+from sklearn.utils.validation import _num_samples, check_array
+
+
+def _validate_shuffle_split(n_samples, test_size, train_size,
+                            default_test_size=None):
+    """
+    Validation helper to check if the test/test sizes are meaningful wrt to the
+    size of the data (n_samples)
+    """
+    if test_size is None and train_size is None:
+        test_size = default_test_size
+
+    test_size_type = np.asarray(test_size).dtype.kind
+    train_size_type = np.asarray(train_size).dtype.kind
+
+    if (test_size_type == 'i' and (test_size >= n_samples or test_size <= 0)
+       or test_size_type == 'f' and (test_size <= 0 or test_size >= 1)):
+        raise ValueError('test_size={0} should be either positive and smaller'
+                         ' than the number of samples {1} or a float in the '
+                         '(0, 1) range'.format(test_size, n_samples))
+
+    if (train_size_type == 'i' and (train_size >= n_samples or train_size <= 0)
+       or train_size_type == 'f' and (train_size <= 0 or train_size >= 1)):
+        raise ValueError('train_size={0} should be either positive and smaller'
+                         ' than the number of samples {1} or a float in the '
+                         '(0, 1) range'.format(train_size, n_samples))
+
+    if train_size is not None and train_size_type not in ('i', 'f'):
+        raise ValueError("Invalid value for train_size: {}".format(train_size))
+    if test_size is not None and test_size_type not in ('i', 'f'):
+        raise ValueError("Invalid value for test_size: {}".format(test_size))
+
+    if (train_size_type == 'f' and test_size_type == 'f' and
+            train_size + test_size > 1):
+        raise ValueError(
+            'The sum of test_size and train_size = {}, should be in the (0, 1)'
+            ' range. Reduce test_size and/or train_size.'
+            .format(train_size + test_size))
+
+    if test_size_type == 'f':
+        n_test = ceil(test_size * n_samples)
+    elif test_size_type == 'i':
+        n_test = float(test_size)
+
+    if train_size_type == 'f':
+        n_train = floor(train_size * n_samples)
+    elif train_size_type == 'i':
+        n_train = float(train_size)
+
+    if train_size is None:
+        n_train = n_samples - n_test
+    elif test_size is None:
+        n_test = n_samples - n_train
+
+    if n_train + n_test > n_samples:
+        raise ValueError('The sum of train_size and test_size = %d, '
+                         'should be smaller than the number of '
+                         'samples %d. Reduce test_size and/or '
+                         'train_size.' % (n_train + n_test, n_samples))
+
+    n_train, n_test = int(n_train), int(n_test)
+
+    if n_train == 0:
+        raise ValueError(
+            'With n_samples={}, test_size={} and train_size={}, the '
+            'resulting train set will be empty. Adjust any of the '
+            'aforementioned parameters.'.format(n_samples, test_size,
+                                                train_size)
+        )
+
+    return n_train, n_test
+
+
+def train_test_split(*arrays, **options):
+    """Extend sklearn.model_selection.train_test_slit to have group split.
+
+    Parameters
+    ----------
+    *arrays : sequence of indexables with same length / shape[0]
+        Allowed inputs are lists, numpy arrays, scipy-sparse
+        matrices or pandas dataframes.
+
+    test_size : float, int or None, optional (default=None)
+        If float, should be between 0.0 and 1.0 and represent the proportion
+        of the dataset to include in the test split. If int, represents the
+        absolute number of test samples. If None, the value is set to the
+        complement of the train size. If ``train_size`` is also None, it will
+        be set to 0.25.
+
+    train_size : float, int, or None, (default=None)
+        If float, should be between 0.0 and 1.0 and represent the
+        proportion of the dataset to include in the train split. If
+        int, represents the absolute number of train samples. If None,
+        the value is automatically set to the complement of the test size.
+
+    random_state : int, RandomState instance or None, optional (default=None)
+        If int, random_state is the seed used by the random number generator;
+        If RandomState instance, random_state is the random number generator;
+        If None, the random number generator is the RandomState instance used
+        by `np.random`.
+
+    shuffle : None or str (default='simple')
+        How to shuffle the data before splitting.
+        None, no shuffle.
+        For str, one of 'simple', 'stratified' and 'group', corresponding to
+        `ShuffleSplit`, `StratifiedShuffleSplit` and `GroupShuffleSplit`,
+        respectively.
+
+    labels : array-like or None (default=None)
+        Ignored if shuffle is None or 'simple'.
+        When shuffle='stratified', this array is used as class labels.
+        When shuffle='group', this array is used as groups.
+
+    Returns
+    -------
+    splitting : list, length=2 * len(arrays)
+        List containing train-test split of inputs.
+
+    """
+    n_arrays = len(arrays)
+    if n_arrays == 0:
+        raise ValueError("At least one array required as input")
+    test_size = options.pop('test_size', None)
+    train_size = options.pop('train_size', None)
+    random_state = options.pop('random_state', None)
+    shuffle = options.pop('shuffle', 'simple')
+    labels = options.pop('labels', None)
+
+    if options:
+        raise TypeError("Invalid parameters passed: %s" % str(options))
+
+    arrays = indexable(*arrays)
+
+    n_samples = _num_samples(arrays[0])
+    if shuffle == 'group':
+        if labels is None:
+            raise ValueError("When shuffle='group', "
+                             "labels should not be None!")
+        labels = check_array(labels, ensure_2d=False, dtype=None)
+        uniques = np.unique(labels)
+        n_samples = uniques.size
+
+    n_train, n_test = _validate_shuffle_split(n_samples, test_size, train_size,
+                                              default_test_size=0.25)
+
+    shuffle_options = dict(test_size=n_test,
+                           train_size=n_train,
+                           random_state=random_state)
+
+    if shuffle is None:
+        if labels is not None:
+            warnings.warn("The `labels` is ignored for "
+                          "shuffle being None!")
+
+        train = np.arange(n_train)
+        test = np.arange(n_train, n_train + n_test)
+
+    elif shuffle == 'simple':
+        if labels is not None:
+            warnings.warn("The `labels` is not needed and therefore "
+                          "ignored for ShuffleSplit, as shuffle='simple'!")
+
+        cv = ShuffleSplit(**shuffle_options)
+        train, test = next(cv.split(X=arrays[0], y=None))
+
+    elif shuffle == 'stratified':
+        cv = StratifiedShuffleSplit(**shuffle_options)
+        train, test = next(cv.split(X=arrays[0], y=labels))
+
+    elif shuffle == 'group':
+        cv = GroupShuffleSplit(**shuffle_options)
+        train, test = next(cv.split(X=arrays[0], y=None, groups=labels))
+
+    else:
+        raise ValueError("The argument `shuffle` only supports None, "
+                         "'simple', 'stratified' and 'group', but got `%s`!"
+                         % shuffle)
+
+    return list(chain.from_iterable((safe_indexing(a, train),
+                                    safe_indexing(a, test)) for a in arrays))
+
+
+class OrderedKFold(_BaseKFold):
+    """
+    Split into K fold based on ordered target value
+
+    Parameters
+    ----------
+    n_splits : int, default=3
+        Number of folds. Must be at least 2.
+    shuffle: bool
+    random_state: None or int
+    """
+
+    def __init__(self, n_splits=3, shuffle=False, random_state=None):
+        super(OrderedKFold, self).__init__(n_splits, shuffle, random_state)
+
+    def _iter_test_indices(self, X, y, groups=None):
+        n_samples = _num_samples(X)
+        n_splits = self.n_splits
+        y = np.asarray(y)
+        sorted_index = np.argsort(y)
+        if self.shuffle:
+            current = 0
+            rng = check_random_state(self.random_state)
+            for i in range(n_samples // int(n_splits)):
+                start, stop = current, current + n_splits
+                rng.shuffle(sorted_index[start:stop])
+                current = stop
+            rng.shuffle(sorted_index[current:])
+
+        for i in range(n_splits):
+            yield sorted_index[i:n_samples:n_splits]
+
+
+class RepeatedOrderedKFold(_RepeatedSplits):
+    """ Repeated OrderedKFold runs mutiple times with different randomization.
+
+    Parameters
+    ----------
+    n_splits : int, default=5
+        Number of folds. Must be at least 2.
+
+    n_repeats : int, default=5
+        Number of times cross-validator to be repeated.
+
+    random_state: int, RandomState instance or None. Optional
+    """
+    def __init__(self, n_splits=5, n_repeats=5, random_state=None):
+        super(RepeatedOrderedKFold, self).__init__(
+            OrderedKFold, n_repeats, random_state, n_splits=n_splits)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pk_whitelist.json	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,768 @@
+{ "SK_NAMES": [
+    "sklearn._ASSUME_FINITE", "sklearn._isotonic._inplace_contiguous_isotonic_regression",
+    "sklearn._isotonic._make_unique", "sklearn.base.BaseEstimator",
+    "sklearn.base.BiclusterMixin", "sklearn.base.ClassifierMixin",
+    "sklearn.base.ClusterMixin", "sklearn.base.DensityMixin",
+    "sklearn.base.MetaEstimatorMixin", "sklearn.base.RegressorMixin",
+    "sklearn.base.TransformerMixin", "sklearn.base._first_and_last_element",
+    "sklearn.base._pprint", "sklearn.base.clone",
+    "sklearn.base.is_classifier", "sklearn.base.is_regressor",
+    "sklearn.clone", "sklearn.cluster.AffinityPropagation",
+    "sklearn.cluster.AgglomerativeClustering", "sklearn.cluster.Birch",
+    "sklearn.cluster.DBSCAN", "sklearn.cluster.FeatureAgglomeration",
+    "sklearn.cluster.KMeans", "sklearn.cluster.MeanShift",
+    "sklearn.cluster.MiniBatchKMeans", "sklearn.cluster.SpectralBiclustering",
+    "sklearn.cluster.SpectralClustering", "sklearn.cluster.SpectralCoclustering",
+    "sklearn.cluster._dbscan_inner.dbscan_inner", "sklearn.cluster._feature_agglomeration.AgglomerationTransform",
+    "sklearn.cluster._hierarchical.WeightedEdge", "sklearn.cluster._hierarchical._get_parents",
+    "sklearn.cluster._hierarchical._hc_get_descendent", "sklearn.cluster._hierarchical.average_merge",
+    "sklearn.cluster._hierarchical.compute_ward_dist", "sklearn.cluster._hierarchical.hc_get_heads",
+    "sklearn.cluster._hierarchical.max_merge", "sklearn.cluster._k_means._assign_labels_array",
+    "sklearn.cluster._k_means._assign_labels_csr", "sklearn.cluster._k_means._centers_dense",
+    "sklearn.cluster._k_means._centers_sparse", "sklearn.cluster._k_means._mini_batch_update_csr",
+    "sklearn.cluster._k_means_elkan.k_means_elkan", "sklearn.cluster.affinity_propagation",
+    "sklearn.cluster.affinity_propagation_.AffinityPropagation", "sklearn.cluster.affinity_propagation_.affinity_propagation",
+    "sklearn.cluster.bicluster.BaseSpectral", "sklearn.cluster.bicluster.SpectralBiclustering",
+    "sklearn.cluster.bicluster.SpectralCoclustering", "sklearn.cluster.bicluster._bistochastic_normalize",
+    "sklearn.cluster.bicluster._log_normalize", "sklearn.cluster.bicluster._scale_normalize",
+    "sklearn.cluster.birch.Birch", "sklearn.cluster.birch._CFNode",
+    "sklearn.cluster.birch._CFSubcluster", "sklearn.cluster.birch._iterate_sparse_X",
+    "sklearn.cluster.birch._split_node", "sklearn.cluster.dbscan",
+    "sklearn.cluster.dbscan_.DBSCAN", "sklearn.cluster.dbscan_.dbscan",
+    "sklearn.cluster.estimate_bandwidth", "sklearn.cluster.get_bin_seeds",
+    "sklearn.cluster.hierarchical.AgglomerativeClustering", "sklearn.cluster.hierarchical.FeatureAgglomeration",
+    "sklearn.cluster.hierarchical._TREE_BUILDERS", "sklearn.cluster.hierarchical._average_linkage",
+    "sklearn.cluster.hierarchical._complete_linkage", "sklearn.cluster.hierarchical._fix_connectivity",
+    "sklearn.cluster.hierarchical._hc_cut", "sklearn.cluster.hierarchical.linkage_tree",
+    "sklearn.cluster.hierarchical.ward_tree", "sklearn.cluster.k_means",
+    "sklearn.cluster.k_means_.FLOAT_DTYPES", "sklearn.cluster.k_means_.KMeans",
+    "sklearn.cluster.k_means_.MiniBatchKMeans", "sklearn.cluster.k_means_._init_centroids",
+    "sklearn.cluster.k_means_._k_init", "sklearn.cluster.k_means_._kmeans_single_elkan",
+    "sklearn.cluster.k_means_._kmeans_single_lloyd", "sklearn.cluster.k_means_._labels_inertia",
+    "sklearn.cluster.k_means_._labels_inertia_precompute_dense", "sklearn.cluster.k_means_._mini_batch_convergence",
+    "sklearn.cluster.k_means_._mini_batch_step", "sklearn.cluster.k_means_._tolerance",
+    "sklearn.cluster.k_means_._validate_center_shape", "sklearn.cluster.k_means_.k_means",
+    "sklearn.cluster.k_means_.string_types", "sklearn.cluster.linkage_tree",
+    "sklearn.cluster.mean_shift", "sklearn.cluster.mean_shift_.MeanShift",
+    "sklearn.cluster.mean_shift_._mean_shift_single_seed", "sklearn.cluster.mean_shift_.estimate_bandwidth",
+    "sklearn.cluster.mean_shift_.get_bin_seeds", "sklearn.cluster.mean_shift_.mean_shift",
+    "sklearn.cluster.spectral.SpectralClustering", "sklearn.cluster.spectral.discretize",
+    "sklearn.cluster.spectral.spectral_clustering", "sklearn.cluster.spectral_clustering",
+    "sklearn.cluster.ward_tree", "sklearn.config_context", "sklearn.compose.TransformedTargetRegressor",
+    "sklearn.compose._target.TransformedTargetRegressor", "sklearn.compose.ColumnTransformer",
+    "sklearn.compose._column_transformer.ColumnTransformer", "sklearn.compose.make_column_transformer",
+    "sklearn.compose._column_transformer.make_column_transformer",
+    "sklearn.covariance.EllipticEnvelope", "sklearn.covariance.EmpiricalCovariance",
+    "sklearn.covariance.GraphLasso", "sklearn.covariance.GraphLassoCV",
+    "sklearn.covariance.LedoitWolf", "sklearn.covariance.MinCovDet",
+    "sklearn.covariance.OAS", "sklearn.covariance.ShrunkCovariance",
+    "sklearn.covariance.empirical_covariance", "sklearn.covariance.empirical_covariance_.EmpiricalCovariance",
+    "sklearn.covariance.empirical_covariance_.empirical_covariance", "sklearn.covariance.empirical_covariance_.log_likelihood",
+    "sklearn.covariance.fast_mcd", "sklearn.covariance.graph_lasso",
+    "sklearn.covariance.graph_lasso_.GraphLasso", "sklearn.covariance.graph_lasso_.GraphLassoCV",
+    "sklearn.covariance.graph_lasso_._dual_gap", "sklearn.covariance.graph_lasso_._objective",
+    "sklearn.covariance.graph_lasso_.alpha_max", "sklearn.covariance.graph_lasso_.graph_lasso",
+    "sklearn.covariance.graph_lasso_.graph_lasso_path", "sklearn.covariance.ledoit_wolf",
+    "sklearn.covariance.ledoit_wolf_shrinkage", "sklearn.covariance.log_likelihood",
+    "sklearn.covariance.oas", "sklearn.covariance.outlier_detection.EllipticEnvelope",
+    "sklearn.covariance.robust_covariance.MinCovDet", "sklearn.covariance.robust_covariance._c_step",
+    "sklearn.covariance.robust_covariance.c_step", "sklearn.covariance.robust_covariance.fast_mcd",
+    "sklearn.covariance.robust_covariance.select_candidates", "sklearn.covariance.shrunk_covariance",
+    "sklearn.covariance.shrunk_covariance_.LedoitWolf", "sklearn.covariance.shrunk_covariance_.OAS",
+    "sklearn.covariance.shrunk_covariance_.ShrunkCovariance", "sklearn.covariance.shrunk_covariance_.ledoit_wolf",
+    "sklearn.covariance.shrunk_covariance_.ledoit_wolf_shrinkage", "sklearn.covariance.shrunk_covariance_.oas",
+    "sklearn.covariance.shrunk_covariance_.shrunk_covariance", "sklearn.decomposition.DictionaryLearning",
+    "sklearn.decomposition.FactorAnalysis", "sklearn.decomposition.FastICA",
+    "sklearn.decomposition.IncrementalPCA", "sklearn.decomposition.KernelPCA",
+    "sklearn.decomposition.LatentDirichletAllocation", "sklearn.decomposition.MiniBatchDictionaryLearning",
+    "sklearn.decomposition.MiniBatchSparsePCA", "sklearn.decomposition.NMF",
+    "sklearn.decomposition.PCA", "sklearn.decomposition.RandomizedPCA",
+    "sklearn.decomposition.SparseCoder", "sklearn.decomposition.SparsePCA",
+    "sklearn.decomposition.TruncatedSVD", "sklearn.decomposition._online_lda._dirichlet_expectation_1d",
+    "sklearn.decomposition._online_lda._dirichlet_expectation_2d", "sklearn.decomposition._online_lda.mean_change",
+    "sklearn.decomposition.base._BasePCA", "sklearn.decomposition.cdnmf_fast._update_cdnmf_fast",
+    "sklearn.decomposition.dict_learning", "sklearn.decomposition.dict_learning_online",
+    "sklearn.decomposition.factor_analysis.FactorAnalysis", "sklearn.decomposition.fastica",
+    "sklearn.decomposition.fastica_.FLOAT_DTYPES", "sklearn.decomposition.fastica_.FastICA",
+    "sklearn.decomposition.fastica_._cube", "sklearn.decomposition.fastica_._exp",
+    "sklearn.decomposition.fastica_._gs_decorrelation", "sklearn.decomposition.fastica_._ica_def",
+    "sklearn.decomposition.fastica_._ica_par", "sklearn.decomposition.fastica_._logcosh",
+    "sklearn.decomposition.fastica_._sym_decorrelation", "sklearn.decomposition.fastica_.fastica",
+    "sklearn.decomposition.fastica_.string_types", "sklearn.decomposition.incremental_pca.IncrementalPCA",
+    "sklearn.decomposition.kernel_pca.KernelPCA", "sklearn.decomposition.nmf.EPSILON",
+    "sklearn.decomposition.nmf.INTEGER_TYPES", "sklearn.decomposition.nmf.NMF",
+    "sklearn.decomposition.nmf._beta_divergence", "sklearn.decomposition.nmf._beta_loss_to_float",
+    "sklearn.decomposition.nmf._check_init", "sklearn.decomposition.nmf._check_string_param",
+    "sklearn.decomposition.nmf._compute_regularization", "sklearn.decomposition.nmf._fit_coordinate_descent",
+    "sklearn.decomposition.nmf._fit_multiplicative_update", "sklearn.decomposition.nmf._initialize_nmf",
+    "sklearn.decomposition.nmf._multiplicative_update_h", "sklearn.decomposition.nmf._multiplicative_update_w",
+    "sklearn.decomposition.nmf._special_sparse_dot", "sklearn.decomposition.nmf._update_coordinate_descent",
+    "sklearn.decomposition.nmf.non_negative_factorization", "sklearn.decomposition.nmf.norm",
+    "sklearn.decomposition.nmf.trace_dot", "sklearn.decomposition.non_negative_factorization",
+    "sklearn.decomposition.online_lda.EPS", "sklearn.decomposition.online_lda.LatentDirichletAllocation",
+    "sklearn.decomposition.online_lda._update_doc_distribution", "sklearn.decomposition.online_lda.gammaln",
+    "sklearn.decomposition.pca.PCA", "sklearn.decomposition.pca.RandomizedPCA",
+    "sklearn.decomposition.pca._assess_dimension_", "sklearn.decomposition.pca._infer_dimension_",
+    "sklearn.decomposition.pca.gammaln", "sklearn.decomposition.sparse_encode",
+    "sklearn.decomposition.sparse_pca.MiniBatchSparsePCA", "sklearn.decomposition.sparse_pca.SparsePCA",
+    "sklearn.decomposition.truncated_svd.TruncatedSVD", "sklearn.discriminant_analysis.LinearDiscriminantAnalysis",
+    "sklearn.discriminant_analysis.QuadraticDiscriminantAnalysis", "sklearn.discriminant_analysis._class_cov",
+    "sklearn.discriminant_analysis._class_means", "sklearn.discriminant_analysis._cov",
+    "sklearn.discriminant_analysis.string_types", "sklearn.ensemble.AdaBoostClassifier",
+    "sklearn.ensemble.AdaBoostRegressor", "sklearn.ensemble.BaggingClassifier",
+    "sklearn.ensemble.BaggingRegressor", "sklearn.ensemble.BaseEnsemble",
+    "sklearn.ensemble.ExtraTreesClassifier", "sklearn.ensemble.ExtraTreesRegressor",
+    "sklearn.ensemble.GradientBoostingClassifier", "sklearn.ensemble.GradientBoostingRegressor",
+    "sklearn.ensemble.IsolationForest", "sklearn.ensemble.RandomForestClassifier",
+    "sklearn.ensemble.RandomForestRegressor", "sklearn.ensemble.RandomTreesEmbedding",
+    "sklearn.ensemble.VotingClassifier", "sklearn.ensemble._gradient_boosting._partial_dependence_tree",
+    "sklearn.ensemble._gradient_boosting._predict_regression_tree_stages_sparse", "sklearn.ensemble._gradient_boosting._random_sample_mask",
+    "sklearn.ensemble._gradient_boosting.predict_stage", "sklearn.ensemble._gradient_boosting.predict_stages",
+    "sklearn.ensemble.bagging.BaggingClassifier", "sklearn.ensemble.bagging.BaggingRegressor",
+    "sklearn.ensemble.bagging.BaseBagging", "sklearn.ensemble.bagging.MAX_INT",
+    "sklearn.ensemble.bagging._generate_bagging_indices", "sklearn.ensemble.bagging._generate_indices",
+    "sklearn.ensemble.bagging._parallel_build_estimators", "sklearn.ensemble.bagging._parallel_decision_function",
+    "sklearn.ensemble.bagging._parallel_predict_log_proba", "sklearn.ensemble.bagging._parallel_predict_proba",
+    "sklearn.ensemble.bagging._parallel_predict_regression", "sklearn.ensemble.base.BaseEnsemble",
+    "sklearn.ensemble.base.MAX_RAND_SEED", "sklearn.ensemble.base._partition_estimators",
+    "sklearn.ensemble.base._set_random_states", "sklearn.ensemble.forest.BaseForest",
+    "sklearn.ensemble.forest.ExtraTreesClassifier", "sklearn.ensemble.forest.ExtraTreesRegressor",
+    "sklearn.ensemble.forest.ForestClassifier", "sklearn.ensemble.forest.ForestRegressor",
+    "sklearn.ensemble.forest.MAX_INT", "sklearn.ensemble.forest.RandomForestClassifier",
+    "sklearn.ensemble.forest.RandomForestRegressor", "sklearn.ensemble.forest.RandomTreesEmbedding",
+    "sklearn.ensemble.forest._generate_sample_indices", "sklearn.ensemble.forest._generate_unsampled_indices",
+    "sklearn.ensemble.forest._parallel_build_trees", "sklearn.ensemble.forest.accumulate_prediction",
+    "sklearn.ensemble.gradient_boosting.BaseGradientBoosting", "sklearn.ensemble.gradient_boosting.BinomialDeviance",
+    "sklearn.ensemble.gradient_boosting.ClassificationLossFunction", "sklearn.ensemble.gradient_boosting.ExponentialLoss",
+    "sklearn.ensemble.gradient_boosting.GradientBoostingClassifier", "sklearn.ensemble.gradient_boosting.GradientBoostingRegressor",
+    "sklearn.ensemble.gradient_boosting.HuberLossFunction", "sklearn.ensemble.gradient_boosting.INIT_ESTIMATORS",
+    "sklearn.ensemble.gradient_boosting.LOSS_FUNCTIONS", "sklearn.ensemble.gradient_boosting.LeastAbsoluteError",
+    "sklearn.ensemble.gradient_boosting.LeastSquaresError", "sklearn.ensemble.gradient_boosting.LogOddsEstimator",
+    "sklearn.ensemble.gradient_boosting.LossFunction", "sklearn.ensemble.gradient_boosting.MeanEstimator",
+    "sklearn.ensemble.gradient_boosting.MultinomialDeviance", "sklearn.ensemble.gradient_boosting.PriorProbabilityEstimator",
+    "sklearn.ensemble.gradient_boosting.QuantileEstimator", "sklearn.ensemble.gradient_boosting.QuantileLossFunction",
+    "sklearn.ensemble.gradient_boosting.RegressionLossFunction", "sklearn.ensemble.gradient_boosting.ScaledLogOddsEstimator",
+    "sklearn.ensemble.gradient_boosting.TREE_LEAF", "sklearn.ensemble.gradient_boosting.VerboseReporter",
+    "sklearn.ensemble.gradient_boosting.ZeroEstimator", "sklearn.ensemble.gradient_boosting.expit",
+    "sklearn.ensemble.iforest.INTEGER_TYPES", "sklearn.ensemble.iforest.IsolationForest",
+    "sklearn.ensemble.iforest._average_path_length", "sklearn.ensemble.iforest.euler_gamma",
+    "sklearn.ensemble.partial_dependence._grid_from_X", "sklearn.ensemble.partial_dependence.partial_dependence",
+    "sklearn.ensemble.partial_dependence.plot_partial_dependence", "sklearn.ensemble.voting_classifier.VotingClassifier",
+    "sklearn.ensemble.voting_classifier._parallel_fit_estimator", "sklearn.ensemble.weight_boosting.AdaBoostClassifier",
+    "sklearn.ensemble.weight_boosting.AdaBoostRegressor", "sklearn.ensemble.weight_boosting.BaseWeightBoosting",
+    "sklearn.ensemble.weight_boosting._samme_proba", "sklearn.ensemble.weight_boosting.inner1d",
+    "sklearn.feature_extraction.DictVectorizer", "sklearn.feature_extraction.FeatureHasher",
+    "sklearn.feature_extraction._hashing.transform", "sklearn.feature_extraction.dict_vectorizer.DictVectorizer",
+    "sklearn.feature_extraction.dict_vectorizer._tosequence", "sklearn.feature_extraction.grid_to_graph",
+    "sklearn.feature_extraction.hashing.FeatureHasher", "sklearn.feature_extraction.hashing._iteritems",
+    "sklearn.feature_extraction.image.PatchExtractor", "sklearn.feature_extraction.image._compute_gradient_3d",
+    "sklearn.feature_extraction.image._compute_n_patches", "sklearn.feature_extraction.image._make_edges_3d",
+    "sklearn.feature_extraction.image._mask_edges_weights", "sklearn.feature_extraction.image._to_graph",
+    "sklearn.feature_extraction.image.extract_patches", "sklearn.feature_extraction.image.extract_patches_2d",
+    "sklearn.feature_extraction.image.grid_to_graph", "sklearn.feature_extraction.image.img_to_graph",
+    "sklearn.feature_extraction.image.reconstruct_from_patches_2d", "sklearn.feature_extraction.img_to_graph",
+    "sklearn.feature_extraction.stop_words.ENGLISH_STOP_WORDS", "sklearn.feature_extraction.text.CountVectorizer",
+    "sklearn.feature_extraction.text.ENGLISH_STOP_WORDS", "sklearn.feature_extraction.text.HashingVectorizer",
+    "sklearn.feature_extraction.text.TfidfTransformer", "sklearn.feature_extraction.text.TfidfVectorizer",
+    "sklearn.feature_extraction.text.VectorizerMixin", "sklearn.feature_extraction.text._check_stop_list",
+    "sklearn.feature_extraction.text._document_frequency", "sklearn.feature_extraction.text._make_int_array",
+    "sklearn.feature_extraction.text.strip_accents_ascii", "sklearn.feature_extraction.text.strip_accents_unicode",
+    "sklearn.feature_extraction.text.strip_tags", "sklearn.feature_selection.GenericUnivariateSelect",
+    "sklearn.feature_selection.RFE", "sklearn.feature_selection.RFECV",
+    "sklearn.feature_selection.SelectFdr", "sklearn.feature_selection.SelectFpr",
+    "sklearn.feature_selection.SelectFromModel", "sklearn.feature_selection.SelectFwe",
+    "sklearn.feature_selection.SelectKBest", "sklearn.feature_selection.SelectPercentile",
+    "sklearn.feature_selection.VarianceThreshold", "sklearn.feature_selection.base.SelectorMixin",
+    "sklearn.feature_selection.chi2", "sklearn.feature_selection.f_classif",
+    "sklearn.feature_selection.f_oneway", "sklearn.feature_selection.f_regression",
+    "sklearn.feature_selection.from_model.SelectFromModel", "sklearn.feature_selection.from_model._calculate_threshold",
+    "sklearn.feature_selection.from_model._get_feature_importances", "sklearn.feature_selection.mutual_info_._compute_mi",
+    "sklearn.feature_selection.mutual_info_._compute_mi_cc", "sklearn.feature_selection.mutual_info_._compute_mi_cd",
+    "sklearn.feature_selection.mutual_info_._estimate_mi", "sklearn.feature_selection.mutual_info_._iterate_columns",
+    "sklearn.feature_selection.mutual_info_.digamma", "sklearn.feature_selection.mutual_info_.mutual_info_classif",
+    "sklearn.feature_selection.mutual_info_.mutual_info_regression", "sklearn.feature_selection.mutual_info_classif",
+    "sklearn.feature_selection.mutual_info_regression", "sklearn.feature_selection.rfe.RFE",
+    "sklearn.feature_selection.rfe.RFECV", "sklearn.feature_selection.rfe._rfe_single_fit",
+    "sklearn.feature_selection.univariate_selection.GenericUnivariateSelect", "sklearn.feature_selection.univariate_selection.SelectFdr",
+    "sklearn.feature_selection.univariate_selection.SelectFpr", "sklearn.feature_selection.univariate_selection.SelectFwe",
+    "sklearn.feature_selection.univariate_selection.SelectKBest", "sklearn.feature_selection.univariate_selection.SelectPercentile",
+    "sklearn.feature_selection.univariate_selection._BaseFilter", "sklearn.feature_selection.univariate_selection._chisquare",
+    "sklearn.feature_selection.univariate_selection._clean_nans", "sklearn.feature_selection.univariate_selection.chi2",
+    "sklearn.feature_selection.univariate_selection.f_classif", "sklearn.feature_selection.univariate_selection.f_oneway",
+    "sklearn.feature_selection.univariate_selection.f_regression", "sklearn.feature_selection.variance_threshold.VarianceThreshold",
+    "sklearn.gaussian_process.GaussianProcess", "sklearn.gaussian_process.GaussianProcessClassifier",
+    "sklearn.gaussian_process.GaussianProcessRegressor", "sklearn.gaussian_process.correlation_models.absolute_exponential",
+    "sklearn.gaussian_process.correlation_models.cubic", "sklearn.gaussian_process.correlation_models.generalized_exponential",
+    "sklearn.gaussian_process.correlation_models.linear", "sklearn.gaussian_process.correlation_models.pure_nugget",
+    "sklearn.gaussian_process.correlation_models.squared_exponential", "sklearn.gaussian_process.gaussian_process.GaussianProcess",
+    "sklearn.gaussian_process.gaussian_process.MACHINE_EPSILON", "sklearn.gaussian_process.gaussian_process.l1_cross_distances",
+    "sklearn.gaussian_process.gpc.COEFS", "sklearn.gaussian_process.gpc.GaussianProcessClassifier",
+    "sklearn.gaussian_process.gpc.LAMBDAS", "sklearn.gaussian_process.gpc._BinaryGaussianProcessClassifierLaplace",
+    "sklearn.gaussian_process.gpc.erf", "sklearn.gaussian_process.gpc.expit",
+    "sklearn.gaussian_process.gpr.GaussianProcessRegressor", "sklearn.gaussian_process.kernels.CompoundKernel",
+    "sklearn.gaussian_process.kernels.ConstantKernel", "sklearn.gaussian_process.kernels.DotProduct",
+    "sklearn.gaussian_process.kernels.ExpSineSquared", "sklearn.gaussian_process.kernels.Exponentiation",
+    "sklearn.gaussian_process.kernels.Hyperparameter", "sklearn.gaussian_process.kernels.Kernel",
+    "sklearn.gaussian_process.kernels.KernelOperator", "sklearn.gaussian_process.kernels.Matern",
+    "sklearn.gaussian_process.kernels.NormalizedKernelMixin", "sklearn.gaussian_process.kernels.PairwiseKernel",
+    "sklearn.gaussian_process.kernels.Product", "sklearn.gaussian_process.kernels.RBF",
+    "sklearn.gaussian_process.kernels.RationalQuadratic", "sklearn.gaussian_process.kernels.StationaryKernelMixin",
+    "sklearn.gaussian_process.kernels.Sum", "sklearn.gaussian_process.kernels.WhiteKernel",
+    "sklearn.gaussian_process.kernels._approx_fprime", "sklearn.gaussian_process.kernels._check_length_scale",
+    "sklearn.gaussian_process.kernels.gamma", "sklearn.gaussian_process.kernels.kv",
+    "sklearn.gaussian_process.regression_models.constant", "sklearn.gaussian_process.regression_models.linear",
+    "sklearn.gaussian_process.regression_models.quadratic", "sklearn.get_config",
+    "sklearn.isotonic.IsotonicRegression", "sklearn.isotonic.check_increasing",
+    "sklearn.isotonic.isotonic_regression", "sklearn.kernel_approximation.AdditiveChi2Sampler",
+    "sklearn.kernel_approximation.KERNEL_PARAMS", "sklearn.kernel_approximation.Nystroem",
+    "sklearn.kernel_approximation.RBFSampler", "sklearn.kernel_approximation.SkewedChi2Sampler",
+    "sklearn.kernel_ridge.KernelRidge", "sklearn.linear_model.ARDRegression",
+    "sklearn.linear_model.BayesianRidge", "sklearn.linear_model.ElasticNet",
+    "sklearn.linear_model.ElasticNetCV", "sklearn.linear_model.Hinge",
+    "sklearn.linear_model.Huber", "sklearn.linear_model.HuberRegressor",
+    "sklearn.linear_model.Lars", "sklearn.linear_model.LarsCV",
+    "sklearn.linear_model.Lasso", "sklearn.linear_model.LassoCV",
+    "sklearn.linear_model.LassoLars", "sklearn.linear_model.LassoLarsCV",
+    "sklearn.linear_model.LassoLarsIC", "sklearn.linear_model.LinearRegression",
+    "sklearn.linear_model.Log", "sklearn.linear_model.LogisticRegression",
+    "sklearn.linear_model.LogisticRegressionCV", "sklearn.linear_model.ModifiedHuber",
+    "sklearn.linear_model.MultiTaskElasticNet", "sklearn.linear_model.MultiTaskElasticNetCV",
+    "sklearn.linear_model.MultiTaskLasso", "sklearn.linear_model.MultiTaskLassoCV",
+    "sklearn.linear_model.OrthogonalMatchingPursuit", "sklearn.linear_model.OrthogonalMatchingPursuitCV",
+    "sklearn.linear_model.PassiveAggressiveClassifier", "sklearn.linear_model.PassiveAggressiveRegressor",
+    "sklearn.linear_model.Perceptron", "sklearn.linear_model.RANSACRegressor",
+    "sklearn.linear_model.RandomizedLasso", "sklearn.linear_model.RandomizedLogisticRegression",
+    "sklearn.linear_model.Ridge", "sklearn.linear_model.RidgeCV",
+    "sklearn.linear_model.RidgeClassifier", "sklearn.linear_model.RidgeClassifierCV",
+    "sklearn.linear_model.SGDClassifier", "sklearn.linear_model.SGDRegressor",
+    "sklearn.linear_model.SquaredLoss", "sklearn.linear_model.TheilSenRegressor",
+    "sklearn.linear_model.base.FLOAT_DTYPES", "sklearn.linear_model.base.LinearClassifierMixin",
+    "sklearn.linear_model.base.LinearModel", "sklearn.linear_model.base.LinearRegression",
+    "sklearn.linear_model.base.SPARSE_INTERCEPT_DECAY", "sklearn.linear_model.base.SparseCoefMixin",
+    "sklearn.linear_model.base._pre_fit", "sklearn.linear_model.base._preprocess_data",
+    "sklearn.linear_model.base._rescale_data", "sklearn.linear_model.base.center_data",
+    "sklearn.linear_model.base.make_dataset", "sklearn.linear_model.base.sparse_center_data",
+    "sklearn.linear_model.bayes.ARDRegression", "sklearn.linear_model.bayes.BayesianRidge",
+    "sklearn.linear_model.cd_fast.enet_coordinate_descent", "sklearn.linear_model.cd_fast.enet_coordinate_descent_gram",
+    "sklearn.linear_model.cd_fast.enet_coordinate_descent_multi_task", "sklearn.linear_model.cd_fast.sparse_enet_coordinate_descent",
+    "sklearn.linear_model.coordinate_descent.ElasticNet", "sklearn.linear_model.coordinate_descent.ElasticNetCV",
+    "sklearn.linear_model.coordinate_descent.Lasso", "sklearn.linear_model.coordinate_descent.LassoCV",
+    "sklearn.linear_model.coordinate_descent.LinearModelCV", "sklearn.linear_model.coordinate_descent.MultiTaskElasticNet",
+    "sklearn.linear_model.coordinate_descent.MultiTaskElasticNetCV", "sklearn.linear_model.coordinate_descent.MultiTaskLasso",
+    "sklearn.linear_model.coordinate_descent.MultiTaskLassoCV", "sklearn.linear_model.coordinate_descent._alpha_grid",
+    "sklearn.linear_model.coordinate_descent._path_residuals", "sklearn.linear_model.coordinate_descent.enet_path",
+    "sklearn.linear_model.coordinate_descent.lasso_path", "sklearn.linear_model.enet_path",
+    "sklearn.linear_model.huber.HuberRegressor", "sklearn.linear_model.huber._huber_loss_and_gradient",
+    "sklearn.linear_model.lars_path", "sklearn.linear_model.lasso_path",
+    "sklearn.linear_model.lasso_stability_path", "sklearn.linear_model.least_angle.Lars",
+    "sklearn.linear_model.least_angle.LarsCV", "sklearn.linear_model.least_angle.LassoLars",
+    "sklearn.linear_model.least_angle.LassoLarsCV", "sklearn.linear_model.least_angle.LassoLarsIC",
+    "sklearn.linear_model.least_angle._check_copy_and_writeable", "sklearn.linear_model.least_angle._lars_path_residues",
+    "sklearn.linear_model.least_angle.lars_path", "sklearn.linear_model.least_angle.solve_triangular_args",
+    "sklearn.linear_model.least_angle.string_types", "sklearn.linear_model.logistic.LogisticRegression",
+    "sklearn.linear_model.logistic.LogisticRegressionCV", "sklearn.linear_model.logistic.SCORERS",
+    "sklearn.linear_model.logistic._check_solver_option", "sklearn.linear_model.logistic._intercept_dot",
+    "sklearn.linear_model.logistic._log_reg_scoring_path", "sklearn.linear_model.logistic._logistic_grad_hess",
+    "sklearn.linear_model.logistic._logistic_loss", "sklearn.linear_model.logistic._logistic_loss_and_grad",
+    "sklearn.linear_model.logistic._multinomial_grad_hess", "sklearn.linear_model.logistic._multinomial_loss",
+    "sklearn.linear_model.logistic._multinomial_loss_grad", "sklearn.linear_model.logistic.expit",
+    "sklearn.linear_model.logistic.logistic_regression_path", "sklearn.linear_model.logistic_regression_path",
+    "sklearn.linear_model.omp.OrthogonalMatchingPursuit", "sklearn.linear_model.omp.OrthogonalMatchingPursuitCV",
+    "sklearn.linear_model.omp._cholesky_omp", "sklearn.linear_model.omp._gram_omp",
+    "sklearn.linear_model.omp._omp_path_residues", "sklearn.linear_model.omp.orthogonal_mp",
+    "sklearn.linear_model.omp.orthogonal_mp_gram", "sklearn.linear_model.omp.premature",
+    "sklearn.linear_model.omp.solve_triangular_args", "sklearn.linear_model.orthogonal_mp",
+    "sklearn.linear_model.orthogonal_mp_gram", "sklearn.linear_model.passive_aggressive.DEFAULT_EPSILON",
+    "sklearn.linear_model.passive_aggressive.PassiveAggressiveClassifier", "sklearn.linear_model.passive_aggressive.PassiveAggressiveRegressor",
+    "sklearn.linear_model.perceptron.Perceptron", "sklearn.linear_model.randomized_l1.BaseRandomizedLinearModel",
+    "sklearn.linear_model.randomized_l1.RandomizedLasso", "sklearn.linear_model.randomized_l1.RandomizedLogisticRegression",
+    "sklearn.linear_model.randomized_l1._lasso_stability_path", "sklearn.linear_model.randomized_l1._randomized_lasso",
+    "sklearn.linear_model.randomized_l1._randomized_logistic", "sklearn.linear_model.randomized_l1._resample_model",
+    "sklearn.linear_model.randomized_l1.lasso_stability_path", "sklearn.linear_model.ransac.RANSACRegressor",
+    "sklearn.linear_model.ransac._EPSILON", "sklearn.linear_model.ransac._dynamic_max_trials",
+    "sklearn.linear_model.ridge.Ridge", "sklearn.linear_model.ridge.RidgeCV",
+    "sklearn.linear_model.ridge.RidgeClassifier", "sklearn.linear_model.ridge.RidgeClassifierCV",
+    "sklearn.linear_model.ridge._BaseRidge", "sklearn.linear_model.ridge._BaseRidgeCV",
+    "sklearn.linear_model.ridge._RidgeGCV", "sklearn.linear_model.ridge._solve_cholesky",
+    "sklearn.linear_model.ridge._solve_cholesky_kernel", "sklearn.linear_model.ridge._solve_lsqr",
+    "sklearn.linear_model.ridge._solve_sparse_cg", "sklearn.linear_model.ridge._solve_svd",
+    "sklearn.linear_model.ridge.ridge_regression", "sklearn.linear_model.ridge_regression",
+    "sklearn.linear_model.sag.get_auto_step_size", "sklearn.linear_model.sag.sag",
+    "sklearn.linear_model.sag.sag_solver", "sklearn.linear_model.sag_fast.MultinomialLogLoss",
+    "sklearn.linear_model.sag_fast._multinomial_grad_loss_all_samples", "sklearn.linear_model.sag_fast.sag",
+    "sklearn.linear_model.sgd_fast.Classification", "sklearn.linear_model.sgd_fast.EpsilonInsensitive",
+    "sklearn.linear_model.sgd_fast.Hinge", "sklearn.linear_model.sgd_fast.Huber",
+    "sklearn.linear_model.sgd_fast.Log", "sklearn.linear_model.sgd_fast.LossFunction",
+    "sklearn.linear_model.sgd_fast.ModifiedHuber", "sklearn.linear_model.sgd_fast.Regression",
+    "sklearn.linear_model.sgd_fast.SquaredEpsilonInsensitive", "sklearn.linear_model.sgd_fast.SquaredHinge",
+    "sklearn.linear_model.sgd_fast.SquaredLoss", "sklearn.linear_model.sgd_fast._plain_sgd",
+    "sklearn.linear_model.sgd_fast.average_sgd", "sklearn.linear_model.sgd_fast.plain_sgd",
+    "sklearn.linear_model.stochastic_gradient.BaseSGD", "sklearn.linear_model.stochastic_gradient.BaseSGDClassifier",
+    "sklearn.linear_model.stochastic_gradient.BaseSGDRegressor", "sklearn.linear_model.stochastic_gradient.DEFAULT_EPSILON",
+    "sklearn.linear_model.stochastic_gradient.LEARNING_RATE_TYPES", "sklearn.linear_model.stochastic_gradient.PENALTY_TYPES",
+    "sklearn.linear_model.stochastic_gradient.SGDClassifier", "sklearn.linear_model.stochastic_gradient.SGDRegressor",
+    "sklearn.linear_model.stochastic_gradient._prepare_fit_binary", "sklearn.linear_model.stochastic_gradient.fit_binary",
+    "sklearn.linear_model.theil_sen.TheilSenRegressor", "sklearn.linear_model.theil_sen._EPSILON",
+    "sklearn.linear_model.theil_sen._breakdown_point", "sklearn.linear_model.theil_sen._lstsq",
+    "sklearn.linear_model.theil_sen._modified_weiszfeld_step", "sklearn.linear_model.theil_sen._spatial_median",
+    "sklearn.linear_model.theil_sen.binom", "sklearn.manifold.Isomap",
+    "sklearn.manifold.LocallyLinearEmbedding", "sklearn.manifold.MDS",
+    "sklearn.manifold.SpectralEmbedding", "sklearn.manifold.TSNE",
+    "sklearn.manifold._barnes_hut_tsne.gradient", "sklearn.manifold._utils._binary_search_perplexity",
+    "sklearn.manifold.isomap.Isomap", "sklearn.manifold.locally_linear.FLOAT_DTYPES",
+    "sklearn.manifold.locally_linear.LocallyLinearEmbedding", "sklearn.manifold.locally_linear.barycenter_kneighbors_graph",
+    "sklearn.manifold.locally_linear.barycenter_weights", "sklearn.manifold.locally_linear.locally_linear_embedding",
+    "sklearn.manifold.locally_linear.null_space", "sklearn.manifold.locally_linear_embedding",
+    "sklearn.manifold.mds.MDS", "sklearn.manifold.mds._smacof_single",
+    "sklearn.manifold.mds.smacof", "sklearn.manifold.smacof",
+    "sklearn.manifold.spectral_embedding", "sklearn.manifold.spectral_embedding_.SpectralEmbedding",
+    "sklearn.manifold.spectral_embedding_._graph_connected_component", "sklearn.manifold.spectral_embedding_._graph_is_connected",
+    "sklearn.manifold.spectral_embedding_._set_diag", "sklearn.manifold.spectral_embedding_.spectral_embedding",
+    "sklearn.manifold.t_sne.MACHINE_EPSILON", "sklearn.manifold.t_sne.TSNE",
+    "sklearn.manifold.t_sne._gradient_descent", "sklearn.manifold.t_sne._joint_probabilities",
+    "sklearn.manifold.t_sne._joint_probabilities_nn", "sklearn.manifold.t_sne._kl_divergence",
+    "sklearn.manifold.t_sne._kl_divergence_bh", "sklearn.manifold.t_sne.string_types",
+    "sklearn.manifold.t_sne.trustworthiness", "sklearn.metrics.SCORERS",
+    "sklearn.metrics.accuracy_score", "sklearn.metrics.adjusted_mutual_info_score",
+    "sklearn.metrics.adjusted_rand_score", "sklearn.metrics.auc",
+    "sklearn.metrics.average_precision_score", "sklearn.metrics.base._average_binary_score",
+    "sklearn.metrics.brier_score_loss", "sklearn.metrics.calinski_harabaz_score",
+    "sklearn.metrics.classification._check_binary_probabilistic_predictions", "sklearn.metrics.classification._check_targets",
+    "sklearn.metrics.classification._prf_divide", "sklearn.metrics.classification._weighted_sum",
+    "sklearn.metrics.classification.accuracy_score", "sklearn.metrics.classification.brier_score_loss",
+    "sklearn.metrics.classification.classification_report", "sklearn.metrics.classification.cohen_kappa_score",
+    "sklearn.metrics.classification.confusion_matrix", "sklearn.metrics.classification.f1_score",
+    "sklearn.metrics.classification.fbeta_score", "sklearn.metrics.classification.hamming_loss",
+    "sklearn.metrics.classification.hinge_loss", "sklearn.metrics.classification.jaccard_similarity_score",
+    "sklearn.metrics.classification.log_loss", "sklearn.metrics.classification.matthews_corrcoef",
+    "sklearn.metrics.classification.precision_recall_fscore_support", "sklearn.metrics.classification.precision_score",
+    "sklearn.metrics.classification.recall_score", "sklearn.metrics.classification.zero_one_loss",
+    "sklearn.metrics.classification_report", "sklearn.metrics.cluster.adjusted_mutual_info_score",
+    "sklearn.metrics.cluster.adjusted_rand_score", "sklearn.metrics.cluster.bicluster._check_rows_and_columns",
+    "sklearn.metrics.cluster.bicluster._jaccard", "sklearn.metrics.cluster.bicluster._pairwise_similarity",
+    "sklearn.metrics.cluster.bicluster.consensus_score", "sklearn.metrics.cluster.calinski_harabaz_score",
+    "sklearn.metrics.cluster.completeness_score", "sklearn.metrics.cluster.consensus_score",
+    "sklearn.metrics.cluster.contingency_matrix", "sklearn.metrics.cluster.entropy",
+    "sklearn.metrics.cluster.expected_mutual_info_fast.expected_mutual_information", "sklearn.metrics.cluster.expected_mutual_info_fast.gammaln",
+    "sklearn.metrics.cluster.expected_mutual_information", "sklearn.metrics.cluster.fowlkes_mallows_score",
+    "sklearn.metrics.cluster.homogeneity_completeness_v_measure", "sklearn.metrics.cluster.homogeneity_score",
+    "sklearn.metrics.cluster.mutual_info_score", "sklearn.metrics.cluster.normalized_mutual_info_score",
+    "sklearn.metrics.cluster.silhouette_samples", "sklearn.metrics.cluster.silhouette_score",
+    "sklearn.metrics.cluster.supervised.adjusted_mutual_info_score", "sklearn.metrics.cluster.supervised.adjusted_rand_score",
+    "sklearn.metrics.cluster.supervised.check_clusterings", "sklearn.metrics.cluster.supervised.comb2",
+    "sklearn.metrics.cluster.supervised.completeness_score", "sklearn.metrics.cluster.supervised.contingency_matrix",
+    "sklearn.metrics.cluster.supervised.entropy", "sklearn.metrics.cluster.supervised.fowlkes_mallows_score",
+    "sklearn.metrics.cluster.supervised.homogeneity_completeness_v_measure", "sklearn.metrics.cluster.supervised.homogeneity_score",
+    "sklearn.metrics.cluster.supervised.mutual_info_score", "sklearn.metrics.cluster.supervised.normalized_mutual_info_score",
+    "sklearn.metrics.cluster.supervised.v_measure_score", "sklearn.metrics.cluster.unsupervised.calinski_harabaz_score",
+    "sklearn.metrics.cluster.unsupervised.check_number_of_labels", "sklearn.metrics.cluster.unsupervised.silhouette_samples",
+    "sklearn.metrics.cluster.unsupervised.silhouette_score", "sklearn.metrics.cluster.v_measure_score",
+    "sklearn.metrics.cohen_kappa_score", "sklearn.metrics.completeness_score",
+    "sklearn.metrics.confusion_matrix", "sklearn.metrics.consensus_score",
+    "sklearn.metrics.coverage_error", "sklearn.metrics.euclidean_distances",
+    "sklearn.metrics.explained_variance_score", "sklearn.metrics.f1_score",
+    "sklearn.metrics.fbeta_score", "sklearn.metrics.fowlkes_mallows_score",
+    "sklearn.metrics.get_scorer", "sklearn.metrics.hamming_loss",
+    "sklearn.metrics.hinge_loss", "sklearn.metrics.homogeneity_completeness_v_measure",
+    "sklearn.metrics.homogeneity_score", "sklearn.metrics.jaccard_similarity_score",
+    "sklearn.metrics.label_ranking_average_precision_score", "sklearn.metrics.label_ranking_loss",
+    "sklearn.metrics.log_loss", "sklearn.metrics.make_scorer",
+    "sklearn.metrics.matthews_corrcoef", "sklearn.metrics.mean_absolute_error",
+    "sklearn.metrics.mean_squared_error", "sklearn.metrics.mean_squared_log_error",
+    "sklearn.metrics.median_absolute_error", "sklearn.metrics.mutual_info_score",
+    "sklearn.metrics.normalized_mutual_info_score", "sklearn.metrics.pairwise.KERNEL_PARAMS",
+    "sklearn.metrics.pairwise.PAIRED_DISTANCES", "sklearn.metrics.pairwise.PAIRWISE_BOOLEAN_FUNCTIONS",
+    "sklearn.metrics.pairwise.PAIRWISE_DISTANCE_FUNCTIONS", "sklearn.metrics.pairwise.PAIRWISE_KERNEL_FUNCTIONS",
+    "sklearn.metrics.pairwise._VALID_METRICS", "sklearn.metrics.pairwise._chi2_kernel_fast",
+    "sklearn.metrics.pairwise._pairwise_callable", "sklearn.metrics.pairwise._parallel_pairwise",
+    "sklearn.metrics.pairwise._return_float_dtype", "sklearn.metrics.pairwise._sparse_manhattan",
+    "sklearn.metrics.pairwise.additive_chi2_kernel", "sklearn.metrics.pairwise.check_paired_arrays",
+    "sklearn.metrics.pairwise.check_pairwise_arrays", "sklearn.metrics.pairwise.chi2_kernel",
+    "sklearn.metrics.pairwise.cosine_distances", "sklearn.metrics.pairwise.cosine_similarity",
+    "sklearn.metrics.pairwise.distance_metrics", "sklearn.metrics.pairwise.euclidean_distances",
+    "sklearn.metrics.pairwise.kernel_metrics", "sklearn.metrics.pairwise.laplacian_kernel",
+    "sklearn.metrics.pairwise.linear_kernel", "sklearn.metrics.pairwise.manhattan_distances",
+    "sklearn.metrics.pairwise.paired_cosine_distances", "sklearn.metrics.pairwise.paired_distances",
+    "sklearn.metrics.pairwise.paired_euclidean_distances", "sklearn.metrics.pairwise.paired_manhattan_distances",
+    "sklearn.metrics.pairwise.pairwise_distances", "sklearn.metrics.pairwise.pairwise_distances_argmin",
+    "sklearn.metrics.pairwise.pairwise_distances_argmin_min", "sklearn.metrics.pairwise.pairwise_kernels",
+    "sklearn.metrics.pairwise.polynomial_kernel", "sklearn.metrics.pairwise.rbf_kernel",
+    "sklearn.metrics.pairwise.sigmoid_kernel", "sklearn.metrics.pairwise_distances",
+    "sklearn.metrics.pairwise_distances_argmin", "sklearn.metrics.pairwise_distances_argmin_min",
+    "sklearn.metrics.pairwise_fast._chi2_kernel_fast", "sklearn.metrics.pairwise_fast._sparse_manhattan",
+    "sklearn.metrics.pairwise_kernels", "sklearn.metrics.precision_recall_curve",
+    "sklearn.metrics.precision_recall_fscore_support", "sklearn.metrics.precision_score",
+    "sklearn.metrics.r2_score", "sklearn.metrics.ranking._binary_clf_curve",
+    "sklearn.metrics.ranking.auc", "sklearn.metrics.ranking.average_precision_score",
+    "sklearn.metrics.ranking.coverage_error", "sklearn.metrics.ranking.label_ranking_average_precision_score",
+    "sklearn.metrics.ranking.label_ranking_loss", "sklearn.metrics.ranking.precision_recall_curve",
+    "sklearn.metrics.ranking.roc_auc_score", "sklearn.metrics.ranking.roc_curve",
+    "sklearn.metrics.recall_score", "sklearn.metrics.regression._check_reg_targets",
+    "sklearn.metrics.regression.explained_variance_score", "sklearn.metrics.regression.mean_absolute_error",
+    "sklearn.metrics.regression.mean_squared_error", "sklearn.metrics.regression.mean_squared_log_error",
+    "sklearn.metrics.regression.median_absolute_error", "sklearn.metrics.regression.r2_score",
+    "sklearn.metrics.regression.string_types", "sklearn.metrics.roc_auc_score",
+    "sklearn.metrics.roc_curve", "sklearn.metrics.scorer.SCORERS",
+    "sklearn.metrics.scorer._BaseScorer", "sklearn.metrics.scorer._PredictScorer",
+    "sklearn.metrics.scorer._ProbaScorer", "sklearn.metrics.scorer._ThresholdScorer",
+    "sklearn.metrics.scorer._check_multimetric_scoring", "sklearn.metrics.scorer._passthrough_scorer",
+    "sklearn.metrics.scorer.accuracy_scorer", "sklearn.metrics.scorer.adjusted_mutual_info_scorer",
+    "sklearn.metrics.scorer.adjusted_rand_scorer", "sklearn.metrics.scorer.average",
+    "sklearn.metrics.scorer.average_precision_scorer", "sklearn.metrics.scorer.check_scoring",
+    "sklearn.metrics.scorer.completeness_scorer", "sklearn.metrics.scorer.deprecation_msg",
+    "sklearn.metrics.scorer.explained_variance_scorer", "sklearn.metrics.scorer.f1_scorer",
+    "sklearn.metrics.scorer.fowlkes_mallows_scorer", "sklearn.metrics.scorer.get_scorer",
+    "sklearn.metrics.scorer.homogeneity_scorer", "sklearn.metrics.scorer.log_loss_scorer",
+    "sklearn.metrics.scorer.make_scorer", "sklearn.metrics.scorer.mean_absolute_error_scorer",
+    "sklearn.metrics.scorer.mean_squared_error_scorer", "sklearn.metrics.scorer.median_absolute_error_scorer",
+    "sklearn.metrics.scorer.mutual_info_scorer", "sklearn.metrics.scorer.name",
+    "sklearn.metrics.scorer.neg_log_loss_scorer", "sklearn.metrics.scorer.neg_mean_absolute_error_scorer",
+    "sklearn.metrics.scorer.neg_mean_squared_error_scorer", "sklearn.metrics.scorer.neg_mean_squared_log_error_scorer",
+    "sklearn.metrics.scorer.neg_median_absolute_error_scorer", "sklearn.metrics.scorer.normalized_mutual_info_scorer",
+    "sklearn.metrics.scorer.precision_scorer", "sklearn.metrics.scorer.qualified_name",
+    "sklearn.metrics.scorer.r2_scorer", "sklearn.metrics.scorer.recall_scorer",
+    "sklearn.metrics.scorer.roc_auc_scorer", "sklearn.metrics.scorer.v_measure_scorer",
+    "sklearn.metrics.silhouette_samples", "sklearn.metrics.silhouette_score",
+    "sklearn.metrics.v_measure_score", "sklearn.metrics.zero_one_loss",
+    "sklearn.model_selection.BaseCrossValidator", "sklearn.model_selection.GridSearchCV",
+    "sklearn.model_selection.GroupKFold", "sklearn.model_selection.GroupShuffleSplit",
+    "sklearn.model_selection.KFold", "sklearn.model_selection.LeaveOneGroupOut",
+    "sklearn.model_selection.LeaveOneOut", "sklearn.model_selection.LeavePGroupsOut",
+    "sklearn.model_selection.LeavePOut", "sklearn.model_selection.ParameterGrid",
+    "sklearn.model_selection.ParameterSampler", "sklearn.model_selection.PredefinedSplit",
+    "sklearn.model_selection.RandomizedSearchCV", "sklearn.model_selection.RepeatedKFold",
+    "sklearn.model_selection.RepeatedStratifiedKFold", "sklearn.model_selection.ShuffleSplit",
+    "sklearn.model_selection.StratifiedKFold", "sklearn.model_selection.StratifiedShuffleSplit",
+    "sklearn.model_selection.TimeSeriesSplit", "sklearn.model_selection._search.BaseSearchCV",
+    "sklearn.model_selection._search.GridSearchCV", "sklearn.model_selection._search.ParameterGrid",
+    "sklearn.model_selection._search.ParameterSampler", "sklearn.model_selection._search.RandomizedSearchCV",
+    "sklearn.model_selection._search._CVScoreTuple", "sklearn.model_selection._search._check_param_grid",
+    "sklearn.model_selection._search.fit_grid_point", "sklearn.model_selection._search.sp_version",
+    "sklearn.model_selection._split.BaseCrossValidator", "sklearn.model_selection._split.BaseShuffleSplit",
+    "sklearn.model_selection._split.GroupKFold", "sklearn.model_selection._split.GroupShuffleSplit",
+    "sklearn.model_selection._split.KFold", "sklearn.model_selection._split.LeaveOneGroupOut",
+    "sklearn.model_selection._split.LeaveOneOut", "sklearn.model_selection._split.LeavePGroupsOut",
+    "sklearn.model_selection._split.LeavePOut", "sklearn.model_selection._split.PredefinedSplit",
+    "sklearn.model_selection._split.RepeatedKFold", "sklearn.model_selection._split.RepeatedStratifiedKFold",
+    "sklearn.model_selection._split.ShuffleSplit", "sklearn.model_selection._split.StratifiedKFold",
+    "sklearn.model_selection._split.StratifiedShuffleSplit", "sklearn.model_selection._split.TimeSeriesSplit",
+    "sklearn.model_selection._split._BaseKFold", "sklearn.model_selection._split._CVIterableWrapper",
+    "sklearn.model_selection._split._RepeatedSplits", "sklearn.model_selection._split._approximate_mode",
+    "sklearn.model_selection._split._build_repr", "sklearn.model_selection._split._validate_shuffle_split",
+    "sklearn.model_selection._split._validate_shuffle_split_init", "sklearn.model_selection._split.check_cv",
+    "sklearn.model_selection._split.train_test_split", "sklearn.model_selection._validation._aggregate_score_dicts",
+    "sklearn.model_selection._validation._check_is_permutation", "sklearn.model_selection._validation._fit_and_predict",
+    "sklearn.model_selection._validation._fit_and_score", "sklearn.model_selection._validation._incremental_fit_estimator",
+    "sklearn.model_selection._validation._index_param_value", "sklearn.model_selection._validation._multimetric_score",
+    "sklearn.model_selection._validation._permutation_test_score", "sklearn.model_selection._validation._score",
+    "sklearn.model_selection._validation._shuffle", "sklearn.model_selection._validation._translate_train_sizes",
+    "sklearn.model_selection._validation.cross_val_predict", "sklearn.model_selection._validation.cross_val_score",
+    "sklearn.model_selection._validation.cross_validate", "sklearn.model_selection._validation.learning_curve",
+    "sklearn.model_selection._validation.permutation_test_score", "sklearn.model_selection._validation.validation_curve",
+    "sklearn.model_selection.check_cv", "sklearn.model_selection.cross_val_predict",
+    "sklearn.model_selection.cross_val_score", "sklearn.model_selection.cross_validate",
+    "sklearn.model_selection.fit_grid_point", "sklearn.model_selection.learning_curve",
+    "sklearn.model_selection.permutation_test_score", "sklearn.model_selection.train_test_split",
+    "sklearn.model_selection.validation_curve", "sklearn.multiclass.OneVsOneClassifier",
+    "sklearn.multiclass.OneVsRestClassifier", "sklearn.multiclass.OutputCodeClassifier",
+    "sklearn.multiclass._ConstantPredictor", "sklearn.multiclass._check_estimator",
+    "sklearn.multiclass._fit_binary", "sklearn.multiclass._fit_ovo_binary",
+    "sklearn.multiclass._partial_fit_binary", "sklearn.multiclass._partial_fit_ovo_binary",
+    "sklearn.multiclass._predict_binary", "sklearn.naive_bayes.BaseDiscreteNB",
+    "sklearn.naive_bayes.BaseNB", "sklearn.naive_bayes.BernoulliNB",
+    "sklearn.naive_bayes.GaussianNB", "sklearn.naive_bayes.MultinomialNB",
+    "sklearn.naive_bayes._ALPHA_MIN", "sklearn.neighbors.BallTree",
+    "sklearn.neighbors.DistanceMetric", "sklearn.neighbors.KDTree",
+    "sklearn.neighbors.KNeighborsClassifier", "sklearn.neighbors.KNeighborsRegressor",
+    "sklearn.neighbors.KernelDensity", "sklearn.neighbors.LSHForest",
+    "sklearn.neighbors.LocalOutlierFactor", "sklearn.neighbors.NearestCentroid",
+    "sklearn.neighbors.NearestNeighbors", "sklearn.neighbors.RadiusNeighborsClassifier",
+    "sklearn.neighbors.RadiusNeighborsRegressor", "sklearn.neighbors.approximate.GaussianRandomProjectionHash",
+    "sklearn.neighbors.approximate.HASH_DTYPE", "sklearn.neighbors.approximate.LSHForest",
+    "sklearn.neighbors.approximate.MAX_HASH_SIZE", "sklearn.neighbors.approximate.ProjectionToHashMixin",
+    "sklearn.neighbors.approximate._array_of_arrays", "sklearn.neighbors.approximate._find_longest_prefix_match",
+    "sklearn.neighbors.approximate._find_matching_indices", "sklearn.neighbors.ball_tree.BallTree",
+    "sklearn.neighbors.ball_tree.BinaryTree", "sklearn.neighbors.ball_tree.CLASS_DOC",
+    "sklearn.neighbors.ball_tree.DOC_DICT", "sklearn.neighbors.ball_tree.NeighborsHeap",
+    "sklearn.neighbors.ball_tree.NodeData", "sklearn.neighbors.ball_tree.NodeHeap",
+    "sklearn.neighbors.ball_tree.NodeHeapData", "sklearn.neighbors.ball_tree.VALID_METRICS",
+    "sklearn.neighbors.ball_tree.VALID_METRIC_IDS", "sklearn.neighbors.ball_tree.kernel_norm",
+    "sklearn.neighbors.ball_tree.load_heap", "sklearn.neighbors.ball_tree.newObj",
+    "sklearn.neighbors.ball_tree.nodeheap_sort", "sklearn.neighbors.ball_tree.offsets",
+    "sklearn.neighbors.ball_tree.simultaneous_sort", "sklearn.neighbors.base.KNeighborsMixin",
+    "sklearn.neighbors.base.NeighborsBase", "sklearn.neighbors.base.PAIRWISE_DISTANCE_FUNCTIONS",
+    "sklearn.neighbors.base.RadiusNeighborsMixin", "sklearn.neighbors.base.SupervisedFloatMixin",
+    "sklearn.neighbors.base.SupervisedIntegerMixin", "sklearn.neighbors.base.UnsupervisedMixin",
+    "sklearn.neighbors.base.VALID_METRICS", "sklearn.neighbors.base.VALID_METRICS_SPARSE",
+    "sklearn.neighbors.base._check_weights", "sklearn.neighbors.base._get_weights",
+    "sklearn.neighbors.classification.KNeighborsClassifier", "sklearn.neighbors.classification.RadiusNeighborsClassifier",
+    "sklearn.neighbors.dist_metrics.BrayCurtisDistance", "sklearn.neighbors.dist_metrics.CanberraDistance",
+    "sklearn.neighbors.dist_metrics.ChebyshevDistance", "sklearn.neighbors.dist_metrics.DiceDistance",
+    "sklearn.neighbors.dist_metrics.DistanceMetric", "sklearn.neighbors.dist_metrics.EuclideanDistance",
+    "sklearn.neighbors.dist_metrics.HammingDistance", "sklearn.neighbors.dist_metrics.HaversineDistance",
+    "sklearn.neighbors.dist_metrics.JaccardDistance", "sklearn.neighbors.dist_metrics.KulsinskiDistance",
+    "sklearn.neighbors.dist_metrics.METRIC_MAPPING", "sklearn.neighbors.dist_metrics.MahalanobisDistance",
+    "sklearn.neighbors.dist_metrics.ManhattanDistance", "sklearn.neighbors.dist_metrics.MatchingDistance",
+    "sklearn.neighbors.dist_metrics.MinkowskiDistance", "sklearn.neighbors.dist_metrics.PyFuncDistance",
+    "sklearn.neighbors.dist_metrics.RogersTanimotoDistance", "sklearn.neighbors.dist_metrics.RussellRaoDistance",
+    "sklearn.neighbors.dist_metrics.SEuclideanDistance", "sklearn.neighbors.dist_metrics.SokalMichenerDistance",
+    "sklearn.neighbors.dist_metrics.SokalSneathDistance", "sklearn.neighbors.dist_metrics.WMinkowskiDistance",
+    "sklearn.neighbors.dist_metrics.get_valid_metric_ids", "sklearn.neighbors.dist_metrics.newObj",
+    "sklearn.neighbors.graph._check_params", "sklearn.neighbors.graph._query_include_self",
+    "sklearn.neighbors.graph.kneighbors_graph", "sklearn.neighbors.graph.radius_neighbors_graph",
+    "sklearn.neighbors.kd_tree.BinaryTree", "sklearn.neighbors.kd_tree.CLASS_DOC",
+    "sklearn.neighbors.kd_tree.DOC_DICT", "sklearn.neighbors.kd_tree.KDTree",
+    "sklearn.neighbors.kd_tree.NeighborsHeap", "sklearn.neighbors.kd_tree.NodeData",
+    "sklearn.neighbors.kd_tree.NodeHeap", "sklearn.neighbors.kd_tree.NodeHeapData",
+    "sklearn.neighbors.kd_tree.VALID_METRICS", "sklearn.neighbors.kd_tree.VALID_METRIC_IDS",
+    "sklearn.neighbors.kd_tree.kernel_norm", "sklearn.neighbors.kd_tree.load_heap",
+    "sklearn.neighbors.kd_tree.newObj", "sklearn.neighbors.kd_tree.nodeheap_sort",
+    "sklearn.neighbors.kd_tree.offsets", "sklearn.neighbors.kd_tree.simultaneous_sort",
+    "sklearn.neighbors.kde.KernelDensity", "sklearn.neighbors.kde.TREE_DICT",
+    "sklearn.neighbors.kde.VALID_KERNELS", "sklearn.neighbors.kde.gammainc",
+    "sklearn.neighbors.kneighbors_graph", "sklearn.neighbors.lof.LocalOutlierFactor",
+    "sklearn.neighbors.nearest_centroid.NearestCentroid", "sklearn.neighbors.quad_tree.CELL_DTYPE",
+    "sklearn.neighbors.quad_tree._QuadTree", "sklearn.neighbors.radius_neighbors_graph",
+    "sklearn.neighbors.regression.KNeighborsRegressor", "sklearn.neighbors.regression.RadiusNeighborsRegressor",
+    "sklearn.neighbors.unsupervised.NearestNeighbors", "sklearn.pipeline.FeatureUnion",
+    "sklearn.pipeline.Pipeline", "sklearn.pipeline._fit_one_transformer",
+    "sklearn.pipeline._fit_transform_one", "sklearn.pipeline._name_estimators",
+    "sklearn.pipeline._transform_one", "sklearn.pipeline.make_pipeline",
+    "sklearn.pipeline.make_union", "sklearn.preprocessing.Binarizer",
+    "sklearn.preprocessing.FunctionTransformer", "sklearn.preprocessing.Imputer",
+    "sklearn.preprocessing.KernelCenterer", "sklearn.preprocessing.LabelBinarizer",
+    "sklearn.preprocessing.LabelEncoder", "sklearn.preprocessing.MaxAbsScaler",
+    "sklearn.preprocessing.MinMaxScaler", "sklearn.preprocessing.MultiLabelBinarizer",
+    "sklearn.preprocessing.Normalizer", "sklearn.preprocessing.OneHotEncoder",
+    "sklearn.preprocessing.PolynomialFeatures", "sklearn.preprocessing.QuantileTransformer",
+    "sklearn.preprocessing.RobustScaler", "sklearn.preprocessing.StandardScaler",
+    "sklearn.preprocessing._function_transformer.FunctionTransformer", "sklearn.preprocessing._function_transformer._identity",
+    "sklearn.preprocessing._function_transformer.string_types", "sklearn.preprocessing.add_dummy_feature",
+    "sklearn.preprocessing.binarize", "sklearn.preprocessing.data.BOUNDS_THRESHOLD",
+    "sklearn.preprocessing.data.Binarizer", "sklearn.preprocessing.data.FLOAT_DTYPES",
+    "sklearn.preprocessing.data.KernelCenterer", "sklearn.preprocessing.data.MaxAbsScaler",
+    "sklearn.preprocessing.data.MinMaxScaler", "sklearn.preprocessing.data.Normalizer",
+    "sklearn.preprocessing.data.OneHotEncoder", "sklearn.preprocessing.data.PolynomialFeatures",
+    "sklearn.preprocessing.data.QuantileTransformer", "sklearn.preprocessing.data.RobustScaler",
+    "sklearn.preprocessing.data.StandardScaler", "sklearn.preprocessing.data._handle_zeros_in_scale",
+    "sklearn.preprocessing.data._transform_selected", "sklearn.preprocessing.data.add_dummy_feature",
+    "sklearn.preprocessing.data.binarize", "sklearn.preprocessing.data.maxabs_scale",
+    "sklearn.preprocessing.data.minmax_scale", "sklearn.preprocessing.data.normalize",
+    "sklearn.preprocessing.data.quantile_transform", "sklearn.preprocessing.data.robust_scale",
+    "sklearn.preprocessing.data.scale", "sklearn.preprocessing.data.string_types",
+    "sklearn.preprocessing.imputation.FLOAT_DTYPES", "sklearn.preprocessing.imputation.Imputer",
+    "sklearn.preprocessing.imputation._get_mask", "sklearn.preprocessing.imputation._most_frequent",
+    "sklearn.preprocessing.label.LabelBinarizer", "sklearn.preprocessing.label.LabelEncoder",
+    "sklearn.preprocessing.label.MultiLabelBinarizer", "sklearn.preprocessing.label._inverse_binarize_multiclass",
+    "sklearn.preprocessing.label._inverse_binarize_thresholding", "sklearn.preprocessing.label.label_binarize",
+    "sklearn.preprocessing.label_binarize", "sklearn.preprocessing.maxabs_scale",
+    "sklearn.preprocessing.minmax_scale", "sklearn.preprocessing.normalize",
+    "sklearn.preprocessing.quantile_transform", "sklearn.preprocessing.robust_scale",
+    "sklearn.preprocessing.scale", "sklearn.random_projection.BaseRandomProjection",
+    "sklearn.random_projection.GaussianRandomProjection", "sklearn.random_projection.SparseRandomProjection",
+    "sklearn.random_projection._check_density", "sklearn.random_projection._check_input_size",
+    "sklearn.random_projection.gaussian_random_matrix", "sklearn.random_projection.johnson_lindenstrauss_min_dim",
+    "sklearn.random_projection.sparse_random_matrix", "sklearn.set_config",
+    "sklearn.setup_module", "sklearn.svm.LinearSVC",
+    "sklearn.svm.LinearSVR", "sklearn.svm.NuSVC",
+    "sklearn.svm.NuSVR", "sklearn.svm.OneClassSVM",
+    "sklearn.svm.SVC", "sklearn.svm.SVR",
+    "sklearn.svm.base.BaseLibSVM", "sklearn.svm.base.BaseSVC",
+    "sklearn.svm.base.LIBSVM_IMPL", "sklearn.svm.base._fit_liblinear",
+    "sklearn.svm.base._get_liblinear_solver_type", "sklearn.svm.base._one_vs_one_coef",
+    "sklearn.svm.bounds.l1_min_c", "sklearn.svm.classes.LinearSVC",
+    "sklearn.svm.classes.LinearSVR", "sklearn.svm.classes.NuSVC",
+    "sklearn.svm.classes.NuSVR", "sklearn.svm.classes.OneClassSVM",
+    "sklearn.svm.classes.SVC", "sklearn.svm.classes.SVR",
+    "sklearn.svm.l1_min_c", "sklearn.svm.liblinear.set_verbosity_wrap",
+    "sklearn.svm.liblinear.train_wrap", "sklearn.svm.libsvm.LIBSVM_KERNEL_TYPES",
+    "sklearn.svm.libsvm.cross_validation", "sklearn.svm.libsvm.decision_function",
+    "sklearn.svm.libsvm.fit", "sklearn.svm.libsvm.predict",
+    "sklearn.svm.libsvm.predict_proba", "sklearn.svm.libsvm.set_verbosity_wrap",
+    "sklearn.svm.libsvm_sparse.libsvm_sparse_decision_function", "sklearn.svm.libsvm_sparse.libsvm_sparse_predict",
+    "sklearn.svm.libsvm_sparse.libsvm_sparse_predict_proba", "sklearn.svm.libsvm_sparse.libsvm_sparse_train",
+    "sklearn.svm.libsvm_sparse.set_verbosity_wrap", "sklearn.tree.DecisionTreeClassifier",
+    "sklearn.tree.DecisionTreeRegressor", "sklearn.tree.ExtraTreeClassifier",
+    "sklearn.tree.ExtraTreeRegressor", "sklearn.tree._criterion.ClassificationCriterion",
+    "sklearn.tree._criterion.Criterion", "sklearn.tree._criterion.Entropy",
+    "sklearn.tree._criterion.FriedmanMSE", "sklearn.tree._criterion.Gini",
+    "sklearn.tree._criterion.MAE", "sklearn.tree._criterion.MSE",
+    "sklearn.tree._criterion.RegressionCriterion", "sklearn.tree._splitter.BaseDenseSplitter",
+    "sklearn.tree._splitter.BaseSparseSplitter", "sklearn.tree._splitter.BestSparseSplitter",
+    "sklearn.tree._splitter.BestSplitter", "sklearn.tree._splitter.RandomSparseSplitter",
+    "sklearn.tree._splitter.RandomSplitter", "sklearn.tree._splitter.Splitter",
+    "sklearn.tree._tree.BestFirstTreeBuilder", "sklearn.tree._tree.DepthFirstTreeBuilder",
+    "sklearn.tree._tree.NODE_DTYPE", "sklearn.tree._tree.TREE_LEAF",
+    "sklearn.tree._tree.TREE_UNDEFINED", "sklearn.tree._tree.Tree",
+    "sklearn.tree._tree.TreeBuilder", "sklearn.tree._utils.PriorityHeap",
+    "sklearn.tree._utils.Stack", "sklearn.tree._utils.WeightedMedianCalculator",
+    "sklearn.tree._utils.WeightedPQueue", "sklearn.tree._utils._realloc_test",
+    "sklearn.tree.export.SENTINEL", "sklearn.tree.export.Sentinel",
+    "sklearn.tree.export._color_brew", "sklearn.tree.export.export_graphviz",
+    "sklearn.tree.export_graphviz", "sklearn.tree.tree.BaseDecisionTree",
+    "sklearn.tree.tree.CRITERIA_CLF", "sklearn.tree.tree.CRITERIA_REG",
+    "sklearn.tree.tree.DENSE_SPLITTERS", "sklearn.tree.tree.DecisionTreeClassifier",
+    "sklearn.tree.tree.DecisionTreeRegressor", "sklearn.tree.tree.ExtraTreeClassifier",
+    "sklearn.tree.tree.ExtraTreeRegressor", "sklearn.tree.tree.SPARSE_SPLITTERS",
+    "sklearn.utils.Bunch", "sklearn.utils._get_n_jobs",
+    "sklearn.utils._logistic_sigmoid._log_logistic_sigmoid", "sklearn.utils._random._sample_without_replacement_check_input",
+    "sklearn.utils._random._sample_without_replacement_with_pool", "sklearn.utils._random._sample_without_replacement_with_reservoir_sampling",
+    "sklearn.utils._random._sample_without_replacement_with_tracking_selection", "sklearn.utils._random.sample_without_replacement",
+    "sklearn.utils.arrayfuncs.cholesky_delete", "sklearn.utils.arrayfuncs.min_pos",
+    "sklearn.utils.as_float_array", "sklearn.utils.assert_all_finite",
+    "sklearn.utils.axis0_safe_slice", "sklearn.utils.check_X_y",
+    "sklearn.utils.check_array", "sklearn.utils.check_consistent_length",
+    "sklearn.utils.check_random_state", "sklearn.utils.check_symmetric",
+    "sklearn.utils.class_weight.compute_class_weight", "sklearn.utils.class_weight.compute_sample_weight",
+    "sklearn.utils.column_or_1d", "sklearn.utils.compute_class_weight",
+    "sklearn.utils.compute_sample_weight", "sklearn.utils.deprecated",
+    "sklearn.utils.deprecation.DeprecationDict", "sklearn.utils.deprecation._is_deprecated",
+    "sklearn.utils.deprecation.deprecated", "sklearn.utils.extmath._deterministic_vector_sign_flip",
+    "sklearn.utils.extmath._impose_f_order", "sklearn.utils.extmath._incremental_mean_and_var",
+    "sklearn.utils.extmath.cartesian", "sklearn.utils.extmath.density",
+    "sklearn.utils.extmath.fast_dot", "sklearn.utils.extmath.fast_logdet",
+    "sklearn.utils.extmath.log_logistic", "sklearn.utils.extmath.logsumexp",
+    "sklearn.utils.extmath.make_nonnegative", "sklearn.utils.extmath.norm",
+    "sklearn.utils.extmath.np_version", "sklearn.utils.extmath.pinvh",
+    "sklearn.utils.extmath.randomized_range_finder", "sklearn.utils.extmath.randomized_svd",
+    "sklearn.utils.extmath.row_norms", "sklearn.utils.extmath.safe_min",
+    "sklearn.utils.extmath.safe_sparse_dot", "sklearn.utils.extmath.softmax",
+    "sklearn.utils.extmath.squared_norm", "sklearn.utils.extmath.stable_cumsum",
+    "sklearn.utils.extmath.svd_flip", "sklearn.utils.extmath.weighted_mode",
+    "sklearn.utils.fast_dict.IntFloatDict", "sklearn.utils.fast_dict.argmin",
+    "sklearn.utils.fixes._parse_version", "sklearn.utils.fixes.divide",
+    "sklearn.utils.fixes.euler_gamma", "sklearn.utils.fixes.makedirs",
+    "sklearn.utils.fixes.np_version", "sklearn.utils.fixes.parallel_helper",
+    "sklearn.utils.fixes.sp_version", "sklearn.utils.fixes.sparse_min_max",
+    "sklearn.utils.gen_batches", "sklearn.utils.gen_even_slices",
+    "sklearn.utils.graph.connected_components", "sklearn.utils.graph.graph_laplacian",
+    "sklearn.utils.graph.graph_shortest_path", "sklearn.utils.graph.single_source_shortest_path_length",
+    "sklearn.utils.graph_shortest_path.graph_shortest_path", "sklearn.utils.indexable",
+    "sklearn.utils.indices_to_mask", "sklearn.utils.linear_assignment_._HungarianState",
+    "sklearn.utils.linear_assignment_._hungarian", "sklearn.utils.linear_assignment_._step1",
+    "sklearn.utils.linear_assignment_._step3", "sklearn.utils.linear_assignment_._step4",
+    "sklearn.utils.linear_assignment_._step5", "sklearn.utils.linear_assignment_._step6",
+    "sklearn.utils.linear_assignment_.linear_assignment", "sklearn.utils.metaestimators._BaseComposition",
+    "sklearn.utils.metaestimators._IffHasAttrDescriptor", "sklearn.utils.metaestimators._safe_split",
+    "sklearn.utils.metaestimators.if_delegate_has_method", "sklearn.utils.multiclass._FN_UNIQUE_LABELS",
+    "sklearn.utils.multiclass._check_partial_fit_first_call", "sklearn.utils.multiclass._is_integral_float",
+    "sklearn.utils.multiclass._ovr_decision_function", "sklearn.utils.multiclass._unique_indicator",
+    "sklearn.utils.multiclass._unique_multiclass", "sklearn.utils.multiclass.check_classification_targets",
+    "sklearn.utils.multiclass.class_distribution", "sklearn.utils.multiclass.is_multilabel",
+    "sklearn.utils.multiclass.string_types", "sklearn.utils.multiclass.type_of_target",
+    "sklearn.utils.multiclass.unique_labels", "sklearn.utils.murmurhash.murmurhash3_32",
+    "sklearn.utils.murmurhash.murmurhash3_bytes_array_s32", "sklearn.utils.murmurhash.murmurhash3_bytes_array_u32",
+    "sklearn.utils.murmurhash.murmurhash3_bytes_s32", "sklearn.utils.murmurhash.murmurhash3_bytes_u32",
+    "sklearn.utils.murmurhash.murmurhash3_int_s32", "sklearn.utils.murmurhash.murmurhash3_int_u32",
+    "sklearn.utils.murmurhash3_32", "sklearn.utils.optimize._LineSearchError",
+    "sklearn.utils.optimize._cg", "sklearn.utils.optimize._line_search_wolfe12",
+    "sklearn.utils.optimize.newton_cg", "sklearn.utils.random.choice",
+    "sklearn.utils.random.random_choice_csc", "sklearn.utils.resample",
+    "sklearn.utils.safe_indexing", "sklearn.utils.safe_mask",
+    "sklearn.utils.safe_sqr", "sklearn.utils.seq_dataset.ArrayDataset",
+    "sklearn.utils.seq_dataset.CSRDataset", "sklearn.utils.seq_dataset.SequentialDataset",
+    "sklearn.utils.shuffle", "sklearn.utils.sparsefuncs._csc_mean_var_axis0",
+    "sklearn.utils.sparsefuncs._csr_mean_var_axis0", "sklearn.utils.sparsefuncs._get_elem_at_rank",
+    "sklearn.utils.sparsefuncs._get_median", "sklearn.utils.sparsefuncs._incr_mean_var_axis0",
+    "sklearn.utils.sparsefuncs._raise_error_wrong_axis", "sklearn.utils.sparsefuncs._raise_typeerror",
+    "sklearn.utils.sparsefuncs.count_nonzero", "sklearn.utils.sparsefuncs.csc_median_axis_0",
+    "sklearn.utils.sparsefuncs.incr_mean_variance_axis", "sklearn.utils.sparsefuncs.inplace_column_scale",
+    "sklearn.utils.sparsefuncs.inplace_csr_column_scale", "sklearn.utils.sparsefuncs.inplace_csr_row_scale",
+    "sklearn.utils.sparsefuncs.inplace_row_scale", "sklearn.utils.sparsefuncs.inplace_swap_column",
+    "sklearn.utils.sparsefuncs.inplace_swap_row", "sklearn.utils.sparsefuncs.inplace_swap_row_csc",
+    "sklearn.utils.sparsefuncs.inplace_swap_row_csr", "sklearn.utils.sparsefuncs.mean_variance_axis",
+    "sklearn.utils.sparsefuncs.min_max_axis", "sklearn.utils.sparsefuncs_fast._csc_mean_variance_axis0",
+    "sklearn.utils.sparsefuncs_fast._csr_mean_variance_axis0", "sklearn.utils.sparsefuncs_fast._csr_row_norms",
+    "sklearn.utils.sparsefuncs_fast._incr_mean_variance_axis0", "sklearn.utils.sparsefuncs_fast._inplace_csr_row_normalize_l1",
+    "sklearn.utils.sparsefuncs_fast._inplace_csr_row_normalize_l2", "sklearn.utils.sparsefuncs_fast.assign_rows_csr",
+    "sklearn.utils.sparsefuncs_fast.csc_mean_variance_axis0", "sklearn.utils.sparsefuncs_fast.csr_mean_variance_axis0",
+    "sklearn.utils.sparsefuncs_fast.csr_row_norms", "sklearn.utils.sparsefuncs_fast.incr_mean_variance_axis0",
+    "sklearn.utils.sparsefuncs_fast.inplace_csr_row_normalize_l1", "sklearn.utils.sparsefuncs_fast.inplace_csr_row_normalize_l2",
+    "sklearn.utils.stats._weighted_percentile", "sklearn.utils.stats.rankdata",
+    "sklearn.utils.tosequence", "sklearn.utils.validation.FLOAT_DTYPES",
+    "sklearn.utils.validation._assert_all_finite", "sklearn.utils.validation._ensure_sparse_format",
+    "sklearn.utils.validation._is_arraylike", "sklearn.utils.validation._num_samples",
+    "sklearn.utils.validation._shape_repr", "sklearn.utils.validation.as_float_array",
+    "sklearn.utils.validation.assert_all_finite", "sklearn.utils.validation.check_X_y",
+    "sklearn.utils.validation.check_array", "sklearn.utils.validation.check_consistent_length",
+    "sklearn.utils.validation.check_is_fitted", "sklearn.utils.validation.check_memory",
+    "sklearn.utils.validation.check_non_negative", "sklearn.utils.validation.check_random_state",
+    "sklearn.utils.validation.check_symmetric", "sklearn.utils.validation.column_or_1d",
+    "sklearn.utils.validation.has_fit_parameter", "sklearn.utils.validation.indexable",
+    "sklearn.utils.weight_vector.WeightVector"
+],
+
+  "SKR_NAMES": [
+    "skrebate.MultiSURF", "skrebate.MultiSURFstar",
+    "skrebate.ReliefF", "skrebate.SURF",
+    "skrebate.SURFstar", "skrebate.TuRF",
+    "skrebate.multisurf.MultiSURF", "skrebate.multisurfstar.MultiSURFstar",
+    "skrebate.relieff.ReliefF", "skrebate.scoring_utils.MultiSURF_compute_scores",
+    "skrebate.scoring_utils.MultiSURFstar_compute_scores", "skrebate.scoring_utils.ReliefF_compute_scores",
+    "skrebate.scoring_utils.SURF_compute_scores", "skrebate.scoring_utils.SURFstar_compute_scores",
+    "skrebate.scoring_utils.compute_score", "skrebate.scoring_utils.get_row_missing",
+    "skrebate.scoring_utils.ramp_function", "skrebate.surf.SURF",
+    "skrebate.surfstar.SURFstar", "skrebate.turf.TuRF"
+  ],
+
+  "XGB_NAMES": [
+    "xgboost.Booster", "xgboost.DMatrix",
+    "xgboost.VERSION_FILE", "xgboost.XGBClassifier",
+    "xgboost.XGBModel", "xgboost.XGBRegressor",
+    "xgboost.callback._fmt_metric", "xgboost.callback._get_callback_context",
+    "xgboost.callback.early_stop", "xgboost.callback.print_evaluation",
+    "xgboost.callback.record_evaluation", "xgboost.callback.reset_learning_rate",
+    "xgboost.compat.PANDAS_INSTALLED", "xgboost.compat.PY3",
+    "xgboost.compat.SKLEARN_INSTALLED", "xgboost.compat.STRING_TYPES",
+    "xgboost.compat.py_str", "xgboost.core.Booster",
+    "xgboost.core.CallbackEnv", "xgboost.core.DMatrix",
+    "xgboost.core.EarlyStopException", "xgboost.core.PANDAS_DTYPE_MAPPER",
+    "xgboost.core.PANDAS_INSTALLED", "xgboost.core.PY3",
+    "xgboost.core.STRING_TYPES", "xgboost.core.XGBoostError",
+    "xgboost.core._check_call", "xgboost.core._load_lib",
+    "xgboost.core._maybe_pandas_data", "xgboost.core._maybe_pandas_label",
+    "xgboost.core.c_array", "xgboost.core.c_str",
+    "xgboost.core.ctypes2buffer", "xgboost.core.ctypes2numpy",
+    "xgboost.core.from_cstr_to_pystr", "xgboost.core.from_pystr_to_cstr",
+    "xgboost.cv", "xgboost.f",
+    "xgboost.libpath.XGBoostLibraryNotFound", "xgboost.libpath.find_lib_path",
+    "xgboost.plot_importance", "xgboost.plot_tree",
+    "xgboost.plotting._EDGEPAT", "xgboost.plotting._EDGEPAT2",
+    "xgboost.plotting._LEAFPAT", "xgboost.plotting._NODEPAT",
+    "xgboost.plotting._parse_edge", "xgboost.plotting._parse_node",
+    "xgboost.plotting.plot_importance", "xgboost.plotting.plot_tree",
+    "xgboost.plotting.to_graphviz", "xgboost.rabit.DTYPE_ENUM__",
+    "xgboost.rabit.STRING_TYPES", "xgboost.rabit._init_rabit",
+    "xgboost.rabit.allreduce", "xgboost.rabit.broadcast",
+    "xgboost.rabit.finalize", "xgboost.rabit.get_processor_name",
+    "xgboost.rabit.get_rank", "xgboost.rabit.get_world_size",
+    "xgboost.rabit.init", "xgboost.rabit.tracker_print",
+    "xgboost.rabit.version_number", "xgboost.sklearn.SKLEARN_INSTALLED",
+    "xgboost.sklearn.XGBClassifier", "xgboost.sklearn.XGBModel",
+    "xgboost.sklearn.XGBRegressor", "xgboost.sklearn._objective_decorator",
+    "xgboost.to_graphviz", "xgboost.train",
+    "xgboost.training.CVPack", "xgboost.training.SKLEARN_INSTALLED",
+    "xgboost.training.STRING_TYPES", "xgboost.training._train_internal",
+    "xgboost.training.aggcv", "xgboost.training.cv",
+    "xgboost.training.mknfold", "xgboost.training.train"
+  ],
+
+
+  "NUMPY_NAMES": [
+    "numpy.core.multiarray._reconstruct", "numpy.ndarray",
+    "numpy.dtype", "numpy.core.multiarray.scalar", "numpy.random.__RandomState_ctor",
+    "numpy.ma.core._mareconstruct", "numpy.ma.core.MaskedArray"
+  ],
+
+  "IMBLEARN_NAMES":[
+    "imblearn.pipeline.Pipeline", "imblearn.over_sampling._random_over_sampler.RandomOverSampler",
+    "imblearn.under_sampling._prototype_selection._edited_nearest_neighbours.EditedNearestNeighbours"
+  ],
+
+  "MLXTEND_NAMES":[
+    "mlxtend.classifier.stacking_cv_classification.StackingCVClassifier",
+    "mlxtend.classifier.stacking_classification.StackingClassifier",
+    "mlxtend.regressor.stacking_cv_regression.StackingCVRegressor",
+    "mlxtend.regressor.stacking_regression.StackingRegressor"
+  ]
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/preprocessors.py	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,184 @@
+"""
+Z_RandomOverSampler
+"""
+
+import imblearn
+import numpy as np
+
+from collections import Counter
+from imblearn.over_sampling.base import BaseOverSampler
+from imblearn.over_sampling import RandomOverSampler
+from imblearn.pipeline import Pipeline as imbPipeline
+from imblearn.utils import check_target_type
+from scipy import sparse
+from sklearn.base import BaseEstimator, TransformerMixin
+from sklearn.preprocessing.data import _handle_zeros_in_scale
+from sklearn.utils import check_array, safe_indexing
+from sklearn.utils.fixes import nanpercentile
+from sklearn.utils.validation import (check_is_fitted, check_X_y,
+                                      FLOAT_DTYPES)
+
+
+class Z_RandomOverSampler(BaseOverSampler):
+
+    def __init__(self, sampling_strategy='auto',
+                 return_indices=False,
+                 random_state=None,
+                 ratio=None,
+                 negative_thres=0,
+                 positive_thres=-1):
+        super(Z_RandomOverSampler, self).__init__(
+            sampling_strategy=sampling_strategy, ratio=ratio)
+        self.random_state = random_state
+        self.return_indices = return_indices
+        self.negative_thres = negative_thres
+        self.positive_thres = positive_thres
+
+    @staticmethod
+    def _check_X_y(X, y):
+        y, binarize_y = check_target_type(y, indicate_one_vs_all=True)
+        X, y = check_X_y(X, y, accept_sparse=['csr', 'csc'], dtype=None)
+        return X, y, binarize_y
+
+    def _fit_resample(self, X, y):
+        n_samples = X.shape[0]
+
+        # convert y to z_score
+        y_z = (y - y.mean()) / y.std()
+
+        index0 = np.arange(n_samples)
+        index_negative = index0[y_z > self.negative_thres]
+        index_positive = index0[y_z <= self.positive_thres]
+        index_unclassified = [x for x in index0
+                              if x not in index_negative
+                              and x not in index_positive]
+
+        y_z[index_negative] = 0
+        y_z[index_positive] = 1
+        y_z[index_unclassified] = -1
+
+        ros = RandomOverSampler(
+            sampling_strategy=self.sampling_strategy,
+            random_state=self.random_state,
+            ratio=self.ratio)
+        _, _ = ros.fit_resample(X, y_z)
+        sample_indices = ros.sample_indices_
+
+        print("Before sampler: %s. Total after: %s"
+              % (Counter(y_z), sample_indices.shape))
+
+        self.sample_indices_ = np.array(sample_indices)
+
+        if self.return_indices:
+            return (safe_indexing(X, sample_indices),
+                    safe_indexing(y, sample_indices),
+                    sample_indices)
+        return (safe_indexing(X, sample_indices),
+                safe_indexing(y, sample_indices))
+
+
+def _get_quantiles(X, quantile_range):
+    """
+    Calculate column percentiles for 2d array
+
+    Parameters
+    ----------
+    X : array-like, shape [n_samples, n_features]
+    """
+    quantiles = []
+    for feature_idx in range(X.shape[1]):
+        if sparse.issparse(X):
+            column_nnz_data = X.data[
+                X.indptr[feature_idx]: X.indptr[feature_idx + 1]]
+            column_data = np.zeros(shape=X.shape[0], dtype=X.dtype)
+            column_data[:len(column_nnz_data)] = column_nnz_data
+        else:
+            column_data = X[:, feature_idx]
+        quantiles.append(nanpercentile(column_data, quantile_range))
+
+    quantiles = np.transpose(quantiles)
+
+    return quantiles
+
+
+class TDMScaler(BaseEstimator, TransformerMixin):
+    """
+    Scale features using Training Distribution Matching (TDM) algorithm
+
+    References
+    ----------
+    .. [1] Thompson JA, Tan J and Greene CS (2016) Cross-platform
+           normalization of microarray and RNA-seq data for machine
+           learning applications. PeerJ 4, e1621.
+    """
+
+    def __init__(self, q_lower=25.0, q_upper=75.0, ):
+        self.q_lower = q_lower
+        self.q_upper = q_upper
+
+    def fit(self, X, y=None):
+        """
+        Parameters
+        ----------
+        X : array-like, shape [n_samples, n_features]
+        """
+        X = check_array(X, copy=True, estimator=self, dtype=FLOAT_DTYPES,
+                        force_all_finite=True)
+
+        if not 0 <= self.q_lower <= self.q_upper <= 100:
+            raise ValueError("Invalid quantile parameter values: "
+                             "q_lower %s, q_upper: %s"
+                             % (str(self.q_lower), str(self.q_upper)))
+
+        # TODO sparse data
+        quantiles = nanpercentile(X, (self.q_lower, self.q_upper))
+        iqr = quantiles[1] - quantiles[0]
+
+        self.q_lower_ = quantiles[0]
+        self.q_upper_ = quantiles[1]
+        self.iqr_ = _handle_zeros_in_scale(iqr, copy=False)
+
+        self.max_ = np.nanmax(X)
+        self.min_ = np.nanmin(X)
+
+        return self
+
+    def transform(self, X):
+        """
+        Parameters
+        ----------
+        X : {array-like, sparse matrix}
+            The data used to scale along the specified axis.
+        """
+        check_is_fitted(self, 'iqr_', 'max_')
+        X = check_array(X, copy=True, estimator=self, dtype=FLOAT_DTYPES,
+                        force_all_finite=True)
+
+        # TODO sparse data
+        train_upper_scale = (self.max_ - self.q_upper_) / self.iqr_
+        train_lower_scale = (self.q_lower_ - self.min_) / self.iqr_
+
+        test_quantiles = nanpercentile(X, (self.q_lower, self.q_upper))
+        test_iqr = _handle_zeros_in_scale(
+            test_quantiles[1] - test_quantiles[0], copy=False)
+
+        test_upper_bound = test_quantiles[1] + train_upper_scale * test_iqr
+        test_lower_bound = test_quantiles[0] - train_lower_scale * test_iqr
+
+        test_min = np.nanmin(X)
+        if test_lower_bound < test_min:
+            test_lower_bound = test_min
+
+        X[X > test_upper_bound] = test_upper_bound
+        X[X < test_lower_bound] = test_lower_bound
+
+        X = (X - test_lower_bound) / (test_upper_bound - test_lower_bound)\
+            * (self.max_ - self.min_) + self.min_
+
+        return X
+
+    def inverse_transform(self, X):
+        """
+        Scale the data back to the original state
+        """
+        raise NotImplementedError("Inverse transformation is not implemented!")
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/search_model_validation.py	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,366 @@
+import argparse
+import collections
+import imblearn
+import json
+import numpy as np
+import pandas
+import pickle
+import skrebate
+import sklearn
+import sys
+import xgboost
+import warnings
+import iraps_classifier
+import model_validations
+import preprocessors
+import feature_selectors
+from imblearn import under_sampling, over_sampling, combine
+from scipy.io import mmread
+from mlxtend import classifier, regressor
+from sklearn import (cluster, compose, decomposition, ensemble,
+                     feature_extraction, feature_selection,
+                     gaussian_process, kernel_approximation, metrics,
+                     model_selection, naive_bayes, neighbors,
+                     pipeline, preprocessing, svm, linear_model,
+                     tree, discriminant_analysis)
+from sklearn.exceptions import FitFailedWarning
+from sklearn.externals import joblib
+from sklearn.model_selection._validation import _score
+
+from utils import (SafeEval, get_cv, get_scoring, get_X_y,
+                   load_model, read_columns)
+from model_validations import train_test_split
+
+
+N_JOBS = int(__import__('os').environ.get('GALAXY_SLOTS', 1))
+CACHE_DIR = './cached'
+NON_SEARCHABLE = ('n_jobs', 'pre_dispatch', 'memory', 'steps',
+                  'nthread', 'verbose')
+
+
+def _eval_search_params(params_builder):
+    search_params = {}
+
+    for p in params_builder['param_set']:
+        search_list = p['sp_list'].strip()
+        if search_list == '':
+            continue
+
+        param_name = p['sp_name']
+        if param_name.lower().endswith(NON_SEARCHABLE):
+            print("Warning: `%s` is not eligible for search and was "
+                  "omitted!" % param_name)
+            continue
+
+        if not search_list.startswith(':'):
+            safe_eval = SafeEval(load_scipy=True, load_numpy=True)
+            ev = safe_eval(search_list)
+            search_params[param_name] = ev
+        else:
+            # Have `:` before search list, asks for estimator evaluatio
+            safe_eval_es = SafeEval(load_estimators=True)
+            search_list = search_list[1:].strip()
+            # TODO maybe add regular express check
+            ev = safe_eval_es(search_list)
+            preprocessors = (
+                preprocessing.StandardScaler(), preprocessing.Binarizer(),
+                preprocessing.Imputer(), preprocessing.MaxAbsScaler(),
+                preprocessing.Normalizer(), preprocessing.MinMaxScaler(),
+                preprocessing.PolynomialFeatures(),
+                preprocessing.RobustScaler(), feature_selection.SelectKBest(),
+                feature_selection.GenericUnivariateSelect(),
+                feature_selection.SelectPercentile(),
+                feature_selection.SelectFpr(), feature_selection.SelectFdr(),
+                feature_selection.SelectFwe(),
+                feature_selection.VarianceThreshold(),
+                decomposition.FactorAnalysis(random_state=0),
+                decomposition.FastICA(random_state=0),
+                decomposition.IncrementalPCA(),
+                decomposition.KernelPCA(random_state=0, n_jobs=N_JOBS),
+                decomposition.LatentDirichletAllocation(
+                    random_state=0, n_jobs=N_JOBS),
+                decomposition.MiniBatchDictionaryLearning(
+                    random_state=0, n_jobs=N_JOBS),
+                decomposition.MiniBatchSparsePCA(
+                    random_state=0, n_jobs=N_JOBS),
+                decomposition.NMF(random_state=0),
+                decomposition.PCA(random_state=0),
+                decomposition.SparsePCA(random_state=0, n_jobs=N_JOBS),
+                decomposition.TruncatedSVD(random_state=0),
+                kernel_approximation.Nystroem(random_state=0),
+                kernel_approximation.RBFSampler(random_state=0),
+                kernel_approximation.AdditiveChi2Sampler(),
+                kernel_approximation.SkewedChi2Sampler(random_state=0),
+                cluster.FeatureAgglomeration(),
+                skrebate.ReliefF(n_jobs=N_JOBS),
+                skrebate.SURF(n_jobs=N_JOBS),
+                skrebate.SURFstar(n_jobs=N_JOBS),
+                skrebate.MultiSURF(n_jobs=N_JOBS),
+                skrebate.MultiSURFstar(n_jobs=N_JOBS),
+                imblearn.under_sampling.ClusterCentroids(
+                    random_state=0, n_jobs=N_JOBS),
+                imblearn.under_sampling.CondensedNearestNeighbour(
+                    random_state=0, n_jobs=N_JOBS),
+                imblearn.under_sampling.EditedNearestNeighbours(
+                    random_state=0, n_jobs=N_JOBS),
+                imblearn.under_sampling.RepeatedEditedNearestNeighbours(
+                    random_state=0, n_jobs=N_JOBS),
+                imblearn.under_sampling.AllKNN(random_state=0, n_jobs=N_JOBS),
+                imblearn.under_sampling.InstanceHardnessThreshold(
+                    random_state=0, n_jobs=N_JOBS),
+                imblearn.under_sampling.NearMiss(
+                    random_state=0, n_jobs=N_JOBS),
+                imblearn.under_sampling.NeighbourhoodCleaningRule(
+                    random_state=0, n_jobs=N_JOBS),
+                imblearn.under_sampling.OneSidedSelection(
+                    random_state=0, n_jobs=N_JOBS),
+                imblearn.under_sampling.RandomUnderSampler(
+                    random_state=0),
+                imblearn.under_sampling.TomekLinks(
+                    random_state=0, n_jobs=N_JOBS),
+                imblearn.over_sampling.ADASYN(random_state=0, n_jobs=N_JOBS),
+                imblearn.over_sampling.RandomOverSampler(random_state=0),
+                imblearn.over_sampling.SMOTE(random_state=0, n_jobs=N_JOBS),
+                imblearn.over_sampling.SVMSMOTE(random_state=0, n_jobs=N_JOBS),
+                imblearn.over_sampling.BorderlineSMOTE(
+                    random_state=0, n_jobs=N_JOBS),
+                imblearn.over_sampling.SMOTENC(
+                    categorical_features=[], random_state=0, n_jobs=N_JOBS),
+                imblearn.combine.SMOTEENN(random_state=0),
+                imblearn.combine.SMOTETomek(random_state=0))
+            newlist = []
+            for obj in ev:
+                if obj is None:
+                    newlist.append(None)
+                elif obj == 'all_0':
+                    newlist.extend(preprocessors[0:36])
+                elif obj == 'sk_prep_all':      # no KernalCenter()
+                    newlist.extend(preprocessors[0:8])
+                elif obj == 'fs_all':
+                    newlist.extend(preprocessors[8:15])
+                elif obj == 'decomp_all':
+                    newlist.extend(preprocessors[15:26])
+                elif obj == 'k_appr_all':
+                    newlist.extend(preprocessors[26:30])
+                elif obj == 'reb_all':
+                    newlist.extend(preprocessors[31:36])
+                elif obj == 'imb_all':
+                    newlist.extend(preprocessors[36:55])
+                elif type(obj) is int and -1 < obj < len(preprocessors):
+                    newlist.append(preprocessors[obj])
+                elif hasattr(obj, 'get_params'):       # user uploaded object
+                    if 'n_jobs' in obj.get_params():
+                        newlist.append(obj.set_params(n_jobs=N_JOBS))
+                    else:
+                        newlist.append(obj)
+                else:
+                    sys.exit("Unsupported estimator type: %r" % (obj))
+
+            search_params[param_name] = newlist
+
+    return search_params
+
+
+def main(inputs, infile_estimator, infile1, infile2,
+         outfile_result, outfile_object=None, groups=None):
+    """
+    Parameter
+    ---------
+    inputs : str
+        File path to galaxy tool parameter
+
+    infile_estimator : str
+        File path to estimator
+
+    infile1 : str
+        File path to dataset containing features
+
+    infile2 : str
+        File path to dataset containing target values
+
+    outfile_result : str
+        File path to save the results, either cv_results or test result
+
+    outfile_object : str, optional
+        File path to save searchCV object
+
+    groups : str
+        File path to dataset containing groups labels
+    """
+
+    warnings.simplefilter('ignore')
+
+    with open(inputs, 'r') as param_handler:
+        params = json.load(param_handler)
+    if groups:
+        (params['search_schemes']['options']['cv_selector']
+         ['groups_selector']['infile_g']) = groups
+
+    params_builder = params['search_schemes']['search_params_builder']
+
+    input_type = params['input_options']['selected_input']
+    if input_type == 'tabular':
+        header = 'infer' if params['input_options']['header1'] else None
+        column_option = (params['input_options']['column_selector_options_1']
+                         ['selected_column_selector_option'])
+        if column_option in ['by_index_number', 'all_but_by_index_number',
+                             'by_header_name', 'all_but_by_header_name']:
+            c = params['input_options']['column_selector_options_1']['col1']
+        else:
+            c = None
+        X = read_columns(
+                infile1,
+                c=c,
+                c_option=column_option,
+                sep='\t',
+                header=header,
+                parse_dates=True).astype(float)
+    else:
+        X = mmread(open(infile1, 'r'))
+
+    header = 'infer' if params['input_options']['header2'] else None
+    column_option = (params['input_options']['column_selector_options_2']
+                     ['selected_column_selector_option2'])
+    if column_option in ['by_index_number', 'all_but_by_index_number',
+                         'by_header_name', 'all_but_by_header_name']:
+        c = params['input_options']['column_selector_options_2']['col2']
+    else:
+        c = None
+    y = read_columns(
+            infile2,
+            c=c,
+            c_option=column_option,
+            sep='\t',
+            header=header,
+            parse_dates=True)
+    y = y.ravel()
+
+    optimizer = params['search_schemes']['selected_search_scheme']
+    optimizer = getattr(model_selection, optimizer)
+
+    options = params['search_schemes']['options']
+
+    splitter, groups = get_cv(options.pop('cv_selector'))
+    options['cv'] = splitter
+    options['n_jobs'] = N_JOBS
+    primary_scoring = options['scoring']['primary_scoring']
+    options['scoring'] = get_scoring(options['scoring'])
+    if options['error_score']:
+        options['error_score'] = 'raise'
+    else:
+        options['error_score'] = np.NaN
+    if options['refit'] and isinstance(options['scoring'], dict):
+        options['refit'] = primary_scoring
+    if 'pre_dispatch' in options and options['pre_dispatch'] == '':
+        options['pre_dispatch'] = None
+
+    with open(infile_estimator, 'rb') as estimator_handler:
+        estimator = load_model(estimator_handler)
+
+    memory = joblib.Memory(location=CACHE_DIR, verbose=0)
+    # cache iraps_core fits could increase search speed significantly
+    if estimator.__class__.__name__ == 'IRAPSClassifier':
+        estimator.set_params(memory=memory)
+    else:
+        for p, v in estimator.get_params().items():
+            if p.endswith('memory'):
+                if len(p) > 8 and p[:-8].endswith('irapsclassifier'):
+                    # cache iraps_core fits could increase search
+                    # speed significantly
+                    new_params = {p: memory}
+                    estimator.set_params(**new_params)
+                elif v:
+                    new_params = {p, None}
+                    estimator.set_params(**new_params)
+            elif p.endswith('n_jobs'):
+                new_params = {p: 1}
+                estimator.set_params(**new_params)
+
+    param_grid = _eval_search_params(params_builder)
+    searcher = optimizer(estimator, param_grid, **options)
+
+    # do train_test_split
+    do_train_test_split = params['train_test_split'].pop('do_split')
+    if do_train_test_split == 'yes':
+        # make sure refit is choosen
+        if not options['refit']:
+            raise ValueError("Refit must be `True` for shuffle splitting!")
+        split_options = params['train_test_split']
+
+        # splits
+        if split_options['shuffle'] == 'stratified':
+            split_options['labels'] = y
+            X, X_test, y, y_test = train_test_split(X, y, **split_options)
+        elif split_options['shuffle'] == 'group':
+            if not groups:
+                raise ValueError("No group based CV option was "
+                                 "choosen for group shuffle!")
+            split_options['labels'] = groups
+            X, X_test, y, y_test, groups, _ =\
+                train_test_split(X, y, **split_options)
+        else:
+            if split_options['shuffle'] == 'None':
+                split_options['shuffle'] = None
+            X, X_test, y, y_test =\
+                train_test_split(X, y, **split_options)
+    # end train_test_split
+
+    if options['error_score'] == 'raise':
+        searcher.fit(X, y, groups=groups)
+    else:
+        warnings.simplefilter('always', FitFailedWarning)
+        with warnings.catch_warnings(record=True) as w:
+            try:
+                searcher.fit(X, y, groups=groups)
+            except ValueError:
+                pass
+            for warning in w:
+                print(repr(warning.message))
+
+    if do_train_test_split == 'no':
+        # save results
+        cv_results = pandas.DataFrame(searcher.cv_results_)
+        cv_results = cv_results[sorted(cv_results.columns)]
+        cv_results.to_csv(path_or_buf=outfile_result, sep='\t',
+                          header=True, index=False)
+
+    # output test result using best_estimator_
+    else:
+        best_estimator_ = searcher.best_estimator_
+        if isinstance(options['scoring'], collections.Mapping):
+            is_multimetric = True
+        else:
+            is_multimetric = False
+
+        test_score = _score(best_estimator_, X_test,
+                            y_test, options['scoring'],
+                            is_multimetric=is_multimetric)
+        if not is_multimetric:
+            test_score = {primary_scoring: test_score}
+        for key, value in test_score.items():
+            test_score[key] = [value]
+        result_df = pandas.DataFrame(test_score)
+        result_df.to_csv(path_or_buf=outfile_result, sep='\t',
+                         header=True, index=False)
+
+    memory.clear(warn=False)
+
+    if outfile_object:
+        with open(outfile_object, 'wb') as output_handler:
+            pickle.dump(searcher, output_handler, pickle.HIGHEST_PROTOCOL)
+
+
+if __name__ == '__main__':
+    aparser = argparse.ArgumentParser()
+    aparser.add_argument("-i", "--inputs", dest="inputs", required=True)
+    aparser.add_argument("-e", "--estimator", dest="infile_estimator")
+    aparser.add_argument("-X", "--infile1", dest="infile1")
+    aparser.add_argument("-y", "--infile2", dest="infile2")
+    aparser.add_argument("-r", "--outfile_result", dest="outfile_result")
+    aparser.add_argument("-o", "--outfile_object", dest="outfile_object")
+    aparser.add_argument("-g", "--groups", dest="groups")
+    args = aparser.parse_args()
+
+    main(args.inputs, args.infile_estimator, args.infile1, args.infile2,
+         args.outfile_result, outfile_object=args.outfile_object,
+         groups=args.groups)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/stacking_ensembles.py	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,128 @@
+import argparse
+import json
+import pandas as pd
+import pickle
+import xgboost
+import warnings
+from sklearn import (cluster, compose, decomposition, ensemble,
+                     feature_extraction, feature_selection,
+                     gaussian_process, kernel_approximation, metrics,
+                     model_selection, naive_bayes, neighbors,
+                     pipeline, preprocessing, svm, linear_model,
+                     tree, discriminant_analysis)
+from sklearn.model_selection._split import check_cv
+from feature_selectors import (DyRFE, DyRFECV,
+                               MyPipeline, MyimbPipeline)
+from iraps_classifier import (IRAPSCore, IRAPSClassifier,
+                              BinarizeTargetClassifier,
+                              BinarizeTargetRegressor)
+from preprocessors import Z_RandomOverSampler
+from utils import load_model, get_cv, get_estimator, get_search_params
+
+from mlxtend.regressor import StackingCVRegressor, StackingRegressor
+from mlxtend.classifier import StackingCVClassifier, StackingClassifier
+
+
+warnings.filterwarnings('ignore')
+
+N_JOBS = int(__import__('os').environ.get('GALAXY_SLOTS', 1))
+
+
+def main(inputs_path, output_obj, base_paths=None, meta_path=None,
+         outfile_params=None):
+    """
+    Parameter
+    ---------
+    inputs_path : str
+        File path for Galaxy parameters
+
+    output_obj : str
+        File path for ensemble estimator ouput
+
+    base_paths : str
+        File path or paths concatenated by comma.
+
+    meta_path : str
+        File path
+
+    outfile_params : str
+        File path for params output
+    """
+    with open(inputs_path, 'r') as param_handler:
+        params = json.load(param_handler)
+
+    base_estimators = []
+    for idx, base_file in enumerate(base_paths.split(',')):
+        if base_file and base_file != 'None':
+            with open(base_file, 'rb') as handler:
+                model = load_model(handler)
+        else:
+            estimator_json = (params['base_est_builder'][idx]
+                              ['estimator_selector'])
+            model = get_estimator(estimator_json)
+        base_estimators.append(model)
+
+    if meta_path:
+        with open(meta_path, 'rb') as f:
+            meta_estimator = load_model(f)
+    else:
+        estimator_json = params['meta_estimator']['estimator_selector']
+        meta_estimator = get_estimator(estimator_json)
+
+    options = params['algo_selection']['options']
+
+    cv_selector = options.pop('cv_selector', None)
+    if cv_selector:
+        splitter, groups = get_cv(cv_selector)
+        options['cv'] = splitter
+        # set n_jobs
+        options['n_jobs'] = N_JOBS
+
+    if params['algo_selection']['estimator_type'] == 'StackingCVClassifier':
+        ensemble_estimator = StackingCVClassifier(
+            classifiers=base_estimators,
+            meta_classifier=meta_estimator,
+            **options)
+
+    elif params['algo_selection']['estimator_type'] == 'StackingClassifier':
+        ensemble_estimator = StackingClassifier(
+            classifiers=base_estimators,
+            meta_classifier=meta_estimator,
+            **options)
+
+    elif params['algo_selection']['estimator_type'] == 'StackingCVRegressor':
+        ensemble_estimator = StackingCVRegressor(
+            regressors=base_estimators,
+            meta_regressor=meta_estimator,
+            **options)
+
+    else:
+        ensemble_estimator = StackingRegressor(
+            regressors=base_estimators,
+            meta_regressor=meta_estimator,
+            **options)
+
+    print(ensemble_estimator)
+    for base_est in base_estimators:
+        print(base_est)
+
+    with open(output_obj, 'wb') as out_handler:
+        pickle.dump(ensemble_estimator, out_handler, pickle.HIGHEST_PROTOCOL)
+
+    if params['get_params'] and outfile_params:
+        results = get_search_params(ensemble_estimator)
+        df = pd.DataFrame(results, columns=['', 'Parameter', 'Value'])
+        df.to_csv(outfile_params, sep='\t', index=False)
+
+
+if __name__ == '__main__':
+    aparser = argparse.ArgumentParser()
+    aparser.add_argument("-b", "--bases", dest="bases")
+    aparser.add_argument("-m", "--meta", dest="meta")
+    aparser.add_argument("-i", "--inputs", dest="inputs")
+    aparser.add_argument("-o", "--outfile", dest="outfile")
+    aparser.add_argument("-p", "--outfile_params", dest="outfile_params")
+    args = aparser.parse_args()
+
+    main(args.inputs, args.outfile, base_paths=args.bases,
+         meta_path=args.meta, outfile_params=args.outfile_params)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/stacking_ensembles.xml	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,178 @@
+<tool id="sklearn_stacking_ensemble_models" name="Stacking Ensemble Models" version="0.1.0">
+    <description>builds a strong model by stacking multiple algorithms</description>
+    <macros>
+        <import>main_macros.xml</import>
+    </macros>
+    <expand macro="python_requirements"/>
+    <expand macro="macro_stdio"/>
+    <version_command>echo "$version"</version_command>
+    <command>
+        <![CDATA[
+        #for $i, $base in enumerate($base_est_builder)
+        #if $i == 0
+            #if $base.estimator_selector.selected_module == 'custom_estimator'
+            bases='${base.estimator_selector.c_estimator}';
+            #else
+            bases='None';
+            #end if
+        #elif $base.estimator_selector.selected_module == 'custom_estimator'
+        bases="\$bases,${base.estimator_selector.c_estimator}";
+        #else
+        bases="\$bases,None";
+        #end if
+        #end for
+        python '$__tool_directory__/stacking_ensembles.py'
+            --inputs '$inputs'
+            --outfile '$outfile'
+            --bases "\$bases"
+            #if $meta_estimator.estimator_selector.selected_module == 'custom_estimator'
+            --meta '${meta_estimator.estimator_selector.c_estimator}'
+            #end if
+            #if $get_params
+            --outfile_params '$outfile_params'
+            #end if
+        ]]>
+    </command>
+    <configfiles>
+        <inputs name="inputs" />
+    </configfiles>
+    <inputs>
+        <conditional name="algo_selection">
+            <param name="estimator_type" type="select" label="Choose the stacking ensemble type">
+                <option value="StackingCVClassifier" selected="true">classification -- StackingCVClassifier</option>
+                <option value="StackingClassifier">classification -- StackingClassifier</option>
+                <option value="StackingCVRegressor">regression -- StackingCVRegressor</option>
+                <option value="StackingRegressor">regression -- StackingRegressor</option>
+            </param>
+            <when value="StackingCVClassifier">
+                <expand macro="stacking_ensemble_inputs">
+                    <expand macro="cv_reduced"/>
+                    <expand macro="shuffle" label="shuffle"/>
+                    <expand macro="random_state" default_value="" help_text="Integer number. The seed of the pseudo random number generator to use when shuffling the data."/>
+                    <param argument="use_probas" type="boolean" truevalue="booltrue" falsevalue="boolfalse" checked="false"/>
+                </expand>
+            </when>
+            <when value="StackingClassifier">
+                <expand macro="stacking_ensemble_inputs">
+                    <param argument="use_probas" type="boolean" truevalue="booltrue" falsevalue="boolfalse" checked="false"/>
+                    <param argument="average_probas" type="boolean" truevalue="booltrue" falsevalue="boolfalse" checked="false"/>
+                </expand>
+            </when>
+            <when value="StackingCVRegressor">
+                <expand macro="stacking_ensemble_inputs">
+                    <expand macro="cv_reduced"/>
+                    <!--TODO support group splitters. Hint: `groups` is a fit_param-->
+                    <expand macro="shuffle" label="shuffle"/>
+                    <expand macro="random_state" default_value="" help_text="Integer number. The seed of the pseudo random number generator to use when shuffling the data."/>
+                    <param argument="refit" type="boolean" truevalue="booltrue" falsevalue="boolfalse" checked="true"/>
+                </expand>
+            </when>
+            <when value="StackingRegressor">
+                <expand macro="stacking_ensemble_inputs">
+                    <param argument="refit" type="boolean" truevalue="booltrue" falsevalue="boolfalse" checked="true"/>
+                </expand>
+            </when>
+        </conditional>
+        <repeat name="base_est_builder" min="1" max="20" title="Base Estimator">
+            <expand macro="stacking_base_estimator"/>
+            <!--param name="base_estimator" type="data" format="zip,json" label="Select the dataset containing base estimator" help="One estimator at a time."/-->
+        </repeat>
+        <!--param name="meta_estimator" type="data" format="zip,json" label="Select the dataset containing the Meta estimator"/-->
+        <section name="meta_estimator" title="Meta Estimator" expanded="true">
+            <expand macro="stacking_base_estimator"/>
+        </section>
+        <param name="get_params" type="boolean" truevalue="booltrue" falsevalue="boolfalse" checked="true" label="Output parameters for searchCV?"
+                help="Optional. Tunable parameters could be obtained through `estimator_attributes` tool."/>
+    </inputs>
+    <outputs>
+        <data format="zip" name="outfile" label="${algo_selection.estimator_type} on ${on_string}"/>
+        <data format="tabular" name="outfile_params" label="get_params for ${algo_selection.estimator_type}">
+            <filter>get_params</filter>
+        </data>
+    </outputs>
+    <tests>
+        <test>
+            <conditional name="algo_selection">
+                <param name="estimator_type" value="StackingCVRegressor"/>
+            </conditional>
+            <repeat name="base_est_builder">
+                <conditional name="estimator_selector">
+                    <param name="selected_module" value="custom_estimator"/>
+                    <param name="c_estimator" value="RandomForestRegressor01.zip" ftype="zip"/>
+                </conditional>
+            </repeat>
+            <repeat name="base_est_builder">
+                <conditional name="estimator_selector">
+                    <param name="selected_module" value="custom_estimator"/>
+                    <param name="c_estimator" value="XGBRegressor01.zip" ftype="zip"/>
+                </conditional>
+            </repeat>
+            <section name="meta_estimator">
+                <conditional name="estimator_selector">
+                    <param name="selected_module" value="custom_estimator"/>
+                    <param name="c_estimator" value="LinearRegression01.zip" ftype="zip"/>
+                </conditional>
+            </section>
+            <param name="get_params" value="false"/>
+            <output name="outfile" file="StackingCVRegressor01.zip" compare="sim_size" delta="5"/>
+        </test>
+        <test>
+            <conditional name="algo_selection">
+                <param name="estimator_type" value="StackingCVRegressor"/>
+            </conditional>
+            <repeat name="base_est_builder">
+                <conditional name="estimator_selector">
+                    <param name="selected_module" value="custom_estimator"/>
+                    <param name="c_estimator" value="RandomForestRegressor01.zip" ftype="zip"/>
+                </conditional>
+            </repeat>
+            <repeat name="base_est_builder">
+                <conditional name="estimator_selector">
+                    <param name="selected_module" value="xgboost"/>
+                    <param name="selected_estimator" value="XGBRegressor"/>
+                </conditional>
+            </repeat>
+            <section name="meta_estimator">
+                <conditional name="estimator_selector">
+                    <param name="selected_module" value="svm"/>
+                    <param name="selected_estimator" value="SVR"/>
+                </conditional>
+            </section>
+            <param name="get_params" value="false"/>
+            <output name="outfile" file="StackingCVRegressor02.zip" compare="sim_size" delta="5"/>
+        </test>
+    </tests>
+    <help>
+        <![CDATA[
+This tool wrapps Stacking Regression, also called Super Learning, in which different base algorithms train
+on the original dataset and predict results respectively, a second level of `metalearner` fits on the previous
+prediction results to ensemble a strong learner.
+Refer to `http://docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/stacked-ensembles.html#introduction`_.
+
+.. _`http://docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/stacked-ensembles.html#introduction`:
+ http://docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/stacked-ensembles.html#introduction
+
+        ]]>
+    </help>
+    <expand macro="sklearn_citation">
+        <expand macro="skrebate_citation"/>
+        <expand macro="xgboost_citation"/>
+        <expand macro="imblearn_citation"/>
+        <citation type="bibtex">
+            @article{raschkas_2018_mlxtend,
+                author       = {Sebastian Raschka},
+                title        = {MLxtend: Providing machine learning and data science 
+                                                utilities and extensions to Python’s  
+                                                scientific computing stack},
+                journal      = {The Journal of Open Source Software},
+                volume       = {3},
+                number       = {24},
+                month        = apr,
+                year         = 2018,
+                publisher    = {The Open Journal},
+                doi          = {10.21105/joss.00638},
+                url          = {http://joss.theoj.org/papers/10.21105/joss.00638}
+            }
+        </citation>
+    </expand>
+</tool>
Binary file test-data/GridSearchCV.zip has changed
Binary file test-data/LinearRegression01.zip has changed
Binary file test-data/LinearRegression02.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/RF01704.fasta	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,4 @@
+>CP000097.1/1411351-1411410
+CAACGUUCACCUCACAUUUGUGAGGCGCAGACAACCCAGGCCAAGGAACGGGGACCUGGA
+>ACNY01000002.1/278641-278580
+GAUCGUUCACUUCGCAUCGCGCGAAGCGCAGUUCGCCUCAGGCCAUGGAACGGGGACCUGAG
Binary file test-data/RFE.zip has changed
Binary file test-data/RandomForestClassifier.zip has changed
Binary file test-data/RandomForestRegressor01.zip has changed
Binary file test-data/StackingCVRegressor01.zip has changed
Binary file test-data/StackingCVRegressor02.zip has changed
Binary file test-data/XGBRegressor01.zip has changed
Binary file test-data/abc_model01 has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/abc_result01	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,6 @@
+0	1	2	3	predicted
+3.68258022948	2.82110345641	-3.9901407239999998	-1.9523364774	1
+0.015942057224	-0.7119585943469999	0.125502976978	-0.972218263337	0
+2.0869076882499997	0.929399321468	-2.1292408448400004	-1.9971402218799998	1
+1.4132105208399999	0.523750660422	-1.4210539291	-1.49298569451	1
+0.7683140439399999	1.38267855169	-0.989045048734	0.649504257894	1
Binary file test-data/abr_model01 has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/abr_result01	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,6 @@
+0	1	2	3	4	predicted
+86.97021227350001	1.00532111569	-1.01739601979	-0.613139481654	0.641846874331	0.323842059244
+91.2021798817	-0.6215229712070001	1.11914889596	0.390012184498	1.28956938152	1.1503117056799999
+-47.4101632272	-0.638416457964	-0.7327774684530001	-0.8640261049779999	-1.06109770116	-0.7191695359690001
+61.712804630200004	-1.0999480057700002	-0.739679672932	0.585657963012	1.4890682753600002	1.1503117056799999
+-206.998295124	0.130238853011	0.70574123041	1.3320656526399999	-1.3322092373799999	-0.7191695359690001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/accuracy_score.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,2 @@
+accuracy_score : 
+0.8461538461538461
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/auc.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,2 @@
+auc : 
+2.5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/average_precision_score.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,2 @@
+average_precision_score : 
+1.0
Binary file test-data/best_estimator_.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/best_params_.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,1 @@
+{'estimator__n_estimators': 100}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/best_score_.tabular	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,2 @@
+best_score_
+0.7976348550293088
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/blobs.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,101 @@
+0	1	0
+0.33681845896740	-3.40287961299073	0
+-9.48324265575857	-8.66266051536995	2
+-1.93336328496076	5.70953908146890	1
+-10.03182405989413	-5.57834393458362	2
+0.54186077661701	-4.37693628326930	0
+-8.12962929067378	-7.05554320549807	2
+-0.73082578569427	7.32375551699482	1
+-1.84142532007015	6.20630466830832	1
+0.41007185031668	-3.99744881000119	0
+-8.73509589323240	-5.49090535208751	2
+1.84941962277054	-3.91839345672969	0
+-9.15256068848857	-9.17805648051067	2
+-3.21429939077830	5.75926163957071	1
+0.28450378549664	-3.61576522643830	0
+-0.92907484922306	5.79099955373578	1
+0.36692524194483	6.51861929622910	1
+1.59909917965412	-3.07105617297875	0
+-9.71270568435724	-7.91707651499009	2
+-10.08040443063205	-6.55135324108655	2
+1.10594345774293	-4.41906374949547	0
+2.48708049649457	-2.89100712361067	0
+0.00587148930883	-3.18314255539710	0
+1.61854359735349	-4.88855922559208	0
+-9.15856722108140	-7.13894114847511	2
+-3.07633571459573	7.80049676786476	1
+0.11174653022487	-3.61615828710479	0
+-9.43932350782336	-7.29863034570663	2
+-1.69466229591445	4.40837111117530	1
+1.05261752638325	-3.49553009701512	0
+-10.50560592102942	-5.99245086001851	2
+1.54081964152897	-4.53702344151471	0
+0.32228789680820	6.89854008042929	1
+0.61621969660610	-5.27504803637537	0
+-10.22545392329864	-8.71635918421430	2
+-10.61004107591557	-8.15999270542289	2
+-0.74547966700287	-2.96189843151195	0
+0.78848758990191	-5.32234377938911	0
+-10.42005276754933	-7.78467770434098	2
+-2.90664752997062	5.79835066175825	1
+-10.32143921202120	-8.92712052109752	2
+-0.21338559861828	7.84779827247996	1
+-0.07194732572546	-5.26054466248995	0
+-7.60696893546687	-7.73382713697845	2
+-1.37722038386856	6.91773657443747	1
+-3.21560019075551	7.26468660350508	1
+-10.36154489539457	-6.91944465708303	2
+-9.60457341239248	-9.25351754602290	2
+-2.72690231565835	6.73825747902294	1
+-2.80603999216749	6.99066208996353	1
+-0.81952671479263	7.58241271253648	1
+-2.08847400980833	5.69607144720414	1
+-0.31991876149841	-4.98235849165957	0
+-11.32066579703307	-8.20937750734829	2
+-7.96236061274655	-9.01605369665730	2
+2.16784691057462	-6.16570792177736	0
+1.89502027521910	-5.86480290918300	0
+-8.66871499099032	-7.79890226276482	2
+2.05772110384843	-6.12322912450768	0
+-9.31359960682017	-8.00568199998929	2
+-0.76743056356151	-5.47682217583339	0
+-3.46772941922521	6.76072133440808	1
+1.09049844437461	-5.87582929334941	0
+-0.11521126331032	-4.07510454495671	0
+1.08927850504071	-5.50265562869237	0
+-0.61505047925733	7.65521576624828	1
+0.42996321311489	-5.55093054437951	0
+-0.75919485469050	5.58853030731725	1
+-9.12599657251685	-8.00673850068656	2
+-9.77537442082784	-6.61925671967673	2
+-3.01723334528173	7.00340677720469	1
+-0.97308946436741	-4.06651907195677	0
+-0.48830021304200	-5.66504681203900	0
+-11.92081159330307	-7.64815817127183	2
+-9.38262507165980	-7.58496298709520	2
+0.07652275340590	7.58891330491466	1
+0.97696230365299	-3.92480270763176	0
+-7.83082970823398	-7.91191526652019	2
+-3.00736856610051	5.70163666960614	1
+-1.87511017769397	5.62449960555141	1
+-9.68323206673510	-8.25353931958495	2
+-9.30119933759135	-8.47564800181842	2
+0.32365967414684	-5.10078403493750	0
+-1.74836105433202	5.46645574794978	1
+-0.56064340851208	6.87612506043561	1
+0.67860300499613	-4.17761085385070	0
+-8.20199888805984	-8.29076835439347	2
+-3.05026420956995	8.94223661488021	1
+-8.81193622652183	-7.79813533757767	2
+-9.16862770716234	-7.13275033182281	2
+-4.48296365906822	6.92883992453694	1
+-10.52225224786374	-6.80543393827772	2
+-1.58567165074196	6.89948024038567	1
+-1.75853685207545	6.44534621138642	1
+-9.91452153947266	-8.11181559274489	2
+-1.40077619511942	6.92380628122115	1
+-1.19228020907627	6.14310846867304	1
+0.87541339904821	-5.04555103360224	0
+1.48113771750685	-3.69640708480025	0
+0.52495937648759	6.34480823448348	1
+-0.01369955366371	-4.41397334863602	0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/brier_score_loss.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,2 @@
+brier_score_loss : 
+0.5641025641025641
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/circles.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,101 @@
+0	1	0
+-0.06279051952931	-0.99802672842827	0
+0.05023241562345	0.79842138274262	1
+-0.99211470131448	-0.12533323356430	0
+0.42577929156507	-0.90482705246602	0
+-0.30901699437495	-0.95105651629515	0
+-1.00000000000000	-0.00000000000000	0
+-0.18738131458572	-0.98228725072869	0
+-0.53582679497900	-0.84432792550202	0
+-0.77486652890290	-0.19895190973188	1
+-0.87630668004386	0.48175367410172	0
+-0.24721359549996	-0.76084521303612	1
+0.80000000000000	0.00000000000000	1
+0.42866143598320	-0.67546234040161	1
+-0.58317490193713	0.54763768474295	1
+0.70104534403509	-0.38540293928137	1
+-0.74382118871060	-0.29449964214774	1
+-0.74382118871060	0.29449964214774	1
+0.80901699437495	0.58778525229247	0
+0.30901699437495	-0.95105651629515	0
+0.18738131458572	0.98228725072869	0
+-0.87630668004386	-0.48175367410172	0
+-0.42866143598320	-0.67546234040161	1
+-0.50993919179895	-0.61641059422063	1
+0.63742398974869	-0.77051324277579	0
+-0.92977648588825	-0.36812455268468	0
+-0.92977648588825	0.36812455268468	0
+-0.96858316112863	0.24868988716485	0
+0.24721359549996	-0.76084521303612	1
+-0.14990505166858	-0.78582980058295	1
+-0.80901699437495	0.58778525229247	0
+-0.63742398974869	-0.77051324277579	0
+0.72896862742141	0.68454710592869	0
+0.92977648588825	0.36812455268468	0
+0.06279051952931	0.99802672842827	0
+0.79369176105158	0.10026658685144	1
+-0.34062343325206	-0.72386164197282	1
+-0.77486652890290	0.19895190973188	1
+-0.14990505166858	0.78582980058295	1
+0.70104534403509	0.38540293928137	1
+-0.50993919179895	0.61641059422063	1
+-0.80000000000000	-0.00000000000000	1
+-0.79369176105158	0.10026658685144	1
+0.50993919179895	0.61641059422063	1
+0.53582679497900	-0.84432792550202	0
+-0.79369176105158	-0.10026658685144	1
+0.79369176105158	-0.10026658685144	1
+-0.53582679497900	0.84432792550201	0
+0.50993919179895	-0.61641059422063	1
+-0.05023241562345	0.79842138274262	1
+1.00000000000000	0.00000000000000	0
+-0.63742398974869	0.77051324277579	0
+0.72896862742141	-0.68454710592869	0
+0.06279051952931	-0.99802672842827	0
+0.80901699437495	-0.58778525229247	0
+0.18738131458573	-0.98228725072869	0
+-0.64721359549996	0.47022820183398	1
+0.58317490193713	-0.54763768474295	1
+-0.80901699437495	-0.58778525229247	0
+-0.70104534403509	0.38540293928137	1
+0.87630668004386	-0.48175367410172	0
+0.58317490193713	0.54763768474295	1
+-0.64721359549996	-0.47022820183398	1
+0.34062343325206	-0.72386164197282	1
+0.05023241562345	-0.79842138274262	1
+-0.72896862742141	0.68454710592869	0
+-0.58317490193713	-0.54763768474295	1
+0.64721359549996	0.47022820183398	1
+0.14990505166858	-0.78582980058295	1
+0.14990505166858	0.78582980058295	1
+-0.24721359549996	0.76084521303612	1
+0.92977648588825	-0.36812455268468	0
+0.99211470131448	-0.12533323356430	0
+0.63742398974869	0.77051324277579	0
+0.74382118871060	-0.29449964214774	1
+0.34062343325206	0.72386164197282	1
+0.64721359549996	-0.47022820183398	1
+-0.06279051952931	0.99802672842827	0
+0.99211470131448	0.12533323356430	0
+-0.72896862742141	-0.68454710592869	0
+0.87630668004386	0.48175367410172	0
+-0.96858316112863	-0.24868988716486	0
+0.96858316112863	0.24868988716485	0
+0.42577929156507	0.90482705246602	0
+-0.42577929156507	0.90482705246602	0
+0.42866143598320	0.67546234040161	1
+0.24721359549996	0.76084521303612	1
+-0.30901699437495	0.95105651629515	0
+0.77486652890290	-0.19895190973188	1
+-0.42577929156507	-0.90482705246602	0
+-0.18738131458572	0.98228725072869	0
+-0.34062343325206	0.72386164197282	1
+0.74382118871060	0.29449964214774	1
+0.77486652890290	0.19895190973188	1
+0.30901699437495	0.95105651629515	0
+0.96858316112863	-0.24868988716485	0
+-0.70104534403509	-0.38540293928137	1
+-0.05023241562345	-0.79842138274262	1
+-0.42866143598320	0.67546234040161	1
+-0.99211470131448	0.12533323356430	0
+0.53582679497900	0.84432792550202	0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/class.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,101 @@
+0	1	2	3	4	5	6	7	8	9	10	11	12	13	14	15	16	17	18	19	0
+1.103931098477063	1.1137324694427062	2.929660893432376	0.8263678474871072	-0.5024439301629023	-0.9778311716440287	-0.6702242261982462	-0.3783418745400049	-1.9100911341304148	0.41080891898717925	1.6359138753477174	-0.3544401787737543	-0.7776883945882607	-0.711126068648103	-1.1632958763488586	2.881523323585383	-0.3331610016599995	1.0249635446624175	-1.204722529676112	0.9686027151980944	1
+-0.5270034201986623	-2.4370266994140035	-0.46398126201591683	0.6724964425333426	0.32128693891873533	-1.4561055975293318	0.9733737109300644	1.2635448363305384	-0.9655190314614323	-0.30440284592936967	0.2928325635717791	-0.642481126749871	-0.17778292517384178	-0.23575096986827987	0.770818433376395	1.002493460919832	0.44402946209787597	0.38673364020325446	-1.0909759530149077	0.4374172416803542	1
+0.6343790937890923	-0.7044557030990274	-1.5479925634100813	-1.1375423986557498	0.7574995244231507	-0.2586895904715146	1.2113185073849615	0.8255591814670258	1.0488550790559334	-0.013557918030451043	-0.36824556412752163	-1.8422341740345995	0.9791413360462421	-0.23658235285975457	0.3758968273279556	-0.7379662029189028	-0.9558490082424093	-0.45167227065102006	-0.13587675227718632	-0.43481791249648283	0
+-0.2749398078895973	-0.602759369823714	-0.34817063773317436	1.2165805903649096	0.08822993442548502	-0.9828118947823061	1.1255554529825982	-0.5951138391567017	1.359567367140958	1.14745743851399	-2.2691569946862655	0.9270532988002531	-1.28390481061431	0.702184505359777	1.1599689740750685	-0.7022781266128805	-1.5820069707072104	-0.1640254026760564	-0.6268539047283007	-0.5343960171949464	0
+-0.8451664655381013	0.9592831641658773	0.29032122469609184	1.4456183940991385	-2.2668849557948265	0.49356800079005453	0.9973927328851383	-1.7077448427289017	-1.525140006218017	-0.2628130337984583	-0.6987088119151889	0.12372879270054708	-0.37829745272534815	-0.0010588423370812654	3.1974829539733727	1.7610392441369824	0.461991697252764	-0.8707192095484595	0.4949902726326138	0.7113500316301005	1
+-0.6479921130452116	-0.9442706004373587	0.20181386383006028	-1.0034745347115275	-0.9369221110721804	-1.003380717730042	-0.7275212508545039	-0.1820208348243829	0.869148773329888	-0.7855214383236936	0.1360612935062583	2.0654861372867295	-1.2399203282859266	-0.44615385943239716	1.7347311831934773	-0.6314619246803259	-0.76518919295205	1.2707549044789055	-0.7323378102483927	-0.3626096934734513	0
+-0.06451309551365764	-0.7249330776348837	0.5963143554325262	-1.379225616134922	1.1667980284973485	-2.274070053731467	0.7411405179848544	-0.6631329812615014	-1.567155162052582	-0.09527290234272089	-0.7316650418582739	-1.0020134142607244	-0.6953396335230776	1.5807860908438993	0.3379535699933314	1.8800551896643136	0.37962716233848903	0.5363444440333102	0.1390867505544731	0.7390508093906831	1
+0.7576049876525334	0.8726631262318649	0.8478637181249223	0.30198299200599726	1.0101338828657191	-1.3836221562341127	1.0376123351490436	1.0937481979752155	1.3929535047023875	0.8760511854123076	-1.2981174812942935	0.3025477016355275	-0.14253519602584672	1.2887025562956078	2.1562199933480133	-1.0111580468681463	-1.2275056029861684	-0.2688763993683175	-2.2719054986176683	-0.5810422898079113	0
+2.5394320331114613	0.46034921066168377	0.8315330299051433	-0.9396024430587621	-0.37614736761593637	-0.17996331764913345	1.455421460737774	1.5223077678776793	1.1770030840483332	0.40359841542535574	-0.03766667059723912	0.2415068878754467	-0.44558826380657596	1.2774520318648948	-1.8848343873195796	-0.23434224565939143	-1.8735210102773319	2.299369468755593	0.11182257854217889	-0.41968753568332984	0
+-1.1654317335035704	-0.23406889069910192	-1.3485118844184532	0.7912949804001552	-0.19206908223922012	-2.752037662677927	-1.6014139415281856	-0.5108631934878929	1.4041570989659866	0.5382460975045578	0.012866884184724063	0.7910261496852212	-0.5285056361126661	-2.874968879865529	-0.8428605517089753	-1.4276668142409976	-0.6865704170544349	0.8660591728218054	1.176952513690748	-0.6326584957221068	0
+0.9050654404010442	1.5248626005482613	0.0537117476660896	0.10714253527293145	0.5436279322698345	-0.9162199391704404	1.1974173477959238	-1.6813868155498577	0.465763145265903	1.6525856413988107	-2.023763530020729	-1.2225052973966217	0.48905360189011937	-0.06340532135397717	-0.8428196875999223	0.9810796287807456	-2.1897236651211855	-0.5362903624231383	0.6151521853927577	-0.042643618877945336	1
+0.2854489945462638	0.3530051834614323	0.1332902420274303	-2.066453723784956	-0.2645836803644654	0.5245478462345327	0.2238241190906629	-0.48256531456153773	0.13249140142592644	0.9127282586749043	2.6474189892831026	-0.37219899010144253	-1.548077411041423	0.662893215100046	-0.8853951972314839	1.183629012690877	-1.8429271907244553	0.8100978673990902	-0.3284080793917298	0.09184768542206719	1
+-1.3227165003614927	-0.7799983027126963	0.18479275551351085	-0.14231230753550203	-1.3945327153213618	-0.0758997670485449	0.6986307702990094	1.6282076357873105	0.18237029611060487	-0.7109024225989671	-0.2724518087709634	0.4729134646484038	0.5454540297228883	-1.0722422723792842	-0.606184110109761	0.8021132176384902	-1.4211379561267314	-0.3389835320929106	-1.44904592785806	0.031348504552504486	1
+-2.197691926666584	-1.7077148903852681	-0.6449885420999844	-0.06865025280146782	0.4202392504617797	0.968886848221698	-0.005924072251181685	-0.6511305169582245	0.3998134505861388	0.892257884749868	1.3521367585609907	-0.7404970062580767	-0.46898715506363886	1.275597323305137	0.14386099595965895	-1.838491122688009	1.7359354044223765	-0.1551428089500599	-0.43232000255589664	-0.3447470104944261	0
+-0.2670710335696844	1.7812245781622742	-1.1329343313282814	-0.24423451883692596	0.7548220931778789	-1.8862883675077626	0.6526294599846313	-0.3676598535224105	-0.2448455084452909	-0.6772836861850628	0.5942014265411584	0.2375037940405147	-1.1168006401508905	2.6256144457846546	-0.6716078230151616	-0.2989663691054665	0.8587286854080793	0.4974278727895833	1.0406815179638391	0.047335395957696466	0
+-0.4829965988829622	-0.8664172853019196	0.010536697447195188	-0.24957125769621874	-0.5053469214826972	-0.5661823837482267	1.397031114430776	0.9362535725466031	0.8494481273008917	-2.3689801750315524	-0.11515634319648775	-0.8619219742938617	0.5524984188665393	1.5190033138842483	-0.9215808226333405	-2.2309955927486342	1.4288742583770047	-0.5196163599941902	2.2436594507282206	-0.5399023920325723	0
+0.988208848486463	-2.585767588999438	-0.009847287471481413	0.30217682520827216	-2.221510823700524	0.9425068791712249	0.6889213621579444	-1.0110351209554707	1.3983331823298473	0.017600206923097966	-0.49772668445684926	0.041274574202699865	0.39315819224910903	0.687759695794799	0.8198061540197786	-1.6938202943901621	-0.31675443490083666	-0.5176603237193814	0.7734409975442094	-0.6613095000652233	0
+-1.6500251948243565	-0.5881887751399346	-0.008457486200020091	-1.0255372547670172	2.883969251775838	0.6841194893268114	0.36522540717596585	-0.4063786899313203	-0.4597632229684979	0.6689473090641462	0.5824042646735971	0.3231095013887879	0.59519151467352	0.40271751266444333	0.2803223035037342	1.1596486152072958	-0.7088028618998904	-1.7236514338073596	0.5349275937487872	0.28671842601834485	1
+0.30430567959512733	-0.6926221975020497	-0.3586531509541748	0.11220827271785544	-0.6418145875587414	0.40043811487947506	-0.5627558800719191	1.5870889370740489	-1.1979020496525155	0.9287687328933728	-0.9429787966287079	-0.4694866980716366	0.5476098176306101	0.9911844589581342	-1.890064241013992	0.810682748482377	1.135044917480963	0.5813591730005884	1.5988127102205738	0.4929116267678903	1
+0.40492907257520244	-0.6514435841992149	1.8847060544535634	0.25069797962239826	0.2098594845826785	-0.8699566545276876	0.7644150970416564	-0.5372191508425196	0.8513726693635947	-1.6024845301638289	-0.23003580655162623	-1.0594997311547119	0.1503781049950916	-0.697530591149039	-0.06048301501585981	-1.225374349155504	0.06893531119317442	-0.5498117799824236	0.2629482684151777	-0.42494833533236415	0
+-0.6938752020747251	-0.16425303413718284	-0.786824522255031	1.7668617516726024	0.1351177762474505	-0.6769151658288148	1.099720527820615	-0.2108673539727271	-0.09240517052244847	1.9753281712575461	1.0326537546555192	-0.5857366554551754	2.527070920782692	-1.1314983848532563	-1.2203869916654786	0.5386023310337225	-0.5545516579065658	1.617741961423047	0.026714277801613007	0.09274673011429316	1
+-1.2855738604138573	0.9527052435093047	-0.5393910228200474	0.1406950564673274	0.6278876784461687	2.2921936458109897	-0.8296277386100398	-0.8276017374999237	-0.5691114767876203	-0.7804341795136254	-0.3115251054922687	1.1604663708722944	-0.45823039827601697	0.096940343318409	-0.4661721263852442	0.7914638179665774	-0.008781526693367847	0.540432755366913	1.2382624131362387	0.2808835720014097	1
+0.01971106661270503	0.022725782621203446	-0.7171971284211488	-0.844608668797061	0.17759075527122256	0.32351256640857523	1.1092738552242762	0.8459134704189475	-1.0092620261375949	0.3312851879047735	0.8493202690407095	0.7463122829548583	2.2751079842809023	-0.365800592740796	1.392872207641418	0.2672220726832053	1.5171222642682722	0.6271956315522539	0.12548690045124972	0.3674941717644202	1
+-0.9272485993677742	-0.3992846345441018	1.0312821968019672	-1.0164811121806232	-0.5788411209471953	0.1621555997620361	1.4878944321336367	-2.305258151983712	1.0526886159889823	-1.1927713830291693	0.35643089395408944	-0.35781685235193555	0.24420707079596798	-0.7032369510661453	1.3748594175398903	-0.265531361494145	-1.6001897901099145	1.5225430928104695	1.1284147518659724	-0.38179068502908986	0
+0.8466872377493828	0.21453403707113433	0.6877174913431068	-0.4470343315836607	-0.9060867789442381	0.22357751470350606	-1.4313384494982322	0.7146958272683516	1.2868876187481681	0.6108180939736211	1.6680351279664263	-2.2704132021611114	-0.5699517962545901	-0.5390686415774785	-0.6652888855585158	-1.9249041040915857	0.2022499134735356	1.4692083028521956	0.9692133398427439	-0.650684739883086	0
+-0.601702497867707	0.03192366589002642	-1.0154893571166628	1.2277054932407083	-0.17345609362160444	1.3508013650170736	-0.8603704762851204	0.7158372997438407	0.609842377909055	0.26686482080895313	-0.21636159151507584	1.4178789398571483	0.07902571896854252	1.6204683987456092	-1.0280706824933712	-1.405364977188804	0.7610249189649491	-0.7259753124258116	-1.1264854630318841	-0.3650429101933015	0
+0.2407422845881994	2.8857517953922764	-0.023980761898605114	-0.45619206614093344	0.6177594707762792	-0.08768373982573438	1.7598211003608997	-0.031028697570925873	-0.49143266590475054	-0.05864391264016893	-2.2134606073911924	1.0913309075290665	0.9117965623133085	-0.12278570026442888	-0.8739999199474732	1.1171072920808645	-0.5925089707550872	1.2372535126873845	2.124745399513117	0.2923959583087956	1
+0.17584571165005292	-0.8511320881692872	-2.2051034645754948	-0.6116310759188245	-1.2047158798971238	0.66839521890313	0.8991245292770655	0.4741248277718854	0.1760900687774567	-0.6307555906525206	0.9535866516994639	0.9371915337062796	-1.4228495469631228	0.16029074988453906	1.8555455403701624	-1.869116730286061	2.1934384645923486	-2.281305792694086	2.8097011435732293	-0.2736139860084672	0
+0.5242236519537231	-0.06307879670506915	-1.3294456177962388	0.8242892015046335	-1.081258571215189	1.3449502719441988	-0.50356048600791	-0.38621990548929036	-0.05314119332051215	-0.45271329511708064	0.087257980752205	-2.050905763049373	1.1197161016785873	0.9167469515279244	0.687592786751324	0.8579972616602627	-1.0583875221093613	0.7563768879274201	0.37967322200031345	0.11635935179374274	1
+0.558346902284024	-0.9309696527726209	-2.0842708835548924	0.030877752980638058	1.0396388948858852	-0.3022844248616988	-1.277629080640249	-0.6294458606293386	1.238756470825371	0.13639753659343484	-0.3188074229604005	-0.9443200259389776	-0.41149095236240474	-1.337165050885127	-0.33733841113672913	-1.0953021286821771	-0.8271589650497895	1.2703115446925113	0.6531758521433048	-0.5392612125425414	0
+-0.7379887070817857	-1.2626042854762183	0.17912390469970796	0.32669169909966733	-0.5343938353030584	-0.8617991799058063	-1.0231988412194268	-2.38861407368411	-0.15825189124877934	1.3263448403293359	1.7165027742351253	0.5384660112416041	1.3283330921381156	0.21309224825039347	0.9270035239969678	0.9968859637509941	-1.0501783925356227	-0.4559683500449692	0.6819648840132921	0.16739862639293818	1
+1.4476040528943543	-0.6314322515594253	0.14853198602056514	0.1396675784886334	0.016672373423269438	0.16564178605539887	-1.0040158066788205	-0.5327923727826095	1.147051857581131	-1.1417786944082575	0.44682624679647864	-1.3120985315266447	0.7869814652437135	-0.46902780374760905	0.7464021537026985	-1.153959736241712	-0.5774434779881016	1.8363081603106133	-1.7651938506826501	-0.5154033311511862	0
+-0.694949123737318	1.4480014208760492	1.114733892631557	1.3552725615328403	0.32870245607283527	2.182275910834502	-0.43728724254382445	-0.32108899071015246	1.7059375939854156	-1.0144720406973653	-1.1268282836571295	0.9114744851303214	0.2876311214263635	-0.9194792276680201	0.8712160137184647	-1.6822107044034538	-0.9046542625496667	-1.2265674316518074	-0.08885766708388806	-0.7626183729066613	0
+-0.4951739548431622	3.075573893432424	0.7125389403746353	0.7127480011897636	3.85793967348964	-1.380114296433079	0.830819563694863	1.6659047027918155	1.692437606180482	0.132962280436304	0.13986220576101485	-0.8782681675417305	0.692696057131838	0.21421904746683115	-0.08289852500467178	-1.697739157869832	-0.8585956144545324	0.3596237434172795	1.0687856807518747	-0.7598986082131621	0
+-0.24659729953406678	0.48028838228527204	-0.021175774300496716	-0.3664962494470602	0.01003713940839754	-0.25227004044698087	-1.9569675522430627	-0.22013056376799153	1.0072449553370086	1.490533097267343	-1.163235822180662	-0.564484658307677	-0.6542808538079327	0.3252062923168107	-0.39939137701024663	-0.4953677656109705	-1.2056522392978473	0.33107168261445835	0.8604754069049109	-0.3930464701607799	0
+1.0901528926431487	-0.9453346120985947	-0.4729131940164531	1.443087583454784	-1.4130407277334363	0.24204583536789437	1.5221528599715186	-1.4925201736211136	-0.750070599045198	1.0925633619786013	-0.6563789851711918	2.000672024084738	1.9550554438780816	0.8237126081224749	-0.32415019818829954	0.3320842417897454	0.947459986817773	1.746256318275166	-0.9194491847633625	0.28846144012404507	0
+0.8621689184981023	0.07355255089438108	-0.8847286012386693	0.4796962084572591	0.5677535540962639	-2.5289475108846857	0.7483241867237762	2.288635291333243	-0.4638726726966315	-1.4726571262457677	1.2522315626273022	0.9146566431112833	1.3432368831212602	-0.1516899652786653	0.6523101983645719	0.8002795439355803	-0.2164492931029829	1.175609480746336	-0.5899674340661235	0.2467801870809084	1
+1.8327334301292564	2.7250208073497655	0.8850898918686639	2.02577923393804	1.1993328107538388	-0.6080810819389247	0.45076298555579936	-0.8695507065224324	1.4966446042512176	0.9689045577333327	-0.040195475275759104	-0.8394777244112416	1.3016102245353771	0.7079943796338916	0.170770931967963	-1.9468700714932357	-0.1583369501288343	1.5860651416439473	1.5303010308595233	-0.7232027745913409	0
+0.45675680055100876	1.6862402750755072	-0.3339099307005731	0.9727972485358709	1.5405555309799355	0.5095493726194038	-1.1769248912579864	0.14688445026802582	-1.8923413151325892	-0.3597035854371358	0.034288605346101064	-0.1895277822930986	-1.5451347924726995	1.2116386663488123	-0.8476549112820619	2.8325772842721397	-0.3001639683766244	-0.38212536558313037	0.30867526144867835	0.9570534912074047	1
+0.6675880922360743	0.061607686265927775	-0.5240201725381137	-0.2997158513385201	0.43035789354356024	0.36247267480026046	-2.8186530025073595	0.05633894424120396	-1.4240630471371363	0.9417552666999109	0.8621190134296215	0.827177562356735	1.276247945989341	2.297885578997527	-0.646962111575448	1.4674788351942492	0.6699042159445734	0.5558064722220939	-0.8570825503940438	0.6438772343953656	1
+-0.7230597875372071	0.7389509974901849	-1.93022327109422	-0.07844206283832174	-1.8155995691953226	0.4605439023890654	0.33409134205811086	0.27987375745446136	-2.1891803361957525	0.814324613537393	0.33687080618689497	-1.1366259127066474	0.38265856161425904	-1.6119503393696952	1.2140595171215174	3.690453997873541	-0.9050341895489411	0.9404548194318197	-0.6885408976578092	1.1547176268987822	1
+-0.20429550994058496	-0.7742446220627313	0.9314007484353164	2.565917360177608	-1.93736462781153	0.5384714676400842	0.9863681649066736	1.483178916134393	-0.9316097044806316	-0.5277830403219427	-1.328483968518206	1.1375377820834534	0.41535786515366985	-0.18726676450257188	-0.05624642393738156	0.046686315886620644	1.6701180226287295	0.4152987016284749	1.3110909185719273	0.31623204667724564	1
+-0.26759192177397656	1.2033205926353625	0.049037461548016935	-0.26722530141904327	0.9561499786482655	0.5229173631509835	-0.9762315218209106	-0.10777619396316224	1.6028516387787055	-0.4694062226879811	0.35280658284312694	-0.0751525704189141	1.3547691398570894	0.8054921061469411	-1.4257562814463445	-1.922437446100354	-0.38886964310660965	1.2860174671016282	1.3242380220962733	-0.7558340808429282	0
+-0.7430459223148423	-0.345025274037323	-0.6836501416815086	1.1810021618172988	0.4137586484133794	-1.0717355675879099	1.2401898182121198	0.7045354278052993	-0.9063430103781079	-0.8859252495127169	-2.1418516144035475	0.10342901781618742	-0.30175139488690217	0.527387687628702	-0.49581833514279516	1.0261169886240376	0.302080558087638	-1.1807980275906318	-1.0660552581621128	0.4203865372286456	1
+-0.8856978941958283	-0.5611773427197669	0.23925986087456783	0.0915712442891479	0.9195436457578192	-0.3182853136155345	-0.4101120092081721	-0.07936631605575531	0.5178580879150084	-1.645607964622266	-0.09891912036094928	0.06812570823584903	-0.07149411774529733	-0.1378586963310319	0.16979751913292426	0.9737023906726753	-2.2766864166854184	-1.2674959941594357	-0.16935301763051838	-0.06087500479564888	1
+-0.8347002345785401	-0.5852677365383244	-0.22290652406605962	-1.998282087632246	0.27650295204355396	-0.006598203487616498	2.2812721074024944	-0.7372621615773305	-0.5524691100306179	-0.8106258122291109	1.2972505366193468	1.1535198870555938	-0.9294976841312648	-0.2885403301648238	0.10382736210532115	-0.023326105815496323	1.059228248788412	0.34421346303858386	0.5515401814060694	0.1816700680401573	0
+-0.59892262579212	-1.6376756241371526	-0.378736298456714	-1.0418743710911664	2.5492856987737014	-0.6615569434901911	0.006317661817300752	-1.7976375781681988	0.046863996948282666	-0.3823403780460225	-0.13210003839031914	0.5417126512741955	-0.823533424001803	-1.3644765720109107	-0.9859808115749349	0.7527993867760319	-1.102540208655706	1.9406228046678644	-0.28559377932836866	0.07089647899954139	1
+1.3925260779906183	1.0778035873134737	0.07530237581078959	-1.6645104329617095	-0.05818985492234962	0.563949339433897	0.6791380636681086	0.5219979705833208	-0.6360766994468067	0.16841451395907342	-0.10405164557505987	0.49256225202705956	-0.5383113936858084	-0.30229931902300344	-0.3925687758796	-0.8161226282106238	2.2840703234313273	-0.38465598282466923	0.39058426076124503	0.11843675039187236	1
+1.1352016674683758	0.5648569127221107	2.397073067233959	-0.20268282272443056	-1.0917976649357448	-0.6601392708428152	-1.9445402822954807	-0.29178644639701495	0.2751710745518691	1.0097935422904265	1.5387536595031532	0.26393122365044175	-0.46273031364217426	-2.2292589330885986	-0.9134206948382958	0.8401731701415269	-1.645111014559415	1.5562083709832442	-0.1089062616381093	0.004757145532405901	1
+1.098875986566869	-0.4022899215971822	1.5175361283542563	-0.4806321621688906	-0.2984356710923274	0.6355011681954533	-0.5366404268123247	-1.2703180389254833	1.516758047371705	-2.132910373907718	0.025191903274544	0.8231244016664833	0.4804114112715212	-0.2851808701227014	0.7592043314019562	-1.6607300610426388	-0.5816933219806619	0.3696111506737348	1.0423327430213356	-0.6970225369060598	0
+0.8101916422542774	-0.6863958655184795	-0.5296495025503906	-2.593049387823186	1.3099523237532418	-0.5560681594651091	-1.1332472710708152	0.4487887875734142	1.3556075253585955	0.10193764725371153	1.0604911834109119	-0.16433173228337156	-0.24321111498677203	-0.5777727170864493	-0.2805096318513892	-2.591494319646014	0.9734907223316764	-0.4208166097429164	0.28768107786745795	-0.7502402390626048	0
+0.12340670941539608	-0.5283333516589073	-0.8105601159173703	-0.790472710889662	-0.4072015719616529	0.2499136810467275	0.7000452723146847	-0.7368148416525208	1.3152294000156877	-0.14471976544476078	-0.09180805144899466	0.07455981071053643	-1.7390992728519505	0.031047952046710476	0.06339992712334852	-2.68682916947328	1.1771921941427486	1.9998578404574014	1.2720349278692757	-0.7477253587693696	0
+-1.8463416145538356	0.9877470273404159	0.6090995914299342	-0.05454962931514019	1.5957629012804186	-0.7274708346047783	-0.4881110169164618	-0.10746411474278562	-0.22966924089385501	-0.41243382161399256	-0.4533996984310992	0.6296948056302356	-1.1360989745400003	-1.3017565892197434	-0.41546602951164513	1.0106305929502466	-0.9358580686121462	-0.8522489506584864	1.0907946273414781	0.1928095681182362	1
+-1.153885792720572	0.9710150739398405	1.2485130631114325	-0.922849593193101	0.40944806598520256	-1.2377573117811096	0.055893360103507414	-0.180323324487924	-0.9518528082448592	0.49790841207097386	-0.7935082792305357	-0.13442562190597213	0.6807164316349167	-0.7735959733304064	-2.338273386722357	0.09862297814391718	1.6377256011208965	-1.1446482896282357	-1.5573740255791648	0.32895701815399	1
+0.38416436496131556	-1.4737655176136435	0.09207904862564406	0.8282908984570213	-0.2281547965833843	-0.6788102101595077	-0.8116419957449114	-1.1963099714035128	-1.5560108513806363	0.7831220308214599	0.11250426233136833	-0.093173526942104	-0.22085148462505744	0.5748209312636592	-0.028677866459869465	1.8567762034490851	0.3902933933742653	-1.3867146526153864	0.009430420454783334	0.7326561834289222	1
+0.5333662646860791	1.2619572530223984	0.06886762106070753	0.8686502617410066	0.6091057104482803	-0.863695134710848	1.2455241795966359	-0.41089883250021403	-0.7780948095240008	0.2657401234141504	0.2092762944699149	-0.6045175428606584	1.1907316086258812	-0.6255334005329436	0.5106942988951843	-0.41078796254386396	2.001562705082795	0.920622863636502	0.11248681150043587	0.21241951185988145	1
+1.5038046653372112	-0.5482813446368637	-0.3641863572992026	-1.1327291781835451	-0.15806847832806897	-0.7192061272862257	-0.6950098823438737	-0.47009316461768835	-1.9377149832346678	-0.35779084437972	0.8451070985370979	-0.5080798628815741	0.5485566605075846	0.9761767931804848	0.43925107369417943	2.957596999924257	-0.3843783591548495	0.10415185780639113	0.9951843831205078	0.9865650926014994	1
+-1.9728640480783795	-0.584889332459948	-1.7115830531175702	2.1324867288289617	-0.5256451948154732	-0.13207671471324264	-0.9292471979014248	0.3506928143980163	1.3092760133267836	0.5398129189913056	-1.3559078555972999	0.39841641960968166	1.2537261342634507	0.9637445310773097	0.5431731800991407	-0.796177135299726	-1.3618004012670868	0.15859859636139104	2.7213336098665635	-0.5284081777192728	0
+0.41614597578860496	-0.1679131727874871	-0.18337459189215918	0.6847631554909649	1.4671555504106528	-1.0600082591583286	0.7597959068113311	-0.6926816136990898	0.5399648494662486	0.1429569524514458	-0.0482216355946755	-0.2086217318530937	0.6610574334671373	-0.31480674559033817	-0.06162756634039431	-0.7644973510153209	0.026631685382698556	1.2830307747086311	0.5078271760432795	-0.2680579423040609	0
+-0.012045236853271031	1.6925906279849425	-0.43238636618530835	-1.6847064151587414	2.2803112732391826	0.4504456177691022	0.8841718182048186	-1.1106346720321985	0.49231132027988483	-0.29108659019024025	-0.37667434221349183	-0.5384799446573829	0.2080936834521666	0.7315635547473112	0.5624562546330725	-1.0760533706627082	0.5355018164707845	1.580659829411814	2.135839579661295	-0.28797000142125845	0
+1.49961056170431	0.17185882517030615	-1.1299710458171193	-1.0986042355701349	0.2380742569517034	1.3281321131436516	1.1167682468088798	0.35564438892659067	-0.8928006143434813	0.14614254213307512	1.2829097566144694	-0.013688855208146944	-0.45706533906364627	-0.3062063943698761	1.9034164161920542	1.0929212167523317	0.1867834374796813	0.7587214440890531	-0.3029040483924579	0.42354677628115955	1
+-2.6545414330136725	1.8356854615940046	-0.5457976028267867	-0.9275320032879893	-1.3283248730961463	0.6232216740312264	0.596469164632437	-0.7210278452213854	-0.9118316286209408	-0.24928762363265858	0.952868090977543	1.11694972800202	0.5416161166668478	0.20604165648494577	-2.533714900686942	-0.016083961019089266	1.717987671558801	0.5450784715193229	0.5568882027647745	0.30241692371509693	1
+0.6668801993571806	-2.3053224234261527	0.48468627798385755	1.3546263068343696	0.11873192576862872	0.547052797574943	0.719991138685963	-0.524434980542717	-0.46901795027526905	-1.0137197024379423	1.3569787876682777	-1.2845045596199125	-1.5523887064375035	0.2108731700382351	0.19659506908435523	-0.953106011799891	2.1580484593930747	-0.2561154143302568	2.0759505803869307	0.04694527263670476	0
+1.1311811909202247	-0.6933878511104847	-1.265057694018798	0.5183435151558969	-0.07684033970519674	1.1988239385167685	-0.9469760525902353	0.5391724452767099	-0.23426383767301404	-0.1090739625676252	0.21359010083019977	-2.268619962246101	-0.7529456042925735	-0.8425159924738271	-0.05816611715256052	1.0977895592955997	-1.0448686711150859	0.9636968648987307	0.5900261263151266	0.2043616532143112	1
+0.3136974470241752	-0.8291825633597693	-1.0372415290485972	0.586065961267128	0.12771181052702799	-0.7640402478085184	-0.5004744114139862	1.6608354030583428	-1.5278423539544295	0.5708166717972424	1.5345529929213104	0.6876259510533493	-2.091922245950683	-0.3022998396168013	0.9114872277854996	1.766640084108124	0.4594646315912676	-1.1409669611458368	-0.7203819922636215	0.7128955852536363	1
+-0.0843840216296024	-1.3820347260227162	0.6397705674189378	1.0854940115848073	-0.8750993854125558	-0.5369047713298828	-2.6192806035910072	0.6701565503321437	-1.84641452901824	-0.10678367894303217	-0.7624907593835051	0.5861653271698655	-0.17704463664703687	0.7085263301324782	-0.8713026470236783	2.69143441504066	-0.19523201436527637	2.1560252861535147	-1.5795988238989795	0.9255039639597403	1
+0.6790203045104227	0.04209531864771717	-0.9611185195569437	-0.3493805390110045	0.3752751708285271	-0.28824269480756903	-0.0899568402734146	-0.7077880082031884	0.4219096981099068	-0.4093739891492758	-0.2055219060653654	1.3144282945889445	1.3487878682901	0.4293192866086668	-0.35331772809174306	-2.2826706845081164	2.29392855287745	-0.8770797047105753	0.6595634650916563	-0.4031787064662481	0
+0.6325447969724978	-1.5376848226493998	2.135545601595113	-0.7169675793179096	0.7929518975841817	-1.9315293250980572	1.3897142939008622	0.24930998597507595	-1.6440687479969183	-0.3704887551777182	-1.23787039502056	1.1836559269554183	-1.0938410824485512	-0.9895111468738925	-1.9260882651788052	2.109489705785208	0.21325468197813358	-0.1667210430129357	-0.4438538195629017	0.7910893416120955	1
+1.385783766454507	0.6443593624326104	-0.696350741910387	-0.823087860995007	-2.674354948547689	-0.49104596911569837	-0.14505356097389743	0.08649405653783686	0.32769430695483825	0.5845207431072055	-0.24481231922778438	0.8116910518786606	1.1430734254415746	0.32847783781427603	-0.24814981566368804	-2.8145262786887635	3.1865533860467052	0.44909883424446956	-0.402495596969506	-0.4328771627918769	0
+3.2529008023011587	-0.27166980167059496	-0.10473605798933078	-0.6534723222613076	-0.47729389928282157	0.19299500589830051	-0.24751855177125084	1.0219251961145952	-1.3171347334030596	-0.32230874972038603	-0.8110222905403106	-1.1322412716856916	-0.4661557022161254	-0.9471392661729446	-1.5958813690320397	1.160984081252255	0.8843769178013272	-0.035928362941471184	-0.8154578692172377	0.5729651158375776	1
+-0.9552158838227957	-0.3785028025591672	0.23351936921649144	-1.365343241823016	-0.6359698186412605	0.2872129861981349	0.01632286834064877	0.9912188508026412	-0.4305595490234799	-0.2605126207976518	0.3214442712943701	-0.20958795245614859	-1.4526406739111428	0.03730765585464991	-1.3274909827312888	1.1647254348024332	-0.769978389629172	1.0149522887472011	0.27653105409089324	0.27755713923924	1
+0.6551705283348923	-0.5615847942521986	-0.49519737438896855	0.23737629933432333	-0.4143994932544478	0.5167863504871545	0.3437170326220349	-0.7014811472600427	-1.6077015111257857	0.09451199914284816	0.5398998770150264	1.7475220863842662	-0.7767689612363475	-0.2216084475817371	1.183412573203491	2.0036214776598777	0.2883927875098986	0.46301689909689936	-0.5918632272605117	0.766784528636304	1
+-0.3361436284769567	0.1823427274870421	3.334203517597432	1.0128962309550167	-1.8811146489414055	-0.958168335581346	-0.5484922802752095	0.11760845626656423	1.1468147240921671	0.49875048880422795	3.1733905239619795	-0.0526349697724523	0.08652484860757291	0.5769340599430341	-1.0778260770671824	-0.8829578732735933	-0.9425233847712056	1.6033719963489919	1.8445232062556762	-0.48417251502812303	0
+0.9050528629328798	-0.012035767922212968	0.21306591909620448	1.0094897718684082	1.8398709351830922	-0.20939878024355807	1.544249561568332	-0.5558744255462802	-0.14830157676341127	-0.9129893226159165	-0.9052536407792096	-2.185153803257982	-0.7555250892846609	1.0407174952822522	-0.45036832301510676	0.8342667153934721	-0.849352027222355	-0.9657156624472774	-1.0122112207459872	0.1453852453196201	1
+1.178239159200306	-1.0652461548210312	0.32928250529485964	0.16713678370411497	0.12495397935004156	2.745117964775073	0.6030536979033265	-0.5722638992074314	0.9615416437730038	-0.44340798605665754	-1.5164304957203023	-1.0614676369216434	-0.08605564337254189	-0.15484845483449294	0.7389539007599524	0.7502907577776994	-2.800745114653922	-1.9836209428041778	-0.1788939995187421	-0.23460734202135813	0
+-0.022012467048051917	-0.2980589001770356	-0.9287657608462492	0.2022550669003972	1.3583611934492914	-0.3473542636872249	-0.08008290659022492	-1.094868489559057	0.3797735402439996	-1.9003696914644261	1.3733264119781319	0.49468129909971936	-0.5266982026448499	0.21506804700839205	-1.0239364192571805	0.08708817019212689	-0.8239609000108052	-1.0562806080043665	-0.6782509079000207	-0.11671445720024777	0
+-0.05535106725613376	1.897495684900051	-1.2961422703619865	-2.2362527882016288	0.6062782036825521	2.4944056179800698	-0.3652339819814644	-0.4307541449118705	-0.5320017432805376	0.42491286095294456	0.8968935558620045	-0.3501200079640903	-0.9035207258064066	-0.20458977846842988	0.6228215147539629	0.36595471824159787	0.4960995217769678	-0.7661022207718267	0.046327557310846944	0.21958825180654357	0
+0.4892337648335795	-0.887961134764646	-0.6575191404509574	-0.9041652092433549	-0.1504880604676619	-0.14829295739477777	0.28675094725200034	-0.5695736471796179	0.15975525591910827	-2.267876921091358	0.3074302518646544	0.2859729425182367	-0.12518243894874598	0.5923394212109696	-1.4363920287788075	-0.9059221277254496	0.9246917409852377	-0.1251848370827014	0.07971000908831376	-0.15744397774867594	0
+-1.7231933239653434	-0.24801134827199994	-1.9898222399382914	0.7656954261085819	-0.05483023725936617	1.6169399021897064	-0.3967249498631411	1.0323459107790158	0.9731895081194355	1.0303924263130786	1.0329180459160618	-0.033547027338664666	-1.0624411368884286	-0.9342158375564429	0.05971477069293665	0.25789653038454863	-2.1582838562759	-0.2780337171101295	0.7441495680026682	-0.2950948350858021	0
+0.16933309281863	-1.3713232471471188	-0.28145821900384405	-1.1300262257452833	0.5588657879489666	0.18393634027606567	-0.33064387147695085	-0.2728913561712938	-1.5796081028817355	-0.059698139612798386	-0.5305183143587244	0.4522332723500524	-0.35850443734187276	-0.6618912758728542	1.105836446597426	-0.8045286988938815	4.02369826067075	-0.6441278738693271	-1.1617665339422667	0.43461303247631455	0
+-1.8460295965152045	-0.255975214092637	1.0540424748134019	1.3190200056340993	-0.9984660716843727	0.1252126858419551	1.479116981117545	-0.07780687825586112	0.1755389386980704	-0.7247573669263252	-0.18580560212243427	0.4759463602670577	-1.079448951686073	0.5844426958957524	-0.013805770284701622	-1.7460392281016928	2.0284596495593634	-0.7858761582110539	-0.17228886477186073	-0.2592823117499626	0
+1.8771428706377922	1.954430088902813	-1.1616019467282765	0.5673334205644196	-0.08799540550164092	0.06644430233106957	0.5679433816499357	0.42441824827810354	0.1518278594250636	0.4306132751340653	0.0692509618345264	-0.1016379743818435	-0.5693165703158743	0.2262121311410064	-1.190784254860191	0.9589244192715091	-1.5758227297795224	0.32702615652721884	0.9015922583874204	0.05956556043266634	1
+0.15323002771333824	-0.3966186853856485	0.8421724903224964	-1.317627725338646	-0.33858048238968697	-0.4090657931046078	-1.4582418462866669	-0.6594840624629351	-0.4004108226455998	-0.7863950304118423	-0.7665729756746352	-0.010906592167949567	0.453194204359973	0.004008795533567026	1.3681052191345213	0.8285147180193451	-0.37259127080818166	0.7918792014178204	0.013153036557870796	0.22884946912013177	1
+-1.0926888646283135	0.7474034182399546	0.5070475019762871	-0.8560620219978579	2.019086116729861	2.7090019473659184	-0.5897085867477189	0.46800068820276425	1.1973925923016058	0.7580424981657605	-0.17689686434453186	-0.8134248245767957	-0.8757308415987771	0.1763704781550424	-1.199439969467994	-0.8989032076979058	-1.0151074498008397	-0.2667781642372559	1.5593148568891022	-0.5028825773221669	0
+-0.0696156591485477	-0.3955656348590421	-1.790003919076157	-3.209955381978046	1.7551741656764832	0.11653331605849324	-0.9325834567618385	-1.9081847831366037	1.5011366872997127	1.3655901991926498	0.714532047991697	-0.6735645547992268	2.4009183113212806	0.2753934759411781	-0.5586953357167566	-2.4248580602515304	0.4780055133333252	0.22430285295477725	1.5235848315795288	-0.779646482652198	0
+0.2383846452550063	-0.3130077315757537	1.0033975572213907	0.08864979057352633	1.6717911886146681	1.3347307577271426	0.12355262918532725	0.38378884838187516	1.0545758256277624	1.1966614601200112	-0.10788917679723521	1.5477291028255866	0.2484946248806814	-1.1366727112923867	-0.46484257027188	-0.6665072856921015	-1.062873534624194	0.8876717808262652	-1.3245780959402302	-0.4285126387910002	0
+-2.008942616762241	-0.8234988716333305	-0.15859132011071364	-0.5779462669917929	0.05687216122626013	-0.711741585516688	0.30663585257868975	-0.7322607097367665	-0.27918196650116295	0.23889598302964352	-2.89224040536514	-1.8338737352874381	-0.03502705018890768	-0.04826170379593097	-0.5084528851522548	1.0144555813357954	-0.8489078616442869	-1.5316018230959503	-1.9059055368464786	0.20977097201525036	1
+-0.1704564684096478	0.18971879197958597	-1.1844114274105708	-0.8546727892795731	0.09277642496734965	-0.1366293792823912	-2.048671922604096	-0.3357568385230854	1.4483592899951359	-1.0696662666401626	-0.2329845615794952	0.7837860781804775	0.41841523883774684	-0.8676594983663888	0.22583874577075078	-1.695720544464892	-0.4072557367301234	-0.1977972902611956	0.02359749586524577	-0.6782209637144826	0
+0.3239072506712229	0.7771447267055485	0.7529184295240164	-0.809273033397095	-0.5856061645692245	-0.6334300503835257	-0.7685061144460843	1.0110108162654712	-0.6307900736125656	1.0720688438114894	0.7375706675328788	-1.2970277152025405	-1.0622293344492408	0.12369973790391253	0.08645024003597679	-0.8294853204395023	2.2922588248961673	-2.306182941147614	-0.23693404546697278	0.11513663282079874	1
+-0.12031642840440407	-0.055598926892828825	0.29442208903978195	-0.08405908275243704	2.5707645107660437	-2.2724393778493805	-0.7091400944632673	-0.01527361681359736	-1.2630992116666893	-0.29672975912512006	-1.1604505895963486	-0.7448891733298583	-0.7216707082208504	1.6347076109296752	0.2543420370586476	0.9986464179201701	1.0028111182919377	-1.0099153635800724	0.6364125215344348	0.5362734706812686	1
+1.0759409181533681	0.6338708137850724	1.059455516811933	0.2736075032324234	-1.1004879462237114	0.8983820725024066	-0.9152704846639929	-0.8347039847535137	-1.3994538124984017	0.06937008395653746	-0.4322117530530746	-1.297471755359271	-0.9256383920977915	-1.5287869947378168	0.46665199638203264	1.3984163949968078	0.7172731124783118	-2.1595920504682318	0.2178924553288528	0.627726734926914	1
+1.1631257343736865	0.7161109143496656	1.165181781246556	-0.0970197604214342	1.770668260834617	0.09786380091576943	-0.25203469271235573	-0.07117035012372852	1.2621614052889216	-2.204226920077547	-0.833481645415412	1.668179441254334	0.6299876168291397	-0.4391047192362273	-0.12336287720355432	-2.4752753514344055	0.9905764766530935	0.16824138572933983	-1.108371640458861	-0.7056991628790823	0
+-0.4653767839296524	0.5706552646301977	-1.2510825198094822	-0.38542737502404606	0.5418393251037328	0.8696564647003973	-0.2677426807372017	1.3874400614164746	-1.6989225614176242	-0.8543980754353178	-0.7126300388983264	0.39242735549607893	0.7427861661062981	0.23731164772086588	0.17840259925316965	2.264950231927068	0.10561848543619334	1.7893962060023398	-0.33937719999794	0.8272635120183163	1
+1.0658262297925543	0.2245144207327693	1.9979515177687335	-1.3687162010707115	-1.1274591498928925	0.6453464430821444	0.10571095020938731	-0.04489492214522473	0.4070092579150457	-1.6549967992364703	-0.1861816445428681	-1.0013467840435817	0.13042091725382485	-0.9328609421342365	1.4771353822876396	1.0854915441340736	-2.221251309417225	0.5725567515972323	-1.1577200461261594	-0.011036089287608658	1
+-1.0583794427218747	2.576977679031155	-0.5895820679190702	0.13438281144361666	0.36102541634537905	1.5183620699261768	1.5873212424728582	-0.7273069057149364	0.4522026560345715	-0.02860552628379647	-0.018212347104613166	0.687677616154882	0.5422573331869172	0.10659762229930982	-1.2522775141080984	0.7277335248049872	-1.8227895144219035	-0.7301662802248373	0.9715535632493052	-0.0672408254641321	1
+-0.1099953959208559	1.6635363107373078	0.3272453529764515	-1.4246555886796946	1.2410820871966046	-0.15951736500333072	-0.661937714925914	0.4234572818376501	1.1246881843788494	0.9529594279919252	0.39143861927191975	3.465227148479317	-0.24134874955198468	-1.0945571896156956	-0.9833626436429376	-1.480187693017323	-0.09583127396217472	-0.31134706056867467	-0.6248721853412322	-0.5454408106982881	0
+0.9291001132966914	-0.1708304076874391	0.5364439368681257	0.2630766894332881	-0.1295965590136687	0.9929416493373554	0.7904280904722739	-0.01912275129904966	1.5057113544481104	-1.9314128569290476	-0.40508326392063543	1.0918159072154612	0.1881369570559398	-1.213691539345214	0.02421534060406341	-1.96631401509566	-0.14897841915958698	-2.1313146599852018	-1.2710579854942345	-0.7284633084773273	0
+0.6336131127287113	2.0333233170635046	-0.022356711144941453	-0.22007309599774338	0.9282123550423084	-0.787901129200937	0.5812629099886915	0.377426024051308	0.15067520175237897	-2.340925516401822	0.07371157701560777	1.560723423781778	-0.38910754054643126	1.0173191686261756	-0.4198460795464502	-0.4257545472403689	0.2939445657648525	0.6855820937261274	-2.068890495355913	-0.09921878204870066	0
+2.049778771444076	1.3048378295965286	1.563792608618236	-0.7047392202425459	0.5499305970570395	-0.04884518704139992	0.5223109585785488	-1.4893434370374596	1.3606389947395752	0.3899429971033616	0.055686488142052015	0.8438100462780511	1.6850310129308619	1.2652993760910154	-0.2279594058376745	-1.9365760629271713	0.0807919955941725	-0.6380407350109051	-1.0466273798176675	-0.6766362607223333	0
+0.630742979769623	-0.12660063112597814	-1.1219892377344292	-0.24320231504242704	-0.11846930012185257	0.35618373486097415	-0.35432027228237667	0.6830976831702715	-1.2988376519016114	-0.12917328933680922	0.4878147649765918	1.6226344780340827	0.46020710543895615	-0.9537377215409267	0.8308526010187456	1.1069055404414496	0.9232784698807094	-1.2718116679596179	-0.5666412777157238	0.5606432963172591	1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/classification_report.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,11 @@
+classification_report : 
+              precision    recall  f1-score   support
+
+           0       1.00      1.00      1.00        14
+           1       1.00      0.62      0.77        16
+           2       0.60      1.00      0.75         9
+
+   micro avg       0.85      0.85      0.85        39
+   macro avg       0.87      0.88      0.84        39
+weighted avg       0.91      0.85      0.85        39
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/cluster_result01.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,48 @@
+0	44	64	-76	0
+0	51	48	-73	0
+0	58	65	-49	0
+0	43	61	-49	0
+0	45	43	-79	0
+0	42	60	-98	0
+0	50	55	-59	0
+0	53	53	-56	0
+0	45	44	-61	0
+0	43	65	-84	0
+0	35	52	-75	0
+0	56	56	-70	0
+1	-61	86	43	2
+1	-67	93	15	2
+1	-59	94	36	2
+1	-50	92	62	2
+1	-78	91	70	2
+1	-35	87	47	2
+1	-56	91	52	2
+1	-61	81	46	2
+1	-83	78	34	2
+1	-50	87	45	2
+1	-67	73	50	2
+1	-50	97	45	2
+1	-61	111	45	2
+2	-109	23	-92	1
+2	-94	20	-96	1
+2	-85	26	-88	1
+2	-90	33	-114	1
+2	-63	9	-106	1
+2	-79	9	-93	1
+2	-99	26	-108	1
+2	-81	19	-110	1
+2	-108	21	-108	1
+2	-92	27	-106	1
+2	-88	2	-106	1
+2	-88	15	-103	1
+3	54	-74	4	3
+3	42	-92	31	3
+3	39	-99	-7	3
+3	48	-115	-5	3
+3	39	-96	2	3
+3	31	-109	9	3
+3	33	-96	-8	3
+3	23	-102	4	3
+3	38	-90	21	3
+3	34	-107	1	3
+3	35	-78	18	3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/cluster_result02.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,48 @@
+0	44	64	-76	3
+0	51	48	-73	3
+0	58	65	-49	3
+0	43	61	-49	3
+0	45	43	-79	3
+0	42	60	-98	3
+0	50	55	-59	3
+0	53	53	-56	3
+0	45	44	-61	3
+0	43	65	-84	3
+0	35	52	-75	3
+0	56	56	-70	3
+1	-61	86	43	2
+1	-67	93	15	2
+1	-59	94	36	2
+1	-50	92	62	2
+1	-78	91	70	2
+1	-35	87	47	2
+1	-56	91	52	2
+1	-61	81	46	2
+1	-83	78	34	2
+1	-50	87	45	2
+1	-67	73	50	2
+1	-50	97	45	2
+1	-61	111	45	2
+2	-109	23	-92	0
+2	-94	20	-96	0
+2	-85	26	-88	0
+2	-90	33	-114	0
+2	-63	9	-106	0
+2	-79	9	-93	0
+2	-99	26	-108	0
+2	-81	19	-110	0
+2	-108	21	-108	0
+2	-92	27	-106	0
+2	-88	2	-106	0
+2	-88	15	-103	0
+3	54	-74	4	1
+3	42	-92	31	1
+3	39	-99	-7	1
+3	48	-115	-5	1
+3	39	-96	2	1
+3	31	-109	9	1
+3	33	-96	-8	1
+3	23	-102	4	1
+3	38	-90	21	1
+3	34	-107	1	1
+3	35	-78	18	1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/cluster_result03.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,48 @@
+0	44	64	-76	-1
+0	51	48	-73	-1
+0	58	65	-49	-1
+0	43	61	-49	-1
+0	45	43	-79	-1
+0	42	60	-98	-1
+0	50	55	-59	-1
+0	53	53	-56	-1
+0	45	44	-61	-1
+0	43	65	-84	-1
+0	35	52	-75	-1
+0	56	56	-70	-1
+1	-61	86	43	-1
+1	-67	93	15	-1
+1	-59	94	36	-1
+1	-50	92	62	-1
+1	-78	91	70	-1
+1	-35	87	47	-1
+1	-56	91	52	-1
+1	-61	81	46	-1
+1	-83	78	34	-1
+1	-50	87	45	-1
+1	-67	73	50	-1
+1	-50	97	45	-1
+1	-61	111	45	-1
+2	-109	23	-92	-1
+2	-94	20	-96	-1
+2	-85	26	-88	-1
+2	-90	33	-114	-1
+2	-63	9	-106	-1
+2	-79	9	-93	-1
+2	-99	26	-108	-1
+2	-81	19	-110	-1
+2	-108	21	-108	-1
+2	-92	27	-106	-1
+2	-88	2	-106	-1
+2	-88	15	-103	-1
+3	54	-74	4	-1
+3	42	-92	31	-1
+3	39	-99	-7	-1
+3	48	-115	-5	-1
+3	39	-96	2	-1
+3	31	-109	9	-1
+3	33	-96	-8	-1
+3	23	-102	4	-1
+3	38	-90	21	-1
+3	34	-107	1	-1
+3	35	-78	18	-1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/cluster_result04.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,48 @@
+0	44	64	-76	1
+0	51	48	-73	1
+0	58	65	-49	1
+0	43	61	-49	1
+0	45	43	-79	1
+0	42	60	-98	1
+0	50	55	-59	1
+0	53	53	-56	1
+0	45	44	-61	1
+0	43	65	-84	1
+0	35	52	-75	1
+0	56	56	-70	1
+1	-61	86	43	2
+1	-67	93	15	2
+1	-59	94	36	2
+1	-50	92	62	2
+1	-78	91	70	2
+1	-35	87	47	2
+1	-56	91	52	2
+1	-61	81	46	2
+1	-83	78	34	2
+1	-50	87	45	2
+1	-67	73	50	2
+1	-50	97	45	2
+1	-61	111	45	2
+2	-109	23	-92	3
+2	-94	20	-96	3
+2	-85	26	-88	3
+2	-90	33	-114	3
+2	-63	9	-106	3
+2	-79	9	-93	3
+2	-99	26	-108	3
+2	-81	19	-110	3
+2	-108	21	-108	3
+2	-92	27	-106	3
+2	-88	2	-106	3
+2	-88	15	-103	3
+3	54	-74	4	0
+3	42	-92	31	0
+3	39	-99	-7	0
+3	48	-115	-5	0
+3	39	-96	2	0
+3	31	-109	9	0
+3	33	-96	-8	0
+3	23	-102	4	0
+3	38	-90	21	0
+3	34	-107	1	0
+3	35	-78	18	0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/cluster_result05.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,48 @@
+0	44	64	-76	0
+0	51	48	-73	0
+0	58	65	-49	0
+0	43	61	-49	0
+0	45	43	-79	0
+0	42	60	-98	0
+0	50	55	-59	0
+0	53	53	-56	0
+0	45	44	-61	0
+0	43	65	-84	0
+0	35	52	-75	0
+0	56	56	-70	0
+1	-61	86	43	2
+1	-67	93	15	2
+1	-59	94	36	2
+1	-50	92	62	2
+1	-78	91	70	2
+1	-35	87	47	2
+1	-56	91	52	2
+1	-61	81	46	2
+1	-83	78	34	2
+1	-50	87	45	2
+1	-67	73	50	2
+1	-50	97	45	2
+1	-61	111	45	2
+2	-109	23	-92	0
+2	-94	20	-96	0
+2	-85	26	-88	0
+2	-90	33	-114	0
+2	-63	9	-106	0
+2	-79	9	-93	0
+2	-99	26	-108	0
+2	-81	19	-110	0
+2	-108	21	-108	0
+2	-92	27	-106	0
+2	-88	2	-106	0
+2	-88	15	-103	0
+3	54	-74	4	1
+3	42	-92	31	1
+3	39	-99	-7	1
+3	48	-115	-5	1
+3	39	-96	2	1
+3	31	-109	9	1
+3	33	-96	-8	1
+3	23	-102	4	1
+3	38	-90	21	1
+3	34	-107	1	1
+3	35	-78	18	1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/cluster_result06.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,48 @@
+0	44	64	-76	0
+0	51	48	-73	0
+0	58	65	-49	0
+0	43	61	-49	0
+0	45	43	-79	0
+0	42	60	-98	0
+0	50	55	-59	0
+0	53	53	-56	0
+0	45	44	-61	0
+0	43	65	-84	0
+0	35	52	-75	0
+0	56	56	-70	0
+1	-61	86	43	1
+1	-67	93	15	1
+1	-59	94	36	1
+1	-50	92	62	1
+1	-78	91	70	1
+1	-35	87	47	1
+1	-56	91	52	1
+1	-61	81	46	1
+1	-83	78	34	1
+1	-50	87	45	1
+1	-67	73	50	1
+1	-50	97	45	1
+1	-61	111	45	1
+2	-109	23	-92	2
+2	-94	20	-96	2
+2	-85	26	-88	2
+2	-90	33	-114	2
+2	-63	9	-106	2
+2	-79	9	-93	2
+2	-99	26	-108	2
+2	-81	19	-110	2
+2	-108	21	-108	2
+2	-92	27	-106	2
+2	-88	2	-106	2
+2	-88	15	-103	2
+3	54	-74	4	3
+3	42	-92	31	3
+3	39	-99	-7	3
+3	48	-115	-5	3
+3	39	-96	2	3
+3	31	-109	9	3
+3	33	-96	-8	3
+3	23	-102	4	3
+3	38	-90	21	3
+3	34	-107	1	3
+3	35	-78	18	3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/cluster_result07.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,48 @@
+0	44	64	-76	0
+0	51	48	-73	0
+0	58	65	-49	0
+0	43	61	-49	0
+0	45	43	-79	0
+0	42	60	-98	0
+0	50	55	-59	0
+0	53	53	-56	0
+0	45	44	-61	0
+0	43	65	-84	0
+0	35	52	-75	0
+0	56	56	-70	0
+1	-61	86	43	1
+1	-67	93	15	1
+1	-59	94	36	1
+1	-50	92	62	1
+1	-78	91	70	1
+1	-35	87	47	1
+1	-56	91	52	1
+1	-61	81	46	1
+1	-83	78	34	1
+1	-50	87	45	1
+1	-67	73	50	1
+1	-50	97	45	1
+1	-61	111	45	1
+2	-109	23	-92	2
+2	-94	20	-96	2
+2	-85	26	-88	2
+2	-90	33	-114	2
+2	-63	9	-106	2
+2	-79	9	-93	2
+2	-99	26	-108	2
+2	-81	19	-110	2
+2	-108	21	-108	2
+2	-92	27	-106	2
+2	-88	2	-106	2
+2	-88	15	-103	2
+3	54	-74	4	3
+3	42	-92	31	3
+3	39	-99	-7	3
+3	48	-115	-5	3
+3	39	-96	2	3
+3	31	-109	9	3
+3	33	-96	-8	3
+3	23	-102	4	3
+3	38	-90	21	3
+3	34	-107	1	3
+3	35	-78	18	3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/cluster_result08.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,48 @@
+0	44	64	-76	0
+0	51	48	-73	0
+0	58	65	-49	0
+0	43	61	-49	0
+0	45	43	-79	0
+0	42	60	-98	0
+0	50	55	-59	0
+0	53	53	-56	0
+0	45	44	-61	0
+0	43	65	-84	0
+0	35	52	-75	0
+0	56	56	-70	0
+1	-61	86	43	0
+1	-67	93	15	0
+1	-59	94	36	0
+1	-50	92	62	0
+1	-78	91	70	0
+1	-35	87	47	0
+1	-56	91	52	0
+1	-61	81	46	0
+1	-83	78	34	0
+1	-50	87	45	0
+1	-67	73	50	0
+1	-50	97	45	0
+1	-61	111	45	0
+2	-109	23	-92	0
+2	-94	20	-96	0
+2	-85	26	-88	0
+2	-90	33	-114	0
+2	-63	9	-106	0
+2	-79	9	-93	0
+2	-99	26	-108	0
+2	-81	19	-110	0
+2	-108	21	-108	0
+2	-92	27	-106	0
+2	-88	2	-106	0
+2	-88	15	-103	0
+3	54	-74	4	1
+3	42	-92	31	1
+3	39	-99	-7	1
+3	48	-115	-5	1
+3	39	-96	2	1
+3	31	-109	9	1
+3	33	-96	-8	1
+3	23	-102	4	1
+3	38	-90	21	1
+3	34	-107	1	1
+3	35	-78	18	1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/cluster_result09.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,48 @@
+0	44	64	-76	0
+0	51	48	-73	0
+0	58	65	-49	0
+0	43	61	-49	0
+0	45	43	-79	0
+0	42	60	-98	0
+0	50	55	-59	0
+0	53	53	-56	0
+0	45	44	-61	0
+0	43	65	-84	0
+0	35	52	-75	0
+0	56	56	-70	0
+1	-61	86	43	0
+1	-67	93	15	0
+1	-59	94	36	0
+1	-50	92	62	0
+1	-78	91	70	0
+1	-35	87	47	0
+1	-56	91	52	0
+1	-61	81	46	0
+1	-83	78	34	0
+1	-50	87	45	0
+1	-67	73	50	0
+1	-50	97	45	0
+1	-61	111	45	0
+2	-109	23	-92	0
+2	-94	20	-96	0
+2	-85	26	-88	0
+2	-90	33	-114	0
+2	-63	9	-106	0
+2	-79	9	-93	0
+2	-99	26	-108	0
+2	-81	19	-110	0
+2	-108	21	-108	0
+2	-92	27	-106	0
+2	-88	2	-106	0
+2	-88	15	-103	0
+3	54	-74	4	1
+3	42	-92	31	1
+3	39	-99	-7	1
+3	48	-115	-5	1
+3	39	-96	2	1
+3	31	-109	9	1
+3	33	-96	-8	1
+3	23	-102	4	1
+3	38	-90	21	1
+3	34	-107	1	1
+3	35	-78	18	1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/cluster_result10.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,48 @@
+0	44	64	-76	3
+0	51	48	-73	3
+0	58	65	-49	3
+0	43	61	-49	3
+0	45	43	-79	3
+0	42	60	-98	3
+0	50	55	-59	3
+0	53	53	-56	3
+0	45	44	-61	3
+0	43	65	-84	3
+0	35	52	-75	3
+0	56	56	-70	3
+1	-61	86	43	0
+1	-67	93	15	0
+1	-59	94	36	0
+1	-50	92	62	0
+1	-78	91	70	0
+1	-35	87	47	0
+1	-56	91	52	0
+1	-61	81	46	0
+1	-83	78	34	0
+1	-50	87	45	0
+1	-67	73	50	0
+1	-50	97	45	0
+1	-61	111	45	0
+2	-109	23	-92	2
+2	-94	20	-96	2
+2	-85	26	-88	2
+2	-90	33	-114	2
+2	-63	9	-106	2
+2	-79	9	-93	2
+2	-99	26	-108	2
+2	-81	19	-110	2
+2	-108	21	-108	2
+2	-92	27	-106	2
+2	-88	2	-106	2
+2	-88	15	-103	2
+3	54	-74	4	1
+3	42	-92	31	1
+3	39	-99	-7	1
+3	48	-115	-5	1
+3	39	-96	2	1
+3	31	-109	9	1
+3	33	-96	-8	1
+3	23	-102	4	1
+3	38	-90	21	1
+3	34	-107	1	1
+3	35	-78	18	1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/cluster_result11.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,48 @@
+0	44	64	-76	2
+0	51	48	-73	2
+0	58	65	-49	2
+0	43	61	-49	2
+0	45	43	-79	2
+0	42	60	-98	2
+0	50	55	-59	2
+0	53	53	-56	2
+0	45	44	-61	2
+0	43	65	-84	2
+0	35	52	-75	2
+0	56	56	-70	2
+1	-61	86	43	0
+1	-67	93	15	0
+1	-59	94	36	0
+1	-50	92	62	0
+1	-78	91	70	0
+1	-35	87	47	0
+1	-56	91	52	0
+1	-61	81	46	0
+1	-83	78	34	0
+1	-50	87	45	0
+1	-67	73	50	0
+1	-50	97	45	0
+1	-61	111	45	0
+2	-109	23	-92	1
+2	-94	20	-96	1
+2	-85	26	-88	1
+2	-90	33	-114	1
+2	-63	9	-106	1
+2	-79	9	-93	1
+2	-99	26	-108	1
+2	-81	19	-110	1
+2	-108	21	-108	1
+2	-92	27	-106	1
+2	-88	2	-106	1
+2	-88	15	-103	1
+3	54	-74	4	3
+3	42	-92	31	3
+3	39	-99	-7	3
+3	48	-115	-5	3
+3	39	-96	2	3
+3	31	-109	9	3
+3	33	-96	-8	3
+3	23	-102	4	3
+3	38	-90	21	3
+3	34	-107	1	3
+3	35	-78	18	3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/cluster_result12.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,48 @@
+0	44	64	-76	1
+0	51	48	-73	1
+0	58	65	-49	1
+0	43	61	-49	0
+0	45	43	-79	1
+0	42	60	-98	1
+0	50	55	-59	1
+0	53	53	-56	1
+0	45	44	-61	0
+0	43	65	-84	1
+0	35	52	-75	1
+0	56	56	-70	1
+1	-61	86	43	2
+1	-67	93	15	1
+1	-59	94	36	1
+1	-50	92	62	0
+1	-78	91	70	1
+1	-35	87	47	1
+1	-56	91	52	0
+1	-61	81	46	2
+1	-83	78	34	1
+1	-50	87	45	0
+1	-67	73	50	1
+1	-50	97	45	0
+1	-61	111	45	1
+2	-109	23	-92	0
+2	-94	20	-96	3
+2	-85	26	-88	3
+2	-90	33	-114	3
+2	-63	9	-106	0
+2	-79	9	-93	1
+2	-99	26	-108	3
+2	-81	19	-110	3
+2	-108	21	-108	3
+2	-92	27	-106	3
+2	-88	2	-106	0
+2	-88	15	-103	3
+3	54	-74	4	1
+3	42	-92	31	3
+3	39	-99	-7	3
+3	48	-115	-5	1
+3	39	-96	2	3
+3	31	-109	9	3
+3	33	-96	-8	3
+3	23	-102	4	3
+3	38	-90	21	3
+3	34	-107	1	3
+3	35	-78	18	3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/cluster_result13.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,48 @@
+0	44	64	-76	4
+0	51	48	-73	0
+0	58	65	-49	0
+0	43	61	-49	1
+0	45	43	-79	0
+0	42	60	-98	0
+0	50	55	-59	2
+0	53	53	-56	2
+0	45	44	-61	0
+0	43	65	-84	4
+0	35	52	-75	1
+0	56	56	-70	0
+1	-61	86	43	0
+1	-67	93	15	0
+1	-59	94	36	0
+1	-50	92	62	0
+1	-78	91	70	1
+1	-35	87	47	0
+1	-56	91	52	0
+1	-61	81	46	0
+1	-83	78	34	0
+1	-50	87	45	0
+1	-67	73	50	1
+1	-50	97	45	0
+1	-61	111	45	0
+2	-109	23	-92	0
+2	-94	20	-96	0
+2	-85	26	-88	0
+2	-90	33	-114	1
+2	-63	9	-106	0
+2	-79	9	-93	1
+2	-99	26	-108	3
+2	-81	19	-110	0
+2	-108	21	-108	0
+2	-92	27	-106	3
+2	-88	2	-106	1
+2	-88	15	-103	0
+3	54	-74	4	0
+3	42	-92	31	1
+3	39	-99	-7	1
+3	48	-115	-5	1
+3	39	-96	2	1
+3	31	-109	9	1
+3	33	-96	-8	1
+3	23	-102	4	0
+3	38	-90	21	1
+3	34	-107	1	1
+3	35	-78	18	1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/cluster_result14.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,48 @@
+0	44	64	-76	2
+0	51	48	-73	2
+0	58	65	-49	5
+0	43	61	-49	5
+0	45	43	-79	2
+0	42	60	-98	2
+0	50	55	-59	5
+0	53	53	-56	5
+0	45	44	-61	2
+0	43	65	-84	2
+0	35	52	-75	2
+0	56	56	-70	2
+1	-61	86	43	1
+1	-67	93	15	1
+1	-59	94	36	1
+1	-50	92	62	1
+1	-78	91	70	7
+1	-35	87	47	1
+1	-56	91	52	1
+1	-61	81	46	7
+1	-83	78	34	7
+1	-50	87	45	1
+1	-67	73	50	7
+1	-50	97	45	1
+1	-61	111	45	1
+2	-109	23	-92	6
+2	-94	20	-96	6
+2	-85	26	-88	6
+2	-90	33	-114	6
+2	-63	9	-106	3
+2	-79	9	-93	3
+2	-99	26	-108	6
+2	-81	19	-110	6
+2	-108	21	-108	6
+2	-92	27	-106	6
+2	-88	2	-106	3
+2	-88	15	-103	6
+3	54	-74	4	4
+3	42	-92	31	4
+3	39	-99	-7	0
+3	48	-115	-5	0
+3	39	-96	2	0
+3	31	-109	9	0
+3	33	-96	-8	0
+3	23	-102	4	0
+3	38	-90	21	4
+3	34	-107	1	0
+3	35	-78	18	4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/cluster_result15.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,48 @@
+0	44	64	-76	1
+0	51	48	-73	1
+0	58	65	-49	1
+0	43	61	-49	1
+0	45	43	-79	1
+0	42	60	-98	1
+0	50	55	-59	1
+0	53	53	-56	1
+0	45	44	-61	1
+0	43	65	-84	1
+0	35	52	-75	1
+0	56	56	-70	1
+1	-61	86	43	2
+1	-67	93	15	2
+1	-59	94	36	2
+1	-50	92	62	2
+1	-78	91	70	2
+1	-35	87	47	2
+1	-56	91	52	2
+1	-61	81	46	2
+1	-83	78	34	2
+1	-50	87	45	2
+1	-67	73	50	2
+1	-50	97	45	2
+1	-61	111	45	2
+2	-109	23	-92	3
+2	-94	20	-96	3
+2	-85	26	-88	3
+2	-90	33	-114	3
+2	-63	9	-106	3
+2	-79	9	-93	3
+2	-99	26	-108	3
+2	-81	19	-110	3
+2	-108	21	-108	3
+2	-92	27	-106	3
+2	-88	2	-106	3
+2	-88	15	-103	3
+3	54	-74	4	0
+3	42	-92	31	0
+3	39	-99	-7	0
+3	48	-115	-5	0
+3	39	-96	2	0
+3	31	-109	9	0
+3	33	-96	-8	0
+3	23	-102	4	0
+3	38	-90	21	0
+3	34	-107	1	0
+3	35	-78	18	0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/cluster_result16.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,48 @@
+0	44	64	-76	0
+0	51	48	-73	0
+0	58	65	-49	0
+0	43	61	-49	0
+0	45	43	-79	0
+0	42	60	-98	0
+0	50	55	-59	0
+0	53	53	-56	0
+0	45	44	-61	0
+0	43	65	-84	0
+0	35	52	-75	0
+0	56	56	-70	0
+1	-61	86	43	2
+1	-67	93	15	2
+1	-59	94	36	2
+1	-50	92	62	2
+1	-78	91	70	2
+1	-35	87	47	2
+1	-56	91	52	2
+1	-61	81	46	2
+1	-83	78	34	2
+1	-50	87	45	2
+1	-67	73	50	2
+1	-50	97	45	2
+1	-61	111	45	2
+2	-109	23	-92	3
+2	-94	20	-96	3
+2	-85	26	-88	3
+2	-90	33	-114	3
+2	-63	9	-106	3
+2	-79	9	-93	3
+2	-99	26	-108	3
+2	-81	19	-110	3
+2	-108	21	-108	3
+2	-92	27	-106	3
+2	-88	2	-106	3
+2	-88	15	-103	3
+3	54	-74	4	1
+3	42	-92	31	1
+3	39	-99	-7	1
+3	48	-115	-5	1
+3	39	-96	2	1
+3	31	-109	9	1
+3	33	-96	-8	1
+3	23	-102	4	1
+3	38	-90	21	1
+3	34	-107	1	1
+3	35	-78	18	1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/cluster_result17.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,4 @@
+0
+1
+0
+0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/cluster_result18.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,4 @@
+-1
+-1
+-1
+-1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/cluster_result19.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,4 @@
+0
+1
+0
+0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/cluster_result20.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,4 @@
+0
+1
+0
+0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/cluster_result21.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,4 @@
+0
+1
+0
+0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/confusion_matrix.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,4 @@
+confusion_matrix : 
+[[14  0  0]
+ [ 0 10  6]
+ [ 0  0  9]]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/converter_result01.json	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,2 @@
+{"directed": false, "graph": {"info": "RNAfold", "id": "CP000097.1/1411351-1411410", "structure": "....((((.((((((....)))))).)..)))...(((((((..(...)..)).))))).", "sequence": "CAACGUUCACCUCACAUUUGUGAGGCGCAGACAACCCAGGCCAAGGAACGGGGACCUGGA"}, "nodes": [{"position": 0, "id": 0, "label": "C"}, {"position": 1, "id": 1, "label": "A"}, {"position": 2, "id": 2, "label": "A"}, {"position": 3, "id": 3, "label": "C"}, {"position": 4, "id": 4, "label": "G"}, {"position": 5, "id": 5, "label": "U"}, {"position": 6, "id": 6, "label": "U"}, {"position": 7, "id": 7, "label": "C"}, {"position": 8, "id": 8, "label": "A"}, {"position": 9, "id": 9, "label": "C"}, {"position": 10, "id": 10, "label": "C"}, {"position": 11, "id": 11, "label": "U"}, {"position": 12, "id": 12, "label": "C"}, {"position": 13, "id": 13, "label": "A"}, {"position": 14, "id": 14, "label": "C"}, {"position": 15, "id": 15, "label": "A"}, {"position": 16, "id": 16, "label": "U"}, {"position": 17, "id": 17, "label": "U"}, {"position": 18, "id": 18, "label": "U"}, {"position": 19, "id": 19, "label": "G"}, {"position": 20, "id": 20, "label": "U"}, {"position": 21, "id": 21, "label": "G"}, {"position": 22, "id": 22, "label": "A"}, {"position": 23, "id": 23, "label": "G"}, {"position": 24, "id": 24, "label": "G"}, {"position": 25, "id": 25, "label": "C"}, {"position": 26, "id": 26, "label": "G"}, {"position": 27, "id": 27, "label": "C"}, {"position": 28, "id": 28, "label": "A"}, {"position": 29, "id": 29, "label": "G"}, {"position": 30, "id": 30, "label": "A"}, {"position": 31, "id": 31, "label": "C"}, {"position": 32, "id": 32, "label": "A"}, {"position": 33, "id": 33, "label": "A"}, {"position": 34, "id": 34, "label": "C"}, {"position": 35, "id": 35, "label": "C"}, {"position": 36, "id": 36, "label": "C"}, {"position": 37, "id": 37, "label": "A"}, {"position": 38, "id": 38, "label": "G"}, {"position": 39, "id": 39, "label": "G"}, {"position": 40, "id": 40, "label": "C"}, {"position": 41, "id": 41, "label": "C"}, {"position": 42, "id": 42, "label": "A"}, {"position": 43, "id": 43, "label": "A"}, {"position": 44, "id": 44, "label": "G"}, {"position": 45, "id": 45, "label": "G"}, {"position": 46, "id": 46, "label": "A"}, {"position": 47, "id": 47, "label": "A"}, {"position": 48, "id": 48, "label": "C"}, {"position": 49, "id": 49, "label": "G"}, {"position": 50, "id": 50, "label": "G"}, {"position": 51, "id": 51, "label": "G"}, {"position": 52, "id": 52, "label": "G"}, {"position": 53, "id": 53, "label": "A"}, {"position": 54, "id": 54, "label": "C"}, {"position": 55, "id": 55, "label": "C"}, {"position": 56, "id": 56, "label": "U"}, {"position": 57, "id": 57, "label": "G"}, {"position": 58, "id": 58, "label": "G"}, {"position": 59, "id": 59, "label": "A"}], "links": [{"source": 0, "type": "backbone", "target": 1, "len": 1, "label": "-"}, {"source": 1, "type": "backbone", "target": 2, "len": 1, "label": "-"}, {"source": 2, "type": "backbone", "target": 3, "len": 1, "label": "-"}, {"source": 3, "type": "backbone", "target": 4, "len": 1, "label": "-"}, {"source": 4, "type": "backbone", "target": 5, "len": 1, "label": "-"}, {"source": 4, "type": "basepair", "target": 31, "len": 1, "label": "="}, {"source": 5, "type": "basepair", "target": 30, "len": 1, "label": "="}, {"source": 5, "type": "backbone", "target": 6, "len": 1, "label": "-"}, {"source": 6, "type": "basepair", "target": 29, "len": 1, "label": "="}, {"source": 6, "type": "backbone", "target": 7, "len": 1, "label": "-"}, {"source": 7, "type": "backbone", "target": 8, "len": 1, "label": "-"}, {"source": 7, "type": "basepair", "target": 26, "len": 1, "label": "="}, {"source": 8, "type": "backbone", "target": 9, "len": 1, "label": "-"}, {"source": 9, "type": "basepair", "target": 24, "len": 1, "label": "="}, {"source": 9, "type": "backbone", "target": 10, "len": 1, "label": "-"}, {"source": 10, "type": "backbone", "target": 11, "len": 1, "label": "-"}, {"source": 10, "type": "basepair", "target": 23, "len": 1, "label": "="}, {"source": 11, "type": "backbone", "target": 12, "len": 1, "label": "-"}, {"source": 11, "type": "basepair", "target": 22, "len": 1, "label": "="}, {"source": 12, "type": "backbone", "target": 13, "len": 1, "label": "-"}, {"source": 12, "type": "basepair", "target": 21, "len": 1, "label": "="}, {"source": 13, "type": "basepair", "target": 20, "len": 1, "label": "="}, {"source": 13, "type": "backbone", "target": 14, "len": 1, "label": "-"}, {"source": 14, "type": "basepair", "target": 19, "len": 1, "label": "="}, {"source": 14, "type": "backbone", "target": 15, "len": 1, "label": "-"}, {"source": 15, "type": "backbone", "target": 16, "len": 1, "label": "-"}, {"source": 16, "type": "backbone", "target": 17, "len": 1, "label": "-"}, {"source": 17, "type": "backbone", "target": 18, "len": 1, "label": "-"}, {"source": 18, "type": "backbone", "target": 19, "len": 1, "label": "-"}, {"source": 19, "type": "backbone", "target": 20, "len": 1, "label": "-"}, {"source": 20, "type": "backbone", "target": 21, "len": 1, "label": "-"}, {"source": 21, "type": "backbone", "target": 22, "len": 1, "label": "-"}, {"source": 22, "type": "backbone", "target": 23, "len": 1, "label": "-"}, {"source": 23, "type": "backbone", "target": 24, "len": 1, "label": "-"}, {"source": 24, "type": "backbone", "target": 25, "len": 1, "label": "-"}, {"source": 25, "type": "backbone", "target": 26, "len": 1, "label": "-"}, {"source": 26, "type": "backbone", "target": 27, "len": 1, "label": "-"}, {"source": 27, "type": "backbone", "target": 28, "len": 1, "label": "-"}, {"source": 28, "type": "backbone", "target": 29, "len": 1, "label": "-"}, {"source": 29, "type": "backbone", "target": 30, "len": 1, "label": "-"}, {"source": 30, "type": "backbone", "target": 31, "len": 1, "label": "-"}, {"source": 31, "type": "backbone", "target": 32, "len": 1, "label": "-"}, {"source": 32, "type": "backbone", "target": 33, "len": 1, "label": "-"}, {"source": 33, "type": "backbone", "target": 34, "len": 1, "label": "-"}, {"source": 34, "type": "backbone", "target": 35, "len": 1, "label": "-"}, {"source": 35, "type": "backbone", "target": 36, "len": 1, "label": "-"}, {"source": 35, "type": "basepair", "target": 58, "len": 1, "label": "="}, {"source": 36, "type": "basepair", "target": 57, "len": 1, "label": "="}, {"source": 36, "type": "backbone", "target": 37, "len": 1, "label": "-"}, {"source": 37, "type": "basepair", "target": 56, "len": 1, "label": "="}, {"source": 37, "type": "backbone", "target": 38, "len": 1, "label": "-"}, {"source": 38, "type": "basepair", "target": 55, "len": 1, "label": "="}, {"source": 38, "type": "backbone", "target": 39, "len": 1, "label": "-"}, {"source": 39, "type": "backbone", "target": 40, "len": 1, "label": "-"}, {"source": 39, "type": "basepair", "target": 54, "len": 1, "label": "="}, {"source": 40, "type": "backbone", "target": 41, "len": 1, "label": "-"}, {"source": 40, "type": "basepair", "target": 52, "len": 1, "label": "="}, {"source": 41, "type": "backbone", "target": 42, "len": 1, "label": "-"}, {"source": 41, "type": "basepair", "target": 51, "len": 1, "label": "="}, {"source": 42, "type": "backbone", "target": 43, "len": 1, "label": "-"}, {"source": 43, "type": "backbone", "target": 44, "len": 1, "label": "-"}, {"source": 44, "type": "basepair", "target": 48, "len": 1, "label": "="}, {"source": 44, "type": "backbone", "target": 45, "len": 1, "label": "-"}, {"source": 45, "type": "backbone", "target": 46, "len": 1, "label": "-"}, {"source": 46, "type": "backbone", "target": 47, "len": 1, "label": "-"}, {"source": 47, "type": "backbone", "target": 48, "len": 1, "label": "-"}, {"source": 48, "type": "backbone", "target": 49, "len": 1, "label": "-"}, {"source": 49, "type": "backbone", "target": 50, "len": 1, "label": "-"}, {"source": 50, "type": "backbone", "target": 51, "len": 1, "label": "-"}, {"source": 51, "type": "backbone", "target": 52, "len": 1, "label": "-"}, {"source": 52, "type": "backbone", "target": 53, "len": 1, "label": "-"}, {"source": 53, "type": "backbone", "target": 54, "len": 1, "label": "-"}, {"source": 54, "type": "backbone", "target": 55, "len": 1, "label": "-"}, {"source": 55, "type": "backbone", "target": 56, "len": 1, "label": "-"}, {"source": 56, "type": "backbone", "target": 57, "len": 1, "label": "-"}, {"source": 57, "type": "backbone", "target": 58, "len": 1, "label": "-"}, {"source": 58, "type": "backbone", "target": 59, "len": 1, "label": "-"}], "multigraph": false}
+{"directed": false, "graph": {"info": "RNAfold", "id": "ACNY01000002.1/278641-278580", "structure": "((.(...(.((((((.....)))))).)..).))..((((((((.........)).))))))", "sequence": "GAUCGUUCACUUCGCAUCGCGCGAAGCGCAGUUCGCCUCAGGCCAUGGAACGGGGACCUGAG"}, "nodes": [{"position": 0, "id": 0, "label": "G"}, {"position": 1, "id": 1, "label": "A"}, {"position": 2, "id": 2, "label": "U"}, {"position": 3, "id": 3, "label": "C"}, {"position": 4, "id": 4, "label": "G"}, {"position": 5, "id": 5, "label": "U"}, {"position": 6, "id": 6, "label": "U"}, {"position": 7, "id": 7, "label": "C"}, {"position": 8, "id": 8, "label": "A"}, {"position": 9, "id": 9, "label": "C"}, {"position": 10, "id": 10, "label": "U"}, {"position": 11, "id": 11, "label": "U"}, {"position": 12, "id": 12, "label": "C"}, {"position": 13, "id": 13, "label": "G"}, {"position": 14, "id": 14, "label": "C"}, {"position": 15, "id": 15, "label": "A"}, {"position": 16, "id": 16, "label": "U"}, {"position": 17, "id": 17, "label": "C"}, {"position": 18, "id": 18, "label": "G"}, {"position": 19, "id": 19, "label": "C"}, {"position": 20, "id": 20, "label": "G"}, {"position": 21, "id": 21, "label": "C"}, {"position": 22, "id": 22, "label": "G"}, {"position": 23, "id": 23, "label": "A"}, {"position": 24, "id": 24, "label": "A"}, {"position": 25, "id": 25, "label": "G"}, {"position": 26, "id": 26, "label": "C"}, {"position": 27, "id": 27, "label": "G"}, {"position": 28, "id": 28, "label": "C"}, {"position": 29, "id": 29, "label": "A"}, {"position": 30, "id": 30, "label": "G"}, {"position": 31, "id": 31, "label": "U"}, {"position": 32, "id": 32, "label": "U"}, {"position": 33, "id": 33, "label": "C"}, {"position": 34, "id": 34, "label": "G"}, {"position": 35, "id": 35, "label": "C"}, {"position": 36, "id": 36, "label": "C"}, {"position": 37, "id": 37, "label": "U"}, {"position": 38, "id": 38, "label": "C"}, {"position": 39, "id": 39, "label": "A"}, {"position": 40, "id": 40, "label": "G"}, {"position": 41, "id": 41, "label": "G"}, {"position": 42, "id": 42, "label": "C"}, {"position": 43, "id": 43, "label": "C"}, {"position": 44, "id": 44, "label": "A"}, {"position": 45, "id": 45, "label": "U"}, {"position": 46, "id": 46, "label": "G"}, {"position": 47, "id": 47, "label": "G"}, {"position": 48, "id": 48, "label": "A"}, {"position": 49, "id": 49, "label": "A"}, {"position": 50, "id": 50, "label": "C"}, {"position": 51, "id": 51, "label": "G"}, {"position": 52, "id": 52, "label": "G"}, {"position": 53, "id": 53, "label": "G"}, {"position": 54, "id": 54, "label": "G"}, {"position": 55, "id": 55, "label": "A"}, {"position": 56, "id": 56, "label": "C"}, {"position": 57, "id": 57, "label": "C"}, {"position": 58, "id": 58, "label": "U"}, {"position": 59, "id": 59, "label": "G"}, {"position": 60, "id": 60, "label": "A"}, {"position": 61, "id": 61, "label": "G"}], "links": [{"source": 0, "type": "backbone", "target": 1, "len": 1, "label": "-"}, {"source": 0, "type": "basepair", "target": 33, "len": 1, "label": "="}, {"source": 1, "type": "basepair", "target": 32, "len": 1, "label": "="}, {"source": 1, "type": "backbone", "target": 2, "len": 1, "label": "-"}, {"source": 2, "type": "backbone", "target": 3, "len": 1, "label": "-"}, {"source": 3, "type": "backbone", "target": 4, "len": 1, "label": "-"}, {"source": 3, "type": "basepair", "target": 30, "len": 1, "label": "="}, {"source": 4, "type": "backbone", "target": 5, "len": 1, "label": "-"}, {"source": 5, "type": "backbone", "target": 6, "len": 1, "label": "-"}, {"source": 6, "type": "backbone", "target": 7, "len": 1, "label": "-"}, {"source": 7, "type": "backbone", "target": 8, "len": 1, "label": "-"}, {"source": 7, "type": "basepair", "target": 27, "len": 1, "label": "="}, {"source": 8, "type": "backbone", "target": 9, "len": 1, "label": "-"}, {"source": 9, "type": "basepair", "target": 25, "len": 1, "label": "="}, {"source": 9, "type": "backbone", "target": 10, "len": 1, "label": "-"}, {"source": 10, "type": "basepair", "target": 24, "len": 1, "label": "="}, {"source": 10, "type": "backbone", "target": 11, "len": 1, "label": "-"}, {"source": 11, "type": "backbone", "target": 12, "len": 1, "label": "-"}, {"source": 11, "type": "basepair", "target": 23, "len": 1, "label": "="}, {"source": 12, "type": "backbone", "target": 13, "len": 1, "label": "-"}, {"source": 12, "type": "basepair", "target": 22, "len": 1, "label": "="}, {"source": 13, "type": "basepair", "target": 21, "len": 1, "label": "="}, {"source": 13, "type": "backbone", "target": 14, "len": 1, "label": "-"}, {"source": 14, "type": "basepair", "target": 20, "len": 1, "label": "="}, {"source": 14, "type": "backbone", "target": 15, "len": 1, "label": "-"}, {"source": 15, "type": "backbone", "target": 16, "len": 1, "label": "-"}, {"source": 16, "type": "backbone", "target": 17, "len": 1, "label": "-"}, {"source": 17, "type": "backbone", "target": 18, "len": 1, "label": "-"}, {"source": 18, "type": "backbone", "target": 19, "len": 1, "label": "-"}, {"source": 19, "type": "backbone", "target": 20, "len": 1, "label": "-"}, {"source": 20, "type": "backbone", "target": 21, "len": 1, "label": "-"}, {"source": 21, "type": "backbone", "target": 22, "len": 1, "label": "-"}, {"source": 22, "type": "backbone", "target": 23, "len": 1, "label": "-"}, {"source": 23, "type": "backbone", "target": 24, "len": 1, "label": "-"}, {"source": 24, "type": "backbone", "target": 25, "len": 1, "label": "-"}, {"source": 25, "type": "backbone", "target": 26, "len": 1, "label": "-"}, {"source": 26, "type": "backbone", "target": 27, "len": 1, "label": "-"}, {"source": 27, "type": "backbone", "target": 28, "len": 1, "label": "-"}, {"source": 28, "type": "backbone", "target": 29, "len": 1, "label": "-"}, {"source": 29, "type": "backbone", "target": 30, "len": 1, "label": "-"}, {"source": 30, "type": "backbone", "target": 31, "len": 1, "label": "-"}, {"source": 31, "type": "backbone", "target": 32, "len": 1, "label": "-"}, {"source": 32, "type": "backbone", "target": 33, "len": 1, "label": "-"}, {"source": 33, "type": "backbone", "target": 34, "len": 1, "label": "-"}, {"source": 34, "type": "backbone", "target": 35, "len": 1, "label": "-"}, {"source": 35, "type": "backbone", "target": 36, "len": 1, "label": "-"}, {"source": 36, "type": "backbone", "target": 37, "len": 1, "label": "-"}, {"source": 36, "type": "basepair", "target": 61, "len": 1, "label": "="}, {"source": 37, "type": "basepair", "target": 60, "len": 1, "label": "="}, {"source": 37, "type": "backbone", "target": 38, "len": 1, "label": "-"}, {"source": 38, "type": "basepair", "target": 59, "len": 1, "label": "="}, {"source": 38, "type": "backbone", "target": 39, "len": 1, "label": "-"}, {"source": 39, "type": "backbone", "target": 40, "len": 1, "label": "-"}, {"source": 39, "type": "basepair", "target": 58, "len": 1, "label": "="}, {"source": 40, "type": "backbone", "target": 41, "len": 1, "label": "-"}, {"source": 40, "type": "basepair", "target": 57, "len": 1, "label": "="}, {"source": 41, "type": "basepair", "target": 56, "len": 1, "label": "="}, {"source": 41, "type": "backbone", "target": 42, "len": 1, "label": "-"}, {"source": 42, "type": "backbone", "target": 43, "len": 1, "label": "-"}, {"source": 42, "type": "basepair", "target": 54, "len": 1, "label": "="}, {"source": 43, "type": "backbone", "target": 44, "len": 1, "label": "-"}, {"source": 43, "type": "basepair", "target": 53, "len": 1, "label": "="}, {"source": 44, "type": "backbone", "target": 45, "len": 1, "label": "-"}, {"source": 45, "type": "backbone", "target": 46, "len": 1, "label": "-"}, {"source": 46, "type": "backbone", "target": 47, "len": 1, "label": "-"}, {"source": 47, "type": "backbone", "target": 48, "len": 1, "label": "-"}, {"source": 48, "type": "backbone", "target": 49, "len": 1, "label": "-"}, {"source": 49, "type": "backbone", "target": 50, "len": 1, "label": "-"}, {"source": 50, "type": "backbone", "target": 51, "len": 1, "label": "-"}, {"source": 51, "type": "backbone", "target": 52, "len": 1, "label": "-"}, {"source": 52, "type": "backbone", "target": 53, "len": 1, "label": "-"}, {"source": 53, "type": "backbone", "target": 54, "len": 1, "label": "-"}, {"source": 54, "type": "backbone", "target": 55, "len": 1, "label": "-"}, {"source": 55, "type": "backbone", "target": 56, "len": 1, "label": "-"}, {"source": 56, "type": "backbone", "target": 57, "len": 1, "label": "-"}, {"source": 57, "type": "backbone", "target": 58, "len": 1, "label": "-"}, {"source": 58, "type": "backbone", "target": 59, "len": 1, "label": "-"}, {"source": 59, "type": "backbone", "target": 60, "len": 1, "label": "-"}, {"source": 60, "type": "backbone", "target": 61, "len": 1, "label": "-"}], "multigraph": false}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/converter_result02.json	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,4 @@
+{"directed": false, "graph": {"info": "RNAshapes shape_type=2 energy_range=4 max_num=3", "id": "CP000097.1/1411351-1411410_[_[]_][[]_]", "structure": "....(((..((((((....))))))....)))...(((((((.........)).))))).", "sequence": "CAACGUUCACCUCACAUUUGUGAGGCGCAGACAACCCAGGCCAAGGAACGGGGACCUGGA"}, "nodes": [{"position": 0, "id": 0, "label": "C"}, {"position": 1, "id": 1, "label": "A"}, {"position": 2, "id": 2, "label": "A"}, {"position": 3, "id": 3, "label": "C"}, {"position": 4, "id": 4, "label": "G"}, {"position": 5, "id": 5, "label": "U"}, {"position": 6, "id": 6, "label": "U"}, {"position": 7, "id": 7, "label": "C"}, {"position": 8, "id": 8, "label": "A"}, {"position": 9, "id": 9, "label": "C"}, {"position": 10, "id": 10, "label": "C"}, {"position": 11, "id": 11, "label": "U"}, {"position": 12, "id": 12, "label": "C"}, {"position": 13, "id": 13, "label": "A"}, {"position": 14, "id": 14, "label": "C"}, {"position": 15, "id": 15, "label": "A"}, {"position": 16, "id": 16, "label": "U"}, {"position": 17, "id": 17, "label": "U"}, {"position": 18, "id": 18, "label": "U"}, {"position": 19, "id": 19, "label": "G"}, {"position": 20, "id": 20, "label": "U"}, {"position": 21, "id": 21, "label": "G"}, {"position": 22, "id": 22, "label": "A"}, {"position": 23, "id": 23, "label": "G"}, {"position": 24, "id": 24, "label": "G"}, {"position": 25, "id": 25, "label": "C"}, {"position": 26, "id": 26, "label": "G"}, {"position": 27, "id": 27, "label": "C"}, {"position": 28, "id": 28, "label": "A"}, {"position": 29, "id": 29, "label": "G"}, {"position": 30, "id": 30, "label": "A"}, {"position": 31, "id": 31, "label": "C"}, {"position": 32, "id": 32, "label": "A"}, {"position": 33, "id": 33, "label": "A"}, {"position": 34, "id": 34, "label": "C"}, {"position": 35, "id": 35, "label": "C"}, {"position": 36, "id": 36, "label": "C"}, {"position": 37, "id": 37, "label": "A"}, {"position": 38, "id": 38, "label": "G"}, {"position": 39, "id": 39, "label": "G"}, {"position": 40, "id": 40, "label": "C"}, {"position": 41, "id": 41, "label": "C"}, {"position": 42, "id": 42, "label": "A"}, {"position": 43, "id": 43, "label": "A"}, {"position": 44, "id": 44, "label": "G"}, {"position": 45, "id": 45, "label": "G"}, {"position": 46, "id": 46, "label": "A"}, {"position": 47, "id": 47, "label": "A"}, {"position": 48, "id": 48, "label": "C"}, {"position": 49, "id": 49, "label": "G"}, {"position": 50, "id": 50, "label": "G"}, {"position": 51, "id": 51, "label": "G"}, {"position": 52, "id": 52, "label": "G"}, {"position": 53, "id": 53, "label": "A"}, {"position": 54, "id": 54, "label": "C"}, {"position": 55, "id": 55, "label": "C"}, {"position": 56, "id": 56, "label": "U"}, {"position": 57, "id": 57, "label": "G"}, {"position": 58, "id": 58, "label": "G"}, {"position": 59, "id": 59, "label": "A"}], "links": [{"source": 0, "type": "backbone", "target": 1, "len": 1, "label": "-"}, {"source": 1, "type": "backbone", "target": 2, "len": 1, "label": "-"}, {"source": 2, "type": "backbone", "target": 3, "len": 1, "label": "-"}, {"source": 3, "type": "backbone", "target": 4, "len": 1, "label": "-"}, {"source": 4, "type": "backbone", "target": 5, "len": 1, "label": "-"}, {"source": 4, "type": "basepair", "target": 31, "len": 1, "label": "="}, {"source": 5, "type": "basepair", "target": 30, "len": 1, "label": "="}, {"source": 5, "type": "backbone", "target": 6, "len": 1, "label": "-"}, {"source": 6, "type": "basepair", "target": 29, "len": 1, "label": "="}, {"source": 6, "type": "backbone", "target": 7, "len": 1, "label": "-"}, {"source": 7, "type": "backbone", "target": 8, "len": 1, "label": "-"}, {"source": 8, "type": "backbone", "target": 9, "len": 1, "label": "-"}, {"source": 9, "type": "basepair", "target": 24, "len": 1, "label": "="}, {"source": 9, "type": "backbone", "target": 10, "len": 1, "label": "-"}, {"source": 10, "type": "backbone", "target": 11, "len": 1, "label": "-"}, {"source": 10, "type": "basepair", "target": 23, "len": 1, "label": "="}, {"source": 11, "type": "backbone", "target": 12, "len": 1, "label": "-"}, {"source": 11, "type": "basepair", "target": 22, "len": 1, "label": "="}, {"source": 12, "type": "backbone", "target": 13, "len": 1, "label": "-"}, {"source": 12, "type": "basepair", "target": 21, "len": 1, "label": "="}, {"source": 13, "type": "basepair", "target": 20, "len": 1, "label": "="}, {"source": 13, "type": "backbone", "target": 14, "len": 1, "label": "-"}, {"source": 14, "type": "basepair", "target": 19, "len": 1, "label": "="}, {"source": 14, "type": "backbone", "target": 15, "len": 1, "label": "-"}, {"source": 15, "type": "backbone", "target": 16, "len": 1, "label": "-"}, {"source": 16, "type": "backbone", "target": 17, "len": 1, "label": "-"}, {"source": 17, "type": "backbone", "target": 18, "len": 1, "label": "-"}, {"source": 18, "type": "backbone", "target": 19, "len": 1, "label": "-"}, {"source": 19, "type": "backbone", "target": 20, "len": 1, "label": "-"}, {"source": 20, "type": "backbone", "target": 21, "len": 1, "label": "-"}, {"source": 21, "type": "backbone", "target": 22, "len": 1, "label": "-"}, {"source": 22, "type": "backbone", "target": 23, "len": 1, "label": "-"}, {"source": 23, "type": "backbone", "target": 24, "len": 1, "label": "-"}, {"source": 24, "type": "backbone", "target": 25, "len": 1, "label": "-"}, {"source": 25, "type": "backbone", "target": 26, "len": 1, "label": "-"}, {"source": 26, "type": "backbone", "target": 27, "len": 1, "label": "-"}, {"source": 27, "type": "backbone", "target": 28, "len": 1, "label": "-"}, {"source": 28, "type": "backbone", "target": 29, "len": 1, "label": "-"}, {"source": 29, "type": "backbone", "target": 30, "len": 1, "label": "-"}, {"source": 30, "type": "backbone", "target": 31, "len": 1, "label": "-"}, {"source": 31, "type": "backbone", "target": 32, "len": 1, "label": "-"}, {"source": 32, "type": "backbone", "target": 33, "len": 1, "label": "-"}, {"source": 33, "type": "backbone", "target": 34, "len": 1, "label": "-"}, {"source": 34, "type": "backbone", "target": 35, "len": 1, "label": "-"}, {"source": 35, "type": "backbone", "target": 36, "len": 1, "label": "-"}, {"source": 35, "type": "basepair", "target": 58, "len": 1, "label": "="}, {"source": 36, "type": "basepair", "target": 57, "len": 1, "label": "="}, {"source": 36, "type": "backbone", "target": 37, "len": 1, "label": "-"}, {"source": 37, "type": "basepair", "target": 56, "len": 1, "label": "="}, {"source": 37, "type": "backbone", "target": 38, "len": 1, "label": "-"}, {"source": 38, "type": "basepair", "target": 55, "len": 1, "label": "="}, {"source": 38, "type": "backbone", "target": 39, "len": 1, "label": "-"}, {"source": 39, "type": "backbone", "target": 40, "len": 1, "label": "-"}, {"source": 39, "type": "basepair", "target": 54, "len": 1, "label": "="}, {"source": 40, "type": "backbone", "target": 41, "len": 1, "label": "-"}, {"source": 40, "type": "basepair", "target": 52, "len": 1, "label": "="}, {"source": 41, "type": "backbone", "target": 42, "len": 1, "label": "-"}, {"source": 41, "type": "basepair", "target": 51, "len": 1, "label": "="}, {"source": 42, "type": "backbone", "target": 43, "len": 1, "label": "-"}, {"source": 43, "type": "backbone", "target": 44, "len": 1, "label": "-"}, {"source": 44, "type": "backbone", "target": 45, "len": 1, "label": "-"}, {"source": 45, "type": "backbone", "target": 46, "len": 1, "label": "-"}, {"source": 46, "type": "backbone", "target": 47, "len": 1, "label": "-"}, {"source": 47, "type": "backbone", "target": 48, "len": 1, "label": "-"}, {"source": 48, "type": "backbone", "target": 49, "len": 1, "label": "-"}, {"source": 49, "type": "backbone", "target": 50, "len": 1, "label": "-"}, {"source": 50, "type": "backbone", "target": 51, "len": 1, "label": "-"}, {"source": 51, "type": "backbone", "target": 52, "len": 1, "label": "-"}, {"source": 52, "type": "backbone", "target": 53, "len": 1, "label": "-"}, {"source": 53, "type": "backbone", "target": 54, "len": 1, "label": "-"}, {"source": 54, "type": "backbone", "target": 55, "len": 1, "label": "-"}, {"source": 55, "type": "backbone", "target": 56, "len": 1, "label": "-"}, {"source": 56, "type": "backbone", "target": 57, "len": 1, "label": "-"}, {"source": 57, "type": "backbone", "target": 58, "len": 1, "label": "-"}, {"source": 58, "type": "backbone", "target": 59, "len": 1, "label": "-"}], "multigraph": false}
+{"directed": false, "graph": {"info": "RNAshapes shape_type=2 energy_range=4 max_num=3", "id": "ACNY01000002.1/278641-278580_[_[]_][[]_]", "structure": "....((...((((((.....)))))).)).......((((((((.........)).))))))", "sequence": "GAUCGUUCACUUCGCAUCGCGCGAAGCGCAGUUCGCCUCAGGCCAUGGAACGGGGACCUGAG"}, "nodes": [{"position": 0, "id": 0, "label": "G"}, {"position": 1, "id": 1, "label": "A"}, {"position": 2, "id": 2, "label": "U"}, {"position": 3, "id": 3, "label": "C"}, {"position": 4, "id": 4, "label": "G"}, {"position": 5, "id": 5, "label": "U"}, {"position": 6, "id": 6, "label": "U"}, {"position": 7, "id": 7, "label": "C"}, {"position": 8, "id": 8, "label": "A"}, {"position": 9, "id": 9, "label": "C"}, {"position": 10, "id": 10, "label": "U"}, {"position": 11, "id": 11, "label": "U"}, {"position": 12, "id": 12, "label": "C"}, {"position": 13, "id": 13, "label": "G"}, {"position": 14, "id": 14, "label": "C"}, {"position": 15, "id": 15, "label": "A"}, {"position": 16, "id": 16, "label": "U"}, {"position": 17, "id": 17, "label": "C"}, {"position": 18, "id": 18, "label": "G"}, {"position": 19, "id": 19, "label": "C"}, {"position": 20, "id": 20, "label": "G"}, {"position": 21, "id": 21, "label": "C"}, {"position": 22, "id": 22, "label": "G"}, {"position": 23, "id": 23, "label": "A"}, {"position": 24, "id": 24, "label": "A"}, {"position": 25, "id": 25, "label": "G"}, {"position": 26, "id": 26, "label": "C"}, {"position": 27, "id": 27, "label": "G"}, {"position": 28, "id": 28, "label": "C"}, {"position": 29, "id": 29, "label": "A"}, {"position": 30, "id": 30, "label": "G"}, {"position": 31, "id": 31, "label": "U"}, {"position": 32, "id": 32, "label": "U"}, {"position": 33, "id": 33, "label": "C"}, {"position": 34, "id": 34, "label": "G"}, {"position": 35, "id": 35, "label": "C"}, {"position": 36, "id": 36, "label": "C"}, {"position": 37, "id": 37, "label": "U"}, {"position": 38, "id": 38, "label": "C"}, {"position": 39, "id": 39, "label": "A"}, {"position": 40, "id": 40, "label": "G"}, {"position": 41, "id": 41, "label": "G"}, {"position": 42, "id": 42, "label": "C"}, {"position": 43, "id": 43, "label": "C"}, {"position": 44, "id": 44, "label": "A"}, {"position": 45, "id": 45, "label": "U"}, {"position": 46, "id": 46, "label": "G"}, {"position": 47, "id": 47, "label": "G"}, {"position": 48, "id": 48, "label": "A"}, {"position": 49, "id": 49, "label": "A"}, {"position": 50, "id": 50, "label": "C"}, {"position": 51, "id": 51, "label": "G"}, {"position": 52, "id": 52, "label": "G"}, {"position": 53, "id": 53, "label": "G"}, {"position": 54, "id": 54, "label": "G"}, {"position": 55, "id": 55, "label": "A"}, {"position": 56, "id": 56, "label": "C"}, {"position": 57, "id": 57, "label": "C"}, {"position": 58, "id": 58, "label": "U"}, {"position": 59, "id": 59, "label": "G"}, {"position": 60, "id": 60, "label": "A"}, {"position": 61, "id": 61, "label": "G"}], "links": [{"source": 0, "type": "backbone", "target": 1, "len": 1, "label": "-"}, {"source": 1, "type": "backbone", "target": 2, "len": 1, "label": "-"}, {"source": 2, "type": "backbone", "target": 3, "len": 1, "label": "-"}, {"source": 3, "type": "backbone", "target": 4, "len": 1, "label": "-"}, {"source": 4, "type": "basepair", "target": 28, "len": 1, "label": "="}, {"source": 4, "type": "backbone", "target": 5, "len": 1, "label": "-"}, {"source": 5, "type": "basepair", "target": 27, "len": 1, "label": "="}, {"source": 5, "type": "backbone", "target": 6, "len": 1, "label": "-"}, {"source": 6, "type": "backbone", "target": 7, "len": 1, "label": "-"}, {"source": 7, "type": "backbone", "target": 8, "len": 1, "label": "-"}, {"source": 8, "type": "backbone", "target": 9, "len": 1, "label": "-"}, {"source": 9, "type": "basepair", "target": 25, "len": 1, "label": "="}, {"source": 9, "type": "backbone", "target": 10, "len": 1, "label": "-"}, {"source": 10, "type": "basepair", "target": 24, "len": 1, "label": "="}, {"source": 10, "type": "backbone", "target": 11, "len": 1, "label": "-"}, {"source": 11, "type": "backbone", "target": 12, "len": 1, "label": "-"}, {"source": 11, "type": "basepair", "target": 23, "len": 1, "label": "="}, {"source": 12, "type": "backbone", "target": 13, "len": 1, "label": "-"}, {"source": 12, "type": "basepair", "target": 22, "len": 1, "label": "="}, {"source": 13, "type": "basepair", "target": 21, "len": 1, "label": "="}, {"source": 13, "type": "backbone", "target": 14, "len": 1, "label": "-"}, {"source": 14, "type": "basepair", "target": 20, "len": 1, "label": "="}, {"source": 14, "type": "backbone", "target": 15, "len": 1, "label": "-"}, {"source": 15, "type": "backbone", "target": 16, "len": 1, "label": "-"}, {"source": 16, "type": "backbone", "target": 17, "len": 1, "label": "-"}, {"source": 17, "type": "backbone", "target": 18, "len": 1, "label": "-"}, {"source": 18, "type": "backbone", "target": 19, "len": 1, "label": "-"}, {"source": 19, "type": "backbone", "target": 20, "len": 1, "label": "-"}, {"source": 20, "type": "backbone", "target": 21, "len": 1, "label": "-"}, {"source": 21, "type": "backbone", "target": 22, "len": 1, "label": "-"}, {"source": 22, "type": "backbone", "target": 23, "len": 1, "label": "-"}, {"source": 23, "type": "backbone", "target": 24, "len": 1, "label": "-"}, {"source": 24, "type": "backbone", "target": 25, "len": 1, "label": "-"}, {"source": 25, "type": "backbone", "target": 26, "len": 1, "label": "-"}, {"source": 26, "type": "backbone", "target": 27, "len": 1, "label": "-"}, {"source": 27, "type": "backbone", "target": 28, "len": 1, "label": "-"}, {"source": 28, "type": "backbone", "target": 29, "len": 1, "label": "-"}, {"source": 29, "type": "backbone", "target": 30, "len": 1, "label": "-"}, {"source": 30, "type": "backbone", "target": 31, "len": 1, "label": "-"}, {"source": 31, "type": "backbone", "target": 32, "len": 1, "label": "-"}, {"source": 32, "type": "backbone", "target": 33, "len": 1, "label": "-"}, {"source": 33, "type": "backbone", "target": 34, "len": 1, "label": "-"}, {"source": 34, "type": "backbone", "target": 35, "len": 1, "label": "-"}, {"source": 35, "type": "backbone", "target": 36, "len": 1, "label": "-"}, {"source": 36, "type": "backbone", "target": 37, "len": 1, "label": "-"}, {"source": 36, "type": "basepair", "target": 61, "len": 1, "label": "="}, {"source": 37, "type": "basepair", "target": 60, "len": 1, "label": "="}, {"source": 37, "type": "backbone", "target": 38, "len": 1, "label": "-"}, {"source": 38, "type": "basepair", "target": 59, "len": 1, "label": "="}, {"source": 38, "type": "backbone", "target": 39, "len": 1, "label": "-"}, {"source": 39, "type": "backbone", "target": 40, "len": 1, "label": "-"}, {"source": 39, "type": "basepair", "target": 58, "len": 1, "label": "="}, {"source": 40, "type": "backbone", "target": 41, "len": 1, "label": "-"}, {"source": 40, "type": "basepair", "target": 57, "len": 1, "label": "="}, {"source": 41, "type": "basepair", "target": 56, "len": 1, "label": "="}, {"source": 41, "type": "backbone", "target": 42, "len": 1, "label": "-"}, {"source": 42, "type": "backbone", "target": 43, "len": 1, "label": "-"}, {"source": 42, "type": "basepair", "target": 54, "len": 1, "label": "="}, {"source": 43, "type": "backbone", "target": 44, "len": 1, "label": "-"}, {"source": 43, "type": "basepair", "target": 53, "len": 1, "label": "="}, {"source": 44, "type": "backbone", "target": 45, "len": 1, "label": "-"}, {"source": 45, "type": "backbone", "target": 46, "len": 1, "label": "-"}, {"source": 46, "type": "backbone", "target": 47, "len": 1, "label": "-"}, {"source": 47, "type": "backbone", "target": 48, "len": 1, "label": "-"}, {"source": 48, "type": "backbone", "target": 49, "len": 1, "label": "-"}, {"source": 49, "type": "backbone", "target": 50, "len": 1, "label": "-"}, {"source": 50, "type": "backbone", "target": 51, "len": 1, "label": "-"}, {"source": 51, "type": "backbone", "target": 52, "len": 1, "label": "-"}, {"source": 52, "type": "backbone", "target": 53, "len": 1, "label": "-"}, {"source": 53, "type": "backbone", "target": 54, "len": 1, "label": "-"}, {"source": 54, "type": "backbone", "target": 55, "len": 1, "label": "-"}, {"source": 55, "type": "backbone", "target": 56, "len": 1, "label": "-"}, {"source": 56, "type": "backbone", "target": 57, "len": 1, "label": "-"}, {"source": 57, "type": "backbone", "target": 58, "len": 1, "label": "-"}, {"source": 58, "type": "backbone", "target": 59, "len": 1, "label": "-"}, {"source": 59, "type": "backbone", "target": 60, "len": 1, "label": "-"}, {"source": 60, "type": "backbone", "target": 61, "len": 1, "label": "-"}], "multigraph": false}
+{"directed": false, "graph": {"info": "RNAshapes shape_type=2 energy_range=4 max_num=3", "id": "ACNY01000002.1/278641-278580_[_[_[]_]_][[]_]", "structure": "((..((...((((((.....)))))).))...))..((((((((.........)).))))))", "sequence": "GAUCGUUCACUUCGCAUCGCGCGAAGCGCAGUUCGCCUCAGGCCAUGGAACGGGGACCUGAG"}, "nodes": [{"position": 0, "id": 0, "label": "G"}, {"position": 1, "id": 1, "label": "A"}, {"position": 2, "id": 2, "label": "U"}, {"position": 3, "id": 3, "label": "C"}, {"position": 4, "id": 4, "label": "G"}, {"position": 5, "id": 5, "label": "U"}, {"position": 6, "id": 6, "label": "U"}, {"position": 7, "id": 7, "label": "C"}, {"position": 8, "id": 8, "label": "A"}, {"position": 9, "id": 9, "label": "C"}, {"position": 10, "id": 10, "label": "U"}, {"position": 11, "id": 11, "label": "U"}, {"position": 12, "id": 12, "label": "C"}, {"position": 13, "id": 13, "label": "G"}, {"position": 14, "id": 14, "label": "C"}, {"position": 15, "id": 15, "label": "A"}, {"position": 16, "id": 16, "label": "U"}, {"position": 17, "id": 17, "label": "C"}, {"position": 18, "id": 18, "label": "G"}, {"position": 19, "id": 19, "label": "C"}, {"position": 20, "id": 20, "label": "G"}, {"position": 21, "id": 21, "label": "C"}, {"position": 22, "id": 22, "label": "G"}, {"position": 23, "id": 23, "label": "A"}, {"position": 24, "id": 24, "label": "A"}, {"position": 25, "id": 25, "label": "G"}, {"position": 26, "id": 26, "label": "C"}, {"position": 27, "id": 27, "label": "G"}, {"position": 28, "id": 28, "label": "C"}, {"position": 29, "id": 29, "label": "A"}, {"position": 30, "id": 30, "label": "G"}, {"position": 31, "id": 31, "label": "U"}, {"position": 32, "id": 32, "label": "U"}, {"position": 33, "id": 33, "label": "C"}, {"position": 34, "id": 34, "label": "G"}, {"position": 35, "id": 35, "label": "C"}, {"position": 36, "id": 36, "label": "C"}, {"position": 37, "id": 37, "label": "U"}, {"position": 38, "id": 38, "label": "C"}, {"position": 39, "id": 39, "label": "A"}, {"position": 40, "id": 40, "label": "G"}, {"position": 41, "id": 41, "label": "G"}, {"position": 42, "id": 42, "label": "C"}, {"position": 43, "id": 43, "label": "C"}, {"position": 44, "id": 44, "label": "A"}, {"position": 45, "id": 45, "label": "U"}, {"position": 46, "id": 46, "label": "G"}, {"position": 47, "id": 47, "label": "G"}, {"position": 48, "id": 48, "label": "A"}, {"position": 49, "id": 49, "label": "A"}, {"position": 50, "id": 50, "label": "C"}, {"position": 51, "id": 51, "label": "G"}, {"position": 52, "id": 52, "label": "G"}, {"position": 53, "id": 53, "label": "G"}, {"position": 54, "id": 54, "label": "G"}, {"position": 55, "id": 55, "label": "A"}, {"position": 56, "id": 56, "label": "C"}, {"position": 57, "id": 57, "label": "C"}, {"position": 58, "id": 58, "label": "U"}, {"position": 59, "id": 59, "label": "G"}, {"position": 60, "id": 60, "label": "A"}, {"position": 61, "id": 61, "label": "G"}], "links": [{"source": 0, "type": "backbone", "target": 1, "len": 1, "label": "-"}, {"source": 0, "type": "basepair", "target": 33, "len": 1, "label": "="}, {"source": 1, "type": "basepair", "target": 32, "len": 1, "label": "="}, {"source": 1, "type": "backbone", "target": 2, "len": 1, "label": "-"}, {"source": 2, "type": "backbone", "target": 3, "len": 1, "label": "-"}, {"source": 3, "type": "backbone", "target": 4, "len": 1, "label": "-"}, {"source": 4, "type": "basepair", "target": 28, "len": 1, "label": "="}, {"source": 4, "type": "backbone", "target": 5, "len": 1, "label": "-"}, {"source": 5, "type": "basepair", "target": 27, "len": 1, "label": "="}, {"source": 5, "type": "backbone", "target": 6, "len": 1, "label": "-"}, {"source": 6, "type": "backbone", "target": 7, "len": 1, "label": "-"}, {"source": 7, "type": "backbone", "target": 8, "len": 1, "label": "-"}, {"source": 8, "type": "backbone", "target": 9, "len": 1, "label": "-"}, {"source": 9, "type": "basepair", "target": 25, "len": 1, "label": "="}, {"source": 9, "type": "backbone", "target": 10, "len": 1, "label": "-"}, {"source": 10, "type": "basepair", "target": 24, "len": 1, "label": "="}, {"source": 10, "type": "backbone", "target": 11, "len": 1, "label": "-"}, {"source": 11, "type": "backbone", "target": 12, "len": 1, "label": "-"}, {"source": 11, "type": "basepair", "target": 23, "len": 1, "label": "="}, {"source": 12, "type": "backbone", "target": 13, "len": 1, "label": "-"}, {"source": 12, "type": "basepair", "target": 22, "len": 1, "label": "="}, {"source": 13, "type": "basepair", "target": 21, "len": 1, "label": "="}, {"source": 13, "type": "backbone", "target": 14, "len": 1, "label": "-"}, {"source": 14, "type": "basepair", "target": 20, "len": 1, "label": "="}, {"source": 14, "type": "backbone", "target": 15, "len": 1, "label": "-"}, {"source": 15, "type": "backbone", "target": 16, "len": 1, "label": "-"}, {"source": 16, "type": "backbone", "target": 17, "len": 1, "label": "-"}, {"source": 17, "type": "backbone", "target": 18, "len": 1, "label": "-"}, {"source": 18, "type": "backbone", "target": 19, "len": 1, "label": "-"}, {"source": 19, "type": "backbone", "target": 20, "len": 1, "label": "-"}, {"source": 20, "type": "backbone", "target": 21, "len": 1, "label": "-"}, {"source": 21, "type": "backbone", "target": 22, "len": 1, "label": "-"}, {"source": 22, "type": "backbone", "target": 23, "len": 1, "label": "-"}, {"source": 23, "type": "backbone", "target": 24, "len": 1, "label": "-"}, {"source": 24, "type": "backbone", "target": 25, "len": 1, "label": "-"}, {"source": 25, "type": "backbone", "target": 26, "len": 1, "label": "-"}, {"source": 26, "type": "backbone", "target": 27, "len": 1, "label": "-"}, {"source": 27, "type": "backbone", "target": 28, "len": 1, "label": "-"}, {"source": 28, "type": "backbone", "target": 29, "len": 1, "label": "-"}, {"source": 29, "type": "backbone", "target": 30, "len": 1, "label": "-"}, {"source": 30, "type": "backbone", "target": 31, "len": 1, "label": "-"}, {"source": 31, "type": "backbone", "target": 32, "len": 1, "label": "-"}, {"source": 32, "type": "backbone", "target": 33, "len": 1, "label": "-"}, {"source": 33, "type": "backbone", "target": 34, "len": 1, "label": "-"}, {"source": 34, "type": "backbone", "target": 35, "len": 1, "label": "-"}, {"source": 35, "type": "backbone", "target": 36, "len": 1, "label": "-"}, {"source": 36, "type": "backbone", "target": 37, "len": 1, "label": "-"}, {"source": 36, "type": "basepair", "target": 61, "len": 1, "label": "="}, {"source": 37, "type": "basepair", "target": 60, "len": 1, "label": "="}, {"source": 37, "type": "backbone", "target": 38, "len": 1, "label": "-"}, {"source": 38, "type": "basepair", "target": 59, "len": 1, "label": "="}, {"source": 38, "type": "backbone", "target": 39, "len": 1, "label": "-"}, {"source": 39, "type": "backbone", "target": 40, "len": 1, "label": "-"}, {"source": 39, "type": "basepair", "target": 58, "len": 1, "label": "="}, {"source": 40, "type": "backbone", "target": 41, "len": 1, "label": "-"}, {"source": 40, "type": "basepair", "target": 57, "len": 1, "label": "="}, {"source": 41, "type": "basepair", "target": 56, "len": 1, "label": "="}, {"source": 41, "type": "backbone", "target": 42, "len": 1, "label": "-"}, {"source": 42, "type": "backbone", "target": 43, "len": 1, "label": "-"}, {"source": 42, "type": "basepair", "target": 54, "len": 1, "label": "="}, {"source": 43, "type": "backbone", "target": 44, "len": 1, "label": "-"}, {"source": 43, "type": "basepair", "target": 53, "len": 1, "label": "="}, {"source": 44, "type": "backbone", "target": 45, "len": 1, "label": "-"}, {"source": 45, "type": "backbone", "target": 46, "len": 1, "label": "-"}, {"source": 46, "type": "backbone", "target": 47, "len": 1, "label": "-"}, {"source": 47, "type": "backbone", "target": 48, "len": 1, "label": "-"}, {"source": 48, "type": "backbone", "target": 49, "len": 1, "label": "-"}, {"source": 49, "type": "backbone", "target": 50, "len": 1, "label": "-"}, {"source": 50, "type": "backbone", "target": 51, "len": 1, "label": "-"}, {"source": 51, "type": "backbone", "target": 52, "len": 1, "label": "-"}, {"source": 52, "type": "backbone", "target": 53, "len": 1, "label": "-"}, {"source": 53, "type": "backbone", "target": 54, "len": 1, "label": "-"}, {"source": 54, "type": "backbone", "target": 55, "len": 1, "label": "-"}, {"source": 55, "type": "backbone", "target": 56, "len": 1, "label": "-"}, {"source": 56, "type": "backbone", "target": 57, "len": 1, "label": "-"}, {"source": 57, "type": "backbone", "target": 58, "len": 1, "label": "-"}, {"source": 58, "type": "backbone", "target": 59, "len": 1, "label": "-"}, {"source": 59, "type": "backbone", "target": 60, "len": 1, "label": "-"}, {"source": 60, "type": "backbone", "target": 61, "len": 1, "label": "-"}], "multigraph": false}
+{"directed": false, "graph": {"info": "RNAshapes shape_type=2 energy_range=4 max_num=3", "id": "ACNY01000002.1/278641-278580_[][[]_]", "structure": ".........((((((.....))))))..........((((((((.........)).))))))", "sequence": "GAUCGUUCACUUCGCAUCGCGCGAAGCGCAGUUCGCCUCAGGCCAUGGAACGGGGACCUGAG"}, "nodes": [{"position": 0, "id": 0, "label": "G"}, {"position": 1, "id": 1, "label": "A"}, {"position": 2, "id": 2, "label": "U"}, {"position": 3, "id": 3, "label": "C"}, {"position": 4, "id": 4, "label": "G"}, {"position": 5, "id": 5, "label": "U"}, {"position": 6, "id": 6, "label": "U"}, {"position": 7, "id": 7, "label": "C"}, {"position": 8, "id": 8, "label": "A"}, {"position": 9, "id": 9, "label": "C"}, {"position": 10, "id": 10, "label": "U"}, {"position": 11, "id": 11, "label": "U"}, {"position": 12, "id": 12, "label": "C"}, {"position": 13, "id": 13, "label": "G"}, {"position": 14, "id": 14, "label": "C"}, {"position": 15, "id": 15, "label": "A"}, {"position": 16, "id": 16, "label": "U"}, {"position": 17, "id": 17, "label": "C"}, {"position": 18, "id": 18, "label": "G"}, {"position": 19, "id": 19, "label": "C"}, {"position": 20, "id": 20, "label": "G"}, {"position": 21, "id": 21, "label": "C"}, {"position": 22, "id": 22, "label": "G"}, {"position": 23, "id": 23, "label": "A"}, {"position": 24, "id": 24, "label": "A"}, {"position": 25, "id": 25, "label": "G"}, {"position": 26, "id": 26, "label": "C"}, {"position": 27, "id": 27, "label": "G"}, {"position": 28, "id": 28, "label": "C"}, {"position": 29, "id": 29, "label": "A"}, {"position": 30, "id": 30, "label": "G"}, {"position": 31, "id": 31, "label": "U"}, {"position": 32, "id": 32, "label": "U"}, {"position": 33, "id": 33, "label": "C"}, {"position": 34, "id": 34, "label": "G"}, {"position": 35, "id": 35, "label": "C"}, {"position": 36, "id": 36, "label": "C"}, {"position": 37, "id": 37, "label": "U"}, {"position": 38, "id": 38, "label": "C"}, {"position": 39, "id": 39, "label": "A"}, {"position": 40, "id": 40, "label": "G"}, {"position": 41, "id": 41, "label": "G"}, {"position": 42, "id": 42, "label": "C"}, {"position": 43, "id": 43, "label": "C"}, {"position": 44, "id": 44, "label": "A"}, {"position": 45, "id": 45, "label": "U"}, {"position": 46, "id": 46, "label": "G"}, {"position": 47, "id": 47, "label": "G"}, {"position": 48, "id": 48, "label": "A"}, {"position": 49, "id": 49, "label": "A"}, {"position": 50, "id": 50, "label": "C"}, {"position": 51, "id": 51, "label": "G"}, {"position": 52, "id": 52, "label": "G"}, {"position": 53, "id": 53, "label": "G"}, {"position": 54, "id": 54, "label": "G"}, {"position": 55, "id": 55, "label": "A"}, {"position": 56, "id": 56, "label": "C"}, {"position": 57, "id": 57, "label": "C"}, {"position": 58, "id": 58, "label": "U"}, {"position": 59, "id": 59, "label": "G"}, {"position": 60, "id": 60, "label": "A"}, {"position": 61, "id": 61, "label": "G"}], "links": [{"source": 0, "type": "backbone", "target": 1, "len": 1, "label": "-"}, {"source": 1, "type": "backbone", "target": 2, "len": 1, "label": "-"}, {"source": 2, "type": "backbone", "target": 3, "len": 1, "label": "-"}, {"source": 3, "type": "backbone", "target": 4, "len": 1, "label": "-"}, {"source": 4, "type": "backbone", "target": 5, "len": 1, "label": "-"}, {"source": 5, "type": "backbone", "target": 6, "len": 1, "label": "-"}, {"source": 6, "type": "backbone", "target": 7, "len": 1, "label": "-"}, {"source": 7, "type": "backbone", "target": 8, "len": 1, "label": "-"}, {"source": 8, "type": "backbone", "target": 9, "len": 1, "label": "-"}, {"source": 9, "type": "basepair", "target": 25, "len": 1, "label": "="}, {"source": 9, "type": "backbone", "target": 10, "len": 1, "label": "-"}, {"source": 10, "type": "basepair", "target": 24, "len": 1, "label": "="}, {"source": 10, "type": "backbone", "target": 11, "len": 1, "label": "-"}, {"source": 11, "type": "backbone", "target": 12, "len": 1, "label": "-"}, {"source": 11, "type": "basepair", "target": 23, "len": 1, "label": "="}, {"source": 12, "type": "backbone", "target": 13, "len": 1, "label": "-"}, {"source": 12, "type": "basepair", "target": 22, "len": 1, "label": "="}, {"source": 13, "type": "basepair", "target": 21, "len": 1, "label": "="}, {"source": 13, "type": "backbone", "target": 14, "len": 1, "label": "-"}, {"source": 14, "type": "basepair", "target": 20, "len": 1, "label": "="}, {"source": 14, "type": "backbone", "target": 15, "len": 1, "label": "-"}, {"source": 15, "type": "backbone", "target": 16, "len": 1, "label": "-"}, {"source": 16, "type": "backbone", "target": 17, "len": 1, "label": "-"}, {"source": 17, "type": "backbone", "target": 18, "len": 1, "label": "-"}, {"source": 18, "type": "backbone", "target": 19, "len": 1, "label": "-"}, {"source": 19, "type": "backbone", "target": 20, "len": 1, "label": "-"}, {"source": 20, "type": "backbone", "target": 21, "len": 1, "label": "-"}, {"source": 21, "type": "backbone", "target": 22, "len": 1, "label": "-"}, {"source": 22, "type": "backbone", "target": 23, "len": 1, "label": "-"}, {"source": 23, "type": "backbone", "target": 24, "len": 1, "label": "-"}, {"source": 24, "type": "backbone", "target": 25, "len": 1, "label": "-"}, {"source": 25, "type": "backbone", "target": 26, "len": 1, "label": "-"}, {"source": 26, "type": "backbone", "target": 27, "len": 1, "label": "-"}, {"source": 27, "type": "backbone", "target": 28, "len": 1, "label": "-"}, {"source": 28, "type": "backbone", "target": 29, "len": 1, "label": "-"}, {"source": 29, "type": "backbone", "target": 30, "len": 1, "label": "-"}, {"source": 30, "type": "backbone", "target": 31, "len": 1, "label": "-"}, {"source": 31, "type": "backbone", "target": 32, "len": 1, "label": "-"}, {"source": 32, "type": "backbone", "target": 33, "len": 1, "label": "-"}, {"source": 33, "type": "backbone", "target": 34, "len": 1, "label": "-"}, {"source": 34, "type": "backbone", "target": 35, "len": 1, "label": "-"}, {"source": 35, "type": "backbone", "target": 36, "len": 1, "label": "-"}, {"source": 36, "type": "backbone", "target": 37, "len": 1, "label": "-"}, {"source": 36, "type": "basepair", "target": 61, "len": 1, "label": "="}, {"source": 37, "type": "basepair", "target": 60, "len": 1, "label": "="}, {"source": 37, "type": "backbone", "target": 38, "len": 1, "label": "-"}, {"source": 38, "type": "basepair", "target": 59, "len": 1, "label": "="}, {"source": 38, "type": "backbone", "target": 39, "len": 1, "label": "-"}, {"source": 39, "type": "backbone", "target": 40, "len": 1, "label": "-"}, {"source": 39, "type": "basepair", "target": 58, "len": 1, "label": "="}, {"source": 40, "type": "backbone", "target": 41, "len": 1, "label": "-"}, {"source": 40, "type": "basepair", "target": 57, "len": 1, "label": "="}, {"source": 41, "type": "basepair", "target": 56, "len": 1, "label": "="}, {"source": 41, "type": "backbone", "target": 42, "len": 1, "label": "-"}, {"source": 42, "type": "backbone", "target": 43, "len": 1, "label": "-"}, {"source": 42, "type": "basepair", "target": 54, "len": 1, "label": "="}, {"source": 43, "type": "backbone", "target": 44, "len": 1, "label": "-"}, {"source": 43, "type": "basepair", "target": 53, "len": 1, "label": "="}, {"source": 44, "type": "backbone", "target": 45, "len": 1, "label": "-"}, {"source": 45, "type": "backbone", "target": 46, "len": 1, "label": "-"}, {"source": 46, "type": "backbone", "target": 47, "len": 1, "label": "-"}, {"source": 47, "type": "backbone", "target": 48, "len": 1, "label": "-"}, {"source": 48, "type": "backbone", "target": 49, "len": 1, "label": "-"}, {"source": 49, "type": "backbone", "target": 50, "len": 1, "label": "-"}, {"source": 50, "type": "backbone", "target": 51, "len": 1, "label": "-"}, {"source": 51, "type": "backbone", "target": 52, "len": 1, "label": "-"}, {"source": 52, "type": "backbone", "target": 53, "len": 1, "label": "-"}, {"source": 53, "type": "backbone", "target": 54, "len": 1, "label": "-"}, {"source": 54, "type": "backbone", "target": 55, "len": 1, "label": "-"}, {"source": 55, "type": "backbone", "target": 56, "len": 1, "label": "-"}, {"source": 56, "type": "backbone", "target": 57, "len": 1, "label": "-"}, {"source": 57, "type": "backbone", "target": 58, "len": 1, "label": "-"}, {"source": 58, "type": "backbone", "target": 59, "len": 1, "label": "-"}, {"source": 59, "type": "backbone", "target": 60, "len": 1, "label": "-"}, {"source": 60, "type": "backbone", "target": 61, "len": 1, "label": "-"}], "multigraph": false}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/csc_sparse1.mtx	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,9 @@
+%%MatrixMarket matrix coordinate integer general
+%
+3 3 6
+1 1 1
+3 1 2
+3 2 3
+1 3 4
+2 3 5
+3 3 6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/csc_sparse2.mtx	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,9 @@
+%%MatrixMarket matrix coordinate real general
+%
+3 3 6
+1 1 1.5
+3 1 -2
+3 2 0.3
+1 3 41
+2 3 0.1235
+3 3 6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/csc_stack_result01.mtx	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,15 @@
+%%MatrixMarket matrix coordinate real general
+%
+3 6 12
+1 1 1.000000000000000e+00
+3 1 2.000000000000000e+00
+3 2 3.000000000000000e+00
+1 3 4.000000000000000e+00
+2 3 5.000000000000000e+00
+3 3 6.000000000000000e+00
+1 4 1.500000000000000e+00
+3 4 -2.000000000000000e+00
+3 5 3.000000000000000e-01
+1 6 4.100000000000000e+01
+2 6 1.235000000000000e-01
+3 6 6.000000000000000e+00
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/csr_sparse1.mtx	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,9 @@
+%%MatrixMarket matrix coordinate integer general
+%
+3 3 6
+1 1 1
+1 3 2
+2 3 3
+3 1 4
+3 2 5
+3 3 6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/csr_sparse2.mtx	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,9 @@
+%%MatrixMarket matrix coordinate real general
+%
+3 3 6
+1 1 1
+1 3 -0.2
+2 3 11
+3 1 0.04
+3 2 -5
+3 3 2.6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/csr_stack_result01.mtx	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,15 @@
+%%MatrixMarket matrix coordinate real general
+%
+6 3 12
+1 1 1.000000000000000e+00
+1 3 2.000000000000000e+00
+2 3 3.000000000000000e+00
+3 1 4.000000000000000e+00
+3 2 5.000000000000000e+00
+3 3 6.000000000000000e+00
+4 1 1.000000000000000e+00
+4 3 -2.000000000000000e-01
+5 3 1.100000000000000e+01
+6 1 4.000000000000000e-02
+6 2 -5.000000000000000e+00
+6 3 2.600000000000000e+00
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/empty_file.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,48 @@
+0	44	64	-76	4
+0	51	48	-73	0
+0	58	65	-49	0
+0	43	61	-49	1
+0	45	43	-79	0
+0	42	60	-98	0
+0	50	55	-59	2
+0	53	53	-56	2
+0	45	44	-61	0
+0	43	65	-84	4
+0	35	52	-75	1
+0	56	56	-70	0
+1	-61	86	43	0
+1	-67	93	15	0
+1	-59	94	36	0
+1	-50	92	62	0
+1	-78	91	70	1
+1	-35	87	47	0
+1	-56	91	52	0
+1	-61	81	46	0
+1	-83	78	34	0
+1	-50	87	45	0
+1	-67	73	50	1
+1	-50	97	45	0
+1	-61	111	45	0
+2	-109	23	-92	0
+2	-94	20	-96	0
+2	-85	26	-88	0
+2	-90	33	-114	1
+2	-63	9	-106	0
+2	-79	9	-93	1
+2	-99	26	-108	3
+2	-81	19	-110	0
+2	-108	21	-108	0
+2	-92	27	-106	3
+2	-88	2	-106	1
+2	-88	15	-103	0
+3	54	-74	4	0
+3	42	-92	31	1
+3	39	-99	-7	1
+3	48	-115	-5	1
+3	39	-96	2	1
+3	31	-109	9	1
+3	33	-96	-8	1
+3	23	-102	4	0
+3	38	-90	21	1
+3	34	-107	1	1
+3	35	-78	18	1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/f1_score.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,2 @@
+f1_score : 
+0.8461538461538461
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/fbeta_score.txt	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,2 @@
+fbeta_score : 
+0.8461538461538461
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/feature_importances_.tabular	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,11 @@
+feature_importances_
+0.15959252
+0.20373514
+0.22071308
+0.06281833
+0.098471984
+0.06960951
+0.13073005
+0.027164686
+0.022071308
+0.0050933785
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/feature_selection_result01	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,11 @@
+0	1
+143.762620712	-1.1796457192799998
+-88.5787166225	-2.5710918402200003
+-82.8452345578	-0.168636324107
+72.4951388149	0.991068834926
+11.805182128	-0.7096855607860001
+-63.9354970901	0.9841122108220001
+126.32584079600001	0.35353444883900004
+23.0341392692	1.03188231893
+67.6714937696	-0.8214378651719999
+47.39275848810001	-0.0942409319417
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/feature_selection_result02	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,262 @@
+temp_2	temp_1	forecast_noaa	friend
+68.0	69.0	65.0	88.0
+60.0	59.0	57.0	66.0
+85.0	88.0	75.0	70.0
+82.0	65.0	63.0	58.0
+54.0	50.0	44.0	58.0
+48.0	51.0	45.0	63.0
+49.0	52.0	45.0	41.0
+73.0	78.0	75.0	66.0
+39.0	35.0	43.0	38.0
+42.0	40.0	45.0	36.0
+42.0	47.0	41.0	58.0
+76.0	72.0	76.0	88.0
+69.0	76.0	73.0	72.0
+40.0	39.0	45.0	46.0
+71.0	78.0	70.0	84.0
+64.0	71.0	63.0	85.0
+54.0	48.0	44.0	61.0
+73.0	72.0	77.0	68.0
+56.0	57.0	50.0	70.0
+45.0	40.0	44.0	39.0
+50.0	54.0	47.0	53.0
+65.0	58.0	52.0	71.0
+60.0	68.0	58.0	54.0
+60.0	65.0	55.0	65.0
+48.0	47.0	46.0	51.0
+44.0	44.0	43.0	42.0
+64.0	64.0	64.0	69.0
+59.0	62.0	57.0	67.0
+68.0	66.0	64.0	74.0
+77.0	70.0	67.0	90.0
+59.0	57.0	54.0	70.0
+55.0	50.0	46.0	57.0
+58.0	55.0	49.0	71.0
+57.0	55.0	46.0	67.0
+42.0	42.0	41.0	47.0
+64.0	65.0	57.0	41.0
+64.0	63.0	63.0	73.0
+49.0	48.0	45.0	28.0
+40.0	42.0	44.0	62.0
+44.0	51.0	45.0	38.0
+67.0	64.0	65.0	64.0
+79.0	75.0	74.0	63.0
+50.0	52.0	42.0	39.0
+85.0	67.0	66.0	80.0
+67.0	68.0	65.0	56.0
+53.0	54.0	53.0	42.0
+62.0	62.0	52.0	70.0
+77.0	76.0	76.0	61.0
+74.0	73.0	71.0	93.0
+50.0	52.0	50.0	35.0
+75.0	70.0	71.0	68.0
+73.0	77.0	75.0	62.0
+69.0	60.0	52.0	72.0
+55.0	52.0	50.0	54.0
+81.0	79.0	71.0	85.0
+77.0	76.0	53.0	74.0
+66.0	66.0	64.0	85.0
+68.0	57.0	58.0	62.0
+76.0	66.0	57.0	60.0
+60.0	61.0	58.0	41.0
+56.0	55.0	52.0	65.0
+57.0	48.0	46.0	54.0
+53.0	49.0	46.0	63.0
+66.0	65.0	64.0	73.0
+74.0	60.0	58.0	56.0
+55.0	56.0	53.0	36.0
+62.0	59.0	56.0	44.0
+36.0	44.0	41.0	35.0
+77.0	82.0	62.0	83.0
+64.0	64.0	65.0	76.0
+44.0	43.0	41.0	46.0
+56.0	64.0	51.0	57.0
+61.0	63.0	49.0	49.0
+65.0	70.0	67.0	79.0
+63.0	71.0	48.0	42.0
+76.0	76.0	69.0	85.0
+64.0	68.0	58.0	55.0
+39.0	39.0	44.0	39.0
+79.0	71.0	70.0	52.0
+68.0	69.0	68.0	89.0
+70.0	74.0	71.0	82.0
+75.0	81.0	62.0	81.0
+49.0	51.0	49.0	34.0
+52.0	45.0	44.0	61.0
+80.0	87.0	73.0	73.0
+76.0	71.0	71.0	86.0
+65.0	55.0	56.0	77.0
+76.0	80.0	72.0	81.0
+71.0	67.0	65.0	76.0
+64.0	61.0	60.0	78.0
+49.0	46.0	43.0	65.0
+35.0	39.0	42.0	51.0
+68.0	67.0	67.0	61.0
+48.0	52.0	43.0	50.0
+60.0	67.0	68.0	87.0
+74.0	75.0	67.0	77.0
+68.0	68.0	73.0	79.0
+81.0	92.0	65.0	71.0
+68.0	67.0	69.0	56.0
+45.0	44.0	43.0	56.0
+60.0	61.0	56.0	73.0
+65.0	65.0	49.0	41.0
+68.0	68.0	72.0	70.0
+77.0	87.0	62.0	69.0
+65.0	117.0	51.0	62.0
+72.0	80.0	75.0	66.0
+55.0	57.0	47.0	46.0
+63.0	67.0	61.0	68.0
+53.0	58.0	51.0	56.0
+61.0	65.0	53.0	41.0
+56.0	52.0	45.0	47.0
+57.0	59.0	52.0	39.0
+57.0	57.0	53.0	35.0
+89.0	81.0	56.0	66.0
+71.0	75.0	76.0	75.0
+88.0	76.0	76.0	95.0
+65.0	57.0	61.0	53.0
+68.0	69.0	72.0	86.0
+76.0	77.0	66.0	64.0
+58.0	55.0	47.0	55.0
+50.0	49.0	45.0	53.0
+53.0	54.0	48.0	57.0
+59.0	55.0	49.0	42.0
+51.0	56.0	53.0	45.0
+76.0	68.0	72.0	77.0
+52.0	54.0	49.0	44.0
+65.0	67.0	69.0	87.0
+45.0	49.0	45.0	33.0
+49.0	49.0	47.0	45.0
+57.0	56.0	48.0	49.0
+76.0	73.0	66.0	78.0
+65.0	66.0	65.0	60.0
+77.0	69.0	66.0	62.0
+77.0	82.0	64.0	65.0
+87.0	90.0	75.0	65.0
+51.0	51.0	49.0	43.0
+68.0	77.0	57.0	41.0
+57.0	60.0	58.0	58.0
+79.0	74.0	71.0	87.0
+80.0	85.0	73.0	74.0
+60.0	68.0	61.0	64.0
+62.0	56.0	46.0	37.0
+73.0	71.0	55.0	45.0
+60.0	62.0	57.0	40.0
+79.0	83.0	76.0	76.0
+71.0	64.0	62.0	56.0
+54.0	56.0	45.0	54.0
+40.0	41.0	42.0	31.0
+66.0	65.0	66.0	67.0
+57.0	65.0	49.0	38.0
+41.0	40.0	46.0	41.0
+45.0	45.0	43.0	29.0
+52.0	52.0	48.0	58.0
+64.0	63.0	50.0	63.0
+52.0	52.0	47.0	44.0
+58.0	60.0	55.0	77.0
+84.0	81.0	73.0	89.0
+77.0	75.0	74.0	77.0
+63.0	59.0	48.0	64.0
+72.0	73.0	77.0	94.0
+73.0	75.0	73.0	66.0
+59.0	60.0	56.0	59.0
+73.0	75.0	68.0	56.0
+66.0	59.0	56.0	40.0
+49.0	53.0	47.0	56.0
+80.0	79.0	76.0	60.0
+59.0	57.0	49.0	46.0
+79.0	75.0	64.0	77.0
+69.0	71.0	67.0	81.0
+57.0	53.0	50.0	42.0
+47.0	46.0	48.0	56.0
+82.0	81.0	72.0	70.0
+54.0	49.0	47.0	29.0
+56.0	57.0	44.0	34.0
+60.0	60.0	54.0	53.0
+70.0	67.0	72.0	64.0
+65.0	61.0	62.0	60.0
+70.0	66.0	66.0	85.0
+65.0	64.0	50.0	55.0
+63.0	66.0	62.0	49.0
+57.0	64.0	52.0	49.0
+60.0	71.0	61.0	56.0
+67.0	75.0	62.0	60.0
+45.0	48.0	46.0	47.0
+60.0	53.0	48.0	70.0
+55.0	49.0	46.0	65.0
+86.0	85.0	67.0	81.0
+57.0	62.0	48.0	30.0
+46.0	50.0	42.0	58.0
+65.0	58.0	51.0	39.0
+79.0	72.0	74.0	95.0
+57.0	55.0	50.0	34.0
+72.0	74.0	70.0	91.0
+83.0	85.0	77.0	77.0
+77.0	73.0	77.0	93.0
+52.0	52.0	44.0	39.0
+64.0	67.0	64.0	62.0
+49.0	45.0	45.0	35.0
+52.0	46.0	46.0	41.0
+62.0	66.0	60.0	57.0
+81.0	71.0	75.0	86.0
+65.0	70.0	66.0	79.0
+55.0	58.0	46.0	53.0
+72.0	72.0	76.0	65.0
+74.0	74.0	74.0	71.0
+63.0	65.0	63.0	49.0
+68.0	77.0	55.0	39.0
+60.0	59.0	49.0	35.0
+44.0	45.0	41.0	61.0
+51.0	53.0	49.0	46.0
+57.0	53.0	54.0	72.0
+85.0	79.0	73.0	79.0
+51.0	49.0	44.0	44.0
+66.0	63.0	62.0	78.0
+63.0	69.0	54.0	45.0
+51.0	60.0	47.0	46.0
+63.0	64.0	60.0	73.0
+75.0	79.0	66.0	64.0
+49.0	55.0	43.0	58.0
+68.0	73.0	54.0	41.0
+62.0	60.0	57.0	62.0
+71.0	67.0	67.0	77.0
+41.0	42.0	45.0	58.0
+57.0	60.0	62.0	55.0
+55.0	57.0	47.0	30.0
+35.0	35.0	44.0	36.0
+71.0	75.0	66.0	84.0
+59.0	61.0	48.0	65.0
+53.0	51.0	46.0	59.0
+69.0	71.0	67.0	70.0
+71.0	74.0	74.0	71.0
+48.0	48.0	44.0	42.0
+68.0	74.0	70.0	60.0
+70.0	76.0	68.0	57.0
+54.0	58.0	47.0	37.0
+53.0	51.0	48.0	43.0
+67.0	72.0	68.0	78.0
+67.0	76.0	64.0	74.0
+52.0	52.0	47.0	60.0
+52.0	53.0	48.0	53.0
+67.0	65.0	65.0	83.0
+61.0	58.0	58.0	43.0
+74.0	77.0	74.0	56.0
+58.0	61.0	51.0	35.0
+66.0	67.0	64.0	54.0
+55.0	54.0	46.0	58.0
+71.0	79.0	65.0	58.0
+81.0	77.0	63.0	67.0
+75.0	71.0	64.0	55.0
+59.0	58.0	54.0	61.0
+64.0	68.0	55.0	56.0
+43.0	40.0	45.0	49.0
+75.0	80.0	75.0	71.0
+87.0	74.0	59.0	61.0
+48.0	57.0	42.0	57.0
+48.0	52.0	43.0	57.0
+74.0	71.0	71.0	95.0
+54.0	49.0	49.0	70.0
+77.0	89.0	59.0	61.0
+66.0	60.0	56.0	78.0
+59.0	59.0	58.0	40.0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/feature_selection_result03	Wed May 15 07:25:29 2019 -0400
@@ -0,0 +1,262 @@
+temp_1	friend
+69.0	88.0
+59.0	66.0
+88.0	70.0
+65.0	58.0
+50.0	58.0
+51.0	63.0
+52.0	41.0
+78.0	66.0
+35.0	38.0
+40.0	36.0
+47.0	58.0
+72.0	88.0
+76.0	72.0
+39.0	46.0
+78.0	84.0
+71.0	85.0
+48.0	61.0
+72.0	68.0
+57.0	70.0
+40.0	39.0
+54.0	53.0
+58.0	71.0
+68.0	54.0
+65.0	65.0
+47.0	51.0
+44.0	42.0
+64.0	69.0
+62.0	67.0
+66.0	74.0
+70.0	90.0
+57.0	70.0
+50.0	57.0
+55.0	71.0
+55.0	67.0
+42.0	47.0
+65.0	41.0
+63.0	73.0
+48.0	28.0
+42.0	62.0
+51.0	38.0
+64.0	64.0
+75.0	63.0
+52.0	39.0
+67.0	80.0
+68.0	56.0
+54.0	42.0
+62.0	70.0
+76.0	61.0
+73.0	93.0
+52.0	35.0
+70.0	68.0
+77.0	62.0
+60.0	72.0
+52.0	54.0
+79.0	85.0
+76.0	74.0
+66.0	85.0
+57.0	62.0
+66.0	60.0
+61.0	41.0
+55.0	65.0
+48.0	54.0
+49.0	63.0
+65.0	73.0
+60.0	56.0
+56.0	36.0
+59.0	44.0
+44.0	35.0
+82.0	83.0
+64.0	76.0
+43.0	46.0
+64.0	57.0
+63.0	49.0
+70.0	79.0
+71.0	42.0
+76.0	85.0
+68.0	55.0
+39.0	39.0
+71.0	52.0
+69.0	89.0
+74.0	82.0
+81.0	81.0
+51.0	34.0
+45.0	61.0
+87.0	73.0
+71.0	86.0
+55.0	77.0
+80.0	81.0
+67.0	76.0
+61.0	78.0
+46.0	65.0
+39.0	51.0
+67.0	61.0
+52.0	50.0
+67.0	87.0
+75.0	77.0
+68.0	79.0
+92.0	71.0
+67.0	56.0
+44.0	56.0
+61.0	73.0
+65.0	41.0
+68.0	70.0
+87.0	69.0
+117.0	62.0
+80.0	66.0
+57.0	46.0
+67.0	68.0
+58.0	56.0
+65.0	41.0
+52.0	47.0
+59.0	39.0
+57.0	35.0
+81.0	66.0
+75.0	75.0
+76.0	95.0
+57.0	53.0
+69.0	86.0
+77.0	64.0
+55.0	55.0
+49.0	53.0
+54.0	57.0
+55.0	42.0
+56.0	45.0
+68.0	77.0
+54.0	44.0
+67.0	87.0
+49.0	33.0
+49.0	45.0
+56.0	49.0
+73.0	78.0
+66.0	60.0
+69.0	62.0
+82.0	65.0
+90.0	65.0
+51.0	43.0
+77.0	41.0
+60.0	58.0
+74.0	87.0
+85.0	74.0
+68.0	64.0
+56.0	37.0
+71.0	45.0
+62.0	40.0
+83.0	76.0
+64.0	56.0
+56.0	54.0
+41.0	31.0
+65.0	67.0
+65.0	38.0
+40.0	41.0
+45.0	29.0
+52.0	58.0
+63.0	63.0
+52.0	44.0
+60.0	77.0
+81.0	89.0
+75.0	77.0
+59.0	64.0
+73.0	94.0
+75.0	66.0
+60.0	59.0
+75.0	56.0
+59.0	40.0
+53.0	56.0
+79.0	60.0
+57.0	46.0
+75.0	77.0
+71.0	81.0
+53.0	42.0
+46.0	56.0
+81.0	70.0
+49.0	29.0
+57.0	34.0
+60.0	53.0
+67.0	64.0