changeset 20:f051d64eb12e draft

planemo upload for repository https://github.com/bgruening/galaxytools/tree/master/tools/sklearn commit 8cf3d813ec755166ee0bd517b4ecbbd4f84d4df1
author bgruening
date Thu, 23 Aug 2018 16:19:35 -0400
parents 98b632c407ae
children 56ddc98c484e
files discriminant.xml main_macros.xml sk_whitelist.py test-data/gbc_model01 test-data/gbr_model01 test-data/nn_model01.txt test-data/nn_model02.txt test-data/nn_model03.txt test-data/pipeline01 test-data/pipeline04 test-data/rfc_model01 test-data/rfr_model01 test-data/searchCV01 test-data/svc_model01.txt test-data/svc_model02.txt test-data/svc_model03.txt test-data/svc_prediction_result03.tabular utils.py
diffstat 18 files changed, 1033 insertions(+), 286 deletions(-) [+]
line wrap: on
line diff
--- a/discriminant.xml	Fri Aug 17 12:29:48 2018 -0400
+++ b/discriminant.xml	Thu Aug 23 16:19:35 2018 -0400
@@ -20,9 +20,9 @@
 import numpy as np
 import sklearn.discriminant_analysis
 import pandas
-import pickle
 
-execfile("$__tool_directory__/utils.py")
+execfile("$__tool_directory__/sk_whitelist.py")
+execfile("$__tool_directory__/utils.py", globals())
 
 input_json_path = sys.argv[1]
 with open(input_json_path, "r") as param_handler:
@@ -31,7 +31,7 @@
 #if $selected_tasks.selected_task == "load":
 
 with open("$infile_model", 'rb') as model_handler:
-    classifier_object = pickle.load(model_handler)
+    classifier_object = SafePickler.load(model_handler)
 
 header = 'infer' if params["selected_tasks"]["header"] else None
 data = pandas.read_csv("$selected_tasks.infile_data", sep='\t', header=header, index_col=None, parse_dates=True, encoding=None, tupleize_cols=False)
--- a/main_macros.xml	Fri Aug 17 12:29:48 2018 -0400
+++ b/main_macros.xml	Thu Aug 23 16:19:35 2018 -0400
@@ -1424,19 +1424,19 @@
   <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}
-             url = {https://github.com/scikit-learn/scikit-learn}
-            }
+          @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>
 
@@ -1454,4 +1454,48 @@
     </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>
+
 </macros>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sk_whitelist.py	Thu Aug 23 16:19:35 2018 -0400
@@ -0,0 +1,757 @@
+# class or function names from scikit-learn
+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.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'
+)
+
+
+# class or function names from skrebate
+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'
+)
+
+
+# class or function names from xgboost
+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'
+)
Binary file test-data/gbc_model01 has changed
Binary file test-data/gbr_model01 has changed
--- a/test-data/nn_model01.txt	Fri Aug 17 12:29:48 2018 -0400
+++ b/test-data/nn_model01.txt	Thu Aug 23 16:19:35 2018 -0400
@@ -1,14 +1,13 @@
 ccopy_reg
 _reconstructor
-p0
+p1
 (csklearn.neighbors.classification
 KNeighborsClassifier
-p1
+p2
 c__builtin__
 object
-p2
-Ntp3
-Rp4
+p3
+NtRp4
 (dp5
 S'n_neighbors'
 p6
@@ -25,108 +24,87 @@
 ndarray
 p10
 (I0
-tp11
-S'b'
-p12
-tp13
-Rp14
+tS'b'
+tRp11
 (I1
 (I48
-tp15
-cnumpy
+tcnumpy
 dtype
-p16
+p12
 (S'i8'
-p17
 I0
 I1
-tp18
-Rp19
+tRp13
 (I3
 S'<'
-p20
 NNNI-1
 I-1
 I0
-tp21
-bI00
+tbI00
 S'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00'
-p22
-tp23
-bsS'algorithm'
-p24
+tbsS'algorithm'
+p14
 Vbrute
-p25
+p15
 sS'_sklearn_version'
-p26
+p16
 S'0.19.1'
-p27
+p17
 sS'metric'
-p28
+p18
 S'minkowski'
-p29
+p19
 sS'classes_'
-p30
+p20
 g9
 (g10
 (I0
-tp31
-g12
-tp32
-Rp33
+tS'b'
+tRp21
 (I1
 (I4
-tp34
-g19
+tg13
 I00
 S'\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00'
-p35
-tp36
-bsS'metric_params'
-p37
+tbsS'metric_params'
+p22
 NsS'p'
-p38
 I2
 sS'effective_metric_params_'
-p39
-(dp40
+p23
+(dp24
 sS'radius'
-p41
+p25
 NsS'leaf_size'
-p42
+p26
 I30
 sS'_fit_method'
-p43
-g25
+p27
+g15
 sS'weights'
-p44
+p28
 Vuniform
-p45
+p29
 sS'_tree'
-p46
+p30
 NsS'effective_metric_'
-p47
+p31
 S'euclidean'
-p48
+p32
 sS'outputs_2d_'
-p49
+p33
 I00
 sS'_fit_X'
-p50
+p34
 g9
 (g10
 (I0
-tp51
-g12
-tp52
-Rp53
+tS'b'
+tRp35
 (I1
 (I48
 I4
-tp54
-g19
+tg13
 I01
 S'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00,\x00\x00\x00\x00\x00\x00\x003\x00\x00\x00\x00\x00\x00\x00:\x00\x00\x00\x00\x00\x00\x00+\x00\x00\x00\x00\x00\x00\x00-\x00\x00\x00\x00\x00\x00\x00*\x00\x00\x00\x00\x00\x00\x002\x00\x00\x00\x00\x00\x00\x005\x00\x00\x00\x00\x00\x00\x00-\x00\x00\x00\x00\x00\x00\x00+\x00\x00\x00\x00\x00\x00\x00#\x00\x00\x00\x00\x00\x00\x008\x00\x00\x00\x00\x00\x00\x00\xc3\xff\xff\xff\xff\xff\xff\xff\xbd\xff\xff\xff\xff\xff\xff\xff\xc5\xff\xff\xff\xff\xff\xff\xff\xce\xff\xff\xff\xff\xff\xff\xff\xb2\xff\xff\xff\xff\xff\xff\xff\xdd\xff\xff\xff\xff\xff\xff\xff\xc8\xff\xff\xff\xff\xff\xff\xff\xc3\xff\xff\xff\xff\xff\xff\xff\xad\xff\xff\xff\xff\xff\xff\xff\xce\xff\xff\xff\xff\xff\xff\xff\xbd\xff\xff\xff\xff\xff\xff\xff\xce\xff\xff\xff\xff\xff\xff\xff\xc3\xff\xff\xff\xff\xff\xff\xff\x93\xff\xff\xff\xff\xff\xff\xff\xa2\xff\xff\xff\xff\xff\xff\xff\xab\xff\xff\xff\xff\xff\xff\xff\xa6\xff\xff\xff\xff\xff\xff\xff\xc1\xff\xff\xff\xff\xff\xff\xff\xb1\xff\xff\xff\xff\xff\xff\xff\x9d\xff\xff\xff\xff\xff\xff\xff\xaf\xff\xff\xff\xff\xff\xff\xff\x94\xff\xff\xff\xff\xff\xff\xff\xa4\xff\xff\xff\xff\xff\xff\xff\xa8\xff\xff\xff\xff\xff\xff\xff\xa8\xff\xff\xff\xff\xff\xff\xff6\x00\x00\x00\x00\x00\x00\x00*\x00\x00\x00\x00\x00\x00\x00\'\x00\x00\x00\x00\x00\x00\x000\x00\x00\x00\x00\x00\x00\x00\'\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00!\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00&\x00\x00\x00\x00\x00\x00\x00"\x00\x00\x00\x00\x00\x00\x00#\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x000\x00\x00\x00\x00\x00\x00\x00A\x00\x00\x00\x00\x00\x00\x00=\x00\x00\x00\x00\x00\x00\x00+\x00\x00\x00\x00\x00\x00\x00<\x00\x00\x00\x00\x00\x00\x007\x00\x00\x00\x00\x00\x00\x005\x00\x00\x00\x00\x00\x00\x00,\x00\x00\x00\x00\x00\x00\x00A\x00\x00\x00\x00\x00\x00\x004\x00\x00\x00\x00\x00\x00\x008\x00\x00\x00\x00\x00\x00\x00V\x00\x00\x00\x00\x00\x00\x00]\x00\x00\x00\x00\x00\x00\x00^\x00\x00\x00\x00\x00\x00\x00\\\x00\x00\x00\x00\x00\x00\x00[\x00\x00\x00\x00\x00\x00\x00W\x00\x00\x00\x00\x00\x00\x00[\x00\x00\x00\x00\x00\x00\x00Q\x00\x00\x00\x00\x00\x00\x00N\x00\x00\x00\x00\x00\x00\x00W\x00\x00\x00\x00\x00\x00\x00I\x00\x00\x00\x00\x00\x00\x00a\x00\x00\x00\x00\x00\x00\x00o\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00!\x00\x00\x00\x00\x00\x00\x00\t\x00\x00\x00\x00\x00\x00\x00\t\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x15\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x00\x00\xb6\xff\xff\xff\xff\xff\xff\xff\xa4\xff\xff\xff\xff\xff\xff\xff\x9d\xff\xff\xff\xff\xff\xff\xff\x8d\xff\xff\xff\xff\xff\xff\xff\xa0\xff\xff\xff\xff\xff\xff\xff\x93\xff\xff\xff\xff\xff\xff\xff\xa0\xff\xff\xff\xff\xff\xff\xff\x9a\xff\xff\xff\xff\xff\xff\xff\xa6\xff\xff\xff\xff\xff\xff\xff\x95\xff\xff\xff\xff\xff\xff\xff\xb2\xff\xff\xff\xff\xff\xff\xff\xb4\xff\xff\xff\xff\xff\xff\xff\xb7\xff\xff\xff\xff\xff\xff\xff\xcf\xff\xff\xff\xff\xff\xff\xff\xcf\xff\xff\xff\xff\xff\xff\xff\xb1\xff\xff\xff\xff\xff\xff\xff\x9e\xff\xff\xff\xff\xff\xff\xff\xc5\xff\xff\xff\xff\xff\xff\xff\xc8\xff\xff\xff\xff\xff\xff\xff\xc3\xff\xff\xff\xff\xff\xff\xff\xac\xff\xff\xff\xff\xff\xff\xff\xb5\xff\xff\xff\xff\xff\xff\xff\xba\xff\xff\xff\xff\xff\xff\xff+\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x00\x00$\x00\x00\x00\x00\x00\x00\x00>\x00\x00\x00\x00\x00\x00\x00F\x00\x00\x00\x00\x00\x00\x00/\x00\x00\x00\x00\x00\x00\x004\x00\x00\x00\x00\x00\x00\x00.\x00\x00\x00\x00\x00\x00\x00"\x00\x00\x00\x00\x00\x00\x00-\x00\x00\x00\x00\x00\x00\x002\x00\x00\x00\x00\x00\x00\x00-\x00\x00\x00\x00\x00\x00\x00-\x00\x00\x00\x00\x00\x00\x00\xa4\xff\xff\xff\xff\xff\xff\xff\xa0\xff\xff\xff\xff\xff\xff\xff\xa8\xff\xff\xff\xff\xff\xff\xff\x8e\xff\xff\xff\xff\xff\xff\xff\x96\xff\xff\xff\xff\xff\xff\xff\xa3\xff\xff\xff\xff\xff\xff\xff\x94\xff\xff\xff\xff\xff\xff\xff\x92\xff\xff\xff\xff\xff\xff\xff\x94\xff\xff\xff\xff\xff\xff\xff\x96\xff\xff\xff\xff\xff\xff\xff\x96\xff\xff\xff\xff\xff\xff\xff\x99\xff\xff\xff\xff\xff\xff\xff\x04\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\xf9\xff\xff\xff\xff\xff\xff\xff\xfb\xff\xff\xff\xff\xff\xff\xff\x02\x00\x00\x00\x00\x00\x00\x00\t\x00\x00\x00\x00\x00\x00\x00\xf8\xff\xff\xff\xff\xff\xff\xff\x04\x00\x00\x00\x00\x00\x00\x00\x15\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00'
-p55
-tp56
-bsb.
\ No newline at end of file
+tbsb.
\ No newline at end of file
--- a/test-data/nn_model02.txt	Fri Aug 17 12:29:48 2018 -0400
+++ b/test-data/nn_model02.txt	Thu Aug 23 16:19:35 2018 -0400
@@ -1,14 +1,13 @@
 ccopy_reg
 _reconstructor
-p0
+p1
 (csklearn.neighbors.classification
 RadiusNeighborsClassifier
-p1
+p2
 c__builtin__
 object
-p2
-Ntp3
-Rp4
+p3
+NtRp4
 (dp5
 S'n_neighbors'
 p6
@@ -24,213 +23,168 @@
 ndarray
 p10
 (I0
-tp11
-S'b'
-p12
-tp13
-Rp14
+tS'b'
+tRp11
 (I1
 (I48
-tp15
-cnumpy
+tcnumpy
 dtype
-p16
+p12
 (S'i8'
-p17
 I0
 I1
-tp18
-Rp19
+tRp13
 (I3
 S'<'
-p20
 NNNI-1
 I-1
 I0
-tp21
-bI00
+tbI00
 S'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00'
-p22
-tp23
-bsS'algorithm'
-p24
+tbsS'algorithm'
+p14
 Vauto
-p25
+p15
 sS'_sklearn_version'
-p26
+p16
 S'0.19.1'
-p27
+p17
 sS'metric'
-p28
+p18
 S'minkowski'
-p29
+p19
 sS'classes_'
-p30
+p20
 g9
 (g10
 (I0
-tp31
-g12
-tp32
-Rp33
+tS'b'
+tRp21
 (I1
 (I4
-tp34
-g19
+tg13
 I00
 S'\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00'
-p35
-tp36
-bsS'outputs_2d_'
-p37
+tbsS'outputs_2d_'
+p22
 I00
 sS'metric_params'
-p38
+p23
 NsS'p'
-p39
 I2
 sS'effective_metric_params_'
-p40
-(dp41
+p24
+(dp25
 sS'radius'
-p42
-F1.0
+p26
+F1
 sS'leaf_size'
-p43
+p27
 I30
 sS'_fit_method'
-p44
+p28
 S'kd_tree'
-p45
+p29
 sS'weights'
-p46
+p30
 Vuniform
-p47
+p31
 sS'_tree'
-p48
+p32
 csklearn.neighbors.kd_tree
 newObj
-p49
+p33
 (csklearn.neighbors.kd_tree
 BinaryTree
-p50
-tp51
-Rp52
+p34
+tRp35
 (g9
 (g10
 (I0
-tp53
-g12
-tp54
-Rp55
+tS'b'
+tRp36
 (I1
 (I48
 I4
-tp56
-g16
+tg12
 (S'f8'
-p57
 I0
 I1
-tp58
-Rp59
+tRp37
 (I3
 S'<'
-p60
 NNNI-1
 I-1
 I0
-tp61
-bI00
+tbI00
 S'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00F@\x00\x00\x00\x00\x00\x00P@\x00\x00\x00\x00\x00\x00S\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80I@\x00\x00\x00\x00\x00\x00H@\x00\x00\x00\x00\x00@R\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00M@\x00\x00\x00\x00\x00@P@\x00\x00\x00\x00\x00\x80H\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80E@\x00\x00\x00\x00\x00\x80N@\x00\x00\x00\x00\x00\x80H\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80F@\x00\x00\x00\x00\x00\x80E@\x00\x00\x00\x00\x00\xc0S\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00E@\x00\x00\x00\x00\x00\x00N@\x00\x00\x00\x00\x00\x80X\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00I@\x00\x00\x00\x00\x00\x80K@\x00\x00\x00\x00\x00\x80M\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80J@\x00\x00\x00\x00\x00\x80J@\x00\x00\x00\x00\x00\x00L\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80F@\x00\x00\x00\x00\x00\x00F@\x00\x00\x00\x00\x00\x80N\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80E@\x00\x00\x00\x00\x00@P@\x00\x00\x00\x00\x00\x00U\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80A@\x00\x00\x00\x00\x00\x00J@\x00\x00\x00\x00\x00\xc0R\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00L@\x00\x00\x00\x00\x00\x00L@\x00\x00\x00\x00\x00\x80Q\xc0\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x80N\xc0\x00\x00\x00\x00\x00\x80U@\x00\x00\x00\x00\x00\x80E@\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\xc0P\xc0\x00\x00\x00\x00\x00@W@\x00\x00\x00\x00\x00\x00.@\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x80M\xc0\x00\x00\x00\x00\x00\x80W@\x00\x00\x00\x00\x00\x00B@\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00I\xc0\x00\x00\x00\x00\x00\x00W@\x00\x00\x00\x00\x00\x00O@\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x80S\xc0\x00\x00\x00\x00\x00\xc0V@\x00\x00\x00\x00\x00\x80Q@\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x80A\xc0\x00\x00\x00\x00\x00\xc0U@\x00\x00\x00\x00\x00\x80G@\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00L\xc0\x00\x00\x00\x00\x00\xc0V@\x00\x00\x00\x00\x00\x00J@\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x80N\xc0\x00\x00\x00\x00\x00@T@\x00\x00\x00\x00\x00\x00G@\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\xc0T\xc0\x00\x00\x00\x00\x00\x80S@\x00\x00\x00\x00\x00\x00A@\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00I\xc0\x00\x00\x00\x00\x00\xc0U@\x00\x00\x00\x00\x00\x80F@\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\xc0P\xc0\x00\x00\x00\x00\x00@R@\x00\x00\x00\x00\x00\x00I@\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00I\xc0\x00\x00\x00\x00\x00@X@\x00\x00\x00\x00\x00\x80F@\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x80N\xc0\x00\x00\x00\x00\x00\xc0[@\x00\x00\x00\x00\x00\x80F@\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00@[\xc0\x00\x00\x00\x00\x00\x007@\x00\x00\x00\x00\x00\x00W\xc0\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x80W\xc0\x00\x00\x00\x00\x00\x004@\x00\x00\x00\x00\x00\x00X\xc0\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00@U\xc0\x00\x00\x00\x00\x00\x00:@\x00\x00\x00\x00\x00\x00V\xc0\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x80V\xc0\x00\x00\x00\x00\x00\x80@@\x00\x00\x00\x00\x00\x80\\\xc0\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x80O\xc0\x00\x00\x00\x00\x00\x00"@\x00\x00\x00\x00\x00\x80Z\xc0\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\xc0S\xc0\x00\x00\x00\x00\x00\x00"@\x00\x00\x00\x00\x00@W\xc0\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\xc0X\xc0\x00\x00\x00\x00\x00\x00:@\x00\x00\x00\x00\x00\x00[\xc0\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00@T\xc0\x00\x00\x00\x00\x00\x003@\x00\x00\x00\x00\x00\x80[\xc0\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00[\xc0\x00\x00\x00\x00\x00\x005@\x00\x00\x00\x00\x00\x00[\xc0\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00W\xc0\x00\x00\x00\x00\x00\x00;@\x00\x00\x00\x00\x00\x80Z\xc0\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00V\xc0\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x80Z\xc0\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00V\xc0\x00\x00\x00\x00\x00\x00.@\x00\x00\x00\x00\x00\xc0Y\xc0\x00\x00\x00\x00\x00\x00\x08@\x00\x00\x00\x00\x00\x00K@\x00\x00\x00\x00\x00\x80R\xc0\x00\x00\x00\x00\x00\x00\x10@\x00\x00\x00\x00\x00\x00\x08@\x00\x00\x00\x00\x00\x00E@\x00\x00\x00\x00\x00\x00W\xc0\x00\x00\x00\x00\x00\x00?@\x00\x00\x00\x00\x00\x00\x08@\x00\x00\x00\x00\x00\x80C@\x00\x00\x00\x00\x00\xc0X\xc0\x00\x00\x00\x00\x00\x00\x1c\xc0\x00\x00\x00\x00\x00\x00\x08@\x00\x00\x00\x00\x00\x00H@\x00\x00\x00\x00\x00\xc0\\\xc0\x00\x00\x00\x00\x00\x00\x14\xc0\x00\x00\x00\x00\x00\x00\x08@\x00\x00\x00\x00\x00\x80C@\x00\x00\x00\x00\x00\x00X\xc0\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x08@\x00\x00\x00\x00\x00\x00?@\x00\x00\x00\x00\x00@[\xc0\x00\x00\x00\x00\x00\x00"@\x00\x00\x00\x00\x00\x00\x08@\x00\x00\x00\x00\x00\x80@@\x00\x00\x00\x00\x00\x00X\xc0\x00\x00\x00\x00\x00\x00 \xc0\x00\x00\x00\x00\x00\x00\x08@\x00\x00\x00\x00\x00\x007@\x00\x00\x00\x00\x00\x80Y\xc0\x00\x00\x00\x00\x00\x00\x10@\x00\x00\x00\x00\x00\x00\x08@\x00\x00\x00\x00\x00\x00C@\x00\x00\x00\x00\x00\x80V\xc0\x00\x00\x00\x00\x00\x005@\x00\x00\x00\x00\x00\x00\x08@\x00\x00\x00\x00\x00\x00A@\x00\x00\x00\x00\x00\xc0Z\xc0\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x08@\x00\x00\x00\x00\x00\x80A@\x00\x00\x00\x00\x00\x80S\xc0\x00\x00\x00\x00\x00\x002@'
-p62
-tp63
-bg9
+tbg9
 (g10
 (I0
-tp64
-g12
-tp65
-Rp66
+tS'b'
+tRp38
 (I1
 (I48
-tp67
-g19
+tg13
 I00
 S'\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\t\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\r\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x15\x00\x00\x00\x00\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00!\x00\x00\x00\x00\x00\x00\x00"\x00\x00\x00\x00\x00\x00\x00#\x00\x00\x00\x00\x00\x00\x00$\x00\x00\x00\x00\x00\x00\x00%\x00\x00\x00\x00\x00\x00\x00&\x00\x00\x00\x00\x00\x00\x00\'\x00\x00\x00\x00\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00)\x00\x00\x00\x00\x00\x00\x00*\x00\x00\x00\x00\x00\x00\x00+\x00\x00\x00\x00\x00\x00\x00,\x00\x00\x00\x00\x00\x00\x00-\x00\x00\x00\x00\x00\x00\x00.\x00\x00\x00\x00\x00\x00\x00/\x00\x00\x00\x00\x00\x00\x00'
-p68
-tp69
-bg9
+tbg9
 (g10
 (I0
-tp70
-g12
-tp71
-Rp72
+tS'b'
+tRp39
 (I1
 (I1
-tp73
-g16
+tg12
 (S'V32'
-p74
 I0
 I1
-tp75
-Rp76
+tRp40
 (I3
 S'|'
-p77
 N(S'idx_start'
-p78
+p41
 S'idx_end'
-p79
+p42
 S'is_leaf'
-p80
+p43
+g26
+tp44
+(dp45
 g42
-tp81
-(dp82
-g79
-(g19
+(g13
 I8
-tp83
-sg80
-(g19
+tp46
+sg43
+(g13
 I16
-tp84
-sg42
-(g59
+tp47
+sg26
+(g37
 I24
-tp85
-sg78
-(g19
+tp48
+sg41
+(g13
 I0
-tp86
+tp49
 sI32
 I1
 I16
-tp87
-bI00
+tbI00
 S'\x00\x00\x00\x00\x00\x00\x00\x000\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xd2 \xd7\x95\xa0\x89\x80@'
-p88
-tp89
-bg9
+tbg9
 (g10
 (I0
-tp90
-g12
-tp91
-Rp92
+tS'b'
+tRp50
 (I1
 (I2
 I1
 I4
-tp93
-g59
+tg37
 I00
 S'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@[\xc0\x00\x00\x00\x00\x00\xc0\\\xc0\x00\x00\x00\x00\x00\x80\\\xc0\x00\x00\x00\x00\x00\x00\x08@\x00\x00\x00\x00\x00\x00M@\x00\x00\x00\x00\x00\xc0[@\x00\x00\x00\x00\x00\x80Q@'
-p94
-tp95
-bI30
+tbI30
 I1
 I1
 I0
@@ -239,68 +193,50 @@
 I0
 csklearn.neighbors.dist_metrics
 newObj
-p96
+p51
 (csklearn.neighbors.dist_metrics
 EuclideanDistance
-p97
-tp98
-Rp99
-(F2.0
+p52
+tRp53
+(F2
 g9
 (g10
 (I0
-tp100
-g12
-tp101
-Rp102
+tS'b'
+tRp54
 (I1
 (I1
-tp103
-g59
+tg37
 I00
 S'\x00\x00\x00\x00\x00\x00\x00\x00'
-p104
-tp105
-bg9
+tbg9
 (g10
 (I0
-tp106
-g12
-tp107
-Rp108
+tS'b'
+tRp55
 (I1
 (I1
 I1
-tp109
-g59
+tg37
 I00
 S'\x00\x00\x00\x00\x00\x00\x00\x00'
-p110
-tp111
-btp112
-btp113
-bsS'effective_metric_'
-p114
+tbtbtbsS'effective_metric_'
+p56
 S'euclidean'
-p115
+p57
 sS'outlier_label'
-p116
+p58
 NsS'_fit_X'
-p117
+p59
 g9
 (g10
 (I0
-tp118
-g12
-tp119
-Rp120
+tS'b'
+tRp60
 (I1
 (I48
 I4
-tp121
-g19
+tg13
 I01
 S'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00,\x00\x00\x00\x00\x00\x00\x003\x00\x00\x00\x00\x00\x00\x00:\x00\x00\x00\x00\x00\x00\x00+\x00\x00\x00\x00\x00\x00\x00-\x00\x00\x00\x00\x00\x00\x00*\x00\x00\x00\x00\x00\x00\x002\x00\x00\x00\x00\x00\x00\x005\x00\x00\x00\x00\x00\x00\x00-\x00\x00\x00\x00\x00\x00\x00+\x00\x00\x00\x00\x00\x00\x00#\x00\x00\x00\x00\x00\x00\x008\x00\x00\x00\x00\x00\x00\x00\xc3\xff\xff\xff\xff\xff\xff\xff\xbd\xff\xff\xff\xff\xff\xff\xff\xc5\xff\xff\xff\xff\xff\xff\xff\xce\xff\xff\xff\xff\xff\xff\xff\xb2\xff\xff\xff\xff\xff\xff\xff\xdd\xff\xff\xff\xff\xff\xff\xff\xc8\xff\xff\xff\xff\xff\xff\xff\xc3\xff\xff\xff\xff\xff\xff\xff\xad\xff\xff\xff\xff\xff\xff\xff\xce\xff\xff\xff\xff\xff\xff\xff\xbd\xff\xff\xff\xff\xff\xff\xff\xce\xff\xff\xff\xff\xff\xff\xff\xc3\xff\xff\xff\xff\xff\xff\xff\x93\xff\xff\xff\xff\xff\xff\xff\xa2\xff\xff\xff\xff\xff\xff\xff\xab\xff\xff\xff\xff\xff\xff\xff\xa6\xff\xff\xff\xff\xff\xff\xff\xc1\xff\xff\xff\xff\xff\xff\xff\xb1\xff\xff\xff\xff\xff\xff\xff\x9d\xff\xff\xff\xff\xff\xff\xff\xaf\xff\xff\xff\xff\xff\xff\xff\x94\xff\xff\xff\xff\xff\xff\xff\xa4\xff\xff\xff\xff\xff\xff\xff\xa8\xff\xff\xff\xff\xff\xff\xff\xa8\xff\xff\xff\xff\xff\xff\xff6\x00\x00\x00\x00\x00\x00\x00*\x00\x00\x00\x00\x00\x00\x00\'\x00\x00\x00\x00\x00\x00\x000\x00\x00\x00\x00\x00\x00\x00\'\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00!\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00&\x00\x00\x00\x00\x00\x00\x00"\x00\x00\x00\x00\x00\x00\x00#\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x000\x00\x00\x00\x00\x00\x00\x00A\x00\x00\x00\x00\x00\x00\x00=\x00\x00\x00\x00\x00\x00\x00+\x00\x00\x00\x00\x00\x00\x00<\x00\x00\x00\x00\x00\x00\x007\x00\x00\x00\x00\x00\x00\x005\x00\x00\x00\x00\x00\x00\x00,\x00\x00\x00\x00\x00\x00\x00A\x00\x00\x00\x00\x00\x00\x004\x00\x00\x00\x00\x00\x00\x008\x00\x00\x00\x00\x00\x00\x00V\x00\x00\x00\x00\x00\x00\x00]\x00\x00\x00\x00\x00\x00\x00^\x00\x00\x00\x00\x00\x00\x00\\\x00\x00\x00\x00\x00\x00\x00[\x00\x00\x00\x00\x00\x00\x00W\x00\x00\x00\x00\x00\x00\x00[\x00\x00\x00\x00\x00\x00\x00Q\x00\x00\x00\x00\x00\x00\x00N\x00\x00\x00\x00\x00\x00\x00W\x00\x00\x00\x00\x00\x00\x00I\x00\x00\x00\x00\x00\x00\x00a\x00\x00\x00\x00\x00\x00\x00o\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00!\x00\x00\x00\x00\x00\x00\x00\t\x00\x00\x00\x00\x00\x00\x00\t\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x15\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x00\x00\xb6\xff\xff\xff\xff\xff\xff\xff\xa4\xff\xff\xff\xff\xff\xff\xff\x9d\xff\xff\xff\xff\xff\xff\xff\x8d\xff\xff\xff\xff\xff\xff\xff\xa0\xff\xff\xff\xff\xff\xff\xff\x93\xff\xff\xff\xff\xff\xff\xff\xa0\xff\xff\xff\xff\xff\xff\xff\x9a\xff\xff\xff\xff\xff\xff\xff\xa6\xff\xff\xff\xff\xff\xff\xff\x95\xff\xff\xff\xff\xff\xff\xff\xb2\xff\xff\xff\xff\xff\xff\xff\xb4\xff\xff\xff\xff\xff\xff\xff\xb7\xff\xff\xff\xff\xff\xff\xff\xcf\xff\xff\xff\xff\xff\xff\xff\xcf\xff\xff\xff\xff\xff\xff\xff\xb1\xff\xff\xff\xff\xff\xff\xff\x9e\xff\xff\xff\xff\xff\xff\xff\xc5\xff\xff\xff\xff\xff\xff\xff\xc8\xff\xff\xff\xff\xff\xff\xff\xc3\xff\xff\xff\xff\xff\xff\xff\xac\xff\xff\xff\xff\xff\xff\xff\xb5\xff\xff\xff\xff\xff\xff\xff\xba\xff\xff\xff\xff\xff\xff\xff+\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x00\x00$\x00\x00\x00\x00\x00\x00\x00>\x00\x00\x00\x00\x00\x00\x00F\x00\x00\x00\x00\x00\x00\x00/\x00\x00\x00\x00\x00\x00\x004\x00\x00\x00\x00\x00\x00\x00.\x00\x00\x00\x00\x00\x00\x00"\x00\x00\x00\x00\x00\x00\x00-\x00\x00\x00\x00\x00\x00\x002\x00\x00\x00\x00\x00\x00\x00-\x00\x00\x00\x00\x00\x00\x00-\x00\x00\x00\x00\x00\x00\x00\xa4\xff\xff\xff\xff\xff\xff\xff\xa0\xff\xff\xff\xff\xff\xff\xff\xa8\xff\xff\xff\xff\xff\xff\xff\x8e\xff\xff\xff\xff\xff\xff\xff\x96\xff\xff\xff\xff\xff\xff\xff\xa3\xff\xff\xff\xff\xff\xff\xff\x94\xff\xff\xff\xff\xff\xff\xff\x92\xff\xff\xff\xff\xff\xff\xff\x94\xff\xff\xff\xff\xff\xff\xff\x96\xff\xff\xff\xff\xff\xff\xff\x96\xff\xff\xff\xff\xff\xff\xff\x99\xff\xff\xff\xff\xff\xff\xff\x04\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\xf9\xff\xff\xff\xff\xff\xff\xff\xfb\xff\xff\xff\xff\xff\xff\xff\x02\x00\x00\x00\x00\x00\x00\x00\t\x00\x00\x00\x00\x00\x00\x00\xf8\xff\xff\xff\xff\xff\xff\xff\x04\x00\x00\x00\x00\x00\x00\x00\x15\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00'
-p122
-tp123
-bsb.
\ No newline at end of file
+tbsb.
\ No newline at end of file
--- a/test-data/nn_model03.txt	Fri Aug 17 12:29:48 2018 -0400
+++ b/test-data/nn_model03.txt	Thu Aug 23 16:19:35 2018 -0400
@@ -1,14 +1,13 @@
 ccopy_reg
 _reconstructor
-p0
+p1
 (csklearn.neighbors.nearest_centroid
 NearestCentroid
-p1
+p2
 c__builtin__
 object
-p2
-Ntp3
-Rp4
+p3
+NtRp4
 (dp5
 S'centroids_'
 p6
@@ -19,73 +18,54 @@
 ndarray
 p8
 (I0
-tp9
-S'b'
-p10
-tp11
-Rp12
+tS'b'
+tRp9
 (I1
 (I4
 I4
-tp13
-cnumpy
+tcnumpy
 dtype
-p14
+p10
 (S'f8'
-p15
 I0
 I1
-tp16
-Rp17
+tRp11
 (I3
 S'<'
-p18
 NNNI-1
 I-1
 I0
-tp19
-bI00
+tbI00
 S'\x00\x00\x00\x00\x00\x00\x00\x00\xab\xaa\xaa\xaa\xaa\x8aG@\x00\x00\x00\x00\x00\xc0K@UUUUUEQ\xc0\x00\x00\x00\x00\x00\x00\x00@\xab\xaa\xaa\xaa\xaajV\xc0\xab\xaa\xaa\xaa\xaa*3@\x00\x00\x00\x00\x00\xa0Y\xc0\x00\x00\x00\x00\x00\x00\xf0?\xc5N\xec\xc4N\xecM\xc0;\xb1\x13;\xb1SV@\x14;\xb1\x13;\xb1F@\x00\x00\x00\x00\x00\x00\x08@\xe9\xa2\x8b.\xba\xe8B@\x8c.\xba\xe8\xa2\x0bX\xc0t\xd1E\x17]t\x19@'
-p20
-tp21
-bsS'metric'
-p22
+tbsS'metric'
+p12
 Veuclidean
-p23
+p13
 sS'classes_'
-p24
+p14
 g7
 (g8
 (I0
-tp25
-g10
-tp26
-Rp27
+tS'b'
+tRp15
 (I1
 (I4
-tp28
-g14
+tg10
 (S'i8'
-p29
 I0
 I1
-tp30
-Rp31
+tRp16
 (I3
 S'<'
-p32
 NNNI-1
 I-1
 I0
-tp33
-bI00
+tbI00
 S'\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00'
-p34
-tp35
-bsS'_sklearn_version'
-p36
+tbsS'_sklearn_version'
+p17
 S'0.19.1'
-p37
+p18
 sS'shrink_threshold'
-p38
+p19
 Nsb.
\ No newline at end of file
Binary file test-data/pipeline01 has changed
Binary file test-data/pipeline04 has changed
Binary file test-data/rfc_model01 has changed
Binary file test-data/rfr_model01 has changed
Binary file test-data/searchCV01 has changed
Binary file test-data/svc_model01.txt has changed
Binary file test-data/svc_model02.txt has changed
Binary file test-data/svc_model03.txt has changed
--- a/test-data/svc_prediction_result03.tabular	Fri Aug 17 12:29:48 2018 -0400
+++ b/test-data/svc_prediction_result03.tabular	Thu Aug 23 16:19:35 2018 -0400
@@ -25,7 +25,7 @@
 1	-50	97	45	2
 1	-61	111	45	2
 2	-109	23	-92	2
-2	-94	20	-96	3
+2	-94	20	-96	1
 2	-85	26	-88	2
 2	-90	33	-114	0
 2	-63	9	-106	0
@@ -33,7 +33,7 @@
 2	-99	26	-108	1
 2	-81	19	-110	0
 2	-108	21	-108	1
-2	-92	27	-106	0
+2	-92	27	-106	1
 2	-88	2	-106	3
 2	-88	15	-103	3
 3	54	-74	4	3
--- a/utils.py	Fri Aug 17 12:29:48 2018 -0400
+++ b/utils.py	Thu Aug 23 16:19:35 2018 -0400
@@ -2,7 +2,7 @@
 import os
 import pandas
 import re
-import pickle
+import cPickle as pickle
 import warnings
 import numpy as np
 import xgboost
@@ -10,10 +10,62 @@
 import sklearn
 import ast
 from asteval import Interpreter, make_symbol_table
-from sklearn import metrics, model_selection, ensemble, svm, linear_model, naive_bayes, tree, neighbors
+from sklearn import (cluster, decomposition, ensemble, feature_extraction, feature_selection,
+                    gaussian_process, kernel_approximation, linear_model, metrics,
+                    model_selection, naive_bayes, neighbors, pipeline, preprocessing,
+                    svm, linear_model, tree, discriminant_analysis)
 
 N_JOBS = int( os.environ.get('GALAXY_SLOTS', 1) )
 
+class SafePickler(object):
+    """
+    Used to safely deserialize scikit-learn model objects serialized by cPickle.dump
+    Usage:
+        eg.: SafePickler.load(pickled_file_object)
+    """
+    @classmethod
+    def find_class(self, module, name):
+
+        bad_names = ('and', 'as', 'assert', 'break', 'class', 'continue',
+                    'def', 'del', 'elif', 'else', 'except', 'exec',
+                    'finally', 'for', 'from', 'global', 'if', 'import',
+                    'in', 'is', 'lambda', 'not', 'or', 'pass', 'print',
+                    'raise', 'return', 'try', 'system', 'while', 'with',
+                    'True', 'False', 'None', 'eval', 'execfile', '__import__',
+                    '__package__', '__subclasses__', '__bases__', '__globals__',
+                    '__code__', '__closure__', '__func__', '__self__', '__module__',
+                    '__dict__', '__class__', '__call__', '__get__',
+                    '__getattribute__', '__subclasshook__', '__new__',
+                    '__init__', 'func_globals', 'func_code', 'func_closure',
+                    'im_class', 'im_func', 'im_self', 'gi_code', 'gi_frame',
+                    '__asteval__', 'f_locals', '__mro__')
+        good_names = ('copy_reg._reconstructor', '__builtin__.object')
+
+        if re.match(r'^[a-zA-Z_][a-zA-Z0-9_]*$', name):
+            fullname = module + '.' + name
+            if  (fullname in good_names)\
+                or  (   (   module.startswith('sklearn.')
+                            or module.startswith('xgboost.')
+                            or module.startswith('skrebate.')
+                            or module.startswith('numpy.')
+                            or module == 'numpy'
+                        )
+                        and (name not in bad_names)
+                    ) :
+                # TODO: replace with a whitelist checker
+                if fullname not in SK_NAMES + SKR_NAMES + XGB_NAMES + NUMPY_NAMES + good_names:
+                    print("Warning: global %s is not in pickler whitelist yet and will loss support soon. Contact tool author or leave a message at github.com" % fullname)
+                mod = sys.modules[module]
+                return getattr(mod, name)
+
+        raise pickle.UnpicklingError("global '%s' is forbidden" % fullname)
+
+    @classmethod
+    def load(self, file):
+        obj = pickle.Unpickler(file)
+        obj.find_global = self.find_class
+        return obj.load()
+
 def read_columns(f, c=None, c_option='by_index_number', return_df=False, **args):
     data = pandas.read_csv(f, **args)
     if c_option == 'by_index_number':
@@ -48,7 +100,7 @@
         if inputs['model_inputter']['input_mode'] == 'prefitted':
             model_file = inputs['model_inputter']['fitted_estimator']
             with open(model_file, 'rb') as model_handler:
-                fitted_estimator = pickle.load(model_handler)
+                fitted_estimator = SafePickler.load(model_handler)
             new_selector = selector(fitted_estimator, prefit=True, **options)
         else:
             estimator_json = inputs['model_inputter']["estimator_selector"]
@@ -132,9 +184,9 @@
 
         if load_scipy:
             scipy_distributions = scipy.stats.distributions.__dict__
-            for key in scipy_distributions.keys():
-                if isinstance(scipy_distributions[key], (scipy.stats.rv_continuous, scipy.stats.rv_discrete)):
-                    syms['scipy_stats_' + key] = scipy_distributions[key]
+            for k, v in scipy_distributions.items():
+                if isinstance(v, (scipy.stats.rv_continuous, scipy.stats.rv_discrete)):
+                    syms['scipy_stats_' + k] = v
 
         if load_numpy:
             from_numpy_random = ['beta', 'binomial', 'bytes', 'chisquare', 'choice', 'dirichlet', 'division',