# HG changeset patch # User bgruening # Date 1618346544 0 # Node ID 2ac77e0aec82541e98f146712fcf67d5ebb2c1d6 # Parent 8b47a3c08d97bb7d115ee82df54df42f812c2908 "planemo upload for repository https://github.com/bgruening/galaxytools/tree/master/tools/sklearn commit 208a8d348e7c7a182cfbe1b6f17868146428a7e2" diff -r 8b47a3c08d97 -r 2ac77e0aec82 feature_selection.xml --- a/feature_selection.xml Wed Mar 11 17:09:06 2020 +0000 +++ b/feature_selection.xml Tue Apr 13 20:42:24 2021 +0000 @@ -1,11 +1,11 @@ - + module, including univariate filter selection methods and recursive feature elimination algorithm main_macros.xml - + - + echo "@VERSION@" - - - + + + @@ -162,168 +162,168 @@ - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - + + + + +
- - - - + + + +
- - - - - - - - - + + + + + + + + +
@@ -337,7 +337,7 @@ ]]> - - + +
diff -r 8b47a3c08d97 -r 2ac77e0aec82 fitted_model_eval.py --- a/fitted_model_eval.py Wed Mar 11 17:09:06 2020 +0000 +++ b/fitted_model_eval.py Tue Apr 13 20:42:24 2021 +0000 @@ -1,17 +1,17 @@ import argparse import json -import pandas as pd import warnings +import pandas as pd +from galaxy_ml.utils import get_scoring, load_model, read_columns from scipy.io import mmread -from sklearn.pipeline import Pipeline from sklearn.metrics.scorer import _check_multimetric_scoring from sklearn.model_selection._validation import _score -from galaxy_ml.utils import get_scoring, load_model, read_columns +from sklearn.pipeline import Pipeline def _get_X_y(params, infile1, infile2): - """ read from inputs and output X and y + """read from inputs and output X and y Parameters ---------- @@ -26,35 +26,40 @@ # store read dataframe object loaded_df = {} - input_type = params['input_options']['selected_input'] + input_type = params["input_options"]["selected_input"] # tabular input - if input_type == 'tabular': - header = 'infer' if params['input_options']['header1'] else None - column_option = (params['input_options']['column_selector_options_1'] - ['selected_column_selector_option']) - if column_option in ['by_index_number', 'all_but_by_index_number', - 'by_header_name', 'all_but_by_header_name']: - c = params['input_options']['column_selector_options_1']['col1'] + if input_type == "tabular": + header = "infer" if params["input_options"]["header1"] else None + column_option = params["input_options"]["column_selector_options_1"]["selected_column_selector_option"] + if column_option in [ + "by_index_number", + "all_but_by_index_number", + "by_header_name", + "all_but_by_header_name", + ]: + c = params["input_options"]["column_selector_options_1"]["col1"] else: c = None df_key = infile1 + repr(header) - df = pd.read_csv(infile1, sep='\t', header=header, - parse_dates=True) + df = pd.read_csv(infile1, sep="\t", header=header, parse_dates=True) loaded_df[df_key] = df X = read_columns(df, c=c, c_option=column_option).astype(float) # sparse input - elif input_type == 'sparse': - X = mmread(open(infile1, 'r')) + elif input_type == "sparse": + X = mmread(open(infile1, "r")) # Get target y - header = 'infer' if params['input_options']['header2'] else None - column_option = (params['input_options']['column_selector_options_2'] - ['selected_column_selector_option2']) - if column_option in ['by_index_number', 'all_but_by_index_number', - 'by_header_name', 'all_but_by_header_name']: - c = params['input_options']['column_selector_options_2']['col2'] + header = "infer" if params["input_options"]["header2"] else None + column_option = params["input_options"]["column_selector_options_2"]["selected_column_selector_option2"] + if column_option in [ + "by_index_number", + "all_but_by_index_number", + "by_header_name", + "all_but_by_header_name", + ]: + c = params["input_options"]["column_selector_options_2"]["col2"] else: c = None @@ -62,26 +67,24 @@ if df_key in loaded_df: infile2 = loaded_df[df_key] else: - infile2 = pd.read_csv(infile2, sep='\t', - header=header, parse_dates=True) + infile2 = pd.read_csv(infile2, sep="\t", header=header, parse_dates=True) loaded_df[df_key] = infile2 - y = read_columns( - infile2, - c=c, - c_option=column_option, - sep='\t', - header=header, - parse_dates=True) + y = read_columns(infile2, c=c, c_option=column_option, sep="\t", header=header, parse_dates=True) if len(y.shape) == 2 and y.shape[1] == 1: y = y.ravel() return X, y -def main(inputs, infile_estimator, outfile_eval, - infile_weights=None, infile1=None, - infile2=None): +def main( + inputs, + infile_estimator, + outfile_eval, + infile_weights=None, + infile1=None, + infile2=None, +): """ Parameter --------- @@ -103,49 +106,55 @@ infile2 : str File path to dataset containing target values """ - warnings.filterwarnings('ignore') + warnings.filterwarnings("ignore") - with open(inputs, 'r') as param_handler: + with open(inputs, "r") as param_handler: params = json.load(param_handler) X_test, y_test = _get_X_y(params, infile1, infile2) # load model - with open(infile_estimator, 'rb') as est_handler: + with open(infile_estimator, "rb") as est_handler: estimator = load_model(est_handler) main_est = estimator if isinstance(estimator, Pipeline): main_est = estimator.steps[-1][-1] - if hasattr(main_est, 'config') and hasattr(main_est, 'load_weights'): - if not infile_weights or infile_weights == 'None': - raise ValueError("The selected model skeleton asks for weights, " - "but no dataset for weights was provided!") + if hasattr(main_est, "config") and hasattr(main_est, "load_weights"): + if not infile_weights or infile_weights == "None": + raise ValueError( + "The selected model skeleton asks for weights, " "but no dataset for weights was provided!" + ) main_est.load_weights(infile_weights) # handle scorer, convert to scorer dict - scoring = params['scoring'] + # Check if scoring is specified + scoring = params["scoring"] + if scoring is not None: + # get_scoring() expects secondary_scoring to be a comma separated string (not a list) + # Check if secondary_scoring is specified + secondary_scoring = scoring.get("secondary_scoring", None) + if secondary_scoring is not None: + # If secondary_scoring is specified, convert the list into comman separated string + scoring["secondary_scoring"] = ",".join(scoring["secondary_scoring"]) + scorer = get_scoring(scoring) scorer, _ = _check_multimetric_scoring(estimator, scoring=scorer) - if hasattr(estimator, 'evaluate'): - scores = estimator.evaluate(X_test, y_test=y_test, - scorer=scorer, - is_multimetric=True) + if hasattr(estimator, "evaluate"): + scores = estimator.evaluate(X_test, y_test=y_test, scorer=scorer, is_multimetric=True) else: - scores = _score(estimator, X_test, y_test, scorer, - is_multimetric=True) + scores = _score(estimator, X_test, y_test, scorer, is_multimetric=True) # handle output for name, score in scores.items(): scores[name] = [score] df = pd.DataFrame(scores) df = df[sorted(df.columns)] - df.to_csv(path_or_buf=outfile_eval, sep='\t', - header=True, index=False) + df.to_csv(path_or_buf=outfile_eval, sep="\t", header=True, index=False) -if __name__ == '__main__': +if __name__ == "__main__": aparser = argparse.ArgumentParser() aparser.add_argument("-i", "--inputs", dest="inputs", required=True) aparser.add_argument("-e", "--infile_estimator", dest="infile_estimator") @@ -155,6 +164,11 @@ aparser.add_argument("-O", "--outfile_eval", dest="outfile_eval") args = aparser.parse_args() - main(args.inputs, args.infile_estimator, args.outfile_eval, - infile_weights=args.infile_weights, infile1=args.infile1, - infile2=args.infile2) + main( + args.inputs, + args.infile_estimator, + args.outfile_eval, + infile_weights=args.infile_weights, + infile1=args.infile1, + infile2=args.infile2, + ) diff -r 8b47a3c08d97 -r 2ac77e0aec82 keras_deep_learning.py --- a/keras_deep_learning.py Wed Mar 11 17:09:06 2020 +0000 +++ b/keras_deep_learning.py Tue Apr 13 20:42:24 2021 +0000 @@ -1,14 +1,14 @@ import argparse import json +import pickle +import warnings +from ast import literal_eval + import keras import pandas as pd -import pickle import six -import warnings - -from ast import literal_eval -from keras.models import Sequential, Model -from galaxy_ml.utils import try_get_attr, get_search_params, SafeEval +from galaxy_ml.utils import get_search_params, SafeEval, try_get_attr +from keras.models import Model, Sequential safe_eval = SafeEval() @@ -177,11 +177,11 @@ # merge layers if 'merging_layers' in options: idxs = literal_eval(options.pop('merging_layers')) - merging_layers = [all_layers[i-1] for i in idxs] + merging_layers = [all_layers[i - 1] for i in idxs] new_layer = klass(**options)(merging_layers) # non-input layers elif inbound_nodes is not None: - new_layer = klass(**options)(all_layers[inbound_nodes-1]) + new_layer = klass(**options)(all_layers[inbound_nodes - 1]) # input layers else: new_layer = klass(**options) @@ -189,10 +189,10 @@ all_layers.append(new_layer) input_indexes = _handle_shape(config['input_layers']) - input_layers = [all_layers[i-1] for i in input_indexes] + input_layers = [all_layers[i - 1] for i in input_indexes] output_indexes = _handle_shape(config['output_layers']) - output_layers = [all_layers[i-1] for i in output_indexes] + output_layers = [all_layers[i - 1] for i in output_indexes] return Model(inputs=input_layers, outputs=output_layers) @@ -300,8 +300,7 @@ options.update((inputs['mode_selection']['compile_params'] ['optimizer_selection']['optimizer_options'])) - train_metrics = (inputs['mode_selection']['compile_params'] - ['metrics']).split(',') + train_metrics = inputs['mode_selection']['compile_params']['metrics'] if train_metrics[-1] == 'none': train_metrics = train_metrics[:-1] options['metrics'] = train_metrics diff -r 8b47a3c08d97 -r 2ac77e0aec82 keras_train_and_eval.py --- a/keras_train_and_eval.py Wed Mar 11 17:09:06 2020 +0000 +++ b/keras_train_and_eval.py Tue Apr 13 20:42:24 2021 +0000 @@ -1,56 +1,65 @@ import argparse -import joblib import json -import numpy as np import os -import pandas as pd import pickle import warnings from itertools import chain + +import joblib +import numpy as np +import pandas as pd +from galaxy_ml.externals.selene_sdk.utils import compute_score +from galaxy_ml.keras_galaxy_models import _predict_generator +from galaxy_ml.model_validations import train_test_split +from galaxy_ml.utils import ( + clean_params, + get_main_estimator, + get_module, + get_scoring, + load_model, + read_columns, + SafeEval, + try_get_attr, +) from scipy.io import mmread -from sklearn.pipeline import Pipeline from sklearn.metrics.scorer import _check_multimetric_scoring -from sklearn import model_selection +from sklearn.model_selection import _search, _validation from sklearn.model_selection._validation import _score -from sklearn.model_selection import _search, _validation +from sklearn.pipeline import Pipeline from sklearn.utils import indexable, safe_indexing -from galaxy_ml.externals.selene_sdk.utils import compute_score -from galaxy_ml.model_validations import train_test_split -from galaxy_ml.keras_galaxy_models import _predict_generator -from galaxy_ml.utils import (SafeEval, get_scoring, load_model, - read_columns, try_get_attr, get_module, - clean_params, get_main_estimator) +_fit_and_score = try_get_attr("galaxy_ml.model_validations", "_fit_and_score") +setattr(_search, "_fit_and_score", _fit_and_score) +setattr(_validation, "_fit_and_score", _fit_and_score) -_fit_and_score = try_get_attr('galaxy_ml.model_validations', '_fit_and_score') -setattr(_search, '_fit_and_score', _fit_and_score) -setattr(_validation, '_fit_and_score', _fit_and_score) - -N_JOBS = int(os.environ.get('GALAXY_SLOTS', 1)) -CACHE_DIR = os.path.join(os.getcwd(), 'cached') +N_JOBS = int(os.environ.get("GALAXY_SLOTS", 1)) +CACHE_DIR = os.path.join(os.getcwd(), "cached") del os -NON_SEARCHABLE = ('n_jobs', 'pre_dispatch', 'memory', '_path', - 'nthread', 'callbacks') -ALLOWED_CALLBACKS = ('EarlyStopping', 'TerminateOnNaN', 'ReduceLROnPlateau', - 'CSVLogger', 'None') +NON_SEARCHABLE = ("n_jobs", "pre_dispatch", "memory", "_path", "nthread", "callbacks") +ALLOWED_CALLBACKS = ( + "EarlyStopping", + "TerminateOnNaN", + "ReduceLROnPlateau", + "CSVLogger", + "None", +) def _eval_swap_params(params_builder): swap_params = {} - for p in params_builder['param_set']: - swap_value = p['sp_value'].strip() - if swap_value == '': + for p in params_builder["param_set"]: + swap_value = p["sp_value"].strip() + if swap_value == "": continue - param_name = p['sp_name'] + param_name = p["sp_name"] if param_name.lower().endswith(NON_SEARCHABLE): - warnings.warn("Warning: `%s` is not eligible for search and was " - "omitted!" % param_name) + warnings.warn("Warning: `%s` is not eligible for search and was " "omitted!" % param_name) continue - if not swap_value.startswith(':'): + if not swap_value.startswith(":"): safe_eval = SafeEval(load_scipy=True, load_numpy=True) ev = safe_eval(swap_value) else: @@ -77,23 +86,20 @@ else: new_arrays.append(arr) - if kwargs['shuffle'] == 'None': - kwargs['shuffle'] = None + if kwargs["shuffle"] == "None": + kwargs["shuffle"] = None - group_names = kwargs.pop('group_names', None) + group_names = kwargs.pop("group_names", None) if group_names is not None and group_names.strip(): - group_names = [name.strip() for name in - group_names.split(',')] + group_names = [name.strip() for name in group_names.split(",")] new_arrays = indexable(*new_arrays) - groups = kwargs['labels'] + groups = kwargs["labels"] n_samples = new_arrays[0].shape[0] index_arr = np.arange(n_samples) test = index_arr[np.isin(groups, group_names)] train = index_arr[~np.isin(groups, group_names)] - rval = list(chain.from_iterable( - (safe_indexing(a, train), - safe_indexing(a, test)) for a in new_arrays)) + rval = list(chain.from_iterable((safe_indexing(a, train), safe_indexing(a, test)) for a in new_arrays)) else: rval = train_test_split(*new_arrays, **kwargs) @@ -104,7 +110,7 @@ def _evaluate(y_true, pred_probas, scorer, is_multimetric=True): - """ output scores based on input scorer + """output scores based on input scorer Parameters ---------- @@ -118,52 +124,55 @@ """ if y_true.ndim == 1 or y_true.shape[-1] == 1: pred_probas = pred_probas.ravel() - pred_labels = (pred_probas > 0.5).astype('int32') - targets = y_true.ravel().astype('int32') + pred_labels = (pred_probas > 0.5).astype("int32") + targets = y_true.ravel().astype("int32") if not is_multimetric: - preds = pred_labels if scorer.__class__.__name__ == \ - '_PredictScorer' else pred_probas + preds = pred_labels if scorer.__class__.__name__ == "_PredictScorer" else pred_probas score = scorer._score_func(targets, preds, **scorer._kwargs) return score else: scores = {} for name, one_scorer in scorer.items(): - preds = pred_labels if one_scorer.__class__.__name__\ - == '_PredictScorer' else pred_probas - score = one_scorer._score_func(targets, preds, - **one_scorer._kwargs) + preds = pred_labels if one_scorer.__class__.__name__ == "_PredictScorer" else pred_probas + score = one_scorer._score_func(targets, preds, **one_scorer._kwargs) scores[name] = score # TODO: multi-class metrics # multi-label else: - pred_labels = (pred_probas > 0.5).astype('int32') - targets = y_true.astype('int32') + pred_labels = (pred_probas > 0.5).astype("int32") + targets = y_true.astype("int32") if not is_multimetric: - preds = pred_labels if scorer.__class__.__name__ == \ - '_PredictScorer' else pred_probas - score, _ = compute_score(preds, targets, - scorer._score_func) + preds = pred_labels if scorer.__class__.__name__ == "_PredictScorer" else pred_probas + score, _ = compute_score(preds, targets, scorer._score_func) return score else: scores = {} for name, one_scorer in scorer.items(): - preds = pred_labels if one_scorer.__class__.__name__\ - == '_PredictScorer' else pred_probas - score, _ = compute_score(preds, targets, - one_scorer._score_func) + preds = pred_labels if one_scorer.__class__.__name__ == "_PredictScorer" else pred_probas + score, _ = compute_score(preds, targets, one_scorer._score_func) scores[name] = score return scores -def main(inputs, infile_estimator, infile1, infile2, - outfile_result, outfile_object=None, - outfile_weights=None, outfile_y_true=None, - outfile_y_preds=None, groups=None, - ref_seq=None, intervals=None, targets=None, - fasta_path=None): +def main( + inputs, + infile_estimator, + infile1, + infile2, + outfile_result, + outfile_object=None, + outfile_weights=None, + outfile_y_true=None, + outfile_y_preds=None, + groups=None, + ref_seq=None, + intervals=None, + targets=None, + fasta_path=None, +): """ Parameter --------- @@ -209,19 +218,19 @@ fasta_path : str File path to dataset containing fasta file """ - warnings.simplefilter('ignore') + warnings.simplefilter("ignore") - with open(inputs, 'r') as param_handler: + with open(inputs, "r") as param_handler: params = json.load(param_handler) # load estimator - with open(infile_estimator, 'rb') as estimator_handler: + with open(infile_estimator, "rb") as estimator_handler: estimator = load_model(estimator_handler) estimator = clean_params(estimator) # swap hyperparameter - swapping = params['experiment_schemes']['hyperparams_swapping'] + swapping = params["experiment_schemes"]["hyperparams_swapping"] swap_params = _eval_swap_params(swapping) estimator.set_params(**swap_params) @@ -230,38 +239,39 @@ # store read dataframe object loaded_df = {} - input_type = params['input_options']['selected_input'] + input_type = params["input_options"]["selected_input"] # tabular input - if input_type == 'tabular': - header = 'infer' if params['input_options']['header1'] else None - column_option = (params['input_options']['column_selector_options_1'] - ['selected_column_selector_option']) - if column_option in ['by_index_number', 'all_but_by_index_number', - 'by_header_name', 'all_but_by_header_name']: - c = params['input_options']['column_selector_options_1']['col1'] + if input_type == "tabular": + header = "infer" if params["input_options"]["header1"] else None + column_option = params["input_options"]["column_selector_options_1"]["selected_column_selector_option"] + if column_option in [ + "by_index_number", + "all_but_by_index_number", + "by_header_name", + "all_but_by_header_name", + ]: + c = params["input_options"]["column_selector_options_1"]["col1"] else: c = None df_key = infile1 + repr(header) - df = pd.read_csv(infile1, sep='\t', header=header, - parse_dates=True) + df = pd.read_csv(infile1, sep="\t", header=header, parse_dates=True) loaded_df[df_key] = df X = read_columns(df, c=c, c_option=column_option).astype(float) # sparse input - elif input_type == 'sparse': - X = mmread(open(infile1, 'r')) + elif input_type == "sparse": + X = mmread(open(infile1, "r")) # fasta_file input - elif input_type == 'seq_fasta': - pyfaidx = get_module('pyfaidx') + elif input_type == "seq_fasta": + pyfaidx = get_module("pyfaidx") sequences = pyfaidx.Fasta(fasta_path) n_seqs = len(sequences.keys()) X = np.arange(n_seqs)[:, np.newaxis] for param in estimator_params.keys(): - if param.endswith('fasta_path'): - estimator.set_params( - **{param: fasta_path}) + if param.endswith("fasta_path"): + estimator.set_params(**{param: fasta_path}) break else: raise ValueError( @@ -270,25 +280,29 @@ "KerasGBatchClassifier with " "FastaDNABatchGenerator/FastaProteinBatchGenerator " "or having GenomeOneHotEncoder/ProteinOneHotEncoder " - "in pipeline!") + "in pipeline!" + ) - elif input_type == 'refseq_and_interval': + elif input_type == "refseq_and_interval": path_params = { - 'data_batch_generator__ref_genome_path': ref_seq, - 'data_batch_generator__intervals_path': intervals, - 'data_batch_generator__target_path': targets + "data_batch_generator__ref_genome_path": ref_seq, + "data_batch_generator__intervals_path": intervals, + "data_batch_generator__target_path": targets, } estimator.set_params(**path_params) n_intervals = sum(1 for line in open(intervals)) X = np.arange(n_intervals)[:, np.newaxis] # Get target y - header = 'infer' if params['input_options']['header2'] else None - column_option = (params['input_options']['column_selector_options_2'] - ['selected_column_selector_option2']) - if column_option in ['by_index_number', 'all_but_by_index_number', - 'by_header_name', 'all_but_by_header_name']: - c = params['input_options']['column_selector_options_2']['col2'] + header = "infer" if params["input_options"]["header2"] else None + column_option = params["input_options"]["column_selector_options_2"]["selected_column_selector_option2"] + if column_option in [ + "by_index_number", + "all_but_by_index_number", + "by_header_name", + "all_but_by_header_name", + ]: + c = params["input_options"]["column_selector_options_2"]["col2"] else: c = None @@ -296,37 +310,35 @@ if df_key in loaded_df: infile2 = loaded_df[df_key] else: - infile2 = pd.read_csv(infile2, sep='\t', - header=header, parse_dates=True) + infile2 = pd.read_csv(infile2, sep="\t", header=header, parse_dates=True) loaded_df[df_key] = infile2 - y = read_columns( - infile2, - c=c, - c_option=column_option, - sep='\t', - header=header, - parse_dates=True) + y = read_columns(infile2, + c=c, + c_option=column_option, + sep='\t', + header=header, + parse_dates=True) if len(y.shape) == 2 and y.shape[1] == 1: y = y.ravel() - if input_type == 'refseq_and_interval': - estimator.set_params( - data_batch_generator__features=y.ravel().tolist()) + if input_type == "refseq_and_interval": + estimator.set_params(data_batch_generator__features=y.ravel().tolist()) y = None # end y # load groups if groups: - groups_selector = (params['experiment_schemes']['test_split'] - ['split_algos']).pop('groups_selector') + groups_selector = (params["experiment_schemes"]["test_split"]["split_algos"]).pop("groups_selector") - header = 'infer' if groups_selector['header_g'] else None - column_option = \ - (groups_selector['column_selector_options_g'] - ['selected_column_selector_option_g']) - if column_option in ['by_index_number', 'all_but_by_index_number', - 'by_header_name', 'all_but_by_header_name']: - c = groups_selector['column_selector_options_g']['col_g'] + header = "infer" if groups_selector["header_g"] else None + column_option = groups_selector["column_selector_options_g"]["selected_column_selector_option_g"] + if column_option in [ + "by_index_number", + "all_but_by_index_number", + "by_header_name", + "all_but_by_header_name", + ]: + c = groups_selector["column_selector_options_g"]["col_g"] else: c = None @@ -334,13 +346,12 @@ if df_key in loaded_df: groups = loaded_df[df_key] - groups = read_columns( - groups, - c=c, - c_option=column_option, - sep='\t', - header=header, - parse_dates=True) + groups = read_columns(groups, + c=c, + c_option=column_option, + sep='\t', + header=header, + parse_dates=True) groups = groups.ravel() # del loaded_df @@ -349,86 +360,99 @@ # cache iraps_core fits could increase search speed significantly memory = joblib.Memory(location=CACHE_DIR, verbose=0) main_est = get_main_estimator(estimator) - if main_est.__class__.__name__ == 'IRAPSClassifier': + if main_est.__class__.__name__ == "IRAPSClassifier": main_est.set_params(memory=memory) # handle scorer, convert to scorer dict scoring = params['experiment_schemes']['metrics']['scoring'] + if scoring is not None: + # get_scoring() expects secondary_scoring to be a comma separated string (not a list) + # Check if secondary_scoring is specified + secondary_scoring = scoring.get("secondary_scoring", None) + if secondary_scoring is not None: + # If secondary_scoring is specified, convert the list into comman separated string + scoring["secondary_scoring"] = ",".join(scoring["secondary_scoring"]) + scorer = get_scoring(scoring) scorer, _ = _check_multimetric_scoring(estimator, scoring=scorer) # handle test (first) split - test_split_options = (params['experiment_schemes'] - ['test_split']['split_algos']) + test_split_options = params["experiment_schemes"]["test_split"]["split_algos"] - if test_split_options['shuffle'] == 'group': - test_split_options['labels'] = groups - if test_split_options['shuffle'] == 'stratified': + if test_split_options["shuffle"] == "group": + test_split_options["labels"] = groups + if test_split_options["shuffle"] == "stratified": if y is not None: - test_split_options['labels'] = y + test_split_options["labels"] = y else: - raise ValueError("Stratified shuffle split is not " - "applicable on empty target values!") + raise ValueError("Stratified shuffle split is not " "applicable on empty target values!") - X_train, X_test, y_train, y_test, groups_train, groups_test = \ - train_test_split_none(X, y, groups, **test_split_options) + ( + X_train, + X_test, + y_train, + y_test, + groups_train, + _groups_test, + ) = train_test_split_none(X, y, groups, **test_split_options) - exp_scheme = params['experiment_schemes']['selected_exp_scheme'] + exp_scheme = params["experiment_schemes"]["selected_exp_scheme"] # handle validation (second) split - if exp_scheme == 'train_val_test': - val_split_options = (params['experiment_schemes'] - ['val_split']['split_algos']) + if exp_scheme == "train_val_test": + val_split_options = params["experiment_schemes"]["val_split"]["split_algos"] - if val_split_options['shuffle'] == 'group': - val_split_options['labels'] = groups_train - if val_split_options['shuffle'] == 'stratified': + if val_split_options["shuffle"] == "group": + val_split_options["labels"] = groups_train + if val_split_options["shuffle"] == "stratified": if y_train is not None: - val_split_options['labels'] = y_train + val_split_options["labels"] = y_train else: - raise ValueError("Stratified shuffle split is not " - "applicable on empty target values!") + raise ValueError("Stratified shuffle split is not " "applicable on empty target values!") - X_train, X_val, y_train, y_val, groups_train, groups_val = \ - train_test_split_none(X_train, y_train, groups_train, - **val_split_options) + ( + X_train, + X_val, + y_train, + y_val, + groups_train, + _groups_val, + ) = train_test_split_none(X_train, y_train, groups_train, **val_split_options) # train and eval - if hasattr(estimator, 'validation_data'): - if exp_scheme == 'train_val_test': - estimator.fit(X_train, y_train, - validation_data=(X_val, y_val)) + if hasattr(estimator, "validation_data"): + if exp_scheme == "train_val_test": + estimator.fit(X_train, y_train, validation_data=(X_val, y_val)) else: - estimator.fit(X_train, y_train, - validation_data=(X_test, y_test)) + estimator.fit(X_train, y_train, validation_data=(X_test, y_test)) else: estimator.fit(X_train, y_train) - if hasattr(estimator, 'evaluate'): + if hasattr(estimator, "evaluate"): steps = estimator.prediction_steps batch_size = estimator.batch_size - generator = estimator.data_generator_.flow(X_test, y=y_test, - batch_size=batch_size) - predictions, y_true = _predict_generator(estimator.model_, generator, - steps=steps) + generator = estimator.data_generator_.flow(X_test, y=y_test, batch_size=batch_size) + predictions, y_true = _predict_generator(estimator.model_, generator, steps=steps) scores = _evaluate(y_true, predictions, scorer, is_multimetric=True) else: - if hasattr(estimator, 'predict_proba'): + if hasattr(estimator, "predict_proba"): predictions = estimator.predict_proba(X_test) else: predictions = estimator.predict(X_test) y_true = y_test - scores = _score(estimator, X_test, y_test, scorer, - is_multimetric=True) + scores = _score(estimator, X_test, y_test, scorer, is_multimetric=True) if outfile_y_true: try: - pd.DataFrame(y_true).to_csv(outfile_y_true, sep='\t', - index=False) + pd.DataFrame(y_true).to_csv(outfile_y_true, sep="\t", index=False) pd.DataFrame(predictions).astype(np.float32).to_csv( - outfile_y_preds, sep='\t', index=False, - float_format='%g', chunksize=10000) + outfile_y_preds, + sep="\t", + index=False, + float_format="%g", + chunksize=10000, + ) except Exception as e: print("Error in saving predictions: %s" % e) @@ -437,8 +461,7 @@ scores[name] = [score] df = pd.DataFrame(scores) df = df[sorted(df.columns)] - df.to_csv(path_or_buf=outfile_result, sep='\t', - header=True, index=False) + df.to_csv(path_or_buf=outfile_result, sep="\t", header=True, index=False) memory.clear(warn=False) @@ -447,23 +470,22 @@ if isinstance(estimator, Pipeline): main_est = estimator.steps[-1][-1] - if hasattr(main_est, 'model_') \ - and hasattr(main_est, 'save_weights'): + if hasattr(main_est, "model_") and hasattr(main_est, "save_weights"): if outfile_weights: main_est.save_weights(outfile_weights) del main_est.model_ del main_est.fit_params del main_est.model_class_ - del main_est.validation_data - if getattr(main_est, 'data_generator_', None): + if getattr(main_est, "validation_data", None): + del main_est.validation_data + if getattr(main_est, "data_generator_", None): del main_est.data_generator_ - with open(outfile_object, 'wb') as output_handler: - pickle.dump(estimator, output_handler, - pickle.HIGHEST_PROTOCOL) + with open(outfile_object, "wb") as output_handler: + pickle.dump(estimator, output_handler, pickle.HIGHEST_PROTOCOL) -if __name__ == '__main__': +if __name__ == "__main__": aparser = argparse.ArgumentParser() aparser.add_argument("-i", "--inputs", dest="inputs", required=True) aparser.add_argument("-e", "--estimator", dest="infile_estimator") @@ -481,11 +503,19 @@ aparser.add_argument("-f", "--fasta_path", dest="fasta_path") args = aparser.parse_args() - main(args.inputs, args.infile_estimator, args.infile1, args.infile2, - args.outfile_result, outfile_object=args.outfile_object, - outfile_weights=args.outfile_weights, - outfile_y_true=args.outfile_y_true, - outfile_y_preds=args.outfile_y_preds, - groups=args.groups, - ref_seq=args.ref_seq, intervals=args.intervals, - targets=args.targets, fasta_path=args.fasta_path) + main( + args.inputs, + args.infile_estimator, + args.infile1, + args.infile2, + args.outfile_result, + outfile_object=args.outfile_object, + outfile_weights=args.outfile_weights, + outfile_y_true=args.outfile_y_true, + outfile_y_preds=args.outfile_y_preds, + groups=args.groups, + ref_seq=args.ref_seq, + intervals=args.intervals, + targets=args.targets, + fasta_path=args.fasta_path, + ) diff -r 8b47a3c08d97 -r 2ac77e0aec82 main_macros.xml --- a/main_macros.xml Wed Mar 11 17:09:06 2020 +0000 +++ b/main_macros.xml Tue Apr 13 20:42:24 2021 +0000 @@ -1,1952 +1,1940 @@ - 1.0.8.2 + 1.0.8.3 - - - python - Galaxy-ML - - - + + + Galaxy-ML + + + - - - - - + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - -
- -
-
+ +
+ +
+
- - - - - - - - - - + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - + + + - - - + + + - - - - - - - - + + + + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - + + + - - - + + + - - - + + + - - - - - - - + + + + + + + - - - - - - - - + + + + + + + + - - - + + + - - - + + + - - - + + + - - - - + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - - - + + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - - - - - - - + + + + + + + + + + - - - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ + + + + + + + + + + +
+
+ + +
+ + + + + + + + + +
+
- - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + +
+ + + + +
+
+ + +
+ + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + +
+ + + +
+
+ +
+ +
+
+
- - - - - + + +
+ + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - + + +
+ + +
+
+ +
+ + + +
+
+ +
+ +
+
+ +
+ + + + + + +
+
+ +
- - - - - - - - - + + + +
+
+
+ +
+ + +
+
+ +
+ + + +
+
+ +
+ + + + +
- - + +
+ + + + + + + + +
+
+ +
+ + + + + +
+
+ +
+ + + + + + + + + + + +
-
-
- - - - - - - - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - -
-
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - -
- - - - - - - - - - - - - - - - - - - -
-
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - -
- - - - - - - - - - - - - - - - - - - - - - - - -
-
+ +
+ + + + + +
+
- -
- - - - - - - - - - - -
-
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + - -
- - - - - - - - - -
-
+ + + - - - - - - - - - -
- - - - -
-
+ + + + + + + + + + + + + - -
- - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - + + + +
+ + + + + + + + +
+
+ + +
+ +
+
+ + +
+ +
+
+ + +
+ +
+
+ + +
+ +
+
+ + +
+ +
+
+ +
+ +
+
+
- - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - + +
+ + + +
+
- - - - - - - - - - - - - - - - - - - + + + +
+ + + +
+
+
- - -
- - - -
-
- -
- -
-
-
+ + + +
+ + + + + +
+
+
- - -
- - - - - -
-
-
+ + + +
+ + + + + + +
+
+
- - - - - - - - - - - - - - - - - - - - - + + + +
+ + + + + + + + + + + + +
+
+
- - -
- - -
-
- -
- - - -
-
- -
- -
-
- -
- - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - -
-
- -
+ - - - -
-
-
- -
- - -
-
- -
- - - -
-
- -
- - - - -
-
- -
- - - - - - - - -
-
- -
- - - - - -
-
- -
- - - - - - - - - - - -
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - -
-
- - -
- -
-
- - -
- -
-
- - -
- -
-
- - -
- -
-
- - -
- -
-
- -
- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
- - - - -
- - - -
-
-
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - -
- - - - - -
-
-
- - - - -
- - - - - - -
-
-
+ + + + + + + + + + + + + + + + + + + + + + + + - - - -
- - - - - - - + + + + + + + + + - - - - -
-
-
+ - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +
+ + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - -
- - - -
-
+ +
+ + + +
+
- - - - - + + + + + + + + + + + - - - - - - - - + + - -
- - - - - - - - - -
-
+ +
+ + + + + + + + + +
+
- - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + + - + - - - - selected_tasks['selected_task'] == 'load' - - - selected_tasks['selected_task'] == 'train' - - - + + + + selected_tasks['selected_task'] == 'load' + + + selected_tasks['selected_task'] == 'train' + + + - - - - 10.5281/zenodo.15094 - - + + + + 10.5281/zenodo.15094 + + - - - - @article{scikit-learn, - title={Scikit-learn: Machine Learning in {P}ython}, - author={Pedregosa, F. and Varoquaux, G. and Gramfort, A. and Michel, V. + + + + @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} + Cournapeau, D. and Brucher, M. and Perrot, M. and Duchesnay, E.}, journal={Journal of Machine Learning Research}, volume={12}, pages={2825--2830}, year={2011} } - - - - + + + + - - - + + + @Misc{, author = {Eric Jones and Travis Oliphant and Pearu Peterson and others}, title = {{SciPy}: Open source scientific tools for {Python}}, @@ -1954,12 +1942,12 @@ url = "http://www.scipy.org/", note = {[Online; accessed 2016-04-09]} } - - - + + + - - + + @article{DBLP:journals/corr/abs-1711-08477, author = {Ryan J. Urbanowicz and Randal S. Olson and @@ -1977,11 +1965,11 @@ biburl = {https://dblp.org/rec/bib/journals/corr/abs-1711-08477}, bibsource = {dblp computer science bibliography, https://dblp.org} } - - + + - - + + @inproceedings{Chen:2016:XST:2939672.2939785, author = {Chen, Tianqi and Guestrin, Carlos}, title = {{XGBoost}: A Scalable Tree Boosting System}, @@ -1999,11 +1987,11 @@ address = {New York, NY, USA}, keywords = {large-scale machine learning}, } - - + + - - + + @article{JMLR:v18:16-365, author = {Guillaume Lema{{\^i}}tre and Fernando Nogueira and Christos K. Aridas}, title = {Imbalanced-learn: A Python Toolbox to Tackle the Curse of Imbalanced Datasets in Machine Learning}, @@ -2014,22 +2002,14 @@ pages = {1-5}, url = {http://jmlr.org/papers/v18/16-365.html} } - - + + - - - @article{chen2019selene, - title={Selene: a PyTorch-based deep learning library for sequence data}, - author={Chen, Kathleen M and Cofer, Evan M and Zhou, Jian and Troyanskaya, Olga G}, - journal={Nature methods}, - volume={16}, - number={4}, - pages={315}, - year={2019}, - publisher={Nature Publishing Group} + + + @article{chen2019selene, title={Selene: a PyTorch-based deep learning library for sequence data}, author={Chen, Kathleen M and Cofer, Evan M and Zhou, Jian and Troyanskaya, Olga G}, journal={Nature methods}, volume={16}, number={4}, pages={315}, year={2019}, publisher={Nature Publishing Group} } - - + +
diff -r 8b47a3c08d97 -r 2ac77e0aec82 ml_visualization_ex.py --- a/ml_visualization_ex.py Wed Mar 11 17:09:06 2020 +0000 +++ b/ml_visualization_ex.py Tue Apr 13 20:42:24 2021 +0000 @@ -1,37 +1,36 @@ import argparse import json +import os +import warnings + import matplotlib import matplotlib.pyplot as plt import numpy as np -import os import pandas as pd import plotly import plotly.graph_objs as go -import warnings - +from galaxy_ml.utils import load_model, read_columns, SafeEval from keras.models import model_from_json from keras.utils import plot_model from sklearn.feature_selection.base import SelectorMixin -from sklearn.metrics import precision_recall_curve, average_precision_score -from sklearn.metrics import roc_curve, auc, confusion_matrix +from sklearn.metrics import auc, average_precision_score, confusion_matrix, precision_recall_curve, roc_curve from sklearn.pipeline import Pipeline -from galaxy_ml.utils import load_model, read_columns, SafeEval safe_eval = SafeEval() # plotly default colors default_colors = [ - '#1f77b4', # muted blue - '#ff7f0e', # safety orange - '#2ca02c', # cooked asparagus green - '#d62728', # brick red - '#9467bd', # muted purple - '#8c564b', # chestnut brown - '#e377c2', # raspberry yogurt pink - '#7f7f7f', # middle gray - '#bcbd22', # curry yellow-green - '#17becf' # blue-teal + "#1f77b4", # muted blue + "#ff7f0e", # safety orange + "#2ca02c", # cooked asparagus green + "#d62728", # brick red + "#9467bd", # muted purple + "#8c564b", # chestnut brown + "#e377c2", # raspberry yogurt pink + "#7f7f7f", # middle gray + "#bcbd22", # curry yellow-green + "#17becf", # blue-teal ] @@ -52,46 +51,31 @@ y_true = df1.iloc[:, idx].values y_score = df2.iloc[:, idx].values - precision, recall, _ = precision_recall_curve( - y_true, y_score, pos_label=pos_label) - ap = average_precision_score( - y_true, y_score, pos_label=pos_label or 1) + precision, recall, _ = precision_recall_curve(y_true, y_score, pos_label=pos_label) + ap = average_precision_score(y_true, y_score, pos_label=pos_label or 1) trace = go.Scatter( x=recall, y=precision, - mode='lines', - marker=dict( - color=default_colors[idx % len(default_colors)] - ), - name='%s (area = %.3f)' % (idx, ap) + mode="lines", + marker=dict(color=default_colors[idx % len(default_colors)]), + name="%s (area = %.3f)" % (idx, ap), ) data.append(trace) layout = go.Layout( - xaxis=dict( - title='Recall', - linecolor='lightslategray', - linewidth=1 - ), - yaxis=dict( - title='Precision', - linecolor='lightslategray', - linewidth=1 - ), + xaxis=dict(title="Recall", linecolor="lightslategray", linewidth=1), + yaxis=dict(title="Precision", linecolor="lightslategray", linewidth=1), title=dict( - text=title or 'Precision-Recall Curve', + text=title or "Precision-Recall Curve", x=0.5, y=0.92, - xanchor='center', - yanchor='top' + xanchor="center", + yanchor="top", ), - font=dict( - family="sans-serif", - size=11 - ), + font=dict(family="sans-serif", size=11), # control backgroud colors - plot_bgcolor='rgba(255,255,255,0)' + plot_bgcolor="rgba(255,255,255,0)", ) """ legend=dict( @@ -112,45 +96,47 @@ plotly.offline.plot(fig, filename="output.html", auto_open=False) # to be discovered by `from_work_dir` - os.rename('output.html', 'output') + os.rename("output.html", "output") def visualize_pr_curve_matplotlib(df1, df2, pos_label, title=None): - """visualize pr-curve using matplotlib and output svg image - """ + """visualize pr-curve using matplotlib and output svg image""" backend = matplotlib.get_backend() if "inline" not in backend: matplotlib.use("SVG") - plt.style.use('seaborn-colorblind') + plt.style.use("seaborn-colorblind") plt.figure() for idx in range(df1.shape[1]): y_true = df1.iloc[:, idx].values y_score = df2.iloc[:, idx].values - precision, recall, _ = precision_recall_curve( - y_true, y_score, pos_label=pos_label) - ap = average_precision_score( - y_true, y_score, pos_label=pos_label or 1) + precision, recall, _ = precision_recall_curve(y_true, y_score, pos_label=pos_label) + ap = average_precision_score(y_true, y_score, pos_label=pos_label or 1) - plt.step(recall, precision, 'r-', color="black", alpha=0.3, - lw=1, where="post", label='%s (area = %.3f)' % (idx, ap)) + plt.step( + recall, + precision, + "r-", + color="black", + alpha=0.3, + lw=1, + where="post", + label="%s (area = %.3f)" % (idx, ap), + ) plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) - plt.xlabel('Recall') - plt.ylabel('Precision') - title = title or 'Precision-Recall Curve' + plt.xlabel("Recall") + plt.ylabel("Precision") + title = title or "Precision-Recall Curve" plt.title(title) folder = os.getcwd() plt.savefig(os.path.join(folder, "output.svg"), format="svg") - os.rename(os.path.join(folder, "output.svg"), - os.path.join(folder, "output")) + os.rename(os.path.join(folder, "output.svg"), os.path.join(folder, "output")) -def visualize_roc_curve_plotly(df1, df2, pos_label, - drop_intermediate=True, - title=None): +def visualize_roc_curve_plotly(df1, df2, pos_label, drop_intermediate=True, title=None): """output roc-curve in html using plotly df1 : pandas.DataFrame @@ -169,45 +155,31 @@ y_true = df1.iloc[:, idx].values y_score = df2.iloc[:, idx].values - fpr, tpr, _ = roc_curve(y_true, y_score, pos_label=pos_label, - drop_intermediate=drop_intermediate) + fpr, tpr, _ = roc_curve(y_true, y_score, pos_label=pos_label, drop_intermediate=drop_intermediate) roc_auc = auc(fpr, tpr) trace = go.Scatter( x=fpr, y=tpr, - mode='lines', - marker=dict( - color=default_colors[idx % len(default_colors)] - ), - name='%s (area = %.3f)' % (idx, roc_auc) + mode="lines", + marker=dict(color=default_colors[idx % len(default_colors)]), + name="%s (area = %.3f)" % (idx, roc_auc), ) data.append(trace) layout = go.Layout( - xaxis=dict( - title='False Positive Rate', - linecolor='lightslategray', - linewidth=1 - ), - yaxis=dict( - title='True Positive Rate', - linecolor='lightslategray', - linewidth=1 - ), + xaxis=dict(title="False Positive Rate", linecolor="lightslategray", linewidth=1), + yaxis=dict(title="True Positive Rate", linecolor="lightslategray", linewidth=1), title=dict( - text=title or 'Receiver Operating Characteristic (ROC) Curve', + text=title or "Receiver Operating Characteristic (ROC) Curve", x=0.5, y=0.92, - xanchor='center', - yanchor='top' + xanchor="center", + yanchor="top", ), - font=dict( - family="sans-serif", - size=11 - ), + font=dict(family="sans-serif", size=11), # control backgroud colors - plot_bgcolor='rgba(255,255,255,0)' + plot_bgcolor="rgba(255,255,255,0)", ) """ # legend=dict( @@ -229,66 +201,84 @@ plotly.offline.plot(fig, filename="output.html", auto_open=False) # to be discovered by `from_work_dir` - os.rename('output.html', 'output') + os.rename("output.html", "output") -def visualize_roc_curve_matplotlib(df1, df2, pos_label, - drop_intermediate=True, - title=None): - """visualize roc-curve using matplotlib and output svg image - """ +def visualize_roc_curve_matplotlib(df1, df2, pos_label, drop_intermediate=True, title=None): + """visualize roc-curve using matplotlib and output svg image""" backend = matplotlib.get_backend() if "inline" not in backend: matplotlib.use("SVG") - plt.style.use('seaborn-colorblind') + plt.style.use("seaborn-colorblind") plt.figure() for idx in range(df1.shape[1]): y_true = df1.iloc[:, idx].values y_score = df2.iloc[:, idx].values - fpr, tpr, _ = roc_curve(y_true, y_score, pos_label=pos_label, - drop_intermediate=drop_intermediate) + fpr, tpr, _ = roc_curve(y_true, y_score, pos_label=pos_label, drop_intermediate=drop_intermediate) roc_auc = auc(fpr, tpr) - plt.step(fpr, tpr, 'r-', color="black", alpha=0.3, lw=1, - where="post", label='%s (area = %.3f)' % (idx, roc_auc)) + plt.step( + fpr, + tpr, + "r-", + color="black", + alpha=0.3, + lw=1, + where="post", + label="%s (area = %.3f)" % (idx, roc_auc), + ) plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) - plt.xlabel('False Positive Rate') - plt.ylabel('True Positive Rate') - title = title or 'Receiver Operating Characteristic (ROC) Curve' + plt.xlabel("False Positive Rate") + plt.ylabel("True Positive Rate") + title = title or "Receiver Operating Characteristic (ROC) Curve" plt.title(title) folder = os.getcwd() plt.savefig(os.path.join(folder, "output.svg"), format="svg") - os.rename(os.path.join(folder, "output.svg"), - os.path.join(folder, "output")) + os.rename(os.path.join(folder, "output.svg"), os.path.join(folder, "output")) def get_dataframe(file_path, plot_selection, header_name, column_name): - header = 'infer' if plot_selection[header_name] else None + header = "infer" if plot_selection[header_name] else None column_option = plot_selection[column_name]["selected_column_selector_option"] - if column_option in ["by_index_number", "all_but_by_index_number", "by_header_name", "all_but_by_header_name"]: + if column_option in [ + "by_index_number", + "all_but_by_index_number", + "by_header_name", + "all_but_by_header_name", + ]: col = plot_selection[column_name]["col1"] else: col = None _, input_df = read_columns(file_path, c=col, - c_option=column_option, - return_df=True, - sep='\t', header=header, - parse_dates=True) + c_option=column_option, + return_df=True, + sep='\t', header=header, + parse_dates=True) return input_df -def main(inputs, infile_estimator=None, infile1=None, - infile2=None, outfile_result=None, - outfile_object=None, groups=None, - ref_seq=None, intervals=None, - targets=None, fasta_path=None, - model_config=None, true_labels=None, - predicted_labels=None, plot_color=None, - title=None): +def main( + inputs, + infile_estimator=None, + infile1=None, + infile2=None, + outfile_result=None, + outfile_object=None, + groups=None, + ref_seq=None, + intervals=None, + targets=None, + fasta_path=None, + model_config=None, + true_labels=None, + predicted_labels=None, + plot_color=None, + title=None, +): """ Parameter --------- @@ -341,34 +331,39 @@ title : str, default is None Title of the confusion matrix heatmap """ - warnings.simplefilter('ignore') + warnings.simplefilter("ignore") - with open(inputs, 'r') as param_handler: + with open(inputs, "r") as param_handler: params = json.load(param_handler) - title = params['plotting_selection']['title'].strip() - plot_type = params['plotting_selection']['plot_type'] - plot_format = params['plotting_selection']['plot_format'] + title = params["plotting_selection"]["title"].strip() + plot_type = params["plotting_selection"]["plot_type"] + plot_format = params["plotting_selection"]["plot_format"] - if plot_type == 'feature_importances': - with open(infile_estimator, 'rb') as estimator_handler: + if plot_type == "feature_importances": + with open(infile_estimator, "rb") as estimator_handler: estimator = load_model(estimator_handler) - column_option = (params['plotting_selection'] - ['column_selector_options'] - ['selected_column_selector_option']) - if column_option in ['by_index_number', 'all_but_by_index_number', - 'by_header_name', 'all_but_by_header_name']: - c = (params['plotting_selection'] - ['column_selector_options']['col1']) + column_option = params["plotting_selection"]["column_selector_options"]["selected_column_selector_option"] + if column_option in [ + "by_index_number", + "all_but_by_index_number", + "by_header_name", + "all_but_by_header_name", + ]: + c = params["plotting_selection"]["column_selector_options"]["col1"] else: c = None - _, input_df = read_columns(infile1, c=c, - c_option=column_option, - return_df=True, - sep='\t', header='infer', - parse_dates=True) + _, input_df = read_columns( + infile1, + c=c, + c_option=column_option, + return_df=True, + sep="\t", + header="infer", + parse_dates=True, + ) feature_names = input_df.columns.values @@ -379,16 +374,14 @@ feature_names = feature_names[mask] estimator = estimator.steps[-1][-1] - if hasattr(estimator, 'coef_'): + if hasattr(estimator, "coef_"): coefs = estimator.coef_ else: - coefs = getattr(estimator, 'feature_importances_', None) + coefs = getattr(estimator, "feature_importances_", None) if coefs is None: - raise RuntimeError('The classifier does not expose ' - '"coef_" or "feature_importances_" ' - 'attributes') + raise RuntimeError("The classifier does not expose " '"coef_" or "feature_importances_" ' "attributes") - threshold = params['plotting_selection']['threshold'] + threshold = params["plotting_selection"]["threshold"] if threshold is not None: mask = (coefs > threshold) | (coefs < -threshold) coefs = coefs[mask] @@ -397,80 +390,74 @@ # sort indices = np.argsort(coefs)[::-1] - trace = go.Bar(x=feature_names[indices], - y=coefs[indices]) + trace = go.Bar(x=feature_names[indices], y=coefs[indices]) layout = go.Layout(title=title or "Feature Importances") fig = go.Figure(data=[trace], layout=layout) - plotly.offline.plot(fig, filename="output.html", - auto_open=False) + plotly.offline.plot(fig, filename="output.html", auto_open=False) # to be discovered by `from_work_dir` - os.rename('output.html', 'output') + os.rename("output.html", "output") return 0 - elif plot_type in ('pr_curve', 'roc_curve'): - df1 = pd.read_csv(infile1, sep='\t', header='infer') - df2 = pd.read_csv(infile2, sep='\t', header='infer').astype(np.float32) + elif plot_type in ("pr_curve", "roc_curve"): + df1 = pd.read_csv(infile1, sep="\t", header="infer") + df2 = pd.read_csv(infile2, sep="\t", header="infer").astype(np.float32) - minimum = params['plotting_selection']['report_minimum_n_positives'] + minimum = params["plotting_selection"]["report_minimum_n_positives"] # filter out columns whose n_positives is beblow the threhold if minimum: mask = df1.sum(axis=0) >= minimum df1 = df1.loc[:, mask] df2 = df2.loc[:, mask] - pos_label = params['plotting_selection']['pos_label'].strip() \ - or None + pos_label = params["plotting_selection"]["pos_label"].strip() or None - if plot_type == 'pr_curve': - if plot_format == 'plotly_html': + if plot_type == "pr_curve": + if plot_format == "plotly_html": visualize_pr_curve_plotly(df1, df2, pos_label, title=title) else: visualize_pr_curve_matplotlib(df1, df2, pos_label, title) - else: # 'roc_curve' - drop_intermediate = (params['plotting_selection'] - ['drop_intermediate']) - if plot_format == 'plotly_html': - visualize_roc_curve_plotly(df1, df2, pos_label, - drop_intermediate=drop_intermediate, - title=title) + else: # 'roc_curve' + drop_intermediate = params["plotting_selection"]["drop_intermediate"] + if plot_format == "plotly_html": + visualize_roc_curve_plotly( + df1, + df2, + pos_label, + drop_intermediate=drop_intermediate, + title=title, + ) else: visualize_roc_curve_matplotlib( - df1, df2, pos_label, + df1, + df2, + pos_label, drop_intermediate=drop_intermediate, - title=title) + title=title, + ) return 0 - elif plot_type == 'rfecv_gridscores': - input_df = pd.read_csv(infile1, sep='\t', header='infer') + elif plot_type == "rfecv_gridscores": + input_df = pd.read_csv(infile1, sep="\t", header="infer") scores = input_df.iloc[:, 0] - steps = params['plotting_selection']['steps'].strip() + steps = params["plotting_selection"]["steps"].strip() steps = safe_eval(steps) data = go.Scatter( x=list(range(len(scores))), y=scores, text=[str(_) for _ in steps] if steps else None, - mode='lines' + mode="lines", ) layout = go.Layout( xaxis=dict(title="Number of features selected"), yaxis=dict(title="Cross validation score"), - title=dict( - text=title or None, - x=0.5, - y=0.92, - xanchor='center', - yanchor='top' - ), - font=dict( - family="sans-serif", - size=11 - ), + title=dict(text=title or None, x=0.5, y=0.92, xanchor="center", yanchor="top"), + font=dict(family="sans-serif", size=11), # control backgroud colors - plot_bgcolor='rgba(255,255,255,0)' + plot_bgcolor="rgba(255,255,255,0)", ) """ # legend=dict( @@ -489,55 +476,43 @@ """ fig = go.Figure(data=[data], layout=layout) - plotly.offline.plot(fig, filename="output.html", - auto_open=False) + plotly.offline.plot(fig, filename="output.html", auto_open=False) # to be discovered by `from_work_dir` - os.rename('output.html', 'output') + os.rename("output.html", "output") return 0 - elif plot_type == 'learning_curve': - input_df = pd.read_csv(infile1, sep='\t', header='infer') - plot_std_err = params['plotting_selection']['plot_std_err'] + elif plot_type == "learning_curve": + input_df = pd.read_csv(infile1, sep="\t", header="infer") + plot_std_err = params["plotting_selection"]["plot_std_err"] data1 = go.Scatter( - x=input_df['train_sizes_abs'], - y=input_df['mean_train_scores'], - error_y=dict( - array=input_df['std_train_scores'] - ) if plot_std_err else None, - mode='lines', + x=input_df["train_sizes_abs"], + y=input_df["mean_train_scores"], + error_y=dict(array=input_df["std_train_scores"]) if plot_std_err else None, + mode="lines", name="Train Scores", ) data2 = go.Scatter( - x=input_df['train_sizes_abs'], - y=input_df['mean_test_scores'], - error_y=dict( - array=input_df['std_test_scores'] - ) if plot_std_err else None, - mode='lines', + x=input_df["train_sizes_abs"], + y=input_df["mean_test_scores"], + error_y=dict(array=input_df["std_test_scores"]) if plot_std_err else None, + mode="lines", name="Test Scores", ) layout = dict( - xaxis=dict( - title='No. of samples' - ), - yaxis=dict( - title='Performance Score' - ), + xaxis=dict(title="No. of samples"), + yaxis=dict(title="Performance Score"), # modify these configurations to customize image title=dict( - text=title or 'Learning Curve', + text=title or "Learning Curve", x=0.5, y=0.92, - xanchor='center', - yanchor='top' + xanchor="center", + yanchor="top", ), - font=dict( - family="sans-serif", - size=11 - ), + font=dict(family="sans-serif", size=11), # control backgroud colors - plot_bgcolor='rgba(255,255,255,0)' + plot_bgcolor="rgba(255,255,255,0)", ) """ # legend=dict( @@ -556,27 +531,26 @@ """ fig = go.Figure(data=[data1, data2], layout=layout) - plotly.offline.plot(fig, filename="output.html", - auto_open=False) + plotly.offline.plot(fig, filename="output.html", auto_open=False) # to be discovered by `from_work_dir` - os.rename('output.html', 'output') + os.rename("output.html", "output") return 0 - elif plot_type == 'keras_plot_model': - with open(model_config, 'r') as f: + elif plot_type == "keras_plot_model": + with open(model_config, "r") as f: model_str = f.read() model = model_from_json(model_str) plot_model(model, to_file="output.png") - os.rename('output.png', 'output') + os.rename("output.png", "output") return 0 - elif plot_type == 'classification_confusion_matrix': + elif plot_type == "classification_confusion_matrix": plot_selection = params["plotting_selection"] input_true = get_dataframe(true_labels, plot_selection, "header_true", "column_selector_options_true") - header_predicted = 'infer' if plot_selection["header_predicted"] else None - input_predicted = pd.read_csv(predicted_labels, sep='\t', parse_dates=True, header=header_predicted) + header_predicted = "infer" if plot_selection["header_predicted"] else None + input_predicted = pd.read_csv(predicted_labels, sep="\t", parse_dates=True, header=header_predicted) true_classes = input_true.iloc[:, -1].copy() predicted_classes = input_predicted.iloc[:, -1].copy() axis_labels = list(set(true_classes)) @@ -586,15 +560,15 @@ for i in range(len(c_matrix)): for j in range(len(c_matrix)): ax.text(j, i, c_matrix[i, j], ha="center", va="center", color="k") - ax.set_ylabel('True class labels') - ax.set_xlabel('Predicted class labels') + ax.set_ylabel("True class labels") + ax.set_xlabel("Predicted class labels") ax.set_title(title) ax.set_xticks(axis_labels) ax.set_yticks(axis_labels) fig.colorbar(im, ax=ax) fig.tight_layout() plt.savefig("output.png", dpi=125) - os.rename('output.png', 'output') + os.rename("output.png", "output") return 0 @@ -603,7 +577,7 @@ # fig.write_image("image.pdf", format='pdf', width=340*2, height=226*2) -if __name__ == '__main__': +if __name__ == "__main__": aparser = argparse.ArgumentParser() aparser.add_argument("-i", "--inputs", dest="inputs", required=True) aparser.add_argument("-e", "--estimator", dest="infile_estimator") @@ -623,11 +597,21 @@ aparser.add_argument("-pt", "--title", dest="title") args = aparser.parse_args() - main(args.inputs, args.infile_estimator, args.infile1, args.infile2, - args.outfile_result, outfile_object=args.outfile_object, - groups=args.groups, ref_seq=args.ref_seq, intervals=args.intervals, - targets=args.targets, fasta_path=args.fasta_path, - model_config=args.model_config, true_labels=args.true_labels, - predicted_labels=args.predicted_labels, - plot_color=args.plot_color, - title=args.title) + main( + args.inputs, + args.infile_estimator, + args.infile1, + args.infile2, + args.outfile_result, + outfile_object=args.outfile_object, + groups=args.groups, + ref_seq=args.ref_seq, + intervals=args.intervals, + targets=args.targets, + fasta_path=args.fasta_path, + model_config=args.model_config, + true_labels=args.true_labels, + predicted_labels=args.predicted_labels, + plot_color=args.plot_color, + title=args.title, + ) diff -r 8b47a3c08d97 -r 2ac77e0aec82 model_prediction.py --- a/model_prediction.py Wed Mar 11 17:09:06 2020 +0000 +++ b/model_prediction.py Tue Apr 13 20:42:24 2021 +0000 @@ -1,23 +1,26 @@ import argparse import json +import warnings + import numpy as np import pandas as pd -import warnings - +from galaxy_ml.utils import get_module, load_model, read_columns, try_get_attr from scipy.io import mmread from sklearn.pipeline import Pipeline -from galaxy_ml.utils import (load_model, read_columns, - get_module, try_get_attr) +N_JOBS = int(__import__("os").environ.get("GALAXY_SLOTS", 1)) -N_JOBS = int(__import__('os').environ.get('GALAXY_SLOTS', 1)) - - -def main(inputs, infile_estimator, outfile_predict, - infile_weights=None, infile1=None, - fasta_path=None, ref_seq=None, - vcf_path=None): +def main( + inputs, + infile_estimator, + outfile_predict, + infile_weights=None, + infile1=None, + fasta_path=None, + ref_seq=None, + vcf_path=None, +): """ Parameter --------- @@ -45,96 +48,94 @@ vcf_path : str File path to dataset containing variants info. """ - warnings.filterwarnings('ignore') + warnings.filterwarnings("ignore") - with open(inputs, 'r') as param_handler: + with open(inputs, "r") as param_handler: params = json.load(param_handler) # load model - with open(infile_estimator, 'rb') as est_handler: + with open(infile_estimator, "rb") as est_handler: estimator = load_model(est_handler) main_est = estimator if isinstance(estimator, Pipeline): main_est = estimator.steps[-1][-1] - if hasattr(main_est, 'config') and hasattr(main_est, 'load_weights'): - if not infile_weights or infile_weights == 'None': - raise ValueError("The selected model skeleton asks for weights, " - "but dataset for weights wan not selected!") + if hasattr(main_est, "config") and hasattr(main_est, "load_weights"): + if not infile_weights or infile_weights == "None": + raise ValueError( + "The selected model skeleton asks for weights, " "but dataset for weights wan not selected!" + ) main_est.load_weights(infile_weights) # handle data input - input_type = params['input_options']['selected_input'] + input_type = params["input_options"]["selected_input"] # tabular input - if input_type == 'tabular': - header = 'infer' if params['input_options']['header1'] else None - column_option = (params['input_options'] - ['column_selector_options_1'] - ['selected_column_selector_option']) - if column_option in ['by_index_number', 'all_but_by_index_number', - 'by_header_name', 'all_but_by_header_name']: - c = params['input_options']['column_selector_options_1']['col1'] + if input_type == "tabular": + header = "infer" if params["input_options"]["header1"] else None + column_option = params["input_options"]["column_selector_options_1"]["selected_column_selector_option"] + if column_option in [ + "by_index_number", + "all_but_by_index_number", + "by_header_name", + "all_but_by_header_name", + ]: + c = params["input_options"]["column_selector_options_1"]["col1"] else: c = None - df = pd.read_csv(infile1, sep='\t', header=header, parse_dates=True) + df = pd.read_csv(infile1, sep="\t", header=header, parse_dates=True) X = read_columns(df, c=c, c_option=column_option).astype(float) - if params['method'] == 'predict': + if params["method"] == "predict": preds = estimator.predict(X) else: preds = estimator.predict_proba(X) # sparse input - elif input_type == 'sparse': - X = mmread(open(infile1, 'r')) - if params['method'] == 'predict': + elif input_type == "sparse": + X = mmread(open(infile1, "r")) + if params["method"] == "predict": preds = estimator.predict(X) else: preds = estimator.predict_proba(X) # fasta input - elif input_type == 'seq_fasta': - if not hasattr(estimator, 'data_batch_generator'): + elif input_type == "seq_fasta": + if not hasattr(estimator, "data_batch_generator"): raise ValueError( "To do prediction on sequences in fasta input, " "the estimator must be a `KerasGBatchClassifier`" - "equipped with data_batch_generator!") - pyfaidx = get_module('pyfaidx') + "equipped with data_batch_generator!" + ) + pyfaidx = get_module("pyfaidx") sequences = pyfaidx.Fasta(fasta_path) n_seqs = len(sequences.keys()) X = np.arange(n_seqs)[:, np.newaxis] seq_length = estimator.data_batch_generator.seq_length - batch_size = getattr(estimator, 'batch_size', 32) + batch_size = getattr(estimator, "batch_size", 32) steps = (n_seqs + batch_size - 1) // batch_size - seq_type = params['input_options']['seq_type'] - klass = try_get_attr( - 'galaxy_ml.preprocessors', seq_type) + seq_type = params["input_options"]["seq_type"] + klass = try_get_attr("galaxy_ml.preprocessors", seq_type) - pred_data_generator = klass( - fasta_path, seq_length=seq_length) + pred_data_generator = klass(fasta_path, seq_length=seq_length) - if params['method'] == 'predict': - preds = estimator.predict( - X, data_generator=pred_data_generator, steps=steps) + if params["method"] == "predict": + preds = estimator.predict(X, data_generator=pred_data_generator, steps=steps) else: - preds = estimator.predict_proba( - X, data_generator=pred_data_generator, steps=steps) + preds = estimator.predict_proba(X, data_generator=pred_data_generator, steps=steps) # vcf input - elif input_type == 'variant_effect': - klass = try_get_attr('galaxy_ml.preprocessors', - 'GenomicVariantBatchGenerator') + elif input_type == "variant_effect": + klass = try_get_attr("galaxy_ml.preprocessors", "GenomicVariantBatchGenerator") - options = params['input_options'] - options.pop('selected_input') - if options['blacklist_regions'] == 'none': - options['blacklist_regions'] = None + options = params["input_options"] + options.pop("selected_input") + if options["blacklist_regions"] == "none": + options["blacklist_regions"] = None - pred_data_generator = klass( - ref_genome_path=ref_seq, vcf_path=vcf_path, **options) + pred_data_generator = klass(ref_genome_path=ref_seq, vcf_path=vcf_path, **options) pred_data_generator.set_processing_attrs() @@ -143,9 +144,8 @@ # predict 1600 sample at once then write to file gen_flow = pred_data_generator.flow(batch_size=1600) - file_writer = open(outfile_predict, 'w') - header_row = '\t'.join(['chrom', 'pos', 'name', 'ref', - 'alt', 'strand']) + file_writer = open(outfile_predict, "w") + header_row = "\t".join(["chrom", "pos", "name", "ref", "alt", "strand"]) file_writer.write(header_row) header_done = False @@ -155,23 +155,24 @@ try: while steps_done < len(gen_flow): index_array = next(gen_flow.index_generator) - batch_X = gen_flow._get_batches_of_transformed_samples( - index_array) + batch_X = gen_flow._get_batches_of_transformed_samples(index_array) - if params['method'] == 'predict': + if params["method"] == "predict": batch_preds = estimator.predict( batch_X, # The presence of `pred_data_generator` below is to # override model carrying data_generator if there # is any. - data_generator=pred_data_generator) + data_generator=pred_data_generator, + ) else: batch_preds = estimator.predict_proba( batch_X, # The presence of `pred_data_generator` below is to # override model carrying data_generator if there # is any. - data_generator=pred_data_generator) + data_generator=pred_data_generator, + ) if batch_preds.ndim == 1: batch_preds = batch_preds[:, np.newaxis] @@ -181,12 +182,12 @@ if not header_done: heads = np.arange(batch_preds.shape[-1]).astype(str) - heads_str = '\t'.join(heads) + heads_str = "\t".join(heads) file_writer.write("\t%s\n" % heads_str) header_done = True for row in batch_out: - row_str = '\t'.join(row) + row_str = "\t".join(row) file_writer.write("%s\n" % row_str) steps_done += 1 @@ -200,14 +201,14 @@ # output if len(preds.shape) == 1: - rval = pd.DataFrame(preds, columns=['Predicted']) + rval = pd.DataFrame(preds, columns=["Predicted"]) else: rval = pd.DataFrame(preds) - rval.to_csv(outfile_predict, sep='\t', header=True, index=False) + rval.to_csv(outfile_predict, sep="\t", header=True, index=False) -if __name__ == '__main__': +if __name__ == "__main__": aparser = argparse.ArgumentParser() aparser.add_argument("-i", "--inputs", dest="inputs", required=True) aparser.add_argument("-e", "--infile_estimator", dest="infile_estimator") @@ -219,7 +220,13 @@ aparser.add_argument("-v", "--vcf_path", dest="vcf_path") args = aparser.parse_args() - main(args.inputs, args.infile_estimator, args.outfile_predict, - infile_weights=args.infile_weights, infile1=args.infile1, - fasta_path=args.fasta_path, ref_seq=args.ref_seq, - vcf_path=args.vcf_path) + main( + args.inputs, + args.infile_estimator, + args.outfile_predict, + infile_weights=args.infile_weights, + infile1=args.infile1, + fasta_path=args.fasta_path, + ref_seq=args.ref_seq, + vcf_path=args.vcf_path, + ) diff -r 8b47a3c08d97 -r 2ac77e0aec82 pca.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pca.py Tue Apr 13 20:42:24 2021 +0000 @@ -0,0 +1,186 @@ +import argparse + +import numpy as np +from galaxy_ml.utils import read_columns +from sklearn.decomposition import IncrementalPCA, KernelPCA, PCA + + +def main(): + parser = argparse.ArgumentParser(description="RDKit screen") + parser.add_argument("-i", "--infile", help="Input file") + parser.add_argument( + "--header", action="store_true", help="Include the header row or skip it" + ) + parser.add_argument( + "-c", + "--columns", + type=str.lower, + default="all", + choices=[ + "by_index_number", + "all_but_by_index_number", + "by_header_name", + "all_but_by_header_name", + "all_columns", + ], + help="Choose to select all columns, or exclude/include some", + ) + parser.add_argument( + "-ci", + "--column_indices", + type=str.lower, + help="Choose to select all columns, or exclude/include some", + ) + parser.add_argument( + "-n", + "--number", + nargs="?", + type=int, + default=None, + help="Number of components to keep. If not set, all components are kept", + ) + parser.add_argument("--whiten", action="store_true", help="Whiten the components") + parser.add_argument( + "-t", + "--pca_type", + type=str.lower, + default="classical", + choices=["classical", "incremental", "kernel"], + help="Choose which flavour of PCA to use", + ) + parser.add_argument( + "-s", + "--svd_solver", + type=str.lower, + default="auto", + choices=["auto", "full", "arpack", "randomized"], + help="Choose the type of svd solver.", + ) + parser.add_argument( + "-b", + "--batch_size", + nargs="?", + type=int, + default=None, + help="The number of samples to use for each batch", + ) + parser.add_argument( + "-k", + "--kernel", + type=str.lower, + default="linear", + choices=["linear", "poly", "rbf", "sigmoid", "cosine", "precomputed"], + help="Choose the type of kernel.", + ) + parser.add_argument( + "-g", + "--gamma", + nargs="?", + type=float, + default=None, + help="Kernel coefficient for rbf, poly and sigmoid kernels. Ignored by other kernels", + ) + parser.add_argument( + "-tol", + "--tolerance", + type=float, + default=0.0, + help="Convergence tolerance for arpack. If 0, optimal value will be chosen by arpack", + ) + parser.add_argument( + "-mi", + "--max_iter", + nargs="?", + type=int, + default=None, + help="Maximum number of iterations for arpack", + ) + parser.add_argument( + "-d", + "--degree", + type=int, + default=3, + help="Degree for poly kernels. Ignored by other kernels", + ) + parser.add_argument( + "-cf", + "--coef0", + type=float, + default=1.0, + help="Independent term in poly and sigmoid kernels", + ) + parser.add_argument( + "-e", + "--eigen_solver", + type=str.lower, + default="auto", + choices=["auto", "dense", "arpack"], + help="Choose the type of eigen solver.", + ) + parser.add_argument( + "-o", "--outfile", help="Base name for output file (no extension)." + ) + args = parser.parse_args() + + usecols = None + pca_params = {} + + if args.columns == "by_index_number" or args.columns == "all_but_by_index_number": + usecols = [int(i) for i in args.column_indices.split(",")] + elif args.columns == "by_header_name" or args.columns == "all_but_by_header_name": + usecols = args.column_indices + + header = "infer" if args.header else None + + pca_input = read_columns( + f=args.infile, + c=usecols, + c_option=args.columns, + sep="\t", + header=header, + parse_dates=True, + encoding=None, + index_col=None, + ) + + pca_params.update({"n_components": args.number}) + + if args.pca_type == "classical": + pca_params.update({"svd_solver": args.svd_solver, "whiten": args.whiten}) + if args.svd_solver == "arpack": + pca_params.update({"tol": args.tolerance}) + pca = PCA() + + elif args.pca_type == "incremental": + pca_params.update({"batch_size": args.batch_size, "whiten": args.whiten}) + pca = IncrementalPCA() + + elif args.pca_type == "kernel": + pca_params.update( + { + "kernel": args.kernel, + "eigen_solver": args.eigen_solver, + "gamma": args.gamma, + } + ) + + if args.kernel == "poly": + pca_params.update({"degree": args.degree, "coef0": args.coef0}) + elif args.kernel == "sigmoid": + pca_params.update({"coef0": args.coef0}) + elif args.kernel == "precomputed": + pca_input = np.dot(pca_input, pca_input.T) + + if args.eigen_solver == "arpack": + pca_params.update({"tol": args.tolerance, "max_iter": args.max_iter}) + + pca = KernelPCA() + + print(pca_params) + pca.set_params(**pca_params) + pca_output = pca.fit_transform(pca_input) + np.savetxt(fname=args.outfile, X=pca_output, fmt="%.4f", delimiter="\t") + + +if __name__ == "__main__": + main() diff -r 8b47a3c08d97 -r 2ac77e0aec82 search_model_validation.py --- a/search_model_validation.py Wed Mar 11 17:09:06 2020 +0000 +++ b/search_model_validation.py Tue Apr 13 20:42:24 2021 +0000 @@ -1,55 +1,66 @@ import argparse import collections -import imblearn -import joblib import json -import numpy as np import os -import pandas as pd import pickle -import skrebate import sys import warnings + +import imblearn +import joblib +import numpy as np +import pandas as pd +import skrebate +from galaxy_ml.utils import ( + clean_params, + get_cv, + get_main_estimator, + get_module, + get_scoring, + load_model, + read_columns, + SafeEval, + try_get_attr +) from scipy.io import mmread -from sklearn import (cluster, decomposition, feature_selection, - kernel_approximation, model_selection, preprocessing) +from sklearn import ( + cluster, + decomposition, + feature_selection, + kernel_approximation, + model_selection, + preprocessing, +) from sklearn.exceptions import FitFailedWarning -from sklearn.model_selection._validation import _score, cross_validate from sklearn.model_selection import _search, _validation -from sklearn.pipeline import Pipeline - -from galaxy_ml.utils import (SafeEval, get_cv, get_scoring, load_model, - read_columns, try_get_attr, get_module, - clean_params, get_main_estimator) +from sklearn.model_selection._validation import _score, cross_validate -_fit_and_score = try_get_attr('galaxy_ml.model_validations', '_fit_and_score') -setattr(_search, '_fit_and_score', _fit_and_score) -setattr(_validation, '_fit_and_score', _fit_and_score) +_fit_and_score = try_get_attr("galaxy_ml.model_validations", "_fit_and_score") +setattr(_search, "_fit_and_score", _fit_and_score) +setattr(_validation, "_fit_and_score", _fit_and_score) -N_JOBS = int(os.environ.get('GALAXY_SLOTS', 1)) +N_JOBS = int(os.environ.get("GALAXY_SLOTS", 1)) # handle disk cache -CACHE_DIR = os.path.join(os.getcwd(), 'cached') +CACHE_DIR = os.path.join(os.getcwd(), "cached") del os -NON_SEARCHABLE = ('n_jobs', 'pre_dispatch', 'memory', '_path', - 'nthread', 'callbacks') +NON_SEARCHABLE = ("n_jobs", "pre_dispatch", "memory", "_path", "nthread", "callbacks") def _eval_search_params(params_builder): search_params = {} - for p in params_builder['param_set']: - search_list = p['sp_list'].strip() - if search_list == '': + for p in params_builder["param_set"]: + search_list = p["sp_list"].strip() + if search_list == "": continue - param_name = p['sp_name'] + param_name = p["sp_name"] if param_name.lower().endswith(NON_SEARCHABLE): - print("Warning: `%s` is not eligible for search and was " - "omitted!" % param_name) + print("Warning: `%s` is not eligible for search and was " "omitted!" % param_name) continue - if not search_list.startswith(':'): + if not search_list.startswith(":"): safe_eval = SafeEval(load_scipy=True, load_numpy=True) ev = safe_eval(search_list) search_params[param_name] = ev @@ -60,26 +71,27 @@ # TODO maybe add regular express check ev = safe_eval_es(search_list) preprocessings = ( - preprocessing.StandardScaler(), preprocessing.Binarizer(), + preprocessing.StandardScaler(), + preprocessing.Binarizer(), preprocessing.MaxAbsScaler(), - preprocessing.Normalizer(), preprocessing.MinMaxScaler(), + preprocessing.Normalizer(), + preprocessing.MinMaxScaler(), preprocessing.PolynomialFeatures(), - preprocessing.RobustScaler(), feature_selection.SelectKBest(), + preprocessing.RobustScaler(), + feature_selection.SelectKBest(), feature_selection.GenericUnivariateSelect(), feature_selection.SelectPercentile(), - feature_selection.SelectFpr(), feature_selection.SelectFdr(), + feature_selection.SelectFpr(), + feature_selection.SelectFdr(), feature_selection.SelectFwe(), feature_selection.VarianceThreshold(), decomposition.FactorAnalysis(random_state=0), decomposition.FastICA(random_state=0), decomposition.IncrementalPCA(), decomposition.KernelPCA(random_state=0, n_jobs=N_JOBS), - decomposition.LatentDirichletAllocation( - random_state=0, n_jobs=N_JOBS), - decomposition.MiniBatchDictionaryLearning( - random_state=0, n_jobs=N_JOBS), - decomposition.MiniBatchSparsePCA( - random_state=0, n_jobs=N_JOBS), + decomposition.LatentDirichletAllocation(random_state=0, n_jobs=N_JOBS), + decomposition.MiniBatchDictionaryLearning(random_state=0, n_jobs=N_JOBS), + decomposition.MiniBatchSparsePCA(random_state=0, n_jobs=N_JOBS), decomposition.NMF(random_state=0), decomposition.PCA(random_state=0), decomposition.SparsePCA(random_state=0, n_jobs=N_JOBS), @@ -94,59 +106,48 @@ skrebate.SURFstar(n_jobs=N_JOBS), skrebate.MultiSURF(n_jobs=N_JOBS), skrebate.MultiSURFstar(n_jobs=N_JOBS), - imblearn.under_sampling.ClusterCentroids( - random_state=0, n_jobs=N_JOBS), - imblearn.under_sampling.CondensedNearestNeighbour( - random_state=0, n_jobs=N_JOBS), - imblearn.under_sampling.EditedNearestNeighbours( - random_state=0, n_jobs=N_JOBS), - imblearn.under_sampling.RepeatedEditedNearestNeighbours( - random_state=0, n_jobs=N_JOBS), + imblearn.under_sampling.ClusterCentroids(random_state=0, n_jobs=N_JOBS), + imblearn.under_sampling.CondensedNearestNeighbour(random_state=0, n_jobs=N_JOBS), + imblearn.under_sampling.EditedNearestNeighbours(random_state=0, n_jobs=N_JOBS), + imblearn.under_sampling.RepeatedEditedNearestNeighbours(random_state=0, n_jobs=N_JOBS), imblearn.under_sampling.AllKNN(random_state=0, n_jobs=N_JOBS), - imblearn.under_sampling.InstanceHardnessThreshold( - random_state=0, n_jobs=N_JOBS), - imblearn.under_sampling.NearMiss( - random_state=0, n_jobs=N_JOBS), - imblearn.under_sampling.NeighbourhoodCleaningRule( - random_state=0, n_jobs=N_JOBS), - imblearn.under_sampling.OneSidedSelection( - random_state=0, n_jobs=N_JOBS), - imblearn.under_sampling.RandomUnderSampler( - random_state=0), - imblearn.under_sampling.TomekLinks( - random_state=0, n_jobs=N_JOBS), + imblearn.under_sampling.InstanceHardnessThreshold(random_state=0, n_jobs=N_JOBS), + imblearn.under_sampling.NearMiss(random_state=0, n_jobs=N_JOBS), + imblearn.under_sampling.NeighbourhoodCleaningRule(random_state=0, n_jobs=N_JOBS), + imblearn.under_sampling.OneSidedSelection(random_state=0, n_jobs=N_JOBS), + imblearn.under_sampling.RandomUnderSampler(random_state=0), + imblearn.under_sampling.TomekLinks(random_state=0, n_jobs=N_JOBS), imblearn.over_sampling.ADASYN(random_state=0, n_jobs=N_JOBS), imblearn.over_sampling.RandomOverSampler(random_state=0), imblearn.over_sampling.SMOTE(random_state=0, n_jobs=N_JOBS), imblearn.over_sampling.SVMSMOTE(random_state=0, n_jobs=N_JOBS), - imblearn.over_sampling.BorderlineSMOTE( - random_state=0, n_jobs=N_JOBS), - imblearn.over_sampling.SMOTENC( - categorical_features=[], random_state=0, n_jobs=N_JOBS), + imblearn.over_sampling.BorderlineSMOTE(random_state=0, n_jobs=N_JOBS), + imblearn.over_sampling.SMOTENC(categorical_features=[], random_state=0, n_jobs=N_JOBS), imblearn.combine.SMOTEENN(random_state=0), - imblearn.combine.SMOTETomek(random_state=0)) + imblearn.combine.SMOTETomek(random_state=0), + ) newlist = [] for obj in ev: if obj is None: newlist.append(None) - elif obj == 'all_0': + elif obj == "all_0": newlist.extend(preprocessings[0:35]) - elif obj == 'sk_prep_all': # no KernalCenter() + elif obj == "sk_prep_all": # no KernalCenter() newlist.extend(preprocessings[0:7]) - elif obj == 'fs_all': + elif obj == "fs_all": newlist.extend(preprocessings[7:14]) - elif obj == 'decomp_all': + elif obj == "decomp_all": newlist.extend(preprocessings[14:25]) - elif obj == 'k_appr_all': + elif obj == "k_appr_all": newlist.extend(preprocessings[25:29]) - elif obj == 'reb_all': + elif obj == "reb_all": newlist.extend(preprocessings[30:35]) - elif obj == 'imb_all': + elif obj == "imb_all": newlist.extend(preprocessings[35:54]) elif type(obj) is int and -1 < obj < len(preprocessings): newlist.append(preprocessings[obj]) - elif hasattr(obj, 'get_params'): # user uploaded object - if 'n_jobs' in obj.get_params(): + elif hasattr(obj, "get_params"): # user uploaded object + if "n_jobs" in obj.get_params(): newlist.append(obj.set_params(n_jobs=N_JOBS)) else: newlist.append(obj) @@ -158,9 +159,17 @@ return search_params -def _handle_X_y(estimator, params, infile1, infile2, loaded_df={}, - ref_seq=None, intervals=None, targets=None, - fasta_path=None): +def _handle_X_y( + estimator, + params, + infile1, + infile2, + loaded_df={}, + ref_seq=None, + intervals=None, + targets=None, + fasta_path=None, +): """read inputs Params @@ -192,15 +201,18 @@ """ estimator_params = estimator.get_params() - input_type = params['input_options']['selected_input'] + input_type = params["input_options"]["selected_input"] # tabular input - if input_type == 'tabular': - header = 'infer' if params['input_options']['header1'] else None - column_option = (params['input_options']['column_selector_options_1'] - ['selected_column_selector_option']) - if column_option in ['by_index_number', 'all_but_by_index_number', - 'by_header_name', 'all_but_by_header_name']: - c = params['input_options']['column_selector_options_1']['col1'] + if input_type == "tabular": + header = "infer" if params["input_options"]["header1"] else None + column_option = params["input_options"]["column_selector_options_1"]["selected_column_selector_option"] + if column_option in [ + "by_index_number", + "all_but_by_index_number", + "by_header_name", + "all_but_by_header_name", + ]: + c = params["input_options"]["column_selector_options_1"]["col1"] else: c = None @@ -209,25 +221,23 @@ if df_key in loaded_df: infile1 = loaded_df[df_key] - df = pd.read_csv(infile1, sep='\t', header=header, - parse_dates=True) + df = pd.read_csv(infile1, sep="\t", header=header, parse_dates=True) loaded_df[df_key] = df X = read_columns(df, c=c, c_option=column_option).astype(float) # sparse input - elif input_type == 'sparse': - X = mmread(open(infile1, 'r')) + elif input_type == "sparse": + X = mmread(open(infile1, "r")) # fasta_file input - elif input_type == 'seq_fasta': - pyfaidx = get_module('pyfaidx') + elif input_type == "seq_fasta": + pyfaidx = get_module("pyfaidx") sequences = pyfaidx.Fasta(fasta_path) n_seqs = len(sequences.keys()) X = np.arange(n_seqs)[:, np.newaxis] for param in estimator_params.keys(): - if param.endswith('fasta_path'): - estimator.set_params( - **{param: fasta_path}) + if param.endswith("fasta_path"): + estimator.set_params(**{param: fasta_path}) break else: raise ValueError( @@ -236,25 +246,29 @@ "KerasGBatchClassifier with " "FastaDNABatchGenerator/FastaProteinBatchGenerator " "or having GenomeOneHotEncoder/ProteinOneHotEncoder " - "in pipeline!") + "in pipeline!" + ) - elif input_type == 'refseq_and_interval': + elif input_type == "refseq_and_interval": path_params = { - 'data_batch_generator__ref_genome_path': ref_seq, - 'data_batch_generator__intervals_path': intervals, - 'data_batch_generator__target_path': targets + "data_batch_generator__ref_genome_path": ref_seq, + "data_batch_generator__intervals_path": intervals, + "data_batch_generator__target_path": targets, } estimator.set_params(**path_params) n_intervals = sum(1 for line in open(intervals)) X = np.arange(n_intervals)[:, np.newaxis] # Get target y - header = 'infer' if params['input_options']['header2'] else None - column_option = (params['input_options']['column_selector_options_2'] - ['selected_column_selector_option2']) - if column_option in ['by_index_number', 'all_but_by_index_number', - 'by_header_name', 'all_but_by_header_name']: - c = params['input_options']['column_selector_options_2']['col2'] + header = "infer" if params["input_options"]["header2"] else None + column_option = params["input_options"]["column_selector_options_2"]["selected_column_selector_option2"] + if column_option in [ + "by_index_number", + "all_but_by_index_number", + "by_header_name", + "all_but_by_header_name", + ]: + c = params["input_options"]["column_selector_options_2"]["col2"] else: c = None @@ -262,30 +276,21 @@ if df_key in loaded_df: infile2 = loaded_df[df_key] else: - infile2 = pd.read_csv(infile2, sep='\t', - header=header, parse_dates=True) + infile2 = pd.read_csv(infile2, sep="\t", header=header, parse_dates=True) loaded_df[df_key] = infile2 - y = read_columns( - infile2, - c=c, - c_option=column_option, - sep='\t', - header=header, - parse_dates=True) + y = read_columns(infile2, c=c, c_option=column_option, sep="\t", header=header, parse_dates=True) if len(y.shape) == 2 and y.shape[1] == 1: y = y.ravel() - if input_type == 'refseq_and_interval': - estimator.set_params( - data_batch_generator__features=y.ravel().tolist()) + if input_type == "refseq_and_interval": + estimator.set_params(data_batch_generator__features=y.ravel().tolist()) y = None # end y return estimator, X, y -def _do_outer_cv(searcher, X, y, outer_cv, scoring, error_score='raise', - outfile=None): +def _do_outer_cv(searcher, X, y, outer_cv, scoring, error_score="raise", outfile=None): """Do outer cross-validation for nested CV Parameters @@ -305,21 +310,31 @@ outfile : str File path to store the restuls """ - if error_score == 'raise': + if error_score == "raise": rval = cross_validate( - searcher, X, y, scoring=scoring, - cv=outer_cv, n_jobs=N_JOBS, verbose=0, - error_score=error_score) + searcher, + X, + y, + scoring=scoring, + cv=outer_cv, + n_jobs=N_JOBS, + verbose=0, + error_score=error_score, + ) else: - warnings.simplefilter('always', FitFailedWarning) + warnings.simplefilter("always", FitFailedWarning) with warnings.catch_warnings(record=True) as w: try: rval = cross_validate( - searcher, X, y, + searcher, + X, + y, scoring=scoring, - cv=outer_cv, n_jobs=N_JOBS, + cv=outer_cv, + n_jobs=N_JOBS, verbose=0, - error_score=error_score) + error_score=error_score, + ) except ValueError: pass for warning in w: @@ -327,55 +342,57 @@ keys = list(rval.keys()) for k in keys: - if k.startswith('test'): - rval['mean_' + k] = np.mean(rval[k]) - rval['std_' + k] = np.std(rval[k]) - if k.endswith('time'): + if k.startswith("test"): + rval["mean_" + k] = np.mean(rval[k]) + rval["std_" + k] = np.std(rval[k]) + if k.endswith("time"): rval.pop(k) rval = pd.DataFrame(rval) rval = rval[sorted(rval.columns)] - rval.to_csv(path_or_buf=outfile, sep='\t', header=True, index=False) + rval.to_csv(path_or_buf=outfile, sep="\t", header=True, index=False) -def _do_train_test_split_val(searcher, X, y, params, error_score='raise', - primary_scoring=None, groups=None, - outfile=None): - """ do train test split, searchCV validates on the train and then use +def _do_train_test_split_val( + searcher, + X, + y, + params, + error_score="raise", + primary_scoring=None, + groups=None, + outfile=None, +): + """do train test split, searchCV validates on the train and then use the best_estimator_ to evaluate on the test Returns -------- Fitted SearchCV object """ - train_test_split = try_get_attr( - 'galaxy_ml.model_validations', 'train_test_split') - split_options = params['outer_split'] + train_test_split = try_get_attr("galaxy_ml.model_validations", "train_test_split") + split_options = params["outer_split"] # splits - if split_options['shuffle'] == 'stratified': - split_options['labels'] = y + if split_options["shuffle"] == "stratified": + split_options["labels"] = y X, X_test, y, y_test = train_test_split(X, y, **split_options) - elif split_options['shuffle'] == 'group': + elif split_options["shuffle"] == "group": if groups is None: - raise ValueError("No group based CV option was choosen for " - "group shuffle!") - split_options['labels'] = groups + raise ValueError("No group based CV option was choosen for " "group shuffle!") + split_options["labels"] = groups if y is None: - X, X_test, groups, _ =\ - train_test_split(X, groups, **split_options) + X, X_test, groups, _ = train_test_split(X, groups, **split_options) else: - X, X_test, y, y_test, groups, _ =\ - train_test_split(X, y, groups, **split_options) + X, X_test, y, y_test, groups, _ = train_test_split(X, y, groups, **split_options) else: - if split_options['shuffle'] == 'None': - split_options['shuffle'] = None - X, X_test, y, y_test =\ - train_test_split(X, y, **split_options) + if split_options["shuffle"] == "None": + split_options["shuffle"] = None + X, X_test, y, y_test = train_test_split(X, y, **split_options) - if error_score == 'raise': + if error_score == "raise": searcher.fit(X, y, groups=groups) else: - warnings.simplefilter('always', FitFailedWarning) + warnings.simplefilter("always", FitFailedWarning) with warnings.catch_warnings(record=True) as w: try: searcher.fit(X, y, groups=groups) @@ -390,33 +407,38 @@ else: is_multimetric = False - best_estimator_ = getattr(searcher, 'best_estimator_') + best_estimator_ = getattr(searcher, "best_estimator_") # TODO Solve deep learning models in pipeline - if best_estimator_.__class__.__name__ == 'KerasGBatchClassifier': - test_score = best_estimator_.evaluate( - X_test, scorer=scorer_, is_multimetric=is_multimetric) + if best_estimator_.__class__.__name__ == "KerasGBatchClassifier": + test_score = best_estimator_.evaluate(X_test, scorer=scorer_, is_multimetric=is_multimetric) else: - test_score = _score(best_estimator_, X_test, - y_test, scorer_, - is_multimetric=is_multimetric) + test_score = _score(best_estimator_, X_test, y_test, scorer_, is_multimetric=is_multimetric) if not is_multimetric: test_score = {primary_scoring: test_score} for key, value in test_score.items(): test_score[key] = [value] result_df = pd.DataFrame(test_score) - result_df.to_csv(path_or_buf=outfile, sep='\t', header=True, - index=False) + result_df.to_csv(path_or_buf=outfile, sep="\t", header=True, index=False) return searcher -def main(inputs, infile_estimator, infile1, infile2, - outfile_result, outfile_object=None, - outfile_weights=None, groups=None, - ref_seq=None, intervals=None, targets=None, - fasta_path=None): +def main( + inputs, + infile_estimator, + infile1, + infile2, + outfile_result, + outfile_object=None, + outfile_weights=None, + groups=None, + ref_seq=None, + intervals=None, + targets=None, + fasta_path=None, +): """ Parameter --------- @@ -456,154 +478,174 @@ fasta_path : str File path to dataset containing fasta file """ - warnings.simplefilter('ignore') + warnings.simplefilter("ignore") # store read dataframe object loaded_df = {} - with open(inputs, 'r') as param_handler: + with open(inputs, "r") as param_handler: params = json.load(param_handler) # Override the refit parameter - params['search_schemes']['options']['refit'] = True \ - if params['save'] != 'nope' else False + params["search_schemes"]["options"]["refit"] = True if params["save"] != "nope" else False - with open(infile_estimator, 'rb') as estimator_handler: + with open(infile_estimator, "rb") as estimator_handler: estimator = load_model(estimator_handler) - optimizer = params['search_schemes']['selected_search_scheme'] + optimizer = params["search_schemes"]["selected_search_scheme"] optimizer = getattr(model_selection, optimizer) # handle gridsearchcv options - options = params['search_schemes']['options'] + options = params["search_schemes"]["options"] if groups: - header = 'infer' if (options['cv_selector']['groups_selector'] - ['header_g']) else None - column_option = (options['cv_selector']['groups_selector'] - ['column_selector_options_g'] - ['selected_column_selector_option_g']) - if column_option in ['by_index_number', 'all_but_by_index_number', - 'by_header_name', 'all_but_by_header_name']: - c = (options['cv_selector']['groups_selector'] - ['column_selector_options_g']['col_g']) + header = "infer" if (options["cv_selector"]["groups_selector"]["header_g"]) else None + column_option = options["cv_selector"]["groups_selector"]["column_selector_options_g"][ + "selected_column_selector_option_g" + ] + if column_option in [ + "by_index_number", + "all_but_by_index_number", + "by_header_name", + "all_but_by_header_name", + ]: + c = options["cv_selector"]["groups_selector"]["column_selector_options_g"]["col_g"] else: c = None df_key = groups + repr(header) - groups = pd.read_csv(groups, sep='\t', header=header, - parse_dates=True) + groups = pd.read_csv(groups, sep="\t", header=header, parse_dates=True) loaded_df[df_key] = groups groups = read_columns( - groups, - c=c, - c_option=column_option, - sep='\t', - header=header, - parse_dates=True) + groups, + c=c, + c_option=column_option, + sep="\t", + header=header, + parse_dates=True, + ) groups = groups.ravel() - options['cv_selector']['groups_selector'] = groups + options["cv_selector"]["groups_selector"] = groups - splitter, groups = get_cv(options.pop('cv_selector')) - options['cv'] = splitter - primary_scoring = options['scoring']['primary_scoring'] - options['scoring'] = get_scoring(options['scoring']) - if options['error_score']: - options['error_score'] = 'raise' + splitter, groups = get_cv(options.pop("cv_selector")) + options["cv"] = splitter + primary_scoring = options["scoring"]["primary_scoring"] + # get_scoring() expects secondary_scoring to be a comma separated string (not a list) + # Check if secondary_scoring is specified + secondary_scoring = options["scoring"].get("secondary_scoring", None) + if secondary_scoring is not None: + # If secondary_scoring is specified, convert the list into comman separated string + options["scoring"]["secondary_scoring"] = ",".join(options["scoring"]["secondary_scoring"]) + options["scoring"] = get_scoring(options["scoring"]) + if options["error_score"]: + options["error_score"] = "raise" else: - options['error_score'] = np.NaN - if options['refit'] and isinstance(options['scoring'], dict): - options['refit'] = primary_scoring - if 'pre_dispatch' in options and options['pre_dispatch'] == '': - options['pre_dispatch'] = None + options["error_score"] = np.NaN + if options["refit"] and isinstance(options["scoring"], dict): + options["refit"] = primary_scoring + if "pre_dispatch" in options and options["pre_dispatch"] == "": + options["pre_dispatch"] = None - params_builder = params['search_schemes']['search_params_builder'] + params_builder = params["search_schemes"]["search_params_builder"] param_grid = _eval_search_params(params_builder) estimator = clean_params(estimator) # save the SearchCV object without fit - if params['save'] == 'save_no_fit': + if params["save"] == "save_no_fit": searcher = optimizer(estimator, param_grid, **options) print(searcher) - with open(outfile_object, 'wb') as output_handler: - pickle.dump(searcher, output_handler, - pickle.HIGHEST_PROTOCOL) + with open(outfile_object, "wb") as output_handler: + pickle.dump(searcher, output_handler, pickle.HIGHEST_PROTOCOL) return 0 # read inputs and loads new attributes, like paths - estimator, X, y = _handle_X_y(estimator, params, infile1, infile2, - loaded_df=loaded_df, ref_seq=ref_seq, - intervals=intervals, targets=targets, - fasta_path=fasta_path) + estimator, X, y = _handle_X_y( + estimator, + params, + infile1, + infile2, + loaded_df=loaded_df, + ref_seq=ref_seq, + intervals=intervals, + targets=targets, + fasta_path=fasta_path, + ) # cache iraps_core fits could increase search speed significantly memory = joblib.Memory(location=CACHE_DIR, verbose=0) main_est = get_main_estimator(estimator) - if main_est.__class__.__name__ == 'IRAPSClassifier': + if main_est.__class__.__name__ == "IRAPSClassifier": main_est.set_params(memory=memory) searcher = optimizer(estimator, param_grid, **options) - split_mode = params['outer_split'].pop('split_mode') + split_mode = params["outer_split"].pop("split_mode") - if split_mode == 'nested_cv': + if split_mode == "nested_cv": # make sure refit is choosen # this could be True for sklearn models, but not the case for # deep learning models - if not options['refit'] and \ - not all(hasattr(estimator, attr) - for attr in ('config', 'model_type')): + if not options["refit"] and not all(hasattr(estimator, attr) for attr in ("config", "model_type")): warnings.warn("Refit is change to `True` for nested validation!") - setattr(searcher, 'refit', True) + setattr(searcher, "refit", True) - outer_cv, _ = get_cv(params['outer_split']['cv_selector']) + outer_cv, _ = get_cv(params["outer_split"]["cv_selector"]) # nested CV, outer cv using cross_validate - if options['error_score'] == 'raise': + if options["error_score"] == "raise": rval = cross_validate( - searcher, X, y, scoring=options['scoring'], - cv=outer_cv, n_jobs=N_JOBS, - verbose=options['verbose'], - return_estimator=(params['save'] == 'save_estimator'), - error_score=options['error_score'], - return_train_score=True) + searcher, + X, + y, + scoring=options["scoring"], + cv=outer_cv, + n_jobs=N_JOBS, + verbose=options["verbose"], + return_estimator=(params["save"] == "save_estimator"), + error_score=options["error_score"], + return_train_score=True, + ) else: - warnings.simplefilter('always', FitFailedWarning) + warnings.simplefilter("always", FitFailedWarning) with warnings.catch_warnings(record=True) as w: try: rval = cross_validate( - searcher, X, y, - scoring=options['scoring'], - cv=outer_cv, n_jobs=N_JOBS, - verbose=options['verbose'], - return_estimator=(params['save'] == 'save_estimator'), - error_score=options['error_score'], - return_train_score=True) + searcher, + X, + y, + scoring=options["scoring"], + cv=outer_cv, + n_jobs=N_JOBS, + verbose=options["verbose"], + return_estimator=(params["save"] == "save_estimator"), + error_score=options["error_score"], + return_train_score=True, + ) except ValueError: pass for warning in w: print(repr(warning.message)) - fitted_searchers = rval.pop('estimator', []) + fitted_searchers = rval.pop("estimator", []) if fitted_searchers: import os + pwd = os.getcwd() - save_dir = os.path.join(pwd, 'cv_results_in_folds') + save_dir = os.path.join(pwd, "cv_results_in_folds") try: os.mkdir(save_dir) for idx, obj in enumerate(fitted_searchers): - target_name = 'cv_results_' + '_' + 'split%d' % idx + target_name = "cv_results_" + "_" + "split%d" % idx target_path = os.path.join(pwd, save_dir, target_name) - cv_results_ = getattr(obj, 'cv_results_', None) + cv_results_ = getattr(obj, "cv_results_", None) if not cv_results_: print("%s is not available" % target_name) continue cv_results_ = pd.DataFrame(cv_results_) cv_results_ = cv_results_[sorted(cv_results_.columns)] - cv_results_.to_csv(target_path, sep='\t', header=True, - index=False) + cv_results_.to_csv(target_path, sep="\t", header=True, index=False) except Exception as e: print(e) finally: @@ -611,18 +653,14 @@ keys = list(rval.keys()) for k in keys: - if k.startswith('test'): - rval['mean_' + k] = np.mean(rval[k]) - rval['std_' + k] = np.std(rval[k]) - if k.endswith('time'): + if k.startswith("test"): + rval["mean_" + k] = np.mean(rval[k]) + rval["std_" + k] = np.std(rval[k]) + if k.endswith("time"): rval.pop(k) rval = pd.DataFrame(rval) rval = rval[sorted(rval.columns)] - rval.to_csv(path_or_buf=outfile_result, sep='\t', header=True, - index=False) - - return 0 - + rval.to_csv(path_or_buf=outfile_result, sep="\t", header=True, index=False) # deprecate train test split mode """searcher = _do_train_test_split_val( searcher, X, y, params, @@ -630,14 +668,15 @@ error_score=options['error_score'], groups=groups, outfile=outfile_result)""" + return 0 # no outer split else: searcher.set_params(n_jobs=N_JOBS) - if options['error_score'] == 'raise': + if options["error_score"] == "raise": searcher.fit(X, y, groups=groups) else: - warnings.simplefilter('always', FitFailedWarning) + warnings.simplefilter("always", FitFailedWarning) with warnings.catch_warnings(record=True) as w: try: searcher.fit(X, y, groups=groups) @@ -648,18 +687,19 @@ cv_results = pd.DataFrame(searcher.cv_results_) cv_results = cv_results[sorted(cv_results.columns)] - cv_results.to_csv(path_or_buf=outfile_result, sep='\t', - header=True, index=False) + cv_results.to_csv(path_or_buf=outfile_result, sep="\t", header=True, index=False) memory.clear(warn=False) # output best estimator, and weights if applicable if outfile_object: - best_estimator_ = getattr(searcher, 'best_estimator_', None) + best_estimator_ = getattr(searcher, "best_estimator_", None) if not best_estimator_: - warnings.warn("GridSearchCV object has no attribute " - "'best_estimator_', because either it's " - "nested gridsearch or `refit` is False!") + warnings.warn( + "GridSearchCV object has no attribute " + "'best_estimator_', because either it's " + "nested gridsearch or `refit` is False!" + ) return # clean prams @@ -667,24 +707,22 @@ main_est = get_main_estimator(best_estimator_) - if hasattr(main_est, 'model_') \ - and hasattr(main_est, 'save_weights'): + if hasattr(main_est, "model_") and hasattr(main_est, "save_weights"): if outfile_weights: main_est.save_weights(outfile_weights) del main_est.model_ del main_est.fit_params del main_est.model_class_ del main_est.validation_data - if getattr(main_est, 'data_generator_', None): + if getattr(main_est, "data_generator_", None): del main_est.data_generator_ - with open(outfile_object, 'wb') as output_handler: + with open(outfile_object, "wb") as output_handler: print("Best estimator is saved: %s " % repr(best_estimator_)) - pickle.dump(best_estimator_, output_handler, - pickle.HIGHEST_PROTOCOL) + pickle.dump(best_estimator_, output_handler, pickle.HIGHEST_PROTOCOL) -if __name__ == '__main__': +if __name__ == "__main__": aparser = argparse.ArgumentParser() aparser.add_argument("-i", "--inputs", dest="inputs", required=True) aparser.add_argument("-e", "--estimator", dest="infile_estimator") @@ -700,8 +738,17 @@ aparser.add_argument("-f", "--fasta_path", dest="fasta_path") args = aparser.parse_args() - main(args.inputs, args.infile_estimator, args.infile1, args.infile2, - args.outfile_result, outfile_object=args.outfile_object, - outfile_weights=args.outfile_weights, groups=args.groups, - ref_seq=args.ref_seq, intervals=args.intervals, - targets=args.targets, fasta_path=args.fasta_path) + main( + args.inputs, + args.infile_estimator, + args.infile1, + args.infile2, + args.outfile_result, + outfile_object=args.outfile_object, + outfile_weights=args.outfile_weights, + groups=args.groups, + ref_seq=args.ref_seq, + intervals=args.intervals, + targets=args.targets, + fasta_path=args.fasta_path, + ) diff -r 8b47a3c08d97 -r 2ac77e0aec82 simple_model_fit.py --- a/simple_model_fit.py Wed Mar 11 17:09:06 2020 +0000 +++ b/simple_model_fit.py Tue Apr 13 20:42:24 2021 +0000 @@ -1,13 +1,14 @@ import argparse import json -import pandas as pd import pickle +import pandas as pd from galaxy_ml.utils import load_model, read_columns +from scipy.io import mmread from sklearn.pipeline import Pipeline -N_JOBS = int(__import__('os').environ.get('GALAXY_SLOTS', 1)) +N_JOBS = int(__import__("os").environ.get("GALAXY_SLOTS", 1)) # TODO import from galaxy_ml.utils in future versions @@ -20,33 +21,35 @@ ------ Cleaned estimator object """ - ALLOWED_CALLBACKS = ('EarlyStopping', 'TerminateOnNaN', - 'ReduceLROnPlateau', 'CSVLogger', 'None') + ALLOWED_CALLBACKS = ( + "EarlyStopping", + "TerminateOnNaN", + "ReduceLROnPlateau", + "CSVLogger", + "None", + ) estimator_params = estimator.get_params() for name, p in estimator_params.items(): # all potential unauthorized file write - if name == 'memory' or name.endswith('__memory') \ - or name.endswith('_path'): + if name == "memory" or name.endswith("__memory") or name.endswith("_path"): new_p = {name: None} estimator.set_params(**new_p) - elif n_jobs is not None and (name == 'n_jobs' or - name.endswith('__n_jobs')): + elif n_jobs is not None and (name == 'n_jobs' or name.endswith('__n_jobs')): new_p = {name: n_jobs} estimator.set_params(**new_p) - elif name.endswith('callbacks'): + elif name.endswith("callbacks"): for cb in p: - cb_type = cb['callback_selection']['callback_type'] + cb_type = cb["callback_selection"]["callback_type"] if cb_type not in ALLOWED_CALLBACKS: - raise ValueError( - "Prohibited callback type: %s!" % cb_type) + raise ValueError("Prohibited callback type: %s!" % cb_type) return estimator def _get_X_y(params, infile1, infile2): - """ read from inputs and output X and y + """read from inputs and output X and y Parameters ---------- @@ -61,35 +64,40 @@ # store read dataframe object loaded_df = {} - input_type = params['input_options']['selected_input'] + input_type = params["input_options"]["selected_input"] # tabular input - if input_type == 'tabular': - header = 'infer' if params['input_options']['header1'] else None - column_option = (params['input_options']['column_selector_options_1'] - ['selected_column_selector_option']) - if column_option in ['by_index_number', 'all_but_by_index_number', - 'by_header_name', 'all_but_by_header_name']: - c = params['input_options']['column_selector_options_1']['col1'] + if input_type == "tabular": + header = "infer" if params["input_options"]["header1"] else None + column_option = params["input_options"]["column_selector_options_1"]["selected_column_selector_option"] + if column_option in [ + "by_index_number", + "all_but_by_index_number", + "by_header_name", + "all_but_by_header_name", + ]: + c = params["input_options"]["column_selector_options_1"]["col1"] else: c = None df_key = infile1 + repr(header) - df = pd.read_csv(infile1, sep='\t', header=header, - parse_dates=True) + df = pd.read_csv(infile1, sep="\t", header=header, parse_dates=True) loaded_df[df_key] = df X = read_columns(df, c=c, c_option=column_option).astype(float) # sparse input - elif input_type == 'sparse': - X = mmread(open(infile1, 'r')) + elif input_type == "sparse": + X = mmread(open(infile1, "r")) # Get target y - header = 'infer' if params['input_options']['header2'] else None - column_option = (params['input_options']['column_selector_options_2'] - ['selected_column_selector_option2']) - if column_option in ['by_index_number', 'all_but_by_index_number', - 'by_header_name', 'all_but_by_header_name']: - c = params['input_options']['column_selector_options_2']['col2'] + header = "infer" if params["input_options"]["header2"] else None + column_option = params["input_options"]["column_selector_options_2"]["selected_column_selector_option2"] + if column_option in [ + "by_index_number", + "all_but_by_index_number", + "by_header_name", + "all_but_by_header_name", + ]: + c = params["input_options"]["column_selector_options_2"]["col2"] else: c = None @@ -97,26 +105,23 @@ if df_key in loaded_df: infile2 = loaded_df[df_key] else: - infile2 = pd.read_csv(infile2, sep='\t', - header=header, parse_dates=True) + infile2 = pd.read_csv(infile2, sep="\t", header=header, parse_dates=True) loaded_df[df_key] = infile2 - y = read_columns( - infile2, - c=c, - c_option=column_option, - sep='\t', - header=header, - parse_dates=True) + y = read_columns(infile2, + c=c, + c_option=column_option, + sep='\t', + header=header, + parse_dates=True) if len(y.shape) == 2 and y.shape[1] == 1: y = y.ravel() return X, y -def main(inputs, infile_estimator, infile1, infile2, out_object, - out_weights=None): - """ main +def main(inputs, infile_estimator, infile1, infile2, out_object, out_weights=None): + """main Parameters ---------- @@ -139,38 +144,37 @@ File path for output of weights """ - with open(inputs, 'r') as param_handler: + with open(inputs, "r") as param_handler: params = json.load(param_handler) # load model - with open(infile_estimator, 'rb') as est_handler: + with open(infile_estimator, "rb") as est_handler: estimator = load_model(est_handler) estimator = clean_params(estimator, n_jobs=N_JOBS) X_train, y_train = _get_X_y(params, infile1, infile2) estimator.fit(X_train, y_train) - + main_est = estimator if isinstance(main_est, Pipeline): main_est = main_est.steps[-1][-1] - if hasattr(main_est, 'model_') \ - and hasattr(main_est, 'save_weights'): + if hasattr(main_est, "model_") and hasattr(main_est, "save_weights"): if out_weights: main_est.save_weights(out_weights) del main_est.model_ del main_est.fit_params del main_est.model_class_ - del main_est.validation_data - if getattr(main_est, 'data_generator_', None): + if getattr(main_est, "validation_data", None): + del main_est.validation_data + if getattr(main_est, "data_generator_", None): del main_est.data_generator_ - with open(out_object, 'wb') as output_handler: - pickle.dump(estimator, output_handler, - pickle.HIGHEST_PROTOCOL) + with open(out_object, "wb") as output_handler: + pickle.dump(estimator, output_handler, pickle.HIGHEST_PROTOCOL) -if __name__ == '__main__': +if __name__ == "__main__": aparser = argparse.ArgumentParser() aparser.add_argument("-i", "--inputs", dest="inputs", required=True) aparser.add_argument("-X", "--infile_estimator", dest="infile_estimator") @@ -180,5 +184,11 @@ aparser.add_argument("-t", "--out_weights", dest="out_weights") args = aparser.parse_args() - main(args.inputs, args.infile_estimator, args.infile1, - args.infile2, args.out_object, args.out_weights) + main( + args.inputs, + args.infile_estimator, + args.infile1, + args.infile2, + args.out_object, + args.out_weights, + ) diff -r 8b47a3c08d97 -r 2ac77e0aec82 stacking_ensembles.py --- a/stacking_ensembles.py Wed Mar 11 17:09:06 2020 +0000 +++ b/stacking_ensembles.py Tue Apr 13 20:42:24 2021 +0000 @@ -1,26 +1,22 @@ import argparse import ast import json -import mlxtend.regressor -import mlxtend.classifier -import pandas as pd import pickle -import sklearn import sys import warnings -from sklearn import ensemble -from galaxy_ml.utils import (load_model, get_cv, get_estimator, - get_search_params) +import mlxtend.classifier +import mlxtend.regressor +import pandas as pd +from galaxy_ml.utils import get_cv, get_estimator, get_search_params, load_model -warnings.filterwarnings('ignore') +warnings.filterwarnings("ignore") -N_JOBS = int(__import__('os').environ.get('GALAXY_SLOTS', 1)) +N_JOBS = int(__import__("os").environ.get("GALAXY_SLOTS", 1)) -def main(inputs_path, output_obj, base_paths=None, meta_path=None, - outfile_params=None): +def main(inputs_path, output_obj, base_paths=None, meta_path=None, outfile_params=None): """ Parameter --------- @@ -39,87 +35,79 @@ outfile_params : str File path for params output """ - with open(inputs_path, 'r') as param_handler: + with open(inputs_path, "r") as param_handler: params = json.load(param_handler) - estimator_type = params['algo_selection']['estimator_type'] + estimator_type = params["algo_selection"]["estimator_type"] # get base estimators base_estimators = [] - for idx, base_file in enumerate(base_paths.split(',')): - if base_file and base_file != 'None': - with open(base_file, 'rb') as handler: + for idx, base_file in enumerate(base_paths.split(",")): + if base_file and base_file != "None": + with open(base_file, "rb") as handler: model = load_model(handler) else: - estimator_json = (params['base_est_builder'][idx] - ['estimator_selector']) + estimator_json = params["base_est_builder"][idx]["estimator_selector"] model = get_estimator(estimator_json) - if estimator_type.startswith('sklearn'): + if estimator_type.startswith("sklearn"): named = model.__class__.__name__.lower() - named = 'base_%d_%s' % (idx, named) + named = "base_%d_%s" % (idx, named) base_estimators.append((named, model)) else: base_estimators.append(model) # get meta estimator, if applicable - if estimator_type.startswith('mlxtend'): + if estimator_type.startswith("mlxtend"): if meta_path: - with open(meta_path, 'rb') as f: + with open(meta_path, "rb") as f: meta_estimator = load_model(f) else: - estimator_json = (params['algo_selection'] - ['meta_estimator']['estimator_selector']) + estimator_json = params["algo_selection"]["meta_estimator"]["estimator_selector"] meta_estimator = get_estimator(estimator_json) - options = params['algo_selection']['options'] + options = params["algo_selection"]["options"] - cv_selector = options.pop('cv_selector', None) + cv_selector = options.pop("cv_selector", None) if cv_selector: - splitter, groups = get_cv(cv_selector) - options['cv'] = splitter + splitter, _groups = get_cv(cv_selector) + options["cv"] = splitter # set n_jobs - options['n_jobs'] = N_JOBS + options["n_jobs"] = N_JOBS - weights = options.pop('weights', None) + weights = options.pop("weights", None) if weights: weights = ast.literal_eval(weights) if weights: - options['weights'] = weights + options["weights"] = weights - mod_and_name = estimator_type.split('_') + mod_and_name = estimator_type.split("_") mod = sys.modules[mod_and_name[0]] klass = getattr(mod, mod_and_name[1]) - if estimator_type.startswith('sklearn'): - options['n_jobs'] = N_JOBS + if estimator_type.startswith("sklearn"): + options["n_jobs"] = N_JOBS ensemble_estimator = klass(base_estimators, **options) elif mod == mlxtend.classifier: - ensemble_estimator = klass( - classifiers=base_estimators, - meta_classifier=meta_estimator, - **options) + ensemble_estimator = klass(classifiers=base_estimators, meta_classifier=meta_estimator, **options) else: - ensemble_estimator = klass( - regressors=base_estimators, - meta_regressor=meta_estimator, - **options) + ensemble_estimator = klass(regressors=base_estimators, meta_regressor=meta_estimator, **options) print(ensemble_estimator) for base_est in base_estimators: print(base_est) - with open(output_obj, 'wb') as out_handler: + with open(output_obj, "wb") as out_handler: pickle.dump(ensemble_estimator, out_handler, pickle.HIGHEST_PROTOCOL) - if params['get_params'] and outfile_params: + if params["get_params"] and outfile_params: results = get_search_params(ensemble_estimator) - df = pd.DataFrame(results, columns=['', 'Parameter', 'Value']) - df.to_csv(outfile_params, sep='\t', index=False) + df = pd.DataFrame(results, columns=["", "Parameter", "Value"]) + df.to_csv(outfile_params, sep="\t", index=False) -if __name__ == '__main__': +if __name__ == "__main__": aparser = argparse.ArgumentParser() aparser.add_argument("-b", "--bases", dest="bases") aparser.add_argument("-m", "--meta", dest="meta") @@ -128,5 +116,10 @@ aparser.add_argument("-p", "--outfile_params", dest="outfile_params") args = aparser.parse_args() - main(args.inputs, args.outfile, base_paths=args.bases, - meta_path=args.meta, outfile_params=args.outfile_params) + main( + args.inputs, + args.outfile, + base_paths=args.bases, + meta_path=args.meta, + outfile_params=args.outfile_params, + ) diff -r 8b47a3c08d97 -r 2ac77e0aec82 test-data/keras_batch_params01.tabular --- a/test-data/keras_batch_params01.tabular Wed Mar 11 17:09:06 2020 +0000 +++ b/test-data/keras_batch_params01.tabular Tue Apr 13 20:42:24 2021 +0000 @@ -27,7 +27,7 @@ @ schedule_decay schedule_decay: None @ seed seed: None @ steps_per_epoch steps_per_epoch: None -@ validation_data validation_data: None +@ validation_fraction validation_fraction: 0.1 @ validation_steps validation_steps: None @ verbose verbose: 0 * data_batch_generator__fasta_path data_batch_generator__fasta_path: 'to_be_determined' diff -r 8b47a3c08d97 -r 2ac77e0aec82 test-data/keras_batch_params04.tabular --- a/test-data/keras_batch_params04.tabular Wed Mar 11 17:09:06 2020 +0000 +++ b/test-data/keras_batch_params04.tabular Tue Apr 13 20:42:24 2021 +0000 @@ -26,7 +26,7 @@ @ schedule_decay schedule_decay: None @ seed seed: None @ steps_per_epoch steps_per_epoch: None -@ validation_data validation_data: None +@ validation_fraction validation_fraction: 0.1 @ validation_steps validation_steps: None @ verbose verbose: 0 * layers_0_Dense__class_name layers_0_Dense__class_name: 'Dense' diff -r 8b47a3c08d97 -r 2ac77e0aec82 test-data/keras_model01 Binary file test-data/keras_model01 has changed diff -r 8b47a3c08d97 -r 2ac77e0aec82 test-data/keras_model02 Binary file test-data/keras_model02 has changed diff -r 8b47a3c08d97 -r 2ac77e0aec82 test-data/keras_model04 Binary file test-data/keras_model04 has changed diff -r 8b47a3c08d97 -r 2ac77e0aec82 test-data/keras_params04.tabular --- a/test-data/keras_params04.tabular Wed Mar 11 17:09:06 2020 +0000 +++ b/test-data/keras_params04.tabular Tue Apr 13 20:42:24 2021 +0000 @@ -22,7 +22,7 @@ @ schedule_decay schedule_decay: None @ seed seed: 42 @ steps_per_epoch steps_per_epoch: None -@ validation_data validation_data: None +@ validation_fraction validation_fraction: 0.1 @ validation_steps validation_steps: None @ verbose verbose: 0 * layers_0_Dense__class_name layers_0_Dense__class_name: 'Dense' diff -r 8b47a3c08d97 -r 2ac77e0aec82 test-data/ohe_in_w_header.tabular --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/ohe_in_w_header.tabular Tue Apr 13 20:42:24 2021 +0000 @@ -0,0 +1,9 @@ +Label +0 +1 +2 +3 +3 +2 +1 +0 diff -r 8b47a3c08d97 -r 2ac77e0aec82 test-data/ohe_in_wo_header.tabular --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/ohe_in_wo_header.tabular Tue Apr 13 20:42:24 2021 +0000 @@ -0,0 +1,8 @@ +0 +1 +2 +3 +3 +2 +1 +0 diff -r 8b47a3c08d97 -r 2ac77e0aec82 test-data/ohe_out_4.tabular --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/ohe_out_4.tabular Tue Apr 13 20:42:24 2021 +0000 @@ -0,0 +1,8 @@ +1 0 0 0 +0 1 0 0 +0 0 1 0 +0 0 0 1 +0 0 0 1 +0 0 1 0 +0 1 0 0 +1 0 0 0 diff -r 8b47a3c08d97 -r 2ac77e0aec82 test-data/ohe_out_5.tabular --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/ohe_out_5.tabular Tue Apr 13 20:42:24 2021 +0000 @@ -0,0 +1,8 @@ +1 0 0 0 0 +0 1 0 0 0 +0 0 1 0 0 +0 0 0 1 0 +0 0 0 1 0 +0 0 1 0 0 +0 1 0 0 0 +1 0 0 0 0 diff -r 8b47a3c08d97 -r 2ac77e0aec82 test-data/pca_classical_header_names_output.dat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/pca_classical_header_names_output.dat Tue Apr 13 20:42:24 2021 +0000 @@ -0,0 +1,300 @@ +-3.9779 1.8818 2.6506 -1.1628 -0.0983 +-2.3700 0.6756 -1.6186 -1.4164 1.0327 +-3.0925 2.4577 -1.8726 -0.4041 1.5016 +-4.0151 2.3686 0.3256 -0.0685 -0.2168 +-4.7065 3.1394 2.3137 0.1907 -1.6303 +-4.9613 4.6941 1.2908 1.0298 -0.8817 +-4.8364 5.2936 0.8793 1.3212 0.0849 +-5.0224 2.7565 4.6351 -0.5397 -1.3489 +-2.9068 1.6461 -1.9066 -0.5100 -0.6820 +-4.7713 4.0171 2.1659 0.5434 -1.4630 +-2.7521 -1.9309 -0.9117 -3.5728 1.7161 +-3.7407 1.3845 0.0141 -1.5357 1.3068 +-4.3751 1.0682 2.3906 -1.5298 0.9064 +-2.8532 0.2430 -0.8937 -1.7428 -1.1825 +-2.4091 -0.1393 -0.0986 -2.0343 1.5498 +-3.8699 2.7278 0.9261 -0.4924 0.7933 +-4.6180 3.2535 2.4650 -0.0468 0.8258 +-2.3362 3.2961 -2.7247 0.9321 -0.1294 +-1.7741 0.3277 -3.2195 -1.6272 1.9721 +-2.9188 3.5196 -1.5959 0.6981 0.3541 +-4.0500 2.5696 1.0924 -0.1582 -1.7489 +-5.3435 6.4383 1.7066 1.9754 0.9120 +-4.1454 6.1296 -0.3939 1.8899 0.9309 +-2.4452 -0.6422 0.2580 -2.5687 0.0322 +-5.2047 7.4266 2.4849 2.8623 -1.3975 +-2.5237 -2.4427 -1.5498 -3.1847 -1.6248 +-1.7613 1.6919 -4.6466 -0.5331 1.3921 +-1.1236 2.5796 -4.4469 0.3771 0.0692 +-2.5892 3.4039 -1.3071 0.2542 0.1349 +-3.5099 -0.9352 1.4462 -2.5959 -0.3994 +-3.9546 6.3431 0.5939 2.3052 -0.2344 +-2.0819 -1.6617 -1.0140 -3.0790 1.1571 +-2.6320 0.0703 -0.0526 -1.5092 -1.8043 +-1.8865 0.2234 -2.0628 -1.9632 2.3486 +-4.5803 3.1525 2.6718 -0.3104 0.7210 +-6.5473 2.5731 6.0056 -0.6369 -1.2620 +-5.8360 4.1304 4.6222 0.5425 -0.1996 +-1.1136 3.4820 -5.1375 0.4626 3.1966 +-4.7698 0.9659 3.3912 -1.9008 -0.0558 +-2.4391 -0.7627 -1.6123 -1.9380 -0.8111 +-4.8859 4.2069 1.6117 0.6831 0.8832 +-2.2466 -1.0655 -1.2645 -2.4867 -0.1625 +-4.4644 5.0000 1.1159 1.6869 -0.4784 +-3.7358 0.9995 1.6597 -1.3727 -1.7457 +-5.8271 3.6580 5.8537 -0.0174 -0.9750 +-4.7392 4.2895 2.1369 0.6907 -0.6801 +-1.5432 2.7403 -5.0837 0.0664 2.6107 +-5.7249 7.7343 3.2678 3.5103 -2.0555 +-4.2566 5.3778 1.2450 1.4052 0.2429 +-5.7932 5.3928 4.6237 1.0285 1.0814 +-2.9574 -1.1660 1.2251 -2.5803 -0.5026 +-2.0365 4.7362 -3.8569 1.8582 -0.6083 +-5.1883 6.2608 1.6921 2.1737 0.9110 +-5.5934 1.2903 5.3088 -1.4372 0.2000 +-1.4178 0.5340 -3.0765 -1.4210 1.9659 +-5.1568 4.3100 2.6279 0.8400 -0.4656 +-4.2551 3.3395 1.2265 -0.0344 -0.0296 +-6.4636 3.6525 5.4351 -0.1493 1.1392 +-4.0271 -0.6214 2.0667 -2.5704 0.5389 +-3.2885 2.2421 0.4406 -0.5508 0.4760 +-3.2320 3.1264 0.1610 0.0045 -0.3199 +-2.6003 5.2398 -2.1366 1.6829 0.7428 +-4.3207 1.7506 1.6012 -0.9072 -1.5917 +-1.9287 2.7030 -3.8706 0.1751 0.9751 +-4.6549 5.5519 2.1315 1.7555 -0.4025 +-2.4743 1.5111 -1.6381 -0.8537 -0.4237 +-1.2837 3.5483 -5.9098 0.8155 0.5023 +-3.9514 5.4703 0.2135 1.6665 0.0226 +-3.1575 3.1697 -2.0242 -0.1906 2.4084 +-6.7971 3.1578 6.8243 -0.5140 -0.4121 +-5.9999 3.1135 6.0259 0.1711 -2.0321 +-2.3450 1.9814 -1.1103 -0.7338 0.6581 +-1.5478 0.3095 -3.1375 -1.9311 2.3145 +-3.6067 1.2237 -0.4271 -1.2399 -0.0987 +-3.0574 -0.0303 -1.0815 -1.5251 -1.7385 +-3.7608 4.9627 0.5748 1.3373 1.6977 +-3.3834 2.2529 -1.4015 -0.3531 -0.8381 +-5.3297 2.0845 4.0157 -1.0934 0.1069 +-4.6415 5.6565 1.0886 1.6713 -0.3536 +-4.7611 4.6882 1.0939 0.9883 1.7929 +-1.7499 1.7738 -2.6457 -0.0629 -0.5751 +-5.1579 7.5589 1.1299 3.1680 -0.8202 +-3.4019 -1.4226 0.3991 -2.5729 -0.9099 +-1.6689 1.3580 -3.7300 -0.7291 1.5630 +-5.5132 6.6256 3.6086 1.9423 0.3727 +-4.4010 7.0180 1.1796 2.6417 0.9847 +-2.1174 3.1273 -2.6107 -0.2004 2.3541 +-2.2818 -0.7861 -1.5672 -1.8685 -1.2308 +-4.2055 4.8158 -0.1348 1.2570 -0.2039 +-2.2741 1.1907 -1.5868 -1.0998 -0.5999 +-3.0433 3.1513 -1.8017 0.1704 0.3636 +-5.3872 1.7330 5.6772 -1.1538 -0.2345 +-3.5773 2.5712 -0.8771 0.2747 -1.2405 +-3.0843 1.4711 -0.1928 -1.2214 1.2785 +-1.9572 3.5730 -4.2197 0.3158 2.0016 +-2.3444 4.7106 -3.7159 1.0094 1.7919 +-3.4024 1.1605 0.5845 -1.1358 -0.6689 +-3.2321 4.3272 -1.2592 1.0365 -0.4073 +-5.0553 5.8588 3.0041 1.9760 -0.7261 +-3.6706 1.0101 1.8198 -1.8471 1.1714 +8.9574 3.4341 -0.6861 1.5391 0.1971 +10.4081 3.3686 0.6688 0.9791 2.2503 +8.8871 0.8254 3.9087 -0.9576 1.5038 +2.1683 4.0337 -3.6737 1.1996 0.8734 +5.7699 3.5062 -1.2833 0.8577 2.4657 +11.3777 1.8612 2.4649 0.1035 0.6817 +10.2968 3.5175 1.6948 1.6534 -1.0812 +7.4297 -0.8987 3.2658 -1.7151 -1.7543 +0.3252 3.7494 -4.2495 1.5590 -1.5370 +10.1331 4.8737 0.4858 2.3869 1.3120 +9.7602 2.5946 1.2877 0.8963 -0.9431 +6.3294 0.2420 0.0602 -0.3493 -2.5248 +-1.0055 -0.1004 -1.8691 -2.0088 1.7743 +7.0020 0.1138 2.6978 -1.2615 0.7305 +-0.8476 3.5869 -4.4656 1.2269 -1.3229 +1.5347 3.8958 -2.1649 0.5727 2.8613 +-1.1039 -1.9065 -1.5394 -2.3618 -2.7727 +0.8179 -1.7488 -0.4802 -2.6368 -1.4583 +1.4527 1.0742 -2.4115 -0.3672 -1.6999 +2.5720 -0.8562 0.7638 -2.6926 1.6123 +6.1515 -1.1095 3.4326 -2.4435 1.2520 +1.0178 1.8481 -3.4738 -0.0814 0.4915 +4.8837 2.0690 -1.0561 0.4931 -2.2182 +6.0339 2.9506 0.3218 0.6312 1.5915 +9.3950 -1.1761 4.1952 -2.3244 1.4185 +8.9403 4.0562 1.0275 1.7812 0.6851 +2.9249 -1.4130 2.0969 -2.9718 0.8180 +5.1324 2.3888 -0.7332 0.2684 1.1412 +0.9835 -1.6716 0.8378 -3.0465 0.5331 +1.1708 1.4905 -1.3652 -0.1570 -2.2617 +-1.8828 2.0223 -3.2202 -0.0543 -1.9808 +0.5994 3.1729 -4.3744 0.9607 -0.7149 +7.1452 -0.1955 3.9804 -1.6216 0.4437 +8.1279 2.8675 1.1357 0.9555 -0.2832 +4.7280 2.5837 -0.5679 -0.0291 2.4888 +10.7502 1.9831 2.6421 0.5508 -1.3455 +3.4919 0.5382 -0.2017 -1.4828 1.4970 +1.6535 -0.3138 -0.6716 -1.4892 -1.0583 +-0.6194 -1.1388 -2.0794 -2.2235 -1.8344 +-1.6807 2.3272 -4.5348 0.4232 -1.1923 +-0.0933 2.2712 -4.4117 0.2252 -1.4704 +0.9280 1.2142 -1.1817 -0.4388 -1.7023 +7.6300 2.3460 -0.7224 0.8452 -1.0681 +4.8565 4.5339 -1.3839 1.3020 2.7231 +6.4818 2.3348 0.5405 0.3241 0.3556 +8.7788 4.0387 -0.5764 2.0785 -1.5655 +7.3565 2.8117 1.2035 0.7784 0.3995 +4.5695 1.5832 -1.9081 0.1707 -1.8627 +8.6604 3.4046 -0.1895 1.9467 -2.1641 +7.4043 2.7787 -1.2558 1.0864 -0.3961 +1.5577 3.6391 -3.9646 0.8673 0.8518 +2.5617 -1.7256 -0.1226 -2.3352 -1.2180 +3.9498 0.7254 0.1543 -0.6388 -0.7131 +5.4952 2.8144 -1.4037 0.7478 0.5767 +7.4705 4.1598 -2.0259 1.8600 -0.0993 +0.0598 0.8416 -1.8465 -1.1915 1.1069 +3.1833 2.4826 -1.7316 0.3751 -0.1741 +-0.8004 -1.5851 -0.3839 -3.2690 1.6516 +2.8531 0.6398 0.3016 -1.1929 0.3837 +8.7954 4.0057 0.5143 1.4523 0.8167 +7.6619 1.6910 0.6441 0.3695 -0.7369 +2.1000 1.4302 -0.4868 -0.3345 -1.5018 +3.2123 2.3107 -2.2237 0.0569 1.4980 +9.7191 1.9952 2.9522 -0.2021 1.3635 +6.7689 0.8412 0.7453 -0.4112 -1.8253 +-0.2193 2.5655 -4.8300 0.4753 -0.3690 +4.1903 1.7643 -2.3111 0.2086 -1.7388 +0.2129 2.0407 -2.9543 0.2723 -1.4070 +0.3409 -1.3345 -1.3839 -2.5782 0.0244 +10.9350 1.1854 3.4640 -0.0883 -0.3700 +5.8165 0.6966 0.3014 -0.4095 -1.0547 +1.1058 1.6680 -2.1525 -0.5345 0.1171 +5.9936 -1.3469 1.5152 -1.8738 -2.3045 +-1.8666 -1.9038 -1.3508 -2.8457 -0.8487 +4.7057 3.0603 -2.0698 1.1172 -1.2828 +4.8382 2.7905 -2.4100 1.0784 -1.8450 +7.7583 -0.1178 3.4031 -1.0477 -1.6762 +-1.0944 -1.7645 0.1859 -2.5096 -2.9060 +6.7410 -0.4974 3.0210 -1.5827 0.0429 +2.8538 0.5411 0.4132 -1.6065 1.2372 +7.7713 1.7433 2.3259 -0.0797 0.8617 +4.9205 -1.1654 0.4683 -1.8680 -2.2668 +3.9175 0.5662 0.1128 -1.3169 1.9494 +-0.8118 -0.8348 -2.4830 -2.1239 -1.3528 +5.1125 -1.0569 2.7024 -2.3925 1.2405 +-0.3321 3.5314 -2.5750 0.4625 2.4769 +6.0636 -0.2583 1.0393 -1.1765 -2.0102 +10.2001 4.4529 0.5351 2.4796 -2.2048 +6.0224 0.4141 3.0444 -1.6036 1.3780 +9.5469 2.9457 1.8870 1.5290 -1.8539 +1.2694 0.9305 -1.2315 -0.5435 -1.8862 +7.3444 3.6803 -1.8285 1.8223 -0.6988 +0.8728 -1.0305 -1.6295 -1.8965 -1.8792 +-0.8348 2.7660 -5.3706 0.4722 -0.2320 +7.9119 2.9566 -0.1448 0.7199 1.3050 +1.2929 -1.3724 0.0347 -3.0890 1.5365 +6.4039 0.7545 2.1608 -1.1811 0.7715 +-1.7913 -1.2703 -0.6435 -2.7504 0.4447 +0.0868 -0.4073 -1.2184 -1.6489 -2.2725 +4.9808 -1.5720 2.3203 -2.7613 1.7252 +-2.5810 -5.5079 0.0561 2.7450 -1.9096 +0.0370 -2.1438 -0.4775 -3.6280 1.6759 +1.0997 -3.5629 1.4259 1.7291 -1.2305 +-1.3638 -2.9435 -0.1034 -1.4507 -0.9311 +-0.7078 -4.3400 -1.1441 0.4367 -1.7198 +-0.5174 -3.5645 0.2025 0.4664 0.8917 +-2.6934 -6.0138 -1.9617 2.8409 -1.2291 +-0.9761 -2.4423 -1.2032 -2.4114 -2.0578 +0.4854 -5.7924 0.7961 2.7641 0.1446 +0.2325 -3.0261 -0.5759 -1.7790 0.5984 +1.4671 -1.9240 0.8327 -1.8960 -0.4687 +-2.5020 -5.9264 -1.0911 2.3968 0.3954 +0.5726 -3.6055 1.0491 -0.0200 1.7178 +1.2348 -2.2932 1.4641 -1.1600 0.3434 +1.5601 -1.7994 0.7362 -1.6966 0.7891 +-1.2684 -4.2416 -1.5761 0.0715 -1.2373 +-1.2743 -1.4687 0.5370 -2.5136 1.0946 +-0.1360 -4.4661 -0.0391 0.5382 2.6005 +-0.3517 -4.6240 -0.4723 1.6165 -2.1852 +1.4760 -2.5560 0.2351 -0.9202 0.4155 +-1.7783 -5.3517 0.7277 3.2291 1.2118 +1.6356 -3.7406 0.1185 1.1998 -2.1563 +-1.5925 -4.0036 -0.4063 -0.3156 1.4120 +0.5318 -6.1624 1.3086 4.4905 -1.6720 +-2.1599 -2.1987 -1.7868 -2.7058 -0.8553 +-0.1707 -3.3282 0.2381 -0.0381 0.8412 +0.2620 -2.7657 -0.3002 -2.0651 -1.3784 +-1.4631 -2.2472 -0.7439 -2.3037 1.4133 +-0.6767 -2.6672 0.4721 -0.4983 -0.3085 +0.8239 -2.9922 0.8695 1.0520 -1.3905 +-2.8612 -4.9086 -0.2330 1.8419 -2.0691 +0.9513 -4.1058 -0.0948 0.4003 0.9779 +-0.7449 -2.5754 0.1638 -0.3664 -1.0395 +-2.8790 -6.2301 -1.0229 3.2147 -1.2238 +0.4482 -6.0936 0.7186 2.6087 1.1673 +-0.8581 -4.9450 1.2239 2.8168 1.9155 +-1.9585 -5.5486 0.1892 2.2741 0.9021 +-0.7563 -3.0605 0.3737 -1.2120 -0.5686 +-1.2176 -5.9017 -0.7336 3.0326 -1.7117 +-0.3342 -6.3764 -0.2172 4.3070 -1.8445 +-1.8562 -1.9825 0.1295 -1.7173 1.1371 +-0.2782 -4.6277 1.0273 1.3582 1.5796 +-2.8011 -3.9132 -0.0397 -0.1702 0.0073 +0.4691 -5.7114 1.0759 2.0051 2.1326 +-0.3390 -3.6590 -0.0755 -0.2534 1.4111 +-1.6579 -2.2403 0.1202 -2.8767 1.5805 +-1.9985 -1.4155 -0.0361 -2.4219 1.1876 +-0.7262 -2.5969 -0.9169 -1.8642 -1.8831 +0.2857 -6.9537 -0.1326 4.3486 -0.2990 +0.3086 -4.2096 1.1225 0.8869 2.5561 +-1.0663 -4.8302 -0.2336 1.1157 1.8525 +1.8021 -2.9988 0.2358 -0.4046 0.6294 +-0.6291 -4.2600 -0.6726 1.3688 -0.7486 +-0.3361 -2.0217 -0.1530 -1.7010 -2.3760 +1.2746 -3.1963 1.5362 -0.5552 0.5358 +1.3034 -4.6254 1.0466 0.2558 2.0886 +-1.8983 -4.7895 -0.5294 2.0973 -1.6399 +0.4626 -5.0153 1.1064 3.2728 -0.2280 +0.7110 -3.3192 -0.2483 -0.9576 0.0827 +-0.1416 -5.5202 1.0561 2.5331 0.7097 +-0.7655 -3.2629 0.7123 0.0562 1.2078 +-1.3523 -4.5564 0.2855 1.3386 -2.0493 +-1.7088 -2.2341 0.0825 -2.0599 0.8335 +-3.1236 -5.9987 -0.0811 3.0773 1.9977 +1.2663 -4.4825 1.5603 1.2249 1.6582 +-0.6526 -5.8705 0.9230 2.7318 1.7473 +0.3953 -2.5365 -0.0945 -3.0766 1.7426 +-0.1625 -3.4281 0.1297 -0.4754 1.6961 +-2.2140 -5.0133 -0.0794 0.9143 2.5583 +-0.4613 -6.2075 1.2719 4.1384 2.7730 +-1.4160 -7.0144 -0.4855 3.6068 0.5113 +0.6889 -3.8158 1.3029 0.6781 1.8137 +0.9439 -4.3010 0.8782 0.0062 2.0116 +-1.8597 -3.7948 -1.2024 -0.3578 -2.7539 +-1.6633 -3.2509 -1.2846 -1.4958 0.0063 +-1.6431 -2.0504 -0.6246 -2.3438 -2.7969 +-2.3001 -4.4964 -0.8472 -0.0680 -0.8250 +-1.5611 -4.4606 0.2359 0.9168 -0.6425 +1.3137 -1.1202 1.7077 -2.6874 1.5428 +-1.6780 -5.6718 0.0590 2.3780 -1.0233 +-2.5783 -6.3740 -0.3193 3.5583 3.0596 +-0.6061 -2.7607 -1.2368 -1.6965 -2.5497 +-2.6190 -3.5589 0.1136 0.0072 2.0735 +-1.0030 -6.4175 0.5149 3.7496 0.7330 +-1.7912 -5.1464 -1.0372 1.4546 -0.7956 +-1.5792 -4.4416 0.1851 0.9401 -1.6688 +0.2980 -4.1670 -0.0238 0.2527 -0.5423 +-1.1631 -3.4712 0.8661 -0.5976 1.4833 +-0.2476 -5.4577 -0.6047 2.7129 -1.6734 +0.2774 -6.7209 0.9426 4.4414 -0.2085 +-2.3883 -2.2052 -1.6941 -2.3223 -1.2636 +-1.3874 -4.1603 0.0421 0.9842 1.4190 +-2.8690 -5.6070 0.0897 3.4202 1.5811 +-0.6246 -6.5834 0.4792 3.6943 1.5019 +0.0832 -2.1370 -1.5266 -2.4836 -2.9471 +0.4752 -5.1350 1.0637 3.0672 -1.3305 +-1.1580 -4.1051 0.2756 1.9264 -1.8723 +-1.5835 -4.6959 -0.7588 -0.2192 0.3629 +-2.3501 -1.8305 -1.6013 -2.4534 -2.6362 +-0.9423 -3.9026 -0.2186 0.8125 -2.2811 diff -r 8b47a3c08d97 -r 2ac77e0aec82 test-data/pca_classical_output.dat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/pca_classical_output.dat Tue Apr 13 20:42:24 2021 +0000 @@ -0,0 +1,300 @@ +-3.9779 1.8818 2.6506 -1.1628 -0.0983 +-2.3700 0.6756 -1.6186 -1.4164 1.0327 +-3.0925 2.4577 -1.8726 -0.4041 1.5016 +-4.0151 2.3686 0.3256 -0.0685 -0.2168 +-4.7065 3.1394 2.3137 0.1907 -1.6303 +-4.9613 4.6941 1.2908 1.0298 -0.8817 +-4.8364 5.2936 0.8793 1.3212 0.0849 +-5.0224 2.7565 4.6351 -0.5397 -1.3489 +-2.9068 1.6461 -1.9066 -0.5100 -0.6820 +-4.7713 4.0171 2.1659 0.5434 -1.4630 +-2.7521 -1.9309 -0.9117 -3.5728 1.7161 +-3.7407 1.3845 0.0141 -1.5357 1.3068 +-4.3751 1.0682 2.3906 -1.5298 0.9064 +-2.8532 0.2430 -0.8937 -1.7428 -1.1825 +-2.4091 -0.1393 -0.0986 -2.0343 1.5498 +-3.8699 2.7278 0.9261 -0.4924 0.7933 +-4.6180 3.2535 2.4650 -0.0468 0.8258 +-2.3362 3.2961 -2.7247 0.9321 -0.1294 +-1.7741 0.3277 -3.2195 -1.6272 1.9721 +-2.9188 3.5196 -1.5959 0.6981 0.3541 +-4.0500 2.5696 1.0924 -0.1582 -1.7489 +-5.3435 6.4383 1.7066 1.9754 0.9120 +-4.1454 6.1296 -0.3939 1.8899 0.9309 +-2.4452 -0.6422 0.2580 -2.5687 0.0322 +-5.2047 7.4266 2.4849 2.8623 -1.3975 +-2.5237 -2.4427 -1.5498 -3.1847 -1.6248 +-1.7613 1.6919 -4.6466 -0.5331 1.3921 +-1.1236 2.5796 -4.4469 0.3771 0.0692 +-2.5892 3.4039 -1.3071 0.2542 0.1349 +-3.5099 -0.9352 1.4462 -2.5959 -0.3994 +-3.9546 6.3431 0.5939 2.3052 -0.2344 +-2.0819 -1.6617 -1.0140 -3.0790 1.1571 +-2.6320 0.0703 -0.0526 -1.5092 -1.8043 +-1.8865 0.2234 -2.0628 -1.9632 2.3486 +-4.5803 3.1525 2.6718 -0.3104 0.7210 +-6.5473 2.5731 6.0056 -0.6369 -1.2620 +-5.8360 4.1304 4.6222 0.5425 -0.1996 +-1.1136 3.4820 -5.1375 0.4626 3.1966 +-4.7698 0.9659 3.3912 -1.9008 -0.0558 +-2.4391 -0.7627 -1.6123 -1.9380 -0.8111 +-4.8859 4.2069 1.6117 0.6831 0.8832 +-2.2466 -1.0655 -1.2645 -2.4867 -0.1625 +-4.4644 5.0000 1.1159 1.6869 -0.4784 +-3.7358 0.9995 1.6597 -1.3727 -1.7457 +-5.8271 3.6580 5.8537 -0.0174 -0.9750 +-4.7392 4.2895 2.1369 0.6907 -0.6801 +-1.5432 2.7403 -5.0837 0.0664 2.6107 +-5.7249 7.7343 3.2678 3.5103 -2.0555 +-4.2566 5.3778 1.2450 1.4052 0.2429 +-5.7932 5.3928 4.6237 1.0285 1.0814 +-2.9574 -1.1660 1.2251 -2.5803 -0.5026 +-2.0365 4.7362 -3.8569 1.8582 -0.6083 +-5.1883 6.2608 1.6921 2.1737 0.9110 +-5.5934 1.2903 5.3088 -1.4372 0.2000 +-1.4178 0.5340 -3.0765 -1.4210 1.9659 +-5.1568 4.3100 2.6279 0.8400 -0.4656 +-4.2551 3.3395 1.2265 -0.0344 -0.0296 +-6.4636 3.6525 5.4351 -0.1493 1.1392 +-4.0271 -0.6214 2.0667 -2.5704 0.5389 +-3.2885 2.2421 0.4406 -0.5508 0.4760 +-3.2320 3.1264 0.1610 0.0045 -0.3199 +-2.6003 5.2398 -2.1366 1.6829 0.7428 +-4.3207 1.7506 1.6012 -0.9072 -1.5917 +-1.9287 2.7030 -3.8706 0.1751 0.9751 +-4.6549 5.5519 2.1315 1.7555 -0.4025 +-2.4743 1.5111 -1.6381 -0.8537 -0.4237 +-1.2837 3.5483 -5.9098 0.8155 0.5023 +-3.9514 5.4703 0.2135 1.6665 0.0226 +-3.1575 3.1697 -2.0242 -0.1906 2.4084 +-6.7971 3.1578 6.8243 -0.5140 -0.4121 +-5.9999 3.1135 6.0259 0.1711 -2.0321 +-2.3450 1.9814 -1.1103 -0.7338 0.6581 +-1.5478 0.3095 -3.1375 -1.9311 2.3145 +-3.6067 1.2237 -0.4271 -1.2399 -0.0987 +-3.0574 -0.0303 -1.0815 -1.5251 -1.7385 +-3.7608 4.9627 0.5748 1.3373 1.6977 +-3.3834 2.2529 -1.4015 -0.3531 -0.8381 +-5.3297 2.0845 4.0157 -1.0934 0.1069 +-4.6415 5.6565 1.0886 1.6713 -0.3536 +-4.7611 4.6882 1.0939 0.9883 1.7929 +-1.7499 1.7738 -2.6457 -0.0629 -0.5751 +-5.1579 7.5589 1.1299 3.1680 -0.8202 +-3.4019 -1.4226 0.3991 -2.5729 -0.9099 +-1.6689 1.3580 -3.7300 -0.7291 1.5630 +-5.5132 6.6256 3.6086 1.9423 0.3727 +-4.4010 7.0180 1.1796 2.6417 0.9847 +-2.1174 3.1273 -2.6107 -0.2004 2.3541 +-2.2818 -0.7861 -1.5672 -1.8685 -1.2308 +-4.2055 4.8158 -0.1348 1.2570 -0.2039 +-2.2741 1.1907 -1.5868 -1.0998 -0.5999 +-3.0433 3.1513 -1.8017 0.1704 0.3636 +-5.3872 1.7330 5.6772 -1.1538 -0.2345 +-3.5773 2.5712 -0.8771 0.2747 -1.2405 +-3.0843 1.4711 -0.1928 -1.2214 1.2785 +-1.9572 3.5730 -4.2197 0.3158 2.0016 +-2.3444 4.7106 -3.7159 1.0094 1.7919 +-3.4024 1.1605 0.5845 -1.1358 -0.6689 +-3.2321 4.3272 -1.2592 1.0365 -0.4073 +-5.0553 5.8588 3.0041 1.9760 -0.7261 +-3.6706 1.0101 1.8198 -1.8471 1.1714 +8.9574 3.4341 -0.6861 1.5391 0.1971 +10.4081 3.3686 0.6688 0.9791 2.2503 +8.8871 0.8254 3.9087 -0.9576 1.5038 +2.1683 4.0337 -3.6737 1.1996 0.8734 +5.7699 3.5062 -1.2833 0.8577 2.4657 +11.3777 1.8612 2.4649 0.1035 0.6817 +10.2968 3.5175 1.6948 1.6534 -1.0812 +7.4297 -0.8987 3.2658 -1.7151 -1.7543 +0.3252 3.7494 -4.2495 1.5590 -1.5370 +10.1331 4.8737 0.4858 2.3869 1.3120 +9.7602 2.5946 1.2877 0.8963 -0.9431 +6.3294 0.2420 0.0602 -0.3493 -2.5248 +-1.0055 -0.1004 -1.8691 -2.0088 1.7743 +7.0020 0.1138 2.6978 -1.2615 0.7305 +-0.8476 3.5869 -4.4656 1.2269 -1.3229 +1.5347 3.8958 -2.1649 0.5727 2.8613 +-1.1039 -1.9065 -1.5394 -2.3618 -2.7727 +0.8179 -1.7488 -0.4802 -2.6368 -1.4583 +1.4527 1.0742 -2.4115 -0.3672 -1.6999 +2.5720 -0.8562 0.7638 -2.6926 1.6123 +6.1515 -1.1095 3.4326 -2.4435 1.2520 +1.0178 1.8481 -3.4738 -0.0814 0.4915 +4.8837 2.0690 -1.0561 0.4931 -2.2182 +6.0339 2.9506 0.3218 0.6312 1.5915 +9.3950 -1.1761 4.1952 -2.3244 1.4185 +8.9403 4.0562 1.0275 1.7812 0.6851 +2.9249 -1.4130 2.0969 -2.9718 0.8180 +5.1324 2.3888 -0.7332 0.2684 1.1412 +0.9835 -1.6716 0.8378 -3.0465 0.5331 +1.1708 1.4905 -1.3652 -0.1570 -2.2617 +-1.8828 2.0223 -3.2202 -0.0543 -1.9808 +0.5994 3.1729 -4.3744 0.9607 -0.7149 +7.1452 -0.1955 3.9804 -1.6216 0.4437 +8.1279 2.8675 1.1357 0.9555 -0.2832 +4.7280 2.5837 -0.5679 -0.0291 2.4888 +10.7502 1.9831 2.6421 0.5508 -1.3455 +3.4919 0.5382 -0.2017 -1.4828 1.4970 +1.6535 -0.3138 -0.6716 -1.4892 -1.0583 +-0.6194 -1.1388 -2.0794 -2.2235 -1.8344 +-1.6807 2.3272 -4.5348 0.4232 -1.1923 +-0.0933 2.2712 -4.4117 0.2252 -1.4704 +0.9280 1.2142 -1.1817 -0.4388 -1.7023 +7.6300 2.3460 -0.7224 0.8452 -1.0681 +4.8565 4.5339 -1.3839 1.3020 2.7231 +6.4818 2.3348 0.5405 0.3241 0.3556 +8.7788 4.0387 -0.5764 2.0785 -1.5655 +7.3565 2.8117 1.2035 0.7784 0.3995 +4.5695 1.5832 -1.9081 0.1707 -1.8627 +8.6604 3.4046 -0.1895 1.9467 -2.1641 +7.4043 2.7787 -1.2558 1.0864 -0.3961 +1.5577 3.6391 -3.9646 0.8673 0.8518 +2.5617 -1.7256 -0.1226 -2.3352 -1.2180 +3.9498 0.7254 0.1543 -0.6388 -0.7131 +5.4952 2.8144 -1.4037 0.7478 0.5767 +7.4705 4.1598 -2.0259 1.8600 -0.0993 +0.0598 0.8416 -1.8465 -1.1915 1.1069 +3.1833 2.4826 -1.7316 0.3751 -0.1741 +-0.8004 -1.5851 -0.3839 -3.2690 1.6516 +2.8531 0.6398 0.3016 -1.1929 0.3837 +8.7954 4.0057 0.5143 1.4523 0.8167 +7.6619 1.6910 0.6441 0.3695 -0.7369 +2.1000 1.4302 -0.4868 -0.3345 -1.5018 +3.2123 2.3107 -2.2237 0.0569 1.4980 +9.7191 1.9952 2.9522 -0.2021 1.3635 +6.7689 0.8412 0.7453 -0.4112 -1.8253 +-0.2193 2.5655 -4.8300 0.4753 -0.3690 +4.1903 1.7643 -2.3111 0.2086 -1.7388 +0.2129 2.0407 -2.9543 0.2723 -1.4070 +0.3409 -1.3345 -1.3839 -2.5782 0.0244 +10.9350 1.1854 3.4640 -0.0883 -0.3700 +5.8165 0.6966 0.3014 -0.4095 -1.0547 +1.1058 1.6680 -2.1525 -0.5345 0.1171 +5.9936 -1.3469 1.5152 -1.8738 -2.3045 +-1.8666 -1.9038 -1.3508 -2.8457 -0.8487 +4.7057 3.0603 -2.0698 1.1172 -1.2828 +4.8382 2.7905 -2.4100 1.0784 -1.8450 +7.7583 -0.1178 3.4031 -1.0477 -1.6762 +-1.0944 -1.7645 0.1859 -2.5096 -2.9060 +6.7410 -0.4974 3.0210 -1.5827 0.0429 +2.8538 0.5411 0.4132 -1.6065 1.2372 +7.7713 1.7433 2.3259 -0.0797 0.8617 +4.9205 -1.1654 0.4683 -1.8680 -2.2668 +3.9175 0.5662 0.1128 -1.3169 1.9494 +-0.8118 -0.8348 -2.4830 -2.1239 -1.3528 +5.1125 -1.0569 2.7024 -2.3925 1.2405 +-0.3321 3.5314 -2.5750 0.4625 2.4769 +6.0636 -0.2583 1.0393 -1.1765 -2.0102 +10.2001 4.4529 0.5351 2.4796 -2.2048 +6.0224 0.4141 3.0444 -1.6036 1.3780 +9.5469 2.9457 1.8870 1.5290 -1.8539 +1.2694 0.9305 -1.2315 -0.5435 -1.8862 +7.3444 3.6803 -1.8285 1.8223 -0.6988 +0.8728 -1.0305 -1.6295 -1.8965 -1.8792 +-0.8348 2.7660 -5.3706 0.4722 -0.2320 +7.9119 2.9566 -0.1448 0.7199 1.3050 +1.2929 -1.3724 0.0347 -3.0890 1.5365 +6.4039 0.7545 2.1608 -1.1811 0.7715 +-1.7913 -1.2703 -0.6435 -2.7504 0.4447 +0.0868 -0.4073 -1.2184 -1.6489 -2.2725 +4.9808 -1.5720 2.3203 -2.7613 1.7252 +-2.5810 -5.5079 0.0561 2.7450 -1.9096 +0.0370 -2.1438 -0.4775 -3.6280 1.6759 +1.0997 -3.5629 1.4259 1.7291 -1.2305 +-1.3638 -2.9435 -0.1034 -1.4507 -0.9311 +-0.7078 -4.3400 -1.1441 0.4367 -1.7198 +-0.5174 -3.5645 0.2025 0.4664 0.8917 +-2.6934 -6.0138 -1.9617 2.8409 -1.2291 +-0.9761 -2.4423 -1.2032 -2.4114 -2.0578 +0.4854 -5.7924 0.7961 2.7641 0.1446 +0.2325 -3.0261 -0.5759 -1.7790 0.5984 +1.4671 -1.9240 0.8327 -1.8960 -0.4687 +-2.5020 -5.9264 -1.0911 2.3968 0.3954 +0.5726 -3.6055 1.0491 -0.0200 1.7178 +1.2348 -2.2932 1.4641 -1.1600 0.3434 +1.5601 -1.7994 0.7362 -1.6966 0.7891 +-1.2684 -4.2416 -1.5761 0.0715 -1.2373 +-1.2743 -1.4687 0.5370 -2.5136 1.0946 +-0.1360 -4.4661 -0.0391 0.5382 2.6005 +-0.3517 -4.6240 -0.4723 1.6165 -2.1852 +1.4760 -2.5560 0.2351 -0.9202 0.4155 +-1.7783 -5.3517 0.7277 3.2291 1.2118 +1.6356 -3.7406 0.1185 1.1998 -2.1563 +-1.5925 -4.0036 -0.4063 -0.3156 1.4120 +0.5318 -6.1624 1.3086 4.4905 -1.6720 +-2.1599 -2.1987 -1.7868 -2.7058 -0.8553 +-0.1707 -3.3282 0.2381 -0.0381 0.8412 +0.2620 -2.7657 -0.3002 -2.0651 -1.3784 +-1.4631 -2.2472 -0.7439 -2.3037 1.4133 +-0.6767 -2.6672 0.4721 -0.4983 -0.3085 +0.8239 -2.9922 0.8695 1.0520 -1.3905 +-2.8612 -4.9086 -0.2330 1.8419 -2.0691 +0.9513 -4.1058 -0.0948 0.4003 0.9779 +-0.7449 -2.5754 0.1638 -0.3664 -1.0395 +-2.8790 -6.2301 -1.0229 3.2147 -1.2238 +0.4482 -6.0936 0.7186 2.6087 1.1673 +-0.8581 -4.9450 1.2239 2.8168 1.9155 +-1.9585 -5.5486 0.1892 2.2741 0.9021 +-0.7563 -3.0605 0.3737 -1.2120 -0.5686 +-1.2176 -5.9017 -0.7336 3.0326 -1.7117 +-0.3342 -6.3764 -0.2172 4.3070 -1.8445 +-1.8562 -1.9825 0.1295 -1.7173 1.1371 +-0.2782 -4.6277 1.0273 1.3582 1.5796 +-2.8011 -3.9132 -0.0397 -0.1702 0.0073 +0.4691 -5.7114 1.0759 2.0051 2.1326 +-0.3390 -3.6590 -0.0755 -0.2534 1.4111 +-1.6579 -2.2403 0.1202 -2.8767 1.5805 +-1.9985 -1.4155 -0.0361 -2.4219 1.1876 +-0.7262 -2.5969 -0.9169 -1.8642 -1.8831 +0.2857 -6.9537 -0.1326 4.3486 -0.2990 +0.3086 -4.2096 1.1225 0.8869 2.5561 +-1.0663 -4.8302 -0.2336 1.1157 1.8525 +1.8021 -2.9988 0.2358 -0.4046 0.6294 +-0.6291 -4.2600 -0.6726 1.3688 -0.7486 +-0.3361 -2.0217 -0.1530 -1.7010 -2.3760 +1.2746 -3.1963 1.5362 -0.5552 0.5358 +1.3034 -4.6254 1.0466 0.2558 2.0886 +-1.8983 -4.7895 -0.5294 2.0973 -1.6399 +0.4626 -5.0153 1.1064 3.2728 -0.2280 +0.7110 -3.3192 -0.2483 -0.9576 0.0827 +-0.1416 -5.5202 1.0561 2.5331 0.7097 +-0.7655 -3.2629 0.7123 0.0562 1.2078 +-1.3523 -4.5564 0.2855 1.3386 -2.0493 +-1.7088 -2.2341 0.0825 -2.0599 0.8335 +-3.1236 -5.9987 -0.0811 3.0773 1.9977 +1.2663 -4.4825 1.5603 1.2249 1.6582 +-0.6526 -5.8705 0.9230 2.7318 1.7473 +0.3953 -2.5365 -0.0945 -3.0766 1.7426 +-0.1625 -3.4281 0.1297 -0.4754 1.6961 +-2.2140 -5.0133 -0.0794 0.9143 2.5583 +-0.4613 -6.2075 1.2719 4.1384 2.7730 +-1.4160 -7.0144 -0.4855 3.6068 0.5113 +0.6889 -3.8158 1.3029 0.6781 1.8137 +0.9439 -4.3010 0.8782 0.0062 2.0116 +-1.8597 -3.7948 -1.2024 -0.3578 -2.7539 +-1.6633 -3.2509 -1.2846 -1.4958 0.0063 +-1.6431 -2.0504 -0.6246 -2.3438 -2.7969 +-2.3001 -4.4964 -0.8472 -0.0680 -0.8250 +-1.5611 -4.4606 0.2359 0.9168 -0.6425 +1.3137 -1.1202 1.7077 -2.6874 1.5428 +-1.6780 -5.6718 0.0590 2.3780 -1.0233 +-2.5783 -6.3740 -0.3193 3.5583 3.0596 +-0.6061 -2.7607 -1.2368 -1.6965 -2.5497 +-2.6190 -3.5589 0.1136 0.0072 2.0735 +-1.0030 -6.4175 0.5149 3.7496 0.7330 +-1.7912 -5.1464 -1.0372 1.4546 -0.7956 +-1.5792 -4.4416 0.1851 0.9401 -1.6688 +0.2980 -4.1670 -0.0238 0.2527 -0.5423 +-1.1631 -3.4712 0.8661 -0.5976 1.4833 +-0.2476 -5.4577 -0.6047 2.7129 -1.6734 +0.2774 -6.7209 0.9426 4.4414 -0.2085 +-2.3883 -2.2052 -1.6941 -2.3223 -1.2636 +-1.3874 -4.1603 0.0421 0.9842 1.4190 +-2.8690 -5.6070 0.0897 3.4202 1.5811 +-0.6246 -6.5834 0.4792 3.6943 1.5019 +0.0832 -2.1370 -1.5266 -2.4836 -2.9471 +0.4752 -5.1350 1.0637 3.0672 -1.3305 +-1.1580 -4.1051 0.2756 1.9264 -1.8723 +-1.5835 -4.6959 -0.7588 -0.2192 0.3629 +-2.3501 -1.8305 -1.6013 -2.4534 -2.6362 +-0.9423 -3.9026 -0.2186 0.8125 -2.2811 diff -r 8b47a3c08d97 -r 2ac77e0aec82 test-data/pca_incremental_header_names_output.dat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/pca_incremental_header_names_output.dat Tue Apr 13 20:42:24 2021 +0000 @@ -0,0 +1,300 @@ +-4.5041 1.2787 -0.9244 -0.6417 2.4742 -0.6790 -2.2376 +-2.3058 0.3190 2.0467 -1.5089 -1.7879 -2.8580 2.3471 +-3.6298 1.9778 0.5695 3.2844 -2.1532 1.0649 0.2268 +-4.9371 1.9948 -1.1517 -0.7883 0.1443 0.3281 -1.6340 +-5.1251 2.1148 1.0578 -1.2113 2.7850 -0.4718 -0.5876 +-5.2311 3.1236 2.4521 -0.1645 2.0950 1.3657 -1.2221 +-5.2736 3.9401 3.1613 -0.4221 1.4421 0.6351 1.4170 +-5.8843 2.3108 -0.9970 -2.5925 4.5634 -1.7216 -0.6943 +-3.0847 0.9348 1.2297 -0.1673 -1.5983 -0.3054 -0.8598 +-5.0726 2.7358 2.1948 0.6672 2.8109 0.2199 0.2954 +-3.0489 -1.4621 -1.4039 2.2051 -2.1125 -3.5712 1.8233 +-3.9828 0.4789 -0.4798 3.1414 -0.2706 1.0323 -3.0673 +-4.7769 0.5637 -0.6189 2.4042 1.8522 -0.8892 0.1666 +-2.8177 -0.2411 1.1106 -1.6952 -0.7266 -2.7600 -0.0377 +-3.3395 0.6116 -2.4104 0.4482 -1.2702 -2.2185 1.2082 +-3.7895 1.3834 1.9512 0.4855 1.2103 0.2934 -1.2998 +-5.6850 2.9597 -0.6627 -1.3921 1.9849 -0.8803 0.8756 +-2.3684 1.9853 2.1848 1.9063 -1.9759 2.9765 -2.6155 +-2.7658 1.1415 -1.5911 -2.5974 -4.2491 -2.4650 1.0467 +-3.4687 2.6724 0.7399 -2.5064 -1.2477 1.3807 -2.8392 +-4.1960 1.4928 1.5341 3.2301 1.6231 0.5496 -0.1931 +-6.8974 5.6555 -0.4728 -0.2712 1.6418 2.8355 -1.2524 +-5.4610 5.7033 1.6135 -2.4726 -0.3671 0.4024 2.5259 +-3.6199 0.4197 -3.3176 0.7440 -0.9565 -3.1444 1.3050 +-6.9755 6.9895 0.8969 -1.2372 2.7908 1.0709 2.8530 +-2.4744 -2.4406 -1.2029 1.7749 -1.8143 -2.5760 -1.4119 +-2.2670 1.4244 0.3150 -0.3939 -4.8261 0.5653 -1.5405 +-1.2997 1.8646 1.6713 0.9233 -3.9371 1.9971 -2.1376 +-2.9030 2.7832 2.8769 -2.1591 -0.9938 -1.4089 2.2805 +-4.0193 -0.7911 -2.3511 -2.6334 0.8198 -3.1752 -1.7134 +-4.6438 5.1543 2.9044 -3.5749 1.3863 1.1820 0.2145 +-3.1379 -0.3608 -3.4466 2.6176 -2.5651 -3.1252 2.2431 +-3.3334 0.1605 -2.3825 -0.8492 -0.2283 -0.9548 -3.0823 +-1.8428 -0.3384 -0.2287 1.0854 -2.4548 0.2911 -3.1773 +-5.7377 2.9593 -1.3065 2.8244 2.0424 0.2718 0.8933 +-7.5818 1.9024 -2.0175 1.7637 5.6534 -0.4313 -0.7429 +-6.7842 3.2537 -0.5172 1.7928 4.5232 1.0479 -0.2527 +-2.6542 4.2982 -0.6507 -0.7068 -6.0759 0.4216 2.2052 +-4.7066 -0.0723 0.5610 2.7188 3.2642 -1.3372 -0.2390 +-3.1046 -0.4176 -2.2528 3.1483 -2.1742 -0.7089 -0.9199 +-5.1411 2.5961 1.4787 2.5253 1.9749 2.6935 -2.1514 +-3.0358 -0.4673 -3.0178 -0.1183 -2.0737 -1.9430 -1.7089 +-4.8013 3.3868 2.2209 -2.8917 1.9785 1.7562 -2.4000 +-4.8966 1.5345 -1.9107 1.6206 1.0586 -2.4528 2.2876 +-6.4597 2.5302 -0.0772 3.0385 5.9297 0.5882 -0.3289 +-5.9218 3.7935 -0.2556 3.3005 2.0236 1.1245 1.1257 +-2.6684 3.1373 -0.3467 -3.5191 -5.6729 -0.1143 -0.0563 +-6.6356 5.9313 2.3230 -4.2617 4.5651 2.7706 -2.2094 +-5.6003 4.9145 -0.0899 0.9846 1.1772 1.7796 0.3640 +-7.1334 4.7398 -0.3982 -1.1846 4.2620 0.3247 0.9009 +-3.7706 -0.4166 -2.7645 3.4809 0.1927 -2.6134 1.7933 +-2.5829 3.6848 2.0472 0.9575 -3.0212 3.5198 -2.3061 +-5.9636 4.7293 1.7384 -3.3395 2.2166 2.2397 -1.9459 +-5.6726 0.3054 0.5239 -1.8098 5.0980 -2.8714 0.6939 +-1.6695 0.2400 -0.7679 2.4374 -3.4909 1.2909 -3.0332 +-5.3286 2.8034 2.9264 -1.9200 3.2485 -0.4062 0.7878 +-4.1365 1.8401 2.8304 -2.6400 1.8543 -0.6305 -0.9748 +-7.3517 2.9113 -0.3355 -1.6157 4.9779 -1.2069 1.0193 +-4.1967 -0.9651 -1.0766 -0.8147 1.4782 -2.8124 -0.7958 +-3.3859 1.1867 0.7010 1.8196 0.6206 1.2032 -2.4485 +-4.8094 3.7086 -1.5026 -1.1737 -0.4332 -1.3418 2.0650 +-3.6897 4.9698 1.8855 1.2100 -2.0871 1.2348 3.0630 +-4.6351 1.0548 0.6174 -1.1733 1.8384 -1.7480 -0.2812 +-2.5884 2.4750 0.7398 1.9273 -3.9507 1.3361 0.0575 +-4.9906 4.0057 3.2665 -2.0939 2.9379 0.7270 0.5404 +-3.2473 1.8445 0.2434 -0.5658 -1.9457 -2.2797 2.6466 +-2.3835 3.6974 0.5424 0.1868 -5.9273 1.4366 0.1764 +-4.4944 4.1873 2.5387 2.3093 0.7909 2.4807 0.3451 +-4.0672 3.1357 0.7866 0.0835 -2.6209 -0.6464 2.6246 +-7.7257 2.4335 -0.7824 4.0495 6.3356 -0.7156 2.2593 +-7.7345 3.3520 -3.0476 3.4232 5.3875 -0.3854 2.2324 +-2.5709 1.6372 2.0053 0.0627 -1.1963 -1.7860 2.6362 +-1.4913 0.2742 2.0702 -1.8860 -3.6079 -3.4077 2.9305 +-3.8738 0.4747 -0.3085 0.2335 -0.4071 0.0756 -3.0254 +-4.1544 0.8081 -1.6855 -1.7544 -1.6783 -3.7309 2.5241 +-4.8867 4.3285 0.0026 0.5021 0.3675 2.2662 -0.5320 +-3.4362 1.1688 1.6552 -1.2709 -0.8309 0.0186 -2.1603 +-5.7805 1.1703 -0.7154 -1.9988 3.8637 -1.0734 -2.3152 +-6.2709 5.2044 -1.2410 2.2091 1.0452 3.1747 -1.3561 +-5.3901 3.6522 1.9170 0.3815 1.0644 0.8535 1.5809 +-2.3241 1.7176 0.5907 0.3335 -2.6000 -0.2806 0.7917 +-6.0218 6.1509 3.7438 -0.9355 2.0688 1.9320 2.2931 +-3.8865 -1.2257 -2.1561 2.3774 -0.2732 -2.2308 -0.1288 +-1.8827 1.0374 1.1856 0.3511 -3.8963 -0.1608 0.1192 +-6.2846 5.1593 2.3278 -0.6188 4.0817 1.5186 0.6472 +-5.2141 5.7113 2.8258 -0.2090 1.7114 2.6014 0.9906 +-2.5811 2.8134 1.9097 -2.6507 -2.8032 -0.9899 1.3097 +-3.0815 -0.4578 -3.1189 2.2872 -2.0861 -0.2196 -2.7690 +-6.1254 5.2751 -1.0343 -1.0472 -0.6193 -0.2364 2.9693 +-2.8232 1.3373 0.5949 -0.7927 -1.7707 -2.4858 2.1362 +-3.4122 2.3597 1.8698 0.2527 -1.5604 0.3673 0.1838 +-6.4323 1.4615 -2.8697 1.1520 4.9814 -0.7643 -1.1231 +-4.0745 1.7887 0.4200 0.5898 -0.4801 1.1216 -1.8534 +-3.2629 1.1370 1.8248 -1.1693 -0.5124 -2.8929 3.1263 +-2.0028 2.5104 3.1459 -2.4141 -3.8226 0.7029 -1.0988 +-2.7361 3.6728 2.8194 -0.5496 -3.3320 1.9027 -0.7531 +-3.5250 0.4456 0.3977 0.7169 0.7105 -0.6279 -1.2819 +-3.9791 3.6674 1.5133 0.6258 -0.9034 1.2040 0.3977 +-6.2804 5.0438 0.4767 -2.3433 3.3174 1.0917 -0.0308 +-3.7420 0.1593 -0.3654 -2.0204 1.6037 -1.1253 -3.2746 +9.5151 3.7062 3.8697 1.3868 0.2586 1.7338 1.0834 +8.5812 6.2908 -4.1399 -1.4445 -0.4607 1.1125 0.1729 +7.6440 3.5377 -4.4023 0.3615 2.5846 -1.2183 1.0357 +2.5921 3.1502 4.9758 -2.6982 -2.6638 0.6784 0.1647 +4.4183 5.1293 -1.9198 -1.9122 -2.0053 1.0818 -0.1255 +11.5799 3.0356 0.0777 3.1485 2.6135 1.7393 -1.2853 +10.6151 4.2457 2.7079 -2.5390 2.7172 0.4983 0.1686 +6.5518 1.4131 -4.3284 3.0582 2.4753 -1.4287 0.0280 +0.6110 2.7018 4.8455 1.9160 -2.9669 1.7329 1.0903 +8.8862 6.7098 -1.3650 0.0695 0.2906 3.0926 -0.2188 +8.3516 5.1600 -3.1937 -2.1437 0.9068 0.1059 -0.0776 +6.5749 1.0591 1.0860 -2.3285 0.6754 -1.9909 0.3649 +-1.3536 0.0963 -1.1881 -3.1040 -2.4649 -1.7361 -2.2365 +5.7554 2.5612 -4.7030 2.6323 1.4049 -0.6845 0.5814 +-2.5682 4.3850 -1.4615 1.9775 -4.6265 1.8620 0.5593 +1.5869 3.3199 3.0094 0.0874 -1.9313 1.4984 -0.1249 +0.0019 -2.7678 2.7422 0.3182 -0.7239 -2.9330 -0.4725 +2.3421 -2.9454 3.1008 3.8667 0.3177 -1.2439 -1.8251 +1.1281 1.5666 0.9091 -2.7407 -2.1087 -2.0198 0.9724 +1.5235 0.8024 -4.4624 1.8661 -0.6945 -1.5766 -0.8688 +7.4384 -0.9510 2.5739 0.7133 3.4514 -3.3296 1.7562 +1.9243 0.6118 4.2924 0.0358 -2.5054 0.8895 -1.6169 +4.9183 2.4368 1.8274 -0.6084 -0.2458 -0.1625 0.0769 +6.5999 2.8745 3.4413 -1.3241 0.8891 0.3147 0.4983 +10.2333 -0.1155 0.1643 4.0222 3.8264 -1.4876 0.6248 +6.7711 6.9607 -4.0865 0.3893 0.0512 1.4734 1.8907 +2.8361 -0.5592 -2.3155 0.2024 1.3347 -2.3676 -1.8030 +3.6792 4.2825 -2.5657 0.8910 -1.6217 0.2821 1.5377 +1.1960 -1.2069 -0.3808 2.9584 0.2167 -2.9221 1.3256 +2.5793 -0.1009 5.5918 0.3863 0.2953 -0.1268 -1.0559 +-2.5483 1.9288 0.6106 1.7118 -2.9326 0.0715 0.4489 +1.0182 2.3331 5.2430 -2.6561 -3.2526 -0.6230 1.7928 +6.2254 2.0926 -3.7485 2.8778 2.7909 -1.7703 1.8600 +7.7947 3.9599 0.3899 2.8628 1.3342 1.5191 0.8549 +5.9341 1.6811 5.0814 -1.7636 0.2261 0.0923 -0.4983 +8.9422 5.1988 -5.1226 -1.4216 1.8601 -0.2483 0.0129 +3.7559 0.7134 0.5774 2.1676 -0.3686 -0.1396 -0.9686 +1.2647 0.2938 -1.6141 -1.4450 -0.8494 -1.4320 -2.0799 +0.8697 -2.3541 4.8819 1.1583 -1.0850 -3.0040 1.1390 +-2.4243 2.2533 0.6132 -0.4352 -4.2540 0.4717 -0.2835 +0.8691 0.8276 5.7945 3.0405 -3.0247 0.7777 0.7993 +-0.0306 2.1994 -1.3816 -2.7338 -1.3169 -1.7597 0.1966 +6.8891 3.7843 -1.1987 -0.7267 -0.5589 1.1499 -1.3620 +4.9555 4.3737 3.2795 -2.9743 -0.9193 1.2818 -0.3394 +4.6003 4.9106 -4.1796 1.8274 -0.5694 0.3444 1.7707 +6.5173 6.8499 -4.3867 0.6973 -1.0706 2.3430 0.0319 +5.9594 4.7200 -3.3220 1.7297 0.5827 1.8873 -0.7937 +4.8011 1.7963 2.2601 -0.6781 -1.1054 -0.4366 0.0862 +9.4941 3.2988 4.8488 -1.5745 1.4571 0.8634 0.3784 +5.9275 5.0975 -1.9945 -1.7249 -1.7025 -0.2676 2.1382 +2.2637 2.3526 5.0792 2.9659 -2.8853 2.6294 -0.5906 +2.1362 -0.5662 -2.8698 -1.5406 -0.6178 -2.4869 -1.9779 +3.4238 1.6207 -2.0697 0.5927 0.0162 0.5742 -2.6645 +4.6129 4.0668 -0.4489 -0.0917 -1.6317 0.5627 1.0477 +5.6344 6.3936 -2.3886 -2.1122 -2.4168 1.2380 0.6516 +0.6899 -0.0045 2.5945 2.0729 -1.5520 0.0329 -0.7707 +2.1954 3.4315 -1.1342 3.2093 -1.9723 1.5515 0.1762 +-0.2728 -1.8801 0.5443 2.9489 -0.9169 -2.2882 -0.0039 +2.2464 1.6663 -1.2627 2.9359 -0.3243 -0.8919 1.4302 +7.8136 5.7358 -0.3169 -2.0148 0.3495 0.3957 1.5594 +7.2521 2.9262 -0.9792 -1.4871 0.7949 0.4403 -1.6491 +1.7315 1.7501 -0.2721 -1.8382 -0.2053 -0.5254 -1.7868 +4.5382 0.9630 5.3634 -1.6540 -1.0877 0.7456 -1.9428 +8.4922 4.3959 -4.0657 -1.0685 2.0394 0.3027 -1.5177 +5.8208 2.8653 -2.3174 3.0490 0.3595 -0.5681 1.6879 +-1.5657 3.4389 -0.8766 -0.7644 -5.0871 0.1973 0.8505 +2.9262 3.2748 -2.6100 -3.4518 -2.3979 -0.1388 -2.1841 +1.5202 0.3470 6.4457 -0.8811 -1.3563 -0.4038 0.2652 +0.2160 -0.8406 -1.2438 -1.9606 -1.8069 -2.7155 -1.5833 +9.9773 3.8447 -3.0340 -2.7374 2.8639 -1.6783 0.8315 +6.8182 0.6939 3.8276 0.0235 1.1482 -1.6252 1.8372 +0.4703 2.0718 -0.5704 0.1399 -2.3166 0.1054 -1.0614 +7.0703 -1.1055 1.8762 0.1576 2.2093 -2.5649 -0.3973 +-0.4376 -3.2665 3.1890 3.8191 -0.7461 -1.6104 -0.9830 +5.6321 2.2267 5.3601 2.1586 -0.6273 1.4508 0.5460 +4.3783 3.6338 1.5671 -0.9206 -1.8438 -0.2069 1.8630 +6.6664 2.3012 -4.4266 -2.9484 2.7377 -2.3245 -0.9019 +-0.7160 -1.9051 0.3750 1.8277 0.4336 -2.9009 0.0458 +6.8161 0.6358 -1.6462 -2.7192 2.7982 -1.8084 -2.3482 +3.6202 0.2021 2.5073 -2.1632 0.6444 -2.1642 -0.4466 +7.9950 2.4238 0.6365 -1.3418 2.4997 -0.0271 -1.1315 +6.3963 -1.4724 3.6385 2.0221 1.4533 -2.2412 0.4731 +5.1654 -0.2758 3.2312 0.1821 0.6037 -0.1159 -2.1626 +1.0380 -2.7407 5.4789 -0.6575 -1.1424 -2.0608 -1.9043 +3.8743 1.3289 -5.4026 2.9636 1.0426 -1.6882 0.5271 +0.8322 1.4722 6.1285 3.0091 -1.5825 2.4138 -0.5868 +4.6150 2.2866 -4.7298 1.6730 0.1353 -1.5406 0.7652 +8.7039 6.6432 -2.1439 -3.2018 0.8334 1.6967 -1.1076 +6.5330 0.6754 0.1167 1.6453 2.9371 -0.1888 -2.1854 +8.5000 4.9495 -1.9358 0.5401 1.9684 1.3168 0.1780 +0.8515 1.5139 0.3372 -2.5937 -1.0518 -2.3114 1.0306 +5.3179 6.1706 -3.1955 1.6488 -2.4046 1.8903 1.6645 +2.2969 -1.9570 4.6150 1.9233 -0.6721 -2.5942 1.5362 +-2.0710 3.3407 -0.3858 1.4794 -5.5546 1.0321 0.8251 +7.4623 4.0395 -0.3940 -1.0081 -0.1398 1.6219 -1.8175 +3.2457 -2.7162 5.0956 1.9736 0.5175 -2.9152 0.7246 +6.5881 1.7251 0.7603 -0.1360 1.9830 -2.0959 1.7091 +-0.0582 -3.1106 4.1112 3.1836 0.0464 -1.1565 -1.7583 +0.0513 -0.2091 0.3769 3.7662 -1.0985 -1.4892 1.0789 +6.2977 -1.5534 2.1208 -0.9169 2.2985 -3.2413 0.0615 +-1.4394 -5.9147 -0.1542 -0.8409 0.6219 1.6478 1.5854 +-0.4367 -1.3437 -3.8063 -0.3593 -1.6685 -2.1481 -3.4694 +2.2828 -3.9801 0.3987 -0.3808 2.0643 1.5617 -0.4308 +-0.6420 -3.2305 0.4085 -1.0408 0.0016 -2.2239 0.0187 +1.3416 -5.6774 3.4891 -1.2119 0.0337 -0.3871 0.0198 +-0.1420 -3.2416 -1.2991 0.0960 -0.2367 0.0961 1.4603 +-2.8178 -5.0957 -3.8157 -2.7428 -2.3669 1.3045 1.8838 +-1.3617 -1.8720 -3.0155 -0.5861 -1.5562 -1.9727 -2.8636 +0.2850 -4.3563 -5.1819 1.6696 -0.0587 3.0056 1.6736 +0.3583 -2.5959 -2.0437 3.6266 -1.2475 -0.3279 -0.5564 +0.5513 -0.3854 -4.3652 3.4373 -0.2906 -1.1745 0.2896 +-0.5884 -7.0655 1.7511 -1.6051 -0.4407 1.8331 0.9006 +0.3935 -2.6931 -4.0109 2.5334 0.0102 1.4028 -0.3750 +1.3565 -1.8875 -2.3231 0.5957 1.0166 -0.1657 -2.0777 +3.7613 -3.4500 4.5430 3.8266 1.6193 0.0156 -1.3127 +-1.6208 -3.4157 -4.4769 0.3612 -2.0838 1.1314 -2.2429 +-0.4794 -2.1701 0.9510 -1.3035 0.4743 -2.2567 -1.8181 +2.5691 -6.1575 4.8003 -2.6638 0.7564 -0.1210 0.6823 +-0.2381 -4.0798 -3.3514 1.4065 -0.4906 2.3233 -1.0396 +2.3010 -2.6211 0.2977 -2.3013 0.2922 -1.3277 -0.9939 +-1.5917 -4.6139 -3.1039 -3.1579 0.1047 1.6446 2.6565 +1.4751 -2.4914 -2.8961 0.4489 -0.1023 0.2975 1.6799 +0.7286 -5.8054 3.9412 -2.0106 0.3808 -0.4134 -0.8919 +1.3794 -5.6867 -1.9577 -0.1912 1.6085 3.3771 2.5230 +-1.1581 -3.1117 1.8577 3.4481 -1.4872 -1.6354 -0.7326 +-0.2917 -2.6622 -3.6147 -1.3967 -0.4247 0.6621 -2.0543 +2.4622 -4.3923 4.6318 3.2286 0.8290 -1.3138 -0.7092 +-0.3768 -3.3689 0.9185 3.4446 -0.7548 0.1917 -2.8933 +-1.5571 -1.2636 -4.4107 -0.4740 -0.5614 -1.1182 0.8865 +0.7017 -2.2599 -3.0353 -3.5220 0.7490 0.2524 -1.4167 +-2.0500 -5.2108 -0.5936 2.8702 0.0865 1.7500 1.8663 +3.0137 -5.0641 3.4237 3.1012 0.4598 0.6318 2.2810 +-1.5219 -1.6394 -4.8442 2.7113 -0.5852 1.1910 -1.9068 +-2.3981 -6.0576 -2.8749 -2.3686 -1.0002 2.5079 0.2015 +1.8921 -6.3274 -0.7450 -2.7750 0.8666 2.2501 -0.2021 +1.5814 -6.5836 3.2901 0.9566 1.9993 3.1253 1.3281 +-0.9830 -5.8270 -1.5955 -1.7203 0.1380 2.4005 -0.5153 +0.2115 -3.6162 0.4305 1.7197 0.5603 -0.5445 -0.9444 +-0.9981 -5.0750 -2.8310 -3.8982 -0.8326 0.7471 2.2110 +1.8743 -7.4837 2.1129 1.0955 1.0676 3.9861 1.5601 +-0.2173 -3.4647 3.5740 -0.5041 0.5984 -1.8010 -0.3018 +-0.8708 -3.0747 -5.4424 -0.2924 -0.2948 1.1786 1.4711 +-2.1813 -4.1987 -0.6857 -2.5649 -0.1683 -1.1085 0.0401 +1.0261 -4.8342 -2.5095 -3.2447 0.3524 0.5019 2.4819 +1.3312 -4.7451 1.9789 -1.0770 0.2929 0.0568 -1.0795 +-0.4084 -3.3231 1.7444 -2.2754 0.1706 -2.6516 -2.3484 +0.1271 -3.6357 5.1002 -0.8028 0.8378 -1.9041 -2.1182 +-0.3108 -2.5467 0.0172 0.5997 -0.8420 -2.4078 0.2985 +2.3229 -7.7318 0.5990 1.5900 0.6791 4.9678 0.7111 +2.2490 -5.2254 2.0891 -0.4591 1.4099 1.2195 0.1653 +0.8997 -5.9620 2.1464 -3.1994 0.2412 0.6705 -0.2757 +1.6351 -2.0544 -3.3725 2.7118 -0.5164 0.9859 -0.7674 +-0.3884 -3.7377 -2.0037 -3.7865 -0.8058 -0.1159 0.5169 +-1.2854 -0.6815 -3.7704 -1.2835 -0.8277 -2.8829 0.1127 +2.7532 -3.6849 1.9801 -1.1850 1.8530 -1.4601 0.8846 +1.3367 -3.5217 -4.2259 -1.7081 0.0284 0.6012 -0.8891 +0.2084 -6.3242 3.0772 -2.9331 0.7925 1.0186 -0.2763 +0.4991 -4.0107 -3.9909 -4.2000 0.7601 2.0399 0.2795 +2.0422 -3.9227 1.1896 0.2482 0.1053 -0.3852 -1.3664 +1.3943 -5.9124 0.3596 -2.3189 1.3754 1.5829 1.1913 +0.0278 -3.4528 -0.0648 -0.0516 0.5044 -0.1313 0.8862 +-1.1295 -4.1677 -2.8210 1.7549 0.2425 1.7050 -0.0711 +-0.8205 -2.8645 1.3685 1.3576 -0.0320 -2.0074 0.6672 +-2.3925 -5.9955 -2.2835 -4.1743 -0.4680 2.2192 0.7221 +2.4329 -4.5049 -0.5699 -3.2655 1.5086 0.7033 -0.3623 +0.0935 -5.5951 -2.6666 -0.0202 0.4672 3.1178 0.7036 +2.0608 -3.6542 2.5894 0.5949 0.1042 -1.9610 -2.1251 +1.3668 -4.3150 1.5058 -0.8470 0.3603 0.1046 -1.2965 +-0.7108 -5.7729 0.8471 -2.1552 -0.1474 0.4989 0.8110 +2.0865 -7.5741 2.4725 -3.2358 1.9803 3.5518 1.0200 +-0.7413 -6.5902 -3.3497 -4.0118 -0.7169 2.8734 -0.0154 +1.9231 -4.1669 0.6324 3.6388 1.1516 1.4119 1.9045 +0.9972 -3.3835 -3.8478 0.4535 -0.1122 0.9351 -0.6707 +-1.4850 -3.7556 -0.8861 2.0163 -1.0464 -0.5987 0.6890 +-0.6859 -4.0281 0.3683 3.6759 -1.1975 0.3557 -1.6469 +-1.8927 -1.7090 -2.2045 -2.1649 -0.6862 -2.7007 -2.6949 +-2.6846 -3.5555 -3.8040 -2.2653 -1.5920 -1.2491 0.6841 +0.3020 -5.6926 2.2922 -1.7143 1.0921 0.3534 -0.3102 +0.6378 0.0965 -3.4219 1.3310 0.4472 -2.1190 -0.2407 +-1.9094 -4.6694 -5.0032 -0.7066 -0.5111 2.2129 0.1366 +-0.5069 -7.3869 2.1287 -3.7626 -0.0722 1.8540 3.3739 +-0.8111 -2.1449 -2.0660 1.3755 -1.4613 -1.8106 -0.2669 +-2.1210 -3.7767 -1.4218 -1.0966 -0.4062 0.3971 -0.5842 +-1.0161 -5.3783 -5.2064 -4.0163 -0.1682 2.9910 0.1047 +-1.0107 -5.1148 -0.6561 0.8090 -1.0136 0.7724 2.2620 +0.3727 -5.6904 3.2177 3.2668 1.1544 0.6645 2.2839 +1.8337 -4.6784 1.9878 1.5645 0.4593 -0.2257 1.9580 +-0.1967 -4.0023 -0.2283 -1.0764 0.7112 -0.1925 -1.3203 +0.2941 -5.0048 -2.0272 2.6678 -0.5445 2.7349 1.9569 +2.5823 -7.5935 2.0663 0.1052 1.8888 3.5327 2.8774 +-2.5822 -2.1414 -2.1563 3.1156 -2.0672 -0.7239 -2.1677 +-1.2405 -3.6815 -2.5594 1.7052 -0.7032 1.3623 1.5195 +-2.8369 -5.1205 -4.5254 -0.1156 -0.6598 4.1633 0.1587 +0.3149 -6.2694 -2.0587 -0.3757 0.1556 3.2380 2.4606 +2.0357 -3.8799 4.1492 4.3973 -0.1287 -0.6609 -2.9551 +1.4539 -5.0928 -1.1201 1.5114 1.4226 3.0672 1.1131 +0.0900 -4.8785 0.4034 1.7989 1.0459 2.5805 -0.6281 +0.0903 -5.5698 2.3322 -1.8054 -0.3871 -1.4925 1.4869 +-3.2787 -0.9351 -3.4811 2.8220 -2.2307 -1.9613 -0.5324 +-0.8901 -3.3226 -2.1998 -3.3552 -0.2246 -0.9037 0.3637 diff -r 8b47a3c08d97 -r 2ac77e0aec82 test-data/pca_incremental_output.dat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/pca_incremental_output.dat Tue Apr 13 20:42:24 2021 +0000 @@ -0,0 +1,300 @@ +-4.5041 1.2787 -0.9244 -0.6417 2.4742 -0.6790 -2.2376 +-2.3058 0.3190 2.0467 -1.5089 -1.7879 -2.8580 2.3471 +-3.6298 1.9778 0.5695 3.2844 -2.1532 1.0649 0.2268 +-4.9371 1.9948 -1.1517 -0.7883 0.1443 0.3281 -1.6340 +-5.1251 2.1148 1.0578 -1.2113 2.7850 -0.4718 -0.5876 +-5.2311 3.1236 2.4521 -0.1645 2.0950 1.3657 -1.2221 +-5.2736 3.9401 3.1613 -0.4221 1.4421 0.6351 1.4170 +-5.8843 2.3108 -0.9970 -2.5925 4.5634 -1.7216 -0.6943 +-3.0847 0.9348 1.2297 -0.1673 -1.5983 -0.3054 -0.8598 +-5.0726 2.7358 2.1948 0.6672 2.8109 0.2199 0.2954 +-3.0489 -1.4621 -1.4039 2.2051 -2.1125 -3.5712 1.8233 +-3.9828 0.4789 -0.4798 3.1414 -0.2706 1.0323 -3.0673 +-4.7769 0.5637 -0.6189 2.4042 1.8522 -0.8892 0.1666 +-2.8177 -0.2411 1.1106 -1.6952 -0.7266 -2.7600 -0.0377 +-3.3395 0.6116 -2.4104 0.4482 -1.2702 -2.2185 1.2082 +-3.7895 1.3834 1.9512 0.4855 1.2103 0.2934 -1.2998 +-5.6850 2.9597 -0.6627 -1.3921 1.9849 -0.8803 0.8756 +-2.3684 1.9853 2.1848 1.9063 -1.9759 2.9765 -2.6155 +-2.7658 1.1415 -1.5911 -2.5974 -4.2491 -2.4650 1.0467 +-3.4687 2.6724 0.7399 -2.5064 -1.2477 1.3807 -2.8392 +-4.1960 1.4928 1.5341 3.2301 1.6231 0.5496 -0.1931 +-6.8974 5.6555 -0.4728 -0.2712 1.6418 2.8355 -1.2524 +-5.4610 5.7033 1.6135 -2.4726 -0.3671 0.4024 2.5259 +-3.6199 0.4197 -3.3176 0.7440 -0.9565 -3.1444 1.3050 +-6.9755 6.9895 0.8969 -1.2372 2.7908 1.0709 2.8530 +-2.4744 -2.4406 -1.2029 1.7749 -1.8143 -2.5760 -1.4119 +-2.2670 1.4244 0.3150 -0.3939 -4.8261 0.5653 -1.5405 +-1.2997 1.8646 1.6713 0.9233 -3.9371 1.9971 -2.1376 +-2.9030 2.7832 2.8769 -2.1591 -0.9938 -1.4089 2.2805 +-4.0193 -0.7911 -2.3511 -2.6334 0.8198 -3.1752 -1.7134 +-4.6438 5.1543 2.9044 -3.5749 1.3863 1.1820 0.2145 +-3.1379 -0.3608 -3.4466 2.6176 -2.5651 -3.1252 2.2431 +-3.3334 0.1605 -2.3825 -0.8492 -0.2283 -0.9548 -3.0823 +-1.8428 -0.3384 -0.2287 1.0854 -2.4548 0.2911 -3.1773 +-5.7377 2.9593 -1.3065 2.8244 2.0424 0.2718 0.8933 +-7.5818 1.9024 -2.0175 1.7637 5.6534 -0.4313 -0.7429 +-6.7842 3.2537 -0.5172 1.7928 4.5232 1.0479 -0.2527 +-2.6542 4.2982 -0.6507 -0.7068 -6.0759 0.4216 2.2052 +-4.7066 -0.0723 0.5610 2.7188 3.2642 -1.3372 -0.2390 +-3.1046 -0.4176 -2.2528 3.1483 -2.1742 -0.7089 -0.9199 +-5.1411 2.5961 1.4787 2.5253 1.9749 2.6935 -2.1514 +-3.0358 -0.4673 -3.0178 -0.1183 -2.0737 -1.9430 -1.7089 +-4.8013 3.3868 2.2209 -2.8917 1.9785 1.7562 -2.4000 +-4.8966 1.5345 -1.9107 1.6206 1.0586 -2.4528 2.2876 +-6.4597 2.5302 -0.0772 3.0385 5.9297 0.5882 -0.3289 +-5.9218 3.7935 -0.2556 3.3005 2.0236 1.1245 1.1257 +-2.6684 3.1373 -0.3467 -3.5191 -5.6729 -0.1143 -0.0563 +-6.6356 5.9313 2.3230 -4.2617 4.5651 2.7706 -2.2094 +-5.6003 4.9145 -0.0899 0.9846 1.1772 1.7796 0.3640 +-7.1334 4.7398 -0.3982 -1.1846 4.2620 0.3247 0.9009 +-3.7706 -0.4166 -2.7645 3.4809 0.1927 -2.6134 1.7933 +-2.5829 3.6848 2.0472 0.9575 -3.0212 3.5198 -2.3061 +-5.9636 4.7293 1.7384 -3.3395 2.2166 2.2397 -1.9459 +-5.6726 0.3054 0.5239 -1.8098 5.0980 -2.8714 0.6939 +-1.6695 0.2400 -0.7679 2.4374 -3.4909 1.2909 -3.0332 +-5.3286 2.8034 2.9264 -1.9200 3.2485 -0.4062 0.7878 +-4.1365 1.8401 2.8304 -2.6400 1.8543 -0.6305 -0.9748 +-7.3517 2.9113 -0.3355 -1.6157 4.9779 -1.2069 1.0193 +-4.1967 -0.9651 -1.0766 -0.8147 1.4782 -2.8124 -0.7958 +-3.3859 1.1867 0.7010 1.8196 0.6206 1.2032 -2.4485 +-4.8094 3.7086 -1.5026 -1.1737 -0.4332 -1.3418 2.0650 +-3.6897 4.9698 1.8855 1.2100 -2.0871 1.2348 3.0630 +-4.6351 1.0548 0.6174 -1.1733 1.8384 -1.7480 -0.2812 +-2.5884 2.4750 0.7398 1.9273 -3.9507 1.3361 0.0575 +-4.9906 4.0057 3.2665 -2.0939 2.9379 0.7270 0.5404 +-3.2473 1.8445 0.2434 -0.5658 -1.9457 -2.2797 2.6466 +-2.3835 3.6974 0.5424 0.1868 -5.9273 1.4366 0.1764 +-4.4944 4.1873 2.5387 2.3093 0.7909 2.4807 0.3451 +-4.0672 3.1357 0.7866 0.0835 -2.6209 -0.6464 2.6246 +-7.7257 2.4335 -0.7824 4.0495 6.3356 -0.7156 2.2593 +-7.7345 3.3520 -3.0476 3.4232 5.3875 -0.3854 2.2324 +-2.5709 1.6372 2.0053 0.0627 -1.1963 -1.7860 2.6362 +-1.4913 0.2742 2.0702 -1.8860 -3.6079 -3.4077 2.9305 +-3.8738 0.4747 -0.3085 0.2335 -0.4071 0.0756 -3.0254 +-4.1544 0.8081 -1.6855 -1.7544 -1.6783 -3.7309 2.5241 +-4.8867 4.3285 0.0026 0.5021 0.3675 2.2662 -0.5320 +-3.4362 1.1688 1.6552 -1.2709 -0.8309 0.0186 -2.1603 +-5.7805 1.1703 -0.7154 -1.9988 3.8637 -1.0734 -2.3152 +-6.2709 5.2044 -1.2410 2.2091 1.0452 3.1747 -1.3561 +-5.3901 3.6522 1.9170 0.3815 1.0644 0.8535 1.5809 +-2.3241 1.7176 0.5907 0.3335 -2.6000 -0.2806 0.7917 +-6.0218 6.1509 3.7438 -0.9355 2.0688 1.9320 2.2931 +-3.8865 -1.2257 -2.1561 2.3774 -0.2732 -2.2308 -0.1288 +-1.8827 1.0374 1.1856 0.3511 -3.8963 -0.1608 0.1192 +-6.2846 5.1593 2.3278 -0.6188 4.0817 1.5186 0.6472 +-5.2141 5.7113 2.8258 -0.2090 1.7114 2.6014 0.9906 +-2.5811 2.8134 1.9097 -2.6507 -2.8032 -0.9899 1.3097 +-3.0815 -0.4578 -3.1189 2.2872 -2.0861 -0.2196 -2.7690 +-6.1254 5.2751 -1.0343 -1.0472 -0.6193 -0.2364 2.9693 +-2.8232 1.3373 0.5949 -0.7927 -1.7707 -2.4858 2.1362 +-3.4122 2.3597 1.8698 0.2527 -1.5604 0.3673 0.1838 +-6.4323 1.4615 -2.8697 1.1520 4.9814 -0.7643 -1.1231 +-4.0745 1.7887 0.4200 0.5898 -0.4801 1.1216 -1.8534 +-3.2629 1.1370 1.8248 -1.1693 -0.5124 -2.8929 3.1263 +-2.0028 2.5104 3.1459 -2.4141 -3.8226 0.7029 -1.0988 +-2.7361 3.6728 2.8194 -0.5496 -3.3320 1.9027 -0.7531 +-3.5250 0.4456 0.3977 0.7169 0.7105 -0.6279 -1.2819 +-3.9791 3.6674 1.5133 0.6258 -0.9034 1.2040 0.3977 +-6.2804 5.0438 0.4767 -2.3433 3.3174 1.0917 -0.0308 +-3.7420 0.1593 -0.3654 -2.0204 1.6037 -1.1253 -3.2746 +9.5151 3.7062 3.8697 1.3868 0.2586 1.7338 1.0834 +8.5812 6.2908 -4.1399 -1.4445 -0.4607 1.1125 0.1729 +7.6440 3.5377 -4.4023 0.3615 2.5846 -1.2183 1.0357 +2.5921 3.1502 4.9758 -2.6982 -2.6638 0.6784 0.1647 +4.4183 5.1293 -1.9198 -1.9122 -2.0053 1.0818 -0.1255 +11.5799 3.0356 0.0777 3.1485 2.6135 1.7393 -1.2853 +10.6151 4.2457 2.7079 -2.5390 2.7172 0.4983 0.1686 +6.5518 1.4131 -4.3284 3.0582 2.4753 -1.4287 0.0280 +0.6110 2.7018 4.8455 1.9160 -2.9669 1.7329 1.0903 +8.8862 6.7098 -1.3650 0.0695 0.2906 3.0926 -0.2188 +8.3516 5.1600 -3.1937 -2.1437 0.9068 0.1059 -0.0776 +6.5749 1.0591 1.0860 -2.3285 0.6754 -1.9909 0.3649 +-1.3536 0.0963 -1.1881 -3.1040 -2.4649 -1.7361 -2.2365 +5.7554 2.5612 -4.7030 2.6323 1.4049 -0.6845 0.5814 +-2.5682 4.3850 -1.4615 1.9775 -4.6265 1.8620 0.5593 +1.5869 3.3199 3.0094 0.0874 -1.9313 1.4984 -0.1249 +0.0019 -2.7678 2.7422 0.3182 -0.7239 -2.9330 -0.4725 +2.3421 -2.9454 3.1008 3.8667 0.3177 -1.2439 -1.8251 +1.1281 1.5666 0.9091 -2.7407 -2.1087 -2.0198 0.9724 +1.5235 0.8024 -4.4624 1.8661 -0.6945 -1.5766 -0.8688 +7.4384 -0.9510 2.5739 0.7133 3.4514 -3.3296 1.7562 +1.9243 0.6118 4.2924 0.0358 -2.5054 0.8895 -1.6169 +4.9183 2.4368 1.8274 -0.6084 -0.2458 -0.1625 0.0769 +6.5999 2.8745 3.4413 -1.3241 0.8891 0.3147 0.4983 +10.2333 -0.1155 0.1643 4.0222 3.8264 -1.4876 0.6248 +6.7711 6.9607 -4.0865 0.3893 0.0512 1.4734 1.8907 +2.8361 -0.5592 -2.3155 0.2024 1.3347 -2.3676 -1.8030 +3.6792 4.2825 -2.5657 0.8910 -1.6217 0.2821 1.5377 +1.1960 -1.2069 -0.3808 2.9584 0.2167 -2.9221 1.3256 +2.5793 -0.1009 5.5918 0.3863 0.2953 -0.1268 -1.0559 +-2.5483 1.9288 0.6106 1.7118 -2.9326 0.0715 0.4489 +1.0182 2.3331 5.2430 -2.6561 -3.2526 -0.6230 1.7928 +6.2254 2.0926 -3.7485 2.8778 2.7909 -1.7703 1.8600 +7.7947 3.9599 0.3899 2.8628 1.3342 1.5191 0.8549 +5.9341 1.6811 5.0814 -1.7636 0.2261 0.0923 -0.4983 +8.9422 5.1988 -5.1226 -1.4216 1.8601 -0.2483 0.0129 +3.7559 0.7134 0.5774 2.1676 -0.3686 -0.1396 -0.9686 +1.2647 0.2938 -1.6141 -1.4450 -0.8494 -1.4320 -2.0799 +0.8697 -2.3541 4.8819 1.1583 -1.0850 -3.0040 1.1390 +-2.4243 2.2533 0.6132 -0.4352 -4.2540 0.4717 -0.2835 +0.8691 0.8276 5.7945 3.0405 -3.0247 0.7777 0.7993 +-0.0306 2.1994 -1.3816 -2.7338 -1.3169 -1.7597 0.1966 +6.8891 3.7843 -1.1987 -0.7267 -0.5589 1.1499 -1.3620 +4.9555 4.3737 3.2795 -2.9743 -0.9193 1.2818 -0.3394 +4.6003 4.9106 -4.1796 1.8274 -0.5694 0.3444 1.7707 +6.5173 6.8499 -4.3867 0.6973 -1.0706 2.3430 0.0319 +5.9594 4.7200 -3.3220 1.7297 0.5827 1.8873 -0.7937 +4.8011 1.7963 2.2601 -0.6781 -1.1054 -0.4366 0.0862 +9.4941 3.2988 4.8488 -1.5745 1.4571 0.8634 0.3784 +5.9275 5.0975 -1.9945 -1.7249 -1.7025 -0.2676 2.1382 +2.2637 2.3526 5.0792 2.9659 -2.8853 2.6294 -0.5906 +2.1362 -0.5662 -2.8698 -1.5406 -0.6178 -2.4869 -1.9779 +3.4238 1.6207 -2.0697 0.5927 0.0162 0.5742 -2.6645 +4.6129 4.0668 -0.4489 -0.0917 -1.6317 0.5627 1.0477 +5.6344 6.3936 -2.3886 -2.1122 -2.4168 1.2380 0.6516 +0.6899 -0.0045 2.5945 2.0729 -1.5520 0.0329 -0.7707 +2.1954 3.4315 -1.1342 3.2093 -1.9723 1.5515 0.1762 +-0.2728 -1.8801 0.5443 2.9489 -0.9169 -2.2882 -0.0039 +2.2464 1.6663 -1.2627 2.9359 -0.3243 -0.8919 1.4302 +7.8136 5.7358 -0.3169 -2.0148 0.3495 0.3957 1.5594 +7.2521 2.9262 -0.9792 -1.4871 0.7949 0.4403 -1.6491 +1.7315 1.7501 -0.2721 -1.8382 -0.2053 -0.5254 -1.7868 +4.5382 0.9630 5.3634 -1.6540 -1.0877 0.7456 -1.9428 +8.4922 4.3959 -4.0657 -1.0685 2.0394 0.3027 -1.5177 +5.8208 2.8653 -2.3174 3.0490 0.3595 -0.5681 1.6879 +-1.5657 3.4389 -0.8766 -0.7644 -5.0871 0.1973 0.8505 +2.9262 3.2748 -2.6100 -3.4518 -2.3979 -0.1388 -2.1841 +1.5202 0.3470 6.4457 -0.8811 -1.3563 -0.4038 0.2652 +0.2160 -0.8406 -1.2438 -1.9606 -1.8069 -2.7155 -1.5833 +9.9773 3.8447 -3.0340 -2.7374 2.8639 -1.6783 0.8315 +6.8182 0.6939 3.8276 0.0235 1.1482 -1.6252 1.8372 +0.4703 2.0718 -0.5704 0.1399 -2.3166 0.1054 -1.0614 +7.0703 -1.1055 1.8762 0.1576 2.2093 -2.5649 -0.3973 +-0.4376 -3.2665 3.1890 3.8191 -0.7461 -1.6104 -0.9830 +5.6321 2.2267 5.3601 2.1586 -0.6273 1.4508 0.5460 +4.3783 3.6338 1.5671 -0.9206 -1.8438 -0.2069 1.8630 +6.6664 2.3012 -4.4266 -2.9484 2.7377 -2.3245 -0.9019 +-0.7160 -1.9051 0.3750 1.8277 0.4336 -2.9009 0.0458 +6.8161 0.6358 -1.6462 -2.7192 2.7982 -1.8084 -2.3482 +3.6202 0.2021 2.5073 -2.1632 0.6444 -2.1642 -0.4466 +7.9950 2.4238 0.6365 -1.3418 2.4997 -0.0271 -1.1315 +6.3963 -1.4724 3.6385 2.0221 1.4533 -2.2412 0.4731 +5.1654 -0.2758 3.2312 0.1821 0.6037 -0.1159 -2.1626 +1.0380 -2.7407 5.4789 -0.6575 -1.1424 -2.0608 -1.9043 +3.8743 1.3289 -5.4026 2.9636 1.0426 -1.6882 0.5271 +0.8322 1.4722 6.1285 3.0091 -1.5825 2.4138 -0.5868 +4.6150 2.2866 -4.7298 1.6730 0.1353 -1.5406 0.7652 +8.7039 6.6432 -2.1439 -3.2018 0.8334 1.6967 -1.1076 +6.5330 0.6754 0.1167 1.6453 2.9371 -0.1888 -2.1854 +8.5000 4.9495 -1.9358 0.5401 1.9684 1.3168 0.1780 +0.8515 1.5139 0.3372 -2.5937 -1.0518 -2.3114 1.0306 +5.3179 6.1706 -3.1955 1.6488 -2.4046 1.8903 1.6645 +2.2969 -1.9570 4.6150 1.9233 -0.6721 -2.5942 1.5362 +-2.0710 3.3407 -0.3858 1.4794 -5.5546 1.0321 0.8251 +7.4623 4.0395 -0.3940 -1.0081 -0.1398 1.6219 -1.8175 +3.2457 -2.7162 5.0956 1.9736 0.5175 -2.9152 0.7246 +6.5881 1.7251 0.7603 -0.1360 1.9830 -2.0959 1.7091 +-0.0582 -3.1106 4.1112 3.1836 0.0464 -1.1565 -1.7583 +0.0513 -0.2091 0.3769 3.7662 -1.0985 -1.4892 1.0789 +6.2977 -1.5534 2.1208 -0.9169 2.2985 -3.2413 0.0615 +-1.4394 -5.9147 -0.1542 -0.8409 0.6219 1.6478 1.5854 +-0.4367 -1.3437 -3.8063 -0.3593 -1.6685 -2.1481 -3.4694 +2.2828 -3.9801 0.3987 -0.3808 2.0643 1.5617 -0.4308 +-0.6420 -3.2305 0.4085 -1.0408 0.0016 -2.2239 0.0187 +1.3416 -5.6774 3.4891 -1.2119 0.0337 -0.3871 0.0198 +-0.1420 -3.2416 -1.2991 0.0960 -0.2367 0.0961 1.4603 +-2.8178 -5.0957 -3.8157 -2.7428 -2.3669 1.3045 1.8838 +-1.3617 -1.8720 -3.0155 -0.5861 -1.5562 -1.9727 -2.8636 +0.2850 -4.3563 -5.1819 1.6696 -0.0587 3.0056 1.6736 +0.3583 -2.5959 -2.0437 3.6266 -1.2475 -0.3279 -0.5564 +0.5513 -0.3854 -4.3652 3.4373 -0.2906 -1.1745 0.2896 +-0.5884 -7.0655 1.7511 -1.6051 -0.4407 1.8331 0.9006 +0.3935 -2.6931 -4.0109 2.5334 0.0102 1.4028 -0.3750 +1.3565 -1.8875 -2.3231 0.5957 1.0166 -0.1657 -2.0777 +3.7613 -3.4500 4.5430 3.8266 1.6193 0.0156 -1.3127 +-1.6208 -3.4157 -4.4769 0.3612 -2.0838 1.1314 -2.2429 +-0.4794 -2.1701 0.9510 -1.3035 0.4743 -2.2567 -1.8181 +2.5691 -6.1575 4.8003 -2.6638 0.7564 -0.1210 0.6823 +-0.2381 -4.0798 -3.3514 1.4065 -0.4906 2.3233 -1.0396 +2.3010 -2.6211 0.2977 -2.3013 0.2922 -1.3277 -0.9939 +-1.5917 -4.6139 -3.1039 -3.1579 0.1047 1.6446 2.6565 +1.4751 -2.4914 -2.8961 0.4489 -0.1023 0.2975 1.6799 +0.7286 -5.8054 3.9412 -2.0106 0.3808 -0.4134 -0.8919 +1.3794 -5.6867 -1.9577 -0.1912 1.6085 3.3771 2.5230 +-1.1581 -3.1117 1.8577 3.4481 -1.4872 -1.6354 -0.7326 +-0.2917 -2.6622 -3.6147 -1.3967 -0.4247 0.6621 -2.0543 +2.4622 -4.3923 4.6318 3.2286 0.8290 -1.3138 -0.7092 +-0.3768 -3.3689 0.9185 3.4446 -0.7548 0.1917 -2.8933 +-1.5571 -1.2636 -4.4107 -0.4740 -0.5614 -1.1182 0.8865 +0.7017 -2.2599 -3.0353 -3.5220 0.7490 0.2524 -1.4167 +-2.0500 -5.2108 -0.5936 2.8702 0.0865 1.7500 1.8663 +3.0137 -5.0641 3.4237 3.1012 0.4598 0.6318 2.2810 +-1.5219 -1.6394 -4.8442 2.7113 -0.5852 1.1910 -1.9068 +-2.3981 -6.0576 -2.8749 -2.3686 -1.0002 2.5079 0.2015 +1.8921 -6.3274 -0.7450 -2.7750 0.8666 2.2501 -0.2021 +1.5814 -6.5836 3.2901 0.9566 1.9993 3.1253 1.3281 +-0.9830 -5.8270 -1.5955 -1.7203 0.1380 2.4005 -0.5153 +0.2115 -3.6162 0.4305 1.7197 0.5603 -0.5445 -0.9444 +-0.9981 -5.0750 -2.8310 -3.8982 -0.8326 0.7471 2.2110 +1.8743 -7.4837 2.1129 1.0955 1.0676 3.9861 1.5601 +-0.2173 -3.4647 3.5740 -0.5041 0.5984 -1.8010 -0.3018 +-0.8708 -3.0747 -5.4424 -0.2924 -0.2948 1.1786 1.4711 +-2.1813 -4.1987 -0.6857 -2.5649 -0.1683 -1.1085 0.0401 +1.0261 -4.8342 -2.5095 -3.2447 0.3524 0.5019 2.4819 +1.3312 -4.7451 1.9789 -1.0770 0.2929 0.0568 -1.0795 +-0.4084 -3.3231 1.7444 -2.2754 0.1706 -2.6516 -2.3484 +0.1271 -3.6357 5.1002 -0.8028 0.8378 -1.9041 -2.1182 +-0.3108 -2.5467 0.0172 0.5997 -0.8420 -2.4078 0.2985 +2.3229 -7.7318 0.5990 1.5900 0.6791 4.9678 0.7111 +2.2490 -5.2254 2.0891 -0.4591 1.4099 1.2195 0.1653 +0.8997 -5.9620 2.1464 -3.1994 0.2412 0.6705 -0.2757 +1.6351 -2.0544 -3.3725 2.7118 -0.5164 0.9859 -0.7674 +-0.3884 -3.7377 -2.0037 -3.7865 -0.8058 -0.1159 0.5169 +-1.2854 -0.6815 -3.7704 -1.2835 -0.8277 -2.8829 0.1127 +2.7532 -3.6849 1.9801 -1.1850 1.8530 -1.4601 0.8846 +1.3367 -3.5217 -4.2259 -1.7081 0.0284 0.6012 -0.8891 +0.2084 -6.3242 3.0772 -2.9331 0.7925 1.0186 -0.2763 +0.4991 -4.0107 -3.9909 -4.2000 0.7601 2.0399 0.2795 +2.0422 -3.9227 1.1896 0.2482 0.1053 -0.3852 -1.3664 +1.3943 -5.9124 0.3596 -2.3189 1.3754 1.5829 1.1913 +0.0278 -3.4528 -0.0648 -0.0516 0.5044 -0.1313 0.8862 +-1.1295 -4.1677 -2.8210 1.7549 0.2425 1.7050 -0.0711 +-0.8205 -2.8645 1.3685 1.3576 -0.0320 -2.0074 0.6672 +-2.3925 -5.9955 -2.2835 -4.1743 -0.4680 2.2192 0.7221 +2.4329 -4.5049 -0.5699 -3.2655 1.5086 0.7033 -0.3623 +0.0935 -5.5951 -2.6666 -0.0202 0.4672 3.1178 0.7036 +2.0608 -3.6542 2.5894 0.5949 0.1042 -1.9610 -2.1251 +1.3668 -4.3150 1.5058 -0.8470 0.3603 0.1046 -1.2965 +-0.7108 -5.7729 0.8471 -2.1552 -0.1474 0.4989 0.8110 +2.0865 -7.5741 2.4725 -3.2358 1.9803 3.5518 1.0200 +-0.7413 -6.5902 -3.3497 -4.0118 -0.7169 2.8734 -0.0154 +1.9231 -4.1669 0.6324 3.6388 1.1516 1.4119 1.9045 +0.9972 -3.3835 -3.8478 0.4535 -0.1122 0.9351 -0.6707 +-1.4850 -3.7556 -0.8861 2.0163 -1.0464 -0.5987 0.6890 +-0.6859 -4.0281 0.3683 3.6759 -1.1975 0.3557 -1.6469 +-1.8927 -1.7090 -2.2045 -2.1649 -0.6862 -2.7007 -2.6949 +-2.6846 -3.5555 -3.8040 -2.2653 -1.5920 -1.2491 0.6841 +0.3020 -5.6926 2.2922 -1.7143 1.0921 0.3534 -0.3102 +0.6378 0.0965 -3.4219 1.3310 0.4472 -2.1190 -0.2407 +-1.9094 -4.6694 -5.0032 -0.7066 -0.5111 2.2129 0.1366 +-0.5069 -7.3869 2.1287 -3.7626 -0.0722 1.8540 3.3739 +-0.8111 -2.1449 -2.0660 1.3755 -1.4613 -1.8106 -0.2669 +-2.1210 -3.7767 -1.4218 -1.0966 -0.4062 0.3971 -0.5842 +-1.0161 -5.3783 -5.2064 -4.0163 -0.1682 2.9910 0.1047 +-1.0107 -5.1148 -0.6561 0.8090 -1.0136 0.7724 2.2620 +0.3727 -5.6904 3.2177 3.2668 1.1544 0.6645 2.2839 +1.8337 -4.6784 1.9878 1.5645 0.4593 -0.2257 1.9580 +-0.1967 -4.0023 -0.2283 -1.0764 0.7112 -0.1925 -1.3203 +0.2941 -5.0048 -2.0272 2.6678 -0.5445 2.7349 1.9569 +2.5823 -7.5935 2.0663 0.1052 1.8888 3.5327 2.8774 +-2.5822 -2.1414 -2.1563 3.1156 -2.0672 -0.7239 -2.1677 +-1.2405 -3.6815 -2.5594 1.7052 -0.7032 1.3623 1.5195 +-2.8369 -5.1205 -4.5254 -0.1156 -0.6598 4.1633 0.1587 +0.3149 -6.2694 -2.0587 -0.3757 0.1556 3.2380 2.4606 +2.0357 -3.8799 4.1492 4.3973 -0.1287 -0.6609 -2.9551 +1.4539 -5.0928 -1.1201 1.5114 1.4226 3.0672 1.1131 +0.0900 -4.8785 0.4034 1.7989 1.0459 2.5805 -0.6281 +0.0903 -5.5698 2.3322 -1.8054 -0.3871 -1.4925 1.4869 +-3.2787 -0.9351 -3.4811 2.8220 -2.2307 -1.9613 -0.5324 +-0.8901 -3.3226 -2.1998 -3.3552 -0.2246 -0.9037 0.3637 diff -r 8b47a3c08d97 -r 2ac77e0aec82 test-data/pca_input.dat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/pca_input.dat Tue Apr 13 20:42:24 2021 +0000 @@ -0,0 +1,300 @@ +9.579515262220434924e-01 3.726315038026500881e-02 1.192922318396479886e+00 2.208390853256675612e+00 1.545465138214503487e+00 6.587709093437858598e+00 2.676346016926679283e+00 2.002623182927643519e+00 1.960111203222609788e+00 1.244000891424809074e-01 +5.456295681254983432e-01 3.130646354641937745e-01 6.007098680445335681e+00 3.644816120915847169e+00 1.043692024581632793e+00 1.970255599020762194e+00 7.768759398827200791e-01 6.435887304171391543e-01 4.933655623778216537e+00 5.543893932919085055e-01 +9.341619128268041639e-02 2.558875163847860179e-01 3.752555601842988420e+00 5.559464534602225783e+00 1.010576057771932490e+00 3.077425253345768663e+00 6.807691255479467962e+00 2.571623094724099445e+00 3.153422029415700933e+00 3.550137612924495478e-01 +1.471186662367064413e-01 4.878675188546680030e-01 1.721359340060558907e+00 4.167324499252111458e+00 1.985766726491912326e+00 5.316541920919662267e+00 2.962330081397085202e+00 6.305674360296442682e-02 1.008632361074792705e+00 1.954028793571292999e-01 +4.517113041288302044e-01 2.082857695479499172e-01 2.670306166999409037e+00 3.583860843014433861e+00 3.162463432948562581e+00 7.681858694197329029e+00 1.942922465406477395e+00 1.098113345375552274e+00 3.412374063138972069e+00 4.177369511025994520e-01 +7.303789721527453871e-02 1.033872090825091461e-01 1.795276419298532655e+00 5.719768891948289635e+00 2.977579113876869243e+00 7.844204854679616368e+00 3.384744044988120759e+00 2.998214211517472805e+00 4.270749911114063657e+00 4.257092154152972707e-01 +6.359175475607969918e-02 1.242103944058722265e-01 4.586547825302377923e+00 6.614372405184473891e+00 1.923730124171568079e+00 7.681919225138223339e+00 2.793831391806054665e+00 1.406817959154060160e+00 4.716223047352296582e+00 6.211888780251716424e-01 +9.886982415066914998e-01 4.584180816802013725e-02 2.793304094637673707e+00 1.871823089629541581e+00 2.607924236602056745e+00 9.206004712207825236e+00 4.623226894276893928e-01 2.966776892612695615e+00 1.485603429563761679e+00 4.654181765444357355e-01 +1.741783097973695904e-01 2.446343910749277373e-01 2.534641383481000876e+00 4.584056834431557093e+00 2.890133078107056441e+00 2.823965747627366518e+00 3.034991597984873835e+00 6.600338090755860643e-01 3.752675891901568583e+00 2.970984388064664694e-01 +4.690204907875814566e-01 2.929759132721354575e-02 3.548495454913231484e+00 4.482718753445549709e+00 3.203674397180960920e+00 8.065801814409903514e+00 3.773297073513870004e+00 2.113193009064737282e+00 4.579511767735440664e+00 4.024397631591818403e-01 +6.941135206286030979e-03 2.133769823942091026e-01 6.135694255460425239e+00 5.395845311332483352e-01 1.504596129252289138e-01 9.253872174123642935e-01 4.483882842463830620e+00 2.321382684831085008e+00 2.576937740611303873e+00 1.109827593740932983e-01 +2.746007390787119640e-03 6.638140727681796083e-02 4.108407001279307247e-01 3.212637467080699416e+00 4.920639575099698959e-01 4.018583101004429281e+00 6.796866753550522056e+00 1.316040638035593568e+00 2.620935479341985896e+00 2.976887894006831070e-01 +3.557722260573822348e-01 3.727028444011896702e-01 3.811343797909652054e+00 1.715026071489426762e+00 5.294113011251582179e-01 5.980858755297242979e+00 5.404241675653790544e+00 1.825392885196229997e+00 2.835734218533411788e+00 3.200816860194626301e-01 +3.642510923301112147e-01 7.309428690756680780e-03 3.666945761684001326e+00 2.430979500086832612e+00 3.031996394197797429e+00 2.708093900045675184e+00 7.623775896209878944e-01 7.865319376558289610e-01 4.100162854521766320e+00 8.307551984431076342e-01 +9.927215581748555229e-01 4.537144790675278760e-01 5.145060290158723681e+00 2.151991198713361086e+00 4.862387339994040936e-01 2.589672936803951053e+00 3.398039583724480561e+00 2.809787771375323651e+00 8.864381880832911120e-01 3.331137683083518208e-01 +5.057807499542814611e-01 1.402717130943404999e-01 1.883175574051066725e+00 4.122193241585520695e+00 1.035989381539633492e+00 5.670773882751129591e+00 3.687442345139384958e+00 1.684532121504235480e+00 4.642108569673514928e+00 9.305441677815040613e-01 +5.042353053817258957e-01 3.547819755513703099e-01 4.381967339967321351e+00 3.851122946472437469e+00 5.426308260180099374e-01 7.445193485365448893e+00 1.869875173163507931e+00 8.437445017751898924e-03 1.444658255941634994e+00 1.636723834558136970e-01 +6.808167520848328325e-01 4.889279161325942868e-01 1.800574817853715093e-01 6.987701665160759745e+00 2.781923379343957503e+00 2.993730387785709102e+00 5.946279606388386263e+00 9.945453378009785350e-01 4.532192935084170315e+00 8.927165058296504530e-01 +3.935353669966316081e-01 3.534471776807462939e-01 4.974393735263212157e+00 4.310249343469166661e+00 5.149149535110453257e-01 2.179395632453644538e-01 4.312162502099264882e-01 1.470934059506852742e+00 6.326429352635798420e-01 7.652243996922046820e-01 +5.817478561516450375e-01 3.650895867034674724e-01 1.106136061048209607e-01 6.499764055829857945e+00 2.050813058661709487e+00 4.066454208593111019e+00 1.490387097633062208e+00 1.061815166735420313e+00 2.302831003165218604e+00 2.174825207514023973e-01 +5.048471030130237125e-01 1.082304090000890673e-01 3.175827458076348364e+00 3.693216070028284115e+00 3.700472412642747955e+00 6.197372734372899927e+00 6.374064687621854297e+00 2.768340513420041837e+00 4.661995130609337679e+00 8.584541060279672342e-01 +9.485485718647990172e-02 2.363243089061691227e-01 1.837943546562954555e+00 7.414016988668096886e+00 1.058065255181876108e+00 9.078408743915952428e+00 4.183782154307690959e+00 1.516463707584718712e+00 3.901861889845664733e-01 2.074547211064202701e-01 +3.134106819658126764e-01 1.286339499547863308e-01 5.864729791423263450e+00 8.300357839112765035e+00 1.438336911915669702e+00 6.851092469972995147e+00 1.034029113386152776e+00 1.494799843839271336e+00 2.277085020013195127e+00 3.018026684870551701e-01 +9.974747480148854484e-01 7.417608355979210533e-02 5.576900855119989231e+00 1.085027230184690827e+00 1.610568082058991379e+00 2.681858695518825719e+00 3.483337744351994392e+00 1.340344201458989248e+00 1.785155307177410666e-01 6.064608937230153707e-02 +7.698707959570197934e-01 5.946693939209857227e-02 6.140872236681682139e+00 7.794500275667249234e+00 3.329936732740133021e+00 1.053683186798398808e+01 2.442474922407471993e+00 1.618248604822617676e+00 1.645175154595579059e+00 1.577878407070486544e-01 +2.921978170383732198e-02 2.098764262909763589e-01 2.571849891653310571e+00 1.701437788960805664e-01 3.606271296781285773e+00 6.151967513580181013e-01 4.407426394075528719e+00 2.238674479981308085e+00 2.918338395342272129e+00 2.203405589927943664e-01 +8.185553514857757396e-02 2.904901153328537933e-01 1.884207868724713020e+00 6.379742850556673339e+00 1.316060594347697510e+00 5.742231747444348500e-02 3.293024161175864162e+00 2.070570602227302937e-01 2.323330232077761792e+00 9.345412483474558885e-01 +9.870953766246871597e-01 2.838968068710498449e-01 8.984979565988782113e-01 7.228894867998849172e+00 3.009018931955541376e+00 7.470177361465970556e-01 4.791497852877925290e+00 2.138893706603099965e+00 3.957478162078499118e+00 9.206372464557524005e-01 +9.246986296046750819e-01 2.657540764872973194e-02 5.696958733461305435e+00 6.037947545874237321e+00 2.054547403001988126e+00 4.010012556963714836e+00 5.387264573805446988e-01 4.198151587672391827e-01 4.855865220608975186e+00 3.421872218672002974e-01 +4.891436182199244698e-01 2.957137425921102514e-01 2.092865426966933118e+00 1.304751064715160558e-01 1.857399876731623767e+00 3.929329864582863596e+00 1.890510040380741774e-01 1.808418679622973757e+00 8.962596057614125034e-01 5.071164143964516091e-01 +9.883745014565588072e-01 2.023820478627288422e-01 3.026225500297741178e+00 8.018625010860999325e+00 2.639151190842266015e+00 7.866860471267914434e+00 5.692475791922957384e-02 2.619732708394978626e+00 3.791192865048754079e+00 8.510442750449997984e-01 +6.766386709986900172e-01 3.163942649407911478e-01 6.650890489805712846e+00 9.981354386720189265e-01 8.895093378732830125e-01 8.880441813445409949e-01 5.269510439686068359e+00 2.800971666890863521e+00 4.336136086833519698e-01 6.151838148712087673e-01 +9.395548338899438745e-01 2.274826251714922587e-01 4.841436257692705025e-01 1.951295574220930362e+00 3.688485459922960619e+00 3.319068635438701342e+00 2.622624513963639714e+00 1.773842110030804609e+00 7.017709220203099951e-01 7.273521464765183575e-01 +7.131396196120692865e-01 2.829891666225929359e-01 1.809204461229397820e-01 3.578992630164364641e+00 5.190853847632848073e-02 9.799965411266482462e-01 4.614272826173850817e+00 2.684041190366065699e+00 2.984828522093719183e+00 2.167818654123231381e-01 +6.173854727816793231e-01 1.961753927292946287e-01 4.555255586921068023e+00 3.578807812709182024e+00 8.425821534786881450e-01 7.518481958157543943e+00 6.262313649648420188e+00 2.000433960754317564e+00 1.421954930513873006e+00 8.019504843363266522e-01 +6.671808236429033201e-02 2.702227356574862793e-01 2.867725189486065585e+00 8.406696908068906904e-01 1.816665326608355890e+00 1.069991981228995215e+01 5.100300539865704863e+00 1.022140401782990482e-01 9.935128054149117149e-01 2.217478442404806627e-01 +4.675882156850276195e-01 3.994470533120373923e-01 3.013415758827279856e+00 3.472047851101398130e+00 1.579805042782022717e+00 1.025374950194446200e+01 5.424839982873136179e+00 2.661207445309309083e+00 1.974765823248681329e+00 8.490805254939938207e-01 +7.440465128212200296e-01 3.185879639684230935e-01 5.875377909342210714e+00 8.735053206610791321e+00 1.922533667640191624e-02 2.664137099658425711e-01 3.070429299965248493e+00 1.797362708842066059e+00 5.848813121558199546e-01 4.383864302200134455e-01 +3.550604742260795588e-01 6.083111274854280381e-02 3.404146882195189239e+00 7.733962066765833754e-01 1.176797582398654285e+00 6.871446754170301929e+00 5.361716911609923919e+00 1.576687106248415571e+00 4.355077426059827062e+00 8.607241356371005958e-01 +3.559318532806881041e-01 4.015285662241686593e-01 2.944936440066225458e+00 2.111335278696990336e+00 2.963059944865208628e+00 1.476942511987013873e+00 6.450386812630387823e+00 1.907611126769427123e+00 1.381468577271076636e+00 3.983676385111964979e-01 +1.352222544842187624e-01 3.963201476435085358e-01 7.711539919790504349e-01 5.328381207561713850e+00 1.055305792258381725e+00 7.535148204080714507e+00 6.478550147632057055e+00 2.298107587130767904e+00 3.835975596160178469e+00 7.784889119545324032e-02 +5.656300588103846394e-01 2.408672177953232185e-01 2.222118682804348655e+00 1.584476418959711363e+00 2.205997974729819955e+00 1.320044695544450697e+00 3.093339610296233388e+00 2.078381944707535123e+00 2.709900781033619532e-01 1.998783060846459625e-01 +5.064693576216054982e-01 4.755666724189564487e-01 2.460782122272777706e-01 6.394893884651652982e+00 2.393279335645917882e+00 7.720168766472102817e+00 9.946162988780055114e-01 4.727471826960147894e-01 3.624628763819681243e+00 7.939552686881024002e-01 +7.126511753385316172e-01 1.251084009980807377e-02 6.424546400284762093e+00 1.732715732319492385e+00 3.291228557764222185e+00 5.494632343972354782e+00 4.309920997430734424e+00 1.785238040943090132e+00 1.319325481408312184e+00 3.987762049958972765e-01 +8.564779126009015586e-01 1.551694340859950394e-01 3.000664164177824667e+00 2.121531733172477452e+00 1.929201507138485816e+00 1.091606713354398295e+01 6.352850505658992120e+00 1.942089264915284774e+00 3.099275474026703225e+00 6.349421349719974739e-02 +4.875235919705348531e-01 1.165471825543921702e-01 4.659789198761613349e+00 4.857039597115840657e+00 2.268900869752328298e+00 8.073884519013418526e+00 6.867532374199831757e+00 7.110477929957825793e-01 2.139511718029329490e+00 3.270336697362830058e-01 +2.836462637303897028e-01 3.526582320725804021e-01 3.433435023383186291e+00 7.878111173527013733e+00 5.846439909687783931e-01 1.334584322193443917e-01 2.430764258810069744e-01 2.294882067517025170e+00 6.943377361908681378e-01 6.597104416060772802e-01 +7.138680788986382364e-01 3.866838295049366270e-01 1.938054711638698135e-01 7.776057762563468145e+00 3.843531806920502003e+00 1.169843574403325803e+01 1.317073001264212895e-02 9.974273699007062399e-01 2.805794644206359933e+00 2.846508994495189349e-02 +7.616522995605032875e-01 1.525341083280188914e-01 3.649857814806184653e+00 6.626064326264721416e+00 1.848485344378381079e+00 7.772079961576015883e+00 4.922747697985218274e+00 2.183176272993367029e+00 1.523463352631002188e+00 3.483587959766206721e-01 +6.174650468503004586e-01 2.890466460728707276e-01 4.198548001307910837e+00 4.756162259128787539e+00 1.215478403072798308e-01 1.073564948073302894e+01 2.393378431835311737e+00 7.963541702214833595e-01 1.221126147878501822e+00 3.627422424390945865e-01 +9.041286748679164820e-01 3.692704713445955078e-01 5.969223946468604325e+00 1.400042822911425899e-01 2.167809064247096185e+00 3.466765141422927687e+00 6.104187126619349257e+00 2.815584690378426735e+00 1.472968857439669765e+00 6.815901346942815353e-01 +7.420584650906367763e-01 2.629350119859111268e-01 5.157415509545635324e-01 8.936951265754993656e+00 3.499514727363592037e+00 2.929864868198977401e+00 5.289656243356750664e+00 3.794701199783089285e-01 3.570594754264058146e+00 5.454360810847372898e-01 +2.133902786741366242e-01 4.793775958545365423e-01 7.161025461060221975e-01 7.379345463324211707e+00 9.195588975890780503e-01 8.953799627402657890e+00 8.199588910676803843e-01 1.539214057143141190e-01 2.517268342599753961e+00 8.642672068937873320e-03 +4.189544227294224044e-01 4.677740958591244946e-01 4.169315152475023822e+00 2.198113856746841677e-01 4.442481038742749355e-01 8.853442692179621432e+00 5.871239829017361744e-01 1.642555038182410554e-01 3.779048982357357644e+00 5.353051674182843778e-01 +8.373426461385590214e-01 3.895842710949837251e-01 3.079787615886646623e-01 4.540155876800062273e+00 7.099227726704704367e-01 3.400668992101794075e-01 6.292240435961995004e+00 2.673955045372806705e+00 2.378211157475177195e+00 5.342130779135090268e-01 +3.068274218964279765e-01 3.192479805504804813e-01 3.859914935882651221e+00 4.687340409378260908e+00 1.900386926452752867e+00 8.623061138373001810e+00 1.033494255619878288e+00 8.997549532223314550e-02 4.911877241989344611e+00 9.510774047315817548e-01 +3.988512541926614308e-01 8.003053540870219695e-02 2.122999256011599556e+00 4.455738292615722962e+00 1.825496679610708828e+00 6.531267574926014063e+00 3.480291480026090900e-01 1.582969106163566453e+00 4.938475735461747007e+00 1.906205929699261725e-01 +7.111720075879690572e-02 4.221578019099042622e-01 4.465731829112144169e+00 2.564360848739634768e+00 2.152069261549716117e-02 1.058526283280879277e+01 1.462724588046307783e+00 2.852823949099446033e+00 1.829748887076950048e+00 2.844587557581582660e-01 +2.570944338116505357e-01 3.670273280771254032e-01 2.950100530191855697e+00 1.367357621902863807e-01 6.536517332253071189e-01 4.623777977996077482e+00 1.830565500886062402e+00 6.876079879205642120e-01 2.463356978321902702e+00 1.515963114524383482e-01 +8.196773403442627615e-01 2.439155028749898646e-01 6.976779897465351654e-01 4.021827899216881441e+00 1.629083009450637665e+00 4.895113507734013325e+00 5.420567352065293498e+00 2.923116514593426807e+00 3.675539915878816899e+00 4.820681859745293840e-01 +8.912757210535459107e-01 4.287706082586761891e-02 5.914097580762159190e+00 4.887219470061346271e+00 2.297300243872694381e+00 5.258879986696362252e+00 2.055176485482270277e+00 1.247382108420278080e+00 4.091406116197054965e-01 2.863708277926955148e-01 +9.165363924681566576e-01 2.077777304803083980e-01 6.425359611836583440e+00 8.532229331139205897e+00 1.890984676596261238e+00 4.482242194093222665e+00 4.719123490932191523e+00 9.368865626180848949e-01 3.424737866108997775e+00 3.692933466222642069e-01 +2.844432761355554229e-01 3.487910856226295042e-02 3.288851974081316243e+00 2.493792851872620453e+00 3.245659443981551373e+00 6.119401284154618814e+00 1.629426639698323909e+00 2.146211397792365361e+00 3.323215307906694616e+00 9.689245472658591929e-02 +4.605981453808145609e-01 2.951104911370585060e-01 3.466807508548188643e+00 7.015908445063255172e+00 2.012464416109721377e+00 1.411425132174343400e+00 5.640313420420241641e+00 2.551472185597204234e+00 2.921468481145677476e+00 5.154477507183952145e-02 +7.916776772020003294e-01 3.104882171066662977e-01 3.388406047132061616e+00 6.308076145350703712e+00 2.141204968913200002e+00 8.815894689517723037e+00 1.216772248282482316e+00 5.490792235288116663e-01 4.864033877707442777e+00 3.120795424356880288e-01 +6.520543319958096440e-01 7.498529269624598648e-02 6.546870924616779774e+00 4.313660942542439258e+00 2.842979234248417697e+00 2.708025294292042418e+00 2.101565155836826015e+00 2.779757313928136409e+00 2.766295492770797892e+00 8.242938770130925352e-02 +3.916403442843127136e-01 9.189287972434972973e-02 3.658241649007774488e+00 8.892285269585453733e+00 2.872944719502671163e+00 1.926067804146072149e-01 4.113071146818407797e+00 2.033786884589388499e+00 1.858529211147021964e+00 3.601164330247360601e-01 +6.658899523715963165e-01 1.901452620071845678e-01 3.358563768423928231e+00 7.307834854097906785e+00 2.230102878474681027e+00 6.994441846960493869e+00 6.046922242667236880e+00 1.681346319512073695e+00 4.453953342081854672e+00 7.760263753123383124e-01 +3.544087352095481869e-02 1.736442680483894496e-01 6.358750483131432318e+00 6.362553657877171531e+00 9.438518061698975004e-02 3.241545692161897474e+00 3.216563179949617268e+00 2.048445371027631801e+00 2.592256358497992519e+00 5.871829363638558785e-02 +2.278297361077044059e-01 2.521532626334166971e-01 6.006560048470274360e+00 1.036460639857805344e+00 9.596384576758123508e-01 1.161754935200590388e+01 6.921319460991003147e+00 9.492023907384942172e-01 2.570754313364566723e+00 9.898393847822013480e-01 +7.720727707112930993e-01 4.625201799694809712e-01 6.030038351299404020e+00 1.576843309640901802e+00 3.047360805551709184e+00 1.105183421427205381e+01 6.765794291140618810e+00 2.437125901810530237e+00 4.785718495907587133e-02 8.643252994269234879e-02 +9.816465867962677061e-01 1.040135248373981747e-01 6.269766387849492695e+00 4.587664995870221141e+00 1.471595298862088175e+00 3.137698622087241596e+00 2.585776241619418325e+00 1.094148950727448000e+00 4.787651271957346744e+00 8.537352255282423252e-01 +5.927286689665087760e-01 1.635250692112610871e-01 6.763777563834705298e+00 4.190158816469162772e+00 1.671137433875959921e-01 7.145892561514077812e-02 2.697194722513650555e-01 1.826917897949313918e+00 4.855283909060112535e+00 2.338052822860668956e-01 +1.591435657354911548e-02 1.309457494027614910e-01 4.027555471388495345e-01 3.269356767055083601e+00 2.135361695566277085e+00 3.812187332815673013e+00 3.745269592969274086e+00 2.239168581407309233e+00 2.403445557045992054e+00 4.127895397263747768e-02 +1.138459964891592735e-01 2.477562449655215659e-01 6.711903366433036311e+00 2.328903691994430591e+00 3.619135648902618296e+00 2.643113253632744630e+00 7.573805393623883608e-01 5.638560832013681523e-01 9.866348317250567268e-01 5.321998283901712146e-01 +8.335543816544467299e-01 4.852511675363395671e-01 2.522771010620390442e+00 6.865591808220169234e+00 2.614984821499222178e-01 6.661308755886223842e+00 4.631632858625027716e+00 2.016686176070514591e-02 1.670651928613386517e+00 8.001889580730393581e-01 +3.506629367480429416e-02 7.513357347200738667e-02 1.091955136302876994e+00 4.788485228215831668e+00 3.088440213543260704e+00 3.737602435514551402e+00 2.060091420371281679e+00 1.664114145344917528e+00 3.853021369729443979e+00 3.981246066772909931e-01 +2.941809570016090669e-01 1.951063404831046011e-01 1.053511941997986590e+00 1.626573601758511067e+00 1.073068181672781840e+00 8.246102825125259272e+00 1.229799882190759863e+00 2.046485654174841073e+00 1.887314229128450593e+00 8.477832457224251383e-01 +4.288411318977621844e-01 1.344940483989709445e-01 1.890175735159078219e+00 6.909579416417008346e+00 2.559618997696785136e+00 8.076451885637920824e+00 6.709931254318012073e+00 2.711755694833509533e+00 2.197259152647867975e-01 5.229458751166887742e-01 +7.962785959698204241e-02 4.791664160968215902e-01 4.775534443309384258e+00 6.195144705514182171e+00 1.095816602161203690e-01 7.253215415683056833e+00 3.785863733799192499e+00 9.032344566438499367e-01 3.712953563991834294e+00 3.658749193043641101e-01 +9.925977090507452916e-01 4.226472934729750275e-01 4.233597679026229521e+00 5.373501445983512426e+00 3.029885997105019158e+00 1.948856366491487524e+00 3.580389683767193798e+00 6.128625096828327345e-01 3.195613215016547937e+00 1.498067324162460912e-01 +3.211542228342814109e-01 2.435050065055133772e-01 5.191492939326351141e+00 8.811443367963034845e+00 3.119307887468464990e+00 9.566604729350618896e+00 2.662534653489017522e+00 2.048270692218978617e+00 4.513252133993818305e+00 1.534045164632015235e-01 +1.169841130722715228e-01 4.278805785103458326e-01 3.871981713139157399e+00 2.151432657451758379e-01 2.353074788516758442e+00 2.925683050900422355e+00 5.164172309356634294e+00 3.209672061804553778e-01 1.806778866741765022e+00 7.377245404193294442e-01 +4.920318247135287981e-01 3.980350958273896622e-01 3.553262242278445449e+00 5.660089801227229600e+00 1.130914505340574028e+00 5.111374270657123020e-01 3.594580615302541915e+00 1.377803570003424127e+00 3.733415954722649754e+00 3.790748149557219282e-01 +7.141555225002506058e-01 1.431060744802945539e-01 3.598062535886497493e+00 6.486014070157204436e+00 1.222357165551017477e+00 1.071797470084096382e+01 2.966727560848184453e+00 1.433401409283499239e+00 3.761066588446803749e+00 4.577426600413826430e-01 +8.846645270352224699e-01 3.643370058500688402e-01 3.776149232858763138e+00 8.514771398046235618e+00 1.333408164935339979e+00 8.719464634044745921e+00 3.680392243042417633e+00 2.323141187069376112e+00 3.968683511008049170e+00 5.273710580573882645e-01 +7.563601909975703474e-01 7.110020268898137319e-02 4.754320885232382388e+00 6.715112169672266873e+00 3.900410613846503338e-01 2.374351342693231892e+00 3.949776593352507525e-01 2.793668022917081828e+00 3.590934831061467047e+00 2.297057403281292931e-01 +4.973937884442386492e-01 3.879138870002525330e-01 9.799015387413885225e-01 2.012207080170396623e+00 3.118810053878664501e+00 1.476679627040943465e+00 5.927098696212524054e+00 1.896055595509993363e-02 3.766273251675572586e-01 9.605494500779653277e-01 +1.977451097083424703e-01 1.856512361107952036e-01 6.724615885357570377e+00 6.767753598078477317e+00 2.460427469322048477e+00 6.474778192244762032e+00 2.497838703773406444e+00 1.783570854432153130e+00 5.300044222306288244e-02 4.451008306808179604e-01 +7.777282859813858806e-01 1.108325048061198359e-02 5.994453580967894268e+00 3.907200072756264575e+00 2.802655265583420707e+00 2.467799246467401009e+00 1.767975654554970966e+00 1.542521176133627048e+00 3.301251420424628602e+00 2.703716625531150664e-01 +2.877553566109145589e-01 1.420816672999475339e-01 3.531815135282850626e+00 6.071634467360012444e+00 1.950296822580346312e+00 3.667561567003036149e+00 3.564813794526681789e+00 8.193521748791241510e-01 3.969846661030343782e+00 9.642674274532847534e-02 +8.461631661621418221e-01 3.874198608202865657e-01 2.460697897082127827e+00 4.483937646731980253e-01 9.536408659656969711e-01 9.374214254598758345e+00 4.523934853618548857e+00 8.998483173209120833e-01 4.534728615909888738e-01 1.316674336548497859e-01 +1.751881832985308085e-01 3.840511548841616940e-01 1.356205442152841334e+00 4.975298518310518503e+00 3.475732058856605633e+00 4.548907307536070199e+00 4.318674447424278640e+00 1.546572097412000968e+00 2.738768725851110197e+00 2.581125520633765769e-01 +5.541597656676272576e-01 2.055046901470117260e-01 6.866760560523623269e+00 3.572427800023941113e+00 5.759362217394889960e-01 3.707695882166028856e+00 1.083565015241491736e+00 8.888805063168140341e-01 4.589028250324568958e+00 6.712978422710076387e-01 +3.399810580604246679e-01 6.778009844025034702e-02 1.990157231926872106e+00 7.987721068254113987e+00 8.333111074045302935e-01 1.434155759051158885e+00 1.063680632215532995e+00 8.682505419899785304e-01 4.553780840671912244e+00 6.153621080682639688e-01 +3.805973074910944387e-01 1.809291374261368102e-02 2.326724448899936348e+00 8.808775644776478231e+00 1.071772823118059659e+00 2.671050593238351034e+00 3.236405416201733942e+00 1.156638793116922637e+00 4.089621847663170939e+00 8.958752205306643734e-01 +6.236783129330455422e-01 2.034130988847053789e-01 2.149437338793216412e+00 2.709264986875024039e+00 2.581735349094827381e+00 4.559785061212902946e+00 3.811076674546835186e+00 2.506501802065709494e+00 3.558610317643628562e+00 2.953998470582006597e-01 +5.786616826695738514e-01 1.092680018344108772e-01 3.673824620483585601e+00 6.935907382658493603e+00 2.924092204393669459e+00 4.994297253991534902e+00 4.216415579314912065e+00 2.221035033808330006e+00 3.308866108190522404e+00 6.005834101043915352e-01 +8.445682020932365752e-01 3.477257696376142015e-01 2.977918003630122712e+00 6.125943756092539161e+00 2.412136776594560494e+00 9.871992950448490234e+00 1.471692508678064337e+00 1.186189240533216616e+00 1.731159415996974538e+00 5.019757339821060427e-01 +7.262920712271674351e-01 1.070865338500862629e-01 6.515623171275430892e-02 1.910429663217140916e+00 3.785981980891470755e-01 5.136662978344108232e+00 1.190639365883919165e+00 2.126433858821366041e+00 2.551490600585693436e+00 2.282190611495389376e-01 +1.181796487183683730e+01 2.516406960282593364e-01 2.887277780206054967e+00 7.424704929314782653e+00 2.733699169495314329e+00 1.326499604911062224e-01 4.472085075329708559e+00 1.841612256174257833e+00 9.588965759771213015e+00 6.074890083495527726e-01 +1.355685210334684321e+01 1.476043055963610906e-01 2.536588592058465874e+00 6.894815252046440968e+00 4.629665076865330242e-01 1.591874408544442510e-01 2.659816619928975889e+00 1.992412304973402826e+00 9.409822587181350118e-01 8.428860916139044868e-01 +1.302344932128066368e+01 1.877957892610864488e-01 3.771232365671751907e+00 2.334982689796312627e+00 3.407718706286316790e-01 1.716052424590376324e+00 3.548651514000740193e+00 2.374591648505322450e+00 2.134503293655584777e+00 2.543046511567058632e-01 +4.451805618740952042e+00 6.764221264325200045e-02 2.669906521408719868e+00 8.632453926650279996e+00 2.033894446413802903e+00 7.142031037304861218e-01 4.194277576482712266e-01 1.402693657818623318e-01 7.586905366769697068e+00 1.843381480000478856e-01 +8.570192823591918696e+00 2.306084812036459097e-01 2.522438257729497479e+00 7.522008507552547130e+00 3.713341144773252278e-01 5.716961257420709597e-01 2.079090539304101704e+00 1.766024213797281917e+00 1.662647314050246683e+00 6.384753099614368654e-01 +1.492700367152876417e+01 5.956069900446444437e-02 5.193239326553306112e-01 4.348155739698301936e+00 1.498622145721807408e+00 4.168028931133043180e-01 6.514105873948607517e+00 1.300249280108312089e+00 7.509216655975119892e+00 6.466771718100665645e-01 +1.401469528149594801e+01 1.318450715802988726e-01 1.755366307435912709e+00 6.268538614231175643e+00 3.594158033755705084e+00 1.596063791967876844e+00 4.538357107641011190e-01 1.578349416671345651e+00 8.605308976007654209e+00 8.431350039872285151e-01 +1.125897718091157707e+01 7.088415129913086532e-02 3.073048649925616438e+00 4.169572134840827671e-01 3.391473123826589831e+00 1.253820676407349843e+00 6.033094418983614204e+00 1.669529100255978893e+00 2.743440461537412389e+00 3.447717414063620200e-01 +2.618236120635488717e+00 2.221707698733976499e-01 3.880148546665934006e+00 8.346365071605847064e+00 4.485232175994370074e+00 1.273339902009563929e+00 5.126040370747679376e+00 5.002442564550735327e-02 7.652504234144801742e+00 9.045218812960378330e-01 +1.352791799195179934e+01 2.958099853113912436e-01 1.620323493963710115e+00 8.514270244110930363e+00 1.405394051171777736e+00 1.228874034324174414e+00 4.366837956110266816e+00 4.681693532389841206e-01 3.658910928887952885e+00 5.685286335634343047e-01 +1.321105522112276098e+01 7.596543795040429370e-02 2.288656765287575112e+00 5.454334126686442019e+00 3.540974541852515589e+00 9.136761954539687203e-01 1.531916431358365749e+00 2.600489131884043736e+00 2.186958478364557035e+00 6.152510639313788499e-01 +9.248327943582943078e+00 2.953301427161937331e-01 2.912841777561403500e+00 3.210770144852208574e+00 4.678430187034543941e+00 1.903313079890405213e-01 1.852621718826671371e-01 1.901873807226989177e-01 6.598474242893042074e+00 1.863584605124068982e-01 +1.561511613665458764e+00 2.791101130788958273e-01 1.230729125078247499e+00 3.214729791326091046e+00 5.760499802570256955e-01 6.791526464572399391e-01 1.164793484277019120e-01 2.436090334891392928e+00 1.684437394931304732e+00 5.939045414290095026e-01 +1.074199933120756256e+01 2.768105466336150400e-01 3.600337787752637908e+00 1.988419733930615330e+00 1.121183222910840938e+00 1.262741873855612873e+00 5.955023194942483222e+00 1.775781023586198160e+00 1.635523073587350051e+00 9.451325867881940068e-01 +1.439453349318703390e+00 1.572125366345192565e-01 4.116939260327882266e+00 8.143883513662194318e+00 4.436336490499172669e+00 1.431008029759604838e+00 6.129158351904355762e+00 1.627229601340490550e+00 3.544342525406199984e-01 9.537385422254009981e-01 +4.385485861700014532e+00 1.072544990386351815e-01 2.555081167553841404e+00 7.797049674127350727e+00 6.437428060323546752e-03 1.690033945941410209e+00 3.546703381942077016e+00 2.355037673948323640e+00 6.000098633768423007e+00 5.634219751061730896e-02 +1.478941841002847202e+00 2.819342154043811277e-01 2.946748707794077937e+00 8.674573772230408375e-01 4.831892645548560239e+00 6.117546232929613748e-01 2.336129800349750152e+00 1.662089735231696785e+00 7.288065418938156625e+00 5.079145336272458122e-01 +3.566330915119718004e+00 1.054092958488348081e-01 1.262772079536855330e+00 6.632582037177616741e-01 3.155614409429076339e+00 4.560221336860896812e-01 6.107444411033736920e+00 9.724400924370590893e-02 8.869125512095319408e+00 4.531451318109073201e-01 +3.931188712123208084e+00 1.648487385228547819e-01 4.230745858304009843e+00 4.740462911360358689e+00 4.302603206380042344e+00 5.923369016635324780e-01 1.350657156605095111e-03 1.610503856182457394e+00 4.214531575126196472e+00 1.188686805020251480e-01 +5.690049848746455474e+00 1.611771331430286031e-02 2.797114322332588721e+00 1.326664870101148530e+00 2.184236794465954645e-01 7.244826847041867524e-01 5.088788284324481381e+00 1.892888045267941521e+00 5.251528732452677151e-01 8.270932539527531269e-01 +9.971187065128873428e+00 1.922234878798162738e-01 4.399243530319325579e+00 1.690861779292817113e-01 3.026193132922350149e-02 1.247811934568532566e+00 2.287373749222342489e+00 7.123297811357809373e-02 9.782325221036309415e+00 4.025349245250368080e-01 +3.166794098033590465e+00 2.895927629971295492e-01 1.010943063067509806e+00 6.246940915716239218e+00 2.296626417112780594e+00 1.124916422624346879e-01 3.155063467415336387e+00 1.122794863214901628e+00 7.747118569384047859e+00 8.813094613105451058e-01 +7.776074009241417784e+00 4.884943113850780116e-02 2.665091138087455569e+00 5.396374948611239120e+00 4.807416439179393208e+00 9.311196524679428155e-01 2.370568997313627246e+00 1.497537386829888018e+00 6.410622802993913183e+00 1.959147447247133744e-01 +9.386902307633294029e+00 2.918525147335055969e-01 2.580633210860679316e+00 6.117570487861421213e+00 9.440652787891057329e-01 1.478204798622005711e+00 1.583143507835594432e+00 1.878469714268893753e+00 8.341600309722448259e+00 2.296329479872928347e-01 +1.325226074192375592e+01 1.660088044261155971e-01 3.032911943104431352e+00 1.544500510963358053e-01 1.444444693560564819e-01 5.144081121761716613e-01 6.228472420827102063e+00 2.002195300328763139e+00 8.619120730699705746e+00 5.986701025311890190e-01 +1.253702247039758255e+01 2.815208299886055587e-01 4.418741917269815467e+00 7.187649403919402324e+00 1.857768480706825098e+00 1.693270109415251579e+00 4.500029768156658783e+00 9.386766274226390205e-01 7.712460417143821578e-01 1.490837705279541847e-01 +6.470192866248365426e+00 2.538814476100020867e-02 1.482709093692339941e+00 4.810511422160657080e-02 7.397535485801826072e-01 1.366029201822366090e+00 2.938463177620382449e+00 1.905659482665870819e+00 3.274297555223312450e+00 5.946455225965689984e-01 +8.046767686244354678e+00 2.379545842279764956e-01 4.589316043001465673e+00 5.892088873366180479e+00 1.308019335424309704e+00 7.484233826378567933e-01 4.495389998435046053e+00 6.202227507857822619e-01 1.707552168782031199e+00 9.367630937108080147e-01 +4.192176901095245434e+00 1.304693968976899099e-01 4.998027091565603541e+00 2.456526465425167283e-01 1.205473478694641942e+00 1.109994403062972701e+00 5.125196171178717286e+00 2.206741883831745188e+00 5.115846166892562330e+00 1.104691714503143185e-01 +4.157525610946958494e+00 9.298038433732908059e-02 1.491518671460473344e+00 4.496224394499284571e+00 4.648879436827211720e+00 1.793268724253979762e+00 2.896904069484845579e+00 1.356276322086461761e+00 9.923020114331025709e+00 3.558734125538330906e-01 +6.979832709755873221e-01 3.599810987684147479e-02 4.064902498699765943e+00 5.597103986278889387e+00 4.496807253190716835e+00 1.851319113294662699e+00 4.995032507818135237e+00 6.680000375419122838e-01 3.176705087670492755e+00 6.164391597089758923e-01 +2.680618751278343481e+00 1.681546055962608033e-01 4.674994237591107549e+00 7.872155819890408246e+00 3.635532819810061156e+00 5.723527244541317671e-01 1.228843659393086263e-02 1.624022154584328081e-01 7.634482806401528876e+00 9.621470740939815913e-01 +1.129656603051103581e+01 1.754676764823895063e-01 4.925438368822037560e+00 9.090625284174426168e-01 9.872898867967799807e-01 1.967411347408282829e+00 5.647085320216579163e+00 8.040378544211923550e-01 3.157643996826393629e+00 6.705813685367211230e-01 +1.166598416610384703e+01 1.866541563727542041e-01 3.082745872586427183e+00 5.684997481806196795e+00 2.688708007208003181e+00 1.498993448192174283e+00 6.225488991661570992e+00 1.314065400514044191e+00 6.343644934019415871e+00 5.416797703578821732e-01 +7.720230714264369354e+00 1.523894939496055478e-01 1.620746553117432542e+00 6.005901827039864749e+00 4.717729383985791447e-02 9.075246998741233195e-01 9.360149124843241131e-01 1.754815849294320884e+00 9.666726609856759467e+00 6.581401514679491305e-01 +1.453127659928862059e+01 7.703415326140243546e-02 2.479862457434094392e+00 4.182212439636490586e+00 3.488676768426026253e+00 1.206066251747953011e+00 2.285902497850169190e+00 1.194028499060063808e+00 9.286786278550043239e-01 8.091147826884519390e-01 +6.417666940507571915e+00 7.132128551135483163e-02 1.942224670162717270e+00 3.433069127251919817e+00 7.564280838361731041e-01 5.516799087701549364e-01 5.176162075754822567e+00 2.178815429942681181e+00 5.722924693718432820e+00 4.158454834199132311e-02 +4.502867570496368543e+00 2.239682077280483463e-01 1.141094924815538203e+00 2.453579665440670521e+00 2.992162924469959684e+00 8.370073651298797213e-01 1.718538404749463400e+00 4.075217867922253934e-02 2.539196137099058781e+00 4.990272000661035712e-01 +1.769506443642104854e+00 5.077985666082200644e-02 4.536839079078856862e+00 1.926622825410988948e+00 4.021468856985962681e+00 2.704122777555590940e-01 2.804453666907950282e+00 1.607921780184728977e+00 9.484877651296452328e+00 3.670233106390000666e-01 +4.295020083244110998e-01 2.868652070133119181e-01 3.134264451081448577e+00 6.836230003013163525e+00 4.042883960895656159e+00 9.348262365209494273e-01 3.157788950792046023e+00 6.497342539434567410e-01 2.517529722233489586e+00 8.540150270825374035e-01 +1.912602820186987129e+00 6.362962639611402689e-03 3.790830335966000497e+00 6.753767120657978573e+00 4.454347298520647591e+00 3.597830171502631735e-01 5.746913394800006181e+00 1.664073075055900741e+00 9.213646990669767334e+00 8.780134214441304152e-01 +3.963149975944498138e+00 1.436768738550251445e-01 3.590235964594930884e+00 4.171865940500004477e+00 4.196989506671150671e+00 1.790899951828085479e+00 3.907987905963472564e-01 2.629171659041773967e+00 1.771918908979907226e+00 1.659282155546771831e-01 +1.044847711025325054e+01 1.867999171686929583e-01 9.742152202794096549e-01 6.029364879715696901e+00 3.842755370236281998e+00 1.457930089422849740e-01 3.050806799572168160e+00 1.928860746757870892e+00 3.715892327997140310e+00 2.654349553692562091e-01 +7.856135199120164891e+00 1.212882676824621475e-01 1.801474098171824689e+00 8.484064353156798077e+00 2.754740315340553636e-01 1.410439285738713577e+00 4.796002926524840504e-01 2.610915875359472338e+00 6.670148976341948810e+00 6.486294231998313009e-03 +9.804395866994216391e+00 1.639075098111162643e-01 4.837423823790375721e+00 5.260179690540038422e+00 2.017636134845651075e+00 1.254612394194728031e+00 5.546452640168771708e+00 1.375458824455512818e+00 7.174505857330657488e-01 4.918004847159316295e-01 +1.183986689177626417e+01 7.872326102861289254e-02 2.582301908063294960e+00 7.740411186780283614e+00 4.407066198851386396e+00 8.853556556234460917e-01 5.162877457710448148e+00 1.109660738036303940e+00 1.268125593567879239e-01 8.662130880451797132e-01 +1.093683742604408948e+01 2.447064137767908099e-01 1.696855866075519081e+00 5.548678621604610228e+00 1.820809627873263281e+00 1.700607366429271350e+00 5.830452128040040982e+00 3.764385212451778484e-01 1.898685064749314089e+00 5.451812220747674909e-01 +7.056150651686926345e+00 8.818414996117814042e-02 2.747955950871696196e+00 5.338892801584529835e+00 4.473322648271785162e+00 7.333467400342130738e-02 2.177902358616423673e+00 9.320526616437706524e-01 6.762834017402112430e+00 7.935462801762755980e-01 +1.180908873504107781e+01 2.574753599584344022e-01 1.987005140477280385e+00 6.918063648604911187e+00 4.785668471712723360e+00 9.696239217014788192e-01 1.280135659543590876e+00 1.881727503129584367e-01 1.035012278208573377e+01 8.059150064856590578e-02 +1.008412809573388103e+01 2.343166128881368770e-01 4.905764759825019361e+00 6.797230994413787641e+00 3.285521074639472960e+00 3.493548680683078445e-03 1.756029501961107187e+00 1.794157670035024577e+00 2.319307927793950785e+00 1.193434686169847492e-02 +3.749280090904193230e+00 4.960933223025080357e-02 1.971450801044384304e+00 8.330916700800358399e+00 2.349270312429754259e+00 5.221738760240273169e-01 6.366458140784689412e+00 2.387898312417887414e+00 8.441503152405894994e+00 4.979337584731783339e-01 +5.343103528797895407e+00 2.723330372377434361e-01 1.378635711838508415e+00 8.671386126448166198e-01 3.147037907155366021e+00 8.963585668163664977e-02 1.405277975206570940e+00 1.309205332617405571e+00 1.965588001155148978e+00 8.059321310558243967e-01 +7.149160280820787250e+00 2.764868013404646607e-01 1.096825467691220357e-01 3.503192650439979960e+00 3.131184989945668740e+00 1.194188630214327640e+00 4.274505420449012050e+00 2.968756266528913557e+00 2.749295301370240363e+00 7.370923727332389097e-01 +8.210295738041565983e+00 2.272029223367369455e-01 3.779242145994847757e+00 6.686181645391151562e+00 2.011271144842419201e+00 4.622895905968951169e-01 3.398981903852160702e+00 2.343123357207267388e-01 3.729889267099015360e+00 5.792152207898214611e-01 +1.002328179326305246e+01 8.185470612146233949e-02 3.269943977541031721e+00 8.539125023520108826e+00 3.035522647556629483e+00 1.401749737447430810e-01 1.982996845708496103e+00 3.745616727807693502e-01 1.201117123994490221e+00 1.638310756436510696e-01 +2.710850844140515914e+00 2.242145718096996698e-01 2.296536249652671557e+00 4.220260338748655471e+00 1.230213951484597334e+00 9.427382488180584552e-01 4.976262280555096673e+00 1.332924357337322174e+00 6.600361386208043690e+00 9.862980787604007649e-01 +5.949570342069224971e+00 1.418784555555818727e-01 3.232287503680208562e+00 6.141638030385319524e+00 2.842720729387286482e+00 1.023630011169686105e+00 6.974549437024968768e+00 1.541945738455003934e+00 2.913259034713350015e+00 4.512992539354583332e-01 +2.028585498043759650e+00 1.398763410169154009e-01 3.691098756081625076e+00 7.976451317237516214e-01 4.435499859432201486e-02 7.467345392685726946e-01 5.281840013916209386e+00 9.546775874932222905e-01 5.365778369266787529e+00 7.770900276041966537e-01 +6.077535052205729649e+00 1.395387528894324602e-01 4.775093402342934112e+00 3.132020266567483890e+00 1.580718289061279869e+00 1.416317099261457102e+00 5.862579332019776324e+00 7.318328790735707523e-01 3.709729378713444436e+00 6.670468053137402764e-01 +1.214513163540950025e+01 4.365179876861721014e-02 3.838251055066958628e+00 7.238524315230883133e+00 1.660270397218274852e+00 1.239458019962108137e+00 1.401234933150055095e+00 2.814065416790874075e-01 4.456870379094779899e+00 2.891479005157764348e-01 +1.087941705836024830e+01 2.995998122378682460e-01 5.777085219163696772e-01 4.703046220800023214e+00 3.086014168894017917e+00 7.044434508496584257e-01 2.037881492641501424e+00 1.019327349906296476e+00 4.393779773589142401e+00 2.305255684467343302e-01 +5.290012626145627728e+00 9.008901407316972920e-02 1.142983813855805719e+00 4.118316186532029022e+00 3.637703293797282633e+00 1.906330254257075252e+00 1.445500604367967679e+00 5.164490469163260933e-01 3.532786407019917974e+00 8.270890916952341465e-01 +5.697086356845923127e+00 2.235572514757046270e-01 2.266800826831066873e-01 6.383456423897621690e+00 1.264197247239626343e+00 2.912491491275546185e-01 1.306548262207717137e+00 1.684488621935003927e+00 9.359893288902904729e+00 6.328523844944041743e-01 +1.359123925577359593e+01 2.715219536985591462e-03 8.374487623417636861e-01 4.033547555739824375e+00 7.378921961934747920e-01 1.372002555673720758e+00 2.694288461006839164e+00 2.082180871032943692e+00 1.911434796530308899e+00 7.656913496191556368e-01 +9.992533308249194945e+00 4.104749241998207482e-02 4.724075616116481413e+00 3.461796948861655121e+00 4.204372983561600385e+00 7.310738374531249306e-01 6.107621094624161806e+00 2.638927091445617990e+00 3.624613744624816114e+00 4.700163600933867647e-01 +1.685245491179172550e+00 2.115428105359661026e-01 4.407417050425523897e+00 7.476567774422387735e+00 3.634488913192286841e+00 1.698280219311323336e-01 2.945428761291103648e+00 2.713451434553051822e+00 1.012624145292138067e+00 3.648699049547410311e-02 +6.589428437578542130e+00 4.446906542749364671e-02 7.810041614180479597e-01 5.691285012262346399e+00 4.554086499149781808e+00 1.277799954679892380e-02 4.026680491475270740e-01 1.953473174748952212e+00 7.152482187616325815e-01 2.086430282341091846e-01 +2.720849865844793936e+00 2.440203981068089778e-01 2.917763308083296092e+00 5.899884531261626819e+00 3.940367037369739034e+00 1.211422445527540859e+00 1.567556955778588890e+00 5.600673976327497083e-02 9.876156837696910884e+00 1.599751919864411676e-01 +2.834482533918473379e+00 1.520034844725705325e-01 1.978602545261327617e+00 1.676165260704382654e+00 2.194029998012147153e+00 2.492932602456554569e-02 8.120351889658737887e-01 2.560447673664525858e+00 2.686589650575758270e+00 4.039721790527054379e-01 +1.484413911807410891e+01 1.998020163214577760e-01 3.141873601255305015e+00 3.066415597754779565e+00 2.205093406956332380e+00 1.116117348869391623e+00 2.615679339050218655e-01 4.804557806332970804e-01 3.540690054736377768e+00 9.294949005824936217e-01 +8.903890154201720364e+00 2.893997238796244265e-01 4.277785905487593077e+00 3.596708777222128894e+00 3.332199664018714813e+00 6.094561931515880548e-01 2.121001953072600532e+00 1.426684687927117112e+00 9.708702533734449247e+00 5.724400833134991595e-01 +3.704414716601320379e+00 3.534656415192761331e-02 2.191170133339663817e+00 5.192464390336396285e+00 2.340092081088205767e+00 9.268383918699469870e-01 3.615953197841254241e+00 1.025661142784032753e+00 2.734380318250539954e+00 8.545976971860628213e-01 +9.213691025538279789e+00 1.023114031986859657e-01 2.236053896606724933e+00 6.731642119286943560e-01 4.131381102030507790e+00 3.423592126394250368e-01 2.177072569545674519e+00 1.414220327358206131e+00 8.610263975317616669e+00 4.954105311458011363e-01 +7.882621005926893076e-01 2.756438662864029721e-01 2.440056720240608268e+00 8.095898270821609843e-01 2.982700784281210993e+00 7.367102799018900861e-01 6.005049730578022604e+00 2.935825349713905741e+00 8.105806119374374674e+00 7.343900173346469273e-01 +7.332899839919692297e+00 1.012310325009186385e-01 2.786199548500924550e+00 6.996915193838988856e+00 3.958649628430874756e+00 6.984966471313347469e-01 5.034280993433526419e+00 1.175980210067817389e-01 1.010859759006517855e+01 6.006376844057623732e-01 +7.335639593623159094e+00 1.035066387333896804e-01 4.632911160270253959e+00 6.920712126173365952e+00 4.840386095819143364e+00 3.536787893048165543e-01 2.116621517341860326e+00 2.028873912140862767e+00 5.484712972130116881e+00 8.008724869574028737e-01 +1.173589800901229019e+01 1.675454624679203752e-01 1.857307229807804827e+00 1.233541929072509369e+00 3.229707875128986050e+00 1.703661647359659526e+00 1.399653313244334507e-01 4.231632680835958338e-01 1.622735163775802736e+00 1.411886133281192723e-02 +2.170542045884753080e+00 1.649943693366306696e-01 3.719614864008544686e+00 2.628731378385484874e-02 4.659863887863504139e+00 1.953928332749399477e+00 4.030765489154215508e+00 1.884789318558428350e+00 5.218984001391103966e+00 3.659090632923160946e-01 +1.056590580826244263e+01 2.862455750574361968e-01 9.503624324612436336e-02 1.127223921843998111e+00 1.774286440361028117e+00 1.354483262491954498e+00 1.915978523368969677e-01 2.412656854678067564e+00 4.504271337259460495e+00 2.537074724100759626e-01 +6.043982956924061511e+00 6.522158466617089707e-03 2.382223597003132909e+00 2.938800347127498824e+00 6.293807419434965800e-01 1.252993652180068862e+00 1.825306399812175462e-01 5.606017677912336072e-01 7.204927649424960556e+00 3.160779924731268453e-01 +1.156234306026847136e+01 2.625389283153459208e-01 9.188016061419135294e-01 3.956596395967132196e+00 1.157796919074650654e+00 1.652334566517626113e+00 1.741466103683401379e+00 1.069893612030600405e+00 6.560230433252789872e+00 7.063619376068841493e-01 +7.867290877658208004e+00 3.150568657612348028e-02 3.208635889352626780e+00 1.260684268789601381e+00 4.422562013782658674e+00 8.540116238383288483e-02 3.831517191823027968e+00 2.753952785268408032e+00 1.024925082683439470e+01 5.986830995941015976e-01 +6.908975429542424607e+00 2.465841896031346625e-01 2.002845859032076348e-01 3.450171987307428356e+00 5.654276553583914566e-02 5.888214584539321894e-01 2.954089858527504830e+00 3.998447426773437119e-01 8.565177675858345552e+00 2.149680205088763119e-01 +1.440579812308176999e+00 2.654515414198045306e-02 1.135165258992570925e+00 2.417274957088451526e+00 3.433882671585630764e+00 1.266388978164296741e-01 1.387836349982975115e+00 2.496160923818382393e-01 9.660716199882918076e+00 9.465672103847755370e-02 +8.782530926087384060e+00 2.393484704828878762e-01 3.968161715697180902e+00 5.364616924126802688e-01 3.825267183065478305e-01 1.180409496794958990e+00 6.081207848146038764e+00 1.796741281632131981e+00 8.120621615047823871e-01 4.720230640647659071e-01 +2.467121281489119689e+00 2.669775602143918958e-01 1.920947605339624609e+00 7.436975019510371432e+00 1.718195053919568949e-01 1.974195934046878431e+00 6.198510534051498766e+00 8.831966827916776230e-01 9.463134124520076185e+00 6.678848326528338264e-01 +9.247156276444975731e+00 7.001843581120269222e-02 4.115753916944164814e+00 2.041110834822566389e+00 3.904491445485749335e+00 5.587411667288546546e-01 4.848061119307658373e+00 5.410753659731812881e-01 1.022435181440595420e+00 2.642349075966086147e-01 +1.366546319900654893e+01 2.924851229239786368e-02 8.435137812387760725e-01 7.697721002565737436e+00 4.954980248261398046e+00 1.503394228824324497e+00 9.547207340156207422e-01 1.149510349323715541e+00 2.550282953574176226e+00 4.858288944991739911e-03 +9.937610741476689213e+00 2.759728949218902619e-02 2.479287724279272132e-01 1.845578662935752234e+00 1.148725236157810414e-01 1.874378505644074044e+00 4.577898001225015001e+00 3.157179950007004132e-01 6.572428732526478967e+00 9.817710114629516482e-01 +1.335840810844957005e+01 2.901657393525319262e-01 2.291037384835683088e+00 5.523192339535359707e+00 4.263209114304837399e+00 1.850890820836459616e+00 4.248656287099825235e+00 1.437415418687666868e+00 3.969903039271164946e+00 6.444202791760184068e-01 +4.192252523941295550e+00 1.550577732890167648e-01 4.335142520595742788e+00 3.915362307244128814e+00 4.174447531315469639e+00 1.464441590023846773e+00 7.659465632505535471e-02 1.119809765001355650e+00 3.868034385081745352e+00 9.191814708483783125e-01 +9.950321370165964296e+00 2.416678064761437206e-01 4.452588664798807550e+00 7.980962757329372437e+00 3.576862137763775706e+00 1.878820577509221490e-01 5.810484732429623378e+00 2.818609720584823730e-01 1.043698983315975104e+00 1.320478448637341096e-02 +3.344531274564604306e+00 1.638261678427317125e-01 4.752068092969680357e+00 2.056633949183845012e+00 4.059152604022060906e+00 1.323178175655694844e-01 3.634674435700454787e+00 1.332248033612655647e+00 9.750778647413559597e+00 6.571876845461107619e-01 +9.313380312895419566e-01 1.327820969301612697e-01 4.452531935545533059e+00 7.853262599622130580e+00 3.589473016958418139e+00 8.655756972988859488e-02 5.281257933398629589e+00 2.878400204002617091e+00 1.530027895964270801e+00 1.410499062384990010e-01 +1.093728606033430673e+01 1.496850021362609306e-01 3.004629347358933611e-01 6.530279224244562641e+00 1.505697907373285682e+00 4.359977775952421641e-01 2.822161658968949549e+00 2.723579655675674616e+00 4.517358372113638332e+00 4.762740241746520331e-01 +4.126188688687098427e+00 1.785762566399805643e-02 3.827008942348112619e+00 9.799394438157742471e-01 1.190849990888681598e-01 3.586378183201568426e-01 3.473362514860903971e+00 4.907195619794019192e-01 1.082846597286479273e+01 7.338269154915928461e-01 +1.007171327046501119e+01 5.302731525826676236e-03 4.442829328707308179e+00 2.714799527596614137e+00 1.292804717399506087e+00 1.414685076132262687e+00 2.183756095362196170e+00 2.808301856380406747e+00 6.780760473974004832e+00 3.843291080113009350e-01 +1.167399330294518034e+00 2.464035477017099129e-01 1.402426005668689912e+00 1.150248779473895366e+00 1.522194921445518379e+00 1.381162689722999160e+00 5.435001694932432237e+00 2.392787620207044608e+00 8.988227846318018521e+00 2.269266068514101953e-01 +2.894390818868963322e+00 3.501963832568973783e-02 4.740386916137786066e+00 2.285802360415889467e+00 4.429435669874964177e+00 1.149591990037637013e+00 6.309683324067085763e+00 1.754139509852320478e+00 4.996119690460893992e+00 9.633675391347560346e-01 +8.428267793741513358e+00 2.975519105867783232e-01 2.738097388061362825e+00 2.713125296218298343e-01 3.983255273469377133e-02 5.832842143111387490e-01 9.222455190282240478e-01 2.660850484958854789e+00 8.646005308057572947e+00 7.723493728139844139e-01 +1.060844902950677238e+00 6.766848820457482816e+00 2.571544822122694196e+00 1.301410412620856993e-01 4.939075861095859388e+00 1.944985184657319843e+00 3.071352746565616521e+00 2.952877773172982057e+00 5.413409368896327400e+00 7.835805833878990434e-01 +2.676604664379357956e+00 1.015453292439209010e-01 2.796370894748441138e-01 3.783589975482610779e-01 1.615586647489880567e-01 1.462415378364156915e-02 2.849926147228915241e+00 1.990766760230136434e+00 4.608386640197815742e-01 4.913530386323300414e-01 +4.928622521604909323e+00 4.776267137399662133e+00 6.738922765189601094e-01 6.737755331040837792e-01 3.523416780856081232e+00 1.987539862409304803e+00 3.322034856620849741e+00 2.129310622060661684e-01 6.600863177109800084e+00 3.085759141198198829e-01 +1.785331680394218745e+00 2.003420991178347599e+00 2.900766376377190259e+00 1.569593908723631026e-01 2.959800314520040221e+00 1.332160482584163530e+00 1.574742777579251296e+00 1.474370607477436312e+00 5.161994254879935795e+00 3.573259702589637321e-01 +2.060566256973487498e+00 4.064024192901496413e+00 1.638291229583957342e+00 5.291965806117688853e-01 4.147376271759576127e+00 1.871711279692187535e-01 1.592167092938667761e+00 9.832800064235791559e-02 9.093859685572962093e+00 2.871171512211987409e-01 +2.802432727066052731e+00 4.152681619178160588e+00 3.519899751123976461e+00 8.767373897844914499e-01 1.497015974178587117e+00 1.178656320463950191e+00 3.590298473162238935e+00 1.121258186897473141e+00 3.999535611626285458e+00 8.235737108516272276e-02 +7.793345816216601385e-02 7.119616496871206124e+00 3.263514453318660635e+00 8.767708034167319697e-01 4.367621895504575136e+00 1.584033235097142001e-01 1.753016637889057261e+00 8.806782211544889050e-01 7.660523694529250971e-01 2.421807599200342942e-02 +1.650807741747343904e+00 6.676864939234765650e-01 7.158398866250768044e-01 4.208260033098576436e-01 4.020367360514349286e+00 4.706317984761432260e-01 2.612129318099994713e+00 1.171799316797829782e+00 1.085072636057884621e+00 9.463861023983399789e-02 +4.058767043920196826e+00 7.095671728991746363e+00 2.700297896325542180e+00 1.613772848781617197e-01 2.851637748082545443e+00 8.849171780970555012e-01 6.469348385074413343e+00 2.409711450205083150e+00 1.227804052323222539e+00 7.245949939817655228e-01 +2.952642653678108964e+00 1.886946931087596369e+00 2.473081195542755850e+00 5.362099416315594391e-01 1.419640415165426717e+00 1.903766283029795225e-02 6.887126590983250196e+00 5.688537003635961709e-01 3.423639520476965625e+00 4.938406145277395298e-01 +4.737499561105624757e+00 9.968754726664579291e-01 3.774680347781333989e+00 4.881731108025820776e-01 2.226755900717518610e+00 1.171985346633335423e+00 6.671227239296362299e+00 7.695013938605947956e-01 1.042858080409883925e+00 8.496226110071675164e-01 +5.325414666879468850e-01 7.018918782479677709e+00 1.608471156325481655e+00 5.862836927685144417e-01 2.672078926166417290e+00 4.874633009746880408e-01 2.209336683548580815e+00 1.743210228627345870e+00 7.300458180698917943e+00 3.180482670802708967e-01 +4.057375329048528378e+00 3.890521688612440965e+00 1.762635121494908752e+00 4.315974671518035821e-01 5.740273295456138625e-01 1.149928423510549580e+00 6.645380061650246084e+00 1.716175648811826715e+00 1.817203695888137016e+00 2.279386936010485698e-04 +4.819371354809093511e+00 1.986334992808725719e+00 4.583363789373673391e-01 3.992089559255137532e-01 1.511460483775759922e+00 1.660344970547767085e+00 4.073543600444102353e+00 1.064209283618703594e+00 3.163140007477470483e+00 6.883692634412575950e-01 +4.822861817330296397e+00 1.286480435582614712e+00 9.370740372064094714e-01 9.673040603625950862e-01 1.291594883259390425e+00 1.038459954771715044e+00 6.225515359923287306e+00 2.457650031437864868e+00 1.095606761972162424e+01 7.337655625192263109e-01 +1.388473219412195148e+00 3.816243179861769086e+00 1.442597880348657213e-01 7.222240964942758801e-01 4.062612762646490516e+00 2.874594600573110448e-02 4.710301168894129198e+00 2.970156004203755362e+00 1.950104669992388517e-01 1.213572941978990904e-03 +2.095978035147009866e+00 6.873067538223646133e-01 1.319090499678944095e+00 6.916304149708443205e-01 7.253452473503479991e-01 1.948495719716487162e+00 1.265245191334455122e+00 2.196421971177734633e+00 5.301304620523421995e+00 1.584176397116228152e-01 +2.979233187060020605e+00 4.956587004286280518e+00 1.688392721619113690e+00 7.532059070534440348e-01 1.887662047040422619e-01 2.805001211605031575e-01 9.824130470675018767e-02 2.962504536056278504e+00 1.072663709115177610e+01 5.013157111486933326e-01 +2.788962486475272673e+00 5.115971710107624304e+00 5.660005924878737105e-01 5.560222984350132736e-01 4.858087680745722281e+00 7.725785191495309068e-01 5.845998556520539680e+00 9.987118052417467418e-01 2.295433607375663598e+00 1.326889295282640546e-01 +4.557887825045138008e+00 2.247326501433015267e+00 1.308921194395065601e+00 9.753282383497733354e-01 1.730029373381708480e+00 5.701790289472219442e-01 6.352823959792196495e-01 1.147755410972870260e+00 5.520736993109069957e+00 9.774412642381167249e-01 +2.045438792050340293e+00 7.561046060398181723e+00 3.522811502396113070e+00 6.976548466048726471e-01 1.767378331045376783e+00 1.924976381949984106e+00 1.266202415138989235e+00 2.046343295450062438e+00 2.076108124751949724e+00 9.755719638581734632e-01 +4.868031211031395245e+00 4.182997028123785377e+00 3.669697829412847945e+00 8.683837530035829477e-01 4.809874760362171209e+00 7.146311160463343359e-01 4.140379287730196367e+00 1.871204810554052189e+00 2.927063933787202199e+00 1.781360315397091387e-01 +1.447543209935399089e+00 3.894063908911108207e+00 7.167099377268382199e-01 4.816816841673178251e-01 9.437790189709754918e-01 7.136790168415698687e-01 7.984261778454281311e-01 1.267997907136523494e+00 9.241262771031886203e+00 2.264187036508533701e-01 +4.492110383454359201e+00 8.423313033097198144e+00 2.601809612520743276e+00 1.877570508378717529e-01 4.720029746759013101e+00 1.700776811458877491e+00 4.379722879784793577e+00 1.286338778406133088e+00 4.897457407195897616e+00 1.463406370506259435e-02 +3.397516181353549269e-01 5.474743776680605079e-01 2.792881561416644676e+00 8.613177248107457551e-01 3.084547950087940915e+00 4.295939916996971419e-01 5.853057398141740642e+00 2.886701648573187562e+00 6.513812374119662962e+00 3.683927726861278007e-01 +3.123566792546268012e+00 3.586380650299095585e+00 8.986175900527371141e-02 8.341062939442902557e-01 1.688951864196345243e+00 1.079977094532845516e+00 2.714109110128215541e+00 2.839337530931991704e+00 1.218807949172431293e+00 7.915582761215033125e-01 +3.141700155842215736e+00 1.204667402016855737e+00 1.916351797648172095e+00 1.536958008100480777e-01 3.425634957816583004e+00 5.173225973429682600e-01 5.259306090770171416e+00 1.917625582619049140e+00 1.075917707540842727e+01 7.474619317582414935e-01 +1.334327177064201120e+00 1.275405518944317640e+00 2.568022248402845875e-02 8.801880626520913742e-01 4.297141956880407010e-01 6.992528373701238920e-01 6.553594825126268120e+00 2.898861772480366694e-01 5.921191598075131957e+00 7.429605987984524429e-01 +2.771024127637877310e+00 2.706234632094140391e+00 3.850437535134872746e+00 7.057112116190219497e-01 2.533276847739223125e+00 1.771636964438744632e+00 3.080408803160064934e+00 2.070444129927007104e+00 1.189083402543695822e-01 8.109099497493107433e-01 +4.429566490061738193e+00 3.870904287199198102e+00 3.908477669001917398e-01 9.583973851447378234e-01 3.595638219458183737e+00 1.789184903519657199e+00 4.609156216292533692e-01 5.237161367552056745e-02 1.898196986141101217e+00 4.720040556194841086e-01 +6.236410129144742687e-01 5.677002709722877682e+00 3.495932245976291153e+00 1.724677152701515892e-01 4.797077834826430021e+00 1.896003719678501565e+00 6.666830956711757850e+00 1.917567880520230972e+00 5.078350320183913524e+00 1.619340143708598578e-01 +3.981295223585228360e+00 4.293445223367310604e+00 3.800375528545455239e+00 7.832850811253453394e-01 1.697773609172191778e+00 1.107703012941383403e-01 5.882009120179721329e+00 2.377183558175493872e+00 1.016804229228126033e+01 7.498926347264457393e-01 +2.600915763215731591e+00 2.624416429045383747e+00 8.727133245527625149e-01 8.321007865109071311e-01 3.120145967108394647e+00 1.706568507429746751e+00 6.924345627676093073e+00 6.502709038408825970e-01 3.057969519658665369e-02 1.561628673971688919e-01 +2.990086920642259782e-01 7.612290167957059595e+00 1.048504608494758017e+00 4.243228873493485320e-01 4.221314528605337735e+00 9.278772379775166446e-01 2.349514943790474764e+00 5.255177442909533259e-01 2.143073036231040618e+00 6.074576627365183557e-01 +3.899808502523676168e+00 7.299461473479367690e+00 1.095057277835178589e-01 4.079961930720432672e-02 1.621607684387396553e+00 5.256243374272819846e-01 1.486732148961382727e+00 8.027452089786548672e-01 5.594994509646422642e+00 2.574106532041128270e-01 +3.023696564487597271e+00 7.074713638764114521e+00 1.522391750286943957e+00 6.952922812547067677e-01 7.386888415687059561e-01 1.904294326226209977e+00 4.712216395755660869e+00 6.501349564540930270e-01 9.969785446062145340e+00 7.550945275312674898e-01 +1.543379307984599214e+00 6.829479885114219329e+00 3.204292732322415738e-01 2.897902351539538568e-01 1.968018159493589270e+00 1.312508995789594346e+00 2.708863147028642615e+00 1.956603963514276678e+00 3.858471150102140257e+00 7.226613324983187647e-01 +2.530459391858276952e+00 2.304294321666098710e+00 1.613466033140124711e+00 6.299550659672248365e-02 2.557517824305648446e+00 1.403315613527134742e+00 4.690924014732587466e+00 1.213893307285142553e+00 5.916330575871066699e+00 7.792844130394782631e-02 +1.928958533970001055e+00 7.096037593440583713e+00 3.299214390196449909e+00 4.754507764571461736e-01 4.595032873457040701e+00 6.269257509934247352e-01 2.676009205554832349e-01 7.111427300413641905e-02 2.311387519441321370e+00 7.607719658377676275e-01 +3.049750470993188411e+00 8.335532589038272988e+00 1.373761433026730483e+00 5.780521456251697110e-01 4.958750575379713865e+00 7.704485760265957772e-01 5.295783844382295769e+00 3.106174373836714242e-01 9.119442286621413984e+00 1.454365312917409447e-01 +1.446643143411851629e+00 1.641242803584559207e+00 2.373684364313463746e+00 8.733542221566478192e-01 8.350946657808716589e-01 1.827085120550399511e+00 1.796517849664760247e+00 1.705076201114264389e+00 8.296752770476137684e+00 7.700551493773489797e-01 +3.366516415093608217e+00 5.615004677240882813e+00 3.229775535441422818e+00 3.310459399464378283e-01 1.088020205681265562e+00 1.380181017003498711e+00 4.110524683994838391e+00 2.481465439558942165e+00 1.115804813826559716e-02 1.616539324263285282e-01 +5.339002830872147110e-01 3.839053681064814594e+00 2.333489534725208259e+00 8.432771114289439041e-02 2.102522728545276109e+00 1.709023161576461725e+00 6.917442654625217680e-01 3.462567460748395831e-01 3.782775783847899476e+00 1.071179999213418554e-01 +4.038277759901608199e+00 6.782157613841707011e+00 3.464511868539065453e+00 3.371376637740397531e-02 7.730806184225119670e-01 7.252544893421604133e-01 6.872132022199162193e-01 2.814389010091199683e+00 3.447296041223141039e+00 1.893497025003773038e-01 +2.731398993279879228e+00 3.676456867956779728e+00 6.413375855037339868e-01 6.707794732330785159e-01 7.635992572959304781e-01 6.062167860722607049e-01 2.063055943432477779e+00 7.336308576363859135e-02 7.472848003733477462e+00 1.287928899982984099e-01 +1.453840364993632228e+00 9.062482719258549979e-01 6.882205879952656424e-01 2.182327096949714385e-01 2.024410040526736232e-01 1.295642963260670966e+00 1.330150396283942271e-01 1.736145709990954078e+00 6.112044371929087561e+00 7.027845512380351822e-01 +1.210119312939017533e+00 7.630467468868430414e-01 6.359188990088751048e-01 9.883815275234506537e-01 5.934758597976730332e-01 1.831489821220492642e+00 1.310176158219893416e+00 1.258981371172946284e+00 9.653015748557789877e+00 5.710674551489269835e-01 +2.041872616241314109e+00 1.223997932765245711e+00 3.592523080817271008e+00 4.957374306008986986e-01 3.949335508277540985e+00 6.291860827029358560e-01 3.113717329409727341e+00 1.389609354520767059e+00 4.805115070835719315e+00 1.445284193078527624e-01 +3.575248649915818255e+00 8.905544750152357025e+00 2.966905439089235763e-01 4.679521298887630021e-01 3.547669603089278034e+00 1.578738230960443634e-01 6.270181915307466269e+00 7.487332787197820139e-01 7.886412615362010214e+00 8.133212834800832569e-01 +3.898698540050224981e+00 5.123757154565923067e+00 1.178107462557977492e+00 5.520746813096077954e-01 4.592951289518920621e-02 1.171909103767588389e+00 2.927267136454773322e+00 2.552935710110848078e+00 8.342615367499133683e+00 8.906236190999595737e-01 +2.108021535094918519e+00 5.560002888746932825e+00 7.214745149145316283e-01 6.765900158851164692e-01 1.023718975037019030e+00 5.744441677430218718e-01 2.485628740508086798e-01 2.832571092367738075e+00 7.596538198565406574e+00 5.914159707314822212e-01 +4.869067486253129573e+00 2.921814738200520623e+00 1.610700494896931900e+00 9.811040652599956058e-01 1.628599890640177072e+00 3.374886126447058654e-01 6.583180705038420122e+00 1.022109354202180187e+00 2.448534262177565424e+00 4.087328272831077802e-01 +2.420585719788033607e+00 4.954656265767008350e+00 2.231237042402161030e+00 9.790433090249440751e-01 3.332677810332588031e+00 6.561609460180721776e-01 8.270420803686340250e-03 3.528899693185899578e-01 2.741096663606271022e+00 1.378071713616224603e-01 +2.754906745122323031e+00 9.676710641503563082e-01 3.754240456912557367e+00 5.250193878563741423e-01 4.142397075465397371e+00 1.381722150840025476e+00 1.687280922291270358e+00 1.067933655487581790e-01 4.015412949008595467e-01 2.082096208576281748e-01 +4.888597998415178836e+00 3.014616594535894478e+00 2.837447468287521257e+00 8.929321846889970438e-02 1.593208978592462355e+00 1.432010333523069168e+00 1.362472022175857500e+00 2.023735351705774121e+00 8.040906539490745075e+00 5.333388283334727920e-02 +4.672702450324211831e+00 4.692525988250669577e+00 8.114199473892678149e-01 6.638642607029177078e-03 4.763672448857547703e-01 4.352861108378174304e-01 2.409652310337002223e+00 2.792543818597630345e+00 1.519095639879380233e+00 9.479421782536426866e-01 +1.390626568565362930e+00 5.795403282043417370e+00 5.780808828259962340e-01 6.537836869813318241e-01 4.342143903361439072e+00 1.328515786636720097e+00 5.020182370459501664e-01 7.291349036975974807e-01 8.463574453670117848e+00 2.741521287108358296e-01 +4.274877195091104198e+00 7.028513230726042060e+00 9.529844002173715189e-01 7.084183854011977255e-01 3.053184380355488781e+00 1.621308385572049371e+00 5.106963486979936295e-01 1.138778733677962673e+00 1.513533548987051613e+00 4.128356930393282109e-01 +3.624662754171856349e+00 2.618325768156440247e+00 8.047122068257333005e-01 5.662174560363387732e-01 2.262254632401385024e+00 2.208252441574161118e-01 3.245715851864902746e+00 2.088639737645078043e+00 6.869899939030401192e+00 3.833214771865146586e-01 +3.575490259832633022e+00 6.910866830500633995e+00 1.717562694591180605e+00 1.419119188604517356e-01 2.158793574868946408e+00 1.330907174346497746e+00 1.533175421100802627e+00 2.256864015809196822e+00 6.590486673228634018e+00 3.476457046878822510e-01 +2.763065587192560457e+00 3.755485876415471047e+00 2.937747270412279121e+00 6.776105276205796057e-01 1.102731743682296539e+00 1.671531786654884888e+00 3.194714296103120077e+00 1.832857589884217653e+00 5.267733310304743455e+00 9.498442020616374437e-01 +2.180692874176391349e+00 4.999495552064338710e+00 1.702888717024749976e+00 6.344642518347354265e-02 4.735873322905289839e+00 1.719599405515690238e+00 5.875922789677373359e+00 2.656004507669272208e+00 2.799792892846766357e+00 9.027899878643840248e-01 +1.498261411619749683e+00 1.440449178719120038e+00 3.793107505633872112e+00 5.092674831952860304e-01 1.034353051067818274e+00 1.569113426588875537e+00 3.771789988063644294e+00 1.328199351063930056e+00 6.225317682380070217e+00 7.271156352129748424e-02 +4.315942201307298998e-01 7.981247257459226141e+00 1.336073327630646901e+00 6.032379115696278049e-01 1.219125442838360662e+00 1.456458998083272505e+00 4.742675091300004864e-01 2.983575448822485932e+00 2.556602655333460650e+00 3.088219887595959889e-01 +4.976840216515537207e+00 5.358430906005960281e+00 6.245523297173987132e-01 2.545868317479035303e-01 9.742520666157300502e-01 1.182300247768848678e+00 4.654689808343711599e-01 2.709837605689326967e+00 5.452250849671616884e+00 6.515934524029750596e-01 +3.027576266208495070e+00 7.465991597741851393e+00 1.312320289625385605e+00 1.808157433154811145e-01 1.175791304316830654e+00 1.202757075039505796e+00 4.623859408182577901e+00 2.068219070878894339e+00 3.538760796420987731e+00 3.191906695569177721e-01 +3.186056897890198414e+00 7.744541371714031008e-01 7.520333736299331662e-01 2.346946453265875698e-01 1.939963125002858169e-01 1.102878394022341890e-01 2.892927495768838675e+00 2.226458507448537905e+00 8.040128531690038827e+00 2.426324783043983802e-01 +3.010003224219015117e+00 3.421867958770924645e+00 5.220586116504088992e-01 7.415249008538514763e-01 7.940706222571397577e-01 7.440532342345227423e-01 2.342240626863175024e+00 2.838160438547582931e+00 6.965119358930052407e+00 7.994713698433695281e-01 +1.073150862609050904e+00 5.708596454024827516e+00 2.122872605431856297e+00 3.879631915218560989e-01 2.315027253640028482e-01 9.412461989804450369e-01 1.359498791221620095e+00 2.799047819563208250e+00 6.092966540584811241e+00 6.446687874293053344e-01 +3.458319946541093426e+00 8.965823126867210391e+00 3.472581333838808959e-01 6.522372110328005235e-01 4.295269312487254298e-01 1.454437017783624775e+00 1.026918893392381404e+00 2.262804025523970530e+00 9.073155138943480580e+00 5.447998210661599838e-01 +1.800815055028895939e+00 8.579365052829048821e+00 2.541477396290954260e-01 2.397851878036376672e-01 2.759387911051200515e+00 2.947509094624349846e-01 9.515331736896013304e-01 1.743545886323498051e+00 2.156608211313451928e+00 4.566652586160673266e-01 +4.296243379948193386e+00 4.589758336708962716e+00 3.455005162367942528e+00 4.939154835666571541e-01 3.524083380370812701e-01 1.332555812949300478e+00 6.993865493780931253e+00 8.776996462395436627e-02 7.306362098970477170e+00 9.464560745296662914e-01 +4.270913173204858637e+00 4.311969821782867029e+00 1.235273021108498348e+00 1.363559640515099591e-01 4.297344674974395984e-01 5.399230520058395655e-01 4.519230441177060520e+00 2.223130570132609840e+00 2.003741389920957516e+00 3.000032742213165626e-03 +9.696108658633073585e-01 3.029563706398431311e+00 3.435820656827302866e+00 2.808855835523164091e-01 4.964076077685161792e+00 7.870171799195373463e-01 5.160598369656576700e+00 1.615991618531589236e-01 4.168851015871288368e+00 7.207503227396369061e-01 +9.857942554944587599e-01 2.241766796766214931e+00 1.094309073772436580e+00 6.171782099877928252e-01 2.164628407777784425e+00 2.967518925643408689e-01 6.897409292902939804e+00 9.171811935351321665e-01 5.578640625010033105e+00 4.324319825361930825e-01 +1.359323138290471800e+00 4.701967131801875199e-01 9.050689110105434310e-01 2.965795773291597381e-01 4.828973782133643589e+00 1.476756345192362208e+00 7.663619972606046105e-01 2.684843417506681096e+00 1.573201667699820838e+00 9.645271733524597435e-01 +6.432401347291311078e-01 4.025095134154975440e+00 3.309291976114321798e+00 3.338009834108435214e-02 3.084159326974440951e+00 7.597149110462917410e-01 1.345625764516446221e+00 1.543092560770717991e-01 5.232739162356885299e-01 5.344642145090121588e-01 +1.893475424698252141e+00 4.846915016695094280e+00 1.017577622922591463e+00 1.454379078590283259e-01 3.217212279193671698e+00 1.534170379797259010e+00 1.500675184724801436e+00 2.195608560978177248e+00 7.840082621731490065e+00 9.423202685727883887e-01 +4.916089799921347314e+00 3.077404880415298694e-01 3.341398797528096321e+00 5.790895913656423089e-01 2.109983576554563811e-01 1.849697544503176694e+00 4.269817133289845579e+00 2.772678110702025744e+00 1.597462715869091276e+00 2.066184857660853247e-01 +1.781292690950635027e+00 6.637468747977988137e+00 1.464153733648121847e+00 2.712309115523448000e-02 3.857947122149120389e+00 1.296349898299295811e+00 4.044166349775594860e+00 1.645944211560824044e+00 3.273391468292933260e-01 8.630632196811667267e-01 +8.171982958624174342e-01 8.696289780825402715e+00 3.455462363279165672e+00 8.945385963649863381e-01 2.164679436470390295e-01 8.639775191003977728e-01 9.436930182918934484e-02 2.039374760416071020e+00 7.722056720400328089e+00 7.888445971939340717e-01 +2.023302408059274970e+00 1.310618978377030786e+00 3.155456554057674889e+00 5.010819036675714377e-01 4.538509162145537346e+00 3.704064878007766737e-01 4.328283814895621973e+00 2.633257692097203950e-01 2.643788071556784747e+00 2.432016064719373372e-01 +8.102427541700596425e-01 4.125234289775202789e+00 1.517297146146757925e+00 7.389238601698774334e-01 4.067571276286313653e-01 1.735885673249011996e+00 2.664598954585144064e+00 2.602674375990287281e+00 3.116895494600373961e+00 1.762468820849705242e-01 +2.621132195703196111e+00 8.425316661290198184e+00 4.994480734649351383e-01 2.844736464195067871e-01 2.275884645154663488e+00 1.142221825149852377e+00 1.212554029681834233e+00 9.240986804861089920e-01 2.170291307332780084e-01 6.849869128634944460e-03 +1.174342088277471774e+00 5.577399746499002831e+00 3.951771200670569417e+00 5.006730198987506819e-01 3.596816929922009187e+00 4.994925384211443831e-01 4.413151350909869208e+00 1.418601174288871114e+00 4.839712146933547565e+00 9.760601828982439221e-01 +1.878213562249231749e+00 4.684555617152866169e+00 3.889299363513806895e+00 2.336972704101780707e-02 4.196904367361877775e+00 1.636484945202322683e+00 6.120210824336769662e+00 1.961635110777701918e+00 9.569470113865142125e+00 2.306199899979174406e-01 +3.431803129291879362e+00 4.012460279071989433e+00 3.786995576138590280e+00 3.401138113223747261e-01 3.171776225702972241e+00 5.533791211625698203e-01 4.380475363051796300e+00 2.758179724465671612e+00 8.238428864941681695e+00 1.611340397700082860e-01 +2.349694539920080150e+00 3.425362999949447929e+00 7.467879539582895632e-01 1.309946362139290388e-01 5.805916871698890702e-01 1.657140208444111584e+00 2.281415527558649625e+00 1.158152241249966297e+00 4.945420862933350925e+00 7.787419149878671565e-02 +2.871323242818877297e+00 6.534521291113140506e+00 3.096514924644943711e+00 6.667111185354958058e-01 4.581752374807475547e+00 4.565652293776831794e-01 6.933935392164753964e+00 7.018283743141698894e-01 4.265168364923495936e+00 6.901545552296244335e-01 +4.035690704229409675e+00 8.932606707872219332e+00 2.440117375879147676e+00 1.749555891357814641e-01 3.388836934377787546e+00 1.096540733110390020e+00 4.167898589768252116e+00 1.510982178698893286e+00 9.444730460473605760e+00 1.685190174932924556e-01 +1.895368854776446899e-01 8.111771833719306768e-01 1.496918109897968030e+00 8.739513189132178672e-01 3.271337369168346054e+00 7.030233822128264531e-01 6.401423581208871560e+00 1.029249503237427366e+00 2.009554833626514103e+00 6.565754492988090663e-01 +1.951751457247066224e+00 5.044712160044664273e+00 3.421432883480826970e+00 8.109581787816579901e-01 1.128731846702503816e+00 1.209060606591956688e+00 5.696978360178965417e+00 1.330520244258292406e+00 2.811362781860978100e+00 4.875439923021647193e-01 +7.946496095974958651e-01 7.959850102243462011e+00 8.886633323027690601e-01 8.912678301211978127e-01 1.506339073727302580e+00 1.772468056111744072e+00 5.209003007333696367e+00 1.910008906957938679e+00 6.469615179120823401e-01 4.738444478905338153e-01 +2.923037361500433029e+00 8.570876002749072242e+00 2.708321601975356430e+00 3.282691449572501252e-01 1.618103487581618039e+00 7.910655433987572316e-01 4.227704764846127006e+00 1.475926172111246215e+00 4.356475937759435091e+00 6.465232347181339989e-01 +2.522665440307211071e+00 1.963912550509897548e-01 1.722541801969912356e-02 7.082969529076817983e-01 4.976037482905154796e+00 2.468844590379837278e-02 6.706997326725380404e+00 1.309674497144936556e+00 9.860787708680341268e+00 8.357747879146570913e-02 +4.255818572678702338e+00 6.744878797873571585e+00 1.760033311394217925e+00 3.676055726983046279e-01 4.092141947481376718e+00 1.612470654985766583e+00 5.778498425542084149e+00 1.079514954339773070e+00 5.568696898336217060e+00 8.545812171197980645e-01 +2.446430878144840282e+00 5.234567351584125561e+00 5.715867278950135244e-01 7.003532329827356628e-01 4.568505639054738054e+00 1.943174193938479233e+00 5.764774523003604934e+00 1.937713945979894881e+00 6.298501537697791086e+00 9.026276578818063223e-01 +1.273163398740040364e+00 4.162415703791141119e+00 3.455865592048522394e+00 3.656764736071405064e-02 1.954721520949571190e+00 2.734474567634836983e-01 8.281588142887611470e-01 4.484584054747960957e-01 7.652386767723299954e+00 6.708336181638869800e-01 +3.272573882698126546e-01 2.771858331744477821e-01 3.650874191969583293e+00 8.313793690203402642e-01 4.721314279438468375e+00 1.073305358961462286e+00 5.882774132732964567e+00 2.199287336285580263e+00 3.798152586004966969e-01 5.333129895506141249e-01 +2.307814819672060480e+00 4.104095493932964800e+00 2.489576320635186413e+00 4.496836765063628727e-01 4.578631912903595946e+00 1.329946843468508222e+00 1.683934112573501896e-01 7.002919109156724442e-02 2.471193668340454508e+00 5.351430311502515247e-01 diff -r 8b47a3c08d97 -r 2ac77e0aec82 test-data/pca_input_with_headers.dat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/pca_input_with_headers.dat Tue Apr 13 20:42:24 2021 +0000 @@ -0,0 +1,301 @@ +col_1 col_2 col_3 col_4 col_5 col_6 col_7 col_8 col_9 col_10 +9.579515262220434924e-01 3.726315038026500881e-02 1.192922318396479886e+00 2.208390853256675612e+00 1.545465138214503487e+00 6.587709093437858598e+00 2.676346016926679283e+00 2.002623182927643519e+00 1.960111203222609788e+00 1.244000891424809074e-01 +5.456295681254983432e-01 3.130646354641937745e-01 6.007098680445335681e+00 3.644816120915847169e+00 1.043692024581632793e+00 1.970255599020762194e+00 7.768759398827200791e-01 6.435887304171391543e-01 4.933655623778216537e+00 5.543893932919085055e-01 +9.341619128268041639e-02 2.558875163847860179e-01 3.752555601842988420e+00 5.559464534602225783e+00 1.010576057771932490e+00 3.077425253345768663e+00 6.807691255479467962e+00 2.571623094724099445e+00 3.153422029415700933e+00 3.550137612924495478e-01 +1.471186662367064413e-01 4.878675188546680030e-01 1.721359340060558907e+00 4.167324499252111458e+00 1.985766726491912326e+00 5.316541920919662267e+00 2.962330081397085202e+00 6.305674360296442682e-02 1.008632361074792705e+00 1.954028793571292999e-01 +4.517113041288302044e-01 2.082857695479499172e-01 2.670306166999409037e+00 3.583860843014433861e+00 3.162463432948562581e+00 7.681858694197329029e+00 1.942922465406477395e+00 1.098113345375552274e+00 3.412374063138972069e+00 4.177369511025994520e-01 +7.303789721527453871e-02 1.033872090825091461e-01 1.795276419298532655e+00 5.719768891948289635e+00 2.977579113876869243e+00 7.844204854679616368e+00 3.384744044988120759e+00 2.998214211517472805e+00 4.270749911114063657e+00 4.257092154152972707e-01 +6.359175475607969918e-02 1.242103944058722265e-01 4.586547825302377923e+00 6.614372405184473891e+00 1.923730124171568079e+00 7.681919225138223339e+00 2.793831391806054665e+00 1.406817959154060160e+00 4.716223047352296582e+00 6.211888780251716424e-01 +9.886982415066914998e-01 4.584180816802013725e-02 2.793304094637673707e+00 1.871823089629541581e+00 2.607924236602056745e+00 9.206004712207825236e+00 4.623226894276893928e-01 2.966776892612695615e+00 1.485603429563761679e+00 4.654181765444357355e-01 +1.741783097973695904e-01 2.446343910749277373e-01 2.534641383481000876e+00 4.584056834431557093e+00 2.890133078107056441e+00 2.823965747627366518e+00 3.034991597984873835e+00 6.600338090755860643e-01 3.752675891901568583e+00 2.970984388064664694e-01 +4.690204907875814566e-01 2.929759132721354575e-02 3.548495454913231484e+00 4.482718753445549709e+00 3.203674397180960920e+00 8.065801814409903514e+00 3.773297073513870004e+00 2.113193009064737282e+00 4.579511767735440664e+00 4.024397631591818403e-01 +6.941135206286030979e-03 2.133769823942091026e-01 6.135694255460425239e+00 5.395845311332483352e-01 1.504596129252289138e-01 9.253872174123642935e-01 4.483882842463830620e+00 2.321382684831085008e+00 2.576937740611303873e+00 1.109827593740932983e-01 +2.746007390787119640e-03 6.638140727681796083e-02 4.108407001279307247e-01 3.212637467080699416e+00 4.920639575099698959e-01 4.018583101004429281e+00 6.796866753550522056e+00 1.316040638035593568e+00 2.620935479341985896e+00 2.976887894006831070e-01 +3.557722260573822348e-01 3.727028444011896702e-01 3.811343797909652054e+00 1.715026071489426762e+00 5.294113011251582179e-01 5.980858755297242979e+00 5.404241675653790544e+00 1.825392885196229997e+00 2.835734218533411788e+00 3.200816860194626301e-01 +3.642510923301112147e-01 7.309428690756680780e-03 3.666945761684001326e+00 2.430979500086832612e+00 3.031996394197797429e+00 2.708093900045675184e+00 7.623775896209878944e-01 7.865319376558289610e-01 4.100162854521766320e+00 8.307551984431076342e-01 +9.927215581748555229e-01 4.537144790675278760e-01 5.145060290158723681e+00 2.151991198713361086e+00 4.862387339994040936e-01 2.589672936803951053e+00 3.398039583724480561e+00 2.809787771375323651e+00 8.864381880832911120e-01 3.331137683083518208e-01 +5.057807499542814611e-01 1.402717130943404999e-01 1.883175574051066725e+00 4.122193241585520695e+00 1.035989381539633492e+00 5.670773882751129591e+00 3.687442345139384958e+00 1.684532121504235480e+00 4.642108569673514928e+00 9.305441677815040613e-01 +5.042353053817258957e-01 3.547819755513703099e-01 4.381967339967321351e+00 3.851122946472437469e+00 5.426308260180099374e-01 7.445193485365448893e+00 1.869875173163507931e+00 8.437445017751898924e-03 1.444658255941634994e+00 1.636723834558136970e-01 +6.808167520848328325e-01 4.889279161325942868e-01 1.800574817853715093e-01 6.987701665160759745e+00 2.781923379343957503e+00 2.993730387785709102e+00 5.946279606388386263e+00 9.945453378009785350e-01 4.532192935084170315e+00 8.927165058296504530e-01 +3.935353669966316081e-01 3.534471776807462939e-01 4.974393735263212157e+00 4.310249343469166661e+00 5.149149535110453257e-01 2.179395632453644538e-01 4.312162502099264882e-01 1.470934059506852742e+00 6.326429352635798420e-01 7.652243996922046820e-01 +5.817478561516450375e-01 3.650895867034674724e-01 1.106136061048209607e-01 6.499764055829857945e+00 2.050813058661709487e+00 4.066454208593111019e+00 1.490387097633062208e+00 1.061815166735420313e+00 2.302831003165218604e+00 2.174825207514023973e-01 +5.048471030130237125e-01 1.082304090000890673e-01 3.175827458076348364e+00 3.693216070028284115e+00 3.700472412642747955e+00 6.197372734372899927e+00 6.374064687621854297e+00 2.768340513420041837e+00 4.661995130609337679e+00 8.584541060279672342e-01 +9.485485718647990172e-02 2.363243089061691227e-01 1.837943546562954555e+00 7.414016988668096886e+00 1.058065255181876108e+00 9.078408743915952428e+00 4.183782154307690959e+00 1.516463707584718712e+00 3.901861889845664733e-01 2.074547211064202701e-01 +3.134106819658126764e-01 1.286339499547863308e-01 5.864729791423263450e+00 8.300357839112765035e+00 1.438336911915669702e+00 6.851092469972995147e+00 1.034029113386152776e+00 1.494799843839271336e+00 2.277085020013195127e+00 3.018026684870551701e-01 +9.974747480148854484e-01 7.417608355979210533e-02 5.576900855119989231e+00 1.085027230184690827e+00 1.610568082058991379e+00 2.681858695518825719e+00 3.483337744351994392e+00 1.340344201458989248e+00 1.785155307177410666e-01 6.064608937230153707e-02 +7.698707959570197934e-01 5.946693939209857227e-02 6.140872236681682139e+00 7.794500275667249234e+00 3.329936732740133021e+00 1.053683186798398808e+01 2.442474922407471993e+00 1.618248604822617676e+00 1.645175154595579059e+00 1.577878407070486544e-01 +2.921978170383732198e-02 2.098764262909763589e-01 2.571849891653310571e+00 1.701437788960805664e-01 3.606271296781285773e+00 6.151967513580181013e-01 4.407426394075528719e+00 2.238674479981308085e+00 2.918338395342272129e+00 2.203405589927943664e-01 +8.185553514857757396e-02 2.904901153328537933e-01 1.884207868724713020e+00 6.379742850556673339e+00 1.316060594347697510e+00 5.742231747444348500e-02 3.293024161175864162e+00 2.070570602227302937e-01 2.323330232077761792e+00 9.345412483474558885e-01 +9.870953766246871597e-01 2.838968068710498449e-01 8.984979565988782113e-01 7.228894867998849172e+00 3.009018931955541376e+00 7.470177361465970556e-01 4.791497852877925290e+00 2.138893706603099965e+00 3.957478162078499118e+00 9.206372464557524005e-01 +9.246986296046750819e-01 2.657540764872973194e-02 5.696958733461305435e+00 6.037947545874237321e+00 2.054547403001988126e+00 4.010012556963714836e+00 5.387264573805446988e-01 4.198151587672391827e-01 4.855865220608975186e+00 3.421872218672002974e-01 +4.891436182199244698e-01 2.957137425921102514e-01 2.092865426966933118e+00 1.304751064715160558e-01 1.857399876731623767e+00 3.929329864582863596e+00 1.890510040380741774e-01 1.808418679622973757e+00 8.962596057614125034e-01 5.071164143964516091e-01 +9.883745014565588072e-01 2.023820478627288422e-01 3.026225500297741178e+00 8.018625010860999325e+00 2.639151190842266015e+00 7.866860471267914434e+00 5.692475791922957384e-02 2.619732708394978626e+00 3.791192865048754079e+00 8.510442750449997984e-01 +6.766386709986900172e-01 3.163942649407911478e-01 6.650890489805712846e+00 9.981354386720189265e-01 8.895093378732830125e-01 8.880441813445409949e-01 5.269510439686068359e+00 2.800971666890863521e+00 4.336136086833519698e-01 6.151838148712087673e-01 +9.395548338899438745e-01 2.274826251714922587e-01 4.841436257692705025e-01 1.951295574220930362e+00 3.688485459922960619e+00 3.319068635438701342e+00 2.622624513963639714e+00 1.773842110030804609e+00 7.017709220203099951e-01 7.273521464765183575e-01 +7.131396196120692865e-01 2.829891666225929359e-01 1.809204461229397820e-01 3.578992630164364641e+00 5.190853847632848073e-02 9.799965411266482462e-01 4.614272826173850817e+00 2.684041190366065699e+00 2.984828522093719183e+00 2.167818654123231381e-01 +6.173854727816793231e-01 1.961753927292946287e-01 4.555255586921068023e+00 3.578807812709182024e+00 8.425821534786881450e-01 7.518481958157543943e+00 6.262313649648420188e+00 2.000433960754317564e+00 1.421954930513873006e+00 8.019504843363266522e-01 +6.671808236429033201e-02 2.702227356574862793e-01 2.867725189486065585e+00 8.406696908068906904e-01 1.816665326608355890e+00 1.069991981228995215e+01 5.100300539865704863e+00 1.022140401782990482e-01 9.935128054149117149e-01 2.217478442404806627e-01 +4.675882156850276195e-01 3.994470533120373923e-01 3.013415758827279856e+00 3.472047851101398130e+00 1.579805042782022717e+00 1.025374950194446200e+01 5.424839982873136179e+00 2.661207445309309083e+00 1.974765823248681329e+00 8.490805254939938207e-01 +7.440465128212200296e-01 3.185879639684230935e-01 5.875377909342210714e+00 8.735053206610791321e+00 1.922533667640191624e-02 2.664137099658425711e-01 3.070429299965248493e+00 1.797362708842066059e+00 5.848813121558199546e-01 4.383864302200134455e-01 +3.550604742260795588e-01 6.083111274854280381e-02 3.404146882195189239e+00 7.733962066765833754e-01 1.176797582398654285e+00 6.871446754170301929e+00 5.361716911609923919e+00 1.576687106248415571e+00 4.355077426059827062e+00 8.607241356371005958e-01 +3.559318532806881041e-01 4.015285662241686593e-01 2.944936440066225458e+00 2.111335278696990336e+00 2.963059944865208628e+00 1.476942511987013873e+00 6.450386812630387823e+00 1.907611126769427123e+00 1.381468577271076636e+00 3.983676385111964979e-01 +1.352222544842187624e-01 3.963201476435085358e-01 7.711539919790504349e-01 5.328381207561713850e+00 1.055305792258381725e+00 7.535148204080714507e+00 6.478550147632057055e+00 2.298107587130767904e+00 3.835975596160178469e+00 7.784889119545324032e-02 +5.656300588103846394e-01 2.408672177953232185e-01 2.222118682804348655e+00 1.584476418959711363e+00 2.205997974729819955e+00 1.320044695544450697e+00 3.093339610296233388e+00 2.078381944707535123e+00 2.709900781033619532e-01 1.998783060846459625e-01 +5.064693576216054982e-01 4.755666724189564487e-01 2.460782122272777706e-01 6.394893884651652982e+00 2.393279335645917882e+00 7.720168766472102817e+00 9.946162988780055114e-01 4.727471826960147894e-01 3.624628763819681243e+00 7.939552686881024002e-01 +7.126511753385316172e-01 1.251084009980807377e-02 6.424546400284762093e+00 1.732715732319492385e+00 3.291228557764222185e+00 5.494632343972354782e+00 4.309920997430734424e+00 1.785238040943090132e+00 1.319325481408312184e+00 3.987762049958972765e-01 +8.564779126009015586e-01 1.551694340859950394e-01 3.000664164177824667e+00 2.121531733172477452e+00 1.929201507138485816e+00 1.091606713354398295e+01 6.352850505658992120e+00 1.942089264915284774e+00 3.099275474026703225e+00 6.349421349719974739e-02 +4.875235919705348531e-01 1.165471825543921702e-01 4.659789198761613349e+00 4.857039597115840657e+00 2.268900869752328298e+00 8.073884519013418526e+00 6.867532374199831757e+00 7.110477929957825793e-01 2.139511718029329490e+00 3.270336697362830058e-01 +2.836462637303897028e-01 3.526582320725804021e-01 3.433435023383186291e+00 7.878111173527013733e+00 5.846439909687783931e-01 1.334584322193443917e-01 2.430764258810069744e-01 2.294882067517025170e+00 6.943377361908681378e-01 6.597104416060772802e-01 +7.138680788986382364e-01 3.866838295049366270e-01 1.938054711638698135e-01 7.776057762563468145e+00 3.843531806920502003e+00 1.169843574403325803e+01 1.317073001264212895e-02 9.974273699007062399e-01 2.805794644206359933e+00 2.846508994495189349e-02 +7.616522995605032875e-01 1.525341083280188914e-01 3.649857814806184653e+00 6.626064326264721416e+00 1.848485344378381079e+00 7.772079961576015883e+00 4.922747697985218274e+00 2.183176272993367029e+00 1.523463352631002188e+00 3.483587959766206721e-01 +6.174650468503004586e-01 2.890466460728707276e-01 4.198548001307910837e+00 4.756162259128787539e+00 1.215478403072798308e-01 1.073564948073302894e+01 2.393378431835311737e+00 7.963541702214833595e-01 1.221126147878501822e+00 3.627422424390945865e-01 +9.041286748679164820e-01 3.692704713445955078e-01 5.969223946468604325e+00 1.400042822911425899e-01 2.167809064247096185e+00 3.466765141422927687e+00 6.104187126619349257e+00 2.815584690378426735e+00 1.472968857439669765e+00 6.815901346942815353e-01 +7.420584650906367763e-01 2.629350119859111268e-01 5.157415509545635324e-01 8.936951265754993656e+00 3.499514727363592037e+00 2.929864868198977401e+00 5.289656243356750664e+00 3.794701199783089285e-01 3.570594754264058146e+00 5.454360810847372898e-01 +2.133902786741366242e-01 4.793775958545365423e-01 7.161025461060221975e-01 7.379345463324211707e+00 9.195588975890780503e-01 8.953799627402657890e+00 8.199588910676803843e-01 1.539214057143141190e-01 2.517268342599753961e+00 8.642672068937873320e-03 +4.189544227294224044e-01 4.677740958591244946e-01 4.169315152475023822e+00 2.198113856746841677e-01 4.442481038742749355e-01 8.853442692179621432e+00 5.871239829017361744e-01 1.642555038182410554e-01 3.779048982357357644e+00 5.353051674182843778e-01 +8.373426461385590214e-01 3.895842710949837251e-01 3.079787615886646623e-01 4.540155876800062273e+00 7.099227726704704367e-01 3.400668992101794075e-01 6.292240435961995004e+00 2.673955045372806705e+00 2.378211157475177195e+00 5.342130779135090268e-01 +3.068274218964279765e-01 3.192479805504804813e-01 3.859914935882651221e+00 4.687340409378260908e+00 1.900386926452752867e+00 8.623061138373001810e+00 1.033494255619878288e+00 8.997549532223314550e-02 4.911877241989344611e+00 9.510774047315817548e-01 +3.988512541926614308e-01 8.003053540870219695e-02 2.122999256011599556e+00 4.455738292615722962e+00 1.825496679610708828e+00 6.531267574926014063e+00 3.480291480026090900e-01 1.582969106163566453e+00 4.938475735461747007e+00 1.906205929699261725e-01 +7.111720075879690572e-02 4.221578019099042622e-01 4.465731829112144169e+00 2.564360848739634768e+00 2.152069261549716117e-02 1.058526283280879277e+01 1.462724588046307783e+00 2.852823949099446033e+00 1.829748887076950048e+00 2.844587557581582660e-01 +2.570944338116505357e-01 3.670273280771254032e-01 2.950100530191855697e+00 1.367357621902863807e-01 6.536517332253071189e-01 4.623777977996077482e+00 1.830565500886062402e+00 6.876079879205642120e-01 2.463356978321902702e+00 1.515963114524383482e-01 +8.196773403442627615e-01 2.439155028749898646e-01 6.976779897465351654e-01 4.021827899216881441e+00 1.629083009450637665e+00 4.895113507734013325e+00 5.420567352065293498e+00 2.923116514593426807e+00 3.675539915878816899e+00 4.820681859745293840e-01 +8.912757210535459107e-01 4.287706082586761891e-02 5.914097580762159190e+00 4.887219470061346271e+00 2.297300243872694381e+00 5.258879986696362252e+00 2.055176485482270277e+00 1.247382108420278080e+00 4.091406116197054965e-01 2.863708277926955148e-01 +9.165363924681566576e-01 2.077777304803083980e-01 6.425359611836583440e+00 8.532229331139205897e+00 1.890984676596261238e+00 4.482242194093222665e+00 4.719123490932191523e+00 9.368865626180848949e-01 3.424737866108997775e+00 3.692933466222642069e-01 +2.844432761355554229e-01 3.487910856226295042e-02 3.288851974081316243e+00 2.493792851872620453e+00 3.245659443981551373e+00 6.119401284154618814e+00 1.629426639698323909e+00 2.146211397792365361e+00 3.323215307906694616e+00 9.689245472658591929e-02 +4.605981453808145609e-01 2.951104911370585060e-01 3.466807508548188643e+00 7.015908445063255172e+00 2.012464416109721377e+00 1.411425132174343400e+00 5.640313420420241641e+00 2.551472185597204234e+00 2.921468481145677476e+00 5.154477507183952145e-02 +7.916776772020003294e-01 3.104882171066662977e-01 3.388406047132061616e+00 6.308076145350703712e+00 2.141204968913200002e+00 8.815894689517723037e+00 1.216772248282482316e+00 5.490792235288116663e-01 4.864033877707442777e+00 3.120795424356880288e-01 +6.520543319958096440e-01 7.498529269624598648e-02 6.546870924616779774e+00 4.313660942542439258e+00 2.842979234248417697e+00 2.708025294292042418e+00 2.101565155836826015e+00 2.779757313928136409e+00 2.766295492770797892e+00 8.242938770130925352e-02 +3.916403442843127136e-01 9.189287972434972973e-02 3.658241649007774488e+00 8.892285269585453733e+00 2.872944719502671163e+00 1.926067804146072149e-01 4.113071146818407797e+00 2.033786884589388499e+00 1.858529211147021964e+00 3.601164330247360601e-01 +6.658899523715963165e-01 1.901452620071845678e-01 3.358563768423928231e+00 7.307834854097906785e+00 2.230102878474681027e+00 6.994441846960493869e+00 6.046922242667236880e+00 1.681346319512073695e+00 4.453953342081854672e+00 7.760263753123383124e-01 +3.544087352095481869e-02 1.736442680483894496e-01 6.358750483131432318e+00 6.362553657877171531e+00 9.438518061698975004e-02 3.241545692161897474e+00 3.216563179949617268e+00 2.048445371027631801e+00 2.592256358497992519e+00 5.871829363638558785e-02 +2.278297361077044059e-01 2.521532626334166971e-01 6.006560048470274360e+00 1.036460639857805344e+00 9.596384576758123508e-01 1.161754935200590388e+01 6.921319460991003147e+00 9.492023907384942172e-01 2.570754313364566723e+00 9.898393847822013480e-01 +7.720727707112930993e-01 4.625201799694809712e-01 6.030038351299404020e+00 1.576843309640901802e+00 3.047360805551709184e+00 1.105183421427205381e+01 6.765794291140618810e+00 2.437125901810530237e+00 4.785718495907587133e-02 8.643252994269234879e-02 +9.816465867962677061e-01 1.040135248373981747e-01 6.269766387849492695e+00 4.587664995870221141e+00 1.471595298862088175e+00 3.137698622087241596e+00 2.585776241619418325e+00 1.094148950727448000e+00 4.787651271957346744e+00 8.537352255282423252e-01 +5.927286689665087760e-01 1.635250692112610871e-01 6.763777563834705298e+00 4.190158816469162772e+00 1.671137433875959921e-01 7.145892561514077812e-02 2.697194722513650555e-01 1.826917897949313918e+00 4.855283909060112535e+00 2.338052822860668956e-01 +1.591435657354911548e-02 1.309457494027614910e-01 4.027555471388495345e-01 3.269356767055083601e+00 2.135361695566277085e+00 3.812187332815673013e+00 3.745269592969274086e+00 2.239168581407309233e+00 2.403445557045992054e+00 4.127895397263747768e-02 +1.138459964891592735e-01 2.477562449655215659e-01 6.711903366433036311e+00 2.328903691994430591e+00 3.619135648902618296e+00 2.643113253632744630e+00 7.573805393623883608e-01 5.638560832013681523e-01 9.866348317250567268e-01 5.321998283901712146e-01 +8.335543816544467299e-01 4.852511675363395671e-01 2.522771010620390442e+00 6.865591808220169234e+00 2.614984821499222178e-01 6.661308755886223842e+00 4.631632858625027716e+00 2.016686176070514591e-02 1.670651928613386517e+00 8.001889580730393581e-01 +3.506629367480429416e-02 7.513357347200738667e-02 1.091955136302876994e+00 4.788485228215831668e+00 3.088440213543260704e+00 3.737602435514551402e+00 2.060091420371281679e+00 1.664114145344917528e+00 3.853021369729443979e+00 3.981246066772909931e-01 +2.941809570016090669e-01 1.951063404831046011e-01 1.053511941997986590e+00 1.626573601758511067e+00 1.073068181672781840e+00 8.246102825125259272e+00 1.229799882190759863e+00 2.046485654174841073e+00 1.887314229128450593e+00 8.477832457224251383e-01 +4.288411318977621844e-01 1.344940483989709445e-01 1.890175735159078219e+00 6.909579416417008346e+00 2.559618997696785136e+00 8.076451885637920824e+00 6.709931254318012073e+00 2.711755694833509533e+00 2.197259152647867975e-01 5.229458751166887742e-01 +7.962785959698204241e-02 4.791664160968215902e-01 4.775534443309384258e+00 6.195144705514182171e+00 1.095816602161203690e-01 7.253215415683056833e+00 3.785863733799192499e+00 9.032344566438499367e-01 3.712953563991834294e+00 3.658749193043641101e-01 +9.925977090507452916e-01 4.226472934729750275e-01 4.233597679026229521e+00 5.373501445983512426e+00 3.029885997105019158e+00 1.948856366491487524e+00 3.580389683767193798e+00 6.128625096828327345e-01 3.195613215016547937e+00 1.498067324162460912e-01 +3.211542228342814109e-01 2.435050065055133772e-01 5.191492939326351141e+00 8.811443367963034845e+00 3.119307887468464990e+00 9.566604729350618896e+00 2.662534653489017522e+00 2.048270692218978617e+00 4.513252133993818305e+00 1.534045164632015235e-01 +1.169841130722715228e-01 4.278805785103458326e-01 3.871981713139157399e+00 2.151432657451758379e-01 2.353074788516758442e+00 2.925683050900422355e+00 5.164172309356634294e+00 3.209672061804553778e-01 1.806778866741765022e+00 7.377245404193294442e-01 +4.920318247135287981e-01 3.980350958273896622e-01 3.553262242278445449e+00 5.660089801227229600e+00 1.130914505340574028e+00 5.111374270657123020e-01 3.594580615302541915e+00 1.377803570003424127e+00 3.733415954722649754e+00 3.790748149557219282e-01 +7.141555225002506058e-01 1.431060744802945539e-01 3.598062535886497493e+00 6.486014070157204436e+00 1.222357165551017477e+00 1.071797470084096382e+01 2.966727560848184453e+00 1.433401409283499239e+00 3.761066588446803749e+00 4.577426600413826430e-01 +8.846645270352224699e-01 3.643370058500688402e-01 3.776149232858763138e+00 8.514771398046235618e+00 1.333408164935339979e+00 8.719464634044745921e+00 3.680392243042417633e+00 2.323141187069376112e+00 3.968683511008049170e+00 5.273710580573882645e-01 +7.563601909975703474e-01 7.110020268898137319e-02 4.754320885232382388e+00 6.715112169672266873e+00 3.900410613846503338e-01 2.374351342693231892e+00 3.949776593352507525e-01 2.793668022917081828e+00 3.590934831061467047e+00 2.297057403281292931e-01 +4.973937884442386492e-01 3.879138870002525330e-01 9.799015387413885225e-01 2.012207080170396623e+00 3.118810053878664501e+00 1.476679627040943465e+00 5.927098696212524054e+00 1.896055595509993363e-02 3.766273251675572586e-01 9.605494500779653277e-01 +1.977451097083424703e-01 1.856512361107952036e-01 6.724615885357570377e+00 6.767753598078477317e+00 2.460427469322048477e+00 6.474778192244762032e+00 2.497838703773406444e+00 1.783570854432153130e+00 5.300044222306288244e-02 4.451008306808179604e-01 +7.777282859813858806e-01 1.108325048061198359e-02 5.994453580967894268e+00 3.907200072756264575e+00 2.802655265583420707e+00 2.467799246467401009e+00 1.767975654554970966e+00 1.542521176133627048e+00 3.301251420424628602e+00 2.703716625531150664e-01 +2.877553566109145589e-01 1.420816672999475339e-01 3.531815135282850626e+00 6.071634467360012444e+00 1.950296822580346312e+00 3.667561567003036149e+00 3.564813794526681789e+00 8.193521748791241510e-01 3.969846661030343782e+00 9.642674274532847534e-02 +8.461631661621418221e-01 3.874198608202865657e-01 2.460697897082127827e+00 4.483937646731980253e-01 9.536408659656969711e-01 9.374214254598758345e+00 4.523934853618548857e+00 8.998483173209120833e-01 4.534728615909888738e-01 1.316674336548497859e-01 +1.751881832985308085e-01 3.840511548841616940e-01 1.356205442152841334e+00 4.975298518310518503e+00 3.475732058856605633e+00 4.548907307536070199e+00 4.318674447424278640e+00 1.546572097412000968e+00 2.738768725851110197e+00 2.581125520633765769e-01 +5.541597656676272576e-01 2.055046901470117260e-01 6.866760560523623269e+00 3.572427800023941113e+00 5.759362217394889960e-01 3.707695882166028856e+00 1.083565015241491736e+00 8.888805063168140341e-01 4.589028250324568958e+00 6.712978422710076387e-01 +3.399810580604246679e-01 6.778009844025034702e-02 1.990157231926872106e+00 7.987721068254113987e+00 8.333111074045302935e-01 1.434155759051158885e+00 1.063680632215532995e+00 8.682505419899785304e-01 4.553780840671912244e+00 6.153621080682639688e-01 +3.805973074910944387e-01 1.809291374261368102e-02 2.326724448899936348e+00 8.808775644776478231e+00 1.071772823118059659e+00 2.671050593238351034e+00 3.236405416201733942e+00 1.156638793116922637e+00 4.089621847663170939e+00 8.958752205306643734e-01 +6.236783129330455422e-01 2.034130988847053789e-01 2.149437338793216412e+00 2.709264986875024039e+00 2.581735349094827381e+00 4.559785061212902946e+00 3.811076674546835186e+00 2.506501802065709494e+00 3.558610317643628562e+00 2.953998470582006597e-01 +5.786616826695738514e-01 1.092680018344108772e-01 3.673824620483585601e+00 6.935907382658493603e+00 2.924092204393669459e+00 4.994297253991534902e+00 4.216415579314912065e+00 2.221035033808330006e+00 3.308866108190522404e+00 6.005834101043915352e-01 +8.445682020932365752e-01 3.477257696376142015e-01 2.977918003630122712e+00 6.125943756092539161e+00 2.412136776594560494e+00 9.871992950448490234e+00 1.471692508678064337e+00 1.186189240533216616e+00 1.731159415996974538e+00 5.019757339821060427e-01 +7.262920712271674351e-01 1.070865338500862629e-01 6.515623171275430892e-02 1.910429663217140916e+00 3.785981980891470755e-01 5.136662978344108232e+00 1.190639365883919165e+00 2.126433858821366041e+00 2.551490600585693436e+00 2.282190611495389376e-01 +1.181796487183683730e+01 2.516406960282593364e-01 2.887277780206054967e+00 7.424704929314782653e+00 2.733699169495314329e+00 1.326499604911062224e-01 4.472085075329708559e+00 1.841612256174257833e+00 9.588965759771213015e+00 6.074890083495527726e-01 +1.355685210334684321e+01 1.476043055963610906e-01 2.536588592058465874e+00 6.894815252046440968e+00 4.629665076865330242e-01 1.591874408544442510e-01 2.659816619928975889e+00 1.992412304973402826e+00 9.409822587181350118e-01 8.428860916139044868e-01 +1.302344932128066368e+01 1.877957892610864488e-01 3.771232365671751907e+00 2.334982689796312627e+00 3.407718706286316790e-01 1.716052424590376324e+00 3.548651514000740193e+00 2.374591648505322450e+00 2.134503293655584777e+00 2.543046511567058632e-01 +4.451805618740952042e+00 6.764221264325200045e-02 2.669906521408719868e+00 8.632453926650279996e+00 2.033894446413802903e+00 7.142031037304861218e-01 4.194277576482712266e-01 1.402693657818623318e-01 7.586905366769697068e+00 1.843381480000478856e-01 +8.570192823591918696e+00 2.306084812036459097e-01 2.522438257729497479e+00 7.522008507552547130e+00 3.713341144773252278e-01 5.716961257420709597e-01 2.079090539304101704e+00 1.766024213797281917e+00 1.662647314050246683e+00 6.384753099614368654e-01 +1.492700367152876417e+01 5.956069900446444437e-02 5.193239326553306112e-01 4.348155739698301936e+00 1.498622145721807408e+00 4.168028931133043180e-01 6.514105873948607517e+00 1.300249280108312089e+00 7.509216655975119892e+00 6.466771718100665645e-01 +1.401469528149594801e+01 1.318450715802988726e-01 1.755366307435912709e+00 6.268538614231175643e+00 3.594158033755705084e+00 1.596063791967876844e+00 4.538357107641011190e-01 1.578349416671345651e+00 8.605308976007654209e+00 8.431350039872285151e-01 +1.125897718091157707e+01 7.088415129913086532e-02 3.073048649925616438e+00 4.169572134840827671e-01 3.391473123826589831e+00 1.253820676407349843e+00 6.033094418983614204e+00 1.669529100255978893e+00 2.743440461537412389e+00 3.447717414063620200e-01 +2.618236120635488717e+00 2.221707698733976499e-01 3.880148546665934006e+00 8.346365071605847064e+00 4.485232175994370074e+00 1.273339902009563929e+00 5.126040370747679376e+00 5.002442564550735327e-02 7.652504234144801742e+00 9.045218812960378330e-01 +1.352791799195179934e+01 2.958099853113912436e-01 1.620323493963710115e+00 8.514270244110930363e+00 1.405394051171777736e+00 1.228874034324174414e+00 4.366837956110266816e+00 4.681693532389841206e-01 3.658910928887952885e+00 5.685286335634343047e-01 +1.321105522112276098e+01 7.596543795040429370e-02 2.288656765287575112e+00 5.454334126686442019e+00 3.540974541852515589e+00 9.136761954539687203e-01 1.531916431358365749e+00 2.600489131884043736e+00 2.186958478364557035e+00 6.152510639313788499e-01 +9.248327943582943078e+00 2.953301427161937331e-01 2.912841777561403500e+00 3.210770144852208574e+00 4.678430187034543941e+00 1.903313079890405213e-01 1.852621718826671371e-01 1.901873807226989177e-01 6.598474242893042074e+00 1.863584605124068982e-01 +1.561511613665458764e+00 2.791101130788958273e-01 1.230729125078247499e+00 3.214729791326091046e+00 5.760499802570256955e-01 6.791526464572399391e-01 1.164793484277019120e-01 2.436090334891392928e+00 1.684437394931304732e+00 5.939045414290095026e-01 +1.074199933120756256e+01 2.768105466336150400e-01 3.600337787752637908e+00 1.988419733930615330e+00 1.121183222910840938e+00 1.262741873855612873e+00 5.955023194942483222e+00 1.775781023586198160e+00 1.635523073587350051e+00 9.451325867881940068e-01 +1.439453349318703390e+00 1.572125366345192565e-01 4.116939260327882266e+00 8.143883513662194318e+00 4.436336490499172669e+00 1.431008029759604838e+00 6.129158351904355762e+00 1.627229601340490550e+00 3.544342525406199984e-01 9.537385422254009981e-01 +4.385485861700014532e+00 1.072544990386351815e-01 2.555081167553841404e+00 7.797049674127350727e+00 6.437428060323546752e-03 1.690033945941410209e+00 3.546703381942077016e+00 2.355037673948323640e+00 6.000098633768423007e+00 5.634219751061730896e-02 +1.478941841002847202e+00 2.819342154043811277e-01 2.946748707794077937e+00 8.674573772230408375e-01 4.831892645548560239e+00 6.117546232929613748e-01 2.336129800349750152e+00 1.662089735231696785e+00 7.288065418938156625e+00 5.079145336272458122e-01 +3.566330915119718004e+00 1.054092958488348081e-01 1.262772079536855330e+00 6.632582037177616741e-01 3.155614409429076339e+00 4.560221336860896812e-01 6.107444411033736920e+00 9.724400924370590893e-02 8.869125512095319408e+00 4.531451318109073201e-01 +3.931188712123208084e+00 1.648487385228547819e-01 4.230745858304009843e+00 4.740462911360358689e+00 4.302603206380042344e+00 5.923369016635324780e-01 1.350657156605095111e-03 1.610503856182457394e+00 4.214531575126196472e+00 1.188686805020251480e-01 +5.690049848746455474e+00 1.611771331430286031e-02 2.797114322332588721e+00 1.326664870101148530e+00 2.184236794465954645e-01 7.244826847041867524e-01 5.088788284324481381e+00 1.892888045267941521e+00 5.251528732452677151e-01 8.270932539527531269e-01 +9.971187065128873428e+00 1.922234878798162738e-01 4.399243530319325579e+00 1.690861779292817113e-01 3.026193132922350149e-02 1.247811934568532566e+00 2.287373749222342489e+00 7.123297811357809373e-02 9.782325221036309415e+00 4.025349245250368080e-01 +3.166794098033590465e+00 2.895927629971295492e-01 1.010943063067509806e+00 6.246940915716239218e+00 2.296626417112780594e+00 1.124916422624346879e-01 3.155063467415336387e+00 1.122794863214901628e+00 7.747118569384047859e+00 8.813094613105451058e-01 +7.776074009241417784e+00 4.884943113850780116e-02 2.665091138087455569e+00 5.396374948611239120e+00 4.807416439179393208e+00 9.311196524679428155e-01 2.370568997313627246e+00 1.497537386829888018e+00 6.410622802993913183e+00 1.959147447247133744e-01 +9.386902307633294029e+00 2.918525147335055969e-01 2.580633210860679316e+00 6.117570487861421213e+00 9.440652787891057329e-01 1.478204798622005711e+00 1.583143507835594432e+00 1.878469714268893753e+00 8.341600309722448259e+00 2.296329479872928347e-01 +1.325226074192375592e+01 1.660088044261155971e-01 3.032911943104431352e+00 1.544500510963358053e-01 1.444444693560564819e-01 5.144081121761716613e-01 6.228472420827102063e+00 2.002195300328763139e+00 8.619120730699705746e+00 5.986701025311890190e-01 +1.253702247039758255e+01 2.815208299886055587e-01 4.418741917269815467e+00 7.187649403919402324e+00 1.857768480706825098e+00 1.693270109415251579e+00 4.500029768156658783e+00 9.386766274226390205e-01 7.712460417143821578e-01 1.490837705279541847e-01 +6.470192866248365426e+00 2.538814476100020867e-02 1.482709093692339941e+00 4.810511422160657080e-02 7.397535485801826072e-01 1.366029201822366090e+00 2.938463177620382449e+00 1.905659482665870819e+00 3.274297555223312450e+00 5.946455225965689984e-01 +8.046767686244354678e+00 2.379545842279764956e-01 4.589316043001465673e+00 5.892088873366180479e+00 1.308019335424309704e+00 7.484233826378567933e-01 4.495389998435046053e+00 6.202227507857822619e-01 1.707552168782031199e+00 9.367630937108080147e-01 +4.192176901095245434e+00 1.304693968976899099e-01 4.998027091565603541e+00 2.456526465425167283e-01 1.205473478694641942e+00 1.109994403062972701e+00 5.125196171178717286e+00 2.206741883831745188e+00 5.115846166892562330e+00 1.104691714503143185e-01 +4.157525610946958494e+00 9.298038433732908059e-02 1.491518671460473344e+00 4.496224394499284571e+00 4.648879436827211720e+00 1.793268724253979762e+00 2.896904069484845579e+00 1.356276322086461761e+00 9.923020114331025709e+00 3.558734125538330906e-01 +6.979832709755873221e-01 3.599810987684147479e-02 4.064902498699765943e+00 5.597103986278889387e+00 4.496807253190716835e+00 1.851319113294662699e+00 4.995032507818135237e+00 6.680000375419122838e-01 3.176705087670492755e+00 6.164391597089758923e-01 +2.680618751278343481e+00 1.681546055962608033e-01 4.674994237591107549e+00 7.872155819890408246e+00 3.635532819810061156e+00 5.723527244541317671e-01 1.228843659393086263e-02 1.624022154584328081e-01 7.634482806401528876e+00 9.621470740939815913e-01 +1.129656603051103581e+01 1.754676764823895063e-01 4.925438368822037560e+00 9.090625284174426168e-01 9.872898867967799807e-01 1.967411347408282829e+00 5.647085320216579163e+00 8.040378544211923550e-01 3.157643996826393629e+00 6.705813685367211230e-01 +1.166598416610384703e+01 1.866541563727542041e-01 3.082745872586427183e+00 5.684997481806196795e+00 2.688708007208003181e+00 1.498993448192174283e+00 6.225488991661570992e+00 1.314065400514044191e+00 6.343644934019415871e+00 5.416797703578821732e-01 +7.720230714264369354e+00 1.523894939496055478e-01 1.620746553117432542e+00 6.005901827039864749e+00 4.717729383985791447e-02 9.075246998741233195e-01 9.360149124843241131e-01 1.754815849294320884e+00 9.666726609856759467e+00 6.581401514679491305e-01 +1.453127659928862059e+01 7.703415326140243546e-02 2.479862457434094392e+00 4.182212439636490586e+00 3.488676768426026253e+00 1.206066251747953011e+00 2.285902497850169190e+00 1.194028499060063808e+00 9.286786278550043239e-01 8.091147826884519390e-01 +6.417666940507571915e+00 7.132128551135483163e-02 1.942224670162717270e+00 3.433069127251919817e+00 7.564280838361731041e-01 5.516799087701549364e-01 5.176162075754822567e+00 2.178815429942681181e+00 5.722924693718432820e+00 4.158454834199132311e-02 +4.502867570496368543e+00 2.239682077280483463e-01 1.141094924815538203e+00 2.453579665440670521e+00 2.992162924469959684e+00 8.370073651298797213e-01 1.718538404749463400e+00 4.075217867922253934e-02 2.539196137099058781e+00 4.990272000661035712e-01 +1.769506443642104854e+00 5.077985666082200644e-02 4.536839079078856862e+00 1.926622825410988948e+00 4.021468856985962681e+00 2.704122777555590940e-01 2.804453666907950282e+00 1.607921780184728977e+00 9.484877651296452328e+00 3.670233106390000666e-01 +4.295020083244110998e-01 2.868652070133119181e-01 3.134264451081448577e+00 6.836230003013163525e+00 4.042883960895656159e+00 9.348262365209494273e-01 3.157788950792046023e+00 6.497342539434567410e-01 2.517529722233489586e+00 8.540150270825374035e-01 +1.912602820186987129e+00 6.362962639611402689e-03 3.790830335966000497e+00 6.753767120657978573e+00 4.454347298520647591e+00 3.597830171502631735e-01 5.746913394800006181e+00 1.664073075055900741e+00 9.213646990669767334e+00 8.780134214441304152e-01 +3.963149975944498138e+00 1.436768738550251445e-01 3.590235964594930884e+00 4.171865940500004477e+00 4.196989506671150671e+00 1.790899951828085479e+00 3.907987905963472564e-01 2.629171659041773967e+00 1.771918908979907226e+00 1.659282155546771831e-01 +1.044847711025325054e+01 1.867999171686929583e-01 9.742152202794096549e-01 6.029364879715696901e+00 3.842755370236281998e+00 1.457930089422849740e-01 3.050806799572168160e+00 1.928860746757870892e+00 3.715892327997140310e+00 2.654349553692562091e-01 +7.856135199120164891e+00 1.212882676824621475e-01 1.801474098171824689e+00 8.484064353156798077e+00 2.754740315340553636e-01 1.410439285738713577e+00 4.796002926524840504e-01 2.610915875359472338e+00 6.670148976341948810e+00 6.486294231998313009e-03 +9.804395866994216391e+00 1.639075098111162643e-01 4.837423823790375721e+00 5.260179690540038422e+00 2.017636134845651075e+00 1.254612394194728031e+00 5.546452640168771708e+00 1.375458824455512818e+00 7.174505857330657488e-01 4.918004847159316295e-01 +1.183986689177626417e+01 7.872326102861289254e-02 2.582301908063294960e+00 7.740411186780283614e+00 4.407066198851386396e+00 8.853556556234460917e-01 5.162877457710448148e+00 1.109660738036303940e+00 1.268125593567879239e-01 8.662130880451797132e-01 +1.093683742604408948e+01 2.447064137767908099e-01 1.696855866075519081e+00 5.548678621604610228e+00 1.820809627873263281e+00 1.700607366429271350e+00 5.830452128040040982e+00 3.764385212451778484e-01 1.898685064749314089e+00 5.451812220747674909e-01 +7.056150651686926345e+00 8.818414996117814042e-02 2.747955950871696196e+00 5.338892801584529835e+00 4.473322648271785162e+00 7.333467400342130738e-02 2.177902358616423673e+00 9.320526616437706524e-01 6.762834017402112430e+00 7.935462801762755980e-01 +1.180908873504107781e+01 2.574753599584344022e-01 1.987005140477280385e+00 6.918063648604911187e+00 4.785668471712723360e+00 9.696239217014788192e-01 1.280135659543590876e+00 1.881727503129584367e-01 1.035012278208573377e+01 8.059150064856590578e-02 +1.008412809573388103e+01 2.343166128881368770e-01 4.905764759825019361e+00 6.797230994413787641e+00 3.285521074639472960e+00 3.493548680683078445e-03 1.756029501961107187e+00 1.794157670035024577e+00 2.319307927793950785e+00 1.193434686169847492e-02 +3.749280090904193230e+00 4.960933223025080357e-02 1.971450801044384304e+00 8.330916700800358399e+00 2.349270312429754259e+00 5.221738760240273169e-01 6.366458140784689412e+00 2.387898312417887414e+00 8.441503152405894994e+00 4.979337584731783339e-01 +5.343103528797895407e+00 2.723330372377434361e-01 1.378635711838508415e+00 8.671386126448166198e-01 3.147037907155366021e+00 8.963585668163664977e-02 1.405277975206570940e+00 1.309205332617405571e+00 1.965588001155148978e+00 8.059321310558243967e-01 +7.149160280820787250e+00 2.764868013404646607e-01 1.096825467691220357e-01 3.503192650439979960e+00 3.131184989945668740e+00 1.194188630214327640e+00 4.274505420449012050e+00 2.968756266528913557e+00 2.749295301370240363e+00 7.370923727332389097e-01 +8.210295738041565983e+00 2.272029223367369455e-01 3.779242145994847757e+00 6.686181645391151562e+00 2.011271144842419201e+00 4.622895905968951169e-01 3.398981903852160702e+00 2.343123357207267388e-01 3.729889267099015360e+00 5.792152207898214611e-01 +1.002328179326305246e+01 8.185470612146233949e-02 3.269943977541031721e+00 8.539125023520108826e+00 3.035522647556629483e+00 1.401749737447430810e-01 1.982996845708496103e+00 3.745616727807693502e-01 1.201117123994490221e+00 1.638310756436510696e-01 +2.710850844140515914e+00 2.242145718096996698e-01 2.296536249652671557e+00 4.220260338748655471e+00 1.230213951484597334e+00 9.427382488180584552e-01 4.976262280555096673e+00 1.332924357337322174e+00 6.600361386208043690e+00 9.862980787604007649e-01 +5.949570342069224971e+00 1.418784555555818727e-01 3.232287503680208562e+00 6.141638030385319524e+00 2.842720729387286482e+00 1.023630011169686105e+00 6.974549437024968768e+00 1.541945738455003934e+00 2.913259034713350015e+00 4.512992539354583332e-01 +2.028585498043759650e+00 1.398763410169154009e-01 3.691098756081625076e+00 7.976451317237516214e-01 4.435499859432201486e-02 7.467345392685726946e-01 5.281840013916209386e+00 9.546775874932222905e-01 5.365778369266787529e+00 7.770900276041966537e-01 +6.077535052205729649e+00 1.395387528894324602e-01 4.775093402342934112e+00 3.132020266567483890e+00 1.580718289061279869e+00 1.416317099261457102e+00 5.862579332019776324e+00 7.318328790735707523e-01 3.709729378713444436e+00 6.670468053137402764e-01 +1.214513163540950025e+01 4.365179876861721014e-02 3.838251055066958628e+00 7.238524315230883133e+00 1.660270397218274852e+00 1.239458019962108137e+00 1.401234933150055095e+00 2.814065416790874075e-01 4.456870379094779899e+00 2.891479005157764348e-01 +1.087941705836024830e+01 2.995998122378682460e-01 5.777085219163696772e-01 4.703046220800023214e+00 3.086014168894017917e+00 7.044434508496584257e-01 2.037881492641501424e+00 1.019327349906296476e+00 4.393779773589142401e+00 2.305255684467343302e-01 +5.290012626145627728e+00 9.008901407316972920e-02 1.142983813855805719e+00 4.118316186532029022e+00 3.637703293797282633e+00 1.906330254257075252e+00 1.445500604367967679e+00 5.164490469163260933e-01 3.532786407019917974e+00 8.270890916952341465e-01 +5.697086356845923127e+00 2.235572514757046270e-01 2.266800826831066873e-01 6.383456423897621690e+00 1.264197247239626343e+00 2.912491491275546185e-01 1.306548262207717137e+00 1.684488621935003927e+00 9.359893288902904729e+00 6.328523844944041743e-01 +1.359123925577359593e+01 2.715219536985591462e-03 8.374487623417636861e-01 4.033547555739824375e+00 7.378921961934747920e-01 1.372002555673720758e+00 2.694288461006839164e+00 2.082180871032943692e+00 1.911434796530308899e+00 7.656913496191556368e-01 +9.992533308249194945e+00 4.104749241998207482e-02 4.724075616116481413e+00 3.461796948861655121e+00 4.204372983561600385e+00 7.310738374531249306e-01 6.107621094624161806e+00 2.638927091445617990e+00 3.624613744624816114e+00 4.700163600933867647e-01 +1.685245491179172550e+00 2.115428105359661026e-01 4.407417050425523897e+00 7.476567774422387735e+00 3.634488913192286841e+00 1.698280219311323336e-01 2.945428761291103648e+00 2.713451434553051822e+00 1.012624145292138067e+00 3.648699049547410311e-02 +6.589428437578542130e+00 4.446906542749364671e-02 7.810041614180479597e-01 5.691285012262346399e+00 4.554086499149781808e+00 1.277799954679892380e-02 4.026680491475270740e-01 1.953473174748952212e+00 7.152482187616325815e-01 2.086430282341091846e-01 +2.720849865844793936e+00 2.440203981068089778e-01 2.917763308083296092e+00 5.899884531261626819e+00 3.940367037369739034e+00 1.211422445527540859e+00 1.567556955778588890e+00 5.600673976327497083e-02 9.876156837696910884e+00 1.599751919864411676e-01 +2.834482533918473379e+00 1.520034844725705325e-01 1.978602545261327617e+00 1.676165260704382654e+00 2.194029998012147153e+00 2.492932602456554569e-02 8.120351889658737887e-01 2.560447673664525858e+00 2.686589650575758270e+00 4.039721790527054379e-01 +1.484413911807410891e+01 1.998020163214577760e-01 3.141873601255305015e+00 3.066415597754779565e+00 2.205093406956332380e+00 1.116117348869391623e+00 2.615679339050218655e-01 4.804557806332970804e-01 3.540690054736377768e+00 9.294949005824936217e-01 +8.903890154201720364e+00 2.893997238796244265e-01 4.277785905487593077e+00 3.596708777222128894e+00 3.332199664018714813e+00 6.094561931515880548e-01 2.121001953072600532e+00 1.426684687927117112e+00 9.708702533734449247e+00 5.724400833134991595e-01 +3.704414716601320379e+00 3.534656415192761331e-02 2.191170133339663817e+00 5.192464390336396285e+00 2.340092081088205767e+00 9.268383918699469870e-01 3.615953197841254241e+00 1.025661142784032753e+00 2.734380318250539954e+00 8.545976971860628213e-01 +9.213691025538279789e+00 1.023114031986859657e-01 2.236053896606724933e+00 6.731642119286943560e-01 4.131381102030507790e+00 3.423592126394250368e-01 2.177072569545674519e+00 1.414220327358206131e+00 8.610263975317616669e+00 4.954105311458011363e-01 +7.882621005926893076e-01 2.756438662864029721e-01 2.440056720240608268e+00 8.095898270821609843e-01 2.982700784281210993e+00 7.367102799018900861e-01 6.005049730578022604e+00 2.935825349713905741e+00 8.105806119374374674e+00 7.343900173346469273e-01 +7.332899839919692297e+00 1.012310325009186385e-01 2.786199548500924550e+00 6.996915193838988856e+00 3.958649628430874756e+00 6.984966471313347469e-01 5.034280993433526419e+00 1.175980210067817389e-01 1.010859759006517855e+01 6.006376844057623732e-01 +7.335639593623159094e+00 1.035066387333896804e-01 4.632911160270253959e+00 6.920712126173365952e+00 4.840386095819143364e+00 3.536787893048165543e-01 2.116621517341860326e+00 2.028873912140862767e+00 5.484712972130116881e+00 8.008724869574028737e-01 +1.173589800901229019e+01 1.675454624679203752e-01 1.857307229807804827e+00 1.233541929072509369e+00 3.229707875128986050e+00 1.703661647359659526e+00 1.399653313244334507e-01 4.231632680835958338e-01 1.622735163775802736e+00 1.411886133281192723e-02 +2.170542045884753080e+00 1.649943693366306696e-01 3.719614864008544686e+00 2.628731378385484874e-02 4.659863887863504139e+00 1.953928332749399477e+00 4.030765489154215508e+00 1.884789318558428350e+00 5.218984001391103966e+00 3.659090632923160946e-01 +1.056590580826244263e+01 2.862455750574361968e-01 9.503624324612436336e-02 1.127223921843998111e+00 1.774286440361028117e+00 1.354483262491954498e+00 1.915978523368969677e-01 2.412656854678067564e+00 4.504271337259460495e+00 2.537074724100759626e-01 +6.043982956924061511e+00 6.522158466617089707e-03 2.382223597003132909e+00 2.938800347127498824e+00 6.293807419434965800e-01 1.252993652180068862e+00 1.825306399812175462e-01 5.606017677912336072e-01 7.204927649424960556e+00 3.160779924731268453e-01 +1.156234306026847136e+01 2.625389283153459208e-01 9.188016061419135294e-01 3.956596395967132196e+00 1.157796919074650654e+00 1.652334566517626113e+00 1.741466103683401379e+00 1.069893612030600405e+00 6.560230433252789872e+00 7.063619376068841493e-01 +7.867290877658208004e+00 3.150568657612348028e-02 3.208635889352626780e+00 1.260684268789601381e+00 4.422562013782658674e+00 8.540116238383288483e-02 3.831517191823027968e+00 2.753952785268408032e+00 1.024925082683439470e+01 5.986830995941015976e-01 +6.908975429542424607e+00 2.465841896031346625e-01 2.002845859032076348e-01 3.450171987307428356e+00 5.654276553583914566e-02 5.888214584539321894e-01 2.954089858527504830e+00 3.998447426773437119e-01 8.565177675858345552e+00 2.149680205088763119e-01 +1.440579812308176999e+00 2.654515414198045306e-02 1.135165258992570925e+00 2.417274957088451526e+00 3.433882671585630764e+00 1.266388978164296741e-01 1.387836349982975115e+00 2.496160923818382393e-01 9.660716199882918076e+00 9.465672103847755370e-02 +8.782530926087384060e+00 2.393484704828878762e-01 3.968161715697180902e+00 5.364616924126802688e-01 3.825267183065478305e-01 1.180409496794958990e+00 6.081207848146038764e+00 1.796741281632131981e+00 8.120621615047823871e-01 4.720230640647659071e-01 +2.467121281489119689e+00 2.669775602143918958e-01 1.920947605339624609e+00 7.436975019510371432e+00 1.718195053919568949e-01 1.974195934046878431e+00 6.198510534051498766e+00 8.831966827916776230e-01 9.463134124520076185e+00 6.678848326528338264e-01 +9.247156276444975731e+00 7.001843581120269222e-02 4.115753916944164814e+00 2.041110834822566389e+00 3.904491445485749335e+00 5.587411667288546546e-01 4.848061119307658373e+00 5.410753659731812881e-01 1.022435181440595420e+00 2.642349075966086147e-01 +1.366546319900654893e+01 2.924851229239786368e-02 8.435137812387760725e-01 7.697721002565737436e+00 4.954980248261398046e+00 1.503394228824324497e+00 9.547207340156207422e-01 1.149510349323715541e+00 2.550282953574176226e+00 4.858288944991739911e-03 +9.937610741476689213e+00 2.759728949218902619e-02 2.479287724279272132e-01 1.845578662935752234e+00 1.148725236157810414e-01 1.874378505644074044e+00 4.577898001225015001e+00 3.157179950007004132e-01 6.572428732526478967e+00 9.817710114629516482e-01 +1.335840810844957005e+01 2.901657393525319262e-01 2.291037384835683088e+00 5.523192339535359707e+00 4.263209114304837399e+00 1.850890820836459616e+00 4.248656287099825235e+00 1.437415418687666868e+00 3.969903039271164946e+00 6.444202791760184068e-01 +4.192252523941295550e+00 1.550577732890167648e-01 4.335142520595742788e+00 3.915362307244128814e+00 4.174447531315469639e+00 1.464441590023846773e+00 7.659465632505535471e-02 1.119809765001355650e+00 3.868034385081745352e+00 9.191814708483783125e-01 +9.950321370165964296e+00 2.416678064761437206e-01 4.452588664798807550e+00 7.980962757329372437e+00 3.576862137763775706e+00 1.878820577509221490e-01 5.810484732429623378e+00 2.818609720584823730e-01 1.043698983315975104e+00 1.320478448637341096e-02 +3.344531274564604306e+00 1.638261678427317125e-01 4.752068092969680357e+00 2.056633949183845012e+00 4.059152604022060906e+00 1.323178175655694844e-01 3.634674435700454787e+00 1.332248033612655647e+00 9.750778647413559597e+00 6.571876845461107619e-01 +9.313380312895419566e-01 1.327820969301612697e-01 4.452531935545533059e+00 7.853262599622130580e+00 3.589473016958418139e+00 8.655756972988859488e-02 5.281257933398629589e+00 2.878400204002617091e+00 1.530027895964270801e+00 1.410499062384990010e-01 +1.093728606033430673e+01 1.496850021362609306e-01 3.004629347358933611e-01 6.530279224244562641e+00 1.505697907373285682e+00 4.359977775952421641e-01 2.822161658968949549e+00 2.723579655675674616e+00 4.517358372113638332e+00 4.762740241746520331e-01 +4.126188688687098427e+00 1.785762566399805643e-02 3.827008942348112619e+00 9.799394438157742471e-01 1.190849990888681598e-01 3.586378183201568426e-01 3.473362514860903971e+00 4.907195619794019192e-01 1.082846597286479273e+01 7.338269154915928461e-01 +1.007171327046501119e+01 5.302731525826676236e-03 4.442829328707308179e+00 2.714799527596614137e+00 1.292804717399506087e+00 1.414685076132262687e+00 2.183756095362196170e+00 2.808301856380406747e+00 6.780760473974004832e+00 3.843291080113009350e-01 +1.167399330294518034e+00 2.464035477017099129e-01 1.402426005668689912e+00 1.150248779473895366e+00 1.522194921445518379e+00 1.381162689722999160e+00 5.435001694932432237e+00 2.392787620207044608e+00 8.988227846318018521e+00 2.269266068514101953e-01 +2.894390818868963322e+00 3.501963832568973783e-02 4.740386916137786066e+00 2.285802360415889467e+00 4.429435669874964177e+00 1.149591990037637013e+00 6.309683324067085763e+00 1.754139509852320478e+00 4.996119690460893992e+00 9.633675391347560346e-01 +8.428267793741513358e+00 2.975519105867783232e-01 2.738097388061362825e+00 2.713125296218298343e-01 3.983255273469377133e-02 5.832842143111387490e-01 9.222455190282240478e-01 2.660850484958854789e+00 8.646005308057572947e+00 7.723493728139844139e-01 +1.060844902950677238e+00 6.766848820457482816e+00 2.571544822122694196e+00 1.301410412620856993e-01 4.939075861095859388e+00 1.944985184657319843e+00 3.071352746565616521e+00 2.952877773172982057e+00 5.413409368896327400e+00 7.835805833878990434e-01 +2.676604664379357956e+00 1.015453292439209010e-01 2.796370894748441138e-01 3.783589975482610779e-01 1.615586647489880567e-01 1.462415378364156915e-02 2.849926147228915241e+00 1.990766760230136434e+00 4.608386640197815742e-01 4.913530386323300414e-01 +4.928622521604909323e+00 4.776267137399662133e+00 6.738922765189601094e-01 6.737755331040837792e-01 3.523416780856081232e+00 1.987539862409304803e+00 3.322034856620849741e+00 2.129310622060661684e-01 6.600863177109800084e+00 3.085759141198198829e-01 +1.785331680394218745e+00 2.003420991178347599e+00 2.900766376377190259e+00 1.569593908723631026e-01 2.959800314520040221e+00 1.332160482584163530e+00 1.574742777579251296e+00 1.474370607477436312e+00 5.161994254879935795e+00 3.573259702589637321e-01 +2.060566256973487498e+00 4.064024192901496413e+00 1.638291229583957342e+00 5.291965806117688853e-01 4.147376271759576127e+00 1.871711279692187535e-01 1.592167092938667761e+00 9.832800064235791559e-02 9.093859685572962093e+00 2.871171512211987409e-01 +2.802432727066052731e+00 4.152681619178160588e+00 3.519899751123976461e+00 8.767373897844914499e-01 1.497015974178587117e+00 1.178656320463950191e+00 3.590298473162238935e+00 1.121258186897473141e+00 3.999535611626285458e+00 8.235737108516272276e-02 +7.793345816216601385e-02 7.119616496871206124e+00 3.263514453318660635e+00 8.767708034167319697e-01 4.367621895504575136e+00 1.584033235097142001e-01 1.753016637889057261e+00 8.806782211544889050e-01 7.660523694529250971e-01 2.421807599200342942e-02 +1.650807741747343904e+00 6.676864939234765650e-01 7.158398866250768044e-01 4.208260033098576436e-01 4.020367360514349286e+00 4.706317984761432260e-01 2.612129318099994713e+00 1.171799316797829782e+00 1.085072636057884621e+00 9.463861023983399789e-02 +4.058767043920196826e+00 7.095671728991746363e+00 2.700297896325542180e+00 1.613772848781617197e-01 2.851637748082545443e+00 8.849171780970555012e-01 6.469348385074413343e+00 2.409711450205083150e+00 1.227804052323222539e+00 7.245949939817655228e-01 +2.952642653678108964e+00 1.886946931087596369e+00 2.473081195542755850e+00 5.362099416315594391e-01 1.419640415165426717e+00 1.903766283029795225e-02 6.887126590983250196e+00 5.688537003635961709e-01 3.423639520476965625e+00 4.938406145277395298e-01 +4.737499561105624757e+00 9.968754726664579291e-01 3.774680347781333989e+00 4.881731108025820776e-01 2.226755900717518610e+00 1.171985346633335423e+00 6.671227239296362299e+00 7.695013938605947956e-01 1.042858080409883925e+00 8.496226110071675164e-01 +5.325414666879468850e-01 7.018918782479677709e+00 1.608471156325481655e+00 5.862836927685144417e-01 2.672078926166417290e+00 4.874633009746880408e-01 2.209336683548580815e+00 1.743210228627345870e+00 7.300458180698917943e+00 3.180482670802708967e-01 +4.057375329048528378e+00 3.890521688612440965e+00 1.762635121494908752e+00 4.315974671518035821e-01 5.740273295456138625e-01 1.149928423510549580e+00 6.645380061650246084e+00 1.716175648811826715e+00 1.817203695888137016e+00 2.279386936010485698e-04 +4.819371354809093511e+00 1.986334992808725719e+00 4.583363789373673391e-01 3.992089559255137532e-01 1.511460483775759922e+00 1.660344970547767085e+00 4.073543600444102353e+00 1.064209283618703594e+00 3.163140007477470483e+00 6.883692634412575950e-01 +4.822861817330296397e+00 1.286480435582614712e+00 9.370740372064094714e-01 9.673040603625950862e-01 1.291594883259390425e+00 1.038459954771715044e+00 6.225515359923287306e+00 2.457650031437864868e+00 1.095606761972162424e+01 7.337655625192263109e-01 +1.388473219412195148e+00 3.816243179861769086e+00 1.442597880348657213e-01 7.222240964942758801e-01 4.062612762646490516e+00 2.874594600573110448e-02 4.710301168894129198e+00 2.970156004203755362e+00 1.950104669992388517e-01 1.213572941978990904e-03 +2.095978035147009866e+00 6.873067538223646133e-01 1.319090499678944095e+00 6.916304149708443205e-01 7.253452473503479991e-01 1.948495719716487162e+00 1.265245191334455122e+00 2.196421971177734633e+00 5.301304620523421995e+00 1.584176397116228152e-01 +2.979233187060020605e+00 4.956587004286280518e+00 1.688392721619113690e+00 7.532059070534440348e-01 1.887662047040422619e-01 2.805001211605031575e-01 9.824130470675018767e-02 2.962504536056278504e+00 1.072663709115177610e+01 5.013157111486933326e-01 +2.788962486475272673e+00 5.115971710107624304e+00 5.660005924878737105e-01 5.560222984350132736e-01 4.858087680745722281e+00 7.725785191495309068e-01 5.845998556520539680e+00 9.987118052417467418e-01 2.295433607375663598e+00 1.326889295282640546e-01 +4.557887825045138008e+00 2.247326501433015267e+00 1.308921194395065601e+00 9.753282383497733354e-01 1.730029373381708480e+00 5.701790289472219442e-01 6.352823959792196495e-01 1.147755410972870260e+00 5.520736993109069957e+00 9.774412642381167249e-01 +2.045438792050340293e+00 7.561046060398181723e+00 3.522811502396113070e+00 6.976548466048726471e-01 1.767378331045376783e+00 1.924976381949984106e+00 1.266202415138989235e+00 2.046343295450062438e+00 2.076108124751949724e+00 9.755719638581734632e-01 +4.868031211031395245e+00 4.182997028123785377e+00 3.669697829412847945e+00 8.683837530035829477e-01 4.809874760362171209e+00 7.146311160463343359e-01 4.140379287730196367e+00 1.871204810554052189e+00 2.927063933787202199e+00 1.781360315397091387e-01 +1.447543209935399089e+00 3.894063908911108207e+00 7.167099377268382199e-01 4.816816841673178251e-01 9.437790189709754918e-01 7.136790168415698687e-01 7.984261778454281311e-01 1.267997907136523494e+00 9.241262771031886203e+00 2.264187036508533701e-01 +4.492110383454359201e+00 8.423313033097198144e+00 2.601809612520743276e+00 1.877570508378717529e-01 4.720029746759013101e+00 1.700776811458877491e+00 4.379722879784793577e+00 1.286338778406133088e+00 4.897457407195897616e+00 1.463406370506259435e-02 +3.397516181353549269e-01 5.474743776680605079e-01 2.792881561416644676e+00 8.613177248107457551e-01 3.084547950087940915e+00 4.295939916996971419e-01 5.853057398141740642e+00 2.886701648573187562e+00 6.513812374119662962e+00 3.683927726861278007e-01 +3.123566792546268012e+00 3.586380650299095585e+00 8.986175900527371141e-02 8.341062939442902557e-01 1.688951864196345243e+00 1.079977094532845516e+00 2.714109110128215541e+00 2.839337530931991704e+00 1.218807949172431293e+00 7.915582761215033125e-01 +3.141700155842215736e+00 1.204667402016855737e+00 1.916351797648172095e+00 1.536958008100480777e-01 3.425634957816583004e+00 5.173225973429682600e-01 5.259306090770171416e+00 1.917625582619049140e+00 1.075917707540842727e+01 7.474619317582414935e-01 +1.334327177064201120e+00 1.275405518944317640e+00 2.568022248402845875e-02 8.801880626520913742e-01 4.297141956880407010e-01 6.992528373701238920e-01 6.553594825126268120e+00 2.898861772480366694e-01 5.921191598075131957e+00 7.429605987984524429e-01 +2.771024127637877310e+00 2.706234632094140391e+00 3.850437535134872746e+00 7.057112116190219497e-01 2.533276847739223125e+00 1.771636964438744632e+00 3.080408803160064934e+00 2.070444129927007104e+00 1.189083402543695822e-01 8.109099497493107433e-01 +4.429566490061738193e+00 3.870904287199198102e+00 3.908477669001917398e-01 9.583973851447378234e-01 3.595638219458183737e+00 1.789184903519657199e+00 4.609156216292533692e-01 5.237161367552056745e-02 1.898196986141101217e+00 4.720040556194841086e-01 +6.236410129144742687e-01 5.677002709722877682e+00 3.495932245976291153e+00 1.724677152701515892e-01 4.797077834826430021e+00 1.896003719678501565e+00 6.666830956711757850e+00 1.917567880520230972e+00 5.078350320183913524e+00 1.619340143708598578e-01 +3.981295223585228360e+00 4.293445223367310604e+00 3.800375528545455239e+00 7.832850811253453394e-01 1.697773609172191778e+00 1.107703012941383403e-01 5.882009120179721329e+00 2.377183558175493872e+00 1.016804229228126033e+01 7.498926347264457393e-01 +2.600915763215731591e+00 2.624416429045383747e+00 8.727133245527625149e-01 8.321007865109071311e-01 3.120145967108394647e+00 1.706568507429746751e+00 6.924345627676093073e+00 6.502709038408825970e-01 3.057969519658665369e-02 1.561628673971688919e-01 +2.990086920642259782e-01 7.612290167957059595e+00 1.048504608494758017e+00 4.243228873493485320e-01 4.221314528605337735e+00 9.278772379775166446e-01 2.349514943790474764e+00 5.255177442909533259e-01 2.143073036231040618e+00 6.074576627365183557e-01 +3.899808502523676168e+00 7.299461473479367690e+00 1.095057277835178589e-01 4.079961930720432672e-02 1.621607684387396553e+00 5.256243374272819846e-01 1.486732148961382727e+00 8.027452089786548672e-01 5.594994509646422642e+00 2.574106532041128270e-01 +3.023696564487597271e+00 7.074713638764114521e+00 1.522391750286943957e+00 6.952922812547067677e-01 7.386888415687059561e-01 1.904294326226209977e+00 4.712216395755660869e+00 6.501349564540930270e-01 9.969785446062145340e+00 7.550945275312674898e-01 +1.543379307984599214e+00 6.829479885114219329e+00 3.204292732322415738e-01 2.897902351539538568e-01 1.968018159493589270e+00 1.312508995789594346e+00 2.708863147028642615e+00 1.956603963514276678e+00 3.858471150102140257e+00 7.226613324983187647e-01 +2.530459391858276952e+00 2.304294321666098710e+00 1.613466033140124711e+00 6.299550659672248365e-02 2.557517824305648446e+00 1.403315613527134742e+00 4.690924014732587466e+00 1.213893307285142553e+00 5.916330575871066699e+00 7.792844130394782631e-02 +1.928958533970001055e+00 7.096037593440583713e+00 3.299214390196449909e+00 4.754507764571461736e-01 4.595032873457040701e+00 6.269257509934247352e-01 2.676009205554832349e-01 7.111427300413641905e-02 2.311387519441321370e+00 7.607719658377676275e-01 +3.049750470993188411e+00 8.335532589038272988e+00 1.373761433026730483e+00 5.780521456251697110e-01 4.958750575379713865e+00 7.704485760265957772e-01 5.295783844382295769e+00 3.106174373836714242e-01 9.119442286621413984e+00 1.454365312917409447e-01 +1.446643143411851629e+00 1.641242803584559207e+00 2.373684364313463746e+00 8.733542221566478192e-01 8.350946657808716589e-01 1.827085120550399511e+00 1.796517849664760247e+00 1.705076201114264389e+00 8.296752770476137684e+00 7.700551493773489797e-01 +3.366516415093608217e+00 5.615004677240882813e+00 3.229775535441422818e+00 3.310459399464378283e-01 1.088020205681265562e+00 1.380181017003498711e+00 4.110524683994838391e+00 2.481465439558942165e+00 1.115804813826559716e-02 1.616539324263285282e-01 +5.339002830872147110e-01 3.839053681064814594e+00 2.333489534725208259e+00 8.432771114289439041e-02 2.102522728545276109e+00 1.709023161576461725e+00 6.917442654625217680e-01 3.462567460748395831e-01 3.782775783847899476e+00 1.071179999213418554e-01 +4.038277759901608199e+00 6.782157613841707011e+00 3.464511868539065453e+00 3.371376637740397531e-02 7.730806184225119670e-01 7.252544893421604133e-01 6.872132022199162193e-01 2.814389010091199683e+00 3.447296041223141039e+00 1.893497025003773038e-01 +2.731398993279879228e+00 3.676456867956779728e+00 6.413375855037339868e-01 6.707794732330785159e-01 7.635992572959304781e-01 6.062167860722607049e-01 2.063055943432477779e+00 7.336308576363859135e-02 7.472848003733477462e+00 1.287928899982984099e-01 +1.453840364993632228e+00 9.062482719258549979e-01 6.882205879952656424e-01 2.182327096949714385e-01 2.024410040526736232e-01 1.295642963260670966e+00 1.330150396283942271e-01 1.736145709990954078e+00 6.112044371929087561e+00 7.027845512380351822e-01 +1.210119312939017533e+00 7.630467468868430414e-01 6.359188990088751048e-01 9.883815275234506537e-01 5.934758597976730332e-01 1.831489821220492642e+00 1.310176158219893416e+00 1.258981371172946284e+00 9.653015748557789877e+00 5.710674551489269835e-01 +2.041872616241314109e+00 1.223997932765245711e+00 3.592523080817271008e+00 4.957374306008986986e-01 3.949335508277540985e+00 6.291860827029358560e-01 3.113717329409727341e+00 1.389609354520767059e+00 4.805115070835719315e+00 1.445284193078527624e-01 +3.575248649915818255e+00 8.905544750152357025e+00 2.966905439089235763e-01 4.679521298887630021e-01 3.547669603089278034e+00 1.578738230960443634e-01 6.270181915307466269e+00 7.487332787197820139e-01 7.886412615362010214e+00 8.133212834800832569e-01 +3.898698540050224981e+00 5.123757154565923067e+00 1.178107462557977492e+00 5.520746813096077954e-01 4.592951289518920621e-02 1.171909103767588389e+00 2.927267136454773322e+00 2.552935710110848078e+00 8.342615367499133683e+00 8.906236190999595737e-01 +2.108021535094918519e+00 5.560002888746932825e+00 7.214745149145316283e-01 6.765900158851164692e-01 1.023718975037019030e+00 5.744441677430218718e-01 2.485628740508086798e-01 2.832571092367738075e+00 7.596538198565406574e+00 5.914159707314822212e-01 +4.869067486253129573e+00 2.921814738200520623e+00 1.610700494896931900e+00 9.811040652599956058e-01 1.628599890640177072e+00 3.374886126447058654e-01 6.583180705038420122e+00 1.022109354202180187e+00 2.448534262177565424e+00 4.087328272831077802e-01 +2.420585719788033607e+00 4.954656265767008350e+00 2.231237042402161030e+00 9.790433090249440751e-01 3.332677810332588031e+00 6.561609460180721776e-01 8.270420803686340250e-03 3.528899693185899578e-01 2.741096663606271022e+00 1.378071713616224603e-01 +2.754906745122323031e+00 9.676710641503563082e-01 3.754240456912557367e+00 5.250193878563741423e-01 4.142397075465397371e+00 1.381722150840025476e+00 1.687280922291270358e+00 1.067933655487581790e-01 4.015412949008595467e-01 2.082096208576281748e-01 +4.888597998415178836e+00 3.014616594535894478e+00 2.837447468287521257e+00 8.929321846889970438e-02 1.593208978592462355e+00 1.432010333523069168e+00 1.362472022175857500e+00 2.023735351705774121e+00 8.040906539490745075e+00 5.333388283334727920e-02 +4.672702450324211831e+00 4.692525988250669577e+00 8.114199473892678149e-01 6.638642607029177078e-03 4.763672448857547703e-01 4.352861108378174304e-01 2.409652310337002223e+00 2.792543818597630345e+00 1.519095639879380233e+00 9.479421782536426866e-01 +1.390626568565362930e+00 5.795403282043417370e+00 5.780808828259962340e-01 6.537836869813318241e-01 4.342143903361439072e+00 1.328515786636720097e+00 5.020182370459501664e-01 7.291349036975974807e-01 8.463574453670117848e+00 2.741521287108358296e-01 +4.274877195091104198e+00 7.028513230726042060e+00 9.529844002173715189e-01 7.084183854011977255e-01 3.053184380355488781e+00 1.621308385572049371e+00 5.106963486979936295e-01 1.138778733677962673e+00 1.513533548987051613e+00 4.128356930393282109e-01 +3.624662754171856349e+00 2.618325768156440247e+00 8.047122068257333005e-01 5.662174560363387732e-01 2.262254632401385024e+00 2.208252441574161118e-01 3.245715851864902746e+00 2.088639737645078043e+00 6.869899939030401192e+00 3.833214771865146586e-01 +3.575490259832633022e+00 6.910866830500633995e+00 1.717562694591180605e+00 1.419119188604517356e-01 2.158793574868946408e+00 1.330907174346497746e+00 1.533175421100802627e+00 2.256864015809196822e+00 6.590486673228634018e+00 3.476457046878822510e-01 +2.763065587192560457e+00 3.755485876415471047e+00 2.937747270412279121e+00 6.776105276205796057e-01 1.102731743682296539e+00 1.671531786654884888e+00 3.194714296103120077e+00 1.832857589884217653e+00 5.267733310304743455e+00 9.498442020616374437e-01 +2.180692874176391349e+00 4.999495552064338710e+00 1.702888717024749976e+00 6.344642518347354265e-02 4.735873322905289839e+00 1.719599405515690238e+00 5.875922789677373359e+00 2.656004507669272208e+00 2.799792892846766357e+00 9.027899878643840248e-01 +1.498261411619749683e+00 1.440449178719120038e+00 3.793107505633872112e+00 5.092674831952860304e-01 1.034353051067818274e+00 1.569113426588875537e+00 3.771789988063644294e+00 1.328199351063930056e+00 6.225317682380070217e+00 7.271156352129748424e-02 +4.315942201307298998e-01 7.981247257459226141e+00 1.336073327630646901e+00 6.032379115696278049e-01 1.219125442838360662e+00 1.456458998083272505e+00 4.742675091300004864e-01 2.983575448822485932e+00 2.556602655333460650e+00 3.088219887595959889e-01 +4.976840216515537207e+00 5.358430906005960281e+00 6.245523297173987132e-01 2.545868317479035303e-01 9.742520666157300502e-01 1.182300247768848678e+00 4.654689808343711599e-01 2.709837605689326967e+00 5.452250849671616884e+00 6.515934524029750596e-01 +3.027576266208495070e+00 7.465991597741851393e+00 1.312320289625385605e+00 1.808157433154811145e-01 1.175791304316830654e+00 1.202757075039505796e+00 4.623859408182577901e+00 2.068219070878894339e+00 3.538760796420987731e+00 3.191906695569177721e-01 +3.186056897890198414e+00 7.744541371714031008e-01 7.520333736299331662e-01 2.346946453265875698e-01 1.939963125002858169e-01 1.102878394022341890e-01 2.892927495768838675e+00 2.226458507448537905e+00 8.040128531690038827e+00 2.426324783043983802e-01 +3.010003224219015117e+00 3.421867958770924645e+00 5.220586116504088992e-01 7.415249008538514763e-01 7.940706222571397577e-01 7.440532342345227423e-01 2.342240626863175024e+00 2.838160438547582931e+00 6.965119358930052407e+00 7.994713698433695281e-01 +1.073150862609050904e+00 5.708596454024827516e+00 2.122872605431856297e+00 3.879631915218560989e-01 2.315027253640028482e-01 9.412461989804450369e-01 1.359498791221620095e+00 2.799047819563208250e+00 6.092966540584811241e+00 6.446687874293053344e-01 +3.458319946541093426e+00 8.965823126867210391e+00 3.472581333838808959e-01 6.522372110328005235e-01 4.295269312487254298e-01 1.454437017783624775e+00 1.026918893392381404e+00 2.262804025523970530e+00 9.073155138943480580e+00 5.447998210661599838e-01 +1.800815055028895939e+00 8.579365052829048821e+00 2.541477396290954260e-01 2.397851878036376672e-01 2.759387911051200515e+00 2.947509094624349846e-01 9.515331736896013304e-01 1.743545886323498051e+00 2.156608211313451928e+00 4.566652586160673266e-01 +4.296243379948193386e+00 4.589758336708962716e+00 3.455005162367942528e+00 4.939154835666571541e-01 3.524083380370812701e-01 1.332555812949300478e+00 6.993865493780931253e+00 8.776996462395436627e-02 7.306362098970477170e+00 9.464560745296662914e-01 +4.270913173204858637e+00 4.311969821782867029e+00 1.235273021108498348e+00 1.363559640515099591e-01 4.297344674974395984e-01 5.399230520058395655e-01 4.519230441177060520e+00 2.223130570132609840e+00 2.003741389920957516e+00 3.000032742213165626e-03 +9.696108658633073585e-01 3.029563706398431311e+00 3.435820656827302866e+00 2.808855835523164091e-01 4.964076077685161792e+00 7.870171799195373463e-01 5.160598369656576700e+00 1.615991618531589236e-01 4.168851015871288368e+00 7.207503227396369061e-01 +9.857942554944587599e-01 2.241766796766214931e+00 1.094309073772436580e+00 6.171782099877928252e-01 2.164628407777784425e+00 2.967518925643408689e-01 6.897409292902939804e+00 9.171811935351321665e-01 5.578640625010033105e+00 4.324319825361930825e-01 +1.359323138290471800e+00 4.701967131801875199e-01 9.050689110105434310e-01 2.965795773291597381e-01 4.828973782133643589e+00 1.476756345192362208e+00 7.663619972606046105e-01 2.684843417506681096e+00 1.573201667699820838e+00 9.645271733524597435e-01 +6.432401347291311078e-01 4.025095134154975440e+00 3.309291976114321798e+00 3.338009834108435214e-02 3.084159326974440951e+00 7.597149110462917410e-01 1.345625764516446221e+00 1.543092560770717991e-01 5.232739162356885299e-01 5.344642145090121588e-01 +1.893475424698252141e+00 4.846915016695094280e+00 1.017577622922591463e+00 1.454379078590283259e-01 3.217212279193671698e+00 1.534170379797259010e+00 1.500675184724801436e+00 2.195608560978177248e+00 7.840082621731490065e+00 9.423202685727883887e-01 +4.916089799921347314e+00 3.077404880415298694e-01 3.341398797528096321e+00 5.790895913656423089e-01 2.109983576554563811e-01 1.849697544503176694e+00 4.269817133289845579e+00 2.772678110702025744e+00 1.597462715869091276e+00 2.066184857660853247e-01 +1.781292690950635027e+00 6.637468747977988137e+00 1.464153733648121847e+00 2.712309115523448000e-02 3.857947122149120389e+00 1.296349898299295811e+00 4.044166349775594860e+00 1.645944211560824044e+00 3.273391468292933260e-01 8.630632196811667267e-01 +8.171982958624174342e-01 8.696289780825402715e+00 3.455462363279165672e+00 8.945385963649863381e-01 2.164679436470390295e-01 8.639775191003977728e-01 9.436930182918934484e-02 2.039374760416071020e+00 7.722056720400328089e+00 7.888445971939340717e-01 +2.023302408059274970e+00 1.310618978377030786e+00 3.155456554057674889e+00 5.010819036675714377e-01 4.538509162145537346e+00 3.704064878007766737e-01 4.328283814895621973e+00 2.633257692097203950e-01 2.643788071556784747e+00 2.432016064719373372e-01 +8.102427541700596425e-01 4.125234289775202789e+00 1.517297146146757925e+00 7.389238601698774334e-01 4.067571276286313653e-01 1.735885673249011996e+00 2.664598954585144064e+00 2.602674375990287281e+00 3.116895494600373961e+00 1.762468820849705242e-01 +2.621132195703196111e+00 8.425316661290198184e+00 4.994480734649351383e-01 2.844736464195067871e-01 2.275884645154663488e+00 1.142221825149852377e+00 1.212554029681834233e+00 9.240986804861089920e-01 2.170291307332780084e-01 6.849869128634944460e-03 +1.174342088277471774e+00 5.577399746499002831e+00 3.951771200670569417e+00 5.006730198987506819e-01 3.596816929922009187e+00 4.994925384211443831e-01 4.413151350909869208e+00 1.418601174288871114e+00 4.839712146933547565e+00 9.760601828982439221e-01 +1.878213562249231749e+00 4.684555617152866169e+00 3.889299363513806895e+00 2.336972704101780707e-02 4.196904367361877775e+00 1.636484945202322683e+00 6.120210824336769662e+00 1.961635110777701918e+00 9.569470113865142125e+00 2.306199899979174406e-01 +3.431803129291879362e+00 4.012460279071989433e+00 3.786995576138590280e+00 3.401138113223747261e-01 3.171776225702972241e+00 5.533791211625698203e-01 4.380475363051796300e+00 2.758179724465671612e+00 8.238428864941681695e+00 1.611340397700082860e-01 +2.349694539920080150e+00 3.425362999949447929e+00 7.467879539582895632e-01 1.309946362139290388e-01 5.805916871698890702e-01 1.657140208444111584e+00 2.281415527558649625e+00 1.158152241249966297e+00 4.945420862933350925e+00 7.787419149878671565e-02 +2.871323242818877297e+00 6.534521291113140506e+00 3.096514924644943711e+00 6.667111185354958058e-01 4.581752374807475547e+00 4.565652293776831794e-01 6.933935392164753964e+00 7.018283743141698894e-01 4.265168364923495936e+00 6.901545552296244335e-01 +4.035690704229409675e+00 8.932606707872219332e+00 2.440117375879147676e+00 1.749555891357814641e-01 3.388836934377787546e+00 1.096540733110390020e+00 4.167898589768252116e+00 1.510982178698893286e+00 9.444730460473605760e+00 1.685190174932924556e-01 +1.895368854776446899e-01 8.111771833719306768e-01 1.496918109897968030e+00 8.739513189132178672e-01 3.271337369168346054e+00 7.030233822128264531e-01 6.401423581208871560e+00 1.029249503237427366e+00 2.009554833626514103e+00 6.565754492988090663e-01 +1.951751457247066224e+00 5.044712160044664273e+00 3.421432883480826970e+00 8.109581787816579901e-01 1.128731846702503816e+00 1.209060606591956688e+00 5.696978360178965417e+00 1.330520244258292406e+00 2.811362781860978100e+00 4.875439923021647193e-01 +7.946496095974958651e-01 7.959850102243462011e+00 8.886633323027690601e-01 8.912678301211978127e-01 1.506339073727302580e+00 1.772468056111744072e+00 5.209003007333696367e+00 1.910008906957938679e+00 6.469615179120823401e-01 4.738444478905338153e-01 +2.923037361500433029e+00 8.570876002749072242e+00 2.708321601975356430e+00 3.282691449572501252e-01 1.618103487581618039e+00 7.910655433987572316e-01 4.227704764846127006e+00 1.475926172111246215e+00 4.356475937759435091e+00 6.465232347181339989e-01 +2.522665440307211071e+00 1.963912550509897548e-01 1.722541801969912356e-02 7.082969529076817983e-01 4.976037482905154796e+00 2.468844590379837278e-02 6.706997326725380404e+00 1.309674497144936556e+00 9.860787708680341268e+00 8.357747879146570913e-02 +4.255818572678702338e+00 6.744878797873571585e+00 1.760033311394217925e+00 3.676055726983046279e-01 4.092141947481376718e+00 1.612470654985766583e+00 5.778498425542084149e+00 1.079514954339773070e+00 5.568696898336217060e+00 8.545812171197980645e-01 +2.446430878144840282e+00 5.234567351584125561e+00 5.715867278950135244e-01 7.003532329827356628e-01 4.568505639054738054e+00 1.943174193938479233e+00 5.764774523003604934e+00 1.937713945979894881e+00 6.298501537697791086e+00 9.026276578818063223e-01 +1.273163398740040364e+00 4.162415703791141119e+00 3.455865592048522394e+00 3.656764736071405064e-02 1.954721520949571190e+00 2.734474567634836983e-01 8.281588142887611470e-01 4.484584054747960957e-01 7.652386767723299954e+00 6.708336181638869800e-01 +3.272573882698126546e-01 2.771858331744477821e-01 3.650874191969583293e+00 8.313793690203402642e-01 4.721314279438468375e+00 1.073305358961462286e+00 5.882774132732964567e+00 2.199287336285580263e+00 3.798152586004966969e-01 5.333129895506141249e-01 +2.307814819672060480e+00 4.104095493932964800e+00 2.489576320635186413e+00 4.496836765063628727e-01 4.578631912903595946e+00 1.329946843468508222e+00 1.683934112573501896e-01 7.002919109156724442e-02 2.471193668340454508e+00 5.351430311502515247e-01 diff -r 8b47a3c08d97 -r 2ac77e0aec82 test-data/pipeline_params05.tabular --- a/test-data/pipeline_params05.tabular Wed Mar 11 17:09:06 2020 +0000 +++ b/test-data/pipeline_params05.tabular Tue Apr 13 20:42:24 2021 +0000 @@ -13,6 +13,6 @@ * n_jobs n_jobs: 1 @ oob_score oob_score: False @ random_state random_state: 42 -* verbose verbose: 0 +@ verbose verbose: 0 @ warm_start warm_start: False Note: @, params eligible for search in searchcv tool. diff -r 8b47a3c08d97 -r 2ac77e0aec82 test-data/pipeline_params18 --- a/test-data/pipeline_params18 Wed Mar 11 17:09:06 2020 +0000 +++ b/test-data/pipeline_params18 Tue Apr 13 20:42:24 2021 +0000 @@ -47,7 +47,7 @@ output_distribution='uniform', random_state=10, subsample=100000))" -* verbose verbose: False +@ verbose verbose: False @ powertransformer__copy powertransformer__copy: True @ powertransformer__method powertransformer__method: 'yeo-johnson' @ powertransformer__standardize powertransformer__standardize: True @@ -75,7 +75,7 @@ * transformedtargetregressor__regressor__n_jobs transformedtargetregressor__regressor__n_jobs: 1 @ transformedtargetregressor__regressor__oob_score transformedtargetregressor__regressor__oob_score: False @ transformedtargetregressor__regressor__random_state transformedtargetregressor__regressor__random_state: 10 -* transformedtargetregressor__regressor__verbose transformedtargetregressor__regressor__verbose: 0 +@ transformedtargetregressor__regressor__verbose transformedtargetregressor__regressor__verbose: 0 @ transformedtargetregressor__regressor__warm_start transformedtargetregressor__regressor__warm_start: False @ transformedtargetregressor__transformer "transformedtargetregressor__transformer: QuantileTransformer(copy=True, ignore_implicit_zeros=False, n_quantiles=1000, output_distribution='uniform', random_state=10, diff -r 8b47a3c08d97 -r 2ac77e0aec82 test-data/train_test_eval_model01 Binary file test-data/train_test_eval_model01 has changed diff -r 8b47a3c08d97 -r 2ac77e0aec82 test-data/train_test_eval_weights01.h5 Binary file test-data/train_test_eval_weights01.h5 has changed diff -r 8b47a3c08d97 -r 2ac77e0aec82 test-data/train_test_eval_weights02.h5 Binary file test-data/train_test_eval_weights02.h5 has changed diff -r 8b47a3c08d97 -r 2ac77e0aec82 to_categorical.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/to_categorical.py Tue Apr 13 20:42:24 2021 +0000 @@ -0,0 +1,50 @@ +import argparse +import json +import warnings + +import numpy as np +import pandas as pd +from keras.utils import to_categorical + + +def main(inputs, infile, outfile, num_classes=None): + """ + Parameter + --------- + input : str + File path to galaxy tool parameter + + infile : str + File paths of input vector + + outfile : str + File path to output matrix + + num_classes : str + Total number of classes. If None, this would be inferred as the (largest number in y) + 1 + + """ + warnings.simplefilter("ignore") + + with open(inputs, "r") as param_handler: + params = json.load(param_handler) + + input_header = params["header0"] + header = "infer" if input_header else None + + input_vector = pd.read_csv(infile, sep="\t", header=header) + + output_matrix = to_categorical(input_vector, num_classes=num_classes) + + np.savetxt(outfile, output_matrix, fmt="%d", delimiter="\t") + + +if __name__ == "__main__": + aparser = argparse.ArgumentParser() + aparser.add_argument("-i", "--inputs", dest="inputs", required=True) + aparser.add_argument("-y", "--infile", dest="infile") + aparser.add_argument("-n", "--num_classes", dest="num_classes", type=int, default=None) + aparser.add_argument("-o", "--outfile", dest="outfile") + args = aparser.parse_args() + + main(args.inputs, args.infile, args.outfile, args.num_classes) diff -r 8b47a3c08d97 -r 2ac77e0aec82 train_test_eval.py --- a/train_test_eval.py Wed Mar 11 17:09:06 2020 +0000 +++ b/train_test_eval.py Tue Apr 13 20:42:24 2021 +0000 @@ -1,59 +1,64 @@ import argparse -import joblib import json -import numpy as np import os -import pandas as pd import pickle import warnings from itertools import chain + +import joblib +import numpy as np +import pandas as pd +from galaxy_ml.model_validations import train_test_split +from galaxy_ml.utils import ( + get_module, + get_scoring, + load_model, + read_columns, + SafeEval, + try_get_attr, +) from scipy.io import mmread -from sklearn.base import clone -from sklearn import (cluster, compose, decomposition, ensemble, - feature_extraction, feature_selection, - gaussian_process, kernel_approximation, metrics, - model_selection, naive_bayes, neighbors, - pipeline, preprocessing, svm, linear_model, - tree, discriminant_analysis) -from sklearn.exceptions import FitFailedWarning +from sklearn import pipeline from sklearn.metrics.scorer import _check_multimetric_scoring -from sklearn.model_selection._validation import _score, cross_validate from sklearn.model_selection import _search, _validation +from sklearn.model_selection._validation import _score from sklearn.utils import indexable, safe_indexing -from galaxy_ml.model_validations import train_test_split -from galaxy_ml.utils import (SafeEval, get_scoring, load_model, - read_columns, try_get_attr, get_module) +_fit_and_score = try_get_attr("galaxy_ml.model_validations", "_fit_and_score") +setattr(_search, "_fit_and_score", _fit_and_score) +setattr(_validation, "_fit_and_score", _fit_and_score) -_fit_and_score = try_get_attr('galaxy_ml.model_validations', '_fit_and_score') -setattr(_search, '_fit_and_score', _fit_and_score) -setattr(_validation, '_fit_and_score', _fit_and_score) - -N_JOBS = int(os.environ.get('GALAXY_SLOTS', 1)) -CACHE_DIR = os.path.join(os.getcwd(), 'cached') +N_JOBS = int(os.environ.get("GALAXY_SLOTS", 1)) +CACHE_DIR = os.path.join(os.getcwd(), "cached") del os -NON_SEARCHABLE = ('n_jobs', 'pre_dispatch', 'memory', '_path', - 'nthread', 'callbacks') -ALLOWED_CALLBACKS = ('EarlyStopping', 'TerminateOnNaN', 'ReduceLROnPlateau', - 'CSVLogger', 'None') +NON_SEARCHABLE = ("n_jobs", "pre_dispatch", "memory", "_path", "nthread", "callbacks") +ALLOWED_CALLBACKS = ( + "EarlyStopping", + "TerminateOnNaN", + "ReduceLROnPlateau", + "CSVLogger", + "None", +) def _eval_swap_params(params_builder): swap_params = {} - for p in params_builder['param_set']: - swap_value = p['sp_value'].strip() - if swap_value == '': + for p in params_builder["param_set"]: + swap_value = p["sp_value"].strip() + if swap_value == "": continue - param_name = p['sp_name'] + param_name = p["sp_name"] if param_name.lower().endswith(NON_SEARCHABLE): - warnings.warn("Warning: `%s` is not eligible for search and was " - "omitted!" % param_name) + warnings.warn( + "Warning: `%s` is not eligible for search and was " + "omitted!" % param_name + ) continue - if not swap_value.startswith(':'): + if not swap_value.startswith(":"): safe_eval = SafeEval(load_scipy=True, load_numpy=True) ev = safe_eval(swap_value) else: @@ -80,23 +85,24 @@ else: new_arrays.append(arr) - if kwargs['shuffle'] == 'None': - kwargs['shuffle'] = None + if kwargs["shuffle"] == "None": + kwargs["shuffle"] = None - group_names = kwargs.pop('group_names', None) + group_names = kwargs.pop("group_names", None) if group_names is not None and group_names.strip(): - group_names = [name.strip() for name in - group_names.split(',')] + group_names = [name.strip() for name in group_names.split(",")] new_arrays = indexable(*new_arrays) - groups = kwargs['labels'] + groups = kwargs["labels"] n_samples = new_arrays[0].shape[0] index_arr = np.arange(n_samples) test = index_arr[np.isin(groups, group_names)] train = index_arr[~np.isin(groups, group_names)] - rval = list(chain.from_iterable( - (safe_indexing(a, train), - safe_indexing(a, test)) for a in new_arrays)) + rval = list( + chain.from_iterable( + (safe_indexing(a, train), safe_indexing(a, test)) for a in new_arrays + ) + ) else: rval = train_test_split(*new_arrays, **kwargs) @@ -106,11 +112,20 @@ return rval -def main(inputs, infile_estimator, infile1, infile2, - outfile_result, outfile_object=None, - outfile_weights=None, groups=None, - ref_seq=None, intervals=None, targets=None, - fasta_path=None): +def main( + inputs, + infile_estimator, + infile1, + infile2, + outfile_result, + outfile_object=None, + outfile_weights=None, + groups=None, + ref_seq=None, + intervals=None, + targets=None, + fasta_path=None, +): """ Parameter --------- @@ -150,17 +165,17 @@ fasta_path : str File path to dataset containing fasta file """ - warnings.simplefilter('ignore') + warnings.simplefilter("ignore") - with open(inputs, 'r') as param_handler: + with open(inputs, "r") as param_handler: params = json.load(param_handler) # load estimator - with open(infile_estimator, 'rb') as estimator_handler: + with open(infile_estimator, "rb") as estimator_handler: estimator = load_model(estimator_handler) # swap hyperparameter - swapping = params['experiment_schemes']['hyperparams_swapping'] + swapping = params["experiment_schemes"]["hyperparams_swapping"] swap_params = _eval_swap_params(swapping) estimator.set_params(**swap_params) @@ -169,38 +184,41 @@ # store read dataframe object loaded_df = {} - input_type = params['input_options']['selected_input'] + input_type = params["input_options"]["selected_input"] # tabular input - if input_type == 'tabular': - header = 'infer' if params['input_options']['header1'] else None - column_option = (params['input_options']['column_selector_options_1'] - ['selected_column_selector_option']) - if column_option in ['by_index_number', 'all_but_by_index_number', - 'by_header_name', 'all_but_by_header_name']: - c = params['input_options']['column_selector_options_1']['col1'] + if input_type == "tabular": + header = "infer" if params["input_options"]["header1"] else None + column_option = params["input_options"]["column_selector_options_1"][ + "selected_column_selector_option" + ] + if column_option in [ + "by_index_number", + "all_but_by_index_number", + "by_header_name", + "all_but_by_header_name", + ]: + c = params["input_options"]["column_selector_options_1"]["col1"] else: c = None df_key = infile1 + repr(header) - df = pd.read_csv(infile1, sep='\t', header=header, - parse_dates=True) + df = pd.read_csv(infile1, sep="\t", header=header, parse_dates=True) loaded_df[df_key] = df X = read_columns(df, c=c, c_option=column_option).astype(float) # sparse input - elif input_type == 'sparse': - X = mmread(open(infile1, 'r')) + elif input_type == "sparse": + X = mmread(open(infile1, "r")) # fasta_file input - elif input_type == 'seq_fasta': - pyfaidx = get_module('pyfaidx') + elif input_type == "seq_fasta": + pyfaidx = get_module("pyfaidx") sequences = pyfaidx.Fasta(fasta_path) n_seqs = len(sequences.keys()) X = np.arange(n_seqs)[:, np.newaxis] for param in estimator_params.keys(): - if param.endswith('fasta_path'): - estimator.set_params( - **{param: fasta_path}) + if param.endswith("fasta_path"): + estimator.set_params(**{param: fasta_path}) break else: raise ValueError( @@ -209,25 +227,31 @@ "KerasGBatchClassifier with " "FastaDNABatchGenerator/FastaProteinBatchGenerator " "or having GenomeOneHotEncoder/ProteinOneHotEncoder " - "in pipeline!") + "in pipeline!" + ) - elif input_type == 'refseq_and_interval': + elif input_type == "refseq_and_interval": path_params = { - 'data_batch_generator__ref_genome_path': ref_seq, - 'data_batch_generator__intervals_path': intervals, - 'data_batch_generator__target_path': targets + "data_batch_generator__ref_genome_path": ref_seq, + "data_batch_generator__intervals_path": intervals, + "data_batch_generator__target_path": targets, } estimator.set_params(**path_params) n_intervals = sum(1 for line in open(intervals)) X = np.arange(n_intervals)[:, np.newaxis] # Get target y - header = 'infer' if params['input_options']['header2'] else None - column_option = (params['input_options']['column_selector_options_2'] - ['selected_column_selector_option2']) - if column_option in ['by_index_number', 'all_but_by_index_number', - 'by_header_name', 'all_but_by_header_name']: - c = params['input_options']['column_selector_options_2']['col2'] + header = "infer" if params["input_options"]["header2"] else None + column_option = params["input_options"]["column_selector_options_2"][ + "selected_column_selector_option2" + ] + if column_option in [ + "by_index_number", + "all_but_by_index_number", + "by_header_name", + "all_but_by_header_name", + ]: + c = params["input_options"]["column_selector_options_2"]["col2"] else: c = None @@ -235,37 +259,39 @@ if df_key in loaded_df: infile2 = loaded_df[df_key] else: - infile2 = pd.read_csv(infile2, sep='\t', - header=header, parse_dates=True) + infile2 = pd.read_csv(infile2, sep="\t", header=header, parse_dates=True) loaded_df[df_key] = infile2 - y = read_columns( - infile2, - c=c, - c_option=column_option, - sep='\t', - header=header, - parse_dates=True) + y = read_columns(infile2, + c=c, + c_option=column_option, + sep='\t', + header=header, + parse_dates=True) if len(y.shape) == 2 and y.shape[1] == 1: y = y.ravel() - if input_type == 'refseq_and_interval': - estimator.set_params( - data_batch_generator__features=y.ravel().tolist()) + if input_type == "refseq_and_interval": + estimator.set_params(data_batch_generator__features=y.ravel().tolist()) y = None # end y # load groups if groups: - groups_selector = (params['experiment_schemes']['test_split'] - ['split_algos']).pop('groups_selector') + groups_selector = ( + params["experiment_schemes"]["test_split"]["split_algos"] + ).pop("groups_selector") - header = 'infer' if groups_selector['header_g'] else None - column_option = \ - (groups_selector['column_selector_options_g'] - ['selected_column_selector_option_g']) - if column_option in ['by_index_number', 'all_but_by_index_number', - 'by_header_name', 'all_but_by_header_name']: - c = groups_selector['column_selector_options_g']['col_g'] + header = "infer" if groups_selector["header_g"] else None + column_option = groups_selector["column_selector_options_g"][ + "selected_column_selector_option_g" + ] + if column_option in [ + "by_index_number", + "all_but_by_index_number", + "by_header_name", + "all_but_by_header_name", + ]: + c = groups_selector["column_selector_options_g"]["col_g"] else: c = None @@ -273,13 +299,12 @@ if df_key in loaded_df: groups = loaded_df[df_key] - groups = read_columns( - groups, - c=c, - c_option=column_option, - sep='\t', - header=header, - parse_dates=True) + groups = read_columns(groups, + c=c, + c_option=column_option, + sep='\t', + header=header, + parse_dates=True) groups = groups.ravel() # del loaded_df @@ -288,15 +313,15 @@ # handle memory memory = joblib.Memory(location=CACHE_DIR, verbose=0) # cache iraps_core fits could increase search speed significantly - if estimator.__class__.__name__ == 'IRAPSClassifier': + if estimator.__class__.__name__ == "IRAPSClassifier": estimator.set_params(memory=memory) else: # For iraps buried in pipeline new_params = {} for p, v in estimator_params.items(): - if p.endswith('memory'): + if p.endswith("memory"): # for case of `__irapsclassifier__memory` - if len(p) > 8 and p[:-8].endswith('irapsclassifier'): + if len(p) > 8 and p[:-8].endswith("irapsclassifier"): # cache iraps_core fits could increase search # speed significantly new_params[p] = memory @@ -305,88 +330,98 @@ elif v: new_params[p] = None # handle n_jobs - elif p.endswith('n_jobs'): + elif p.endswith("n_jobs"): # For now, 1 CPU is suggested for iprasclassifier - if len(p) > 8 and p[:-8].endswith('irapsclassifier'): + if len(p) > 8 and p[:-8].endswith("irapsclassifier"): new_params[p] = 1 else: new_params[p] = N_JOBS # for security reason, types of callback are limited - elif p.endswith('callbacks'): + elif p.endswith("callbacks"): for cb in v: - cb_type = cb['callback_selection']['callback_type'] + cb_type = cb["callback_selection"]["callback_type"] if cb_type not in ALLOWED_CALLBACKS: - raise ValueError( - "Prohibited callback type: %s!" % cb_type) + raise ValueError("Prohibited callback type: %s!" % cb_type) estimator.set_params(**new_params) # handle scorer, convert to scorer dict - scoring = params['experiment_schemes']['metrics']['scoring'] + # Check if scoring is specified + scoring = params["experiment_schemes"]["metrics"].get("scoring", None) + if scoring is not None: + # get_scoring() expects secondary_scoring to be a comma separated string (not a list) + # Check if secondary_scoring is specified + secondary_scoring = scoring.get("secondary_scoring", None) + if secondary_scoring is not None: + # If secondary_scoring is specified, convert the list into comman separated string + scoring["secondary_scoring"] = ",".join(scoring["secondary_scoring"]) scorer = get_scoring(scoring) scorer, _ = _check_multimetric_scoring(estimator, scoring=scorer) # handle test (first) split - test_split_options = (params['experiment_schemes'] - ['test_split']['split_algos']) + test_split_options = params["experiment_schemes"]["test_split"]["split_algos"] - if test_split_options['shuffle'] == 'group': - test_split_options['labels'] = groups - if test_split_options['shuffle'] == 'stratified': + if test_split_options["shuffle"] == "group": + test_split_options["labels"] = groups + if test_split_options["shuffle"] == "stratified": if y is not None: - test_split_options['labels'] = y + test_split_options["labels"] = y else: - raise ValueError("Stratified shuffle split is not " - "applicable on empty target values!") + raise ValueError( + "Stratified shuffle split is not " "applicable on empty target values!" + ) - X_train, X_test, y_train, y_test, groups_train, groups_test = \ - train_test_split_none(X, y, groups, **test_split_options) + X_train, X_test, y_train, y_test, groups_train, _groups_test = train_test_split_none( + X, y, groups, **test_split_options + ) - exp_scheme = params['experiment_schemes']['selected_exp_scheme'] + exp_scheme = params["experiment_schemes"]["selected_exp_scheme"] # handle validation (second) split - if exp_scheme == 'train_val_test': - val_split_options = (params['experiment_schemes'] - ['val_split']['split_algos']) + if exp_scheme == "train_val_test": + val_split_options = params["experiment_schemes"]["val_split"]["split_algos"] - if val_split_options['shuffle'] == 'group': - val_split_options['labels'] = groups_train - if val_split_options['shuffle'] == 'stratified': + if val_split_options["shuffle"] == "group": + val_split_options["labels"] = groups_train + if val_split_options["shuffle"] == "stratified": if y_train is not None: - val_split_options['labels'] = y_train + val_split_options["labels"] = y_train else: - raise ValueError("Stratified shuffle split is not " - "applicable on empty target values!") + raise ValueError( + "Stratified shuffle split is not " + "applicable on empty target values!" + ) - X_train, X_val, y_train, y_val, groups_train, groups_val = \ - train_test_split_none(X_train, y_train, groups_train, - **val_split_options) + ( + X_train, + X_val, + y_train, + y_val, + groups_train, + _groups_val, + ) = train_test_split_none(X_train, y_train, groups_train, **val_split_options) # train and eval - if hasattr(estimator, 'validation_data'): - if exp_scheme == 'train_val_test': - estimator.fit(X_train, y_train, - validation_data=(X_val, y_val)) + if hasattr(estimator, "validation_data"): + if exp_scheme == "train_val_test": + estimator.fit(X_train, y_train, validation_data=(X_val, y_val)) else: - estimator.fit(X_train, y_train, - validation_data=(X_test, y_test)) + estimator.fit(X_train, y_train, validation_data=(X_test, y_test)) else: estimator.fit(X_train, y_train) - if hasattr(estimator, 'evaluate'): - scores = estimator.evaluate(X_test, y_test=y_test, - scorer=scorer, - is_multimetric=True) + if hasattr(estimator, "evaluate"): + scores = estimator.evaluate( + X_test, y_test=y_test, scorer=scorer, is_multimetric=True + ) else: - scores = _score(estimator, X_test, y_test, scorer, - is_multimetric=True) + scores = _score(estimator, X_test, y_test, scorer, is_multimetric=True) # handle output for name, score in scores.items(): scores[name] = [score] df = pd.DataFrame(scores) df = df[sorted(df.columns)] - df.to_csv(path_or_buf=outfile_result, sep='\t', - header=True, index=False) + df.to_csv(path_or_buf=outfile_result, sep="\t", header=True, index=False) memory.clear(warn=False) @@ -395,23 +430,25 @@ if isinstance(estimator, pipeline.Pipeline): main_est = estimator.steps[-1][-1] - if hasattr(main_est, 'model_') \ - and hasattr(main_est, 'save_weights'): + if hasattr(main_est, "model_") and hasattr(main_est, "save_weights"): if outfile_weights: main_est.save_weights(outfile_weights) - del main_est.model_ - del main_est.fit_params - del main_est.model_class_ - del main_est.validation_data - if getattr(main_est, 'data_generator_', None): + if getattr(main_est, "model_", None): + del main_est.model_ + if getattr(main_est, "fit_params", None): + del main_est.fit_params + if getattr(main_est, "model_class_", None): + del main_est.model_class_ + if getattr(main_est, "validation_data", None): + del main_est.validation_data + if getattr(main_est, "data_generator_", None): del main_est.data_generator_ - with open(outfile_object, 'wb') as output_handler: - pickle.dump(estimator, output_handler, - pickle.HIGHEST_PROTOCOL) + with open(outfile_object, "wb") as output_handler: + pickle.dump(estimator, output_handler, pickle.HIGHEST_PROTOCOL) -if __name__ == '__main__': +if __name__ == "__main__": aparser = argparse.ArgumentParser() aparser.add_argument("-i", "--inputs", dest="inputs", required=True) aparser.add_argument("-e", "--estimator", dest="infile_estimator") @@ -427,8 +464,17 @@ aparser.add_argument("-f", "--fasta_path", dest="fasta_path") args = aparser.parse_args() - main(args.inputs, args.infile_estimator, args.infile1, args.infile2, - args.outfile_result, outfile_object=args.outfile_object, - outfile_weights=args.outfile_weights, groups=args.groups, - ref_seq=args.ref_seq, intervals=args.intervals, - targets=args.targets, fasta_path=args.fasta_path) + main( + args.inputs, + args.infile_estimator, + args.infile1, + args.infile2, + args.outfile_result, + outfile_object=args.outfile_object, + outfile_weights=args.outfile_weights, + groups=args.groups, + ref_seq=args.ref_seq, + intervals=args.intervals, + targets=args.targets, + fasta_path=args.fasta_path, + ) diff -r 8b47a3c08d97 -r 2ac77e0aec82 train_test_split.py --- a/train_test_split.py Wed Mar 11 17:09:06 2020 +0000 +++ b/train_test_split.py Tue Apr 13 20:42:24 2021 +0000 @@ -1,15 +1,14 @@ import argparse import json -import pandas as pd import warnings +import pandas as pd from galaxy_ml.model_validations import train_test_split from galaxy_ml.utils import get_cv, read_columns -def _get_single_cv_split(params, array, infile_labels=None, - infile_groups=None): - """ output (train, test) subset from a cv splitter +def _get_single_cv_split(params, array, infile_labels=None, infile_groups=None): + """output (train, test) subset from a cv splitter Parameters ---------- @@ -25,45 +24,50 @@ y = None groups = None - nth_split = params['mode_selection']['nth_split'] + nth_split = params["mode_selection"]["nth_split"] # read groups if infile_groups: - header = 'infer' if (params['mode_selection']['cv_selector'] - ['groups_selector']['header_g']) else None - column_option = (params['mode_selection']['cv_selector'] - ['groups_selector']['column_selector_options_g'] - ['selected_column_selector_option_g']) - if column_option in ['by_index_number', 'all_but_by_index_number', - 'by_header_name', 'all_but_by_header_name']: - c = (params['mode_selection']['cv_selector']['groups_selector'] - ['column_selector_options_g']['col_g']) + header = "infer" if (params["mode_selection"]["cv_selector"]["groups_selector"]["header_g"]) else None + column_option = params["mode_selection"]["cv_selector"]["groups_selector"]["column_selector_options_g"][ + "selected_column_selector_option_g" + ] + if column_option in [ + "by_index_number", + "all_but_by_index_number", + "by_header_name", + "all_but_by_header_name", + ]: + c = params["mode_selection"]["cv_selector"]["groups_selector"]["column_selector_options_g"]["col_g"] else: c = None - groups = read_columns(infile_groups, c=c, c_option=column_option, - sep='\t', header=header, parse_dates=True) + groups = read_columns( + infile_groups, + c=c, + c_option=column_option, + sep="\t", + header=header, + parse_dates=True, + ) groups = groups.ravel() - params['mode_selection']['cv_selector']['groups_selector'] = groups + params["mode_selection"]["cv_selector"]["groups_selector"] = groups # read labels if infile_labels: - target_input = (params['mode_selection'] - ['cv_selector'].pop('target_input')) - header = 'infer' if target_input['header1'] else None - col_index = target_input['col'][0] - 1 - df = pd.read_csv(infile_labels, sep='\t', header=header, - parse_dates=True) + target_input = params["mode_selection"]["cv_selector"].pop("target_input") + header = "infer" if target_input["header1"] else None + col_index = target_input["col"][0] - 1 + df = pd.read_csv(infile_labels, sep="\t", header=header, parse_dates=True) y = df.iloc[:, col_index].values # construct the cv splitter object - splitter, groups = get_cv(params['mode_selection']['cv_selector']) + splitter, groups = get_cv(params["mode_selection"]["cv_selector"]) total_n_splits = splitter.get_n_splits(array.values, y=y, groups=groups) if nth_split > total_n_splits: - raise ValueError("Total number of splits is {}, but got `nth_split` " - "= {}".format(total_n_splits, nth_split)) + raise ValueError("Total number of splits is {}, but got `nth_split` " "= {}".format(total_n_splits, nth_split)) i = 1 for train_index, test_index in splitter.split(array.values, y=y, groups=groups): @@ -79,8 +83,14 @@ return train, test -def main(inputs, infile_array, outfile_train, outfile_test, - infile_labels=None, infile_groups=None): +def main( + inputs, + infile_array, + outfile_train, + outfile_test, + infile_labels=None, + infile_groups=None, +): """ Parameter --------- @@ -102,45 +112,41 @@ outfile_test : str File path to dataset containing test split """ - warnings.simplefilter('ignore') + warnings.simplefilter("ignore") - with open(inputs, 'r') as param_handler: + with open(inputs, "r") as param_handler: params = json.load(param_handler) - input_header = params['header0'] - header = 'infer' if input_header else None - array = pd.read_csv(infile_array, sep='\t', header=header, - parse_dates=True) + input_header = params["header0"] + header = "infer" if input_header else None + array = pd.read_csv(infile_array, sep="\t", header=header, parse_dates=True) # train test split - if params['mode_selection']['selected_mode'] == 'train_test_split': - options = params['mode_selection']['options'] - shuffle_selection = options.pop('shuffle_selection') - options['shuffle'] = shuffle_selection['shuffle'] + if params["mode_selection"]["selected_mode"] == "train_test_split": + options = params["mode_selection"]["options"] + shuffle_selection = options.pop("shuffle_selection") + options["shuffle"] = shuffle_selection["shuffle"] if infile_labels: - header = 'infer' if shuffle_selection['header1'] else None - col_index = shuffle_selection['col'][0] - 1 - df = pd.read_csv(infile_labels, sep='\t', header=header, - parse_dates=True) + header = "infer" if shuffle_selection["header1"] else None + col_index = shuffle_selection["col"][0] - 1 + df = pd.read_csv(infile_labels, sep="\t", header=header, parse_dates=True) labels = df.iloc[:, col_index].values - options['labels'] = labels + options["labels"] = labels train, test = train_test_split(array, **options) # cv splitter else: - train, test = _get_single_cv_split(params, array, - infile_labels=infile_labels, - infile_groups=infile_groups) + train, test = _get_single_cv_split(params, array, infile_labels=infile_labels, infile_groups=infile_groups) print("Input shape: %s" % repr(array.shape)) print("Train shape: %s" % repr(train.shape)) print("Test shape: %s" % repr(test.shape)) - train.to_csv(outfile_train, sep='\t', header=input_header, index=False) - test.to_csv(outfile_test, sep='\t', header=input_header, index=False) + train.to_csv(outfile_train, sep="\t", header=input_header, index=False) + test.to_csv(outfile_test, sep="\t", header=input_header, index=False) -if __name__ == '__main__': +if __name__ == "__main__": aparser = argparse.ArgumentParser() aparser.add_argument("-i", "--inputs", dest="inputs", required=True) aparser.add_argument("-X", "--infile_array", dest="infile_array") @@ -150,5 +156,11 @@ aparser.add_argument("-t", "--outfile_test", dest="outfile_test") args = aparser.parse_args() - main(args.inputs, args.infile_array, args.outfile_train, - args.outfile_test, args.infile_labels, args.infile_groups) + main( + args.inputs, + args.infile_array, + args.outfile_train, + args.outfile_test, + args.infile_labels, + args.infile_groups, + )