├── .gitignore ├── LICENSE ├── README.md ├── dist ├── dynamicviz-0.0.1-py3-none-any.whl ├── dynamicviz-0.0.1.tar.gz ├── dynamicviz-0.0.2-py3-none-any.whl ├── dynamicviz-0.0.2.tar.gz ├── dynamicviz-0.0.3-py3-none-any.whl ├── dynamicviz-0.0.3.tar.gz ├── dynamicviz-1.0.0-py3-none-any.whl └── dynamicviz-1.0.0.tar.gz ├── dynamicviz ├── __init__.py ├── boot.py ├── score.py ├── utils.py └── viz.py ├── pipeline.png ├── pyproject.toml ├── requirements.txt ├── test.py ├── tests └── data │ ├── Mammoth_X.txt │ └── Mammoth_y.txt └── tutorial.ipynb /.gitignore: -------------------------------------------------------------------------------- 1 | tests/outputs/* 2 | .ipynb_checkpoints/ 3 | dynamicviz/__pycache__/ -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2022 Eric David Sun 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Dynamic visualization 2 | 3 | Sun, E.D., Ma, R. & Zou, J. Dynamic visualization of high-dimensional data. Nat Comput Sci 3, 86–100 (2023). https://doi.org/10.1038/s43588-022-00380-4 4 | 5 | ### Eric Sun 6 | 7 | Python package for generating bootstrap visualizations of high-dimensional data. Great for assessing stability of visualizations and increasing robustness of interpretations. Also included are methods for computing variance scores along with classical concordance scores for quantifying the quality of a visualization. 8 | 9 | For a Quick Start guide, please refer to ``` tutorial.ipynb ```. 10 | 11 | ![plot](./pipeline.png) 12 | 13 | ## Installation and setup 14 | 15 | ### Option 1: PyPI 16 | 17 | Install the package through PyPI with ```pip```. We recommend setting up a conda environment (or another virtual environment) first since ```dynamicviz``` currently relies on specific versions for its dependencies: 18 | 19 | ``` 20 | conda create -n myenv python=3.8 21 | conda activate myenv 22 | 23 | pip install dynamicviz 24 | ``` 25 | 26 | 27 | 28 | ### Option 2: Github 29 | 30 | Another way to install the package along with associated test and tutorial files is to clone the directory and then install the requirements for using the package. To do this, first clone the repository using git (you can install git following the instructions [here](https://github.com/git-guides/install-git)): 31 | 32 | ``` 33 | git clone https://github.com/sunericd/dynamicviz.git 34 | ``` 35 | 36 | We recommend setting up a conda environment to install the requirements for the package (instructions for installing conda and what conda environment can do can be found [here](https://docs.conda.io/projects/conda/en/latest/user-guide/install/index.html)). Installation of requirements can then be done with the following commands: 37 | 38 | ``` 39 | conda create -n dynamicviz python=3.8 40 | conda activate dynamicviz 41 | 42 | cd dynamicviz 43 | pip install -r requirements.txt 44 | ``` 45 | 46 | To test that the installation is working correctly, you can use the Jupyter notebook ```tutorial.ipynb``` (requires installing Jupyter, instructions found [here](https://jupyter.org/install), and adding the conda environment we just created to the Jupyter notebook kernels, instructions found [here](https://medium.com/@nrk25693/how-to-add-your-conda-environment-to-your-jupyter-notebook-in-just-4-steps-abeab8b8d084)) or the test script ```test.py``` to check against expected outputs of the key methods. 47 | 48 | For the test data in the tutorial notebook, expected run times are under 5 minutes for interactive visualization and under 10 minutes for global variance score calculation. 49 | 50 | For Jupyter notebooks and Python scripts associated with our original publication, please refer to https://github.com/sunericd/dynamic-visualization-of-high-dimensional-data 51 | 52 | If you find this code useful, please cite the following paper: 53 | 54 | Sun, E.D., Ma, R. & Zou, J. Dynamic visualization of high-dimensional data. Nat Comput Sci 3, 86–100 (2023). https://doi.org/10.1038/s43588-022-00380-4 55 | -------------------------------------------------------------------------------- /dist/dynamicviz-0.0.1-py3-none-any.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunericd/dynamicviz/c0104621c710661aac04b1c9832b5105acf6231f/dist/dynamicviz-0.0.1-py3-none-any.whl -------------------------------------------------------------------------------- /dist/dynamicviz-0.0.1.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunericd/dynamicviz/c0104621c710661aac04b1c9832b5105acf6231f/dist/dynamicviz-0.0.1.tar.gz -------------------------------------------------------------------------------- /dist/dynamicviz-0.0.2-py3-none-any.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunericd/dynamicviz/c0104621c710661aac04b1c9832b5105acf6231f/dist/dynamicviz-0.0.2-py3-none-any.whl -------------------------------------------------------------------------------- /dist/dynamicviz-0.0.2.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunericd/dynamicviz/c0104621c710661aac04b1c9832b5105acf6231f/dist/dynamicviz-0.0.2.tar.gz -------------------------------------------------------------------------------- /dist/dynamicviz-0.0.3-py3-none-any.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunericd/dynamicviz/c0104621c710661aac04b1c9832b5105acf6231f/dist/dynamicviz-0.0.3-py3-none-any.whl -------------------------------------------------------------------------------- /dist/dynamicviz-0.0.3.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunericd/dynamicviz/c0104621c710661aac04b1c9832b5105acf6231f/dist/dynamicviz-0.0.3.tar.gz -------------------------------------------------------------------------------- /dist/dynamicviz-1.0.0-py3-none-any.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunericd/dynamicviz/c0104621c710661aac04b1c9832b5105acf6231f/dist/dynamicviz-1.0.0-py3-none-any.whl -------------------------------------------------------------------------------- /dist/dynamicviz-1.0.0.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunericd/dynamicviz/c0104621c710661aac04b1c9832b5105acf6231f/dist/dynamicviz-1.0.0.tar.gz -------------------------------------------------------------------------------- /dynamicviz/__init__.py: -------------------------------------------------------------------------------- 1 | '''DynamicViz provides a wrapper for generating and interpreting dynamic visualizations from traditional static dimensionality reduction visualization methods''' 2 | 3 | __version__ = "1.0.1" -------------------------------------------------------------------------------- /dynamicviz/boot.py: -------------------------------------------------------------------------------- 1 | """ 2 | Bootstrap visualization module 3 | - Tools for generating bootstrap dimensionality reduction (DR) visualizations 4 | - Standalone methods for DR visualizations 5 | """ 6 | 7 | # author: Eric David Sun 8 | # (C) 2022 9 | from __future__ import print_function 10 | 11 | import sklearn.manifold as skm 12 | from sklearn.decomposition import PCA, TruncatedSVD 13 | import numpy as np 14 | import pandas as pd 15 | import os 16 | import umap 17 | from scipy.spatial.transform import Rotation 18 | from tqdm import tqdm 19 | from joblib import Parallel, delayed 20 | import warnings 21 | warnings.filterwarnings("ignore") 22 | import time 23 | 24 | 25 | def dimensionality_reduction(X, method, **kwargs): 26 | ''' 27 | Runs a given DR method (specified by method) for the data X (n by p matrix/array) 28 | 29 | Uses default arguments unless additional argument values specified in **kwargs 30 | ''' 31 | # initialize 2D DR method 32 | if isinstance(method, str): 33 | if method == "tsne": 34 | X_embedded = skm.TSNE(n_components=2, verbose=0, **kwargs).fit_transform(X) 35 | elif method == "mds": 36 | X_embedded = skm.MDS(n_components=2, verbose=0, **kwargs).fit_transform(X) 37 | elif method == "lle": 38 | X_embedded = skm.LocallyLinearEmbedding(n_components=2, **kwargs).fit_transform(X) 39 | elif method == "mlle": 40 | X_embedded = skm.LocallyLinearEmbedding(n_components=2, method='modified', **kwargs).fit_transform(X) 41 | elif method == "isomap": 42 | X_embedded = skm.Isomap(n_components=2, **kwargs).fit_transform(X) 43 | elif method == "umap": 44 | X_embedded = umap.UMAP(n_components=2, verbose=0, **kwargs).fit_transform(X) 45 | elif method == "pca": 46 | X_embedded = PCA(n_components=2, **kwargs).fit_transform(X) 47 | else: 48 | raise Exception(method+" is not a recognized dimensionality reduction algorithm") 49 | 50 | # apply DR and obtain 2D embedding 51 | else: 52 | X_embedded = method.fit_transform(X) 53 | 54 | return(X_embedded) 55 | 56 | 57 | def bootstrap (X, method, B, sigma_noise=None, no_bootstrap=False, random_seed=None, num_jobs=None, use_n_pcs=False, subsample=False, **kwargs): 58 | ''' 59 | Creates n bootstrap data from X and creates a DR visualizastion for each of them. 60 | 61 | Arguments: 62 | See generate() for details 63 | 64 | Returns: 65 | X_embedded_list = list of the 2D DR visualization embeddings (numpy arrays) 66 | bootstrap_indices_list = list of numpy arrays indicating the bootstrap row indices 67 | ''' 68 | 69 | X_embedded_list = [] 70 | bootstrap_indices_list = [] 71 | 72 | # generate sequence of random states if random_seed is specified 73 | if isinstance(random_seed, int): 74 | seeded_rand1 = np.random.RandomState(random_seed) 75 | random_seeded_sequence = seeded_rand1.randint(0,1e6,B) 76 | else: 77 | random_seeded_sequence = False 78 | 79 | # bootstrap DR 80 | if isinstance(num_jobs, int): # in parallel 81 | result = Parallel(n_jobs=num_jobs)(delayed(run_one_bootstrap)(X, method, sigma_noise, no_bootstrap, 82 | random_seeded_sequence, b, use_n_pcs, subsample, **kwargs) for b in tqdm(range(B))) 83 | X_embedded_list = [x[0] for x in result] 84 | bootstrap_indices_list = [x[1] for x in result] 85 | else: # using only one core 86 | for b in tqdm(range(B)): 87 | X_embedded, boot_idxs = run_one_bootstrap(X, method, sigma_noise, no_bootstrap, 88 | random_seeded_sequence, b, use_n_pcs, subsample, **kwargs) 89 | X_embedded_list.append(X_embedded) 90 | bootstrap_indices_list.append(boot_idxs) 91 | 92 | return(X_embedded_list, bootstrap_indices_list) 93 | 94 | 95 | def run_one_bootstrap(X, method, sigma_noise=None, no_bootstrap=False, random_seeded_sequence=False, b=0, use_n_pcs=False, subsample=False, **kwargs): 96 | ''' 97 | Method for generating one bootstrap X and one DR visualization of the bootstrap 98 | 99 | Arguments: 100 | random_seeded_sequence = array or list of random seeds to use in generating the bootstrap sample 101 | b = integer specifying the index of random see in random_seeded_sequence to use for generating the bootstrap 102 | See generate() for more details 103 | 104 | Returns: 105 | X_embedded = 2D DR visualization embedding (numpy array) 106 | boot_idxs = numpy array indicating the bootstrap row indices 107 | ''' 108 | # Create bootstrap X 109 | if subsample is False: 110 | if no_bootstrap is True: # don't bootstrap (will use intrinsic stochasticity of DR algorithm (if any) only) 111 | boot_X = X.copy() 112 | boot_idxs = np.arange(X.shape[0]) # set indices to be the original indices 113 | elif random_seeded_sequence is not False: # use specified random_seeded_sequence to generate bootstrap X 114 | seeded_rand2 = np.random.RandomState(random_seeded_sequence[b]) 115 | boot_idxs = seeded_rand2.randint(0,X.shape[0],X.shape[0]) 116 | boot_X = X.copy()[boot_idxs,:] 117 | else: # if no random_seeded_sequence, use default random process 118 | boot_idxs = np.random.randint(0,X.shape[0],X.shape[0]) 119 | boot_X = X.copy()[boot_idxs,:] 120 | # Subsample instead of bootstrapping 121 | else: 122 | if random_seeded_sequence is not False: # use specified random_seeded_sequence to generate subsample of X 123 | seeded_rand2 = np.random.RandomState(random_seeded_sequence[b]) 124 | boot_idxs = seeded_rand2.choice(X.shape[0], subsample, replace=False) 125 | boot_X = X.copy()[boot_idxs,:] 126 | else: # if no random_seeded_sequence, use default random process 127 | boot_idxs = np.random.choice(X.shape[0], subsample, replace=False) 128 | boot_X = X.copy()[boot_idxs,:] 129 | 130 | # add Gaussian noise to alleviate duplicate issues if specified 131 | if sigma_noise is not None: 132 | boot_X += np.random.normal(0,sigma_noise,boot_X.shape) 133 | 134 | # run TruncatedSVD if specified to do a first pass DR with PCA and take use_n_pcs top principal components for DR visualization 135 | if use_n_pcs is not False: 136 | boot_X = TruncatedSVD(n_components=use_n_pcs).fit_transform(boot_X) 137 | 138 | # generate DR visualization embedding 139 | X_embedded = dimensionality_reduction(boot_X, method, **kwargs) 140 | 141 | 142 | return(X_embedded, boot_idxs) 143 | 144 | 145 | def generate(X, method, Y=None, B=0, sigma_noise=None, no_bootstrap=False, random_seed=None, save=False, 146 | num_jobs=None, use_n_pcs=False, subsample=False, return_times=False, **kwargs): 147 | ''' 148 | Main method for generating aligned bootstrap visualizations, which are the input elements for dynamic visualization. 149 | 150 | Arguments: 151 | X = (n x p) numpy array where rows are observations, columns are features 152 | method = string, dimensionality reduction method to use; options include: 153 | "tsne", "mds", "lle", "mlle", "isomap", "umap", "pca" 154 | Y = pandas dataframe with same number of rows as X and columns containing relevant metadata to propagate to output 155 | B = integer, number of bootstraps to generate; if B==0: generates only for the original X 156 | sigma_noise = None or float, if float, adds zero-centered Gaussian noise to each bootstrap sample with standard deviation sigma_noise 157 | no_bootstrap = True or False, whether to bootstrap sample for each iteration or not 158 | random_seed = None or int, if int, uses that value to generate random sequence (i.e. bootstrap sequence will be the same) 159 | save = False or str, if str, path to save resulting Pandas dataframe as CSV 160 | num_jobs = None, -1, or >=1 int; if not None, runs multiprocessing with n_jobs, if n_jobs=-1, then uses all available 161 | use_n_pcs = False or int, specifying to apply PCA and keep to use_n_pcs components to use for method 162 | subsample = False or int, specifying whether to subsample INSTEAD OF bootstrapping with integer corresponding to size of subsample to take 163 | return_times = True or False; if not False, returns a dictionary of run times broken down by components as the second output 164 | 165 | Returns: 166 | output = Pandas dataframe with "x1", "x2", "bootstrap_number", "original_index" as columns, along with columns of Y 167 | 2D embedding is (x1, x2) 168 | ''' 169 | # process results into dataframe 170 | output = pd.DataFrame() # init df to be merged onto 171 | 172 | # DR on original dataset 173 | original_embedding = dimensionality_reduction(X, method, **kwargs) # Ex: can specify random_state in **kwargs to remove stochasticity 174 | 175 | # reference points is the original dataset 176 | points0 = np.hstack((original_embedding, np.zeros(original_embedding.shape[0]).reshape(original_embedding.shape[0],1)))# append uniform 3rd dimension 177 | 178 | # add basic info 179 | output["x1"] = points0[:,0]-np.mean(points0[:,0]) # center reference visualization at (0,0) 180 | output["x2"] = points0[:,1]-np.mean(points0[:,1]) 181 | output["original_index"] = np.arange(len(points0[:,0])) 182 | output["bootstrap_number"] = -1 183 | 184 | # add metadata 185 | if isinstance(Y, pd.DataFrame): 186 | for col in Y.columns: 187 | output[col] = Y[col].values 188 | 189 | # keep track of run times 190 | rt_dict = {} 191 | 192 | # bootstrap 193 | start_time = time.time() 194 | if B > 0: 195 | bootstrap_embedding_list, bootstrap_indices_list = bootstrap(X, method, B, sigma_noise, no_bootstrap, 196 | random_seed, num_jobs, use_n_pcs, subsample, **kwargs) 197 | bootstrap_time = time.time() - start_time 198 | rt_dict["bootstrapped_DR"] = bootstrap_time 199 | 200 | # add bootstraps 201 | start_time = time.time() 202 | for i in range(len(bootstrap_embedding_list)): 203 | 204 | new_df = pd.DataFrame() # new df to merge onto original df 205 | 206 | points = bootstrap_embedding_list[i] 207 | points = np.hstack((points, np.zeros(points.shape[0]).reshape(points.shape[0],1)))# append uniform 3rd dimension 208 | boot_idxs = bootstrap_indices_list[i] 209 | 210 | # rigid alignment w/ 3d rotation (Kabsch) 211 | ref_points = points0[boot_idxs,:] 212 | points[:,0] = points[:,0]-np.mean(points[:,0]) 213 | points[:,1] = points[:,1]-np.mean(points[:,1]) 214 | r = Rotation.align_vectors(ref_points, points)[0] 215 | rpoints = r.apply(points) 216 | 217 | # add basic info 218 | new_df["x1"] = rpoints[:,0] 219 | new_df["x2"] = rpoints[:,1] 220 | new_df["original_index"] = boot_idxs 221 | new_df["bootstrap_number"] = i 222 | 223 | # add metadata 224 | if isinstance(Y, pd.DataFrame): 225 | for col in Y.columns: 226 | new_df[col] = Y[col].values[boot_idxs] 227 | 228 | # merge to original dataframe 229 | output = pd.concat([output, new_df], axis=0) 230 | 231 | align_time = time.time() - start_time 232 | rt_dict["alignment_DR"] = align_time 233 | 234 | # save output 235 | if save is not False: 236 | output.to_csv(save, index=False) 237 | 238 | if return_times is False: 239 | return(output) 240 | else: 241 | return(output, rt_dict) 242 | 243 | 244 | -------------------------------------------------------------------------------- /dynamicviz/score.py: -------------------------------------------------------------------------------- 1 | """ 2 | Score module 3 | - Tools for computing variance score and stability score 4 | - Tools for computing concordance score and ensemble concordance score 5 | """ 6 | 7 | # author: Eric David Sun 8 | # (C) 2022 9 | from __future__ import print_function, division 10 | 11 | from sklearn.decomposition import TruncatedSVD 12 | from sklearn.metrics import pairwise_distances 13 | from sklearn.neighbors import NearestNeighbors 14 | from scipy.linalg import eigh 15 | from scipy.stats import pearsonr, spearmanr 16 | import numpy as np 17 | import os 18 | #from numba import njit, jit, prange 19 | from tqdm import tqdm 20 | from joblib import Parallel, delayed 21 | import warnings 22 | warnings.filterwarnings("ignore") 23 | import time 24 | 25 | 26 | 27 | # Variance Score 28 | def variance (df, method="global", k=20, X_orig=None, neighborhoods=None, normalize_pairwise_distance=False, 29 | include_original=True, return_times=False): 30 | ''' 31 | Computes variances scores from the output dataframe (out) of boot.generate() 32 | 33 | Arguments: 34 | df = pandas dataframe, output of boot.generate() 35 | method = str, specifies the type of stability score to compute 36 | "global" - compute stability score across the entire dataset 37 | "random" - approximate global stability score by randomly selecting k "neighbors" for each observation 38 | "local" - compute stability over k-nearest neighbors (specify k, defaults to 20) 39 | k = int, when method is "local" or "random"; specifies the number of neighbors 40 | neighborhoods = array or list of size n, with elements labeling neighborhoods 41 | normalize_pairwise_distance = if True, then divide each set of d[i,j] by its mean before computing variance 42 | include_original = if True, include the original (bootstrap_number=-1) embedding in calculating scores 43 | return_times = True or False; if not False, returns a dictionary of run times broken down by components as the second output 44 | 45 | Returns: 46 | mean_variance_distances = numpy array with variance scores (mean variance in pairwise distance to neighborhood) for each observation 47 | ''' 48 | # keep track of run times 49 | rt_dict = {} 50 | 51 | # retrieve embeddings and bootstrap indices 52 | if include_original is True: 53 | embeddings = [np.array(df[df["bootstrap_number"]==b][["x1","x2"]].values) for b in np.unique(df["bootstrap_number"])] 54 | bootstrap_indices = [np.array(df[df["bootstrap_number"]==b]["original_index"].values) for b in np.unique(df["bootstrap_number"])] 55 | else: 56 | embeddings = [np.array(df[df["bootstrap_number"]==b][["x1","x2"]].values) for b in np.unique(df["bootstrap_number"]) if b!=-1] 57 | bootstrap_indices = [np.array(df[df["bootstrap_number"]==b]["original_index"].values) for b in np.unique(df["bootstrap_number"]) if b!=-1] 58 | 59 | # set up neighborhoods for variance score 60 | print("Setting up neighborhoods...") 61 | start_time = time.time() 62 | neighborhood_dict = get_neighborhood_dict(method, k, keys=np.unique(df["original_index"]), neighborhoods=neighborhoods, X_orig=X_orig) 63 | neighborhood_time = time.time() - start_time 64 | rt_dict["neighborhood"] = neighborhood_time 65 | print("--- %s seconds ---" % neighborhood_time) 66 | 67 | # populate distance dict 68 | print("Populating distances...") 69 | start_time = time.time() 70 | dist_dict = populate_distance_dict(neighborhood_dict, embeddings, bootstrap_indices) 71 | dist_time = time.time() - start_time 72 | rt_dict["distances"] = dist_time 73 | print("--- %s seconds ---" % dist_time) 74 | 75 | # compute mean pairwise distance for normalization 76 | print("Computing mean pairwise distance for normalization...") 77 | start_time = time.time() 78 | mean_pairwise_distance = compute_mean_distance(dist_dict, normalize_pairwise_distance) 79 | norm_time = time.time() - start_time 80 | rt_dict["normalization"] = norm_time 81 | print("--- %s seconds ---" % norm_time) 82 | 83 | # compute variances 84 | print("Computing variance scores...") 85 | start_time = time.time() 86 | mean_variance_distances = compute_mean_variance_distance(dist_dict, normalize_pairwise_distance, mean_pairwise_distance) 87 | var_time = time.time() - start_time 88 | rt_dict["variance"] = var_time 89 | print("--- %s seconds ---" % var_time) 90 | 91 | if return_times is False: 92 | return(mean_variance_distances) 93 | else: 94 | return(mean_variance_distances, rt_dict) 95 | 96 | 97 | def stability_from_variance(mean_variance_distances, alpha): 98 | ''' 99 | For alpha and mean_variance_distances, computes stability scores 100 | 101 | Arguments: 102 | mean_variance_distances = list or array of variance scores (output of variance()) 103 | alpha = float > 0, is the exponential paramter for stability score formula: stability = 1/(1+variance)^alpha 104 | defaults to alpha=1.0 105 | 106 | Returns: 107 | stability_scores = numpy array with stability score for each observation 108 | ''' 109 | # compute stability score 110 | print("Computing stability score with alpha="+str(alpha)+" ...") 111 | start_time = time.time() 112 | stability_scores = 1 / (1 + mean_variance_distances)**alpha 113 | print("--- %s seconds ---" % (time.time() - start_time)) 114 | 115 | return(stability_scores) 116 | 117 | 118 | # Stability score 119 | def stability (df, method="global", alpha=1.0, k=20, X_orig=None, neighborhoods=None, normalize_pairwise_distance=False, 120 | include_original=True, return_times=False): 121 | ''' 122 | Computes stability scores from the output dataframe (out) of boot.generate() 123 | 124 | Arguments: 125 | alpha = float > 0, is the exponential paramter for stability score formula: stability = 1/(1+variance)^alpha 126 | defaults to alpha=1.0 127 | See variance() for more details 128 | 129 | Returns: 130 | stability_scores = numpy array with stability score for each observation 131 | ''' 132 | # check alpha > 0 133 | if alpha <= 0: 134 | raise Exception("alpha must be >= 0") 135 | 136 | if return_times is False: 137 | mean_variance_distances = variance(df, method=method, k=k, X_orig=X_orig, neighborhoods=neighborhoods, 138 | normalize_pairwise_distance=normalize_pairwise_distance, 139 | include_original=include_original, return_times=return_times) 140 | else: 141 | mean_variance_distances, rt_dict = variance(df, method=method, k=k, X_orig=X_orig, neighborhoods=neighborhoods, 142 | normalize_pairwise_distance=normalize_pairwise_distance, 143 | include_original=include_original, return_times=return_times) 144 | 145 | # compute stability score 146 | stability_scores = stability_from_variance(mean_variance_distances, alpha) 147 | 148 | if return_times is False: 149 | return(stability_scores) 150 | else: 151 | return(stability_scores, rt_dict) 152 | 153 | 154 | 155 | 156 | #@njit(parallel=True) 157 | def get_neighborhood_dict(method, k, keys, neighborhoods=None, X_orig=None): 158 | ''' 159 | Returns a neighborhood dictionary where keys are observation indices 160 | 161 | Arguments: 162 | method = string specifier for the method for constructing neighborhoods ("global", "random", "local") 163 | to specify a predefined/custom neighborhood, use the neighborhoods argument 164 | k = integer specfiying size of neighborhood for "local" and "random" methods 165 | keys = list/array of the key names (integers) to use in constructing the dictionary 166 | neighborhoods = predefined neighborhoods [list of strings where same strings indicate observations in the same neighborhood] 167 | X_orig = original X used to computing the bootstraps; used to determine local kNN relations 168 | 169 | Returns: 170 | neighborhood_dict = dictionary with keys corresponding to observation indices and lists of their neighborhoods as values 171 | ''' 172 | neighborhood_dict = dict() 173 | for key in keys: 174 | neighborhood_dict[str(key)] = [] 175 | 176 | if neighborhoods is None: 177 | 178 | if method == "global": 179 | for n in range(len(neighborhood_dict.keys())): 180 | key = list(neighborhood_dict.keys())[n] 181 | neighborhood_dict[key] = [i for i in range(len(neighborhood_dict.keys()))] 182 | 183 | elif method == "random": 184 | for n in range(len(neighborhood_dict.keys())): 185 | key = list(neighborhood_dict.keys())[n] 186 | neighborhood_dict[key] = [i for i in np.random.randint(0,len(neighborhood_dict.keys()),k)] 187 | 188 | elif method == "local": 189 | if X_orig is None: 190 | raise Exception("Need to specify X_orig to compute nearest neighbors") 191 | for n in range(len(neighborhood_dict.keys())): 192 | key = list(neighborhood_dict.keys())[n] 193 | nbrs = NearestNeighbors(n_neighbors=k+1).fit(X_orig) # compute w.r.t. reference 194 | distances_local, indices_local = nbrs.kneighbors(X_orig) 195 | neighborhood_dict[key] = [i for i in indices_local[int(key),1:k+1]] 196 | 197 | else: 198 | raise Exception ("Need to specify either method ('global', 'local') or neighborhood") 199 | 200 | else: 201 | for n in range(len(neighborhood_dict.keys())): 202 | key = list(neighborhood_dict.keys())[n] 203 | label = neighborhoods[int(key)] 204 | neighborhood_dict[key] = [i for i in range(len(neighborhoods)) if neighborhoods[i]==label] 205 | 206 | 207 | return(neighborhood_dict) 208 | 209 | #@njit(parallel=True) 210 | def populate_distance_dict (neighborhood_dict, embeddings, bootstrap_indices): 211 | ''' 212 | Returns dictionary with pairwise dictionaries for all observations[i][j] 213 | 214 | Arguments: 215 | neighborhood_dict = dictionary with keys corresponding to observation indices and lists of their neighborhoods as values 216 | this is the output of get_neighborhood_dict() 217 | embeddings = list of nx2 DR visualization arrays [see outputs of boot.generate()] 218 | bootstrap_indices = list of arrays, where each array is the bootstrap indices of that visualization [see outputs of boot.generate()] 219 | 220 | Returns: 221 | dist_dict = two-level dictionary with first level corresponding to observation i and second level corresponding to observation j 222 | the value corresponds to a list of Euclidean distances between observation i and j across all co-occurrences in the bootstrap visualizations 223 | ''' 224 | dist_dict = dict() 225 | for key1 in neighborhood_dict.keys(): 226 | dist_dict[str(key1)] = {} 227 | for key2 in neighborhood_dict[key1]: 228 | dist_dict[str(key1)][str(key2)] = [] 229 | 230 | for b in range(len(embeddings)): 231 | dist_mat = pairwise_distances(embeddings[b], n_jobs=-1) 232 | boot_idxs = bootstrap_indices[b] 233 | 234 | for i in range(dist_mat.shape[0]): 235 | key1 = str(boot_idxs[i]) 236 | neighbor_js = neighborhood_dict[key1] 237 | 238 | for nj in neighbor_js: 239 | key2 = str(nj) 240 | js = [x[0] for x in np.argwhere(boot_idxs == nj)] 241 | for j in js: 242 | dist_dict[key1][key2].append(dist_mat[i,j]) 243 | 244 | return(dist_dict) 245 | 246 | #@njit(parallel=True) 247 | def compute_mean_distance(dist_dict, normalize_pairwise_distance=False): 248 | ''' 249 | Computes mean pairwise distance across all (i,j) 250 | 251 | Arguments: 252 | dist_dict = output of populate_distance_dict() 253 | normalize_pairwise_distance = boolean; whether to normalize the distances between i and j by their mean 254 | 255 | Returns: 256 | mean_pairwise_distance = the mean of all distances between any i and any j; used to normalize/scale the variance score 257 | ''' 258 | all_distances = [] 259 | 260 | for n in range(len(dist_dict.keys())): 261 | key1 = list(dist_dict.keys())[n] 262 | 263 | for key2 in dist_dict[key1].keys(): 264 | distances = np.array(dist_dict[key1][key2]) 265 | 266 | if normalize_pairwise_distance is True: # perform additional local normalization before taking variance 267 | distances = distances/(np.nanmean(distances)) # recall: V(CX) = C^2 V(X) 268 | all_distances.append(np.nanmean(distances)) 269 | 270 | mean_pairwise_distance = np.nanmean(all_distances) 271 | 272 | return(mean_pairwise_distance) 273 | 274 | #@njit(parallel=True) 275 | def compute_mean_variance_distance(dist_dict, normalize_pairwise_distance=False, mean_pairwise_distance=1.0): 276 | ''' 277 | For each (i,j) compute the variance across all distances. 278 | Then for each i, average across all var(i,j) 279 | 280 | Arguments: 281 | dist_dict = output of populate_distance_dict() 282 | normalize_pairwise_distance = boolean; whether to normalize the distances between i and j by their mean 283 | mean_pairwise_distance = float, output of compute_mean_distance() 284 | 285 | Returns: 286 | mean_variance_distances = list of variance scores [one for each observation] 287 | ''' 288 | mean_variance_distances = np.ones(len(dist_dict.keys()))*np.inf 289 | 290 | for n in range(len(dist_dict.keys())): 291 | key1 = list(dist_dict.keys())[n] 292 | variances = [] 293 | 294 | for key2 in dist_dict[key1].keys(): 295 | distances = np.array(dist_dict[key1][key2]) 296 | 297 | if normalize_pairwise_distance is True: # perform additional local normalization before taking variance 298 | distances = distances/(np.nanmean(distances)) 299 | 300 | variances.append(np.nanvar(distances / mean_pairwise_distance)) # normalize globally and compute variance 301 | 302 | mean_variance_distances[int(key1)] = np.nanmean(variances) 303 | 304 | return(mean_variance_distances) 305 | 306 | 307 | 308 | ### CONCORDANCE SCORES -- see our publication for mathematical details 309 | 310 | def get_jaccard(X_orig, X_red, k, precomputed=[False, False]): 311 | ''' 312 | Computes Jaccard coefficient at k for each point in X_orig and X_red 313 | ''' 314 | # INIT NEAREST NEIGHBORS 315 | if precomputed[0] is False: 316 | nbrs = NearestNeighbors(n_neighbors=k).fit(X_orig) 317 | else: 318 | nbrs = NearestNeighbors(n_neighbors=k, metric='precomputed').fit(X_orig) 319 | distances_orig, indices_orig = nbrs.kneighbors(X_orig) 320 | 321 | if precomputed[0] is False: 322 | nbrs = NearestNeighbors(n_neighbors=k).fit(X_red) 323 | else: 324 | nbrs = NearestNeighbors(n_neighbors=k, metric='precomputed').fit(X_red) 325 | distances_red, indices_red = nbrs.kneighbors(X_red) 326 | 327 | # COMPUTE JACCARD 328 | jaccards = [] 329 | for i in range(X_orig.shape[0]): 330 | list1 = list(indices_orig[i,1:]) 331 | list2 = list(indices_red[i,1:]) 332 | intersection = len(list(set(list1).intersection(list2))) 333 | union = (len(list1) + len(list2)) - intersection 334 | jaccards.append(float(intersection) / union) 335 | 336 | return (jaccards) 337 | 338 | 339 | def get_distortion(X_orig, X_red, k, precomputed=[False, False]): 340 | ''' 341 | Computes Distortion at k for each point in X_orig and X_red 342 | 343 | Distortion = ABS ( LOG [ (D_furthest/D_nearest)_orig / (D_furthest/D_nearest)_red ] ) 344 | Distortions normalized by the maximum in entire dataset to be from [0,1] and reframed so 1 is best 345 | ''' 346 | # INIT NEAREST NEIGHBORS 347 | if precomputed[0] is False: 348 | nbrs = NearestNeighbors(n_neighbors=k).fit(X_orig) 349 | else: 350 | nbrs = NearestNeighbors(n_neighbors=k, metric='precomputed').fit(X_orig) 351 | distances_orig, indices_orig = nbrs.kneighbors(X_orig) 352 | 353 | if precomputed[0] is False: 354 | nbrs = NearestNeighbors(n_neighbors=k).fit(X_red) 355 | else: 356 | nbrs = NearestNeighbors(n_neighbors=k, metric='precomputed').fit(X_red) 357 | distances_red, indices_red = nbrs.kneighbors(X_red) 358 | 359 | # COMPUTE DISTORTION 360 | distortions = [] 361 | for i in range(X_orig.shape[0]): 362 | orig_ratio = np.max(distances_orig[i,1:]) / np.min(distances_orig[i,1:]) 363 | red_ratio = np.max(distances_red[i,1:]) / np.min(distances_red[i,1:]) 364 | distortions.append(np.abs(np.log(orig_ratio/red_ratio))) 365 | 366 | distortions = np.array(distortions)/np.max(distortions) 367 | distortions = 1-distortions 368 | 369 | return (distortions) 370 | 371 | 372 | def get_mean_projection_error(X_orig, X_red): 373 | ''' 374 | Computes mean projection error (MPE) modified from aggregated projection error by Martins et al., 2014 375 | 376 | MPE_i = MEAN_j { ABS[ D[i,j]_orig / max(D[i,j]_orig) - D[i,j]_red / max(D[i,j]_red) ] } 377 | 378 | Normalized to [0,1] and then reframed so 1 is best 379 | ''' 380 | orig_distance = pairwise_distances(X_orig) 381 | red_distance = pairwise_distances(X_red) 382 | 383 | # normalize distances 384 | for i in range(orig_distance.shape[0]): 385 | orig_distance[i,:] = orig_distance[i,:]/np.max(orig_distance[i,:]) 386 | red_distance[i,:] = red_distance[i,:]/np.max(red_distance[i,:]) 387 | 388 | # compute projection errors and then MPE 389 | projection_errors = np.abs(orig_distance-red_distance) 390 | MPEs = np.mean(projection_errors, axis=1) 391 | MPEs = 1-MPEs/np.max(MPEs) 392 | return(MPEs) 393 | 394 | 395 | def get_stretch(X_orig, X_red): 396 | ''' 397 | Implemented according to Aupetit, 2007: 398 | 399 | stretch_i = [ u_i - min_k {u_k} ] / [ max_k {u_k} - min_k {u_k} ] 400 | 401 | u_i = SUM_j D_ij^+ , D_ij^+ = max {-(D_orig_ij - D_red_ij), 0 } -- D here being Euclidean distance matrix 402 | 403 | stretchs reframed so 1 is best 404 | ''' 405 | orig_distance = pairwise_distances(X_orig) 406 | red_distance = pairwise_distances(X_red) 407 | 408 | # normalize distances 409 | for i in range(orig_distance.shape[0]): 410 | orig_distance[i,:] = orig_distance[i,:]/np.linalg.norm(orig_distance[i,:]) 411 | red_distance[i,:] = red_distance[i,:]/np.linalg.norm(red_distance[i,:]) 412 | 413 | D_neg = orig_distance-red_distance 414 | D_neg[D_neg>0] = 0 415 | D_neg = -D_neg 416 | 417 | U = np.sum(D_neg, axis=1) 418 | stretchs = (U-np.min(U))/(np.max(U)-np.min(U)) 419 | stretchs = 1-stretchs 420 | 421 | return(stretchs) 422 | 423 | 424 | def concordance(df, X_orig, method, k=None, bootstrap_number=-1): 425 | ''' 426 | Computes concordance scores between the projections in df and X_orig 427 | 428 | Arguments: 429 | df = pandas dataframe: output of boot.generate() 430 | X_orig = nxp numpy array that is the original data from which df was generated 431 | method = str: 'spearman', 'jaccard', 'distortion', 432 | 'mean_projection_error', 'stretch' 433 | k = int, neighborhood size to consider (jaccard, distortion, projection_precision_score, precision, recall) 434 | bootstrap_number = int, index of bootstrap to compute metrics for; defaults to -1 which is the original/unbootstrapped projection 435 | 436 | Returns: 437 | metrics = numpy array with quality score for each row of df (according to the method specified) [0 is bad, 1 is good] 438 | ''' 439 | # retrieve embeddings 440 | X_red = df[df["bootstrap_number"]==bootstrap_number][["x1","x2"]].values 441 | 442 | # shuffle X_orig to matching format 443 | boot_idxs = df[df["bootstrap_number"]==bootstrap_number]["original_index"].values 444 | X_orig = X_orig[boot_idxs,:] 445 | 446 | assert X_orig.shape[0] == X_red.shape[0], "Error: number of observations are not consistent" 447 | 448 | # set k to a globally relevant value if None 449 | if k is None: 450 | k = round(X_orig.shape[0]/2-1) 451 | if k < 5: 452 | raise Exception('k needs to be >= 5 or number of observations in X is too small') 453 | 454 | if method == 'spearman': 455 | orig_distance = pairwise_distances(X_orig) 456 | red_distance = pairwise_distances(X_red) 457 | metrics = [spearmanr(orig_distance[i,:],red_distance[i,:])[0] for i in range(red_distance.shape[0])] 458 | elif method == 'jaccard': 459 | metrics = get_jaccard(X_orig, X_red, k) 460 | elif method == 'distortion': 461 | metrics = get_distortion(X_orig, X_red, k) 462 | elif method == 'mean_projection_error': 463 | metrics = get_mean_projection_error(X_orig, X_red) 464 | elif method == 'stretch': 465 | metrics = get_stretch(X_orig, X_red) 466 | else: 467 | raise Exception("method not recognized") 468 | 469 | return(metrics) 470 | 471 | 472 | def ensemble_concordance(df, X_orig, methods=None, k=None, bootstrap_number=-1, verbose=True): 473 | ''' 474 | Compute emsemble concordation via spectral meta-weights 475 | 476 | Arguments: 477 | df = pandas dataframe: output of boot.generate() 478 | X_orig = nxp numpy array that is the original data from which df was generated 479 | methods = list of strings specifying the metrics to use 480 | Defaults to all the available metrics (except for precision and recall) 481 | k = int, neighborhood size to consider (jaccard, distortion, projection_precision_score, precision, recall) 482 | bootstrap_number = int, index of bootstrap to compute metrics for; defaults to -1 which is the original/unbootstrapped projection 483 | verbose = True or False, whether to return warnings about negative spectral weights 484 | 485 | Returns: 486 | ensemble_metric = numpy array of ensemble concordance scores 487 | pointwise_metrics_list = list of concordance score arrays corresponding to pointwise_metrics_labels 488 | ''' 489 | if methods is None: 490 | methods = ['spearman', 'jaccard', 'distortion', 'mean_projection_error', 'stretch'] 491 | 492 | # compute individual metrics 493 | pointwise_metrics_list = [] 494 | 495 | for metric in tqdm(methods): 496 | m = concordance(df, X_orig, method=metric, k=k, bootstrap_number=bootstrap_number) 497 | pointwise_metrics_list.append(np.array(m)) 498 | 499 | # compute correlation matrix and eigendecomposition 500 | mat = np.corrcoef(pointwise_metrics_list) 501 | w, v = np.linalg.eig(mat) 502 | pc1_score = v[:,0] 503 | 504 | # check pc1 for one sign only 505 | summed_signs = np.abs(np.sum(np.sign(pc1_score))) 506 | if verbose is True: 507 | if summed_signs == len(pc1_score): 508 | print ("PC1 is same signed") 509 | else: 510 | print ("Warning: PC1 is mixed signed") 511 | 512 | # compute meta-uncertainty 513 | weighted_metrics_list = [pointwise_metrics_list[i]*np.abs(pc1_score)[i] for i in range(len(pointwise_metrics_list))] 514 | ensemble_metric = np.sum(weighted_metrics_list,axis=0)/np.sum(np.abs(pc1_score)) 515 | 516 | return(ensemble_metric, pointwise_metrics_list) -------------------------------------------------------------------------------- /dynamicviz/utils.py: -------------------------------------------------------------------------------- 1 | """ 2 | Additional utilities module 3 | - Tools for converting to/from AnnData format 4 | """ 5 | 6 | # author: Eric David Sun 7 | # (C) 2022 8 | from __future__ import print_function 9 | 10 | import numpy as np 11 | import pandas as pd 12 | import os 13 | import warnings 14 | warnings.filterwarnings("ignore") 15 | 16 | def convert_anndata (adata, obs, obsm="X_pca", n_components=None): 17 | ''' 18 | Converts an AnnData object into X and Y inputs for boot.generate() 19 | 20 | Arguments: 21 | adata = AnnData object with all metadata of interest in anndata.obs and has adata.X and adata.obsm["X_pca"] 22 | obs = list of str, str correspond to a key in adata.obs 23 | obsm = str, str correspond to a key in adata.obsm (i.e. "X_pca") -- if no matches found, will default to adata.X 24 | n_components = None or int, if int and obsm="X_pca" is found, then take first n_components of X_pca 25 | 26 | Returns: 27 | X = numpy array with the same number of rows as adata.X and columns depending on obsm 28 | Y = Pandas dataframe with columns specified by obs, same number of rows as X 29 | ''' 30 | # get X from adata.obsm or adata.X 31 | obsm_keys = list(adata.obsm.keys()) 32 | if obsm in obsm_keys: 33 | X = adata.obsm[obsm] 34 | if obsm == "X_pca": 35 | X = X[:,:n_components] 36 | else: 37 | X = adata.X 38 | 39 | # get Y from adata.obs 40 | Y = adata.obs[obs] 41 | 42 | return (X, Y) 43 | 44 | def regenerate_anndata (adata, df, bootstrap_number, obsm): 45 | ''' 46 | Converts AnnData to match df at specified bootstrap_number 47 | 48 | Will replace obsm (e.g. "X_umap") with df[["x1", "x2"]] 49 | Will reorganize all other metadata and X to match bootstrap indices 50 | 51 | Arguments: 52 | adata = original AnnData 53 | df = pandas dataframe, output of boot.generate() 54 | bootstrap_number = int, index to use to regenerate anndata (i.e. an integer appearing in df["bootstrap_number"]) 55 | obsm = str, key to replace adata.obsm[key] with df[["x1", "x2"]] 56 | 57 | Returns: 58 | adata_copy = new AnnData 59 | ''' 60 | bootstrap_idxs = df[df["bootstrap_number"] == bootstrap_number]["original_index"].values 61 | adata_copy = adata.copy()[bootstrap_idxs] 62 | adata_copy.obsm[obsm] = df[df["bootstrap_number"] == bootstrap_number][["x1", "x2"]].values # update DR embedding 63 | 64 | return(adata_copy) -------------------------------------------------------------------------------- /dynamicviz/viz.py: -------------------------------------------------------------------------------- 1 | """ 2 | Dynamic visualization viewing modality module 3 | - Tools for creating different viewing modalities for the dynamic visualizations 4 | """ 5 | 6 | # author: Eric David Sun 7 | # (C) 2022 8 | from __future__ import print_function, division 9 | 10 | import os 11 | import numpy as np 12 | import pandas as pd 13 | import matplotlib.pyplot as plt 14 | from PIL import Image 15 | import cv2 16 | import dash 17 | import dash_core_components as dcc 18 | import dash_html_components as html 19 | from dash.dependencies import Input, Output 20 | import plotly.express as px 21 | 22 | 23 | 24 | def interactive(df, label, show=False, save=False, colors=None, 25 | xlabel="x1", ylabel="x2", title="", legend_title="", 26 | vmin=None, vmax=None, alpha=1.0, width=4, height=4, dpi=500, dim=None): 27 | ''' 28 | Generate dynamic visualization with interactive (plotly) modality 29 | 30 | Arguments: 31 | df = pandas dataframe corresponding to output of boot.generate() 32 | label = str or float, column in output for labeling/coloring visualization 33 | show = True or False, whether to show the visualization 34 | save = False or str, path to save the visualization (acceptable extensions are .html) 35 | colors = list of plotly color codes to use if labels are discrete 36 | xlabel = label of x-axis 37 | ylabel = label of y-axis 38 | title = title of plot 39 | legend_title = title of legend 40 | vmin = set value of vmin for continuous colorbar (default is min across all bootstrap frames) 41 | vmax = set value of vmax for continuous colorbar (default is max across all bootstrap frames) 42 | alpha = opacity between 0 and 1 43 | width = width of plotly plot 44 | height = height of plotly plot 45 | dpi = dots per inch 46 | dim = x and y dimensions will +- dim in either direction; default is to take the maximum across all frames 47 | 48 | will convert width, height, dpi into plotly.express.scatter() width and height 49 | 50 | Returns: 51 | fig = Plotly object 52 | ''' 53 | # run some checks 54 | if isinstance(colors, list): 55 | if len(colors) < len(np.unique(df[label])): 56 | raise Exception ("colors need to have >= length as len(np.unique(df[label]))") 57 | 58 | # get bootstrap-wide statistics for consistency across frames 59 | if dim is None: 60 | dim = np.max([np.max(np.abs(df['x1'])),np.max(np.abs(df['x2']))]) 61 | 62 | 63 | if df[label].dtype == np.float: # define max and min values across all frames 64 | if vmin is None: 65 | vmin = np.min(df[label]) 66 | if vmax is None: 67 | vmax = np.max(df[label]) 68 | 69 | # compute width and height 70 | width = width * dpi 71 | height = height * dpi 72 | 73 | 74 | df_px = df.copy() # make copy of df 75 | 76 | # create color dict if needed 77 | if (df_px[label].dtype != np.float) and (isinstance(colors, list)): 78 | color_dict = {} 79 | for li, lab in enumerate(np.unique(df_px[label])): 80 | color_dict[lab] = colors[li] 81 | 82 | # add new columns for marker 83 | #df_px['symbol'] = marker 84 | 85 | # make figure 86 | if df[label].dtype == np.float: # continuous labels 87 | fig = px.scatter(df_px, x='x1', y='x2', animation_frame="bootstrap_number", animation_group="original_index", color=label, hover_name=label, title=title, 88 | range_x=[-dim,dim], range_y=[-dim,dim], range_color=(vmin,vmax), opacity=alpha, width=width, height=height, 89 | labels={ 90 | "x1": xlabel, 91 | "x2": ylabel, 92 | label: legend_title 93 | }) 94 | elif isinstance(colors, list): # if colors is specified for discrete labels 95 | fig = px.scatter(df_px, x='x1', y='x2', animation_frame="bootstrap_number", animation_group="original_index", color=label, hover_name=label, title=title, 96 | range_x=[-dim,dim], range_y=[-dim,dim], opacity=alpha, width=width, height=height, 97 | color_discrete_map = color_dict, 98 | labels={ 99 | "x1": xlabel, 100 | "x2": ylabel, 101 | label: legend_title 102 | }) 103 | 104 | else: # discrete labels (default colors) 105 | fig = px.scatter(df_px, x='x1', y='x2', animation_frame="bootstrap_number", animation_group="original_index", color=label, hover_name=label, title=title, 106 | range_x=[-dim,dim], range_y=[-dim,dim], opacity=alpha, width=width, height=height, 107 | labels={ 108 | "x1": xlabel, 109 | "x2": ylabel, 110 | label: legend_title 111 | }) 112 | 113 | if isinstance(save, str): # save as HTML 114 | if ".html" in save: 115 | fig.write_html(save) 116 | else: 117 | raise Exception("save needs to be .html file") 118 | 119 | if show is True: # show figure 120 | fig.show() 121 | 122 | return(fig) 123 | 124 | 125 | def animated(df, label, save=False, get_frames=None, colors=None, cmap='viridis', width=4, height=4, dpi=500, 126 | xlabel=None, ylabel=None, title=None, title_fontsize=16, major_fontsize=16, minor_fontsize=14, 127 | vmin=None, vmax=None, marker="o", alpha=1.0, solid_cbar=True, show_legend=True, solid_legend=True, 128 | legend_fontsize=12, dim=None, **kwargs): 129 | ''' 130 | Generate dynamic visualization with animated modality 131 | 132 | Arguments: 133 | df = pandas dataframe corresponding to output of boot.generate() 134 | label = str, column in output for labeling/coloring visualization 135 | save = False or str, path to save the visualization (acceptable extensions are .gif and .avi) 136 | get_frames = None or list of integer indices to save frames for in folder called save.split(".")[0] 137 | colors = list of matplotlib color codes to use if labels are discrete 138 | cmap = color map to use for continuous labels 139 | width = width of matplotlib plot 140 | height = height of matplotlib plot 141 | dpi = dots per inch 142 | xlabel = label of x-axis 143 | ylabel = label of y-axis 144 | title = title of plot 145 | title_fontsize = fontsize for title 146 | major_fontsize = fontsize for axis labels 147 | minor_fontsize = fontsize for axis ticks 148 | vmin = set value of vmin for continuous colorbar (default is min across all bootstrap frames) 149 | vmax = set value of vmax for continuous colorbar (default is max across all bootstrap frames) 150 | marker = marker symbol for plot 151 | alpha = opacity between 0 and 1 152 | solid_cbar = boolean, whether to set alpha=1 for color bar 153 | show_legend = boolean, whether to show a legend 154 | solid_legend = boolean, whether to set alpha=1 for legend markers 155 | legend_fontsize = fontsize for legend 156 | dim = x and y dimensions will +- dim in either direction; default is to take the maximum across all frames 157 | 158 | Returns: 159 | images = list of matplotlib objects 160 | ''' 161 | # run some checks 162 | if isinstance(colors, list): 163 | if len(colors) < len(np.unique(df[label])): 164 | raise Exception ("colors need to have >= length as len(np.unique(df[label]))") 165 | 166 | # get bootstrap-wide statistics for consistency across frames 167 | if dim is None: 168 | dim = np.max([np.max(np.abs(df['x1'])),np.max(np.abs(df['x2']))]) 169 | if df[label].dtype == np.float: 170 | if vmin is None: 171 | vmin = np.min(df[label]) 172 | if vmax is None: 173 | vmax = np.max(df[label]) 174 | 175 | # generate list of matplotlib plots 176 | images = [] 177 | for boot_num in np.sort(np.unique(df["bootstrap_number"])): 178 | 179 | # get bootstrap results 180 | sub_df = df[df["bootstrap_number"] == boot_num].reset_index() 181 | 182 | # make figure 183 | fig = plt.figure(figsize=(width, height)) 184 | 185 | # continuous labels for float labels 186 | if df[label].dtype == np.float: 187 | plt.scatter(sub_df["x1"], sub_df["x2"], c=sub_df[label], cmap=cmap, vmin=vmin, vmax=vmax, 188 | marker=marker, alpha=alpha, **kwargs) 189 | cbar = plt.colorbar() 190 | if solid_cbar is True: 191 | cbar.solids.set(alpha=1) 192 | 193 | # otherwise, discrete labels 194 | else: 195 | for li, lab in enumerate(np.unique(df[label])): 196 | if colors is None: 197 | plt.scatter(sub_df[sub_df[label] == lab]["x1"], sub_df[sub_df[label] == lab]["x2"], 198 | label=str(lab), marker=marker, alpha=alpha, **kwargs) 199 | else: 200 | plt.scatter(sub_df[sub_df[label] == lab]["x1"], sub_df[sub_df[label] == lab]["x2"], 201 | label=str(lab), c=colors[li], marker=marker, alpha=alpha, **kwargs) 202 | 203 | if show_legend is True: 204 | leg = plt.legend(loc='center left', bbox_to_anchor=(1, 0.5), fontsize=legend_fontsize) 205 | if solid_legend is True: 206 | for lh in leg.legendHandles: 207 | lh.set_alpha(1) 208 | 209 | # add titles and axis labels 210 | if isinstance(title, str): 211 | plt.title(title, fontsize=title_fontsize) 212 | if isinstance(xlabel, str): 213 | plt.xlabel(xlabel, fontsize=major_fontsize) 214 | if isinstance(ylabel, str): 215 | plt.ylabel(ylabel, fontsize=major_fontsize) 216 | 217 | plt.xticks(fontsize=minor_fontsize) 218 | plt.yticks(fontsize=minor_fontsize) 219 | 220 | # specify plot parameters 221 | plt.ylim(-dim,dim) 222 | plt.xlim(-dim,dim) 223 | plt.tight_layout() 224 | 225 | # save still frames if specified 226 | if isinstance(get_frames, list): 227 | if not os.path.exists(save.split(".")[0]): 228 | os.makedirs(save.split(".")[0]) 229 | #for index in get_frames: 230 | # im = images[index] 231 | # im.save(os.path.join(save.split(".")[0],"frame"+str(index)+".pdf")) 232 | if boot_num in get_frames: 233 | plt.savefig(os.path.join(save.split(".")[0],"frame"+str(boot_num)+".pdf"), dpi=dpi) 234 | 235 | # make plot into image 236 | im = fig2img(fig, dpi=dpi) 237 | images.append(im) 238 | plt.close() 239 | 240 | # save dynamic visualization 241 | if isinstance(save, str): 242 | # save as GIF 243 | if ".gif" in save: 244 | images[0].save(save, save_all = True, append_images = images[1:], 245 | optimize = False, duration = [1000]+[100]*len(images[1:]), loop=0) 246 | # save as AVI 247 | elif ".avi" in save: 248 | frame = cv2.cvtColor(np.array(images[0]), cv2.COLOR_RGB2BGR) 249 | height, width, layers = frame.shape 250 | video = cv2.VideoWriter(save, 0, 10, (width,height)) 251 | for image in images: 252 | opencvImage = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR) 253 | video.write(opencvImage) 254 | cv2.destroyAllWindows() 255 | video.release() 256 | else: 257 | raise Exception("save needs to be .gif or .avi file") 258 | 259 | return(images) 260 | 261 | 262 | def stacked(df, label, show=False, save=False, colors=None, cmap='viridis', width=4, height=4, dpi=500, 263 | xlabel=None, ylabel=None, title=None, title_fontsize=16, major_fontsize=16, minor_fontsize=14, 264 | vmin=None, vmax=None, marker="o", alpha=None, solid_cbar=True, show_legend=True, solid_legend=True, 265 | legend_fontsize=12, dim=None, frame=None, return_fig=True, **kwargs): 266 | ''' 267 | Generate dynamic visualization with stacked modality 268 | 269 | Arguments: 270 | df = pandas dataframe corresponding to output of boot.generate() 271 | label = str, column in output for labeling/coloring visualization 272 | show = True or False, whether to show the visualization 273 | save = False or str, path to save the visualization (acceptable extensions are .png, .jpg, .pdf, .eps, .tiff, ... 274 | frame = None or if int, then shows only that bootstrap frame 275 | return_fig = boolean, whether to return figure or not 276 | 277 | See animated() for more details 278 | 279 | Returns: 280 | fig = matplotlib object 281 | ''' 282 | # run some checks 283 | if isinstance(colors, list): 284 | if len(colors) < len(np.unique(df[label])): 285 | raise Exception ("colors need to have >= length as len(np.unique(df[label]))") 286 | 287 | # get bootstrap-wide statistics for consistency across frames 288 | if dim is None: 289 | dim = np.max([np.max(np.abs(df['x1'])),np.max(np.abs(df['x2']))]) 290 | if df[label].dtype == np.float: 291 | if vmin is None: 292 | vmin = np.min(df[label]) 293 | if vmax is None: 294 | vmax = np.max(df[label]) 295 | 296 | # automatically set alpha based on heuristic 297 | if alpha is None: 298 | alpha = 0.2/(df.shape[0]/1000) 299 | 300 | fig = plt.figure(figsize=(width,height)) 301 | 302 | # snapshot frame if requested 303 | if isinstance(frame, int): 304 | df = df[df['bootstrap_number']==frame] 305 | elif isinstance(frame, float): 306 | df = df[df['bootstrap_number']==int(frame)] 307 | 308 | # continuous labels 309 | if df[label].dtype == np.float: 310 | plt.scatter(df["x1"],df["x2"], c=df[label], cmap=cmap, vmin=vmin, vmax=vmax, 311 | marker=marker, alpha=alpha, edgecolors='none', **kwargs) 312 | cbar = plt.colorbar() 313 | if solid_cbar is True: 314 | cbar.solids.set(alpha=1) 315 | 316 | # discrete labels 317 | else: 318 | for li, lab in enumerate(np.unique(df[label])): 319 | if colors is None: 320 | plt.scatter(df[df[label] == lab]["x1"],df[df[label] == lab]["x2"], 321 | label=str(lab), marker=marker, alpha=alpha, edgecolors='none', **kwargs) 322 | else: 323 | plt.scatter(df[df[label] == lab]["x1"],df[df[label] == lab]["x2"], 324 | label=str(lab), c=colors[li], marker=marker, alpha=alpha, edgecolors='none', **kwargs) 325 | 326 | if show_legend is True: 327 | leg = plt.legend(loc='center left', bbox_to_anchor=(1, 0.5), fontsize=legend_fontsize) 328 | if solid_legend is True: 329 | for lh in leg.legendHandles: 330 | lh.set_alpha(1) 331 | 332 | # add titles and axis labels 333 | if isinstance(title, str): 334 | plt.title(title, fontsize=title_fontsize) 335 | if isinstance(xlabel, str): 336 | plt.xlabel(xlabel, fontsize=major_fontsize) 337 | if isinstance(ylabel, str): 338 | plt.ylabel(ylabel, fontsize=major_fontsize) 339 | 340 | plt.xticks(fontsize=minor_fontsize) 341 | plt.yticks(fontsize=minor_fontsize) 342 | 343 | plt.ylim(-dim,dim) 344 | plt.xlim(-dim,dim) 345 | plt.tight_layout() 346 | 347 | # save plot 348 | if isinstance(save, str): 349 | plt.savefig(save, dpi=dpi, bbox_inches = "tight") 350 | if show is True: 351 | plt.show() 352 | else: 353 | plt.close() 354 | 355 | if return_fig is True: 356 | return(fig) 357 | 358 | 359 | 360 | def fig2img(fig, dpi): 361 | """Convert a Matplotlib figure to a PIL Image and return it""" 362 | import io 363 | buf = io.BytesIO() 364 | fig.savefig(buf, dpi=dpi, bbox_inches="tight") 365 | buf.seek(0) 366 | img = Image.open(buf) 367 | return img 368 | 369 | 370 | 371 | -------------------------------------------------------------------------------- /pipeline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunericd/dynamicviz/c0104621c710661aac04b1c9832b5105acf6231f/pipeline.png -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["flit_core >=3.2,<4"] 3 | build-backend = "flit_core.buildapi" 4 | 5 | [project] 6 | name = "dynamicviz" 7 | authors = [{name = "Eric Sun", email = "edsun97@gmail.com"}] 8 | readme = "README.md" 9 | requires-python = ">=3.8" 10 | license = {file = "LICENSE"} 11 | classifiers = ["License :: OSI Approved :: MIT License"] 12 | dynamic = ["version", "description"] 13 | dependencies = [ 14 | "dash==2.1.0", 15 | "dash_core_components==2.0.0", 16 | "dash_html_components==2.0.0", 17 | "werkzeug==2.0.3", 18 | "joblib==1.1.0", 19 | "matplotlib==3.5.0", 20 | "numpy==1.21.2", 21 | "numba==0.55.1", 22 | "opencv_python==4.5.5.62", 23 | "pandas==1.3.5", 24 | "Pillow==9.0.1", 25 | "plotly==5.5.0", 26 | "scikit_learn==1.0.2", 27 | "scipy==1.7.3", 28 | "tqdm==4.62.3", 29 | "umap==0.1.1", 30 | "umap_learn==0.5.2", 31 | ] 32 | 33 | [project.urls] 34 | Home = "https://github.com/sunericd/dynamicviz" 35 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | dash==2.1.0 2 | dash_core_components==2.0.0 3 | dash_html_components==2.0.0 4 | werkzeug==2.0.3 5 | joblib==1.1.0 6 | matplotlib==3.5.0 7 | numpy==1.21.2 8 | numba==0.55.1 9 | opencv_python==4.5.5.62 10 | pandas==1.3.5 11 | Pillow==9.0.1 12 | plotly==5.5.0 13 | scikit_learn==1.0.2 14 | scipy==1.7.3 15 | tqdm==4.62.3 16 | umap==0.1.1 17 | umap_learn==0.5.2 18 | -------------------------------------------------------------------------------- /test.py: -------------------------------------------------------------------------------- 1 | # rudimentary test to see if bootstrapping and interactive visualization is functioning 2 | # similar to tutorial.ipynb 3 | 4 | 5 | # import packages 6 | from dynamicviz import boot, viz, score 7 | import numpy as np 8 | import pandas as pd 9 | import matplotlib.pyplot as plt 10 | import os 11 | from scipy.stats import spearmanr 12 | from sklearn.datasets import make_s_curve 13 | 14 | 15 | if not os.path.exists('tests/outputs'): 16 | os.makedirs('tests/outputs') 17 | 18 | # load data 19 | S_X, S_y = make_s_curve(1000, random_state=0) 20 | S_y = pd.DataFrame(S_y, columns=["label"]) 21 | 22 | 23 | # with parallelization 24 | try: 25 | out = boot.generate(S_X, Y=S_y, method="tsne", B=4, save=False, random_seed=452, random_state=452, num_jobs=2) 26 | except: 27 | print("Warning: Error encountered parallelization of boot.generate() -- ignore if only using one core") 28 | 29 | # without parallelization 30 | try: 31 | out = boot.generate(S_X, Y=S_y, method="tsne", B=4, save=False, random_seed=452, random_state=452) 32 | except: 33 | raise Exception("Error encountered in boot.generate") 34 | 35 | 36 | # check output 37 | truth = pd.read_csv("tests/outputs/truth.csv") 38 | assert round(out["x1"].values[333],4) == round(truth["x1"].values[333],4), "Output dataframe does not match truth.csv" 39 | assert round(out["x2"].values[1111],4) == round(truth["x2"].values[1111],4), "Output dataframe does not match truth.csv" 40 | 41 | # make interactive visualization 42 | try: 43 | fig = viz.interactive(out, 'label', show=False, save=False, alpha=0.5, legend_title="Cell type", dpi=150) 44 | except: 45 | print ("Warning: Error encountered for viz.interactive()") 46 | 47 | # make animated visualization 48 | try: 49 | fig = viz.animated(out, 'label', save=False) 50 | except: 51 | print ("Warning: Error encountered for viz.animated()") 52 | 53 | # make stacked visualization 54 | try: 55 | fig = viz.stacked(out, 'label', show=False, save=False, 56 | xlabel="t-SNE 1", ylabel="t-SNE 2", dpi=150, marker="x", s=20, show_legend=True, solid_legend=True, cmap='hot') 57 | except: 58 | print ("Warning: Error encountered for viz.stacked()") 59 | 60 | # global variance score 61 | try: 62 | variance_scores = score.variance(out, method="global") 63 | except: 64 | print ("Warning: Error encountered for score.variance(method='global')") 65 | 66 | # check variance scores 67 | truth = np.genfromtxt("tests/outputs/truth_variances.txt") 68 | assert round(variance_scores[333],4) == round(truth[333],4), "Variance scores do not match truth_variances.txt" 69 | 70 | # random variance score 71 | try: 72 | variance_scores = score.variance(out, method="random", k=50) 73 | except: 74 | print ("Warning: Error encountered for score.variance(method='random')") 75 | 76 | # concordance score test 77 | for method in ["spearman", "distortion", "jaccard", "mean_projection_error", "stretch"]: 78 | try: 79 | concordance_scores = score.concordance(out, S_X, method=method, k=50, bootstrap_number=-1) 80 | except: 81 | print ("Warning: Error encountered for score.concordance(method='"+method+"')") 82 | 83 | 84 | -------------------------------------------------------------------------------- /tests/data/Mammoth_X.txt: -------------------------------------------------------------------------------- 1 | 8.565399999999999636e+01 3.192970000000000255e+02 1.018040000000000020e+02 2 | 1.068939999999999912e+02 4.913259999999999650e+02 -1.303000000000000114e+02 3 | 1.244129999999999967e+02 3.174850000000000136e+02 6.578699999999999193e+01 4 | 4.177000000000000313e+01 4.936750000000000114e+02 3.455599999999999739e+01 5 | 2.729500000000000171e+01 3.541659999999999968e+02 6.340699999999999648e+01 6 | 7.154099999999999682e+01 5.294500000000000455e+02 5.602300000000000324e+01 7 | 6.295600000000000307e+01 3.410550000000000068e+02 -1.517760000000000105e+02 8 | 6.234000000000000341e+01 3.238940000000000055e+02 1.079110000000000014e+02 9 | 1.203689999999999998e+02 3.952130000000000223e+02 1.227329999999999899e+02 10 | 9.738700000000000045e+01 4.839940000000000282e+02 -1.627319999999999993e+02 11 | 6.199499999999999744e+01 4.911669999999999732e+02 7.609199999999999875e+01 12 | 1.214010000000000105e+02 4.974309999999999832e+02 -1.691900000000000048e+01 13 | 7.754999999999999716e+01 5.447839999999999918e+02 4.226699999999999591e+01 14 | 7.082800000000000296e+01 3.842269999999999754e+02 1.183270000000000124e+02 15 | 3.358299999999999841e+01 2.912479999999999905e+02 7.457999999999999829e+01 16 | 6.621399999999999864e+01 2.255600000000000023e+02 8.740200000000000102e+01 17 | 1.382410000000000139e+02 4.439540000000000077e+02 8.810799999999998988e+01 18 | 2.217399999999999949e+01 3.597350000000000136e+02 4.855799999999999983e+01 19 | 6.890500000000000114e+01 4.391469999999999914e+02 1.200859999999999985e+02 20 | 1.220559999999999974e+02 3.365740000000000123e+02 7.822700000000000387e+01 21 | 8.566700000000000159e+01 3.260709999999999695e+02 1.100660000000000025e+02 22 | 6.087100000000000222e+01 2.128220000000000027e+02 1.207520000000000095e+02 23 | 4.180300000000000438e+01 2.399379999999999882e+02 1.371839999999999975e+02 24 | 9.590700000000001069e+01 4.312869999999999777e+02 1.254129999999999967e+02 25 | 8.835799999999998988e+01 2.933949999999999818e+02 3.831700000000000017e+01 26 | 2.864000000000000057e+01 2.964139999999999873e+02 1.001949999999999932e+02 27 | 6.898999999999999488e+01 2.743509999999999991e+02 1.169529999999999887e+02 28 | 7.620799999999999841e+01 2.236320000000000050e+02 7.814300000000000068e+01 29 | 4.816899999999999693e+01 5.120369999999999209e+02 -6.248300000000000409e+01 30 | 6.157000000000000028e+01 2.979599999999999795e+02 9.114799999999999613e+01 31 | 5.706800000000000495e+01 2.350909999999999798e+02 1.140920000000000130e+02 32 | 1.192329999999999899e+02 2.702350000000000136e+02 -1.696790000000000020e+02 33 | 2.323900000000000077e+01 3.607749999999999773e+02 7.016899999999999693e+01 34 | 5.163100000000000023e+01 1.735370000000000061e+02 2.807400000000000162e+01 35 | 7.351899999999999125e+01 4.112990000000000350e+02 1.301689999999999827e+02 36 | 9.306600000000000250e+01 2.174059999999999775e+02 1.082529999999999859e+02 37 | 3.782500000000000284e+01 5.221359999999999673e+02 -6.362600000000000477e+01 38 | 3.560300000000000153e+01 4.143030000000000541e+02 1.237920000000000016e+02 39 | 8.178199999999999648e+01 3.310680000000000405e+02 -4.733000000000000540e+00 40 | 6.632600000000000762e+01 4.944519999999999982e+02 9.588600000000000989e+01 41 | 1.279020000000000010e+02 2.967740000000000009e+02 4.064800000000000324e+01 42 | 3.581400000000000006e+01 3.405600000000000023e+02 -1.292659999999999911e+02 43 | 5.723699999999999477e+01 2.102709999999999866e+02 1.217789999999999964e+02 44 | 8.030899999999999750e+01 4.573050000000000068e+02 1.078059999999999974e+02 45 | -1.393200000000000038e+01 7.824200000000000443e+01 6.009399999999999409e+01 46 | 7.170199999999999818e+01 3.569630000000000223e+02 1.264000000000000057e+02 47 | 5.642300000000000182e+01 3.237830000000000155e+02 -1.047229999999999990e+02 48 | 5.329299999999999926e+01 3.389940000000000282e+02 -1.236009999999999991e+02 49 | 1.172510000000000048e+02 1.740559999999999832e+02 4.044699999999999562e+01 50 | 4.544399999999999551e+01 4.365009999999999764e+02 1.210789999999999935e+02 51 | 1.164029999999999916e+02 4.443880000000000337e+02 1.101560000000000059e+02 52 | 5.554699999999999704e+01 3.697690000000000055e+02 1.309569999999999936e+02 53 | 9.007799999999998875e+01 4.258050000000000068e+02 1.274510000000000076e+02 54 | 1.282930000000000064e+02 3.491430000000000291e+02 5.468299999999999983e+01 55 | 6.629600000000000648e+01 2.332849999999999966e+02 9.281799999999999784e+01 56 | 8.556900000000000261e+01 3.316610000000000014e+02 1.087839999999999918e+02 57 | 7.933800000000000807e+01 1.909120000000000061e+02 5.952199999999999847e+01 58 | 5.114899999999999380e+01 4.403149999999999977e+02 1.200160000000000053e+02 59 | 8.468299999999999272e+01 2.920000000000000000e+02 1.010189999999999912e+02 60 | 1.293960000000000150e+02 5.076899999999999977e+02 1.569400000000000084e+01 61 | 1.451239999999999952e+02 3.370380000000000109e+02 7.802100000000000080e+01 62 | 1.012810000000000059e+02 4.923830000000000382e+02 3.952900000000000347e+01 63 | 6.823999999999999488e+01 2.356879999999999882e+02 1.690469999999999970e+02 64 | 8.279799999999998761e+01 4.222259999999999991e+02 1.249150000000000063e+02 65 | 1.274410000000000025e+02 2.959719999999999800e+02 -1.425799999999999912e+01 66 | 1.101229999999999905e+02 4.614039999999999964e+02 -1.705190000000000055e+02 67 | 4.506600000000000250e+01 3.305090000000000146e+02 -1.601200000000000045e+02 68 | 5.113800000000000523e+01 3.183170000000000073e+02 -7.988899999999999579e+01 69 | 8.022700000000000387e+01 4.017609999999999673e+02 1.293310000000000173e+02 70 | 5.271199999999999619e+01 2.056509999999999820e+02 1.093079999999999927e+02 71 | 1.252239999999999895e+02 5.106980000000000359e+02 2.261499999999999844e+01 72 | 8.116500000000000625e+01 5.513709999999999809e+02 1.051299999999999990e+01 73 | 7.874299999999999500e+01 4.078700000000000045e+02 1.148560000000000088e+02 74 | 1.121889999999999930e+02 4.803869999999999436e+02 -1.461289999999999907e+02 75 | 1.429960000000000093e+02 6.954000000000000625e+01 7.944700000000000273e+01 76 | 9.889799999999999613e+01 3.508509999999999991e+02 1.253449999999999989e+02 77 | 1.064909999999999997e+02 4.944080000000000155e+02 -9.766100000000000136e+01 78 | 1.133050000000000068e+02 4.823319999999999936e+02 -1.624360000000000070e+02 79 | 7.609399999999999409e+01 3.535199999999999818e+02 1.296659999999999968e+02 80 | 9.833499999999999375e+01 2.234099999999999966e+02 1.262060000000000031e+02 81 | 1.598650000000000091e+02 9.027899999999999636e+01 4.657300000000000040e+01 82 | 7.242600000000000193e+01 2.915769999999999982e+02 9.518799999999998818e+01 83 | 1.147639999999999958e+02 3.339440000000000168e+02 8.774899999999999523e+01 84 | 7.823699999999999477e+01 2.783559999999999945e+02 1.219960000000000093e+02 85 | 1.099820000000000135e+02 2.705849999999999795e+02 -1.394149999999999920e+02 86 | 6.654600000000000648e+01 3.558019999999999641e+02 1.216009999999999991e+02 87 | 5.093800000000000239e+01 2.493290000000000077e+02 1.410800000000000125e+02 88 | 3.671399999999999864e+01 3.313330000000000268e+02 -1.545610000000000070e+02 89 | 1.176389999999999958e+02 3.435950000000000273e+02 9.676000000000000156e+00 90 | 4.482300000000000040e+01 5.057990000000000350e+02 -6.725700000000000500e+01 91 | 7.524399999999999977e+01 5.123759999999999764e+02 2.744400000000000261e+01 92 | 6.352100000000000080e+01 3.657530000000000427e+02 1.259420000000000073e+02 93 | 4.931899999999999551e+01 3.804049999999999727e+02 1.286750000000000114e+02 94 | 3.581199999999999761e+01 3.107959999999999923e+02 1.591900000000000048e+01 95 | 8.253200000000001069e+01 4.157160000000000082e+02 1.324389999999999930e+02 96 | 3.859199999999999875e+01 5.405779999999999745e+02 -1.601239999999999952e+02 97 | 5.560800000000000409e+01 4.404719999999999800e+02 1.233329999999999984e+02 98 | 6.621200000000000330e+01 5.245000000000000000e+02 5.756899999999999551e+01 99 | 6.310600000000000165e+01 3.221740000000000350e+02 -1.696150000000000091e+02 100 | 4.336899999999999977e+01 2.305550000000000068e+02 1.179360000000000070e+02 101 | 7.931499999999999773e+01 2.979909999999999854e+02 9.320700000000000784e+01 102 | 1.006060000000000088e+02 4.326090000000000373e+02 1.239449999999999932e+02 103 | 1.243310000000000031e+02 5.033460000000000036e+02 -7.572999999999999510e+00 104 | 1.229389999999999930e+02 2.991859999999999786e+02 5.717699999999999960e+01 105 | 8.189000000000000057e+01 3.510659999999999741e+02 1.264639999999999986e+02 106 | 1.077610000000000099e+02 2.347470000000000141e+02 1.601430000000000007e+02 107 | 1.147909999999999968e+02 1.686870000000000118e+02 2.385000000000000142e+01 108 | 3.919200000000000017e+01 2.948580000000000041e+02 7.488500000000000512e+01 109 | 1.304499999999999886e+02 3.509060000000000059e+02 4.150600000000000023e+01 110 | 6.696300000000000807e+01 3.995680000000000405e+02 1.313340000000000032e+02 111 | 6.265800000000000125e+01 2.437859999999999729e+02 1.608410000000000082e+02 112 | 1.206279999999999859e+02 2.674800000000000182e+02 -1.712340000000000089e+02 113 | 8.443899999999999295e+01 4.067719999999999914e+02 1.314530000000000030e+02 114 | 4.351200000000000045e+01 2.376570000000000107e+02 1.509379999999999882e+02 115 | 1.223799999999999955e+02 2.832290000000000418e+02 1.304400000000000048e+01 116 | 4.526399999999999579e+01 3.293840000000000146e+02 -8.196200000000000330e+01 117 | 3.686099999999999710e+01 3.357950000000000159e+02 8.363600000000000989e+01 118 | 1.469700000000000095e+01 3.808509999999999991e+02 8.454200000000000159e+01 119 | 5.033600000000000563e+01 5.181340000000000146e+02 -7.066700000000000159e+01 120 | 2.854300000000000281e+01 3.420559999999999832e+02 4.935800000000000409e+01 121 | 5.069899999999999807e+01 4.031469999999999914e+02 1.318410000000000082e+02 122 | 5.797100000000000364e+01 3.074990000000000236e+02 9.886599999999999966e+01 123 | 1.130310000000000059e+02 2.855749999999999886e+02 -7.016500000000000625e+01 124 | 6.286199999999999477e+01 3.376340000000000146e+02 1.163370000000000033e+02 125 | 9.286299999999999955e+01 3.197909999999999968e+02 1.111310000000000002e+02 126 | 3.699000000000000199e+01 3.117629999999999768e+02 -1.714540000000000077e+02 127 | 1.325699999999999932e+02 3.965030000000000427e+02 1.154590000000000032e+02 128 | 8.353700000000000614e+01 3.399599999999999795e+02 1.220639999999999930e+02 129 | 6.846800000000000352e+01 3.183369999999999891e+02 1.097079999999999984e+02 130 | 3.806499999999999773e+01 3.080779999999999745e+02 -2.257999999999999829e+01 131 | -9.477999999999999758e+00 8.468299999999999272e+01 7.244599999999999795e+01 132 | 2.387999999999999901e+01 3.025179999999999723e+02 1.873700000000000188e+01 133 | 8.760399999999999920e+01 3.114739999999999895e+02 9.757399999999999807e+01 134 | 7.821899999999999409e+01 2.826680000000000064e+02 1.204020000000000010e+02 135 | 9.434000000000000341e+01 3.337280000000000086e+02 -2.112000000000000099e+00 136 | 6.997100000000000364e+01 3.193070000000000164e+02 -5.280000000000000249e+00 137 | 1.238949999999999960e+02 4.592309999999999945e+02 9.083799999999999386e+01 138 | 7.947299999999999898e+01 3.109820000000000277e+02 9.894999999999999574e+00 139 | 8.236200000000000898e+01 4.646190000000000282e+02 1.008250000000000028e+02 140 | 7.615999999999999659e+01 4.677090000000000032e+02 1.049200000000000017e+02 141 | 1.053340000000000032e+02 4.835939999999999941e+02 -1.414410000000000025e+02 142 | 2.864199999999999946e+01 5.030360000000000014e+02 2.177400000000000091e+01 143 | 9.325900000000000034e+01 5.283659999999999854e+02 3.731000000000000227e+01 144 | 9.393099999999999739e+01 3.211519999999999868e+02 1.044999999999999929e+00 145 | 1.608580000000000041e+02 9.837500000000000000e+01 3.789800000000000324e+01 146 | 7.535099999999999909e+01 4.582290000000000418e+02 1.148870000000000005e+02 147 | 6.857099999999999795e+01 5.021959999999999695e+02 3.595199999999999818e+01 148 | 1.378400000000000034e+02 4.079919999999999618e+02 1.022139999999999986e+02 149 | 3.878300000000000125e+01 5.111530000000000200e+02 7.115000000000000213e+00 150 | 8.358599999999999852e+01 3.814710000000000036e+02 1.338350000000000080e+02 151 | 8.281200000000001182e+01 4.158369999999999891e+02 1.282889999999999873e+02 152 | 3.610699999999999932e+01 5.376709999999999354e+02 -9.513100000000000023e+01 153 | 3.746999999999999886e+01 3.394930000000000518e+02 1.637800000000000011e+01 154 | 1.034639999999999986e+02 4.853790000000000191e+02 -1.358329999999999984e+02 155 | 2.915399999999999991e+01 5.099680000000000177e+02 2.477899999999999991e+01 156 | 1.236910000000000025e+02 2.914639999999999986e+02 -5.420399999999999352e+01 157 | 1.071379999999999910e+02 2.519079999999999870e+02 -1.640709999999999980e+02 158 | 7.690699999999999648e+01 2.770849999999999795e+02 1.284410000000000025e+02 159 | 1.131720000000000113e+02 2.718870000000000005e+02 -1.629729999999999848e+02 160 | 7.343399999999999750e+01 4.664049999999999727e+02 1.128879999999999910e+02 161 | 4.911399999999999721e+01 3.154879999999999995e+02 -1.681270000000000095e+02 162 | 6.440300000000000580e+01 2.650799999999999841e+02 1.122210000000000036e+02 163 | 3.373799999999999955e+01 2.846270000000000095e+02 6.947499999999999432e+01 164 | 1.218529999999999944e+02 5.114300000000000068e+02 3.348900000000000432e+01 165 | 1.270559999999999974e+02 4.355280000000000200e+02 1.109249999999999972e+02 166 | 1.041400000000000006e+02 4.392549999999999955e+02 1.187049999999999983e+02 167 | 1.428050000000000068e+02 3.981639999999999873e+02 9.600799999999999557e+01 168 | 1.102270000000000039e+02 2.576040000000000418e+02 -1.580370000000000061e+02 169 | 1.151110000000000042e+02 3.234230000000000018e+02 1.187429999999999950e+02 170 | 1.439499999999999957e+01 4.336690000000000396e+02 8.641400000000000148e+01 171 | 9.064499999999999602e+01 2.890000000000000000e+02 9.927500000000000568e+01 172 | 9.034799999999999898e+01 2.807599999999999909e+02 1.027960000000000065e+02 173 | 7.437100000000000932e+01 5.093840000000000146e+02 8.281700000000000728e+01 174 | 1.722299999999999898e+01 1.577760000000000105e+02 2.288899999999999935e+01 175 | 1.271739999999999924e+02 2.875919999999999845e+02 -2.903699999999999903e+01 176 | 1.089939999999999998e+02 2.429959999999999809e+02 1.129860000000000042e+02 177 | 6.438600000000000989e+01 2.975440000000000396e+02 9.961700000000000443e+01 178 | 1.024270000000000067e+02 3.311159999999999854e+02 5.899000000000000021e+00 179 | 7.619299999999999784e+01 4.233849999999999909e+02 1.326589999999999918e+02 180 | 1.009159999999999968e+02 2.340020000000000095e+02 8.094800000000000750e+01 181 | 1.228479999999999990e+02 3.168899999999999864e+02 8.018300000000000693e+01 182 | 1.029670000000000130e+02 4.673690000000000282e+02 -1.681829999999999927e+02 183 | 8.274700000000001410e+01 2.233340000000000032e+02 1.209200000000000017e+02 184 | 1.425999999999999979e+01 3.882440000000000282e+02 7.536700000000000443e+01 185 | 3.363800000000000523e+01 5.144320000000000164e+02 1.328999999999999959e+00 186 | 3.017599999999999838e+01 3.538340000000000032e+02 9.105400000000000205e+01 187 | 6.923799999999999955e+01 4.394950000000000045e+02 1.240699999999999932e+02 188 | 1.048870000000000005e+02 2.636190000000000282e+02 -1.073420000000000130e+02 189 | 6.121800000000000352e+01 1.961190000000000282e+02 1.199950000000000045e+02 190 | 1.407949999999999875e+02 3.330740000000000123e+02 1.010170000000000101e+02 191 | 8.295600000000000307e+01 4.818219999999999459e+02 8.309000000000000341e+01 192 | 8.153600000000000136e+01 3.526219999999999573e+02 1.280819999999999936e+02 193 | 6.128899999999999437e+01 2.404290000000000020e+02 1.628449999999999989e+02 194 | 9.668600000000000705e+01 2.311320000000000050e+02 1.206570000000000107e+02 195 | 4.531700000000000017e+01 3.173299999999999841e+02 8.378700000000000614e+01 196 | 6.705400000000000205e+01 3.734499999999999886e+02 1.289519999999999982e+02 197 | 4.818999999999999773e+01 3.406830000000000496e+02 1.150310000000000059e+02 198 | 8.740999999999999659e+01 2.117450000000000045e+02 8.839499999999999602e+01 199 | 1.227489999999999952e+02 2.975249999999999773e+02 9.411599999999999966e+01 200 | 7.618500000000000227e+01 3.237909999999999968e+02 1.255420000000000016e+02 201 | 8.381600000000000250e+01 2.288420000000000130e+02 8.643600000000000705e+01 202 | 4.082399999999999807e+01 3.107520000000000095e+02 9.543000000000000682e+01 203 | 2.765199999999999747e+01 1.638050000000000068e+02 2.926099999999999923e+01 204 | 2.540800000000000125e+01 3.541030000000000086e+02 6.204399999999999693e+01 205 | 6.844800000000000750e+01 2.951179999999999950e+02 1.080550000000000068e+02 206 | 1.027729999999999961e+02 4.022030000000000314e+02 1.305099999999999909e+02 207 | 3.496199999999999619e+01 3.517369999999999663e+02 1.326299999999999990e+01 208 | 9.910299999999999443e+01 2.155959999999999752e+02 1.378199999999999932e+02 209 | 9.838100000000000023e+01 3.308750000000000000e+02 3.868000000000000327e+00 210 | 8.141400000000000148e+01 4.188059999999999832e+02 1.236179999999999950e+02 211 | 7.779600000000000648e+01 2.982079999999999700e+02 1.268329999999999984e+02 212 | 8.899500000000000455e+01 5.362709999999999582e+02 3.245300000000000296e+01 213 | 7.056600000000000250e+01 3.667950000000000159e+02 1.248420000000000130e+02 214 | 1.368619999999999948e+02 3.686380000000000337e+02 5.776800000000000068e+01 215 | 9.144200000000000728e+01 1.809859999999999900e+02 5.424100000000000676e+01 216 | 1.040779999999999887e+02 3.022459999999999809e+02 -4.569200000000000017e+01 217 | 9.229700000000001125e+01 1.898970000000000198e+02 4.866399999999999437e+01 218 | 1.639700000000000202e+01 3.701000000000000227e+02 4.871000000000000085e+01 219 | 2.574900000000000233e+01 1.632249999999999943e+02 2.802300000000000324e+01 220 | 7.224000000000000199e+00 1.456800000000000068e+02 2.494300000000000139e+01 221 | 2.969300000000000139e+01 3.466050000000000182e+02 1.942599999999999838e+01 222 | 3.542600000000000193e+01 3.284909999999999854e+02 4.665100000000000335e+01 223 | 1.178139999999999930e+02 3.301809999999999832e+02 1.238170000000000073e+02 224 | 7.608800000000000807e+01 3.420409999999999968e+02 1.443950000000000102e+02 225 | 3.596500000000000341e+01 5.177250000000000227e+02 -2.168499999999999872e+01 226 | 4.465100000000000335e+01 3.246840000000000259e+02 2.199399999999999977e+01 227 | 8.825600000000000023e+01 2.985729999999999791e+02 1.003629999999999995e+02 228 | 2.580199999999999960e+01 3.309669999999999845e+02 -1.690320000000000107e+02 229 | 3.246300000000000097e+01 5.466689999999999827e+02 -1.602009999999999934e+02 230 | 4.084700000000000131e+01 3.654169999999999732e+02 1.228760000000000048e+02 231 | 6.303899999999999437e+01 4.966440000000000055e+02 3.291700000000000159e+01 232 | 1.058370000000000033e+02 3.908100000000000023e+02 1.303220000000000027e+02 233 | 7.148100000000000875e+01 5.535219999999999345e+02 -6.940000000000000613e-01 234 | 8.094700000000000273e+01 5.259909999999999854e+02 6.043999999999999773e+01 235 | 7.297800000000000864e+01 5.319930000000000518e+02 5.261800000000000210e+01 236 | 6.971800000000000352e+01 4.202119999999999891e+02 1.271020000000000039e+02 237 | 8.614900000000000091e+01 2.940229999999999677e+02 1.062460000000000093e+02 238 | 7.750700000000000500e+01 3.849519999999999982e+02 1.407030000000000030e+02 239 | 3.041400000000000148e+01 3.221159999999999854e+02 -3.969800000000000040e+01 240 | 1.006889999999999930e+02 3.191600000000000250e+02 1.112409999999999997e+02 241 | 1.349489999999999839e+02 4.491709999999999923e+02 8.849200000000000443e+01 242 | 9.472100000000000364e+01 3.802309999999999945e+02 1.309689999999999941e+02 243 | 6.626699999999999591e+01 1.950359999999999729e+02 5.081899999999999551e+01 244 | 8.888899999999999579e+01 1.940009999999999764e+02 5.333500000000000085e+01 245 | 9.878700000000000614e+01 3.089019999999999868e+02 7.521200000000000330e+01 246 | 7.125100000000000477e+01 4.460090000000000146e+02 1.209710000000000036e+02 247 | 3.756900000000000261e+01 3.389399999999999977e+02 -3.747200000000000131e+01 248 | 1.385889999999999986e+02 3.860580000000000496e+02 8.738500000000000512e+01 249 | 7.452299999999999613e+01 5.505049999999999955e+02 1.392999999999999972e+01 250 | 2.213199999999999790e+01 3.597250000000000227e+02 4.410100000000000620e+01 251 | 7.595799999999999841e+01 3.995480000000000018e+02 1.356929999999999836e+02 252 | 1.223729999999999905e+02 2.965759999999999650e+02 7.210300000000000864e+01 253 | 1.307699999999999996e+01 4.117280000000000086e+02 8.605200000000000671e+01 254 | 5.112300000000000466e+01 3.108559999999999945e+02 6.007399999999999807e+01 255 | 1.238279999999999887e+02 2.966560000000000059e+02 -8.666000000000000369e+00 256 | 8.100600000000000023e+01 4.954469999999999459e+02 8.715100000000001046e+01 257 | 2.851599999999999824e+01 2.820520000000000209e+02 4.818399999999999750e+01 258 | 1.152049999999999983e+02 5.046100000000000136e+02 -1.405700000000000038e+01 259 | 8.364499999999999602e+01 2.749150000000000205e+02 1.086539999999999964e+02 260 | 8.936299999999999955e+01 3.998190000000000168e+02 1.308029999999999973e+02 261 | 7.333599999999999852e+01 3.345130000000000337e+02 1.053260000000000076e+02 262 | 9.182299999999999329e+01 3.775219999999999914e+02 1.329610000000000127e+02 263 | 1.151200000000000045e+01 4.001299999999999955e+02 5.679600000000000648e+01 264 | 7.035500000000000398e+01 5.497090000000000600e+02 1.942699999999999960e+01 265 | 1.100270000000000010e+02 1.788670000000000186e+02 2.879300000000000281e+01 266 | 1.282860000000000014e+02 3.214479999999999791e+02 6.600799999999999557e+01 267 | 1.895299999999999940e+01 4.851230000000000473e+02 6.002399999999999380e+01 268 | 6.399300000000000210e+01 2.084309999999999832e+02 9.724700000000001410e+01 269 | 1.542659999999999911e+02 1.091700000000000017e+02 4.080699999999999505e+01 270 | 1.374159999999999968e+02 4.062640000000000100e+02 1.071279999999999859e+02 271 | 1.519920000000000186e+02 6.886199999999999477e+01 8.646299999999999386e+01 272 | 1.259590000000000032e+02 4.054959999999999809e+02 1.226710000000000065e+02 273 | 3.628800000000000381e+01 4.632139999999999986e+02 8.880799999999999272e+01 274 | 4.629200000000000159e+01 5.238890000000000100e+02 -5.173399999999999466e+01 275 | 6.373399999999999466e+01 2.174990000000000236e+02 1.422889999999999873e+02 276 | 3.872099999999999653e+01 3.148879999999999768e+02 -1.679479999999999791e+02 277 | 7.686599999999999966e+01 5.559600000000000364e+02 -1.212800000000000011e+01 278 | 4.833399999999999608e+01 2.096450000000000102e+02 1.227610000000000099e+02 279 | 4.127499999999999858e+01 5.666250000000000000e+02 -1.476989999999999839e+02 280 | 3.604899999999999949e+01 5.055209999999999582e+02 -7.143300000000000693e+01 281 | 7.570499999999999829e+01 4.107169999999999845e+02 1.309290000000000020e+02 282 | 1.433129999999999882e+02 4.283439999999999941e+02 9.295799999999999841e+01 283 | 2.884300000000000352e+01 4.061830000000000496e+02 1.221839999999999975e+02 284 | 3.354699999999999704e+01 5.359619999999999891e+02 -8.465100000000001046e+01 285 | 7.352899999999999636e+01 2.977370000000000232e+02 9.591400000000000148e+01 286 | 8.485399999999999920e+01 3.893109999999999786e+02 1.326659999999999968e+02 287 | 6.699099999999999966e+01 2.426370000000000005e+02 6.876399999999999579e+01 288 | 7.411100000000000421e+01 5.201860000000000355e+02 7.301500000000000057e+01 289 | 1.177979999999999876e+02 4.926730000000000018e+02 -7.311399999999999011e+01 290 | 7.983499999999999375e+01 5.554249999999999545e+02 1.327299999999999969e+01 291 | 1.172299999999999898e+01 3.974039999999999964e+02 8.987500000000000000e+01 292 | 8.581299999999998818e+01 4.832590000000000146e+02 8.209999999999999432e+01 293 | 7.177199999999999136e+01 3.421299999999999955e+02 1.098710000000000093e+02 294 | 8.065800000000000125e+01 4.084169999999999732e+02 1.264010000000000105e+02 295 | 5.904399999999999693e+01 2.513259999999999934e+02 1.184429999999999978e+02 296 | 6.552899999999999636e+01 4.923640000000000327e+02 9.301899999999999125e+01 297 | 3.344300000000000495e+01 3.041250000000000000e+02 -1.279299999999999926e+01 298 | 5.706700000000000017e+01 2.526540000000000248e+02 1.232989999999999924e+02 299 | 9.975000000000000000e+01 2.365780000000000030e+02 8.697599999999999909e+01 300 | 4.373799999999999955e+01 3.149890000000000327e+02 -4.976699999999999591e+01 301 | 7.123999999999999666e+00 4.784780000000000086e+02 4.669600000000000506e+01 302 | 8.354299999999999216e+01 3.395500000000000114e+02 1.195029999999999859e+02 303 | 8.683499999999999375e+01 2.891250000000000000e+02 9.986899999999999977e+01 304 | 3.550900000000000034e+01 5.291979999999999791e+02 -8.862999999999999545e+01 305 | 3.440500000000000114e+01 3.511000000000000227e+02 9.910500000000000398e+01 306 | 7.629200000000000159e+01 2.424470000000000027e+02 1.484370000000000118e+02 307 | 6.250899999999999324e+01 4.894449999999999932e+02 4.453699999999999903e+01 308 | 6.399300000000000210e+01 2.979809999999999945e+02 1.299879999999999995e+02 309 | 5.927600000000000335e+01 3.160000000000000000e+02 1.078349999999999937e+02 310 | 5.678000000000000114e+01 3.017490000000000236e+02 3.746099999999999852e+01 311 | 3.076999999999999957e+01 4.070019999999999527e+02 1.228260000000000076e+02 312 | 9.493099999999999739e+01 5.044840000000000373e+02 4.083699999999999619e+01 313 | 7.017300000000000182e+01 2.388449999999999989e+02 9.611599999999999966e+01 314 | 7.096099999999999852e+01 4.236280000000000427e+02 1.160739999999999981e+02 315 | 1.342750000000000057e+02 3.615730000000000359e+02 3.555199999999999960e+01 316 | 8.387399999999999523e+01 3.277069999999999936e+02 1.088509999999999991e+02 317 | 1.103110000000000070e+02 4.830630000000000450e+02 -1.400469999999999970e+02 318 | 3.793199999999999505e+01 5.375209999999999582e+02 -1.575130000000000052e+02 319 | 8.445700000000000784e+01 3.418769999999999527e+02 1.244060000000000059e+02 320 | 1.081079999999999899e+02 3.844830000000000041e+02 1.289000000000000057e+02 321 | 2.421000000000000085e+01 3.645849999999999795e+02 8.737299999999999045e+01 322 | 1.006389999999999958e+02 2.678120000000000118e+02 -1.500140000000000100e+02 323 | 7.201899999999999125e+01 5.147010000000000218e+02 6.844800000000000750e+01 324 | 6.998699999999999477e+01 2.931229999999999905e+02 1.009220000000000113e+02 325 | 1.327299999999999969e+01 3.810430000000000064e+02 7.706499999999999773e+01 326 | 6.851600000000000534e+01 2.722459999999999809e+02 1.131099999999999994e+02 327 | 8.245200000000001239e+01 2.281719999999999970e+02 1.660850000000000080e+02 328 | 6.903699999999999193e+01 4.614730000000000132e+02 1.112510000000000048e+02 329 | 1.425759999999999934e+02 3.871890000000000214e+02 7.509699999999999420e+01 330 | 1.069549999999999983e+02 3.190079999999999814e+02 1.105760000000000076e+02 331 | 7.418000000000000682e+01 5.366409999999999627e+02 5.555300000000000438e+01 332 | 6.399000000000000199e+01 2.102909999999999968e+02 1.367179999999999893e+02 333 | 1.701999999999999957e+01 4.325059999999999718e+02 9.392600000000000193e+01 334 | 8.771799999999998931e+01 1.974340000000000259e+02 5.915399999999999636e+01 335 | 5.234600000000000364e+01 2.990339999999999918e+02 1.270939999999999941e+02 336 | 3.700999999999999801e+01 2.898570000000000277e+02 4.246000000000000085e+01 337 | 7.343200000000000216e+01 5.428759999999999764e+02 3.757900000000000063e+01 338 | 6.574600000000000932e+01 4.267940000000000396e+02 1.286160000000000139e+02 339 | 4.108800000000000097e+01 3.019089999999999918e+02 5.369100000000000250e+01 340 | 2.994000000000000128e+01 4.733740000000000236e+02 8.168399999999999750e+01 341 | 1.078449999999999989e+02 4.317380000000000564e+02 1.222750000000000057e+02 342 | 2.117599999999999838e+01 1.496129999999999995e+02 1.334200000000000053e+01 343 | 8.423000000000000398e+01 4.357019999999999982e+02 1.254000000000000057e+02 344 | 7.603699999999999193e+01 3.052679999999999723e+02 1.306610000000000014e+02 345 | 9.219499999999999318e+01 3.158879999999999768e+02 9.442600000000000193e+01 346 | 1.159889999999999901e+02 4.990669999999999504e+02 -1.032160000000000082e+02 347 | 3.671699999999999875e+01 5.376140000000000327e+02 -9.596299999999999386e+01 348 | 1.114379999999999882e+02 2.475379999999999825e+02 -1.698740000000000236e+02 349 | 7.527700000000000102e+01 4.075630000000000450e+02 1.355289999999999964e+02 350 | 6.634999999999999432e+01 2.999309999999999832e+02 8.917900000000000205e+01 351 | 8.095199999999999818e+01 2.779730000000000132e+02 9.869400000000000261e+01 352 | 3.376500000000000057e+01 5.401330000000000382e+02 -1.670349999999999966e+02 353 | 5.579699999999999704e+01 2.470690000000000168e+02 1.003829999999999956e+02 354 | 5.076800000000000068e+01 3.201560000000000059e+02 -1.650229999999999961e+02 355 | 1.310300000000000011e+02 2.892500000000000000e+02 -2.012699999999999889e+01 356 | 7.866100000000000136e+01 2.968070000000000164e+02 1.289020000000000152e+02 357 | 1.333940000000000055e+02 3.620910000000000082e+02 5.633299999999999841e+01 358 | 4.397999999999999687e+01 2.945939999999999941e+02 8.358299999999999841e+01 359 | 7.214300000000000068e+01 2.887570000000000050e+02 2.706699999999999662e+01 360 | 7.216100000000000136e+01 3.038520000000000323e+02 1.101710000000000065e+02 361 | 2.322100000000000009e+01 6.216499999999999915e+01 9.924399999999999977e+01 362 | 1.381700000000000017e+01 3.811069999999999709e+02 7.578799999999999670e+01 363 | 6.094699999999999562e+01 3.258290000000000077e+02 -1.687949999999999875e+02 364 | 7.454099999999999682e+01 2.849890000000000327e+02 1.169479999999999933e+02 365 | 1.074410000000000025e+02 4.957699999999999818e+02 -9.375900000000000034e+01 366 | 6.618099999999999739e+01 3.776280000000000427e+02 1.301380000000000052e+02 367 | -9.158999999999998920e+00 6.682600000000000762e+01 8.242499999999999716e+01 368 | 1.461310000000000002e+02 3.987980000000000018e+02 7.960600000000000875e+01 369 | 7.796500000000000341e+01 5.095049999999999955e+02 7.255800000000000693e+01 370 | 8.726600000000000534e+01 2.645950000000000273e+02 1.220240000000000009e+02 371 | 7.521099999999999852e+01 4.611309999999999718e+02 1.107450000000000045e+02 372 | 8.439000000000000057e+01 2.816440000000000055e+02 1.171689999999999969e+02 373 | 1.403770000000000095e+02 3.885659999999999741e+02 8.309399999999999409e+01 374 | 6.776600000000000534e+01 3.788360000000000127e+02 1.280200000000000102e+02 375 | 1.251129999999999995e+02 4.813190000000000168e+02 -1.652840000000000202e+02 376 | 3.494100000000000250e+01 4.279769999999999754e+02 1.199110000000000014e+02 377 | 8.485200000000000387e+01 2.723360000000000127e+02 -1.518220000000000027e+02 378 | 3.021000000000000085e+01 3.440699999999999932e+02 7.634600000000000364e+01 379 | 1.194590000000000032e+02 5.080780000000000314e+02 2.362500000000000000e+01 380 | 4.818800000000000239e+01 3.291369999999999436e+02 -1.252629999999999910e+02 381 | 3.063599999999999923e+01 3.352680000000000291e+02 -5.239399999999999835e+01 382 | 6.817799999999999727e+01 2.475430000000000064e+02 1.134000000000000057e+02 383 | -5.775000000000000355e+00 1.319819999999999993e+02 2.204899999999999949e+01 384 | 6.936899999999999977e+01 3.889689999999999941e+02 1.240160000000000053e+02 385 | 8.289299999999998647e+01 3.606859999999999786e+02 1.237800000000000011e+02 386 | 4.922299999999999898e+01 4.572390000000000327e+02 1.075690000000000026e+02 387 | 1.840800000000000125e+01 3.796309999999999718e+02 1.006139999999999901e+02 388 | 3.540800000000000125e+01 3.486700000000000159e+02 1.017189999999999941e+02 389 | 5.996300000000000097e+01 2.097459999999999809e+02 1.289039999999999964e+02 390 | 1.224950000000000045e+02 4.836510000000000105e+02 8.862999999999999545e+01 391 | 1.193170000000000073e+02 2.962729999999999677e+02 -6.559199999999999875e+01 392 | 5.151100000000000279e+01 1.869950000000000045e+02 4.754800000000000182e+01 393 | 8.828600000000000136e+01 3.371650000000000205e+02 1.212520000000000095e+02 394 | 3.307800000000000296e+01 3.243909999999999627e+02 1.134660000000000082e+02 395 | 1.768200000000000216e+01 4.837130000000000223e+02 6.544899999999999807e+01 396 | 5.078800000000000381e+01 3.092079999999999700e+02 4.991100000000000136e+01 397 | 9.132899999999999352e+01 3.010799999999999841e+02 1.708800000000000097e+01 398 | 5.844600000000000506e+01 2.667079999999999700e+02 1.198710000000000093e+02 399 | 8.177500000000000568e+01 3.338590000000000373e+02 1.202460000000000093e+02 400 | 2.213400000000000034e+01 6.468300000000000693e+01 1.081729999999999876e+02 401 | 1.259070000000000107e+02 5.057149999999999750e+02 3.558999999999999719e+00 402 | 7.789900000000000091e+01 2.218120000000000118e+02 8.246299999999999386e+01 403 | 6.729699999999999704e+01 4.047599999999999909e+02 1.311949999999999932e+02 404 | 7.352999999999999758e+00 4.795619999999999550e+02 4.938499999999999801e+01 405 | 4.536500000000000199e+01 3.354449999999999932e+02 1.061110000000000042e+02 406 | 6.671399999999999864e+01 2.207959999999999923e+02 1.180339999999999918e+02 407 | 4.792499999999999716e+01 5.267240000000000464e+02 -5.633399999999999608e+01 408 | 9.409999999999999476e-01 1.177689999999999912e+02 3.069300000000000139e+01 409 | 1.157740000000000009e+02 2.919230000000000018e+02 5.122699999999999676e+01 410 | 1.043970000000000056e+02 2.444000000000000057e+02 8.301299999999999102e+01 411 | 8.170999999999999375e+01 2.949039999999999964e+02 9.252700000000000102e+01 412 | 6.645399999999999352e+01 3.139399999999999977e+02 9.927799999999999159e+01 413 | 4.453899999999999437e+01 5.407759999999999536e+02 -1.352450000000000045e+02 414 | 9.087600000000000477e+01 1.808950000000000102e+02 6.090500000000000114e+01 415 | 5.922500000000000142e+01 3.074440000000000168e+02 1.013670000000000044e+02 416 | 9.358599999999999852e+01 3.003290000000000077e+02 1.029870000000000090e+02 417 | 7.884100000000000819e+01 2.641170000000000186e+02 1.291109999999999900e+02 418 | 8.320499999999999829e+01 4.711169999999999618e+02 9.730799999999999272e+01 419 | 7.954099999999999682e+01 4.663439999999999941e+02 1.048939999999999912e+02 420 | 8.473700000000000898e+01 3.253269999999999982e+02 -6.957000000000000739e+00 421 | 1.262740000000000009e+02 3.173240000000000123e+02 6.495699999999999363e+01 422 | 3.751400000000000290e+01 3.112250000000000227e+02 -4.923799999999999955e+01 423 | 7.685200000000000387e+01 3.816100000000000136e+02 1.143359999999999985e+02 424 | 8.314000000000000057e+00 1.298360000000000127e+02 2.772400000000000020e+01 425 | 5.663800000000000523e+01 5.008949999999999818e+02 3.686299999999999955e+01 426 | 4.555499999999999972e+01 3.578680000000000518e+02 1.236460000000000008e+02 427 | 7.675900000000000034e+01 2.694649999999999750e+02 1.230579999999999927e+02 428 | 3.581499999999999773e+01 5.236920000000000073e+02 -9.258100000000000307e+01 429 | 3.850399999999999778e+01 4.465550000000000068e+02 1.090179999999999865e+02 430 | 4.776100000000000279e+01 3.254459999999999695e+02 -1.603329999999999984e+02 431 | 9.274099999999999966e+01 2.988050000000000068e+02 8.486499999999999488e+01 432 | 9.263899999999999579e+01 2.330440000000000111e+02 1.140300000000000011e+02 433 | 7.673999999999999488e+01 1.859490000000000123e+02 5.843199999999999505e+01 434 | 2.104199999999999804e+01 3.274270000000000209e+02 9.745900000000000318e+01 435 | 6.051600000000000534e+01 3.348069999999999595e+02 -1.199300000000000068e+02 436 | 6.859100000000000819e+01 3.752980000000000018e+02 1.244699999999999989e+02 437 | 1.037750000000000057e+02 1.877920000000000016e+02 6.649099999999999966e+01 438 | 5.796199999999999619e+01 2.657669999999999959e+02 1.203120000000000118e+02 439 | 6.457200000000000273e+01 2.289279999999999973e+02 1.200220000000000056e+02 440 | 1.241749999999999972e+02 3.027169999999999845e+02 5.943299999999999983e+01 441 | 7.542399999999999238e+01 1.826719999999999970e+02 5.886999999999999744e+01 442 | 1.136299999999999955e+02 2.766800000000000068e+02 -1.140979999999999990e+02 443 | 1.075100000000000051e+02 2.190130000000000052e+02 1.309199999999999875e+02 444 | 7.627899999999999636e+01 4.470669999999999504e+02 1.210199999999999960e+02 445 | 4.663399999999999324e+01 5.486030000000000655e+02 -1.279360000000000070e+02 446 | 3.150099999999999767e+01 3.216419999999999959e+02 -3.838700000000000045e+01 447 | 1.163499999999999943e+02 2.928959999999999582e+02 -7.943300000000000693e+01 448 | 1.325910000000000082e+02 3.629469999999999459e+02 7.945999999999999375e+01 449 | 8.720299999999998875e+01 3.386200000000000045e+02 1.142479999999999905e+02 450 | 7.888999999999999346e+00 4.839580000000000268e+02 4.090899999999999892e+01 451 | 7.575100000000000477e+01 3.438469999999999800e+02 1.330780000000000030e+02 452 | 8.250499999999999545e+01 2.772210000000000036e+02 1.281970000000000027e+02 453 | 7.752600000000001046e+01 3.155720000000000027e+02 -3.758999999999999897e+00 454 | 1.234620000000000033e+02 3.507440000000000282e+02 9.718299999999999272e+01 455 | 9.181700000000000728e+01 2.877930000000000064e+02 9.946299999999999386e+01 456 | 8.039900000000000091e+01 3.293969999999999914e+02 1.192070000000000078e+02 457 | 9.118200000000000216e+01 2.660690000000000168e+02 -1.397680000000000007e+02 458 | 6.659199999999999875e+01 2.112640000000000100e+02 1.061129999999999995e+02 459 | 9.300499999999999545e+01 4.531419999999999959e+02 1.143270000000000124e+02 460 | 5.882300000000000040e+01 2.144000000000000057e+02 1.379729999999999848e+02 461 | 4.009100000000000108e+01 3.390600000000000023e+02 -1.355190000000000055e+02 462 | 4.217300000000000182e+01 3.179190000000000396e+02 8.845799999999999841e+01 463 | 1.073010000000000019e+02 1.731299999999999955e+02 4.468399999999999750e+01 464 | 1.229370000000000118e+02 4.898530000000000086e+02 -6.711199999999999477e+01 465 | 6.420199999999999818e+01 2.972520000000000095e+02 1.023460000000000036e+02 466 | 1.063520000000000039e+02 2.840409999999999968e+02 -7.854200000000000159e+01 467 | 9.925200000000000955e+01 3.293410000000000082e+02 1.314219999999999970e+02 468 | 1.316499999999999915e+01 4.276619999999999777e+02 8.038200000000000500e+01 469 | 8.241599999999999682e+01 2.463569999999999993e+02 1.160660000000000025e+02 470 | 8.442100000000000648e+01 3.635289999999999964e+02 1.271120000000000090e+02 471 | 3.913700000000000045e+01 5.678799999999999955e+02 -1.386579999999999870e+02 472 | 7.515000000000000568e+01 3.265179999999999723e+02 1.231920000000000073e+02 473 | -1.714000000000000057e+01 9.705500000000000682e+01 5.734399999999999409e+01 474 | 5.266899999999999693e+01 3.051940000000000168e+02 4.319600000000000506e+01 475 | 3.290400000000000347e+01 5.504279999999999973e+02 -1.463170000000000073e+02 476 | 6.517199999999999704e+01 2.746290000000000191e+02 1.068320000000000078e+02 477 | 9.962500000000000000e+01 2.282609999999999957e+02 8.241400000000000148e+01 478 | 3.260999999999999943e+01 5.123089999999999691e+02 2.497800000000000153e+01 479 | 1.028429999999999893e+02 4.553609999999999900e+02 1.103760000000000048e+02 480 | 3.000800000000000267e+01 5.093590000000000373e+02 2.392999999999999972e+01 481 | 8.818899999999999295e+01 2.941519999999999868e+02 4.536899999999999977e+01 482 | 8.784799999999999898e+01 2.758190000000000168e+02 -1.282249999999999943e+02 483 | -4.720000000000000306e-01 1.168910000000000053e+02 3.235800000000000409e+01 484 | 6.101399999999999579e+01 3.750230000000000246e+02 1.290159999999999911e+02 485 | 1.243499999999999943e+02 5.118399999999999750e+02 2.396599999999999753e+01 486 | 1.545800000000000018e+01 3.802950000000000159e+02 8.379799999999998761e+01 487 | 7.511399999999999011e+01 4.976269999999999527e+02 8.632299999999999329e+01 488 | 6.929500000000000171e+01 3.591190000000000282e+02 1.309389999999999930e+02 489 | 6.565699999999999648e+01 2.604110000000000014e+02 1.185450000000000017e+02 490 | 5.662100000000000222e+01 5.015019999999999527e+02 3.775099999999999767e+01 491 | -5.429999999999999272e-01 6.371699999999999875e+01 9.022700000000000387e+01 492 | 1.014010000000000105e+02 2.348779999999999859e+02 1.164629999999999939e+02 493 | 9.271700000000001296e+01 2.093159999999999741e+02 8.815899999999999181e+01 494 | 4.241799999999999926e+01 3.164680000000000177e+02 -1.387800000000000011e+01 495 | 3.111800000000000210e+01 5.357989999999999782e+02 -1.663329999999999984e+02 496 | 7.488400000000000034e+01 4.851819999999999595e+02 9.509000000000000341e+01 497 | 9.968099999999999739e+01 2.765849999999999795e+02 -1.068059999999999974e+02 498 | 7.013600000000000989e+01 3.977789999999999964e+02 1.278900000000000006e+02 499 | 1.694659999999999798e+02 9.629000000000000625e+01 4.604299999999999926e+01 500 | 1.393149999999999977e+02 4.189859999999999900e+02 1.024060000000000059e+02 501 | 7.022499999999999432e+01 3.875350000000000250e+02 1.233199999999999932e+02 502 | 6.974899999999999523e+01 4.291990000000000123e+02 1.225670000000000073e+02 503 | 1.207989999999999924e+02 3.217409999999999854e+02 9.502100000000000080e+01 504 | 1.285970000000000084e+02 3.879950000000000045e+02 1.106420000000000101e+02 505 | 6.669800000000000750e+01 3.198799999999999955e+02 -1.680970000000000084e+02 506 | 8.814000000000000057e+01 2.676680000000000064e+02 -1.502980000000000018e+02 507 | 7.578799999999999670e+01 3.865109999999999673e+02 1.376390000000000100e+02 508 | 7.484600000000000364e+01 3.377769999999999868e+02 1.272620000000000005e+02 509 | 4.994699999999999562e+01 5.387839999999999918e+02 -1.610989999999999895e+02 510 | 3.418099999999999739e+01 5.107969999999999686e+02 3.234000000000000341e+01 511 | 6.170799999999999841e+01 2.996759999999999877e+02 1.218429999999999893e+02 512 | 7.292999999999999261e+00 1.312139999999999986e+02 1.584599999999999831e+01 513 | 6.923300000000000409e+01 2.891419999999999959e+02 1.139529999999999887e+02 514 | 4.258399999999999608e+01 3.021469999999999914e+02 8.803000000000000114e+01 515 | 7.681900000000000261e+01 5.068659999999999854e+02 7.380299999999999727e+01 516 | 9.418799999999998818e+01 2.249579999999999984e+02 1.161979999999999933e+02 517 | 4.452000000000000313e+01 3.556359999999999673e+02 1.216389999999999958e+02 518 | 6.842300000000000182e+01 2.895550000000000068e+02 9.866100000000000136e+01 519 | 1.188960000000000008e+02 4.941630000000000109e+02 -1.466320000000000050e+02 520 | 1.315260000000000105e+02 3.630369999999999777e+02 2.666199999999999903e+01 521 | 5.408800000000000097e+01 3.211759999999999877e+02 -4.400300000000000011e+01 522 | 3.854099999999999682e+01 5.172000000000000455e+02 -2.165300000000000225e+01 523 | 1.779200000000000159e+01 3.964139999999999873e+02 1.089120000000000061e+02 524 | 8.712600000000000477e+01 2.691040000000000418e+02 -1.565570000000000164e+02 525 | -1.024000000000000021e+01 9.422899999999999920e+01 5.586100000000000421e+01 526 | 3.718500000000000227e+01 3.453489999999999895e+02 9.772599999999999909e+01 527 | 8.602200000000000557e+01 1.891979999999999791e+02 5.380600000000000449e+01 528 | 9.925299999999998590e+01 5.104909999999999854e+02 3.841199999999999903e+01 529 | 5.241700000000000159e+01 3.390289999999999964e+02 -1.225210000000000008e+02 530 | 1.003589999999999947e+02 2.718040000000000305e+02 -1.363389999999999986e+02 531 | 8.853700000000000614e+01 2.893190000000000168e+02 1.019599999999999937e+02 532 | 9.308299999999999841e+01 3.437530000000000427e+02 1.186020000000000039e+02 533 | 5.471999999999999886e+01 4.907219999999999800e+02 5.507899999999999352e+01 534 | 1.281409999999999911e+02 3.486419999999999959e+02 7.897700000000000387e+01 535 | 1.011599999999999966e+01 4.025480000000000018e+02 5.911199999999999477e+01 536 | 5.970399999999999352e+01 3.339080000000000155e+02 -1.528940000000000055e+02 537 | 5.648799999999999955e+01 2.408490000000000180e+02 9.028200000000001069e+01 538 | 8.346799999999998931e+01 3.924859999999999900e+02 1.251729999999999876e+02 539 | 8.416299999999999670e+01 2.425049999999999955e+02 9.879299999999999216e+01 540 | 1.000470000000000113e+02 3.082280000000000086e+02 8.179300000000000637e+01 541 | 8.205599999999999739e+01 2.882059999999999604e+02 1.049710000000000036e+02 542 | 1.171850000000000023e+02 4.750500000000000114e+02 9.126100000000000989e+01 543 | 1.015049999999999955e+02 2.400459999999999923e+02 8.376899999999999125e+01 544 | 1.166929999999999978e+02 3.112889999999999873e+02 1.174290000000000020e+02 545 | 1.230879999999999939e+02 5.135480000000000018e+02 2.573900000000000077e+01 546 | 3.635699999999999932e+01 3.431809999999999832e+02 -1.366629999999999825e+02 547 | 1.104000000000000057e+02 2.884150000000000205e+02 -5.131499999999999773e+01 548 | 7.660399999999999920e+01 4.592540000000000191e+02 1.161889999999999930e+02 549 | 2.786899999999999977e+01 4.272900000000000205e+02 1.118089999999999975e+02 550 | 5.821899999999999409e+01 3.613559999999999945e+02 1.285430000000000064e+02 551 | 9.640899999999999181e+01 3.033229999999999791e+02 3.493099999999999739e+01 552 | 3.943999999999999773e+01 3.107270000000000323e+02 5.168999999999999595e+00 553 | 3.737400000000000233e+01 3.224890000000000327e+02 -6.664199999999999591e+01 554 | 1.189839999999999947e+02 4.790409999999999968e+02 8.781000000000000227e+01 555 | 4.357600000000000051e+01 3.185969999999999800e+02 7.893399999999999750e+01 556 | 6.786899999999999977e+01 3.307280000000000086e+02 1.064670000000000130e+02 557 | 1.231260000000000048e+02 5.046790000000000305e+02 -2.935099999999999909e+01 558 | 1.154440000000000026e+02 4.947799999999999727e+02 -1.112720000000000056e+02 559 | 1.742200000000000060e+01 4.198119999999999550e+02 9.978900000000000148e+01 560 | 7.384399999999999409e+01 2.155109999999999957e+02 7.935899999999999466e+01 561 | 9.901299999999999102e+01 2.131640000000000157e+02 1.340279999999999916e+02 562 | 5.198499999999999943e+01 3.328930000000000291e+02 -1.112999999999999972e+02 563 | 1.140520000000000067e+02 4.714880000000000564e+02 -1.629830000000000041e+02 564 | 1.148020000000000067e+02 4.944890000000000327e+02 -1.383439999999999941e+02 565 | 3.142900000000000205e+01 5.132939999999999827e+02 2.462900000000000134e+01 566 | 3.792399999999999949e+01 3.365930000000000177e+02 1.000540000000000020e+02 567 | 7.774899999999999523e+01 3.187370000000000232e+02 9.656499999999999773e+01 568 | 7.020600000000000307e+01 3.193430000000000177e+02 -5.391000000000000014e+00 569 | 2.102100000000000080e+01 2.997980000000000018e+02 3.636400000000000432e+01 570 | 1.436460000000000150e+02 4.885809999999999604e+02 6.141199999999999903e+01 571 | 1.102239999999999895e+02 3.262579999999999814e+02 9.444200000000000728e+01 572 | 1.253429999999999893e+02 3.973780000000000427e+02 1.204010000000000105e+02 573 | 7.629399999999999693e+01 5.334479999999999791e+02 6.337800000000000011e+01 574 | 5.094100000000000250e+01 5.339310000000000400e+02 -1.670979999999999848e+02 575 | 1.015760000000000076e+02 2.110329999999999870e+02 1.075779999999999887e+02 576 | 9.156900000000000261e+01 2.346670000000000016e+02 1.699070000000000107e+02 577 | 7.074699999999999989e+01 1.814159999999999968e+02 6.863100000000000023e+01 578 | 9.178900000000000148e+01 2.673340000000000032e+02 -1.275499999999999972e+02 579 | 7.756600000000000250e+01 4.304940000000000282e+02 1.272800000000000011e+02 580 | 1.117989999999999924e+02 3.329089999999999918e+02 7.661000000000000476e+00 581 | 4.045000000000000284e+01 3.061040000000000418e+02 5.110899999999999466e+01 582 | 6.432899999999999352e+01 2.339350000000000023e+02 1.143829999999999956e+02 583 | 7.545600000000000307e+01 3.435459999999999923e+02 1.066099999999999994e+02 584 | 9.546399999999999864e+01 2.412890000000000157e+02 1.624530000000000030e+02 585 | 4.924800000000000466e+01 2.305469999999999970e+02 1.150039999999999907e+02 586 | 4.777799999999999869e+01 2.418229999999999791e+02 1.198610000000000042e+02 587 | 6.393100000000000449e+01 3.438709999999999809e+02 -1.614960000000000093e+02 588 | 4.238100000000000023e+01 3.242679999999999723e+02 1.418999999999999950e+01 589 | 1.205949999999999989e+02 3.468500000000000227e+02 1.002710000000000008e+02 590 | 1.095310000000000059e+02 2.777880000000000109e+02 -1.158420000000000130e+02 591 | 1.600459999999999923e+02 1.248929999999999865e+02 2.431599999999999895e+01 592 | 1.013279999999999887e+02 3.627419999999999618e+02 1.290449999999999875e+02 593 | 1.246550000000000011e+02 5.127519999999999527e+02 3.402000000000000313e+01 594 | 3.810099999999999909e+01 3.939959999999999809e+02 1.258539999999999992e+02 595 | 8.657700000000001239e+01 4.779240000000000350e+02 1.035210000000000008e+02 596 | 8.495200000000001239e+01 2.817090000000000032e+02 9.701600000000000534e+01 597 | 3.997899999999999920e+01 5.300509999999999309e+02 -7.218999999999999773e+01 598 | 1.156470000000000056e+02 2.984049999999999727e+02 7.116700000000000159e+01 599 | 1.183320000000000078e+02 4.538990000000000009e+02 1.026260000000000048e+02 600 | 1.076999999999999957e+01 3.954830000000000041e+02 5.381499999999999773e+01 601 | 5.975800000000000267e+01 4.315069999999999482e+02 1.266929999999999978e+02 602 | 8.909100000000000819e+01 1.957500000000000000e+02 1.106809999999999974e+02 603 | 1.136539999999999964e+02 2.672629999999999768e+02 -1.572060000000000173e+02 604 | 1.603890000000000100e+02 8.125700000000000500e+01 5.657500000000000284e+01 605 | 3.160000000000000142e+01 3.114619999999999891e+02 8.414600000000000080e+01 606 | 4.267600000000000193e+01 3.160819999999999936e+02 -1.356799999999999962e+01 607 | 9.759100000000000819e+01 4.106560000000000059e+02 1.284590000000000032e+02 608 | 8.717200000000001125e+01 2.379000000000000057e+02 1.141400000000000006e+02 609 | 1.103050000000000068e+02 3.180500000000000114e+02 6.112899999999999778e+01 610 | 8.407600000000000762e+01 3.774669999999999845e+02 1.327599999999999909e+02 611 | 8.264499999999999602e+01 4.960919999999999845e+02 8.156999999999999318e+01 612 | 2.368599999999999994e+01 4.485180000000000291e+02 9.204099999999999682e+01 613 | 3.412400000000000233e+01 3.441340000000000146e+02 9.470200000000001239e+01 614 | 3.716400000000000148e+01 3.120420000000000300e+02 -4.967399999999999949e+01 615 | 8.192299999999998761e+01 3.279649999999999750e+02 -9.397000000000000242e+00 616 | 3.901200000000000045e+01 5.283519999999999754e+02 -1.021920000000000073e+02 617 | 7.793600000000000705e+01 2.788389999999999986e+02 2.120199999999999818e+01 618 | 1.154339999999999975e+02 2.725350000000000250e+02 -1.640099999999999909e+02 619 | 5.964399999999999835e+01 2.017630000000000052e+02 1.225810000000000031e+02 620 | 1.131670000000000016e+02 4.827049999999999841e+02 -1.603509999999999991e+02 621 | 1.146490000000000009e+02 2.969890000000000327e+02 -5.100800000000000267e+01 622 | 4.147800000000000153e+01 3.287040000000000077e+02 -1.279029999999999916e+02 623 | 1.327969999999999970e+02 3.047149999999999750e+02 8.767200000000001125e+01 624 | 1.628310000000000173e+02 1.092010000000000076e+02 3.002899999999999991e+01 625 | 1.310049999999999955e+02 4.460299999999999727e+02 9.804200000000000159e+01 626 | 8.132600000000000762e+01 4.410450000000000159e+02 1.098089999999999975e+02 627 | 7.550700000000000500e+01 3.431380000000000337e+02 1.288940000000000055e+02 628 | 7.414600000000000080e+01 4.779240000000000350e+02 1.089810000000000088e+02 629 | 7.738700000000000045e+01 4.184130000000000109e+02 1.112520000000000095e+02 630 | 9.575299999999998590e+01 2.093659999999999854e+02 9.836100000000000421e+01 631 | 7.345900000000000318e+01 4.956919999999999504e+02 8.641700000000000159e+01 632 | 9.133299999999999841e+01 3.673480000000000132e+02 1.297760000000000105e+02 633 | 1.086679999999999922e+02 5.043690000000000282e+02 -1.545810000000000173e+02 634 | 1.215289999999999964e+02 4.429680000000000177e+02 1.075079999999999956e+02 635 | 7.746500000000000341e+01 4.041560000000000059e+02 1.310420000000000016e+02 636 | 1.165970000000000084e+02 3.270699999999999932e+02 7.170900000000000318e+01 637 | 5.093999999999999773e+01 2.495059999999999718e+02 1.328890000000000100e+02 638 | 2.876800000000000068e+01 4.788640000000000327e+02 8.249399999999999977e+01 639 | 7.087199999999999989e+01 3.350009999999999764e+02 1.143900000000000006e+02 640 | 4.070799999999999841e+01 2.928799999999999955e+02 3.888400000000000034e+01 641 | 8.325799999999999557e+01 3.345910000000000082e+02 1.106239999999999952e+02 642 | 1.246629999999999967e+02 3.366330000000000382e+02 3.749099999999999966e+01 643 | 1.098860000000000099e+02 3.259649999999999750e+02 9.517499999999999716e+01 644 | 8.323700000000000898e+01 5.003750000000000000e+02 8.718899999999999295e+01 645 | 3.460399999999999920e+01 5.305439999999999827e+02 -1.691419999999999959e+02 646 | 1.063900000000000006e+02 2.787400000000000091e+02 -1.367539999999999907e+02 647 | 1.462489999999999952e+02 4.082580000000000382e+02 7.379999999999999716e+01 648 | 1.173079999999999927e+02 4.877440000000000282e+02 -1.601860000000000070e+02 649 | 8.220900000000000318e+01 5.380729999999999791e+02 4.493600000000000705e+01 650 | 8.786299999999999955e+01 2.980360000000000014e+02 9.488700000000000045e+01 651 | 1.148620000000000090e+02 4.962239999999999895e+02 4.362500000000000000e+01 652 | 4.964999999999999858e+01 5.409519999999999982e+02 -1.631550000000000011e+02 653 | 7.973000000000000398e+01 2.699110000000000014e+02 1.044329999999999927e+02 654 | 4.270899999999999608e+01 1.798459999999999752e+02 3.654500000000000171e+01 655 | 1.140029999999999859e+02 2.673750000000000000e+02 -1.533679999999999950e+02 656 | 1.050499999999999972e+02 4.215230000000000246e+02 1.267970000000000113e+02 657 | 4.513399999999999324e+01 5.130409999999999400e+02 -7.693500000000000227e+01 658 | -9.744999999999999218e+00 8.753200000000001069e+01 6.635999999999999943e+01 659 | 4.624199999999999733e+01 2.100890000000000271e+02 1.232740000000000009e+02 660 | 1.403990000000000009e+02 3.780480000000000018e+02 5.332999999999999829e+01 661 | 7.616199999999999193e+01 3.516530000000000200e+02 1.369439999999999884e+02 662 | 1.390379999999999825e+02 3.797459999999999809e+02 7.679399999999999693e+01 663 | 6.543300000000000693e+01 3.808109999999999786e+02 1.311999999999999886e+02 664 | 1.127200000000000024e+01 3.976480000000000246e+02 8.260600000000000875e+01 665 | 1.019389999999999930e+02 4.929719999999999800e+02 -7.630599999999999739e+01 666 | 6.127799999999999869e+01 3.302880000000000109e+02 -1.596949999999999932e+02 667 | 3.782500000000000284e+01 3.290109999999999673e+02 4.143299999999999983e+01 668 | 4.832699999999999818e+01 1.695070000000000050e+02 4.110000000000000142e+01 669 | 1.122800000000000011e+02 3.012719999999999914e+02 -2.019000000000000128e+01 670 | 4.648399999999999466e+01 5.372740000000000009e+02 -1.676949999999999932e+02 671 | 4.921899999999999409e+01 5.342390000000000327e+02 -8.913700000000000045e+01 672 | 1.254370000000000118e+02 3.087850000000000250e+02 4.646600000000000108e+01 673 | 4.497200000000000131e+01 3.229499999999999886e+02 1.658099999999999952e+01 674 | 1.136179999999999950e+02 5.059130000000000109e+02 -1.506510000000000105e+02 675 | 6.304399999999999693e+01 3.104990000000000236e+02 1.014500000000000028e+02 676 | 1.208829999999999956e+02 4.685369999999999777e+02 -1.674449999999999932e+02 677 | 1.062999999999999972e+02 4.891480000000000246e+02 4.294800000000000040e+01 678 | 5.370100000000000051e+01 1.986829999999999927e+02 1.224249999999999972e+02 679 | 7.962000000000000455e+01 5.544259999999999309e+02 -5.855999999999999872e+00 680 | 8.959899999999998954e+01 4.002749999999999773e+02 1.317690000000000055e+02 681 | 1.381160000000000139e+02 3.715269999999999868e+02 5.173199999999999932e+01 682 | 8.498200000000001353e+01 3.505149999999999864e+02 1.258220000000000027e+02 683 | 3.252599999999999625e+01 3.620690000000000168e+02 1.036470000000000056e+02 684 | 3.745199999999999818e+01 3.078360000000000127e+02 8.782500000000000284e+01 685 | 7.523399999999999466e+01 2.884549999999999841e+02 9.332200000000000273e+01 686 | 1.140279999999999916e+02 3.646140000000000327e+02 1.216529999999999916e+02 687 | 1.002259999999999991e+02 3.242629999999999768e+02 6.336000000000000298e+00 688 | 4.202499999999999858e+01 3.254329999999999927e+02 7.163200000000000500e+01 689 | 9.726299999999999102e+01 3.515659999999999741e+02 1.242120000000000033e+02 690 | 8.443600000000000705e+01 4.091490000000000009e+02 1.321610000000000014e+02 691 | 7.667100000000000648e+01 5.275910000000000082e+02 7.033499999999999375e+01 692 | 1.232510000000000048e+02 3.413700000000000045e+02 6.503000000000000114e+01 693 | 1.303000000000000114e+02 4.842839999999999918e+02 5.158399999999999608e+01 694 | 8.664799999999999613e+01 2.644279999999999973e+02 1.259979999999999905e+02 695 | 2.835900000000000176e+01 3.153269999999999982e+02 8.838400000000000034e+01 696 | 6.629500000000000171e+01 2.851100000000000136e+02 1.027399999999999949e+02 697 | 8.766100000000000136e+01 2.037459999999999809e+02 1.253939999999999912e+02 698 | 1.047820000000000107e+02 2.732409999999999854e+02 -1.368000000000000114e+02 699 | 9.456399999999999295e+01 3.870699999999999932e+02 1.289729999999999848e+02 700 | 8.390899999999999181e+01 4.989319999999999595e+02 9.033100000000000307e+01 701 | 1.091770000000000067e+02 3.213999999999999773e+02 1.096860000000000070e+02 702 | 8.334499999999999886e+01 2.152740000000000009e+02 6.462600000000000477e+01 703 | 1.003120000000000118e+02 3.107659999999999627e+02 8.617299999999998761e+01 704 | 1.142960000000000065e+02 2.506430000000000007e+02 -1.692590000000000146e+02 705 | 7.796300000000000807e+01 3.642400000000000091e+02 1.406520000000000152e+02 706 | 1.129010000000000105e+02 3.274639999999999986e+02 7.301200000000000045e+01 707 | 1.399650000000000034e+02 3.951430000000000291e+02 9.851299999999999102e+01 708 | 5.130300000000000438e+01 3.230799999999999841e+02 -3.335399999999999920e+01 709 | 7.936899999999999977e+01 5.528129999999999882e+02 2.178300000000000125e+01 710 | 3.427199999999999847e+01 5.505309999999999491e+02 -1.398199999999999932e+02 711 | 8.839100000000000534e+01 2.934909999999999854e+02 6.370199999999999818e+01 712 | 1.384519999999999982e+02 3.379200000000000159e+02 9.856200000000001182e+01 713 | 8.376399999999999579e+01 4.283439999999999941e+02 1.283120000000000118e+02 714 | 5.856899999999999551e+01 2.348690000000000282e+02 7.058899999999999864e+01 715 | 7.721200000000000330e+01 3.246390000000000100e+02 1.338629999999999995e+02 716 | 1.605000000000000071e+01 3.706510000000000105e+02 3.597200000000000131e+01 717 | 6.321000000000000085e+01 4.899599999999999795e+02 8.499099999999999966e+01 718 | 4.258399999999999608e+01 2.947769999999999868e+02 7.446899999999999409e+01 719 | 8.302400000000000091e+01 2.388820000000000050e+02 9.686599999999999966e+01 720 | 3.927900000000000347e+01 3.393399999999999750e+02 -1.440500000000000114e+02 721 | 7.043099999999999739e+01 3.660799999999999841e+02 1.280089999999999861e+02 722 | 1.372390000000000043e+02 3.762080000000000268e+02 8.495000000000000284e+01 723 | 6.939100000000000534e+01 5.229189999999999827e+02 6.205300000000000438e+01 724 | 6.591700000000000159e+01 4.945889999999999986e+02 9.575000000000000000e+01 725 | 7.889799999999999613e+01 3.648690000000000282e+02 1.509660000000000082e+02 726 | 7.532899999999999352e+01 4.004449999999999932e+02 1.164039999999999964e+02 727 | 8.618099999999999739e+01 4.948769999999999527e+02 7.885800000000000409e+01 728 | -1.700600000000000023e+01 7.447199999999999420e+01 7.363500000000000512e+01 729 | 6.117300000000000182e+01 2.992669999999999959e+02 2.513800000000000168e+01 730 | 5.768100000000000449e+01 3.890790000000000077e+02 1.296979999999999791e+02 731 | 9.819499999999999318e+01 1.809340000000000259e+02 5.731300000000000239e+01 732 | 2.858599999999999852e+01 3.334639999999999986e+02 -4.707000000000000028e+01 733 | 8.574099999999999966e+01 3.023319999999999936e+02 9.592299999999998761e+01 734 | 5.419200000000000017e+01 3.322250000000000227e+02 1.119899999999999949e+02 735 | 7.313400000000000034e+01 2.783109999999999786e+02 1.254110000000000014e+02 736 | 1.314700000000000024e+01 3.982210000000000036e+02 9.516200000000000614e+01 737 | 1.318660000000000139e+02 4.834800000000000182e+02 8.023399999999999466e+01 738 | 1.104389999999999930e+02 3.182719999999999914e+02 6.090600000000000591e+01 739 | 5.709600000000000364e+01 3.406449999999999818e+02 -1.324270000000000209e+02 740 | 2.617999999999999972e+01 3.522509999999999764e+02 3.364199999999999591e+01 741 | 1.077339999999999947e+02 3.389190000000000396e+02 4.168999999999999595e+00 742 | 5.537399999999999523e+01 3.000600000000000023e+02 1.315989999999999895e+02 743 | 6.783800000000000807e+01 2.779879999999999995e+02 1.042160000000000082e+02 744 | 7.096099999999999852e+01 3.234890000000000327e+02 1.439000000000000057e+00 745 | 4.585999999999999943e+01 5.419669999999999845e+02 -1.369890000000000043e+02 746 | 3.791199999999999903e+01 3.266209999999999809e+02 4.163399999999999324e+01 747 | 1.388100000000000023e+02 1.570089999999999861e+02 2.115300000000000225e+01 748 | 1.466289999999999907e+02 1.219210000000000065e+02 3.046599999999999753e+01 749 | 1.133689999999999998e+02 2.158970000000000198e+02 1.278250000000000028e+02 750 | 5.186299999999999955e+01 3.158059999999999832e+02 -1.708040000000000020e+02 751 | 5.159100000000000108e+01 3.327519999999999527e+02 -1.513509999999999991e+02 752 | 8.254899999999999238e+01 3.566019999999999754e+02 1.275320000000000107e+02 753 | 3.894100000000000250e+01 3.088979999999999677e+02 4.038000000000000256e+01 754 | 8.349299999999999500e+01 3.141899999999999977e+02 1.048860000000000099e+02 755 | 6.825799999999999557e+01 3.385640000000000214e+02 -1.645349999999999966e+02 756 | 1.483799999999999919e+01 3.790199999999999818e+02 7.697100000000000364e+01 757 | 1.046979999999999933e+02 5.036340000000000146e+02 -5.781000000000000227e+01 758 | 2.273499999999999943e+01 1.423070000000000164e+02 2.241099999999999781e+01 759 | 3.366100000000000136e+01 4.379390000000000214e+02 1.127139999999999986e+02 760 | 7.798899999999999011e+01 3.655880000000000223e+02 1.425639999999999930e+02 761 | 7.635300000000000864e+01 4.969880000000000564e+02 8.704700000000001125e+01 762 | 1.483269999999999982e+02 4.802519999999999527e+02 4.548799999999999955e+01 763 | 3.684300000000000352e+01 3.141610000000000014e+02 8.513200000000000500e+01 764 | 1.054220000000000113e+02 2.433370000000000175e+02 1.587609999999999957e+02 765 | 7.653699999999999193e+01 3.015860000000000127e+02 1.195989999999999895e+02 766 | 3.586299999999999955e+01 3.096740000000000350e+02 5.325199999999999534e+01 767 | 1.763700000000000045e+01 3.727219999999999800e+02 3.973599999999999710e+01 768 | 1.145739999999999981e+02 3.274850000000000136e+02 8.329500000000000171e+01 769 | 1.063499999999999943e+02 4.949540000000000077e+02 -1.482470000000000141e+02 770 | 3.704299999999999926e+01 5.415800000000000409e+02 -1.517110000000000127e+02 771 | 1.222429999999999950e+02 2.982699999999999818e+02 -4.419800000000000040e+01 772 | 9.105599999999999739e+01 4.920240000000000009e+02 8.006199999999999761e+01 773 | 1.053829999999999956e+02 4.913799999999999955e+02 -1.361620000000000061e+02 774 | 9.788799999999999102e+01 4.210069999999999482e+02 1.270720000000000027e+02 775 | 6.821699999999999875e+01 3.333949999999999818e+02 1.133059999999999974e+02 776 | 4.093500000000000227e+01 3.084060000000000059e+02 8.825000000000000000e+01 777 | 4.774600000000000222e+01 4.409840000000000373e+02 1.198929999999999865e+02 778 | 1.130910000000000082e+02 2.984159999999999968e+02 6.687199999999999989e+01 779 | 7.463800000000000523e+01 3.233009999999999877e+02 1.274290000000000020e+02 780 | 1.193329999999999984e+02 3.105020000000000095e+02 7.633400000000000318e+01 781 | 9.109100000000000819e+01 3.964069999999999823e+02 1.300370000000000061e+02 782 | 9.612299999999999045e+01 3.025120000000000005e+02 2.919400000000000261e+01 783 | 7.683599999999999852e+01 5.525359999999999445e+02 -6.937999999999999723e+00 784 | 1.322870000000000061e+02 1.515159999999999911e+02 1.716400000000000148e+01 785 | 1.092029999999999887e+02 4.762319999999999709e+02 -1.541770000000000209e+02 786 | 2.896499999999999986e+01 3.171920000000000073e+02 -1.935200000000000031e+01 787 | 3.519100000000000250e+01 3.736880000000000450e+02 1.197839999999999918e+02 788 | 6.981300000000000239e+01 5.257130000000000791e+02 5.754399999999999693e+01 789 | 8.554299999999999216e+01 2.983249999999999886e+02 1.092639999999999958e+02 790 | 1.016770000000000067e+02 2.842479999999999905e+02 -7.406000000000000227e+01 791 | 1.007810000000000059e+02 2.506309999999999718e+02 9.866899999999999693e+01 792 | 1.259189999999999969e+02 3.500000000000000000e+02 9.417799999999999727e+01 793 | 3.574800000000000466e+01 5.071240000000000236e+02 -7.108400000000000318e+01 794 | 4.279500000000000171e+01 3.947950000000000159e+02 1.295780000000000030e+02 795 | 1.605799999999999983e+01 3.734380000000000450e+02 4.310600000000000165e+01 796 | 3.472800000000000153e+01 5.035799999999999841e+02 8.214000000000000412e+00 797 | 8.403600000000000136e+01 4.062230000000000132e+02 1.319219999999999970e+02 798 | 7.168000000000000682e+01 5.382210000000000036e+02 4.430499999999999972e+01 799 | 8.012999999999999545e+01 5.467419999999999618e+02 3.996300000000000097e+01 800 | 1.141310000000000002e+02 4.950140000000000100e+02 -2.102899999999999991e+01 801 | 1.319869999999999948e+02 3.341480000000000246e+02 1.041200000000000045e+02 802 | 1.189050000000000011e+02 4.129459999999999695e+02 1.221879999999999882e+02 803 | 4.513100000000000023e+01 5.119869999999999663e+02 -5.114300000000000068e+01 804 | 1.007439999999999998e+02 4.940130000000000337e+02 3.823400000000000176e+01 805 | 8.031100000000000705e+01 1.955000000000000000e+02 6.767900000000000205e+01 806 | 1.283259999999999934e+02 3.488719999999999573e+02 6.411899999999999977e+01 807 | 9.028399999999999181e+01 4.076309999999999718e+02 1.290979999999999848e+02 808 | 1.543859999999999957e+02 8.759000000000000341e+01 6.309499999999999886e+01 809 | 2.160000000000000142e+01 2.914049999999999727e+02 3.336800000000000210e+01 810 | 1.477129999999999939e+02 4.770149999999999864e+02 4.494399999999999551e+01 811 | 8.097599999999999909e+01 2.419029999999999916e+02 1.496349999999999909e+02 812 | 1.202439999999999998e+02 3.408410000000000082e+02 8.344700000000000273e+01 813 | 2.802699999999999747e+01 4.391949999999999932e+02 1.067660000000000053e+02 814 | 1.043020000000000067e+02 2.925849999999999795e+02 -6.231399999999999295e+01 815 | 7.599500000000000455e+01 3.030829999999999700e+02 1.490999999999999881e+00 816 | 7.379899999999999238e+01 4.479610000000000127e+02 1.126039999999999992e+02 817 | 1.284939999999999998e+02 5.042309999999999945e+02 2.472199999999999775e+01 818 | 8.598100000000000875e+01 2.706309999999999718e+02 1.087890000000000015e+02 819 | 3.095800000000000196e+01 3.341119999999999663e+02 -1.644199999999999875e+02 820 | 7.596500000000000341e+01 2.972870000000000346e+02 1.148050000000000068e+02 821 | 7.349200000000000443e+01 3.332819999999999823e+02 1.226539999999999964e+02 822 | 7.432500000000000284e+01 3.336040000000000418e+02 1.244279999999999973e+02 823 | 9.042399999999999238e+01 2.442359999999999900e+02 7.201399999999999579e+01 824 | 8.050000000000000000e+01 3.384809999999999945e+02 1.275289999999999964e+02 825 | 1.168529999999999944e+02 5.024490000000000123e+02 -5.123600000000000421e+01 826 | 1.530999999999999943e+02 1.237039999999999935e+02 2.117800000000000082e+01 827 | 1.132460000000000093e+02 2.939730000000000132e+02 1.629299999999999926e+01 828 | 5.307600000000000051e+01 4.702909999999999968e+02 1.031949999999999932e+02 829 | 6.844400000000000261e+01 3.700600000000000023e+02 1.332139999999999986e+02 830 | 9.851600000000000534e+01 2.460740000000000123e+02 1.083679999999999950e+02 831 | 4.732800000000000296e+01 3.189479999999999791e+02 9.457399999999999807e+01 832 | 3.787300000000000466e+01 3.917040000000000077e+02 1.281550000000000011e+02 833 | 3.512800000000000011e+01 5.419690000000000509e+02 -9.797499999999999432e+01 834 | 7.359100000000000819e+01 5.542819999999999254e+02 -4.178899999999999437e+01 835 | 8.777600000000001046e+01 3.140400000000000205e+02 6.894000000000000128e+00 836 | 6.926699999999999591e+01 4.486999999999999886e+02 1.147109999999999985e+02 837 | 6.891100000000000136e+01 4.299399999999999977e+02 1.250709999999999980e+02 838 | 5.887300000000000466e+01 3.334890000000000327e+02 -1.909000000000000030e+00 839 | 2.071300000000000097e+01 3.607130000000000223e+02 5.035600000000000165e+01 840 | 8.208799999999999386e+01 3.302009999999999650e+02 1.051260000000000048e+02 841 | 8.759399999999999409e+01 2.018829999999999814e+02 6.908400000000000318e+01 842 | 7.681999999999999318e+01 3.151279999999999859e+02 1.439720000000000084e+02 843 | 8.350799999999999557e+01 4.993130000000000450e+02 4.206300000000000239e+01 844 | 1.289950000000000045e+02 2.919579999999999700e+02 5.437100000000000222e+01 845 | 5.033699999999999619e+01 3.181120000000000232e+02 -7.836599999999999966e+01 846 | 8.270100000000000762e+01 2.867129999999999654e+02 1.151270000000000095e+02 847 | 6.910800000000000409e+01 3.434380000000000450e+02 1.132699999999999960e+02 848 | 6.455100000000000193e+01 2.659230000000000018e+02 1.123479999999999990e+02 849 | 7.403399999999999181e+01 1.970390000000000157e+02 1.146570000000000107e+02 850 | 7.422199999999999420e+01 2.816240000000000236e+02 9.876299999999999102e+01 851 | 3.289199999999999591e+01 3.354880000000000564e+02 5.704999999999999716e+01 852 | 8.570399999999999352e+01 3.448410000000000082e+02 1.161490000000000009e+02 853 | 8.954799999999998761e+01 2.292899999999999920e+02 1.138379999999999939e+02 854 | 1.045320000000000107e+02 3.230029999999999859e+02 1.010200000000000031e+01 855 | 6.213300000000000267e+01 4.448469999999999800e+02 1.195750000000000028e+02 856 | 3.459700000000000131e+01 3.221610000000000014e+02 -5.202399999999999380e+01 857 | 8.712000000000000455e+01 2.764660000000000082e+02 1.101070000000000135e+02 858 | 3.299000000000000199e+01 5.264990000000000236e+02 -6.575000000000000000e+01 859 | 3.850900000000000034e+01 3.400730000000000359e+02 -1.554060000000000059e+02 860 | 7.583400000000000318e+01 3.457940000000000396e+02 1.454250000000000114e+02 861 | 6.229999999999999716e+01 2.657740000000000009e+02 1.130979999999999990e+02 862 | 9.277200000000000557e+01 2.785059999999999718e+02 -1.395229999999999961e+02 863 | 1.227400000000000091e+01 4.297590000000000146e+02 8.075499999999999545e+01 864 | 7.548000000000000398e+01 5.231269999999999527e+02 6.934999999999999432e+01 865 | 5.013600000000000279e+01 3.465430000000000064e+02 1.167960000000000065e+02 866 | 9.572200000000000841e+01 3.825939999999999941e+02 1.341160000000000139e+02 867 | 1.468220000000000027e+02 4.071569999999999823e+02 7.695999999999999375e+01 868 | 6.894599999999999795e+01 2.176129999999999995e+02 7.602800000000000580e+01 869 | 3.653800000000000381e+01 5.551240000000000236e+02 -1.314799999999999898e+02 870 | 1.033929999999999865e+02 2.849909999999999854e+02 -6.959000000000000341e+01 871 | 7.554399999999999693e+01 3.576930000000000405e+02 1.359989999999999952e+02 872 | 1.384159999999999968e+02 3.713580000000000041e+02 5.058399999999999608e+01 873 | 8.398799999999999955e+01 2.201730000000000018e+02 8.219400000000000261e+01 874 | 1.379560000000000173e+02 3.710550000000000068e+02 6.109600000000000364e+01 875 | 9.654700000000001125e+01 2.427800000000000011e+02 9.175799999999999557e+01 876 | 6.478399999999999181e+01 2.344000000000000057e+02 1.670659999999999741e+02 877 | 6.602500000000000568e+01 3.668500000000000227e+02 1.286910000000000025e+02 878 | 7.762300000000000466e+01 2.419869999999999948e+02 1.451069999999999993e+02 879 | 7.817199999999999704e+01 2.455049999999999955e+02 1.085020000000000095e+02 880 | 9.149399999999999977e+01 3.157139999999999986e+02 1.101500000000000057e+02 881 | 1.290210000000000150e+02 3.862839999999999918e+02 1.101760000000000019e+02 882 | 4.651100000000000279e+01 3.361430000000000291e+02 -1.288199999999999932e+02 883 | 8.759200000000001296e+01 2.718779999999999859e+02 -1.156289999999999907e+02 884 | 1.124620000000000033e+02 2.764859999999999900e+02 -1.177620000000000005e+02 885 | 1.290140000000000100e+02 3.754990000000000236e+02 1.069200000000000017e+02 886 | 3.089999999999999858e+01 4.982569999999999482e+02 3.071900000000000119e+01 887 | 1.101470000000000056e+02 4.962799999999999727e+02 -3.382600000000000051e+01 888 | 7.950900000000000034e+01 4.072330000000000041e+02 1.145900000000000034e+02 889 | 1.204290000000000020e+02 4.976539999999999964e+02 -1.265550000000000068e+02 890 | 5.492100000000000648e+01 2.468930000000000007e+02 9.641700000000000159e+01 891 | 3.810600000000000165e+01 3.207980000000000018e+02 7.949399999999999977e+01 892 | 1.180779999999999887e+02 5.019330000000000496e+02 -1.045049999999999955e+02 893 | 5.480199999999999960e+01 5.428290000000000646e+02 -1.601989999999999839e+02 894 | 8.157500000000000284e+01 2.258549999999999898e+02 8.768999999999999773e+01 895 | 1.448079999999999927e+02 3.919990000000000236e+02 6.229200000000000159e+01 896 | 9.251399999999999579e+01 4.909480000000000359e+02 4.582100000000000506e+01 897 | 7.634300000000000352e+01 5.567740000000000009e+02 9.121000000000000441e+00 898 | 6.689000000000000057e+01 3.328349999999999795e+02 1.105900000000000034e+02 899 | 2.204899999999999949e+01 4.074800000000000182e+02 1.139539999999999935e+02 900 | 1.462259999999999991e+02 4.762649999999999864e+02 4.406800000000000495e+01 901 | 1.185279999999999916e+02 4.140269999999999868e+02 1.246570000000000107e+02 902 | 1.095210000000000008e+02 2.770120000000000005e+02 -1.179979999999999905e+02 903 | 7.408199999999999363e+01 4.657830000000000155e+02 1.123539999999999992e+02 904 | 7.594700000000000273e+01 4.647699999999999818e+02 1.117829999999999870e+02 905 | 8.002700000000000102e+01 4.943680000000000518e+02 8.765000000000000568e+01 906 | 9.821099999999999852e+01 4.548009999999999877e+02 1.139679999999999893e+02 907 | 5.007899999999999352e+01 3.718559999999999945e+02 1.270910000000000082e+02 908 | 1.027039999999999935e+02 4.685699999999999932e+02 -1.663970000000000198e+02 909 | 3.767000000000000171e+01 4.363919999999999959e+02 1.188129999999999882e+02 910 | 6.815000000000000568e+01 4.058480000000000132e+02 1.284739999999999895e+02 911 | 1.326160000000000139e+02 2.901630000000000109e+02 4.831199999999999761e+01 912 | 1.206529999999999916e+02 3.028410000000000082e+02 9.157999999999999829e+01 913 | 3.505699999999999505e+01 2.851449999999999818e+02 4.293999999999999773e+01 914 | 1.234060000000000059e+02 2.958129999999999882e+02 9.488999999999998991e+00 915 | 8.628299999999998704e+01 2.640129999999999768e+02 -1.591460000000000150e+02 916 | 4.538600000000000279e+01 4.244480000000000359e+02 1.253179999999999978e+02 917 | 8.664000000000000057e+01 2.457340000000000089e+02 1.392439999999999998e+02 918 | 1.076099999999999994e+02 3.264180000000000064e+02 9.717200000000001125e+01 919 | 6.107300000000000040e+01 3.309309999999999832e+02 -1.142090000000000032e+02 920 | 1.226350000000000051e+02 2.864780000000000086e+02 5.607699999999999818e+01 921 | 5.507500000000000284e+01 3.380619999999999550e+02 5.720000000000000639e-01 922 | 6.575499999999999545e+01 3.038159999999999741e+02 1.059350000000000023e+02 923 | 2.050400000000000134e+01 3.775889999999999986e+02 1.024120000000000061e+02 924 | 8.997399999999998954e+01 2.375790000000000077e+02 9.414700000000000557e+01 925 | 4.663000000000000256e+01 3.839340000000000259e+02 1.302460000000000093e+02 926 | 8.723999999999999488e+01 4.819689999999999941e+02 1.039849999999999994e+02 927 | 1.003179999999999978e+02 2.550550000000000068e+02 1.394779999999999802e+02 928 | 1.081239999999999952e+02 2.686469999999999914e+02 -1.048079999999999927e+02 929 | 1.065610000000000070e+02 3.007559999999999718e+02 -5.318399999999999750e+01 930 | 5.594500000000000028e+01 3.779750000000000227e+02 1.289610000000000127e+02 931 | 1.651200000000000045e+01 3.326709999999999923e+02 1.005349999999999966e+02 932 | 8.528700000000000614e+01 1.842549999999999955e+02 6.002499999999999858e+01 933 | 1.095739999999999981e+02 2.757529999999999859e+02 -1.194290000000000020e+02 934 | 7.987000000000000455e+01 5.505109999999999673e+02 1.502400000000000091e+01 935 | 3.118699999999999761e+01 3.414480000000000359e+02 6.496399999999999864e+01 936 | 5.193500000000000227e+01 2.492890000000000157e+02 1.242170000000000130e+02 937 | 5.706700000000000017e+01 2.405359999999999729e+02 1.078190000000000026e+02 938 | 1.273799999999999955e+01 3.831480000000000246e+02 5.502000000000000313e+01 939 | 3.350399999999999778e+01 5.371730000000000018e+02 -1.631620000000000061e+02 940 | 1.141570000000000107e+02 4.610369999999999777e+02 -1.683970000000000198e+02 941 | 6.795900000000000318e+01 2.113709999999999809e+02 1.379890000000000043e+02 942 | 8.715799999999998704e+01 2.760120000000000005e+02 -1.501450000000000102e+02 943 | 8.453700000000000614e+01 2.911170000000000186e+02 3.654599999999999937e+01 944 | 1.433789999999999907e+02 3.957259999999999991e+02 8.848000000000000398e+01 945 | 1.302779999999999916e+02 2.960590000000000259e+02 -1.859600000000000009e+01 946 | 7.845199999999999818e+01 2.397659999999999911e+02 1.681390000000000100e+02 947 | 9.442399999999999238e+01 3.034429999999999836e+02 9.051399999999999579e+01 948 | 9.340799999999998704e+01 2.640040000000000191e+02 -1.472270000000000039e+02 949 | 8.079399999999999693e+01 3.742309999999999945e+02 1.240020000000000095e+02 950 | 4.876699999999999591e+01 3.241990000000000123e+02 8.676600000000000534e+01 951 | 1.565120000000000005e+02 8.837799999999998590e+01 6.691500000000000625e+01 952 | 1.131749999999999972e+02 3.196680000000000064e+02 7.457399999999999807e+01 953 | 9.696600000000000819e+01 2.560840000000000032e+02 1.188929999999999865e+02 954 | 5.102899999999999636e+01 3.166499999999999773e+02 1.188799999999999955e+02 955 | 5.082100000000000506e+01 5.231390000000000100e+02 -7.131799999999999784e+01 956 | 5.563800000000000523e+01 3.175199999999999818e+02 1.305960000000000036e+02 957 | 1.361920000000000073e+02 3.705769999999999982e+02 7.430400000000000205e+01 958 | 1.056470000000000056e+02 2.882789999999999964e+02 -4.009400000000000119e+01 959 | 4.435399999999999920e+01 3.279499999999999886e+02 -1.349749999999999943e+02 960 | 9.797200000000000841e+01 3.373890000000000100e+02 -1.254999999999999893e+00 961 | 5.049000000000000199e+01 3.333680000000000518e+02 -1.263639999999999901e+02 962 | 3.365200000000000102e+01 5.272480000000000473e+02 -7.201000000000000512e+01 963 | 3.074800000000000111e+01 3.197330000000000041e+02 -3.325600000000000023e+01 964 | 2.318300000000000338e+01 3.570149999999999864e+02 2.751999999999999957e+01 965 | 8.072199999999999420e+01 3.752480000000000473e+02 1.166679999999999922e+02 966 | 6.788800000000000523e+01 2.459300000000000068e+02 1.134620000000000033e+02 967 | 6.382899999999999352e+01 2.767640000000000100e+02 1.066720000000000113e+02 968 | 9.215100000000001046e+01 2.787579999999999814e+02 -1.309729999999999848e+02 969 | 1.268529999999999944e+02 3.497980000000000018e+02 2.790699999999999648e+01 970 | 4.983800000000000097e+01 3.154170000000000300e+02 1.266809999999999974e+02 971 | 6.126800000000000068e+01 5.271430000000000291e+02 3.588499999999999801e+01 972 | 5.141399999999999437e+01 5.485930000000000746e+02 -1.414050000000000011e+02 973 | 8.011399999999999011e+01 1.964950000000000045e+02 6.839399999999999125e+01 974 | 3.521199999999999619e+01 4.608340000000000032e+02 9.165799999999998704e+01 975 | 1.253239999999999981e+02 3.371109999999999900e+02 5.462199999999999989e+01 976 | 1.101620000000000061e+02 2.900169999999999959e+02 -5.087300000000000466e+01 977 | 1.818400000000000105e+01 3.719190000000000396e+02 8.085200000000000387e+01 978 | 8.451299999999999102e+01 2.166690000000000111e+02 8.447399999999998954e+01 979 | 8.834999999999999432e+01 2.701209999999999809e+02 -1.395729999999999791e+02 980 | 1.358700000000000045e+02 3.981569999999999823e+02 1.083179999999999978e+02 981 | 1.177229999999999990e+02 3.115600000000000023e+02 -4.713000000000000256e+01 982 | 3.960000000000000142e+01 3.336250000000000000e+02 9.220499999999999829e+01 983 | 6.633899999999999864e+01 2.950930000000000177e+02 9.991899999999999693e+01 984 | 1.779599999999999937e+01 3.967090000000000032e+02 1.034010000000000105e+02 985 | 9.365100000000001046e+01 3.037540000000000191e+02 7.546699999999999875e+01 986 | 5.872100000000000364e+01 3.168489999999999895e+02 9.742600000000000193e+01 987 | 7.529699999999999704e+01 3.045879999999999654e+02 1.297479999999999905e+02 988 | 1.380089999999999861e+02 4.364300000000000068e+02 9.515899999999999181e+01 989 | 1.227039999999999935e+02 3.674330000000000496e+02 1.066589999999999918e+02 990 | 1.964700000000000202e+01 3.630960000000000036e+02 3.001399999999999935e+01 991 | 2.105099999999999838e+01 3.642860000000000014e+02 6.957200000000000273e+01 992 | 1.385070000000000050e+02 4.396940000000000168e+02 9.335600000000000875e+01 993 | 1.240879999999999939e+02 4.725640000000000214e+02 -1.664709999999999752e+02 994 | -1.407599999999999874e+01 7.397700000000000387e+01 6.801899999999999125e+01 995 | 1.391629999999999825e+02 4.278169999999999504e+02 1.010210000000000008e+02 996 | 3.765599999999999881e+01 3.333880000000000337e+02 -6.631000000000000227e+01 997 | 3.839300000000000068e+01 3.220169999999999959e+02 -7.359000000000000341e+01 998 | 4.970799999999999841e+01 1.685790000000000077e+02 3.945199999999999818e+01 999 | 6.040200000000000102e+01 5.075080000000000382e+02 4.679299999999999926e+01 1000 | 7.777299999999999613e+01 3.829110000000000014e+02 1.449189999999999827e+02 1001 | -------------------------------------------------------------------------------- /tests/data/Mammoth_y.txt: -------------------------------------------------------------------------------- 1 | 3.000000000000000000e+00 2 | 1.000000000000000000e+01 3 | 3.000000000000000000e+00 4 | 6.000000000000000000e+00 5 | 8.000000000000000000e+00 6 | 6.000000000000000000e+00 7 | 1.000000000000000000e+00 8 | 8.000000000000000000e+00 9 | 4.000000000000000000e+00 10 | 1.000000000000000000e+01 11 | 6.000000000000000000e+00 12 | 6.000000000000000000e+00 13 | 6.000000000000000000e+00 14 | 4.000000000000000000e+00 15 | 8.000000000000000000e+00 16 | 7.000000000000000000e+00 17 | 0.000000000000000000e+00 18 | 0.000000000000000000e+00 19 | 0.000000000000000000e+00 20 | 3.000000000000000000e+00 21 | 3.000000000000000000e+00 22 | 7.000000000000000000e+00 23 | 7.000000000000000000e+00 24 | 0.000000000000000000e+00 25 | 5.000000000000000000e+00 26 | 8.000000000000000000e+00 27 | 8.000000000000000000e+00 28 | 7.000000000000000000e+00 29 | 9.000000000000000000e+00 30 | 8.000000000000000000e+00 31 | 7.000000000000000000e+00 32 | 1.000000000000000000e+00 33 | 8.000000000000000000e+00 34 | 2.000000000000000000e+00 35 | 4.000000000000000000e+00 36 | 7.000000000000000000e+00 37 | 9.000000000000000000e+00 38 | 0.000000000000000000e+00 39 | 5.000000000000000000e+00 40 | 6.000000000000000000e+00 41 | 5.000000000000000000e+00 42 | 1.000000000000000000e+00 43 | 7.000000000000000000e+00 44 | 0.000000000000000000e+00 45 | 2.000000000000000000e+00 46 | 4.000000000000000000e+00 47 | 1.000000000000000000e+00 48 | 1.000000000000000000e+00 49 | 2.000000000000000000e+00 50 | 0.000000000000000000e+00 51 | 0.000000000000000000e+00 52 | 4.000000000000000000e+00 53 | 0.000000000000000000e+00 54 | 3.000000000000000000e+00 55 | 7.000000000000000000e+00 56 | 3.000000000000000000e+00 57 | 2.000000000000000000e+00 58 | 0.000000000000000000e+00 59 | 8.000000000000000000e+00 60 | 6.000000000000000000e+00 61 | 3.000000000000000000e+00 62 | 6.000000000000000000e+00 63 | 7.000000000000000000e+00 64 | 4.000000000000000000e+00 65 | 5.000000000000000000e+00 66 | 1.000000000000000000e+01 67 | 1.000000000000000000e+00 68 | 1.000000000000000000e+00 69 | 4.000000000000000000e+00 70 | 7.000000000000000000e+00 71 | 6.000000000000000000e+00 72 | 6.000000000000000000e+00 73 | 4.000000000000000000e+00 74 | 1.000000000000000000e+01 75 | 2.000000000000000000e+00 76 | 4.000000000000000000e+00 77 | 1.000000000000000000e+01 78 | 1.000000000000000000e+01 79 | 4.000000000000000000e+00 80 | 7.000000000000000000e+00 81 | 2.000000000000000000e+00 82 | 8.000000000000000000e+00 83 | 3.000000000000000000e+00 84 | 8.000000000000000000e+00 85 | 1.000000000000000000e+00 86 | 4.000000000000000000e+00 87 | 7.000000000000000000e+00 88 | 1.000000000000000000e+00 89 | 5.000000000000000000e+00 90 | 9.000000000000000000e+00 91 | 6.000000000000000000e+00 92 | 4.000000000000000000e+00 93 | 0.000000000000000000e+00 94 | 5.000000000000000000e+00 95 | 4.000000000000000000e+00 96 | 9.000000000000000000e+00 97 | 0.000000000000000000e+00 98 | 6.000000000000000000e+00 99 | 1.000000000000000000e+00 100 | 7.000000000000000000e+00 101 | 8.000000000000000000e+00 102 | 0.000000000000000000e+00 103 | 6.000000000000000000e+00 104 | 5.000000000000000000e+00 105 | 4.000000000000000000e+00 106 | 7.000000000000000000e+00 107 | 2.000000000000000000e+00 108 | 8.000000000000000000e+00 109 | 3.000000000000000000e+00 110 | 4.000000000000000000e+00 111 | 7.000000000000000000e+00 112 | 1.000000000000000000e+00 113 | 4.000000000000000000e+00 114 | 7.000000000000000000e+00 115 | 5.000000000000000000e+00 116 | 1.000000000000000000e+00 117 | 8.000000000000000000e+00 118 | 0.000000000000000000e+00 119 | 9.000000000000000000e+00 120 | 5.000000000000000000e+00 121 | 0.000000000000000000e+00 122 | 8.000000000000000000e+00 123 | 5.000000000000000000e+00 124 | 4.000000000000000000e+00 125 | 3.000000000000000000e+00 126 | 1.000000000000000000e+00 127 | 4.000000000000000000e+00 128 | 4.000000000000000000e+00 129 | 8.000000000000000000e+00 130 | 5.000000000000000000e+00 131 | 2.000000000000000000e+00 132 | 5.000000000000000000e+00 133 | 3.000000000000000000e+00 134 | 8.000000000000000000e+00 135 | 5.000000000000000000e+00 136 | 5.000000000000000000e+00 137 | 0.000000000000000000e+00 138 | 5.000000000000000000e+00 139 | 0.000000000000000000e+00 140 | 0.000000000000000000e+00 141 | 1.000000000000000000e+01 142 | 6.000000000000000000e+00 143 | 6.000000000000000000e+00 144 | 5.000000000000000000e+00 145 | 2.000000000000000000e+00 146 | 0.000000000000000000e+00 147 | 6.000000000000000000e+00 148 | 3.000000000000000000e+00 149 | 6.000000000000000000e+00 150 | 4.000000000000000000e+00 151 | 4.000000000000000000e+00 152 | 9.000000000000000000e+00 153 | 5.000000000000000000e+00 154 | 1.000000000000000000e+01 155 | 6.000000000000000000e+00 156 | 5.000000000000000000e+00 157 | 1.000000000000000000e+00 158 | 8.000000000000000000e+00 159 | 1.000000000000000000e+00 160 | 0.000000000000000000e+00 161 | 1.000000000000000000e+00 162 | 7.000000000000000000e+00 163 | 8.000000000000000000e+00 164 | 6.000000000000000000e+00 165 | 0.000000000000000000e+00 166 | 0.000000000000000000e+00 167 | 3.000000000000000000e+00 168 | 1.000000000000000000e+00 169 | 3.000000000000000000e+00 170 | 0.000000000000000000e+00 171 | 8.000000000000000000e+00 172 | 8.000000000000000000e+00 173 | 6.000000000000000000e+00 174 | 2.000000000000000000e+00 175 | 5.000000000000000000e+00 176 | 7.000000000000000000e+00 177 | 8.000000000000000000e+00 178 | 5.000000000000000000e+00 179 | 4.000000000000000000e+00 180 | 7.000000000000000000e+00 181 | 3.000000000000000000e+00 182 | 1.000000000000000000e+01 183 | 7.000000000000000000e+00 184 | 0.000000000000000000e+00 185 | 6.000000000000000000e+00 186 | 8.000000000000000000e+00 187 | 0.000000000000000000e+00 188 | 1.000000000000000000e+00 189 | 7.000000000000000000e+00 190 | 3.000000000000000000e+00 191 | 6.000000000000000000e+00 192 | 4.000000000000000000e+00 193 | 7.000000000000000000e+00 194 | 7.000000000000000000e+00 195 | 8.000000000000000000e+00 196 | 4.000000000000000000e+00 197 | 4.000000000000000000e+00 198 | 7.000000000000000000e+00 199 | 3.000000000000000000e+00 200 | 4.000000000000000000e+00 201 | 7.000000000000000000e+00 202 | 8.000000000000000000e+00 203 | 2.000000000000000000e+00 204 | 8.000000000000000000e+00 205 | 8.000000000000000000e+00 206 | 4.000000000000000000e+00 207 | 5.000000000000000000e+00 208 | 7.000000000000000000e+00 209 | 5.000000000000000000e+00 210 | 4.000000000000000000e+00 211 | 8.000000000000000000e+00 212 | 6.000000000000000000e+00 213 | 4.000000000000000000e+00 214 | 3.000000000000000000e+00 215 | 2.000000000000000000e+00 216 | 5.000000000000000000e+00 217 | 2.000000000000000000e+00 218 | 0.000000000000000000e+00 219 | 2.000000000000000000e+00 220 | 2.000000000000000000e+00 221 | 5.000000000000000000e+00 222 | 5.000000000000000000e+00 223 | 3.000000000000000000e+00 224 | 4.000000000000000000e+00 225 | 6.000000000000000000e+00 226 | 5.000000000000000000e+00 227 | 8.000000000000000000e+00 228 | 1.000000000000000000e+00 229 | 9.000000000000000000e+00 230 | 0.000000000000000000e+00 231 | 6.000000000000000000e+00 232 | 4.000000000000000000e+00 233 | 6.000000000000000000e+00 234 | 6.000000000000000000e+00 235 | 6.000000000000000000e+00 236 | 0.000000000000000000e+00 237 | 8.000000000000000000e+00 238 | 4.000000000000000000e+00 239 | 5.000000000000000000e+00 240 | 3.000000000000000000e+00 241 | 0.000000000000000000e+00 242 | 4.000000000000000000e+00 243 | 2.000000000000000000e+00 244 | 2.000000000000000000e+00 245 | 3.000000000000000000e+00 246 | 0.000000000000000000e+00 247 | 5.000000000000000000e+00 248 | 3.000000000000000000e+00 249 | 6.000000000000000000e+00 250 | 0.000000000000000000e+00 251 | 4.000000000000000000e+00 252 | 3.000000000000000000e+00 253 | 0.000000000000000000e+00 254 | 5.000000000000000000e+00 255 | 5.000000000000000000e+00 256 | 6.000000000000000000e+00 257 | 5.000000000000000000e+00 258 | 6.000000000000000000e+00 259 | 8.000000000000000000e+00 260 | 4.000000000000000000e+00 261 | 4.000000000000000000e+00 262 | 4.000000000000000000e+00 263 | 0.000000000000000000e+00 264 | 6.000000000000000000e+00 265 | 2.000000000000000000e+00 266 | 3.000000000000000000e+00 267 | 6.000000000000000000e+00 268 | 7.000000000000000000e+00 269 | 2.000000000000000000e+00 270 | 3.000000000000000000e+00 271 | 2.000000000000000000e+00 272 | 4.000000000000000000e+00 273 | 0.000000000000000000e+00 274 | 9.000000000000000000e+00 275 | 7.000000000000000000e+00 276 | 1.000000000000000000e+00 277 | 6.000000000000000000e+00 278 | 7.000000000000000000e+00 279 | 9.000000000000000000e+00 280 | 9.000000000000000000e+00 281 | 4.000000000000000000e+00 282 | 0.000000000000000000e+00 283 | 0.000000000000000000e+00 284 | 9.000000000000000000e+00 285 | 8.000000000000000000e+00 286 | 4.000000000000000000e+00 287 | 7.000000000000000000e+00 288 | 6.000000000000000000e+00 289 | 1.000000000000000000e+01 290 | 6.000000000000000000e+00 291 | 0.000000000000000000e+00 292 | 6.000000000000000000e+00 293 | 4.000000000000000000e+00 294 | 4.000000000000000000e+00 295 | 7.000000000000000000e+00 296 | 6.000000000000000000e+00 297 | 5.000000000000000000e+00 298 | 7.000000000000000000e+00 299 | 7.000000000000000000e+00 300 | 5.000000000000000000e+00 301 | 6.000000000000000000e+00 302 | 4.000000000000000000e+00 303 | 8.000000000000000000e+00 304 | 9.000000000000000000e+00 305 | 8.000000000000000000e+00 306 | 7.000000000000000000e+00 307 | 6.000000000000000000e+00 308 | 8.000000000000000000e+00 309 | 8.000000000000000000e+00 310 | 5.000000000000000000e+00 311 | 0.000000000000000000e+00 312 | 6.000000000000000000e+00 313 | 7.000000000000000000e+00 314 | 0.000000000000000000e+00 315 | 3.000000000000000000e+00 316 | 3.000000000000000000e+00 317 | 1.000000000000000000e+01 318 | 9.000000000000000000e+00 319 | 4.000000000000000000e+00 320 | 4.000000000000000000e+00 321 | 8.000000000000000000e+00 322 | 1.000000000000000000e+00 323 | 6.000000000000000000e+00 324 | 8.000000000000000000e+00 325 | 0.000000000000000000e+00 326 | 8.000000000000000000e+00 327 | 7.000000000000000000e+00 328 | 0.000000000000000000e+00 329 | 3.000000000000000000e+00 330 | 3.000000000000000000e+00 331 | 6.000000000000000000e+00 332 | 7.000000000000000000e+00 333 | 0.000000000000000000e+00 334 | 2.000000000000000000e+00 335 | 8.000000000000000000e+00 336 | 5.000000000000000000e+00 337 | 6.000000000000000000e+00 338 | 0.000000000000000000e+00 339 | 5.000000000000000000e+00 340 | 6.000000000000000000e+00 341 | 4.000000000000000000e+00 342 | 2.000000000000000000e+00 343 | 0.000000000000000000e+00 344 | 4.000000000000000000e+00 345 | 3.000000000000000000e+00 346 | 1.000000000000000000e+01 347 | 9.000000000000000000e+00 348 | 1.000000000000000000e+00 349 | 4.000000000000000000e+00 350 | 8.000000000000000000e+00 351 | 8.000000000000000000e+00 352 | 9.000000000000000000e+00 353 | 7.000000000000000000e+00 354 | 1.000000000000000000e+00 355 | 5.000000000000000000e+00 356 | 8.000000000000000000e+00 357 | 3.000000000000000000e+00 358 | 8.000000000000000000e+00 359 | 5.000000000000000000e+00 360 | 8.000000000000000000e+00 361 | 2.000000000000000000e+00 362 | 0.000000000000000000e+00 363 | 1.000000000000000000e+00 364 | 8.000000000000000000e+00 365 | 1.000000000000000000e+01 366 | 4.000000000000000000e+00 367 | 2.000000000000000000e+00 368 | 3.000000000000000000e+00 369 | 6.000000000000000000e+00 370 | 7.000000000000000000e+00 371 | 0.000000000000000000e+00 372 | 8.000000000000000000e+00 373 | 3.000000000000000000e+00 374 | 4.000000000000000000e+00 375 | 1.000000000000000000e+01 376 | 0.000000000000000000e+00 377 | 1.000000000000000000e+00 378 | 8.000000000000000000e+00 379 | 6.000000000000000000e+00 380 | 1.000000000000000000e+00 381 | 5.000000000000000000e+00 382 | 7.000000000000000000e+00 383 | 2.000000000000000000e+00 384 | 4.000000000000000000e+00 385 | 4.000000000000000000e+00 386 | 0.000000000000000000e+00 387 | 0.000000000000000000e+00 388 | 8.000000000000000000e+00 389 | 7.000000000000000000e+00 390 | 0.000000000000000000e+00 391 | 5.000000000000000000e+00 392 | 2.000000000000000000e+00 393 | 4.000000000000000000e+00 394 | 8.000000000000000000e+00 395 | 6.000000000000000000e+00 396 | 5.000000000000000000e+00 397 | 5.000000000000000000e+00 398 | 7.000000000000000000e+00 399 | 4.000000000000000000e+00 400 | 2.000000000000000000e+00 401 | 6.000000000000000000e+00 402 | 7.000000000000000000e+00 403 | 4.000000000000000000e+00 404 | 6.000000000000000000e+00 405 | 8.000000000000000000e+00 406 | 7.000000000000000000e+00 407 | 9.000000000000000000e+00 408 | 2.000000000000000000e+00 409 | 5.000000000000000000e+00 410 | 7.000000000000000000e+00 411 | 8.000000000000000000e+00 412 | 8.000000000000000000e+00 413 | 9.000000000000000000e+00 414 | 2.000000000000000000e+00 415 | 8.000000000000000000e+00 416 | 8.000000000000000000e+00 417 | 7.000000000000000000e+00 418 | 6.000000000000000000e+00 419 | 0.000000000000000000e+00 420 | 5.000000000000000000e+00 421 | 3.000000000000000000e+00 422 | 5.000000000000000000e+00 423 | 4.000000000000000000e+00 424 | 2.000000000000000000e+00 425 | 6.000000000000000000e+00 426 | 0.000000000000000000e+00 427 | 7.000000000000000000e+00 428 | 9.000000000000000000e+00 429 | 0.000000000000000000e+00 430 | 1.000000000000000000e+00 431 | 8.000000000000000000e+00 432 | 7.000000000000000000e+00 433 | 2.000000000000000000e+00 434 | 8.000000000000000000e+00 435 | 1.000000000000000000e+00 436 | 4.000000000000000000e+00 437 | 2.000000000000000000e+00 438 | 7.000000000000000000e+00 439 | 7.000000000000000000e+00 440 | 5.000000000000000000e+00 441 | 2.000000000000000000e+00 442 | 1.000000000000000000e+00 443 | 7.000000000000000000e+00 444 | 0.000000000000000000e+00 445 | 9.000000000000000000e+00 446 | 5.000000000000000000e+00 447 | 5.000000000000000000e+00 448 | 3.000000000000000000e+00 449 | 4.000000000000000000e+00 450 | 6.000000000000000000e+00 451 | 4.000000000000000000e+00 452 | 8.000000000000000000e+00 453 | 5.000000000000000000e+00 454 | 3.000000000000000000e+00 455 | 8.000000000000000000e+00 456 | 4.000000000000000000e+00 457 | 1.000000000000000000e+00 458 | 7.000000000000000000e+00 459 | 0.000000000000000000e+00 460 | 7.000000000000000000e+00 461 | 1.000000000000000000e+00 462 | 8.000000000000000000e+00 463 | 2.000000000000000000e+00 464 | 1.000000000000000000e+01 465 | 8.000000000000000000e+00 466 | 1.000000000000000000e+00 467 | 3.000000000000000000e+00 468 | 0.000000000000000000e+00 469 | 7.000000000000000000e+00 470 | 4.000000000000000000e+00 471 | 9.000000000000000000e+00 472 | 4.000000000000000000e+00 473 | 2.000000000000000000e+00 474 | 5.000000000000000000e+00 475 | 9.000000000000000000e+00 476 | 8.000000000000000000e+00 477 | 7.000000000000000000e+00 478 | 6.000000000000000000e+00 479 | 0.000000000000000000e+00 480 | 6.000000000000000000e+00 481 | 5.000000000000000000e+00 482 | 1.000000000000000000e+00 483 | 2.000000000000000000e+00 484 | 4.000000000000000000e+00 485 | 6.000000000000000000e+00 486 | 0.000000000000000000e+00 487 | 6.000000000000000000e+00 488 | 4.000000000000000000e+00 489 | 7.000000000000000000e+00 490 | 6.000000000000000000e+00 491 | 2.000000000000000000e+00 492 | 7.000000000000000000e+00 493 | 7.000000000000000000e+00 494 | 5.000000000000000000e+00 495 | 9.000000000000000000e+00 496 | 6.000000000000000000e+00 497 | 1.000000000000000000e+00 498 | 4.000000000000000000e+00 499 | 2.000000000000000000e+00 500 | 3.000000000000000000e+00 501 | 4.000000000000000000e+00 502 | 0.000000000000000000e+00 503 | 3.000000000000000000e+00 504 | 4.000000000000000000e+00 505 | 1.000000000000000000e+00 506 | 1.000000000000000000e+00 507 | 4.000000000000000000e+00 508 | 4.000000000000000000e+00 509 | 9.000000000000000000e+00 510 | 6.000000000000000000e+00 511 | 8.000000000000000000e+00 512 | 2.000000000000000000e+00 513 | 8.000000000000000000e+00 514 | 8.000000000000000000e+00 515 | 6.000000000000000000e+00 516 | 7.000000000000000000e+00 517 | 0.000000000000000000e+00 518 | 8.000000000000000000e+00 519 | 1.000000000000000000e+01 520 | 3.000000000000000000e+00 521 | 5.000000000000000000e+00 522 | 6.000000000000000000e+00 523 | 0.000000000000000000e+00 524 | 1.000000000000000000e+00 525 | 2.000000000000000000e+00 526 | 8.000000000000000000e+00 527 | 2.000000000000000000e+00 528 | 6.000000000000000000e+00 529 | 1.000000000000000000e+00 530 | 1.000000000000000000e+00 531 | 8.000000000000000000e+00 532 | 4.000000000000000000e+00 533 | 6.000000000000000000e+00 534 | 3.000000000000000000e+00 535 | 0.000000000000000000e+00 536 | 1.000000000000000000e+00 537 | 7.000000000000000000e+00 538 | 4.000000000000000000e+00 539 | 7.000000000000000000e+00 540 | 3.000000000000000000e+00 541 | 8.000000000000000000e+00 542 | 0.000000000000000000e+00 543 | 7.000000000000000000e+00 544 | 3.000000000000000000e+00 545 | 6.000000000000000000e+00 546 | 1.000000000000000000e+00 547 | 5.000000000000000000e+00 548 | 0.000000000000000000e+00 549 | 0.000000000000000000e+00 550 | 4.000000000000000000e+00 551 | 5.000000000000000000e+00 552 | 5.000000000000000000e+00 553 | 1.000000000000000000e+00 554 | 0.000000000000000000e+00 555 | 8.000000000000000000e+00 556 | 4.000000000000000000e+00 557 | 6.000000000000000000e+00 558 | 1.000000000000000000e+01 559 | 0.000000000000000000e+00 560 | 7.000000000000000000e+00 561 | 7.000000000000000000e+00 562 | 1.000000000000000000e+00 563 | 1.000000000000000000e+01 564 | 1.000000000000000000e+01 565 | 6.000000000000000000e+00 566 | 8.000000000000000000e+00 567 | 3.000000000000000000e+00 568 | 5.000000000000000000e+00 569 | 5.000000000000000000e+00 570 | 0.000000000000000000e+00 571 | 3.000000000000000000e+00 572 | 4.000000000000000000e+00 573 | 6.000000000000000000e+00 574 | 9.000000000000000000e+00 575 | 7.000000000000000000e+00 576 | 7.000000000000000000e+00 577 | 2.000000000000000000e+00 578 | 1.000000000000000000e+00 579 | 0.000000000000000000e+00 580 | 5.000000000000000000e+00 581 | 5.000000000000000000e+00 582 | 7.000000000000000000e+00 583 | 4.000000000000000000e+00 584 | 7.000000000000000000e+00 585 | 7.000000000000000000e+00 586 | 7.000000000000000000e+00 587 | 1.000000000000000000e+00 588 | 5.000000000000000000e+00 589 | 3.000000000000000000e+00 590 | 1.000000000000000000e+00 591 | 2.000000000000000000e+00 592 | 4.000000000000000000e+00 593 | 6.000000000000000000e+00 594 | 0.000000000000000000e+00 595 | 6.000000000000000000e+00 596 | 8.000000000000000000e+00 597 | 9.000000000000000000e+00 598 | 3.000000000000000000e+00 599 | 0.000000000000000000e+00 600 | 0.000000000000000000e+00 601 | 0.000000000000000000e+00 602 | 7.000000000000000000e+00 603 | 1.000000000000000000e+00 604 | 2.000000000000000000e+00 605 | 8.000000000000000000e+00 606 | 5.000000000000000000e+00 607 | 4.000000000000000000e+00 608 | 7.000000000000000000e+00 609 | 3.000000000000000000e+00 610 | 4.000000000000000000e+00 611 | 6.000000000000000000e+00 612 | 0.000000000000000000e+00 613 | 8.000000000000000000e+00 614 | 5.000000000000000000e+00 615 | 5.000000000000000000e+00 616 | 9.000000000000000000e+00 617 | 5.000000000000000000e+00 618 | 1.000000000000000000e+00 619 | 7.000000000000000000e+00 620 | 1.000000000000000000e+01 621 | 5.000000000000000000e+00 622 | 1.000000000000000000e+00 623 | 3.000000000000000000e+00 624 | 2.000000000000000000e+00 625 | 0.000000000000000000e+00 626 | 0.000000000000000000e+00 627 | 4.000000000000000000e+00 628 | 0.000000000000000000e+00 629 | 0.000000000000000000e+00 630 | 7.000000000000000000e+00 631 | 6.000000000000000000e+00 632 | 4.000000000000000000e+00 633 | 1.000000000000000000e+01 634 | 0.000000000000000000e+00 635 | 4.000000000000000000e+00 636 | 3.000000000000000000e+00 637 | 7.000000000000000000e+00 638 | 6.000000000000000000e+00 639 | 4.000000000000000000e+00 640 | 5.000000000000000000e+00 641 | 4.000000000000000000e+00 642 | 3.000000000000000000e+00 643 | 3.000000000000000000e+00 644 | 6.000000000000000000e+00 645 | 9.000000000000000000e+00 646 | 1.000000000000000000e+00 647 | 3.000000000000000000e+00 648 | 1.000000000000000000e+01 649 | 6.000000000000000000e+00 650 | 8.000000000000000000e+00 651 | 6.000000000000000000e+00 652 | 9.000000000000000000e+00 653 | 8.000000000000000000e+00 654 | 2.000000000000000000e+00 655 | 1.000000000000000000e+00 656 | 4.000000000000000000e+00 657 | 9.000000000000000000e+00 658 | 2.000000000000000000e+00 659 | 7.000000000000000000e+00 660 | 3.000000000000000000e+00 661 | 4.000000000000000000e+00 662 | 3.000000000000000000e+00 663 | 4.000000000000000000e+00 664 | 0.000000000000000000e+00 665 | 1.000000000000000000e+01 666 | 1.000000000000000000e+00 667 | 5.000000000000000000e+00 668 | 2.000000000000000000e+00 669 | 5.000000000000000000e+00 670 | 9.000000000000000000e+00 671 | 9.000000000000000000e+00 672 | 5.000000000000000000e+00 673 | 5.000000000000000000e+00 674 | 1.000000000000000000e+01 675 | 8.000000000000000000e+00 676 | 1.000000000000000000e+01 677 | 6.000000000000000000e+00 678 | 7.000000000000000000e+00 679 | 6.000000000000000000e+00 680 | 4.000000000000000000e+00 681 | 3.000000000000000000e+00 682 | 4.000000000000000000e+00 683 | 8.000000000000000000e+00 684 | 8.000000000000000000e+00 685 | 8.000000000000000000e+00 686 | 4.000000000000000000e+00 687 | 5.000000000000000000e+00 688 | 8.000000000000000000e+00 689 | 4.000000000000000000e+00 690 | 4.000000000000000000e+00 691 | 6.000000000000000000e+00 692 | 3.000000000000000000e+00 693 | 0.000000000000000000e+00 694 | 7.000000000000000000e+00 695 | 8.000000000000000000e+00 696 | 8.000000000000000000e+00 697 | 7.000000000000000000e+00 698 | 1.000000000000000000e+00 699 | 4.000000000000000000e+00 700 | 6.000000000000000000e+00 701 | 3.000000000000000000e+00 702 | 7.000000000000000000e+00 703 | 3.000000000000000000e+00 704 | 1.000000000000000000e+00 705 | 4.000000000000000000e+00 706 | 3.000000000000000000e+00 707 | 3.000000000000000000e+00 708 | 5.000000000000000000e+00 709 | 6.000000000000000000e+00 710 | 9.000000000000000000e+00 711 | 5.000000000000000000e+00 712 | 3.000000000000000000e+00 713 | 0.000000000000000000e+00 714 | 7.000000000000000000e+00 715 | 4.000000000000000000e+00 716 | 0.000000000000000000e+00 717 | 6.000000000000000000e+00 718 | 8.000000000000000000e+00 719 | 7.000000000000000000e+00 720 | 1.000000000000000000e+00 721 | 4.000000000000000000e+00 722 | 3.000000000000000000e+00 723 | 6.000000000000000000e+00 724 | 6.000000000000000000e+00 725 | 4.000000000000000000e+00 726 | 4.000000000000000000e+00 727 | 6.000000000000000000e+00 728 | 2.000000000000000000e+00 729 | 5.000000000000000000e+00 730 | 0.000000000000000000e+00 731 | 2.000000000000000000e+00 732 | 5.000000000000000000e+00 733 | 8.000000000000000000e+00 734 | 8.000000000000000000e+00 735 | 8.000000000000000000e+00 736 | 0.000000000000000000e+00 737 | 0.000000000000000000e+00 738 | 3.000000000000000000e+00 739 | 1.000000000000000000e+00 740 | 5.000000000000000000e+00 741 | 5.000000000000000000e+00 742 | 8.000000000000000000e+00 743 | 8.000000000000000000e+00 744 | 5.000000000000000000e+00 745 | 9.000000000000000000e+00 746 | 5.000000000000000000e+00 747 | 2.000000000000000000e+00 748 | 2.000000000000000000e+00 749 | 7.000000000000000000e+00 750 | 1.000000000000000000e+00 751 | 1.000000000000000000e+00 752 | 4.000000000000000000e+00 753 | 5.000000000000000000e+00 754 | 3.000000000000000000e+00 755 | 1.000000000000000000e+00 756 | 0.000000000000000000e+00 757 | 1.000000000000000000e+01 758 | 2.000000000000000000e+00 759 | 0.000000000000000000e+00 760 | 4.000000000000000000e+00 761 | 6.000000000000000000e+00 762 | 0.000000000000000000e+00 763 | 8.000000000000000000e+00 764 | 7.000000000000000000e+00 765 | 8.000000000000000000e+00 766 | 5.000000000000000000e+00 767 | 0.000000000000000000e+00 768 | 3.000000000000000000e+00 769 | 1.000000000000000000e+01 770 | 9.000000000000000000e+00 771 | 5.000000000000000000e+00 772 | 6.000000000000000000e+00 773 | 1.000000000000000000e+01 774 | 4.000000000000000000e+00 775 | 4.000000000000000000e+00 776 | 8.000000000000000000e+00 777 | 0.000000000000000000e+00 778 | 3.000000000000000000e+00 779 | 4.000000000000000000e+00 780 | 3.000000000000000000e+00 781 | 4.000000000000000000e+00 782 | 5.000000000000000000e+00 783 | 6.000000000000000000e+00 784 | 2.000000000000000000e+00 785 | 1.000000000000000000e+01 786 | 5.000000000000000000e+00 787 | 0.000000000000000000e+00 788 | 6.000000000000000000e+00 789 | 8.000000000000000000e+00 790 | 1.000000000000000000e+00 791 | 7.000000000000000000e+00 792 | 3.000000000000000000e+00 793 | 9.000000000000000000e+00 794 | 0.000000000000000000e+00 795 | 0.000000000000000000e+00 796 | 6.000000000000000000e+00 797 | 4.000000000000000000e+00 798 | 6.000000000000000000e+00 799 | 6.000000000000000000e+00 800 | 6.000000000000000000e+00 801 | 3.000000000000000000e+00 802 | 4.000000000000000000e+00 803 | 9.000000000000000000e+00 804 | 6.000000000000000000e+00 805 | 7.000000000000000000e+00 806 | 3.000000000000000000e+00 807 | 4.000000000000000000e+00 808 | 2.000000000000000000e+00 809 | 5.000000000000000000e+00 810 | 0.000000000000000000e+00 811 | 7.000000000000000000e+00 812 | 3.000000000000000000e+00 813 | 0.000000000000000000e+00 814 | 5.000000000000000000e+00 815 | 5.000000000000000000e+00 816 | 0.000000000000000000e+00 817 | 6.000000000000000000e+00 818 | 7.000000000000000000e+00 819 | 1.000000000000000000e+00 820 | 8.000000000000000000e+00 821 | 4.000000000000000000e+00 822 | 4.000000000000000000e+00 823 | 7.000000000000000000e+00 824 | 4.000000000000000000e+00 825 | 1.000000000000000000e+01 826 | 2.000000000000000000e+00 827 | 5.000000000000000000e+00 828 | 0.000000000000000000e+00 829 | 4.000000000000000000e+00 830 | 7.000000000000000000e+00 831 | 8.000000000000000000e+00 832 | 0.000000000000000000e+00 833 | 9.000000000000000000e+00 834 | 6.000000000000000000e+00 835 | 5.000000000000000000e+00 836 | 0.000000000000000000e+00 837 | 0.000000000000000000e+00 838 | 5.000000000000000000e+00 839 | 0.000000000000000000e+00 840 | 3.000000000000000000e+00 841 | 7.000000000000000000e+00 842 | 4.000000000000000000e+00 843 | 6.000000000000000000e+00 844 | 5.000000000000000000e+00 845 | 1.000000000000000000e+00 846 | 8.000000000000000000e+00 847 | 4.000000000000000000e+00 848 | 7.000000000000000000e+00 849 | 7.000000000000000000e+00 850 | 8.000000000000000000e+00 851 | 5.000000000000000000e+00 852 | 4.000000000000000000e+00 853 | 7.000000000000000000e+00 854 | 5.000000000000000000e+00 855 | 0.000000000000000000e+00 856 | 5.000000000000000000e+00 857 | 7.000000000000000000e+00 858 | 9.000000000000000000e+00 859 | 1.000000000000000000e+00 860 | 4.000000000000000000e+00 861 | 7.000000000000000000e+00 862 | 1.000000000000000000e+00 863 | 0.000000000000000000e+00 864 | 6.000000000000000000e+00 865 | 4.000000000000000000e+00 866 | 4.000000000000000000e+00 867 | 3.000000000000000000e+00 868 | 7.000000000000000000e+00 869 | 9.000000000000000000e+00 870 | 5.000000000000000000e+00 871 | 4.000000000000000000e+00 872 | 3.000000000000000000e+00 873 | 7.000000000000000000e+00 874 | 3.000000000000000000e+00 875 | 7.000000000000000000e+00 876 | 7.000000000000000000e+00 877 | 4.000000000000000000e+00 878 | 7.000000000000000000e+00 879 | 7.000000000000000000e+00 880 | 3.000000000000000000e+00 881 | 4.000000000000000000e+00 882 | 1.000000000000000000e+00 883 | 1.000000000000000000e+00 884 | 1.000000000000000000e+00 885 | 3.000000000000000000e+00 886 | 6.000000000000000000e+00 887 | 6.000000000000000000e+00 888 | 4.000000000000000000e+00 889 | 1.000000000000000000e+01 890 | 7.000000000000000000e+00 891 | 8.000000000000000000e+00 892 | 1.000000000000000000e+01 893 | 9.000000000000000000e+00 894 | 7.000000000000000000e+00 895 | 3.000000000000000000e+00 896 | 6.000000000000000000e+00 897 | 6.000000000000000000e+00 898 | 4.000000000000000000e+00 899 | 0.000000000000000000e+00 900 | 0.000000000000000000e+00 901 | 4.000000000000000000e+00 902 | 1.000000000000000000e+00 903 | 0.000000000000000000e+00 904 | 0.000000000000000000e+00 905 | 6.000000000000000000e+00 906 | 0.000000000000000000e+00 907 | 0.000000000000000000e+00 908 | 1.000000000000000000e+01 909 | 0.000000000000000000e+00 910 | 4.000000000000000000e+00 911 | 5.000000000000000000e+00 912 | 3.000000000000000000e+00 913 | 5.000000000000000000e+00 914 | 5.000000000000000000e+00 915 | 1.000000000000000000e+00 916 | 0.000000000000000000e+00 917 | 7.000000000000000000e+00 918 | 3.000000000000000000e+00 919 | 1.000000000000000000e+00 920 | 5.000000000000000000e+00 921 | 5.000000000000000000e+00 922 | 8.000000000000000000e+00 923 | 0.000000000000000000e+00 924 | 7.000000000000000000e+00 925 | 0.000000000000000000e+00 926 | 6.000000000000000000e+00 927 | 7.000000000000000000e+00 928 | 1.000000000000000000e+00 929 | 5.000000000000000000e+00 930 | 4.000000000000000000e+00 931 | 8.000000000000000000e+00 932 | 2.000000000000000000e+00 933 | 1.000000000000000000e+00 934 | 6.000000000000000000e+00 935 | 8.000000000000000000e+00 936 | 7.000000000000000000e+00 937 | 7.000000000000000000e+00 938 | 0.000000000000000000e+00 939 | 9.000000000000000000e+00 940 | 1.000000000000000000e+01 941 | 7.000000000000000000e+00 942 | 1.000000000000000000e+00 943 | 5.000000000000000000e+00 944 | 3.000000000000000000e+00 945 | 5.000000000000000000e+00 946 | 7.000000000000000000e+00 947 | 3.000000000000000000e+00 948 | 1.000000000000000000e+00 949 | 4.000000000000000000e+00 950 | 8.000000000000000000e+00 951 | 2.000000000000000000e+00 952 | 3.000000000000000000e+00 953 | 7.000000000000000000e+00 954 | 8.000000000000000000e+00 955 | 9.000000000000000000e+00 956 | 8.000000000000000000e+00 957 | 3.000000000000000000e+00 958 | 5.000000000000000000e+00 959 | 1.000000000000000000e+00 960 | 5.000000000000000000e+00 961 | 1.000000000000000000e+00 962 | 9.000000000000000000e+00 963 | 5.000000000000000000e+00 964 | 0.000000000000000000e+00 965 | 4.000000000000000000e+00 966 | 7.000000000000000000e+00 967 | 8.000000000000000000e+00 968 | 1.000000000000000000e+00 969 | 3.000000000000000000e+00 970 | 8.000000000000000000e+00 971 | 6.000000000000000000e+00 972 | 9.000000000000000000e+00 973 | 7.000000000000000000e+00 974 | 0.000000000000000000e+00 975 | 3.000000000000000000e+00 976 | 5.000000000000000000e+00 977 | 0.000000000000000000e+00 978 | 7.000000000000000000e+00 979 | 1.000000000000000000e+00 980 | 3.000000000000000000e+00 981 | 5.000000000000000000e+00 982 | 8.000000000000000000e+00 983 | 8.000000000000000000e+00 984 | 0.000000000000000000e+00 985 | 3.000000000000000000e+00 986 | 8.000000000000000000e+00 987 | 4.000000000000000000e+00 988 | 0.000000000000000000e+00 989 | 3.000000000000000000e+00 990 | 0.000000000000000000e+00 991 | 0.000000000000000000e+00 992 | 0.000000000000000000e+00 993 | 1.000000000000000000e+01 994 | 2.000000000000000000e+00 995 | 0.000000000000000000e+00 996 | 1.000000000000000000e+00 997 | 1.000000000000000000e+00 998 | 2.000000000000000000e+00 999 | 6.000000000000000000e+00 1000 | 4.000000000000000000e+00 1001 | --------------------------------------------------------------------------------