├── boruta ├── test │ ├── __init__.py │ └── test_boruta.py ├── __init__.py ├── examples │ ├── test_y.csv │ ├── Madalon_Data_Set.ipynb │ └── test_X.csv └── boruta_py.py ├── requirements.txt ├── test_requirements.txt ├── MANIFEST.in ├── setup.py ├── .gitignore ├── .github └── workflows │ ├── publish-to-pypi.yml │ └── test_package.yml ├── LICENSE └── README.md /boruta/test/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /boruta/__init__.py: -------------------------------------------------------------------------------- 1 | from .boruta_py import BorutaPy 2 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | numpy>=1.26.4 2 | pandas>=2.2.0 3 | scikit-learn>=1.5.2 -------------------------------------------------------------------------------- /test_requirements.txt: -------------------------------------------------------------------------------- 1 | -r requirements.txt 2 | pytest>=5.4.1 3 | 4 | # repo maintenance tooling 5 | black>=21.5b1 6 | flake8>=3.9.2 7 | isort>=5.8.0 -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | # Include the license file 2 | include LICENSE 3 | 4 | # Include the data files 5 | include boruta/examples/test_X.csv 6 | include boruta/examples/test_y.csv 7 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | from setuptools import setup 2 | 3 | setup(name='Boruta', 4 | version='{{VERSION_PLACEHOLDER}}', 5 | description='Python Implementation of Boruta Feature Selection', 6 | url='https://github.com/danielhomola/boruta_py', 7 | download_url='https://github.com/danielhomola/boruta_py/tarball/0.1.5', 8 | author='Daniel Homola', 9 | author_email='dani.homola@gmail.com', 10 | license='BSD 3 clause', 11 | packages=['boruta'], 12 | package_dir={'boruta': 'boruta'}, 13 | package_data={'boruta/examples/*csv': ['boruta/examples/*.csv']}, 14 | include_package_data=True, 15 | long_description=open('README.md').read(), 16 | long_description_content_type='text/markdown', 17 | keywords=['feature selection', 'machine learning', 'random forest'], 18 | install_requires=['numpy>=1.10.4', 19 | 'scikit-learn>=0.17.1', 20 | 'scipy>=0.17.0' 21 | ]) 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # Distribution / packaging 7 | .Python 8 | build/ 9 | develop-eggs/ 10 | dist/ 11 | downloads/ 12 | eggs/ 13 | .eggs/ 14 | lib/ 15 | lib64/ 16 | parts/ 17 | sdist/ 18 | var/ 19 | wheels/ 20 | *.egg-info/ 21 | .installed.cfg 22 | *.egg 23 | 24 | # PyInstaller 25 | # Usually these files are written by a python script from a template 26 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 27 | *.manifest 28 | *.spec 29 | 30 | # Installer logs 31 | pip-log.txt 32 | pip-delete-this-directory.txt 33 | 34 | 35 | # Jupyter Notebook 36 | .ipynb_checkpoints 37 | 38 | # pyenv 39 | .python-version 40 | 41 | # Environments 42 | .env 43 | .venv 44 | env/ 45 | venv/ 46 | ENV/ 47 | env.bak/ 48 | venv.bak/ 49 | 50 | # Spyder project settings 51 | .spyderproject 52 | .spyproject 53 | 54 | # Rope project settings 55 | .ropeproject 56 | 57 | # mkdocs documentation 58 | /site 59 | 60 | # mypy 61 | .mypy_cache/ 62 | 63 | # Miscelaneous 64 | .idea 65 | .vscode 66 | *.DS_Store 67 | *.db 68 | *.pptx -------------------------------------------------------------------------------- /.github/workflows/publish-to-pypi.yml: -------------------------------------------------------------------------------- 1 | name: Publish Python 🐍 distributions 📦 to PyPI 2 | 3 | on: 4 | push: 5 | tags: 6 | - '*' 7 | workflow_dispatch: 8 | inputs: 9 | version: 10 | description: 'Version to publish' 11 | required: true 12 | default: '' 13 | 14 | jobs: 15 | build-n-publish: 16 | name: Build and publish Python 🐍 distributions 📦 to PyPI 17 | runs-on: ubuntu-latest 18 | permissions: 19 | id-token: write # OIDC for PyPi Trusted Publisher feature 20 | steps: 21 | - uses: actions/checkout@v3 22 | - name: Set up Python 3.10 23 | uses: actions/setup-python@v3 24 | with: 25 | python-version: '3.10' 26 | - name: Install pypa/setuptools 27 | run: python -m pip install wheel setuptools 28 | - name: Extract tag name or use manual input 29 | id: get_version 30 | run: | 31 | if [[ $GITHUB_REF == refs/tags/* ]]; then 32 | echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT 33 | else 34 | echo "VERSION=${{ github.event.inputs.version }}" >> $GITHUB_OUTPUT 35 | fi 36 | - name: Update version in setup.py 37 | run: sed -i "s/{{VERSION_PLACEHOLDER}}/${{ steps.get_version.outputs.VERSION }}/g" setup.py 38 | - name: Build a binary wheel 39 | run: python setup.py sdist bdist_wheel 40 | - name: Publish distribution 📦 to PyPI 41 | uses: pypa/gh-action-pypi-publish@v1.13.0 42 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016, Daniel Homola 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | * Redistributions of source code must retain the above copyright notice, this 8 | list of conditions and the following disclaimer. 9 | 10 | * Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | 14 | * Neither the name of boruta_py nor the names of its 15 | contributors may be used to endorse or promote products derived from 16 | this software without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 22 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 24 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 25 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 26 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | -------------------------------------------------------------------------------- /.github/workflows/test_package.yml: -------------------------------------------------------------------------------- 1 | name: Test boruta 2 | 3 | on: 4 | push: 5 | branches: [ "master" ] 6 | pull_request: 7 | branches: [ "master" ] 8 | 9 | jobs: 10 | build: 11 | runs-on: ubuntu-latest 12 | 13 | strategy: 14 | matrix: 15 | include: 16 | # Regular Python versions (no special package versions) 17 | - python-version: "3.10" 18 | - python-version: "3.12" 19 | - python-version: "3.13" 20 | 21 | # Python 3.11 with different scikit-learn versions 22 | - python-version: "3.11" 23 | sklearn-version: "1.5.2" 24 | - python-version: "3.11" 25 | sklearn-version: "1.6.1" 26 | - python-version: "3.11" 27 | sklearn-version: "1.7.0" 28 | 29 | # Python 3.11 with different NumPy versions 30 | - python-version: "3.11" 31 | numpy-version: "1.26.4" 32 | - python-version: "3.11" 33 | numpy-version: "2.0.1" 34 | - python-version: "3.11" 35 | numpy-version: "2.1.1" 36 | - python-version: "3.11" 37 | numpy-version: "2.2.2" 38 | - python-version: "3.11" 39 | numpy-version: "2.3.1" 40 | 41 | name: >- 42 | Python ${{ matrix.python-version }} 43 | ${{ matrix.sklearn-version && format('(scikit-learn {0})', matrix.sklearn-version) || '' }} 44 | ${{ matrix.numpy-version && format('(NumPy {0})', matrix.numpy-version) || '' }} 45 | 46 | steps: 47 | - uses: actions/checkout@v5 48 | 49 | - name: Set up Python ${{ matrix.python-version }} 50 | uses: actions/setup-python@v5 51 | with: 52 | python-version: ${{ matrix.python-version }} 53 | 54 | - name: Display Python version 55 | run: python -c "import sys; print(sys.version)" 56 | 57 | - name: Install dependencies 58 | run: | 59 | python -m pip install --upgrade pip 60 | pip install -r requirements.txt 61 | pip install -r test_requirements.txt 62 | 63 | # Install specific scikit-learn version if defined 64 | if [ -n "${{ matrix.sklearn-version }}" ]; then 65 | echo "Installing scikit-learn==${{ matrix.sklearn-version }}" 66 | pip install scikit-learn==${{ matrix.sklearn-version }} 67 | fi 68 | 69 | # Install specific NumPy version if defined 70 | if [ -n "${{ matrix.numpy-version }}" ]; then 71 | echo "Installing numpy==${{ matrix.numpy-version }}" 72 | pip install numpy==${{ matrix.numpy-version }} 73 | fi 74 | 75 | - name: Test with pytest 76 | run: | 77 | pip install pytest 78 | pytest -------------------------------------------------------------------------------- /boruta/test/test_boruta.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import pandas as pd 3 | import pytest 4 | from sklearn.ensemble import RandomForestClassifier 5 | from sklearn.exceptions import NotFittedError 6 | from sklearn.tree import DecisionTreeClassifier, ExtraTreeClassifier 7 | 8 | from boruta import BorutaPy 9 | 10 | 11 | @pytest.mark.parametrize("tree_n,expected", [(10, 44), (100, 141)]) 12 | def test_get_tree_num(tree_n, expected): 13 | rfc = RandomForestClassifier(max_depth=10) 14 | bt = BorutaPy(rfc) 15 | assert bt._get_tree_num(tree_n) == expected 16 | 17 | 18 | @pytest.fixture(scope="module") 19 | def Xy(): 20 | np.random.seed(42) 21 | y = np.random.binomial(1, 0.5, 1000) 22 | X = np.zeros((1000, 10)) 23 | 24 | z = (y - np.random.binomial(1, 0.1, 1000) + 25 | np.random.binomial(1, 0.1, 1000)) 26 | z[z == -1] = 0 27 | z[z == 2] = 1 28 | 29 | # 5 relevant features 30 | X[:, 0] = z 31 | X[:, 1] = (y * np.abs(np.random.normal(0, 1, 1000)) + 32 | np.random.normal(0, 0.1, 1000)) 33 | X[:, 2] = y + np.random.normal(0, 1, 1000) 34 | X[:, 3] = y**2 + np.random.normal(0, 1, 1000) 35 | X[:, 4] = np.sqrt(y) + np.random.binomial(2, 0.1, 1000) 36 | 37 | # 5 irrelevant features 38 | X[:, 5] = np.random.normal(0, 1, 1000) 39 | X[:, 6] = np.random.poisson(1, 1000) 40 | X[:, 7] = np.random.binomial(1, 0.3, 1000) 41 | X[:, 8] = np.random.normal(0, 1, 1000) 42 | X[:, 9] = np.random.poisson(1, 1000) 43 | 44 | return X, y 45 | 46 | 47 | def test_if_boruta_extracts_relevant_features(Xy): 48 | X, y = Xy 49 | rfc = RandomForestClassifier() 50 | bt = BorutaPy(rfc) 51 | bt.fit(X, y) 52 | assert list(range(5)) == list(np.where(bt.support_)[0]) 53 | 54 | 55 | def test_if_it_works_with_dataframe_input(Xy): 56 | X, y = Xy 57 | X_df, y_df = pd.DataFrame(X), pd.Series(y) 58 | bt = BorutaPy(RandomForestClassifier()) 59 | bt.fit(X_df, y_df) 60 | assert list(range(5)) == list(np.where(bt.support_)[0]) 61 | 62 | 63 | def test_dataframe_is_returned(Xy): 64 | X, y = Xy 65 | X_df, y_df = pd.DataFrame(X), pd.Series(y) 66 | rfc = RandomForestClassifier() 67 | bt = BorutaPy(rfc) 68 | bt.fit(X_df, y_df) 69 | assert isinstance(bt.transform(X_df, return_df=True), pd.DataFrame) 70 | 71 | 72 | def test_selector_mixin_get_support_requires_fit(): 73 | bt = BorutaPy(RandomForestClassifier()) 74 | with pytest.raises(NotFittedError): 75 | bt.get_support() 76 | 77 | 78 | def test_selector_mixin_get_support_matches_mask(Xy): 79 | X, y = Xy 80 | bt = BorutaPy(RandomForestClassifier()) 81 | bt.fit(X, y) 82 | 83 | assert np.array_equal(bt.get_support(), bt.support_) 84 | assert np.array_equal(bt.get_support(indices=True), 85 | np.where(bt.support_)[0]) 86 | 87 | 88 | def test_selector_mixin_inverse_transform_restores_selected_features(Xy): 89 | X, y = Xy 90 | bt = BorutaPy(RandomForestClassifier()) 91 | bt.fit(X, y) 92 | 93 | X_selected = bt.transform(X) 94 | X_reconstructed = bt.inverse_transform(X_selected) 95 | 96 | assert X_reconstructed.shape == X.shape 97 | assert np.allclose(X_reconstructed[:, bt.support_], X[:, bt.support_]) 98 | 99 | if (~bt.support_).any(): 100 | assert np.allclose(X_reconstructed[:, ~bt.support_], 0) 101 | 102 | 103 | def test_selector_mixin_get_feature_names_out_requires_fit(): 104 | bt = BorutaPy(RandomForestClassifier()) 105 | with pytest.raises(NotFittedError): 106 | bt.get_feature_names_out() 107 | 108 | 109 | def test_selector_mixin_get_feature_names_out_returns_selected_names(Xy): 110 | X, y = Xy 111 | bt = BorutaPy(RandomForestClassifier()) 112 | bt.fit(X, y) 113 | 114 | expected_default = np.array([f"x{i}" for i in np.where(bt.support_)[0]]) 115 | assert np.array_equal(bt.get_feature_names_out(), expected_default) 116 | 117 | custom_names = np.array([f"feature_{i}" for i in range(X.shape[1])]) 118 | selected_names = bt.get_feature_names_out(custom_names) 119 | assert np.array_equal(selected_names, custom_names[bt.support_]) 120 | 121 | columns = [f"col_{i}" for i in range(X.shape[1])] 122 | X_df = pd.DataFrame(X, columns=columns) 123 | bt_df = BorutaPy(RandomForestClassifier()) 124 | bt_df.fit(X_df, y) 125 | assert np.array_equal(bt_df.get_feature_names_out(), np.array(columns)[bt_df.support_]) 126 | 127 | 128 | @pytest.mark.parametrize("tree", [ExtraTreeClassifier(), DecisionTreeClassifier()]) 129 | def test_boruta_with_decision_trees(tree, Xy): 130 | msg = ( 131 | f"The estimator {tree} does not take the parameter " 132 | "n_estimators. Use Random Forests or gradient boosting machines " 133 | "instead." 134 | ) 135 | X, y = Xy 136 | bt = BorutaPy(tree) 137 | with pytest.raises(ValueError) as record: 138 | bt.fit(X, y) 139 | 140 | assert str(record.value) == msg 141 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # boruta_py # 2 | 3 | [![License](https://img.shields.io/github/license/scikit-learn-contrib/boruta_py)](https://github.com/scikit-learn-contrib/boruta_py/blob/master/LICENSE) 4 | [![PyPI version](https://badge.fury.io/py/Boruta.svg)](https://badge.fury.io/py/Boruta) 5 | [![Anaconda-Server Badge](https://anaconda.org/conda-forge/boruta_py/badges/version.svg)](https://anaconda.org/conda-forge/boruta_py) 6 | 7 | This project hosts Python implementations of the [Boruta all-relevant feature selection method](https://www.jstatsoft.org/article/view/v036i11). 8 | 9 | [Related blog post](https://danielhomola.com/feature%20selection/phd/borutapy-an-all-relevant-feature-selection-method/) 10 | 11 | 12 | ## How to install ## 13 | 14 | Install with `pip`: 15 | 16 | ```shell 17 | pip install Boruta 18 | ``` 19 | 20 | or with `conda`: 21 | 22 | ```shell 23 | conda install -c conda-forge boruta_py 24 | ``` 25 | 26 | ## Dependencies ## 27 | 28 | * numpy 29 | * scipy 30 | * scikit-learn 31 | 32 | ## How to use ## 33 | 34 | Download, import and do as you would with any other scikit-learn method: 35 | * fit(X, y) 36 | * transform(X) 37 | * fit_transform(X, y) 38 | 39 | ## Description ## 40 | 41 | Python implementations of the Boruta R package. 42 | 43 | This implementation tries to mimic the scikit-learn interface, so use fit, 44 | transform or fit_transform, to run the feature selection. 45 | 46 | For more, see the docs of these functions, and the examples below. 47 | 48 | [Original code](https://gitlab.com/mbq/Boruta) and method was authored by Miron B. Kursa. 49 | 50 | Boruta is an all relevant feature selection method, while most other are 51 | minimal optimal; this means it tries to find all features carrying 52 | information usable for prediction, rather than finding a possibly compact 53 | subset of features on which some classifier has a minimal error. 54 | 55 | Why bother with all relevant feature selection? 56 | When you try to understand the phenomenon that made your data, you should 57 | care about all factors that contribute to it, not just the bluntest signs 58 | of it in context of your methodology (yes, minimal optimal set of features 59 | by definition depends on your classifier choice). 60 | 61 | 62 | ## What's different in BorutaPy? ## 63 | 64 | It is the original R package recoded in Python with a few added extra features. 65 | Some improvements include: 66 | 67 | * Faster run times, thanks to scikit-learn 68 | 69 | * Scikit-learn like interface 70 | 71 | * Compatible with any ensemble method from scikit-learn 72 | 73 | * Automatic n_estimator selection 74 | 75 | * Ranking of features 76 | 77 | * Feature importances are derived from Gini impurity instead of RandomForest R package's MDA. 78 | 79 | For more details, please check the top of the docstring. 80 | 81 | We highly recommend using pruned trees with a depth between 3-7. 82 | 83 | Also, after playing around a lot with the original code I identified a few areas 84 | where the core algorithm could be improved/altered to make it less strict and 85 | more applicable to biological data, where the Bonferroni correction might be 86 | overly harsh. 87 | 88 | __Percentile as threshold__ 89 | The original method uses the maximum of the shadow features as a threshold in 90 | deciding which real feature is doing better than the shadow ones. This could be 91 | overly harsh. 92 | 93 | To control this, I added the perc parameter, which sets the 94 | percentile of the shadow features' importances, the algorithm uses as the 95 | threshold. The default of 100 which is equivalent to taking the maximum as the 96 | R version of Boruta does, but it could be relaxed. Note, since this is the 97 | percentile, it changes with the size of the dataset. With several thousands of 98 | features it isn't as stringent as with a few dozens at the end of a Boruta run. 99 | 100 | 101 | __Two step correction for multiple testing__ 102 | The correction for multiple testing was relaxed by making it a two step 103 | process, rather than a harsh one step Bonferroni correction. 104 | 105 | We need to correct firstly because in each iteration we test a number of 106 | features against the null hypothesis (does a feature perform better than 107 | expected by random). For this the Bonferroni correction is used in the original 108 | code which is known to be too stringent in such scenarios (at least for 109 | biological data), and also the original code corrects for n features, even if 110 | we are in the 50th iteration where we only have k< A supervised learning estimator, with a 'fit' method that returns the 125 | > feature_importances_ attribute. Important features must correspond to 126 | > high absolute values in the feature_importances_. 127 | 128 | __n_estimators__ : int or string, default = 1000 129 | > If int sets the number of estimators in the chosen ensemble method. 130 | > If 'auto' this is determined automatically based on the size of the 131 | > dataset. The other parameters of the used estimators need to be set 132 | > with initialisation. 133 | 134 | __perc__ : int, default = 100 135 | > Instead of the max we use the percentile defined by the user, to pick 136 | > our threshold for comparison between shadow and real features. The max 137 | > tends to be too stringent. This provides a finer control over this. The 138 | > lower perc is the more false positives will be picked as relevant but 139 | > also the less relevant features will be left out. The usual trade-off. 140 | > The default is essentially the vanilla Boruta corresponding to the max. 141 | 142 | __alpha__ : float, default = 0.05 143 | > Level at which the corrected p-values will get rejected in both correction 144 | steps. 145 | 146 | __two_step__ : Boolean, default = True 147 | > If you want to use the original implementation of Boruta with Bonferroni 148 | > correction only set this to False. 149 | 150 | __max_iter__ : int, default = 100 151 | > The number of maximum iterations to perform. 152 | 153 | __verbose__ : int, default=0 154 | > Controls verbosity of output. 155 | 156 | 157 | ## Attributes ## 158 | 159 | **n_features_** : int 160 | > The number of selected features. 161 | 162 | **support_** : array of shape [n_features] 163 | > The mask of selected features - only confirmed ones are True. 164 | 165 | **support_weak_** : array of shape [n_features] 166 | > The mask of selected tentative features, which haven't gained enough 167 | > support during the max_iter number of iterations.. 168 | 169 | **ranking_** : array of shape [n_features] 170 | > The feature ranking, such that ``ranking_[i]`` corresponds to the 171 | > ranking position of the i-th feature. Selected (i.e., estimated 172 | > best) features are assigned rank 1 and tentative features are assigned 173 | > rank 2. 174 | 175 | 176 | ## Examples ## 177 | 178 | [![Open example notebook](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/https://raw.githubusercontent.com/scikit-learn-contrib/boruta_py/master/boruta/examples/Madalon_Data_Set.ipynb) 179 | [![Open example notebook](https://b.mineo.app/static/img/open_in_mineo.svg)](https://b.mineo.app/import/https://raw.githubusercontent.com/scikit-learn-contrib/boruta_py/master/boruta/examples/Madalon_Data_Set.ipynb) 180 | 181 | ```python 182 | import pandas as pd 183 | from sklearn.ensemble import RandomForestClassifier 184 | from boruta import BorutaPy 185 | 186 | # load X and y 187 | # NOTE BorutaPy accepts numpy arrays only, hence the .values attribute 188 | X = pd.read_csv('examples/test_X.csv', index_col=0).values 189 | y = pd.read_csv('examples/test_y.csv', header=None, index_col=0).values 190 | y = y.ravel() 191 | 192 | # define random forest classifier, with utilising all cores and 193 | # sampling in proportion to y labels 194 | rf = RandomForestClassifier(n_jobs=-1, class_weight='balanced', max_depth=5) 195 | 196 | # define Boruta feature selection method 197 | feat_selector = BorutaPy(rf, n_estimators='auto', verbose=2, random_state=1) 198 | 199 | # find all relevant features - 5 features should be selected 200 | feat_selector.fit(X, y) 201 | 202 | # check selected features - first 5 features are selected 203 | feat_selector.support_ 204 | 205 | # check ranking of features 206 | feat_selector.ranking_ 207 | 208 | # call transform() on X to filter it down to selected features 209 | X_filtered = feat_selector.transform(X) 210 | ``` 211 | 212 | ## References ## 213 | 214 | 1. Kursa M., Rudnicki W., "Feature Selection with the Boruta Package" Journal of Statistical Software, Vol. 36, Issue 11, Sep 2010 215 | -------------------------------------------------------------------------------- /boruta/examples/test_y.csv: -------------------------------------------------------------------------------- 1 | 0,0 2 | 1,1 3 | 2,1 4 | 3,1 5 | 4,0 6 | 5,0 7 | 6,0 8 | 7,1 9 | 8,1 10 | 9,1 11 | 10,0 12 | 11,1 13 | 12,1 14 | 13,0 15 | 14,0 16 | 15,0 17 | 16,0 18 | 17,1 19 | 18,0 20 | 19,0 21 | 20,1 22 | 21,0 23 | 22,0 24 | 23,0 25 | 24,0 26 | 25,1 27 | 26,0 28 | 27,1 29 | 28,1 30 | 29,0 31 | 30,1 32 | 31,0 33 | 32,0 34 | 33,1 35 | 34,1 36 | 35,1 37 | 36,0 38 | 37,0 39 | 38,1 40 | 39,0 41 | 40,0 42 | 41,0 43 | 42,0 44 | 43,1 45 | 44,0 46 | 45,1 47 | 46,0 48 | 47,1 49 | 48,1 50 | 49,0 51 | 50,1 52 | 51,1 53 | 52,1 54 | 53,1 55 | 54,1 56 | 55,1 57 | 56,0 58 | 57,0 59 | 58,0 60 | 59,0 61 | 60,0 62 | 61,0 63 | 62,1 64 | 63,0 65 | 64,0 66 | 65,1 67 | 66,0 68 | 67,1 69 | 68,0 70 | 69,1 71 | 70,1 72 | 71,0 73 | 72,0 74 | 73,1 75 | 74,1 76 | 75,1 77 | 76,1 78 | 77,0 79 | 78,0 80 | 79,0 81 | 80,1 82 | 81,1 83 | 82,0 84 | 83,0 85 | 84,0 86 | 85,0 87 | 86,1 88 | 87,1 89 | 88,1 90 | 89,0 91 | 90,0 92 | 91,1 93 | 92,1 94 | 93,1 95 | 94,1 96 | 95,0 97 | 96,1 98 | 97,0 99 | 98,0 100 | 99,0 101 | 100,0 102 | 101,1 103 | 102,0 104 | 103,1 105 | 104,1 106 | 105,0 107 | 106,0 108 | 107,1 109 | 108,0 110 | 109,0 111 | 110,0 112 | 111,0 113 | 112,1 114 | 113,1 115 | 114,1 116 | 115,1 117 | 116,1 118 | 117,0 119 | 118,1 120 | 119,1 121 | 120,1 122 | 121,1 123 | 122,0 124 | 123,0 125 | 124,0 126 | 125,0 127 | 126,1 128 | 127,1 129 | 128,0 130 | 129,1 131 | 130,0 132 | 131,0 133 | 132,0 134 | 133,0 135 | 134,1 136 | 135,0 137 | 136,1 138 | 137,1 139 | 138,0 140 | 139,1 141 | 140,1 142 | 141,0 143 | 142,0 144 | 143,0 145 | 144,0 146 | 145,0 147 | 146,1 148 | 147,1 149 | 148,0 150 | 149,0 151 | 150,1 152 | 151,0 153 | 152,0 154 | 153,0 155 | 154,1 156 | 155,0 157 | 156,1 158 | 157,1 159 | 158,0 160 | 159,1 161 | 160,0 162 | 161,1 163 | 162,1 164 | 163,1 165 | 164,0 166 | 165,1 167 | 166,0 168 | 167,0 169 | 168,0 170 | 169,1 171 | 170,1 172 | 171,0 173 | 172,1 174 | 173,0 175 | 174,1 176 | 175,0 177 | 176,1 178 | 177,0 179 | 178,1 180 | 179,0 181 | 180,0 182 | 181,0 183 | 182,1 184 | 183,1 185 | 184,0 186 | 185,1 187 | 186,1 188 | 187,1 189 | 188,1 190 | 189,0 191 | 190,0 192 | 191,1 193 | 192,1 194 | 193,1 195 | 194,0 196 | 195,0 197 | 196,1 198 | 197,1 199 | 198,1 200 | 199,1 201 | 200,1 202 | 201,0 203 | 202,0 204 | 203,1 205 | 204,1 206 | 205,0 207 | 206,0 208 | 207,1 209 | 208,0 210 | 209,0 211 | 210,1 212 | 211,1 213 | 212,1 214 | 213,0 215 | 214,1 216 | 215,0 217 | 216,0 218 | 217,1 219 | 218,1 220 | 219,1 221 | 220,1 222 | 221,1 223 | 222,0 224 | 223,0 225 | 224,0 226 | 225,0 227 | 226,1 228 | 227,0 229 | 228,1 230 | 229,1 231 | 230,1 232 | 231,1 233 | 232,1 234 | 233,0 235 | 234,0 236 | 235,1 237 | 236,0 238 | 237,0 239 | 238,1 240 | 239,0 241 | 240,1 242 | 241,1 243 | 242,1 244 | 243,0 245 | 244,0 246 | 245,1 247 | 246,0 248 | 247,1 249 | 248,1 250 | 249,1 251 | 250,0 252 | 251,0 253 | 252,1 254 | 253,0 255 | 254,0 256 | 255,1 257 | 256,1 258 | 257,1 259 | 258,1 260 | 259,0 261 | 260,1 262 | 261,1 263 | 262,0 264 | 263,1 265 | 264,1 266 | 265,1 267 | 266,1 268 | 267,1 269 | 268,0 270 | 269,0 271 | 270,1 272 | 271,1 273 | 272,1 274 | 273,1 275 | 274,1 276 | 275,1 277 | 276,1 278 | 277,1 279 | 278,1 280 | 279,1 281 | 280,1 282 | 281,0 283 | 282,0 284 | 283,0 285 | 284,1 286 | 285,0 287 | 286,0 288 | 287,1 289 | 288,0 290 | 289,1 291 | 290,0 292 | 291,0 293 | 292,1 294 | 293,0 295 | 294,0 296 | 295,1 297 | 296,1 298 | 297,0 299 | 298,1 300 | 299,0 301 | 300,0 302 | 301,1 303 | 302,1 304 | 303,1 305 | 304,1 306 | 305,1 307 | 306,1 308 | 307,0 309 | 308,1 310 | 309,0 311 | 310,0 312 | 311,0 313 | 312,0 314 | 313,1 315 | 314,1 316 | 315,1 317 | 316,0 318 | 317,0 319 | 318,0 320 | 319,0 321 | 320,1 322 | 321,1 323 | 322,1 324 | 323,0 325 | 324,1 326 | 325,1 327 | 326,1 328 | 327,1 329 | 328,0 330 | 329,0 331 | 330,0 332 | 331,1 333 | 332,0 334 | 333,0 335 | 334,0 336 | 335,0 337 | 336,1 338 | 337,1 339 | 338,0 340 | 339,0 341 | 340,0 342 | 341,0 343 | 342,0 344 | 343,0 345 | 344,0 346 | 345,1 347 | 346,1 348 | 347,0 349 | 348,0 350 | 349,1 351 | 350,1 352 | 351,1 353 | 352,1 354 | 353,0 355 | 354,0 356 | 355,1 357 | 356,0 358 | 357,1 359 | 358,1 360 | 359,1 361 | 360,0 362 | 361,1 363 | 362,0 364 | 363,1 365 | 364,1 366 | 365,0 367 | 366,1 368 | 367,1 369 | 368,0 370 | 369,0 371 | 370,0 372 | 371,0 373 | 372,0 374 | 373,1 375 | 374,0 376 | 375,0 377 | 376,1 378 | 377,0 379 | 378,1 380 | 379,0 381 | 380,0 382 | 381,1 383 | 382,1 384 | 383,1 385 | 384,1 386 | 385,1 387 | 386,0 388 | 387,0 389 | 388,1 390 | 389,1 391 | 390,1 392 | 391,0 393 | 392,0 394 | 393,1 395 | 394,0 396 | 395,1 397 | 396,1 398 | 397,0 399 | 398,1 400 | 399,1 401 | 400,0 402 | 401,1 403 | 402,1 404 | 403,1 405 | 404,0 406 | 405,1 407 | 406,0 408 | 407,0 409 | 408,1 410 | 409,0 411 | 410,0 412 | 411,1 413 | 412,1 414 | 413,1 415 | 414,1 416 | 415,0 417 | 416,0 418 | 417,0 419 | 418,1 420 | 419,1 421 | 420,1 422 | 421,1 423 | 422,0 424 | 423,0 425 | 424,0 426 | 425,1 427 | 426,0 428 | 427,1 429 | 428,0 430 | 429,0 431 | 430,0 432 | 431,1 433 | 432,1 434 | 433,0 435 | 434,0 436 | 435,1 437 | 436,0 438 | 437,1 439 | 438,1 440 | 439,0 441 | 440,0 442 | 441,1 443 | 442,0 444 | 443,0 445 | 444,1 446 | 445,1 447 | 446,1 448 | 447,1 449 | 448,0 450 | 449,0 451 | 450,1 452 | 451,1 453 | 452,0 454 | 453,1 455 | 454,0 456 | 455,0 457 | 456,0 458 | 457,0 459 | 458,0 460 | 459,0 461 | 460,0 462 | 461,1 463 | 462,1 464 | 463,1 465 | 464,1 466 | 465,0 467 | 466,0 468 | 467,1 469 | 468,0 470 | 469,1 471 | 470,0 472 | 471,1 473 | 472,0 474 | 473,1 475 | 474,1 476 | 475,1 477 | 476,0 478 | 477,1 479 | 478,1 480 | 479,1 481 | 480,1 482 | 481,1 483 | 482,0 484 | 483,1 485 | 484,1 486 | 485,1 487 | 486,0 488 | 487,0 489 | 488,1 490 | 489,1 491 | 490,0 492 | 491,1 493 | 492,0 494 | 493,0 495 | 494,0 496 | 495,0 497 | 496,1 498 | 497,0 499 | 498,1 500 | 499,1 501 | 500,1 502 | 501,1 503 | 502,0 504 | 503,1 505 | 504,1 506 | 505,0 507 | 506,1 508 | 507,1 509 | 508,1 510 | 509,1 511 | 510,1 512 | 511,0 513 | 512,1 514 | 513,1 515 | 514,0 516 | 515,0 517 | 516,0 518 | 517,1 519 | 518,1 520 | 519,0 521 | 520,1 522 | 521,0 523 | 522,1 524 | 523,1 525 | 524,1 526 | 525,0 527 | 526,0 528 | 527,0 529 | 528,0 530 | 529,1 531 | 530,1 532 | 531,1 533 | 532,1 534 | 533,1 535 | 534,1 536 | 535,1 537 | 536,1 538 | 537,0 539 | 538,0 540 | 539,0 541 | 540,1 542 | 541,1 543 | 542,0 544 | 543,1 545 | 544,1 546 | 545,0 547 | 546,0 548 | 547,1 549 | 548,1 550 | 549,1 551 | 550,1 552 | 551,1 553 | 552,1 554 | 553,1 555 | 554,1 556 | 555,0 557 | 556,0 558 | 557,0 559 | 558,1 560 | 559,1 561 | 560,1 562 | 561,0 563 | 562,0 564 | 563,0 565 | 564,0 566 | 565,1 567 | 566,0 568 | 567,0 569 | 568,1 570 | 569,0 571 | 570,1 572 | 571,1 573 | 572,0 574 | 573,1 575 | 574,1 576 | 575,1 577 | 576,0 578 | 577,1 579 | 578,0 580 | 579,0 581 | 580,0 582 | 581,1 583 | 582,0 584 | 583,0 585 | 584,1 586 | 585,0 587 | 586,0 588 | 587,0 589 | 588,0 590 | 589,0 591 | 590,0 592 | 591,1 593 | 592,0 594 | 593,0 595 | 594,1 596 | 595,0 597 | 596,1 598 | 597,0 599 | 598,0 600 | 599,0 601 | 600,0 602 | 601,0 603 | 602,0 604 | 603,0 605 | 604,0 606 | 605,0 607 | 606,0 608 | 607,0 609 | 608,1 610 | 609,1 611 | 610,0 612 | 611,1 613 | 612,1 614 | 613,0 615 | 614,1 616 | 615,1 617 | 616,0 618 | 617,0 619 | 618,1 620 | 619,1 621 | 620,0 622 | 621,0 623 | 622,0 624 | 623,0 625 | 624,1 626 | 625,0 627 | 626,0 628 | 627,1 629 | 628,0 630 | 629,0 631 | 630,1 632 | 631,1 633 | 632,1 634 | 633,1 635 | 634,0 636 | 635,0 637 | 636,1 638 | 637,0 639 | 638,0 640 | 639,0 641 | 640,0 642 | 641,0 643 | 642,0 644 | 643,0 645 | 644,0 646 | 645,1 647 | 646,1 648 | 647,1 649 | 648,1 650 | 649,0 651 | 650,0 652 | 651,1 653 | 652,1 654 | 653,1 655 | 654,0 656 | 655,0 657 | 656,0 658 | 657,0 659 | 658,1 660 | 659,1 661 | 660,0 662 | 661,1 663 | 662,1 664 | 663,0 665 | 664,0 666 | 665,0 667 | 666,0 668 | 667,0 669 | 668,0 670 | 669,0 671 | 670,0 672 | 671,1 673 | 672,0 674 | 673,1 675 | 674,0 676 | 675,1 677 | 676,0 678 | 677,0 679 | 678,1 680 | 679,1 681 | 680,1 682 | 681,0 683 | 682,0 684 | 683,1 685 | 684,1 686 | 685,1 687 | 686,1 688 | 687,0 689 | 688,1 690 | 689,0 691 | 690,0 692 | 691,0 693 | 692,1 694 | 693,0 695 | 694,0 696 | 695,1 697 | 696,0 698 | 697,1 699 | 698,0 700 | 699,0 701 | 700,1 702 | 701,0 703 | 702,0 704 | 703,0 705 | 704,0 706 | 705,1 707 | 706,0 708 | 707,1 709 | 708,0 710 | 709,1 711 | 710,1 712 | 711,1 713 | 712,0 714 | 713,0 715 | 714,0 716 | 715,1 717 | 716,1 718 | 717,1 719 | 718,0 720 | 719,1 721 | 720,1 722 | 721,0 723 | 722,0 724 | 723,1 725 | 724,1 726 | 725,1 727 | 726,0 728 | 727,1 729 | 728,0 730 | 729,0 731 | 730,0 732 | 731,1 733 | 732,1 734 | 733,1 735 | 734,0 736 | 735,1 737 | 736,0 738 | 737,1 739 | 738,0 740 | 739,0 741 | 740,0 742 | 741,0 743 | 742,1 744 | 743,1 745 | 744,0 746 | 745,1 747 | 746,0 748 | 747,1 749 | 748,1 750 | 749,1 751 | 750,0 752 | 751,1 753 | 752,1 754 | 753,0 755 | 754,0 756 | 755,1 757 | 756,1 758 | 757,1 759 | 758,1 760 | 759,1 761 | 760,0 762 | 761,0 763 | 762,0 764 | 763,1 765 | 764,0 766 | 765,1 767 | 766,1 768 | 767,1 769 | 768,0 770 | 769,1 771 | 770,0 772 | 771,1 773 | 772,0 774 | 773,0 775 | 774,1 776 | 775,0 777 | 776,0 778 | 777,1 779 | 778,1 780 | 779,1 781 | 780,1 782 | 781,1 783 | 782,0 784 | 783,0 785 | 784,0 786 | 785,1 787 | 786,1 788 | 787,0 789 | 788,0 790 | 789,1 791 | 790,0 792 | 791,1 793 | 792,1 794 | 793,1 795 | 794,0 796 | 795,1 797 | 796,1 798 | 797,1 799 | 798,1 800 | 799,1 801 | 800,1 802 | 801,0 803 | 802,1 804 | 803,1 805 | 804,0 806 | 805,1 807 | 806,1 808 | 807,1 809 | 808,0 810 | 809,0 811 | 810,1 812 | 811,1 813 | 812,0 814 | 813,1 815 | 814,1 816 | 815,1 817 | 816,1 818 | 817,0 819 | 818,0 820 | 819,0 821 | 820,1 822 | 821,0 823 | 822,0 824 | 823,0 825 | 824,1 826 | 825,1 827 | 826,0 828 | 827,0 829 | 828,1 830 | 829,0 831 | 830,0 832 | 831,0 833 | 832,0 834 | 833,0 835 | 834,0 836 | 835,0 837 | 836,1 838 | 837,0 839 | 838,1 840 | 839,1 841 | 840,0 842 | 841,1 843 | 842,0 844 | 843,1 845 | 844,0 846 | 845,0 847 | 846,0 848 | 847,1 849 | 848,1 850 | 849,1 851 | 850,0 852 | 851,1 853 | 852,0 854 | 853,1 855 | 854,0 856 | 855,0 857 | 856,0 858 | 857,0 859 | 858,1 860 | 859,0 861 | 860,1 862 | 861,0 863 | 862,1 864 | 863,0 865 | 864,0 866 | 865,1 867 | 866,0 868 | 867,0 869 | 868,1 870 | 869,1 871 | 870,0 872 | 871,0 873 | 872,1 874 | 873,0 875 | 874,0 876 | 875,0 877 | 876,1 878 | 877,1 879 | 878,0 880 | 879,0 881 | 880,0 882 | 881,1 883 | 882,0 884 | 883,0 885 | 884,1 886 | 885,0 887 | 886,1 888 | 887,0 889 | 888,0 890 | 889,0 891 | 890,1 892 | 891,1 893 | 892,1 894 | 893,0 895 | 894,1 896 | 895,0 897 | 896,0 898 | 897,1 899 | 898,0 900 | 899,0 901 | 900,0 902 | 901,0 903 | 902,0 904 | 903,1 905 | 904,0 906 | 905,1 907 | 906,1 908 | 907,0 909 | 908,0 910 | 909,0 911 | 910,1 912 | 911,0 913 | 912,1 914 | 913,0 915 | 914,1 916 | 915,0 917 | 916,0 918 | 917,1 919 | 918,1 920 | 919,0 921 | 920,1 922 | 921,0 923 | 922,1 924 | 923,1 925 | 924,0 926 | 925,0 927 | 926,0 928 | 927,1 929 | 928,1 930 | 929,0 931 | 930,0 932 | 931,1 933 | 932,1 934 | 933,1 935 | 934,0 936 | 935,0 937 | 936,0 938 | 937,1 939 | 938,0 940 | 939,1 941 | 940,0 942 | 941,1 943 | 942,1 944 | 943,1 945 | 944,0 946 | 945,0 947 | 946,0 948 | 947,1 949 | 948,1 950 | 949,1 951 | 950,1 952 | 951,1 953 | 952,0 954 | 953,1 955 | 954,0 956 | 955,0 957 | 956,1 958 | 957,0 959 | 958,0 960 | 959,1 961 | 960,0 962 | 961,1 963 | 962,0 964 | 963,0 965 | 964,0 966 | 965,0 967 | 966,1 968 | 967,0 969 | 968,1 970 | 969,0 971 | 970,1 972 | 971,1 973 | 972,1 974 | 973,0 975 | 974,0 976 | 975,0 977 | 976,1 978 | 977,0 979 | 978,0 980 | 979,1 981 | 980,0 982 | 981,1 983 | 982,0 984 | 983,0 985 | 984,1 986 | 985,0 987 | 986,1 988 | 987,0 989 | 988,0 990 | 989,1 991 | 990,1 992 | 991,1 993 | 992,0 994 | 993,1 995 | 994,0 996 | 995,0 997 | 996,1 998 | 997,0 999 | 998,1 1000 | 999,0 1001 | -------------------------------------------------------------------------------- /boruta/examples/Madalon_Data_Set.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "### Using Boruta on the Madalon Data Set\n", 8 | "Author: [Mike Bernico](mike.bernico@gmail.com)\n", 9 | "\n", 10 | "This example demonstrates using Boruta to find all relevant features in the Madalon dataset, which is an artificial dataset used in NIPS2003 and cited in the [Boruta paper](https://www.jstatsoft.org/article/view/v036i11/v36i11.pdf).\n", 11 | "\n", 12 | "This dataset has 2000 observations and 500 features. We will use Boruta to identify the features that are relevant to the classification task.\n", 13 | "\n", 14 | "\n", 15 | "\n" 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": 1, 21 | "metadata": { 22 | "collapsed": true 23 | }, 24 | "outputs": [], 25 | "source": [ 26 | "# Installation\n", 27 | "!pip install boruta" 28 | ] 29 | }, 30 | { 31 | "cell_type": "code", 32 | "execution_count": 2, 33 | "metadata": {}, 34 | "outputs": [], 35 | "source": [ 36 | "import pandas as pd\n", 37 | "from sklearn.datasets import load_iris\n", 38 | "from sklearn.ensemble import RandomForestClassifier\n", 39 | "from boruta import BorutaPy" 40 | ] 41 | }, 42 | { 43 | "cell_type": "code", 44 | "execution_count": 3, 45 | "metadata": { 46 | "collapsed": true 47 | }, 48 | "outputs": [], 49 | "source": [ 50 | "def load_data():\n", 51 | " # URLS for dataset via UCI\n", 52 | " train_data_url='https://archive.ics.uci.edu/ml/machine-learning-databases/madelon/MADELON/madelon_train.data'\n", 53 | " train_label_url='https://archive.ics.uci.edu/ml/machine-learning-databases/madelon/MADELON/madelon_train.labels'\n", 54 | "\n", 55 | " X_data = pd.read_csv(train_data_url, sep=\" \", header=None)\n", 56 | " y_data = pd.read_csv(train_label_url, sep=\" \", header=None)\n", 57 | " data = X_data.loc[:, :499]\n", 58 | " data['target'] = y_data[0]\n", 59 | " return data" 60 | ] 61 | }, 62 | { 63 | "cell_type": "code", 64 | "execution_count": 4, 65 | "metadata": {}, 66 | "outputs": [], 67 | "source": [ 68 | "data = load_data()" 69 | ] 70 | }, 71 | { 72 | "cell_type": "code", 73 | "execution_count": 5, 74 | "metadata": {}, 75 | "outputs": [ 76 | { 77 | "data": { 78 | "text/html": [ 79 | "
\n", 80 | "\n", 81 | " \n", 82 | " \n", 83 | " \n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | " \n", 196 | " \n", 197 | " \n", 198 | " \n", 199 | " \n", 200 | " \n", 201 | " \n", 202 | " \n", 203 | " \n", 204 | " \n", 205 | " \n", 206 | " \n", 207 | " \n", 208 | " \n", 209 | " \n", 210 | " \n", 211 | " \n", 212 | " \n", 213 | " \n", 214 | " \n", 215 | " \n", 216 | " \n", 217 | " \n", 218 | " \n", 219 | " \n", 220 | " \n", 221 | " \n", 222 | " \n", 223 | " \n", 224 | " \n", 225 | " \n", 226 | " \n", 227 | " \n", 228 | " \n", 229 | "
0123456789...491492493494495496497498499target
0485477537479452471491476475473...481477485511485481479475496-1
1483458460487587475526479485469...478487338513486483492510517-1
2487542499468448471442478480477...481492650506501480489499498-1
3480491510485495472417474502476...4804745724544694754824944611
4484502528489466481402478487468...4794524354865084815044955111
\n", 230 | "

5 rows × 501 columns

\n", 231 | "
" 232 | ], 233 | "text/plain": [ 234 | " 0 1 2 3 4 5 6 7 8 9 ... 491 492 493 \\\n", 235 | "0 485 477 537 479 452 471 491 476 475 473 ... 481 477 485 \n", 236 | "1 483 458 460 487 587 475 526 479 485 469 ... 478 487 338 \n", 237 | "2 487 542 499 468 448 471 442 478 480 477 ... 481 492 650 \n", 238 | "3 480 491 510 485 495 472 417 474 502 476 ... 480 474 572 \n", 239 | "4 484 502 528 489 466 481 402 478 487 468 ... 479 452 435 \n", 240 | "\n", 241 | " 494 495 496 497 498 499 target \n", 242 | "0 511 485 481 479 475 496 -1 \n", 243 | "1 513 486 483 492 510 517 -1 \n", 244 | "2 506 501 480 489 499 498 -1 \n", 245 | "3 454 469 475 482 494 461 1 \n", 246 | "4 486 508 481 504 495 511 1 \n", 247 | "\n", 248 | "[5 rows x 501 columns]" 249 | ] 250 | }, 251 | "execution_count": 5, 252 | "metadata": {}, 253 | "output_type": "execute_result" 254 | } 255 | ], 256 | "source": [ 257 | "data.head()" 258 | ] 259 | }, 260 | { 261 | "cell_type": "code", 262 | "execution_count": 6, 263 | "metadata": {}, 264 | "outputs": [], 265 | "source": [ 266 | "y = data.pop('target')\n", 267 | "X = data.copy().values" 268 | ] 269 | }, 270 | { 271 | "cell_type": "markdown", 272 | "metadata": {}, 273 | "source": [ 274 | "Boruta conforms to the sklearn api and can be used in a Pipeline as well as on it's own. Here we will demonstrate stand-alone operation.\n", 275 | "\n", 276 | "First we will instantiate an estimator that Boruta will use. Then we will instantiate a Boruta Object." 277 | ] 278 | }, 279 | { 280 | "cell_type": "code", 281 | "execution_count": 7, 282 | "metadata": { 283 | "collapsed": true 284 | }, 285 | "outputs": [], 286 | "source": [ 287 | "rf = RandomForestClassifier(n_jobs=-1, class_weight=None, max_depth=7, random_state=0)\n", 288 | "# Define Boruta feature selection method\n", 289 | "feat_selector = BorutaPy(rf, n_estimators='auto', verbose=2, random_state=0)" 290 | ] 291 | }, 292 | { 293 | "cell_type": "markdown", 294 | "metadata": {}, 295 | "source": [ 296 | "Once built, we can use this object to identify the relevant features in our dataset." 297 | ] 298 | }, 299 | { 300 | "cell_type": "code", 301 | "execution_count": null, 302 | "metadata": {}, 303 | "outputs": [], 304 | "source": [ 305 | "feat_selector.fit(X, y)" 306 | ] 307 | }, 308 | { 309 | "cell_type": "markdown", 310 | "metadata": {}, 311 | "source": [ 312 | "Boruta has confirmed only a few features as useful. When our run ended, Boruta was undecided on 2 features.\n", 313 | "\n", 314 | "We can interrogate `.support_` to understand which features were selected. `.support_` returns an array of booleans that we can use to slice our feature matrix to include only relevant columns. Of course, `.transform` can also be used, as expected in the scikit API." 315 | ] 316 | }, 317 | { 318 | "cell_type": "code", 319 | "execution_count": null, 320 | "metadata": {}, 321 | "outputs": [], 322 | "source": [ 323 | "# Check selected features\n", 324 | "print(feat_selector.support_)\n", 325 | "# Select the chosen features from our dataframe.\n", 326 | "selected = X[:, feat_selector.support_]\n", 327 | "print (\"\")\n", 328 | "print (\"Selected Feature Matrix Shape\")\n", 329 | "print (selected.shape)" 330 | ] 331 | }, 332 | { 333 | "cell_type": "markdown", 334 | "metadata": {}, 335 | "source": [ 336 | "We can also interrogate the ranking of the unselected features with .ranking_" 337 | ] 338 | }, 339 | { 340 | "cell_type": "code", 341 | "execution_count": null, 342 | "metadata": {}, 343 | "outputs": [], 344 | "source": [ 345 | "feat_selector.ranking_" 346 | ] 347 | }, 348 | { 349 | "cell_type": "code", 350 | "execution_count": null, 351 | "metadata": { 352 | "collapsed": true 353 | }, 354 | "outputs": [], 355 | "source": [] 356 | } 357 | ], 358 | "metadata": { 359 | "kernelspec": { 360 | "display_name": "Python 3", 361 | "language": "python", 362 | "name": "python3" 363 | }, 364 | "language_info": { 365 | "codemirror_mode": { 366 | "name": "ipython", 367 | "version": 3 368 | }, 369 | "file_extension": ".py", 370 | "mimetype": "text/x-python", 371 | "name": "python", 372 | "nbconvert_exporter": "python", 373 | "pygments_lexer": "ipython3", 374 | "version": "3.6.5" 375 | }, 376 | "varInspector": { 377 | "cols": { 378 | "lenName": 16, 379 | "lenType": 16, 380 | "lenVar": 40 381 | }, 382 | "kernels_config": { 383 | "python": { 384 | "delete_cmd_postfix": "", 385 | "delete_cmd_prefix": "del ", 386 | "library": "var_list.py", 387 | "varRefreshCmd": "print(var_dic_list())" 388 | }, 389 | "r": { 390 | "delete_cmd_postfix": ") ", 391 | "delete_cmd_prefix": "rm(", 392 | "library": "var_list.r", 393 | "varRefreshCmd": "cat(var_dic_list()) " 394 | } 395 | }, 396 | "types_to_exclude": [ 397 | "module", 398 | "function", 399 | "builtin_function_or_method", 400 | "instance", 401 | "_Feature" 402 | ], 403 | "window_display": false 404 | } 405 | }, 406 | "nbformat": 4, 407 | "nbformat_minor": 1 408 | } 409 | -------------------------------------------------------------------------------- /boruta/boruta_py.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | Author: Daniel Homola 5 | 6 | Original code and method by: Miron B Kursa, https://m2.icm.edu.pl/boruta/ 7 | 8 | License: BSD 3 clause 9 | """ 10 | 11 | from __future__ import print_function, division 12 | import numpy as np 13 | import scipy as sp 14 | from sklearn.utils import check_random_state, check_X_y 15 | from sklearn.base import BaseEstimator 16 | from sklearn.feature_selection import SelectorMixin 17 | from sklearn.utils.validation import check_is_fitted 18 | import warnings 19 | 20 | 21 | class BorutaPy(BaseEstimator, SelectorMixin): 22 | """ 23 | Improved Python implementation of the Boruta R package. 24 | 25 | The improvements of this implementation include: 26 | - Faster run times: 27 | Thanks to scikit-learn's fast implementation of the ensemble methods. 28 | - Scikit-learn like interface: 29 | Use BorutaPy just like any other scikit learner: fit, fit_transform and 30 | transform are all implemented in a similar fashion. 31 | - Modularity: 32 | Any ensemble method could be used: random forest, extra trees 33 | classifier, even gradient boosted trees. 34 | - Two step correction: 35 | The original Boruta code corrects for multiple testing in an overly 36 | conservative way. In this implementation, the Benjamini Hochberg FDR is 37 | used to correct in each iteration across active features. This means 38 | only those features are included in the correction which are still in 39 | the selection process. Following this, each that passed goes through a 40 | regular Bonferroni correction to check for the repeated testing over 41 | the iterations. 42 | - Percentile: 43 | Instead of using the max values of the shadow features the user can 44 | specify which percentile to use. This gives a finer control over this 45 | crucial parameter. For more info, please read about the perc parameter. 46 | - Automatic tree number: 47 | Setting the n_estimator to 'auto' will calculate the number of trees 48 | in each iteration based on the number of features under investigation. 49 | This way more trees are used when the training data has many features 50 | and less when most of the features have been rejected. 51 | - Ranking of features: 52 | After fitting BorutaPy it provides the user with ranking of features. 53 | Confirmed ones are 1, Tentatives are 2, and the rejected are ranked 54 | starting from 3, based on their feature importance history through 55 | the iterations. 56 | 57 | We highly recommend using pruned trees with a depth between 3-7. 58 | 59 | For more, see the docs of these functions, and the examples below. 60 | 61 | Original code and method by: Miron B Kursa, https://m2.icm.edu.pl/boruta/ 62 | 63 | Boruta is an all relevant feature selection method, while most other are 64 | minimal optimal; this means it tries to find all features carrying 65 | information usable for prediction, rather than finding a possibly compact 66 | subset of features on which some classifier has a minimal error. 67 | 68 | Why bother with all relevant feature selection? 69 | When you try to understand the phenomenon that made your data, you should 70 | care about all factors that contribute to it, not just the bluntest signs 71 | of it in context of your methodology (yes, minimal optimal set of features 72 | by definition depends on your classifier choice). 73 | 74 | Parameters 75 | ---------- 76 | 77 | estimator : object 78 | A supervised learning estimator, with a 'fit' method that returns the 79 | feature_importances_ attribute. Important features must correspond to 80 | high absolute values in the feature_importances_. 81 | 82 | n_estimators : int or string, default = 1000 83 | If int sets the number of estimators in the chosen ensemble method. 84 | If 'auto' this is determined automatically based on the size of the 85 | dataset. The other parameters of the used estimators need to be set 86 | with initialisation. 87 | 88 | perc : int, default = 100 89 | Instead of the max we use the percentile defined by the user, to pick 90 | our threshold for comparison between shadow and real features. The max 91 | tend to be too stringent. This provides a finer control over this. The 92 | lower perc is the more false positives will be picked as relevant but 93 | also the less relevant features will be left out. The usual trade-off. 94 | The default is essentially the vanilla Boruta corresponding to the max. 95 | 96 | alpha : float, default = 0.05 97 | Level at which the corrected p-values will get rejected in both 98 | correction steps. 99 | 100 | two_step : Boolean, default = True 101 | If you want to use the original implementation of Boruta with Bonferroni 102 | correction only set this to False. 103 | 104 | max_iter : int, default = 100 105 | The number of maximum iterations to perform. 106 | 107 | random_state : int, RandomState instance or None; default=None 108 | If int, random_state is the seed used by the random number generator; 109 | If RandomState instance, random_state is the random number generator; 110 | If None, the random number generator is the RandomState instance used 111 | by `np.random`. 112 | 113 | verbose : int, default=0 114 | Controls verbosity of output: 115 | - 0: no output 116 | - 1: displays iteration number 117 | - 2: which features have been selected already 118 | 119 | early_stopping : bool, default = False 120 | Whether to use early stopping to terminate the selection process 121 | before reaching `max_iter` iterations if the algorithm cannot 122 | confirm a tentative feature for `n_iter_no_change` iterations. 123 | Will speed up the process at a cost of a possibility of a 124 | worse result. 125 | 126 | n_iter_no_change : int, default = 20 127 | Ignored if `early_stopping` is False. The maximum amount of 128 | iterations without confirming a tentative feature. 129 | 130 | Attributes 131 | ---------- 132 | 133 | n_features_ : int 134 | The number of selected features. 135 | 136 | support_ : array of shape [n_features] 137 | 138 | The mask of selected features - only confirmed ones are True. 139 | 140 | support_weak_ : array of shape [n_features] 141 | 142 | The mask of selected tentative features, which haven't gained enough 143 | support during the max_iter number of iterations. 144 | 145 | ranking_ : array of shape [n_features] 146 | 147 | The feature ranking, such that ``ranking_[i]`` corresponds to the 148 | ranking position of the i-th feature. Selected (i.e., estimated 149 | best) features are assigned rank 1 and tentative features are assigned 150 | rank 2. 151 | 152 | importance_history_ : array-like, shape [n_features, n_iters] 153 | 154 | The calculated importance values for each feature across all iterations. 155 | 156 | Examples 157 | -------- 158 | 159 | import pandas as pd 160 | from sklearn.ensemble import RandomForestClassifier 161 | from boruta import BorutaPy 162 | 163 | # load X and y 164 | # NOTE BorutaPy accepts numpy arrays only, hence the .values attribute 165 | X = pd.read_csv('examples/test_X.csv', index_col=0).values 166 | y = pd.read_csv('examples/test_y.csv', header=None, index_col=0).values 167 | y = y.ravel() 168 | 169 | # define random forest classifier, with utilising all cores and 170 | # sampling in proportion to y labels 171 | rf = RandomForestClassifier(n_jobs=-1, class_weight='balanced', max_depth=5) 172 | 173 | # define Boruta feature selection method 174 | feat_selector = BorutaPy(rf, n_estimators='auto', verbose=2, random_state=1) 175 | 176 | # find all relevant features - 5 features should be selected 177 | feat_selector.fit(X, y) 178 | 179 | # check selected features - first 5 features are selected 180 | feat_selector.support_ 181 | 182 | # check ranking of features 183 | feat_selector.ranking_ 184 | 185 | # call transform() on X to filter it down to selected features 186 | X_filtered = feat_selector.transform(X) 187 | 188 | References 189 | ---------- 190 | 191 | [1] Kursa M., Rudnicki W., "Feature Selection with the Boruta Package" 192 | Journal of Statistical Software, Vol. 36, Issue 11, Sep 2010 193 | """ 194 | 195 | def __init__(self, estimator, n_estimators=1000, perc=100, alpha=0.05, 196 | two_step=True, max_iter=100, random_state=None, verbose=0, 197 | early_stopping=False, n_iter_no_change=20): 198 | self.estimator = estimator 199 | self.n_estimators = n_estimators 200 | self.perc = perc 201 | self.alpha = alpha 202 | self.two_step = two_step 203 | self.max_iter = max_iter 204 | self.random_state = random_state 205 | self.verbose = verbose 206 | self.early_stopping = early_stopping 207 | self.n_iter_no_change = n_iter_no_change 208 | self.__version__ = '0.3' 209 | self._is_lightgbm = 'lightgbm' in str(type(self.estimator)) 210 | 211 | def fit(self, X, y): 212 | """ 213 | Fits the Boruta feature selection with the provided estimator. 214 | 215 | Parameters 216 | ---------- 217 | X : array-like, shape = [n_samples, n_features] 218 | The training input samples. 219 | 220 | y : array-like, shape = [n_samples] 221 | The target values. 222 | """ 223 | 224 | return self._fit(X, y) 225 | 226 | def transform(self, X, weak=False, return_df=False): 227 | """ 228 | Reduces the input X to the features selected by Boruta. 229 | 230 | Parameters 231 | ---------- 232 | X : array-like, shape = [n_samples, n_features] 233 | The training input samples. 234 | 235 | weak: boolean, default = False 236 | If set to true, the tentative features are also used to reduce X. 237 | 238 | return_df : boolean, default = False 239 | If ``X`` if a pandas dataframe and this parameter is set to True, 240 | the transformed data will also be a dataframe. 241 | 242 | Returns 243 | ------- 244 | X : array-like, shape = [n_samples, n_features_] 245 | The input matrix X's columns are reduced to the features which were 246 | selected by Boruta. 247 | """ 248 | 249 | return self._transform(X, weak, return_df) 250 | 251 | def fit_transform(self, X, y, weak=False, return_df=False): 252 | """ 253 | Fits Boruta, then reduces the input X to the selected features. 254 | 255 | Parameters 256 | ---------- 257 | X : array-like, shape = [n_samples, n_features] 258 | The training input samples. 259 | 260 | y : array-like, shape = [n_samples] 261 | The target values. 262 | 263 | weak: boolean, default = False 264 | If set to true, the tentative features are also used to reduce X. 265 | 266 | return_df : boolean, default = False 267 | If ``X`` if a pandas dataframe and this parameter is set to True, 268 | the transformed data will also be a dataframe. 269 | 270 | Returns 271 | ------- 272 | X : array-like, shape = [n_samples, n_features_] 273 | The input matrix X's columns are reduced to the features which were 274 | selected by Boruta. 275 | """ 276 | 277 | self._fit(X, y) 278 | return self._transform(X, weak, return_df) 279 | 280 | def _validate_pandas_input(self, arg): 281 | try: 282 | return arg.values 283 | except AttributeError: 284 | raise ValueError( 285 | "input needs to be a numpy array or pandas data frame." 286 | ) 287 | 288 | def _fit(self, X, y): 289 | # check input params 290 | self._check_params(X, y) 291 | 292 | feature_names = getattr(X, "columns", None) 293 | if feature_names is not None: 294 | self.feature_names_in_ = np.asarray(feature_names, dtype=object) 295 | else: 296 | self.feature_names_in_ = None 297 | 298 | if not isinstance(X, np.ndarray): 299 | X = self._validate_pandas_input(X) 300 | if not isinstance(y, np.ndarray): 301 | y = self._validate_pandas_input(y) 302 | 303 | self.n_features_in_ = X.shape[1] 304 | 305 | self.random_state = check_random_state(self.random_state) 306 | 307 | early_stopping = False 308 | if self.early_stopping: 309 | if self.n_iter_no_change >= self.max_iter: 310 | if self.verbose > 0: 311 | print( 312 | f"n_iter_no_change is bigger or equal to max_iter" 313 | f"({self.n_iter_no_change} >= {self.max_iter}), " 314 | f"early stopping will not be used." 315 | ) 316 | else: 317 | early_stopping = True 318 | 319 | # setup variables for Boruta 320 | n_sample, n_feat = X.shape 321 | _iter = 1 322 | # early stopping vars 323 | _same_iters = 1 324 | _last_dec_reg = None 325 | # holds the decision about each feature: 326 | # 0 - default state = tentative in original code 327 | # 1 - accepted in original code 328 | # -1 - rejected in original code 329 | dec_reg = np.zeros(n_feat, dtype=int) 330 | # counts how many times a given feature was more important than 331 | # the best of the shadow features 332 | hit_reg = np.zeros(n_feat, dtype=int) 333 | # these record the history of the iterations 334 | imp_history = np.zeros(n_feat, dtype=float) 335 | sha_max_history = [] 336 | 337 | # set n_estimators 338 | if self.n_estimators != 'auto': 339 | self._set_n_estimators(self.n_estimators) 340 | 341 | # main feature selection loop 342 | while np.any(dec_reg == 0) and _iter < self.max_iter: 343 | # find optimal number of trees and depth 344 | if self.n_estimators == 'auto': 345 | # number of features that aren't rejected 346 | not_rejected = np.where(dec_reg >= 0)[0].shape[0] 347 | n_tree = self._get_tree_num(not_rejected) 348 | self._set_n_estimators(n_estimators=n_tree) 349 | 350 | # make sure we start with a new tree in each iteration 351 | if self._is_lightgbm: 352 | self.estimator.set_params(random_state=self.random_state.randint(0, 10000)) 353 | else: 354 | self.estimator.set_params(random_state=self.random_state) 355 | 356 | # add shadow attributes, shuffle them and train estimator, get imps 357 | cur_imp = self._add_shadows_get_imps(X, y, dec_reg) 358 | 359 | # get the threshold of shadow importances we will use for rejection 360 | imp_sha_max = np.percentile(cur_imp[1], self.perc) 361 | 362 | # record importance history 363 | sha_max_history.append(imp_sha_max) 364 | imp_history = np.vstack((imp_history, cur_imp[0])) 365 | 366 | # register which feature is more imp than the max of shadows 367 | hit_reg = self._assign_hits(hit_reg, cur_imp, imp_sha_max) 368 | 369 | # Only test after the 5th round. 370 | if _iter > 4: 371 | # based on hit_reg we check if a feature is doing better than 372 | # expected by chance 373 | dec_reg = self._do_tests(dec_reg, hit_reg, _iter) 374 | 375 | # print out confirmed features 376 | if self.verbose > 0 and _iter < self.max_iter: 377 | self._print_results(dec_reg, _iter, 0) 378 | if _iter < self.max_iter: 379 | _iter += 1 380 | 381 | # early stopping 382 | if early_stopping: 383 | if _last_dec_reg is not None and (_last_dec_reg == dec_reg).all(): 384 | _same_iters += 1 385 | if self.verbose > 0: 386 | print( 387 | f"Early stopping: {_same_iters} out " 388 | f"of {self.n_iter_no_change}" 389 | ) 390 | else: 391 | _same_iters = 1 392 | _last_dec_reg = dec_reg.copy() 393 | if _same_iters > self.n_iter_no_change: 394 | break 395 | 396 | # we automatically apply R package's rough fix for tentative ones 397 | confirmed = np.where(dec_reg == 1)[0] 398 | tentative = np.where(dec_reg == 0)[0] 399 | # ignore the first row of zeros 400 | tentative_median = np.median(imp_history[1:, tentative], axis=0) 401 | # which tentative to keep 402 | tentative_confirmed = np.where(tentative_median 403 | > np.median(sha_max_history))[0] 404 | tentative = tentative[tentative_confirmed] 405 | 406 | # basic result variables 407 | self.n_features_ = confirmed.shape[0] 408 | self.support_ = np.zeros(n_feat, dtype=bool) 409 | self.support_[confirmed] = 1 410 | self.support_weak_ = np.zeros(n_feat, dtype=bool) 411 | self.support_weak_[tentative] = 1 412 | 413 | # ranking, confirmed variables are rank 1 414 | self.ranking_ = np.ones(n_feat, dtype=int) 415 | # tentative variables are rank 2 416 | self.ranking_[tentative] = 2 417 | # selected = confirmed and tentative 418 | selected = np.hstack((confirmed, tentative)) 419 | # all rejected features are sorted by importance history 420 | not_selected = np.setdiff1d(np.arange(n_feat), selected) 421 | # large importance values should rank higher = lower ranks -> *(-1) 422 | imp_history_rejected = imp_history[1:, not_selected] * -1 423 | 424 | # update rank for not_selected features 425 | if not_selected.shape[0] > 0: 426 | # calculate ranks in each iteration, then median of ranks across feats 427 | iter_ranks = self._nanrankdata(imp_history_rejected, axis=1) 428 | rank_medians = np.nanmedian(iter_ranks, axis=0) 429 | ranks = self._nanrankdata(rank_medians, axis=0) 430 | 431 | # set smallest rank to 3 if there are tentative feats 432 | if tentative.shape[0] > 0: 433 | ranks = ranks - np.min(ranks) + 3 434 | else: 435 | # and 2 otherwise 436 | ranks = ranks - np.min(ranks) + 2 437 | self.ranking_[not_selected] = ranks 438 | else: 439 | # all are selected, thus we set feature supports to True 440 | self.support_ = np.ones(n_feat, dtype=bool) 441 | 442 | self.importance_history_ = imp_history 443 | 444 | # notify user 445 | if self.verbose > 0: 446 | self._print_results(dec_reg, _iter, 1) 447 | return self 448 | 449 | def _transform(self, X, weak=False, return_df=False): 450 | # sanity check 451 | try: 452 | self.ranking_ 453 | except AttributeError: 454 | raise ValueError('You need to call the fit(X, y) method first.') 455 | 456 | if weak: 457 | indices = self.support_ + self.support_weak_ 458 | else: 459 | indices = self.support_ 460 | 461 | if return_df: 462 | X = X.iloc[:, indices] 463 | else: 464 | X = X[:, indices] 465 | return X 466 | 467 | def _set_n_estimators(self, n_estimators): 468 | try: 469 | self.estimator.set_params(n_estimators=n_estimators) 470 | except ValueError: 471 | raise ValueError( 472 | f"The estimator {self.estimator} does not take the parameter " 473 | "n_estimators. Use Random Forests or gradient boosting machines " 474 | "instead." 475 | ) 476 | return self 477 | 478 | def _get_support_mask(self): 479 | check_is_fitted(self, 'support_') 480 | return self.support_ 481 | 482 | def _get_tree_num(self, n_feat): 483 | depth = None 484 | try: 485 | depth = self.estimator.get_params()['max_depth'] 486 | except KeyError: 487 | warnings.warn( 488 | "The estimator does not have a max_depth property, as a result " 489 | " the number of trees to use cannot be estimated automatically." 490 | ) 491 | if depth == None: 492 | depth = 10 493 | # how many times a feature should be considered on average 494 | f_repr = 100 495 | # n_feat * 2 because the training matrix is extended with n shadow features 496 | multi = ((n_feat * 2) / (np.sqrt(n_feat * 2) * depth)) 497 | n_estimators = int(multi * f_repr) 498 | return n_estimators 499 | 500 | def _get_imp(self, X, y): 501 | try: 502 | self.estimator.fit(X, y) 503 | except Exception as e: 504 | raise ValueError('Please check your X and y variable. The provided ' 505 | 'estimator cannot be fitted to your data.\n' + str(e)) 506 | try: 507 | imp = self.estimator.feature_importances_ 508 | except Exception: 509 | raise ValueError('Only methods with feature_importance_ attribute ' 510 | 'are currently supported in BorutaPy.') 511 | return imp 512 | 513 | def _get_shuffle(self, seq): 514 | self.random_state.shuffle(seq) 515 | return seq 516 | 517 | def _add_shadows_get_imps(self, X, y, dec_reg): 518 | # find features that are tentative still 519 | x_cur_ind = np.where(dec_reg >= 0)[0] 520 | x_cur = np.copy(X[:, x_cur_ind]) 521 | x_cur_w = x_cur.shape[1] 522 | # deep copy the matrix for the shadow matrix 523 | x_sha = np.copy(x_cur) 524 | # make sure there's at least 5 columns in the shadow matrix for 525 | while (x_sha.shape[1] < 5): 526 | x_sha = np.hstack((x_sha, x_sha)) 527 | # shuffle xSha 528 | x_sha = np.apply_along_axis(self._get_shuffle, 0, x_sha) 529 | # get importance of the merged matrix 530 | imp = self._get_imp(np.hstack((x_cur, x_sha)), y) 531 | # separate importances of real and shadow features 532 | imp_sha = imp[x_cur_w:] 533 | imp_real = np.zeros(X.shape[1]) 534 | imp_real[:] = np.nan 535 | imp_real[x_cur_ind] = imp[:x_cur_w] 536 | return imp_real, imp_sha 537 | 538 | def _assign_hits(self, hit_reg, cur_imp, imp_sha_max): 539 | # register hits for features that did better than the best of shadows 540 | cur_imp_no_nan = cur_imp[0] 541 | cur_imp_no_nan[np.isnan(cur_imp_no_nan)] = 0 542 | hits = np.where(cur_imp_no_nan > imp_sha_max)[0] 543 | hit_reg[hits] += 1 544 | return hit_reg 545 | 546 | def _do_tests(self, dec_reg, hit_reg, _iter): 547 | active_features = np.where(dec_reg >= 0)[0] 548 | hits = hit_reg[active_features] 549 | # get uncorrected p values based on hit_reg 550 | to_accept_ps = sp.stats.binom.sf(hits - 1, _iter, .5).flatten() 551 | to_reject_ps = sp.stats.binom.cdf(hits, _iter, .5).flatten() 552 | 553 | if self.two_step: 554 | # two step multicor process 555 | # first we correct for testing several features in each round using FDR 556 | to_accept = self._fdrcorrection(to_accept_ps, alpha=self.alpha)[0] 557 | to_reject = self._fdrcorrection(to_reject_ps, alpha=self.alpha)[0] 558 | 559 | # second we correct for testing the same feature over and over again 560 | # using bonferroni 561 | to_accept2 = to_accept_ps <= self.alpha / float(_iter) 562 | to_reject2 = to_reject_ps <= self.alpha / float(_iter) 563 | 564 | # combine the two multi corrections, and get indexes 565 | to_accept *= to_accept2 566 | to_reject *= to_reject2 567 | else: 568 | # as in th original Boruta, we simply do bonferroni correction 569 | # with the total n_feat in each iteration 570 | to_accept = to_accept_ps <= self.alpha / float(len(dec_reg)) 571 | to_reject = to_reject_ps <= self.alpha / float(len(dec_reg)) 572 | 573 | # find features which are 0 and have been rejected or accepted 574 | to_accept = np.where((dec_reg[active_features] == 0) * to_accept)[0] 575 | to_reject = np.where((dec_reg[active_features] == 0) * to_reject)[0] 576 | 577 | # updating dec_reg 578 | dec_reg[active_features[to_accept]] = 1 579 | dec_reg[active_features[to_reject]] = -1 580 | return dec_reg 581 | 582 | def _fdrcorrection(self, pvals, alpha=0.05): 583 | """ 584 | Benjamini/Hochberg p-value correction for false discovery rate, from 585 | statsmodels package. Included here for decoupling dependency on statsmodels. 586 | 587 | Parameters 588 | ---------- 589 | pvals : array_like 590 | set of p-values of the individual tests. 591 | alpha : float 592 | error rate 593 | 594 | Returns 595 | ------- 596 | rejected : array, bool 597 | True if a hypothesis is rejected, False if not 598 | pvalue-corrected : array 599 | pvalues adjusted for multiple hypothesis testing to limit FDR 600 | """ 601 | pvals = np.asarray(pvals) 602 | pvals_sortind = np.argsort(pvals) 603 | pvals_sorted = np.take(pvals, pvals_sortind) 604 | nobs = len(pvals_sorted) 605 | ecdffactor = np.arange(1, nobs + 1) / float(nobs) 606 | 607 | reject = pvals_sorted <= ecdffactor * alpha 608 | if reject.any(): 609 | rejectmax = max(np.nonzero(reject)[0]) 610 | reject[:rejectmax] = True 611 | 612 | pvals_corrected_raw = pvals_sorted / ecdffactor 613 | pvals_corrected = np.minimum.accumulate(pvals_corrected_raw[::-1])[::-1] 614 | pvals_corrected[pvals_corrected > 1] = 1 615 | # reorder p-values and rejection mask to original order of pvals 616 | pvals_corrected_ = np.empty_like(pvals_corrected) 617 | pvals_corrected_[pvals_sortind] = pvals_corrected 618 | reject_ = np.empty_like(reject) 619 | reject_[pvals_sortind] = reject 620 | return reject_, pvals_corrected_ 621 | 622 | def _nanrankdata(self, X, axis=1): 623 | """ 624 | Replaces bottleneck's nanrankdata with scipy and numpy alternative. 625 | """ 626 | ranks = sp.stats.mstats.rankdata(X, axis=axis) 627 | ranks[np.isnan(X)] = np.nan 628 | return ranks 629 | 630 | def _check_params(self, X, y): 631 | """ 632 | Check hyperparameters as well as X and y before proceeding with fit. 633 | """ 634 | # check X and y are consistent len, X is Array and y is column 635 | X, y = check_X_y(X, y) 636 | if self.perc <= 0 or self.perc > 100: 637 | raise ValueError('The percentile should be between 0 and 100.') 638 | 639 | if self.alpha <= 0 or self.alpha > 1: 640 | raise ValueError('Alpha should be between 0 and 1.') 641 | 642 | def _print_results(self, dec_reg, _iter, flag): 643 | n_iter = str(_iter) + ' / ' + str(self.max_iter) 644 | n_confirmed = np.where(dec_reg == 1)[0].shape[0] 645 | n_rejected = np.where(dec_reg == -1)[0].shape[0] 646 | cols = ['Iteration: ', 'Confirmed: ', 'Tentative: ', 'Rejected: '] 647 | 648 | # still in feature selection 649 | if flag == 0: 650 | n_tentative = np.where(dec_reg == 0)[0].shape[0] 651 | content = map(str, [n_iter, n_confirmed, n_tentative, n_rejected]) 652 | if self.verbose == 1: 653 | output = cols[0] + n_iter 654 | elif self.verbose > 1: 655 | output = '\n'.join([x[0] + '\t' + x[1] for x in zip(cols, content)]) 656 | 657 | # Boruta finished running and tentatives have been filtered 658 | else: 659 | n_tentative = np.sum(self.support_weak_) 660 | n_rejected = np.sum(~(self.support_|self.support_weak_)) 661 | content = map(str, [n_iter, n_confirmed, n_tentative, n_rejected]) 662 | result = '\n'.join([x[0] + '\t' + x[1] for x in zip(cols, content)]) 663 | output = "\n\nBorutaPy finished running.\n\n" + result 664 | print(output) 665 | -------------------------------------------------------------------------------- /boruta/examples/test_X.csv: -------------------------------------------------------------------------------- 1 | ,0,1,2,3,4,5,6,7,8,9 2 | 0,0.0,-0.0519396371826,-2.03622050286,0.61377085579,0.0,-0.652528293217,1.0,0.0,-0.895384542192,0.0 3 | 1,1.0,0.582915161842,1.04749346825,1.37545585763,1.0,-0.611177152019,1.0,1.0,-1.58609519232,3.0 4 | 2,1.0,0.726400992438,0.750928155347,1.1675701058,1.0,-0.527994021766,1.0,0.0,1.04179411902,0.0 5 | 3,1.0,1.37367136082,-0.672893901312,2.16225959751,1.0,1.35306916017,0.0,0.0,-0.44895981594,1.0 6 | 4,0.0,-0.0593811408069,0.404212865277,-0.539591220737,1.0,-3.22101635599,0.0,0.0,-0.0830784409639,1.0 7 | 5,0.0,-0.0165631410318,0.715872744691,0.894910556027,0.0,0.395598834763,1.0,0.0,-0.197594568722,3.0 8 | 6,0.0,0.00785770297191,0.227034478865,-1.63201488503,1.0,0.0342718142002,2.0,0.0,0.672392969881,3.0 9 | 7,1.0,-0.0694849420992,0.675931824791,0.0950521670619,1.0,-1.68087045924,1.0,0.0,1.84331604613,1.0 10 | 8,1.0,1.82205204438,1.59144215175,-0.807041394932,1.0,0.309726779136,1.0,1.0,1.46237415142,1.0 11 | 9,1.0,0.310680689009,1.68022036048,0.72515469933,1.0,0.475751991832,1.0,0.0,-2.3322385152,1.0 12 | 10,0.0,-0.115333240321,0.30740356972,-0.0462612172663,0.0,0.589639231357,1.0,1.0,-0.308538971289,1.0 13 | 11,0.0,1.18393585113,0.175387749565,1.11410149223,1.0,-2.65182806304,1.0,0.0,-1.34674351852,1.0 14 | 12,1.0,1.34296993643,1.27660076551,1.06188335289,1.0,1.36638941185,1.0,0.0,0.93842885758,1.0 15 | 13,0.0,-0.135544750311,1.19548065083,-0.927553330812,0.0,-0.737736704685,2.0,0.0,0.00398348162408,0.0 16 | 14,0.0,-0.070902095763,-0.596629058612,-0.190240844413,0.0,0.686567746753,2.0,1.0,0.606151871535,0.0 17 | 15,0.0,0.195325913753,2.09793933913,-1.49744666861,0.0,0.741073780682,1.0,0.0,-0.394124470558,1.0 18 | 16,0.0,-0.0525879675895,-0.525630933985,1.36322897513,1.0,-0.876697085619,1.0,0.0,-1.03937160593,2.0 19 | 17,1.0,1.72513296822,1.03240701334,0.696373927102,1.0,0.660459952352,1.0,0.0,-0.8682807318,1.0 20 | 18,0.0,0.0400481386506,-0.672485596006,-0.488886119044,0.0,-0.385493240912,0.0,0.0,-1.53301266726,1.0 21 | 19,0.0,0.0131065186216,0.22327083592,1.58894032844,0.0,-2.07137717934,1.0,1.0,-1.2636340695,0.0 22 | 20,1.0,0.148153831864,-0.742221692635,-0.242246533549,1.0,1.16774192553,0.0,1.0,-1.47429305551,2.0 23 | 21,0.0,-0.11952937636,-0.546041798817,-1.12558711403,0.0,-0.775044963016,5.0,0.0,-1.03570267781,1.0 24 | 22,0.0,0.145092754828,-1.09212120035,-1.09622032487,0.0,-0.854493462738,1.0,0.0,-1.09227816403,2.0 25 | 23,0.0,0.180719664364,0.135338347892,-0.0678713816995,0.0,-0.403065868037,0.0,1.0,0.394093105028,0.0 26 | 24,0.0,-0.168265869412,0.994447375509,0.431631629638,0.0,0.272236725327,1.0,0.0,0.354861644655,0.0 27 | 25,1.0,1.3460963708,1.64600618711,1.73967546812,1.0,-0.0572704108221,0.0,0.0,0.393004206858,1.0 28 | 26,0.0,-0.0279810342377,-2.37165936086,2.57199531749,0.0,0.548066924707,2.0,0.0,1.17499536225,2.0 29 | 27,1.0,1.22959390659,3.04206965293,-1.2494324542,1.0,-1.33948936653,2.0,0.0,-0.0783378913761,1.0 30 | 28,1.0,0.464061716469,1.29527994062,1.60873558912,2.0,-0.742386370431,2.0,0.0,-0.780814597083,2.0 31 | 29,0.0,-0.0728272202407,-0.776499140493,-0.557130572572,0.0,-0.115997072322,2.0,1.0,2.21140357593,1.0 32 | 30,1.0,1.18026453299,1.15712791899,0.413584851111,1.0,1.89788729266,2.0,0.0,0.905645903304,0.0 33 | 31,0.0,0.119054859434,0.176189822503,-0.619772128254,1.0,-0.113812538414,0.0,0.0,0.152319793205,1.0 34 | 32,0.0,0.0212574030632,-0.666848716952,-0.908769670808,1.0,1.08522226366,4.0,1.0,0.0828744539923,1.0 35 | 33,1.0,0.151350977902,1.19791666734,2.6845248346,1.0,0.0385551687843,1.0,0.0,0.2896535209,1.0 36 | 34,1.0,0.143387037847,0.39252771238,1.84229732701,1.0,-0.483658637438,0.0,0.0,-0.202101280354,2.0 37 | 35,1.0,0.702100585894,0.59563800731,1.02319597856,2.0,-0.246724424114,2.0,0.0,0.128224541504,0.0 38 | 36,0.0,-0.0816217244542,-0.686279135755,1.35101575249,0.0,-0.168419712029,1.0,0.0,0.499379660616,1.0 39 | 37,0.0,0.00781430629696,-1.43267128974,-1.5125289653,1.0,0.603645738961,0.0,1.0,-0.726536213966,0.0 40 | 38,1.0,0.976362023575,1.14583647022,-0.330705131331,1.0,1.37461126758,0.0,1.0,-1.63411585184,0.0 41 | 39,0.0,0.0139060398653,0.585299436516,-2.17796773219,0.0,0.359680847686,0.0,0.0,-2.07564276789,3.0 42 | 40,0.0,-0.157699648219,0.514883596076,-0.699414540123,0.0,1.18707767874,0.0,1.0,0.887898818934,3.0 43 | 41,0.0,-0.0802824443951,0.819925252635,0.161698526705,0.0,-0.96478973763,1.0,0.0,-1.58292416272,0.0 44 | 42,0.0,-0.00739728635944,0.324340210015,0.102858577932,1.0,-0.414630508814,0.0,1.0,0.465343993958,1.0 45 | 43,1.0,0.642457373974,0.467274501783,1.14934191106,2.0,-0.724302534208,1.0,0.0,-1.15435589505,0.0 46 | 44,0.0,0.197254217679,0.839663864431,-1.41105683107,0.0,0.314444590875,0.0,0.0,-1.13824594606,0.0 47 | 45,1.0,1.31104642546,-0.357517539842,1.80315474261,1.0,-0.358958385179,2.0,0.0,-0.718198760506,2.0 48 | 46,0.0,0.0505589241836,-0.900671382512,0.239627518239,0.0,0.729772937034,0.0,0.0,0.194132152006,3.0 49 | 47,1.0,1.15286868291,0.0357999285768,1.73305428147,1.0,-0.931001711632,3.0,0.0,-1.28859170838,0.0 50 | 48,1.0,0.434412303941,2.08005605914,-0.89276217759,1.0,0.0430309733213,1.0,0.0,-0.616932470294,1.0 51 | 49,0.0,-0.0404397423184,0.94278851414,0.311490858798,0.0,0.686857911012,0.0,1.0,-0.0257190721806,1.0 52 | 50,1.0,0.770880498609,1.48730523704,-0.187765239918,1.0,-2.06530277504,1.0,0.0,-1.21026179085,1.0 53 | 51,1.0,0.233796907859,2.07192986521,0.602676747449,1.0,2.12163130733,0.0,1.0,1.42823421447,0.0 54 | 52,0.0,0.566228257743,0.120717217588,1.53436489864,1.0,-0.28315188488,2.0,0.0,-1.72253774259,1.0 55 | 53,1.0,0.261770590202,1.34859511986,1.09109360626,1.0,-2.02503991368,1.0,0.0,-0.218169182451,1.0 56 | 54,0.0,1.71704962925,0.874825571617,0.148460020221,2.0,0.158093898577,1.0,1.0,1.27254063259,1.0 57 | 55,1.0,1.08723644327,1.84688210388,1.00627315618,1.0,0.0334434679732,0.0,0.0,-1.32446656389,1.0 58 | 56,0.0,0.0682069490063,-0.115224232552,-1.53153531524,0.0,-0.0818943795725,1.0,1.0,-0.109625850488,2.0 59 | 57,0.0,0.0126177903662,-0.38494288841,1.1502673959,0.0,0.991191112927,1.0,1.0,0.132858682667,2.0 60 | 58,0.0,-0.0222474896778,0.540908518561,-0.205284019496,0.0,0.747444971427,0.0,0.0,-0.806770452003,2.0 61 | 59,0.0,0.204686219572,0.876169167191,1.11854994426,0.0,0.297876191024,1.0,0.0,-0.0774827743319,0.0 62 | 60,0.0,-0.0674934018791,-0.668345194847,-0.526531687096,0.0,0.450155633947,0.0,0.0,0.56144446086,2.0 63 | 61,0.0,-0.0403075989065,-0.0610756713524,-0.523575988407,0.0,-0.104358449438,4.0,0.0,-0.467140698318,2.0 64 | 62,1.0,1.32170013646,-0.0584406336417,0.235813213362,1.0,1.77549084924,1.0,0.0,0.76432961413,0.0 65 | 63,0.0,-0.083206130485,-2.49806101749,0.876173931693,0.0,-1.47919601836,1.0,1.0,0.392730940382,0.0 66 | 64,0.0,-0.0550115282937,0.200459631414,-0.709431157328,0.0,0.139651674216,6.0,0.0,-0.582900201153,3.0 67 | 65,1.0,0.256792768483,1.60890535625,1.64459543242,1.0,0.0650246311888,0.0,0.0,1.12745436712,2.0 68 | 66,0.0,0.084073448213,0.262066809087,-0.382452397669,0.0,0.813280406065,1.0,0.0,-0.740937113683,2.0 69 | 67,1.0,0.361369467136,-0.949561717754,-0.975963299892,1.0,-0.843853877425,1.0,1.0,0.855893305405,0.0 70 | 68,0.0,-0.129262534715,-0.350849430076,-0.570314067786,0.0,-1.7436726024,3.0,0.0,-0.723015698286,2.0 71 | 69,1.0,1.273255272,-1.21834776005,-0.179108214363,2.0,0.156823016098,1.0,0.0,-0.316073358842,2.0 72 | 70,1.0,0.9865822633,2.36970110765,1.03390272368,2.0,0.281230492219,0.0,0.0,-0.162644289777,1.0 73 | 71,0.0,-0.0077221045223,-1.08605458212,-1.19040773567,0.0,1.48959940945,2.0,1.0,0.338583090886,0.0 74 | 72,0.0,0.042584365863,1.25540360946,0.925975100715,0.0,-1.27036204633,2.0,1.0,-2.41344817028,1.0 75 | 73,1.0,0.0852975254027,1.94586964368,0.908924139647,1.0,1.15469376672,1.0,0.0,0.45801555149,3.0 76 | 74,0.0,1.35350632715,0.0994096474639,0.822404005241,2.0,2.36741436403,0.0,1.0,-0.102479223142,0.0 77 | 75,1.0,0.620648854774,-0.132784951268,1.65589213779,1.0,-0.377764887522,0.0,0.0,0.285740161277,1.0 78 | 76,1.0,0.597314326314,1.35037021639,1.96390693408,1.0,-1.29094221949,1.0,1.0,0.502488323622,3.0 79 | 77,0.0,0.138453204759,-0.844324037183,-0.0200987517697,0.0,-0.406974366373,0.0,0.0,0.393808837991,1.0 80 | 78,1.0,0.0444198327291,0.102484642158,-0.771200299549,0.0,0.0140049673714,2.0,0.0,-2.00736085226,0.0 81 | 79,0.0,0.110132295774,-0.482827590807,-1.77396961611,1.0,0.563787875007,0.0,0.0,-1.06101059879,1.0 82 | 80,1.0,0.611260457039,-0.781158414466,0.313950242965,1.0,-0.591394729838,1.0,0.0,0.332815934326,1.0 83 | 81,1.0,1.15428691431,-1.23046801912,0.382787753352,1.0,1.55519853415,2.0,1.0,0.199696196625,0.0 84 | 82,0.0,0.0522250636018,0.226684248495,0.107057452992,0.0,-1.11453231501,0.0,0.0,-0.789553685516,1.0 85 | 83,1.0,-0.00979152464429,-0.561557746331,-0.345146881138,0.0,-1.73920515217,0.0,1.0,0.73763920006,0.0 86 | 84,0.0,0.227243472045,-0.553089816914,0.687932972051,0.0,1.10671042429,0.0,0.0,-0.256425169129,0.0 87 | 85,0.0,0.088903712228,0.695863839094,-0.612983271271,0.0,-2.27462103121,0.0,0.0,0.885726353882,0.0 88 | 86,1.0,0.188847037772,2.17344227663,0.942958833147,2.0,-0.204129768873,1.0,0.0,1.21002131145,1.0 89 | 87,1.0,0.698416729788,0.727455278638,2.1839874432,1.0,3.11768112921,1.0,0.0,0.278302051563,1.0 90 | 88,0.0,0.307933475492,0.65940129309,1.34182521395,1.0,-0.0120435529599,0.0,1.0,0.555552481833,2.0 91 | 89,0.0,0.0292715482142,0.500143033114,-0.0600375416886,1.0,-1.1207676507,0.0,0.0,-0.608460081432,2.0 92 | 90,0.0,0.0145521197768,-1.3569355697,-0.601944441935,0.0,-0.0573974637868,0.0,0.0,0.89220987281,1.0 93 | 91,1.0,1.32004182219,1.22315305475,0.366768603285,1.0,-0.0508007886195,0.0,0.0,0.218124369681,1.0 94 | 92,1.0,1.30636096507,1.55188597182,0.149386747048,1.0,0.160649940353,1.0,0.0,-0.294711038844,0.0 95 | 93,1.0,0.84857049805,1.68023020842,0.458993134217,2.0,0.66226298216,1.0,1.0,-1.21881833322,0.0 96 | 94,1.0,0.572515018006,-0.936752702502,1.75566583874,1.0,-1.03911116837,1.0,0.0,-0.485441369104,0.0 97 | 95,0.0,-0.114100850975,-0.761355269809,-0.221888271292,1.0,1.68754805524,1.0,1.0,-1.10947554484,0.0 98 | 96,1.0,0.283073246299,0.121736747177,-0.349773069381,1.0,0.245114284373,0.0,0.0,0.761489738939,0.0 99 | 97,0.0,-0.0804966480853,0.0998869544092,1.76816929306,0.0,0.726794046402,1.0,0.0,1.22042990959,2.0 100 | 98,0.0,-0.0387699916409,0.480744579768,0.319965191145,0.0,-0.628149399756,1.0,1.0,0.91626919893,0.0 101 | 99,0.0,-0.041361566563,1.49671040745,-1.40694340051,0.0,1.286382137,1.0,0.0,2.48602024628,2.0 102 | 100,1.0,-0.0477645582604,-0.494965480368,-0.441848927241,0.0,-0.257052408813,2.0,0.0,-0.460406921497,3.0 103 | 101,0.0,0.706308671033,0.502427501691,1.11088638283,1.0,0.277552513494,1.0,0.0,0.596572344884,2.0 104 | 102,0.0,-0.0127654681518,1.14967201888,1.7045920933,1.0,-0.933106077187,2.0,0.0,-1.18135496458,2.0 105 | 103,0.0,0.659699225426,1.29657693853,-0.108112458259,1.0,-0.996931626402,2.0,1.0,-0.197250640352,0.0 106 | 104,0.0,0.389107196712,2.26765151119,1.97604071936,1.0,0.688205306453,1.0,0.0,-1.47734920885,1.0 107 | 105,0.0,0.20529720245,0.28872800301,1.39948642697,0.0,-0.443606830207,3.0,1.0,0.568194317305,2.0 108 | 106,0.0,0.108876965422,-1.15711661871,-0.628654305075,0.0,-0.853823087504,1.0,0.0,-0.355491662914,1.0 109 | 107,1.0,0.201774428043,-0.333128354778,0.72248638114,1.0,-0.643183342027,0.0,0.0,-2.05458202486,0.0 110 | 108,0.0,0.00188190497406,-1.55151224906,-1.03630924737,0.0,0.698953071717,0.0,0.0,-0.685018442935,1.0 111 | 109,1.0,-0.117165434732,0.662051834758,-0.20346114108,0.0,-0.629037861204,1.0,0.0,1.79311432761,1.0 112 | 110,0.0,0.169572287781,1.18859682309,-0.0365899743429,0.0,-0.117654931602,0.0,1.0,0.410429887251,2.0 113 | 111,0.0,0.189728869477,1.84936214139,0.659649998082,0.0,0.0150277502871,2.0,0.0,0.769092662956,0.0 114 | 112,1.0,0.497918325505,1.84310533232,2.09018347102,2.0,-1.91734888601,2.0,0.0,0.1255452793,2.0 115 | 113,1.0,1.34001548675,2.16283857753,0.251903935378,1.0,-1.47112640537,1.0,1.0,-0.181558921595,1.0 116 | 114,1.0,0.886684742283,0.419983667346,-0.967325064226,1.0,0.336277889248,0.0,1.0,0.0155790138096,1.0 117 | 115,1.0,0.753618293379,-0.156415816744,0.978755220724,1.0,-0.737029361153,1.0,0.0,0.245432724224,2.0 118 | 116,1.0,0.722103767282,1.85007933242,1.29353752997,1.0,1.05672491128,1.0,1.0,-1.0966524456,0.0 119 | 117,0.0,0.0131927966772,0.417680752239,0.249417687685,0.0,0.966807104251,2.0,0.0,0.763062015739,3.0 120 | 118,1.0,0.637874220937,1.10744437434,0.673326752491,1.0,0.719168666355,1.0,0.0,1.12182749199,0.0 121 | 119,1.0,0.187448491836,1.38737148063,1.12475209966,1.0,1.81977178731,1.0,0.0,-0.196589396944,1.0 122 | 120,1.0,1.06383809202,1.32318548246,2.51544480835,1.0,-0.0830893277432,1.0,0.0,-0.523040429617,0.0 123 | 121,0.0,2.35578464483,2.28381685985,1.38173416896,1.0,0.648881925904,0.0,0.0,-0.741908999645,1.0 124 | 122,1.0,0.00522584904975,1.29498558482,-0.373368425003,0.0,-0.584400976596,0.0,0.0,1.75921660356,0.0 125 | 123,0.0,-0.10606050664,0.54422035234,-0.500197817096,0.0,2.45236991287,2.0,0.0,-0.452270839194,1.0 126 | 124,1.0,-0.0717016149128,0.845802872563,-0.169852357678,0.0,1.98363365244,2.0,1.0,0.653314314215,0.0 127 | 125,0.0,-0.12845842657,0.514062552425,1.63673996183,2.0,0.0118804345178,1.0,1.0,-0.189573695483,0.0 128 | 126,1.0,0.328647928813,0.538830267965,0.816699290474,1.0,0.386586229905,0.0,1.0,-0.243630055718,0.0 129 | 127,1.0,1.24269596914,1.75656467491,0.980205655479,1.0,1.35929759936,4.0,0.0,-0.764749700206,2.0 130 | 128,0.0,0.115359034332,-1.39449506886,-0.482313570936,0.0,-0.147139504814,1.0,0.0,-0.970299496094,1.0 131 | 129,1.0,0.831553562758,2.0538915523,2.09898335744,2.0,-0.6566240708,2.0,0.0,0.739920760247,0.0 132 | 130,0.0,-0.0302180586983,-1.19452293977,1.95983725474,0.0,0.873989751007,1.0,0.0,-0.99292248003,0.0 133 | 131,0.0,-0.260313708783,0.285803286795,0.450613049431,0.0,0.0784392460837,0.0,0.0,0.462519239592,2.0 134 | 132,0.0,-0.0361310561967,-0.845153958426,0.0827729037854,1.0,0.182994449645,2.0,0.0,0.0905839234815,1.0 135 | 133,0.0,-0.00641841612888,0.553388983074,0.0367828331742,0.0,-0.834271343068,2.0,1.0,0.752638534479,1.0 136 | 134,1.0,0.448497313916,0.966074774072,-1.38430678879,1.0,-1.71767214836,0.0,0.0,-0.609953910591,2.0 137 | 135,0.0,-0.0515218393808,-1.59475595816,0.745150864285,0.0,0.236142409879,2.0,0.0,1.08014416652,3.0 138 | 136,1.0,0.540150169676,1.42069963102,1.134166416,1.0,0.904962041494,1.0,0.0,-0.14119058209,0.0 139 | 137,1.0,0.111903934162,0.422079223167,1.42834205066,1.0,-0.225806749076,1.0,0.0,2.59169472131,2.0 140 | 138,0.0,-0.0924564114378,0.881146720813,-0.711462194084,0.0,1.43642951956,0.0,0.0,-1.61417633496,1.0 141 | 139,1.0,1.75991323924,1.00132568873,0.615543121023,1.0,-0.703916325416,2.0,0.0,2.42893473808,1.0 142 | 140,1.0,-0.0188639856667,1.39542098539,0.588975063497,1.0,-1.05470445497,0.0,0.0,-0.126365998056,0.0 143 | 141,0.0,-0.021345677935,-0.957568955015,1.02162298407,0.0,-0.0672303071961,3.0,0.0,0.222802101719,0.0 144 | 142,0.0,0.0496199187363,-0.589332231427,-0.378759836603,0.0,-0.0825925753513,2.0,0.0,-0.604289431609,3.0 145 | 143,0.0,-0.0535316712568,-0.458638636101,2.08266032211,0.0,0.769968731335,0.0,1.0,-1.56888129302,2.0 146 | 144,0.0,0.0511499575362,0.856702480243,0.430862419015,1.0,-0.774962824064,1.0,1.0,-0.52839677202,0.0 147 | 145,0.0,0.193515404006,1.67737708781,-1.27568266,0.0,1.36809423681,2.0,0.0,-0.365686984872,0.0 148 | 146,1.0,0.360513032576,0.194828248257,0.871453706748,1.0,1.96691696251,0.0,0.0,0.182801712731,0.0 149 | 147,1.0,0.274951317763,2.07684814466,0.348324877844,1.0,-0.0391440269683,0.0,1.0,1.12113834501,1.0 150 | 148,0.0,-0.0183150471053,-2.16967741773,-2.19438246982,0.0,1.24971042018,0.0,0.0,0.190730726607,1.0 151 | 149,0.0,-0.035667313418,-1.19418940109,1.59947094011,0.0,-1.05649707063,3.0,0.0,0.208141763283,0.0 152 | 150,1.0,0.688677088465,0.0412215438132,1.70314254222,1.0,1.07522154118,2.0,0.0,0.384367716517,1.0 153 | 151,0.0,-0.0627313445951,-1.35250868944,0.533207317899,0.0,1.04727640856,1.0,0.0,-1.75493019312,1.0 154 | 152,0.0,0.0045222709,-1.58358838979,0.1654036603,0.0,0.86343728019,1.0,1.0,-1.66252450214,3.0 155 | 153,0.0,0.00511979018811,0.412998912138,-1.38201756869,0.0,-0.0155630888703,1.0,1.0,-1.49698898886,1.0 156 | 154,1.0,1.03497210728,0.785932302272,0.516382860445,1.0,-2.95424894124,2.0,0.0,-0.373273857995,2.0 157 | 155,0.0,-0.137246554788,0.379405397605,0.841780774784,0.0,-0.641727143652,1.0,0.0,-1.87171511972,0.0 158 | 156,1.0,2.98139187567,1.69047268612,-0.0512200297825,1.0,-0.625916017685,2.0,0.0,-0.689787544729,1.0 159 | 157,1.0,1.23857918355,1.26561699317,-1.53176931625,1.0,-0.97825493806,1.0,0.0,-1.36824924498,1.0 160 | 158,0.0,0.0500240469437,0.65776317615,-0.227106007781,0.0,0.122243004547,0.0,1.0,0.487715426199,1.0 161 | 159,1.0,1.2690979261,0.930467713758,0.858242445972,1.0,-0.418963445521,6.0,0.0,0.437655628908,2.0 162 | 160,0.0,0.122082129881,-1.18699338831,0.135563416415,0.0,-0.824612009765,1.0,0.0,-0.300644039736,0.0 163 | 161,1.0,0.459587419257,2.05781418082,1.72851864351,1.0,-1.05880014825,2.0,1.0,-1.89996091817,0.0 164 | 162,1.0,0.720087863719,0.410887867219,1.63760581223,2.0,-0.715512985485,1.0,1.0,-0.237143909436,1.0 165 | 163,1.0,0.0801921425709,0.0644037012376,1.25876980524,1.0,1.12149921185,1.0,1.0,0.328626115376,0.0 166 | 164,0.0,0.0434770064557,-0.177917875804,1.19553138809,0.0,-0.661025054627,2.0,0.0,0.810726667239,2.0 167 | 165,1.0,0.375422592412,0.0871890807035,-0.518969780813,2.0,-0.514938706433,0.0,0.0,1.75340462731,0.0 168 | 166,0.0,-0.0795557067941,-0.417430381989,0.504581814477,0.0,-0.456697615023,0.0,0.0,1.11849818042,2.0 169 | 167,0.0,0.0424393937861,0.344053921563,0.626538363337,0.0,0.338993513809,0.0,0.0,0.164776529068,1.0 170 | 168,0.0,0.127951866976,0.348341739246,-1.23956228608,0.0,0.456249488529,1.0,1.0,-0.285241340307,4.0 171 | 169,1.0,0.629724550325,0.102169933574,-0.502870608682,1.0,-3.04465653924,1.0,0.0,-0.742934096291,0.0 172 | 170,1.0,0.225485899658,0.512294627051,0.254057873524,1.0,1.02163521383,0.0,1.0,1.35566189589,1.0 173 | 171,0.0,-0.249327082033,1.07433300477,-0.661541442515,0.0,1.43636803424,0.0,0.0,0.166590579699,1.0 174 | 172,1.0,0.270915185122,1.49640011773,1.7534194635,1.0,-1.05018653736,0.0,1.0,0.630544208683,0.0 175 | 173,0.0,0.16291663649,2.07506503935,-0.614538783691,0.0,-0.972298244735,3.0,0.0,-0.590219737929,1.0 176 | 174,1.0,0.863623298638,2.18012817374,0.143651481719,1.0,-0.450253387778,0.0,1.0,-1.24090906551,2.0 177 | 175,0.0,-0.117387996441,1.14429306856,-0.611633736695,0.0,-0.756004019457,2.0,0.0,-0.400337718273,0.0 178 | 176,1.0,0.400300717553,-0.387868550456,2.11863233415,1.0,0.223926873947,1.0,0.0,-0.302928265806,0.0 179 | 177,0.0,0.206790633816,0.763860351633,0.013043374377,0.0,-1.94652528636,0.0,1.0,0.191772433644,0.0 180 | 178,1.0,1.87337534011,0.946893198303,0.820748974643,1.0,-1.11792760804,1.0,0.0,-0.737433888984,0.0 181 | 179,0.0,-0.105130991164,-0.550981803538,-0.110005498701,0.0,1.53919720017,1.0,0.0,0.024969863382,1.0 182 | 180,0.0,0.149743168318,0.168015340533,1.29206033433,0.0,-0.928219967348,1.0,1.0,1.17770635436,0.0 183 | 181,0.0,0.185770234354,0.945211534611,-0.749171726603,0.0,1.2434282781,1.0,0.0,-1.67296160954,0.0 184 | 182,1.0,0.545169523913,1.500831591,2.31550829094,1.0,0.35533819559,3.0,0.0,-2.11690259196,0.0 185 | 183,0.0,0.794781241233,0.121526198658,1.21049629892,1.0,-1.80926771459,1.0,0.0,1.24591384862,3.0 186 | 184,0.0,0.209584350181,0.742458913593,-0.160419381975,0.0,0.635329195216,0.0,1.0,-1.46362645803,1.0 187 | 185,1.0,0.454534153413,0.362412457924,3.50090049793,1.0,-0.117667302193,1.0,0.0,-0.380071966892,0.0 188 | 186,1.0,1.04371141812,1.21668311896,-0.0556394897986,1.0,-0.45546705625,1.0,0.0,0.608479681306,1.0 189 | 187,1.0,0.837214209049,0.696649932523,0.646314240433,1.0,0.244957093172,2.0,0.0,-0.0592261686708,1.0 190 | 188,1.0,1.24081444236,0.781133748264,-0.232431239164,1.0,0.474633485567,1.0,0.0,-0.0732878790036,1.0 191 | 189,0.0,-0.0160360081045,0.766242975041,0.952461970536,0.0,0.707591821975,1.0,0.0,0.0723966478183,1.0 192 | 190,0.0,0.0330851304616,-1.04019371982,1.68918893365,1.0,1.17825284755,3.0,0.0,2.51871409929,1.0 193 | 191,1.0,1.40360505449,2.94519507428,2.6699227814,1.0,0.408135912778,0.0,0.0,1.78062495592,0.0 194 | 192,1.0,0.304958754538,-0.821086069294,2.22394875315,2.0,-1.37563408879,0.0,0.0,-0.693725308868,2.0 195 | 193,1.0,0.200745180757,0.402332316745,0.802379532204,2.0,-0.473645457651,0.0,0.0,1.05088824095,3.0 196 | 194,0.0,0.137649645002,0.370211889942,-0.36524097749,0.0,2.94304833527,0.0,0.0,0.505507757592,2.0 197 | 195,0.0,0.0313132140013,0.584314166435,-1.67116977249,0.0,0.724491060382,1.0,0.0,-0.0195148027517,1.0 198 | 196,0.0,1.44632408034,0.899524279428,3.03587353518,1.0,2.36928730081,2.0,0.0,-0.907868808477,0.0 199 | 197,0.0,0.711428090099,0.942609296998,1.46897807815,2.0,1.3954340822,1.0,0.0,0.451368031445,2.0 200 | 198,1.0,0.910225270478,1.41055008533,0.508043095131,1.0,0.241802071556,1.0,0.0,-0.306045465064,0.0 201 | 199,1.0,2.084860215,0.768930522542,2.32805688899,2.0,0.301407069781,1.0,0.0,-0.379560074929,1.0 202 | 200,1.0,1.5328378571,2.39318125793,0.02723548324,1.0,-0.0365800398768,3.0,1.0,-0.767071351319,2.0 203 | 201,0.0,-0.156785942537,0.839349114232,0.406622034223,0.0,-1.73780461585,0.0,0.0,0.999823521062,0.0 204 | 202,0.0,0.0346709977605,0.872824351006,-0.172629134291,0.0,0.0180472524682,2.0,0.0,-0.767738018629,2.0 205 | 203,1.0,0.640769832529,0.0338432766296,1.63867713988,1.0,1.21067455254,0.0,0.0,-0.761645238936,0.0 206 | 204,1.0,0.684284957426,0.920611575594,0.936426460814,1.0,-0.599639994821,0.0,0.0,0.77793776758,1.0 207 | 205,1.0,-0.00322806110495,-0.300465948721,-1.45092789111,0.0,0.411952999062,1.0,1.0,-0.144330467803,1.0 208 | 206,0.0,0.0640542935075,-1.00560137569,0.07557637267,1.0,0.851591045893,1.0,0.0,-0.117418523786,0.0 209 | 207,1.0,0.0156833267628,1.36016418395,2.04886414188,1.0,-0.909680439312,3.0,0.0,1.03289348409,0.0 210 | 208,0.0,-0.0113128052516,-0.53764575778,-0.029216405854,0.0,-0.451302864344,0.0,0.0,1.31370061179,0.0 211 | 209,0.0,-0.129921636345,0.65540382985,0.775115121589,0.0,-1.01791149048,1.0,0.0,-2.12784572193,0.0 212 | 210,1.0,1.03717462659,-0.0701915628943,-0.0455294856741,1.0,-0.822165606689,1.0,0.0,-0.128774254784,1.0 213 | 211,1.0,0.0100107637018,2.71904061284,0.97373920673,1.0,-1.28760528365,0.0,0.0,-1.41026452817,1.0 214 | 212,1.0,0.706432455562,0.103667341408,0.375489544911,1.0,-0.900448461378,1.0,1.0,-0.386793337857,2.0 215 | 213,1.0,0.119459222051,0.2193023372,0.746980840105,0.0,1.4194556808,1.0,0.0,-0.0067361561141,1.0 216 | 214,1.0,0.991184904347,1.79185931039,1.03149156226,1.0,-0.91547702909,1.0,0.0,-0.354854573074,2.0 217 | 215,0.0,0.00516609768511,-0.5706404302,0.690073676337,0.0,0.126459219061,1.0,0.0,-1.02527543067,0.0 218 | 216,0.0,0.0229074688206,0.852468643433,1.08771042616,0.0,-0.502868753671,0.0,0.0,-1.07600663771,0.0 219 | 217,1.0,0.758568043095,-0.2291835978,1.69161857512,1.0,1.17886593704,2.0,0.0,0.727941389032,1.0 220 | 218,1.0,0.880885082334,2.45211769918,1.27311843429,1.0,1.3111622966,0.0,0.0,1.5348098061,1.0 221 | 219,1.0,0.325022325434,1.01414926497,0.00178774148859,1.0,0.864069982139,1.0,0.0,-2.06047692893,0.0 222 | 220,0.0,0.00848977487264,0.403588592031,0.997213889333,1.0,0.306134553103,1.0,0.0,-0.327618666066,0.0 223 | 221,1.0,1.57978978849,0.700818227573,0.466909597984,1.0,-0.231059536841,1.0,1.0,0.731964137394,0.0 224 | 222,0.0,0.0320785725933,0.808919269393,-0.344063956704,0.0,-1.19187470419,0.0,0.0,-0.0326037604008,1.0 225 | 223,0.0,0.0194051943606,-0.58445529185,-0.37453415075,1.0,1.94352888112,0.0,1.0,-1.11368662191,1.0 226 | 224,0.0,-0.127006108871,-0.749357689423,-0.979925574782,1.0,-0.759673017753,0.0,0.0,-0.477789404064,0.0 227 | 225,0.0,0.0286955854302,-0.221536597584,-1.95733858913,0.0,0.663646347033,2.0,0.0,0.302150237432,1.0 228 | 226,1.0,1.380981747,-0.17696211277,0.331856951672,1.0,1.05956557262,3.0,1.0,-0.30719210938,1.0 229 | 227,0.0,-0.0638282726528,1.82054390794,0.193379451924,1.0,-0.555280496905,1.0,0.0,-0.0479799339186,1.0 230 | 228,0.0,0.199098841659,0.433605408785,-0.348177045427,1.0,1.03801252732,0.0,1.0,-0.0191604975816,2.0 231 | 229,1.0,1.65199699101,1.83161678618,1.01568223647,1.0,0.764213203339,0.0,1.0,-0.524281609658,1.0 232 | 230,1.0,0.584582612909,1.20947008365,2.90026842431,1.0,1.72796383538,1.0,0.0,0.816569023971,0.0 233 | 231,1.0,0.522293101867,0.015465949518,2.02305655525,1.0,-0.469346466427,1.0,0.0,-0.477491596841,3.0 234 | 232,1.0,0.245157403232,0.994045290787,2.64354150912,2.0,-1.28586401728,1.0,0.0,-1.00546799223,1.0 235 | 233,0.0,-0.122289501956,0.784002779311,0.391127876933,0.0,-0.505489755445,0.0,1.0,2.22963943342,0.0 236 | 234,0.0,0.00712537499109,-0.188261335086,1.16750982299,0.0,0.208853542534,0.0,1.0,-0.0777940894374,3.0 237 | 235,1.0,0.496326524976,2.19311294585,0.276035269532,1.0,0.0582127270851,1.0,0.0,-2.6001207002,0.0 238 | 236,0.0,-0.0695694877197,1.02151539278,-0.644340267022,0.0,-0.393437896275,1.0,0.0,1.25474483734,3.0 239 | 237,0.0,-0.0918126983417,0.918914854658,-2.73914020614,1.0,-1.90919745898,0.0,0.0,1.25152886921,1.0 240 | 238,0.0,0.923996965042,0.540343227727,2.18614547404,1.0,0.470482996129,1.0,0.0,0.457175531157,0.0 241 | 239,0.0,-0.0396229678102,-1.07984244778,1.54032397982,0.0,1.97234447908,2.0,0.0,0.631635209821,1.0 242 | 240,1.0,1.34427606805,0.386412394637,0.446822754653,1.0,0.464251238123,0.0,0.0,2.15974231267,0.0 243 | 241,1.0,0.517713744046,1.19624094067,0.746048293603,2.0,0.609135519054,1.0,0.0,-0.962801763968,0.0 244 | 242,1.0,0.273187256522,1.54578671353,0.246137886309,1.0,0.572445306155,2.0,0.0,0.133240053975,1.0 245 | 243,1.0,-0.147944422314,-2.17157140476,0.382653551477,0.0,0.397046669882,0.0,1.0,1.96970267905,1.0 246 | 244,0.0,0.125923323979,-0.00811320161175,1.1249325453,0.0,0.931665966868,2.0,1.0,2.18156908097,0.0 247 | 245,1.0,2.36153342102,1.15808922532,-0.742771973881,1.0,0.395373681186,2.0,1.0,-0.366092312908,2.0 248 | 246,0.0,-0.0973378838027,-0.277544256316,0.409438530642,0.0,-0.312677169653,1.0,1.0,2.01015085009,1.0 249 | 247,1.0,0.311997025927,2.29127383902,0.723328228281,1.0,-0.795988910009,0.0,0.0,0.802630701324,0.0 250 | 248,0.0,1.23369345273,1.42178007425,1.11339439197,1.0,-0.248973655281,1.0,0.0,1.49521449787,0.0 251 | 249,1.0,0.469154821511,2.31019190808,1.45899400167,1.0,0.314129496451,1.0,0.0,0.769820903158,0.0 252 | 250,0.0,-0.0823935486972,-0.21596052035,-0.188202438773,0.0,-0.316082961123,0.0,1.0,0.30544624386,4.0 253 | 251,1.0,-0.0719109451449,0.937477492507,-0.103586853406,0.0,0.314338683131,3.0,1.0,2.2093871259,4.0 254 | 252,1.0,0.840343598404,2.63506639453,0.786124832445,1.0,0.4391501337,0.0,1.0,-0.528609964238,0.0 255 | 253,0.0,6.82818957483e-05,1.31169344927,0.970316201788,0.0,0.83317943127,0.0,1.0,1.90228314035,3.0 256 | 254,0.0,0.0782130001531,-1.09214159343,0.418759960127,0.0,1.28279496884,0.0,0.0,2.06068893373,1.0 257 | 255,1.0,0.105435419489,0.746323922458,1.22058353774,1.0,0.0780074184789,2.0,0.0,1.36304832128,0.0 258 | 256,1.0,0.526759369916,0.65483529455,-0.270951721092,1.0,-1.30777656515,2.0,0.0,-0.071728981811,1.0 259 | 257,1.0,2.31376453802,1.48925453508,0.621420256787,1.0,-0.345104096819,2.0,0.0,0.244435347979,0.0 260 | 258,1.0,0.762108575732,1.68635355501,1.89866916034,2.0,0.0440625674066,0.0,0.0,-1.27480561527,1.0 261 | 259,0.0,-0.0415213767905,-0.838892674026,0.0376965731239,0.0,-1.83576875618,0.0,0.0,-0.452579969943,1.0 262 | 260,1.0,0.654924732447,1.06783851392,1.65953146959,2.0,1.3886645201,4.0,0.0,0.620711753105,0.0 263 | 261,1.0,1.14882293061,-1.01992733216,2.76651180033,1.0,0.14237791251,1.0,0.0,-1.42671230577,0.0 264 | 262,0.0,-0.0179093285016,1.4419450058,1.03860606921,0.0,0.38135283458,2.0,0.0,-0.297911327998,0.0 265 | 263,1.0,0.0461032933391,0.487625759323,1.0931583377,1.0,1.36552646253,2.0,0.0,1.94482864157,0.0 266 | 264,1.0,0.668079965144,1.05586393984,0.489010829804,1.0,-0.630142830142,3.0,0.0,-0.154364072774,2.0 267 | 265,1.0,0.741804243264,0.690350286012,-1.55354959606,1.0,0.574041930884,0.0,0.0,1.03362833549,0.0 268 | 266,1.0,0.635593417912,2.14602757501,0.831615077527,1.0,-0.109864123102,1.0,0.0,0.566502455055,1.0 269 | 267,1.0,0.0535800466207,-1.8375064414,0.673987504183,2.0,-0.184086867016,1.0,1.0,-0.307689436507,2.0 270 | 268,0.0,0.119476286188,-0.0166103423259,0.390366194395,0.0,-0.772192387804,2.0,0.0,-0.155048658852,0.0 271 | 269,0.0,0.0894647187574,-0.105818757498,-0.153905226975,1.0,1.66560321369,0.0,0.0,0.166865247442,1.0 272 | 270,1.0,0.567220594677,0.546363612408,0.679614940563,2.0,-0.375500040076,1.0,1.0,-2.05102248853,0.0 273 | 271,1.0,0.824204677411,2.72622654564,-0.779398930507,1.0,0.699464246896,0.0,1.0,0.946974800876,0.0 274 | 272,1.0,-0.113995897008,0.112670541144,0.0600321708499,1.0,-1.87500738747,1.0,1.0,-0.118380075054,2.0 275 | 273,1.0,1.41515263541,1.77179617724,1.4766510408,1.0,1.17998852969,1.0,0.0,0.981917163269,1.0 276 | 274,1.0,0.599539497634,1.35625278871,2.71590763113,1.0,1.05221115596,0.0,0.0,0.388200613552,1.0 277 | 275,1.0,0.766298638447,2.26151925254,0.902474616254,1.0,0.0974341102973,1.0,0.0,-0.162559617475,2.0 278 | 276,1.0,1.31993766558,0.332810915222,1.32781107357,1.0,-0.226942466138,0.0,0.0,0.19754862805,0.0 279 | 277,0.0,0.774306250696,0.267031100876,1.95247815695,1.0,0.400000005614,1.0,1.0,0.200910937328,0.0 280 | 278,1.0,0.288763869608,2.09606990748,0.1891060638,2.0,2.28879066088,1.0,0.0,1.47619009973,0.0 281 | 279,1.0,0.416217464411,1.42532130833,1.36681404329,1.0,-1.7632366989,0.0,0.0,0.0626544927787,1.0 282 | 280,1.0,0.356219658899,-0.544937346677,0.259509893668,1.0,0.782027387574,0.0,0.0,0.288165507642,1.0 283 | 281,0.0,-0.0634285847689,-0.539305014463,0.864824438491,0.0,-0.911617302154,1.0,0.0,-1.26188978273,1.0 284 | 282,0.0,-0.0235969987211,0.386382653848,0.151403047952,1.0,-0.0199183962997,1.0,0.0,-0.0470434482985,1.0 285 | 283,0.0,0.0744185710315,0.837764221547,0.298451813981,0.0,-0.247880119079,1.0,1.0,1.4543101018,0.0 286 | 284,1.0,1.74211198293,0.320769346807,0.217401402581,1.0,-0.428318257798,1.0,1.0,0.428821006012,1.0 287 | 285,0.0,0.0266818396295,-2.91425598982,0.707032359611,0.0,-0.0104651290527,0.0,1.0,-1.08101206976,2.0 288 | 286,1.0,-0.033912227927,0.523223185737,2.08471292123,1.0,-1.13417114528,0.0,0.0,-0.973828335908,0.0 289 | 287,1.0,0.978316692294,-0.220320689944,-0.00791169542821,1.0,1.02918043613,0.0,0.0,-0.741495427411,3.0 290 | 288,0.0,-0.01237326801,-2.01733879812,-0.339759007648,1.0,-1.7941435112,0.0,0.0,0.999631043593,1.0 291 | 289,1.0,0.443707610939,-1.83232592498,1.23160747417,1.0,0.539764512828,1.0,0.0,0.876540512292,1.0 292 | 290,0.0,-0.0496932025118,0.813980860198,0.786406211996,0.0,-0.326535852535,2.0,1.0,-3.45425485284,0.0 293 | 291,0.0,-0.018256897438,0.128617450405,-0.559546285289,0.0,-1.17092489381,1.0,0.0,-0.0813856942841,1.0 294 | 292,1.0,0.748638149364,0.774343619288,-1.83303029014,2.0,0.202383370599,1.0,1.0,0.147638100387,3.0 295 | 293,0.0,-0.00350076100062,1.38902436296,1.35918949416,0.0,-1.55695108671,0.0,0.0,-0.962143528859,0.0 296 | 294,0.0,-0.0811000863629,0.637324683023,0.760506119584,1.0,0.0397138217196,0.0,0.0,-0.390474996944,0.0 297 | 295,1.0,0.673357263112,2.61630004272,-0.742947530487,1.0,-1.42287690781,1.0,0.0,1.33099854913,0.0 298 | 296,1.0,0.396374213376,-0.392735472167,0.39243120822,1.0,0.461272084318,2.0,0.0,0.408843211815,2.0 299 | 297,0.0,0.0212739775858,-0.034550623954,1.56818242953,0.0,-0.92435733363,0.0,1.0,-0.499582640312,2.0 300 | 298,1.0,0.0939057074445,-0.616713374948,2.44779641846,1.0,-0.450994017029,1.0,0.0,-0.187308361608,0.0 301 | 299,0.0,-0.0431125569575,-0.229382331855,0.938640022679,0.0,0.293949387943,0.0,1.0,-0.227873128996,1.0 302 | 300,0.0,0.0408052846837,-0.248615853767,-0.17611243396,0.0,-0.772542111842,2.0,1.0,0.281955198185,1.0 303 | 301,0.0,1.57436368087,1.62661363726,1.08298741881,1.0,-0.0579639996683,0.0,0.0,-1.42973065624,0.0 304 | 302,1.0,0.555269469311,1.04556388114,0.869074194874,2.0,-1.51383050124,1.0,1.0,-0.66975529979,2.0 305 | 303,1.0,0.948015217344,1.62340713828,2.12823978327,1.0,0.630875603596,1.0,0.0,1.0353964498,1.0 306 | 304,1.0,0.672770902079,1.70344013314,0.124157593505,1.0,1.76491380555,3.0,0.0,-0.0725664869592,0.0 307 | 305,1.0,0.890939256672,3.15492867738,0.194200345116,1.0,2.79220886791,0.0,1.0,-0.84990825276,1.0 308 | 306,1.0,1.09265174709,0.684703344714,2.01027458684,1.0,0.0911681466664,1.0,1.0,-0.808660041658,1.0 309 | 307,0.0,-0.208647765837,-0.941022700666,-0.0443614555116,0.0,0.788204140797,0.0,0.0,0.720843602131,0.0 310 | 308,1.0,0.187888302191,1.24608361532,2.37846735545,1.0,-1.78062567291,1.0,0.0,-0.51780526533,1.0 311 | 309,0.0,0.22125310394,-0.80228002714,-0.671512206981,0.0,1.50273432631,0.0,0.0,0.510903379087,3.0 312 | 310,0.0,-0.0360039268757,1.48196076844,-0.0547783603388,0.0,0.776228504724,0.0,0.0,-0.626834320891,0.0 313 | 311,0.0,-0.0728077097855,-0.283218038945,-0.922412984844,0.0,-0.483933444951,2.0,0.0,-1.12996489267,2.0 314 | 312,0.0,0.0373348559711,-0.565576367874,0.00736268142357,0.0,1.23718080029,0.0,1.0,0.244447958497,2.0 315 | 313,1.0,0.979585825271,0.528684278849,-0.478546936999,1.0,-0.254476076645,0.0,0.0,-0.0973810059135,1.0 316 | 314,1.0,0.582479808641,1.71841742347,0.512366579045,1.0,-0.458025183015,1.0,0.0,0.685124338415,0.0 317 | 315,1.0,1.24135099087,0.842253016769,-0.436253864928,1.0,0.475334925427,1.0,0.0,0.884124321031,1.0 318 | 316,0.0,0.0731380252575,-0.64166682013,0.693923233191,0.0,-1.06335449983,1.0,0.0,-0.357966888753,0.0 319 | 317,0.0,0.0590422061251,1.66535191762,0.71658933976,0.0,1.0216247644,1.0,0.0,0.348933827351,0.0 320 | 318,0.0,-0.0142146536941,-0.856169840662,-1.73026273048,0.0,-1.05598981193,0.0,0.0,-0.388809785459,1.0 321 | 319,0.0,0.0338687317922,0.035566074033,1.3338857455,0.0,-1.05005478982,2.0,1.0,0.633646964071,1.0 322 | 320,1.0,0.799717566589,1.65230615161,3.49741512642,1.0,-0.909689788408,2.0,0.0,0.233415461107,1.0 323 | 321,1.0,0.669258105088,-0.631335110417,1.04600638674,1.0,0.759500037516,0.0,0.0,-0.623836517363,1.0 324 | 322,1.0,0.146140332126,1.48026050141,0.358885739775,1.0,-0.61677536152,1.0,1.0,-0.707577891019,4.0 325 | 323,0.0,0.0820158186755,-1.05510767548,2.824330591,0.0,-1.34799578437,0.0,0.0,0.268667925104,2.0 326 | 324,0.0,1.00208582357,1.82278278083,-0.318968498303,1.0,-0.605679999936,1.0,0.0,1.16219105265,3.0 327 | 325,1.0,1.96991310147,0.037348988081,1.02010646687,2.0,-0.0320423706805,0.0,0.0,0.901296211206,3.0 328 | 326,1.0,0.3569697464,1.69276903185,1.17962227263,1.0,-1.18097248366,2.0,0.0,-0.94300940398,2.0 329 | 327,1.0,1.54977847248,2.10583306629,2.34514762045,1.0,-1.15168110903,2.0,0.0,-0.837843296023,1.0 330 | 328,0.0,0.119170749711,0.861436525633,0.359738975127,1.0,2.1112963341,2.0,0.0,-0.690477711566,2.0 331 | 329,0.0,-0.00837179598492,0.251316648238,-0.498633895788,0.0,-0.860565403814,2.0,1.0,-0.596562929585,1.0 332 | 330,0.0,-0.111954612838,-0.23130094293,-0.951184370388,0.0,-0.323042368773,2.0,1.0,-1.81666010352,0.0 333 | 331,1.0,0.262692513893,0.423580423665,0.658178179754,1.0,-0.367237000799,1.0,0.0,0.79004320413,3.0 334 | 332,0.0,0.017869471681,1.47103469082,-1.00692736095,0.0,-0.42135680777,0.0,0.0,-0.455882735372,2.0 335 | 333,0.0,0.12292147843,-0.699495220168,0.0478253197847,0.0,0.621346739969,0.0,0.0,0.462074255898,0.0 336 | 334,0.0,0.0603094684949,-1.03706607357,-0.56419617986,1.0,0.948142950472,0.0,0.0,-0.315758008217,0.0 337 | 335,0.0,-0.0850535278747,0.665368935033,-1.49403779329,0.0,-0.305954431532,0.0,0.0,-0.0229659003145,1.0 338 | 336,1.0,0.717786581476,0.203863196814,2.25514578837,1.0,-1.23647828659,3.0,0.0,-0.685185878411,0.0 339 | 337,1.0,1.5620496543,0.0499365025339,0.502327476571,1.0,1.27444022785,2.0,0.0,-0.0282577532982,2.0 340 | 338,0.0,0.1275390738,-1.44360426217,-1.26813680498,0.0,-0.0953410911967,0.0,1.0,-0.871245811815,1.0 341 | 339,0.0,-0.0151714433577,-0.482909839461,-0.168259134488,0.0,1.73032181486,2.0,0.0,-0.0208395527712,1.0 342 | 340,0.0,0.0533359244705,-0.0827150238965,0.0683715659677,1.0,-2.24558589757,1.0,1.0,1.45722307507,1.0 343 | 341,0.0,0.0839468504518,0.243091727661,-1.74646672558,1.0,0.195403221283,0.0,1.0,0.520604718161,0.0 344 | 342,0.0,0.121819471175,0.951306244299,0.331647667126,0.0,1.91860633388,1.0,0.0,0.291051901026,2.0 345 | 343,0.0,0.105736830538,0.526897923666,-1.04715756869,1.0,-0.353264135438,0.0,1.0,-1.31974081803,3.0 346 | 344,1.0,0.0872197000073,-0.190872219553,1.71102880919,0.0,-0.225493423335,3.0,1.0,0.567256402058,1.0 347 | 345,1.0,1.39985810871,0.80180432362,1.52396051208,1.0,0.29551169159,0.0,0.0,0.66445338436,0.0 348 | 346,1.0,1.02459212348,1.51015746892,0.600100009891,1.0,-0.558795818885,1.0,0.0,0.268265709532,1.0 349 | 347,0.0,0.0332607510324,1.27257016293,-0.745167770317,0.0,-0.312071932053,1.0,0.0,0.214282491738,1.0 350 | 348,0.0,0.0933128072341,0.126314199483,-0.104967707564,0.0,-0.337815094191,4.0,1.0,-0.140181193611,0.0 351 | 349,1.0,1.30666124946,0.53086914579,1.61279074158,1.0,-0.627420734426,2.0,0.0,0.649402515822,0.0 352 | 350,1.0,0.493325717261,0.00713399891445,0.974505871415,1.0,1.2288565502,2.0,0.0,1.39701055499,2.0 353 | 351,1.0,1.23624209973,-0.445205264412,0.782841192863,1.0,0.461078032296,1.0,0.0,0.330528172905,1.0 354 | 352,1.0,1.92063835379,1.66626967204,1.05837029082,1.0,0.250628232103,2.0,0.0,-0.971717179277,1.0 355 | 353,0.0,-0.0836920703796,0.57797852364,-0.603858931237,1.0,0.80857100689,0.0,0.0,-0.895217144153,1.0 356 | 354,0.0,-0.0140375058905,0.577363525107,-0.343205926843,0.0,-0.264355833203,0.0,1.0,0.726239873271,1.0 357 | 355,1.0,1.0758497409,0.871340553648,-1.08579243891,1.0,-0.774203818353,1.0,0.0,-0.963591405021,3.0 358 | 356,0.0,-0.0524567013767,1.40693474589,0.973726230852,0.0,-0.602624304615,3.0,1.0,0.201054987311,0.0 359 | 357,1.0,0.159123311172,0.515881505415,1.29879778032,1.0,0.00178304110461,3.0,1.0,-0.345542741417,1.0 360 | 358,1.0,0.393820921866,1.95526923721,0.226544155967,1.0,-1.05921170837,2.0,0.0,-1.07223595336,0.0 361 | 359,1.0,1.56735806366,0.96125710501,2.89873498136,1.0,-0.500261016587,1.0,0.0,0.832269588574,0.0 362 | 360,0.0,-0.143590952387,-0.608350764679,0.0870164803924,0.0,-0.516116641871,1.0,1.0,0.706770387062,1.0 363 | 361,1.0,1.40078614304,1.59253030732,-0.0361435719752,1.0,2.12455622983,0.0,1.0,-1.35564930327,2.0 364 | 362,0.0,0.0281009250282,0.409636118684,0.85673742147,0.0,-2.77381493993,0.0,0.0,0.481443462312,1.0 365 | 363,1.0,1.18604661219,1.35697275927,1.39804821651,1.0,-0.179619721406,0.0,0.0,0.335259994949,2.0 366 | 364,1.0,0.468913033956,1.08127842206,1.39457998548,1.0,1.72569379281,3.0,0.0,0.837457202359,0.0 367 | 365,0.0,-0.0158153844372,-0.0378930817168,-0.425755604652,0.0,0.121844464132,2.0,1.0,0.166781938656,3.0 368 | 366,1.0,0.949817313791,3.38837199287,1.45049572378,1.0,0.753417473421,2.0,1.0,1.42683614176,0.0 369 | 367,0.0,1.11602310805,2.1842566452,0.738241709779,1.0,0.0998263150998,2.0,0.0,-0.126660881531,1.0 370 | 368,0.0,-0.0181449069248,0.722826894986,0.555941451646,0.0,-0.667333381216,0.0,1.0,-0.272094397484,0.0 371 | 369,0.0,-0.0106337002531,0.111799158203,-1.90494445401,1.0,-2.24191593451,0.0,0.0,-0.974790877598,3.0 372 | 370,0.0,0.0995581514002,1.0071572006,-0.433873462979,0.0,0.205455687036,0.0,1.0,-0.933941907418,0.0 373 | 371,0.0,0.170317260992,0.517994776391,1.72215509781,0.0,-0.775606604602,1.0,0.0,-1.02448499902,2.0 374 | 372,0.0,-0.163802905744,0.026204752774,-0.7670674554,0.0,-0.800335406165,0.0,0.0,0.218399645411,1.0 375 | 373,1.0,1.30302585593,0.696435674734,0.396161702507,1.0,-0.498987255979,1.0,0.0,-0.269099318676,2.0 376 | 374,0.0,-0.0622034805554,-0.0809173376627,-0.44796133845,0.0,1.74486140662,0.0,0.0,0.330693226657,0.0 377 | 375,0.0,0.0582737583174,-3.17042573588,-1.21480613589,1.0,2.40483754225,0.0,0.0,-1.20924875446,2.0 378 | 376,1.0,1.06115039446,1.2106008393,-1.20828077623,2.0,0.217207937528,1.0,0.0,-0.855692200174,1.0 379 | 377,0.0,0.106977145498,-0.48847608011,-0.230586398524,0.0,-0.464767223912,0.0,0.0,-0.872543376776,1.0 380 | 378,1.0,0.622514479702,2.59266999828,1.13585942408,1.0,-1.17722641745,0.0,0.0,2.16927073513,1.0 381 | 379,0.0,-0.231614386297,0.0193440708118,-0.0525050685387,0.0,0.468540161546,2.0,0.0,-0.165681328911,1.0 382 | 380,0.0,0.0858014195302,-1.18896341953,-0.144878561948,0.0,1.78290560007,1.0,1.0,-0.0663663217711,0.0 383 | 381,1.0,1.60219465141,0.950119845872,1.04304087085,1.0,-0.247340387025,1.0,1.0,-0.0774530072663,0.0 384 | 382,1.0,0.361032073735,-0.0461210850625,2.02284147155,1.0,-2.37899604075,2.0,0.0,1.5528293202,2.0 385 | 383,1.0,0.894320728098,1.47340741571,0.809553814071,1.0,0.670049671816,3.0,0.0,-1.61333940175,0.0 386 | 384,1.0,2.06637868052,1.29094736434,0.425917422913,1.0,0.98539971145,0.0,0.0,-0.0598995243143,2.0 387 | 385,1.0,0.5187651846,1.95783963111,0.718874515112,1.0,-1.58584564039,1.0,1.0,-1.62271405035,1.0 388 | 386,0.0,-0.0457848386182,-0.790881791695,0.579346759757,0.0,0.176484183663,4.0,1.0,-2.37981428243,0.0 389 | 387,0.0,-0.0159362232146,0.0340080962281,1.41202687854,0.0,0.451226016136,2.0,0.0,-0.734239947692,0.0 390 | 388,0.0,1.51710214447,-0.365021795427,0.371856260831,1.0,-0.0731073020089,1.0,1.0,0.412163846504,1.0 391 | 389,1.0,0.719171265358,1.70149478192,1.09893378703,2.0,-0.790770919085,2.0,1.0,-0.797780726074,3.0 392 | 390,1.0,0.343397432663,1.51887118044,1.33835744194,1.0,1.01593722356,2.0,1.0,0.395765151525,0.0 393 | 391,0.0,0.0521279905014,0.495805021028,-0.992578006729,0.0,-0.403379745969,0.0,0.0,0.106476304505,1.0 394 | 392,0.0,0.0321678541377,0.00161903135694,0.0204171672129,0.0,-1.4851861627,1.0,0.0,-0.139065598469,2.0 395 | 393,1.0,0.574945495115,1.41477289079,-0.465673857342,1.0,-2.04947448567,3.0,0.0,1.26496355977,1.0 396 | 394,0.0,-0.0995148481853,1.60433910831,-1.76905030374,0.0,1.26084952,1.0,0.0,-0.596036549848,0.0 397 | 395,1.0,0.278457142856,0.714905742958,1.36674640789,1.0,0.616663976471,0.0,0.0,0.38065542136,1.0 398 | 396,1.0,0.0236154302725,1.13864518371,0.616125258669,2.0,0.0879735471292,1.0,0.0,-1.80308676175,1.0 399 | 397,0.0,0.0178476663885,-1.08612629918,0.202280407621,0.0,-0.440274636851,0.0,0.0,0.0987794375511,1.0 400 | 398,1.0,0.529209088593,0.131739038402,0.982105022992,1.0,-0.528998414203,2.0,0.0,-0.257216036845,1.0 401 | 399,1.0,0.0570580077819,1.09781329309,0.0235999513362,1.0,-1.07573664844,2.0,0.0,-1.18224640199,1.0 402 | 400,0.0,-0.0585927673318,1.1039335467,-0.0452543019643,1.0,-0.43145564456,0.0,0.0,0.398498778728,1.0 403 | 401,1.0,1.60593040309,0.743719175748,-0.233101305015,1.0,-2.12008721512,0.0,1.0,-0.738951023902,1.0 404 | 402,1.0,0.591089832561,0.764083470688,2.390972358,2.0,-0.736063653469,2.0,1.0,1.73218457718,1.0 405 | 403,1.0,0.106015249937,0.593114755496,-0.35597034486,2.0,-0.310937516351,0.0,0.0,-2.43381650534,2.0 406 | 404,0.0,-0.0692250329266,-0.534756670844,-0.195785270969,0.0,0.60988004719,5.0,0.0,0.248258541762,2.0 407 | 405,1.0,0.254767161918,1.29497145571,-0.0422715880472,1.0,-0.0399264633734,1.0,0.0,0.0426972744584,2.0 408 | 406,0.0,0.0103438129308,-1.49725764518,0.570421173361,2.0,0.794923113876,1.0,0.0,-0.280863755575,1.0 409 | 407,0.0,0.204207604014,1.28093957667,-0.331431371282,0.0,1.34913510511,0.0,1.0,-0.529235700523,0.0 410 | 408,1.0,1.15835118113,0.334577701871,0.481333280379,1.0,1.05817009382,2.0,0.0,0.0686281999328,3.0 411 | 409,0.0,-0.00222789791837,0.721903485438,0.853201545052,0.0,0.470509847379,1.0,0.0,1.06219130763,2.0 412 | 410,0.0,0.0322082310767,-1.26999859739,0.0294305916776,0.0,0.0118626791808,1.0,1.0,-1.67218550908,2.0 413 | 411,1.0,0.803206559265,1.66884013055,1.51664444594,1.0,-0.980788008414,0.0,0.0,-0.80598689681,1.0 414 | 412,1.0,0.814053993537,1.67194460781,0.0186740634825,1.0,0.739944051379,1.0,0.0,-1.05031713432,3.0 415 | 413,1.0,0.713905720733,1.38420207201,-0.404816943928,1.0,1.67974738222,2.0,0.0,-1.09729226972,1.0 416 | 414,1.0,0.275741390349,0.00557147820021,1.10720796204,1.0,0.34210603965,0.0,0.0,0.342749005435,2.0 417 | 415,0.0,0.00176132519337,0.249548189598,-0.318846355495,0.0,1.91725914843,2.0,0.0,0.589337284734,2.0 418 | 416,0.0,-0.0975366027278,-1.18305618473,0.626434672454,1.0,-1.52557170806,1.0,0.0,1.06510286873,0.0 419 | 417,0.0,0.130350793193,-0.252763255096,-0.0799084526625,0.0,-1.15416338478,0.0,0.0,0.60509783263,1.0 420 | 418,1.0,0.582899918421,2.02941310096,1.20507533923,1.0,0.855201507748,1.0,1.0,0.686141924242,0.0 421 | 419,0.0,0.141174499691,1.79670192707,-0.623382529941,1.0,0.264290210153,5.0,0.0,-1.41180822074,1.0 422 | 420,1.0,0.306041916249,1.01518294254,2.88843693961,1.0,1.31378217657,3.0,1.0,1.48356324163,1.0 423 | 421,1.0,0.696821262702,0.0251934240772,0.835758014968,2.0,-0.0154716407267,3.0,0.0,-0.209757530755,1.0 424 | 422,0.0,-0.0782003492511,0.645587712174,0.697586970339,0.0,-0.867975422528,2.0,0.0,1.0329960791,0.0 425 | 423,0.0,-0.075970311748,0.019381237698,-0.83609167022,0.0,-0.213593242205,1.0,0.0,-1.37616701642,3.0 426 | 424,0.0,-0.177106855309,-2.32031559823,0.308009902217,1.0,-1.53268397092,2.0,0.0,-0.241419835518,4.0 427 | 425,1.0,0.332029731411,1.78262982632,-0.302844763525,2.0,-1.1285906731,0.0,0.0,0.943015908568,1.0 428 | 426,0.0,-0.183114487834,-0.0242328338697,0.45206783826,0.0,0.972443997918,1.0,0.0,0.0279244426795,0.0 429 | 427,1.0,0.118653062744,2.20245124798,0.644025915614,1.0,0.87278741447,0.0,1.0,-0.75396988529,3.0 430 | 428,0.0,-0.207558800908,-1.09527051884,0.0291905039356,0.0,0.363004284806,1.0,0.0,1.30981333519,0.0 431 | 429,0.0,-0.00860696927909,-3.1767038132,0.69797403013,0.0,-1.72107752096,2.0,0.0,-1.17141439209,0.0 432 | 430,0.0,-0.0150320460272,0.279083858345,-1.23254031122,0.0,-0.358403575513,1.0,1.0,-0.020426742247,1.0 433 | 431,1.0,0.61709560553,1.29156367668,0.315508269387,1.0,-1.22499988866,4.0,0.0,0.640170710883,1.0 434 | 432,1.0,1.09894308592,-0.690671627606,1.45732428109,2.0,1.17653325379,0.0,0.0,2.09569032996,1.0 435 | 433,0.0,-0.117223375344,-0.978499545867,2.09822147455,0.0,-0.583722133563,1.0,1.0,-0.458355592746,2.0 436 | 434,1.0,0.0464369863547,2.75521774372,-0.138082334661,0.0,-1.08574771078,2.0,0.0,-0.27645125366,2.0 437 | 435,1.0,0.296866124646,0.694389385846,1.59113611792,2.0,0.0297961651214,1.0,0.0,-0.44469113335,1.0 438 | 436,0.0,0.0316358321536,0.730958976376,-0.106971469858,0.0,-0.640154456835,1.0,0.0,0.238470158915,2.0 439 | 437,1.0,1.20759179564,0.349340172632,2.94224559476,2.0,1.4837439102,1.0,0.0,0.587928267998,0.0 440 | 438,1.0,0.474227101751,-1.09030289885,-0.747221666965,3.0,-0.734810897534,0.0,0.0,1.09331337867,1.0 441 | 439,0.0,0.130327803732,-0.170258246796,0.0946210446694,0.0,-1.39922825922,1.0,0.0,0.756047775981,1.0 442 | 440,0.0,0.0586165800393,-0.265604560286,-1.62554403356,0.0,-2.15291351576,2.0,1.0,-0.49737414965,1.0 443 | 441,1.0,0.516181671287,0.600121761332,-1.50657157054,1.0,-0.0307865024134,2.0,1.0,0.813371022629,0.0 444 | 442,0.0,0.0257198970356,-0.114640835506,0.297462053118,0.0,-0.561930113858,1.0,0.0,0.0915456440447,0.0 445 | 443,0.0,-0.024066517453,0.264268271646,0.139497796147,0.0,-1.42890460651,1.0,0.0,0.745252228818,3.0 446 | 444,1.0,0.0322271888442,0.849883048746,0.715163062258,1.0,1.18922646126,1.0,1.0,0.802367432896,0.0 447 | 445,1.0,0.815867528976,-0.264006167947,0.89380590996,2.0,0.667245147429,1.0,0.0,1.63012574601,0.0 448 | 446,1.0,0.556694292653,1.48618479156,4.09829943407,1.0,-0.0282178789372,2.0,0.0,-0.354590632503,2.0 449 | 447,1.0,1.80707582724,-0.949371755322,0.741824861969,1.0,1.36432624417,0.0,0.0,-0.545552602737,0.0 450 | 448,0.0,-0.0993358699582,-2.05035745728,0.51012436125,0.0,0.662536033399,1.0,1.0,0.447163413086,0.0 451 | 449,0.0,-0.101587882699,0.739180494702,-0.649364819614,0.0,-0.822855901518,1.0,0.0,1.18251691767,0.0 452 | 450,1.0,0.0449802609394,1.50702027214,1.29523257504,2.0,-1.03922016399,1.0,1.0,0.0580638300244,5.0 453 | 451,1.0,2.53300655353,0.942604634926,0.761766324944,1.0,0.817981544454,0.0,0.0,1.24771229186,0.0 454 | 452,0.0,-0.121728269222,-1.39544850476,-0.41051848273,0.0,0.396366956467,0.0,0.0,0.690058339809,1.0 455 | 453,1.0,1.02000084752,0.292089059326,2.8188985322,1.0,0.169747767971,2.0,0.0,-0.201215477892,0.0 456 | 454,0.0,-0.0892787515492,-0.262746747687,1.17718496318,0.0,-0.846497802869,2.0,0.0,0.563335503059,0.0 457 | 455,0.0,0.0513614464231,-1.59589396857,0.136746647399,0.0,0.607947567006,1.0,1.0,-0.434826791268,1.0 458 | 456,0.0,0.00347137487526,-0.739028658023,-2.30421193594,0.0,-0.755498883134,1.0,1.0,0.238600073266,0.0 459 | 457,0.0,-0.196850421344,0.652330338177,-0.361009223253,0.0,-0.101986654594,0.0,0.0,-1.07315914483,2.0 460 | 458,0.0,0.0654975584222,1.42730536429,2.70302756441,1.0,1.44694414639,0.0,1.0,-0.0681566304344,1.0 461 | 459,0.0,0.0810798645592,-0.419434752659,-0.23066166664,1.0,-0.66083423581,0.0,1.0,0.999689153945,0.0 462 | 460,1.0,-0.0993862674835,0.756488354316,1.10321757205,0.0,-1.57298925707,1.0,0.0,0.767146901436,1.0 463 | 461,1.0,0.677576995694,-0.914060070587,2.44194240195,2.0,-1.05254719187,3.0,0.0,0.620841748033,4.0 464 | 462,1.0,1.65320152811,1.65945124111,1.21896391586,1.0,0.994298826688,1.0,0.0,0.287479675015,0.0 465 | 463,1.0,0.331009803793,0.196051585273,0.158178368132,1.0,0.25473113738,0.0,0.0,0.159846049713,1.0 466 | 464,0.0,1.70610720278,1.30734561671,-1.43531233178,1.0,-0.128877378689,0.0,0.0,-1.26705710207,0.0 467 | 465,0.0,-0.179310645253,-0.24775241824,0.684163208609,0.0,-0.509093805312,1.0,0.0,-0.206085373039,0.0 468 | 466,0.0,-0.0382817189613,1.32041400978,-0.814756002824,0.0,0.485359907553,0.0,0.0,0.182615783665,1.0 469 | 467,1.0,0.35636025269,0.12556435166,1.17615045189,1.0,-0.84910485099,0.0,1.0,-1.12440349574,0.0 470 | 468,0.0,-0.0397679693615,0.627606297562,-1.24982033959,0.0,0.305665568643,0.0,1.0,-1.75175591679,2.0 471 | 469,1.0,1.80926952352,0.720492536703,0.73476245953,1.0,-0.731254568813,3.0,0.0,1.12883274694,1.0 472 | 470,0.0,-0.0399899062131,-0.15830547801,0.0337190549011,0.0,-0.897659385275,0.0,0.0,0.0508385266098,0.0 473 | 471,1.0,0.872087446442,0.816146106841,1.26859358104,1.0,-0.637487434825,1.0,0.0,0.209979280758,0.0 474 | 472,1.0,-0.00448930301225,-0.845673104494,-1.11482218735,1.0,-0.375407446484,1.0,0.0,0.555626822795,2.0 475 | 473,1.0,1.42343994986,0.985901034093,2.19691094876,1.0,-0.0488298359337,1.0,0.0,-0.982166950485,0.0 476 | 474,1.0,-0.014607069468,0.937351777878,0.403105215268,1.0,0.235455795111,1.0,0.0,-0.403495794063,3.0 477 | 475,1.0,1.82127730773,1.24124024841,-0.674469460453,1.0,-3.68836529143,1.0,0.0,1.50406760452,0.0 478 | 476,0.0,-0.117617333655,0.0845051456929,-0.109023419963,0.0,-0.807650557747,2.0,0.0,-0.488655396612,2.0 479 | 477,1.0,0.110760039075,1.79799454961,1.03437530903,1.0,-0.391569977356,0.0,0.0,-0.265855295447,1.0 480 | 478,1.0,1.06963838635,1.92350861605,1.16058943317,1.0,1.50506203861,1.0,0.0,-0.669488165002,1.0 481 | 479,1.0,0.414597829643,-0.0506233218278,2.36213240369,2.0,-1.08000260838,1.0,1.0,-0.740854226481,0.0 482 | 480,1.0,1.68361916412,1.86877250059,0.763551163264,1.0,0.1627966181,1.0,1.0,1.10548135234,1.0 483 | 481,1.0,0.871636283463,-0.18633642711,0.880380375631,2.0,1.49503030974,1.0,0.0,-2.47668155603,3.0 484 | 482,1.0,0.103608765105,0.587855888138,-1.10318438123,0.0,-1.31296852995,0.0,0.0,-0.457013819852,1.0 485 | 483,1.0,0.131695589303,1.6197387847,1.82055350289,1.0,0.393975225864,0.0,0.0,0.22541014263,2.0 486 | 484,1.0,0.146371553337,-0.911316891663,1.18430906408,1.0,-0.802271833935,1.0,0.0,1.69679109874,0.0 487 | 485,1.0,0.260082419726,1.09297924653,0.579972272706,1.0,-0.504633742289,1.0,0.0,-1.13522535589,3.0 488 | 486,0.0,0.123765375751,-0.46849611336,-1.90467469347,0.0,-0.803110833953,0.0,0.0,-1.30567134704,1.0 489 | 487,0.0,0.0379767636041,-0.758765257935,1.44441219506,0.0,-0.731857308416,1.0,1.0,-0.860100321328,2.0 490 | 488,1.0,2.1219756576,2.3508523307,-0.227679964456,1.0,2.72191214791,4.0,0.0,0.70170539679,0.0 491 | 489,1.0,0.128014439862,0.346320859363,0.40872199063,1.0,0.844455872072,0.0,1.0,0.125285463279,1.0 492 | 490,0.0,-0.0614323144096,-0.806376929118,0.358344511076,0.0,1.10173786179,2.0,0.0,-1.44263567101,2.0 493 | 491,1.0,1.4456636502,1.07569494001,-0.196557928617,1.0,0.491993486836,0.0,0.0,0.0995575976,2.0 494 | 492,0.0,0.0978889558557,0.685589746298,-1.49350977825,1.0,-1.6062567884,0.0,0.0,1.55143776589,0.0 495 | 493,0.0,-0.137174312926,-0.14164858601,-2.1239475827,0.0,0.394957970323,1.0,0.0,0.264480401073,3.0 496 | 494,0.0,0.160878085573,1.16637054567,0.720996952906,0.0,1.07292961451,1.0,0.0,0.164557890629,0.0 497 | 495,0.0,0.0828229690185,0.530975661964,-0.545186244726,0.0,-0.853399474039,1.0,0.0,0.224742119582,0.0 498 | 496,1.0,0.697952993799,-1.17821131973,3.92727009247,1.0,0.965326667161,1.0,0.0,0.414502720563,0.0 499 | 497,0.0,-0.0462939512025,-0.529466963507,-0.994355065631,0.0,0.704336209854,2.0,0.0,-1.2671015614,1.0 500 | 498,1.0,0.592881188768,0.438157900648,0.0785489765711,1.0,1.85204004481,1.0,0.0,-0.231924002114,1.0 501 | 499,1.0,0.395807521697,1.47936095343,0.434607029715,1.0,-0.417783012514,0.0,1.0,-0.179756133076,2.0 502 | 500,1.0,0.495802554218,-1.62481705637,1.24313465514,1.0,-1.09761098228,1.0,0.0,-0.483469019978,1.0 503 | 501,1.0,0.882699396545,3.54900970872,0.529796661215,2.0,-0.361628109373,1.0,0.0,0.686121608774,0.0 504 | 502,0.0,0.129606306178,0.531026094894,0.612332214003,0.0,1.43557099316,1.0,0.0,-0.633993463257,1.0 505 | 503,1.0,0.109825745334,1.14887680392,0.0214116100113,2.0,-1.82840588084,0.0,1.0,-0.359968421424,2.0 506 | 504,1.0,1.18140855861,2.18156771642,-0.381591718464,1.0,-2.06837571543,2.0,0.0,-1.26017268065,0.0 507 | 505,0.0,-0.0151299220233,2.34365405281,-1.79821473941,1.0,0.0893952789316,0.0,0.0,0.378310559641,1.0 508 | 506,1.0,0.578339970528,1.87074664459,-1.22357416794,1.0,-0.442589292774,1.0,0.0,0.941902961761,2.0 509 | 507,1.0,0.289659549356,1.94881309647,0.481930980525,1.0,0.00772789317568,0.0,0.0,-0.361020517602,3.0 510 | 508,1.0,1.10732617519,1.13069002446,0.699019687607,2.0,0.945311771236,0.0,0.0,0.807390410654,2.0 511 | 509,1.0,0.174568595836,0.858474246633,0.368562972517,2.0,-0.552569346119,2.0,1.0,-0.146956775437,1.0 512 | 510,1.0,0.486019357416,0.524204555995,2.24340579719,1.0,-1.87300583093,0.0,1.0,-2.52744937006,0.0 513 | 511,0.0,-0.078933850572,-0.826111991715,1.22803020961,0.0,2.0444815572,3.0,0.0,-0.0515153347045,4.0 514 | 512,0.0,1.10158765129,0.312985900301,0.665197012555,1.0,-0.997228287439,1.0,0.0,-0.175571209184,0.0 515 | 513,1.0,0.659798552586,-0.350555964343,-0.793921113192,1.0,-1.05903712201,1.0,0.0,0.102995599762,1.0 516 | 514,0.0,-0.0371857882279,-0.075871450685,-0.566705108055,0.0,1.10372001372,1.0,0.0,0.253185435141,1.0 517 | 515,1.0,-0.072846162168,-1.68466757723,-0.599821393917,0.0,-0.384489121042,1.0,1.0,-0.683921525349,0.0 518 | 516,0.0,0.0319524670783,0.190916524144,-0.657134962278,1.0,-0.0633898520348,2.0,0.0,1.47131497776,0.0 519 | 517,1.0,1.05204264913,0.963669391958,0.302281096102,1.0,0.48279012406,1.0,0.0,-0.0661615538056,2.0 520 | 518,1.0,0.54880605963,1.14693529839,0.346537104275,1.0,1.08358310311,2.0,0.0,-0.199663674186,1.0 521 | 519,0.0,0.0996118214911,-0.52213157002,-0.386541615898,0.0,-0.333460693182,1.0,1.0,0.744529608301,0.0 522 | 520,1.0,0.498285554513,4.07686037018,0.364458901184,1.0,1.51995200591,0.0,0.0,0.018539945289,0.0 523 | 521,0.0,0.0157761439294,1.36011590018,0.208322508626,0.0,-2.13579984873,1.0,0.0,2.56584165924,1.0 524 | 522,1.0,1.9772901867,-0.244542500085,1.3603687159,1.0,0.759787236953,2.0,0.0,-0.209907791108,0.0 525 | 523,1.0,0.436925237904,1.23286808743,0.0893549128175,1.0,-0.839527558018,1.0,0.0,0.351815450914,1.0 526 | 524,1.0,-0.042878207875,0.391993857063,2.27106532601,2.0,1.37227131661,2.0,1.0,-0.749152654867,0.0 527 | 525,0.0,0.119189933441,-1.01447972671,-0.980062301841,0.0,0.142044478831,0.0,0.0,0.870535543038,1.0 528 | 526,0.0,0.095001582867,-1.34007207112,-1.61780061382,0.0,-0.672905332009,0.0,0.0,0.308718394194,0.0 529 | 527,1.0,0.0243004722054,0.432216690759,0.380778071365,0.0,0.662841093022,2.0,0.0,-0.338968050823,1.0 530 | 528,0.0,-0.153270055989,-0.68138023507,-0.817408134414,1.0,0.893188347207,0.0,1.0,-0.872438098602,1.0 531 | 529,1.0,0.167700953268,1.96782602403,1.32129147076,1.0,0.641894122859,2.0,0.0,-1.3094222996,1.0 532 | 530,1.0,2.26840123422,1.99378221453,-1.4036686011,1.0,-1.02969623963,1.0,0.0,0.418714558876,1.0 533 | 531,1.0,2.13825377559,2.37391438521,2.39245594148,1.0,-0.484017123622,2.0,0.0,-1.38687947053,1.0 534 | 532,1.0,0.422485819509,0.147613233926,1.67229340804,2.0,-0.00407283712144,2.0,0.0,1.3084741692,0.0 535 | 533,1.0,0.368654801252,1.47536561069,-0.500476549163,1.0,-0.0412596526501,1.0,1.0,-1.26284524977,1.0 536 | 534,1.0,2.74109706631,1.63245421664,-0.478777123846,1.0,0.749745475438,1.0,1.0,-0.178374919608,1.0 537 | 535,1.0,0.553359267103,0.525821824896,2.6722659041,2.0,-2.01490123251,1.0,0.0,-0.881541272074,1.0 538 | 536,1.0,0.306635074407,0.228228042607,0.262620096502,1.0,0.334327054554,0.0,0.0,0.0326862344386,1.0 539 | 537,0.0,-0.016212397548,1.60952066578,-0.834184848733,0.0,-0.289981354437,1.0,1.0,0.0265071793753,3.0 540 | 538,0.0,0.0143048769879,0.227495875732,-2.26605209415,0.0,-0.838500616384,1.0,0.0,0.44480299802,1.0 541 | 539,0.0,0.0849611988516,0.635967750712,-0.350778205602,0.0,-0.74248677777,2.0,0.0,-1.52627899383,0.0 542 | 540,1.0,0.210542898511,0.177923988172,0.772280385164,1.0,-0.214537664518,0.0,0.0,-0.763702659179,1.0 543 | 541,1.0,2.18882361169,-0.219284466522,1.71549309677,1.0,-3.60108510446,3.0,0.0,0.970547451152,1.0 544 | 542,0.0,-0.0799940506702,-0.569449774492,-1.39907842818,0.0,-0.701289570792,0.0,0.0,0.658551602004,3.0 545 | 543,1.0,0.024596291744,0.87597861261,-0.520286792241,1.0,-0.875814824646,1.0,1.0,-2.49948252828,2.0 546 | 544,0.0,0.468963363968,-0.0642200068173,1.45096263478,2.0,0.532783209323,1.0,1.0,0.377229586595,0.0 547 | 545,0.0,0.100163182521,-0.00984480865038,1.00673007123,0.0,-0.805526682511,2.0,0.0,-1.03246497597,0.0 548 | 546,0.0,0.139345452752,-1.68850518807,-1.57115235112,0.0,-0.21511380017,2.0,0.0,-0.591822876705,2.0 549 | 547,1.0,1.79575155999,-0.12004742247,2.0815140863,1.0,1.54227662766,3.0,0.0,-0.227327587314,1.0 550 | 548,1.0,0.330381601681,1.67091124828,1.03754184149,1.0,0.994351519815,1.0,0.0,1.55739015765,2.0 551 | 549,1.0,0.325292869242,1.60379052028,2.09180533907,1.0,0.902271399943,1.0,0.0,-1.04269740918,0.0 552 | 550,0.0,-0.0100996293748,0.608123234613,0.929779638482,1.0,-0.499872430411,2.0,0.0,-1.4038933514,0.0 553 | 551,1.0,0.411230304043,-0.017764309077,-1.52227791749,2.0,0.54303227929,0.0,1.0,0.450318826781,0.0 554 | 552,1.0,0.736739880821,-0.027403551526,0.848032617684,1.0,-0.233897800454,1.0,1.0,-0.028017622334,0.0 555 | 553,1.0,0.235252934994,0.626731754059,2.06014381867,2.0,-0.196093210677,1.0,0.0,1.20700323875,1.0 556 | 554,1.0,1.67865157574,1.64451849165,0.106253980916,3.0,0.409685343747,2.0,0.0,-0.352833905851,0.0 557 | 555,1.0,-0.0322028154492,0.928245691344,-0.387964968907,0.0,-0.596993588421,1.0,0.0,1.21081725919,0.0 558 | 556,0.0,0.13254321091,-0.496531735482,-0.176133503551,0.0,1.49300310444,2.0,1.0,0.0162685977183,2.0 559 | 557,0.0,-0.14068150095,-1.15349242598,-2.89951387987,1.0,-0.160130139598,0.0,0.0,0.529115108564,0.0 560 | 558,1.0,0.508603278112,1.26784363787,2.67134757544,2.0,0.61836056626,1.0,0.0,1.62394348702,1.0 561 | 559,0.0,1.18347220327,0.176465029374,0.0986243201028,1.0,1.45560047926,1.0,0.0,-0.167247904739,0.0 562 | 560,1.0,0.393808367824,0.481747361139,1.50573543247,1.0,1.03165377458,0.0,1.0,1.04466623568,4.0 563 | 561,0.0,0.0218534042411,1.32527609044,-0.0867011361482,0.0,-1.40891910269,1.0,1.0,-0.613598571738,0.0 564 | 562,0.0,0.10094717886,0.827115428566,1.25761905636,2.0,0.44489589501,1.0,0.0,0.227538953896,1.0 565 | 563,0.0,-0.0844941438593,0.157974312251,0.406056122428,0.0,0.850719394461,0.0,1.0,-1.44465917168,1.0 566 | 564,0.0,-0.149901596046,-1.27191900111,-0.234924271521,0.0,0.891863022161,2.0,0.0,-0.504319968979,1.0 567 | 565,1.0,1.83942435686,1.21139656747,0.106484907481,2.0,-1.11329483411,0.0,0.0,-1.05803525886,1.0 568 | 566,0.0,-0.00874353287772,1.06265729079,0.797850701382,0.0,-0.657035237017,2.0,1.0,1.22075260325,0.0 569 | 567,0.0,0.0548319627554,-0.375633665766,-1.87344130395,0.0,0.994558235742,2.0,1.0,1.73879836095,0.0 570 | 568,1.0,0.193026996675,2.35111408999,1.64589042028,1.0,-0.761760370683,1.0,0.0,-0.354701944332,2.0 571 | 569,1.0,-0.00594151812725,1.29274528952,-1.09904475155,1.0,-0.299696056664,0.0,0.0,-0.773038182401,0.0 572 | 570,1.0,0.904382719088,2.66373283214,2.25228366196,1.0,1.5758758095,1.0,1.0,-1.31394449671,1.0 573 | 571,1.0,0.767428787331,1.30524312653,1.16129954266,1.0,-0.0477992503848,1.0,1.0,0.264541376102,0.0 574 | 572,0.0,-0.0346426506007,0.587391699806,0.64412376785,0.0,-0.726774137834,2.0,1.0,-0.602286354668,0.0 575 | 573,1.0,-0.0969685588018,2.41418728833,1.08198881382,1.0,-0.877617356863,1.0,0.0,-0.548716341348,1.0 576 | 574,1.0,0.0654865324168,1.44739393707,-0.752377095141,1.0,0.332719329585,1.0,1.0,1.62958861743,0.0 577 | 575,1.0,0.218601701886,0.49876589221,0.139270836605,1.0,-1.33314800848,0.0,1.0,-0.296398651546,1.0 578 | 576,1.0,0.0960304796281,-0.448542836528,0.672389337611,0.0,-0.247335963896,1.0,0.0,0.586649570339,1.0 579 | 577,1.0,0.260961545577,1.23855495377,1.16665581736,1.0,0.33323053499,1.0,1.0,0.0529610899146,1.0 580 | 578,0.0,-0.117936912163,-1.29056142195,1.18098990531,0.0,1.29914982055,2.0,0.0,-1.35520540734,0.0 581 | 579,0.0,0.0172254386411,-0.143258915364,0.403274563037,0.0,0.66754808037,3.0,0.0,-1.84488037284,2.0 582 | 580,0.0,0.0671531171729,1.09654711823,-0.966701890703,0.0,-0.714065117982,0.0,0.0,0.487522058696,0.0 583 | 581,1.0,0.608342661963,-1.19125385117,0.203935862279,1.0,1.17841931756,0.0,0.0,1.70411052087,0.0 584 | 582,0.0,0.0887503967414,1.53448210179,0.102917390523,1.0,-0.299515037547,0.0,0.0,0.314987535421,2.0 585 | 583,0.0,0.0760846654311,1.1223742187,-2.314044066,0.0,-1.23570302205,2.0,1.0,0.624090183184,3.0 586 | 584,0.0,0.882055391991,0.54023538417,2.67344188562,1.0,-0.172041359265,2.0,0.0,-0.904706305585,0.0 587 | 585,0.0,0.0388312005423,0.543390827872,0.441746736378,0.0,1.43816920115,0.0,0.0,1.01489434206,0.0 588 | 586,0.0,0.124950490071,0.00314772690633,1.22703459705,0.0,0.165240050065,3.0,1.0,1.00250445488,3.0 589 | 587,0.0,-0.133277739748,1.22999036844,-1.58060394081,0.0,0.0125218643298,0.0,0.0,-0.696198472304,0.0 590 | 588,0.0,-0.0349439327217,0.98268314277,1.24456516036,0.0,1.6372116447,0.0,0.0,0.545408773833,0.0 591 | 589,0.0,-0.0772568748756,-1.40007072318,2.23149891103,0.0,-1.43135484705,2.0,0.0,-1.76641785067,1.0 592 | 590,0.0,0.0379153118726,0.587262413464,-1.32087835538,0.0,-1.28559911405,2.0,0.0,0.723911966759,0.0 593 | 591,0.0,0.589517596793,0.794372146357,1.7714017949,1.0,-1.61584647097,1.0,0.0,-0.57241758578,1.0 594 | 592,0.0,-0.0596974286721,0.0828325705181,0.00110994468729,0.0,0.37264818648,1.0,1.0,-1.22712913691,1.0 595 | 593,0.0,-0.239030436747,-0.72817190097,-1.54443384825,0.0,0.166493127115,1.0,0.0,0.402639956992,3.0 596 | 594,1.0,0.282834953719,2.74813706912,1.49288397185,1.0,1.54273636728,2.0,1.0,-1.77172996512,4.0 597 | 595,0.0,0.0913473732017,1.0400618199,0.833603204837,0.0,0.243475077137,2.0,0.0,0.342413580768,0.0 598 | 596,1.0,0.138972439929,0.260228836027,0.398873447331,1.0,-0.404157159479,2.0,0.0,-1.13227912954,0.0 599 | 597,0.0,0.0428186247811,-1.33461060691,1.16591652026,0.0,0.00179487287811,1.0,0.0,-1.34627612323,2.0 600 | 598,0.0,-0.0279993301874,-0.385672630978,-1.66676340679,0.0,0.117707418461,3.0,1.0,0.0598529613797,0.0 601 | 599,0.0,-0.127903073622,0.434502646091,-1.49475614645,0.0,-1.67176127333,3.0,0.0,-0.172551257515,1.0 602 | 600,0.0,0.0515294321624,0.240205843946,0.136597395589,0.0,2.71033164433,3.0,0.0,1.45678945109,1.0 603 | 601,0.0,-0.0834281810035,1.25313282477,0.0253852779723,1.0,0.519871018102,1.0,0.0,-1.28480125012,1.0 604 | 602,0.0,0.218409673338,0.789919722181,-0.716573488424,0.0,0.210008308023,0.0,0.0,1.37505449116,0.0 605 | 603,0.0,0.0570507208355,0.969569025753,0.809594435972,0.0,0.615163984279,2.0,0.0,-1.13764460427,2.0 606 | 604,0.0,-0.0580648302554,0.32685540061,0.530894314216,0.0,0.709410980587,0.0,0.0,0.919442416425,1.0 607 | 605,0.0,-0.0611385247389,-1.38929873021,0.858139070934,0.0,-0.140553485502,0.0,0.0,1.10609252285,2.0 608 | 606,0.0,-0.00929442066136,-0.195698531147,-0.123136435352,0.0,-0.631241136241,1.0,1.0,0.321458785891,1.0 609 | 607,0.0,-0.0239501922022,1.06008973991,0.602580267978,0.0,0.599450686322,1.0,0.0,-0.790953880538,3.0 610 | 608,1.0,1.24730352474,0.948477071475,0.55434969697,1.0,0.385710840531,1.0,0.0,-1.52295447196,0.0 611 | 609,1.0,1.12493512939,1.50309036862,3.05381869009,1.0,-0.809890099089,0.0,0.0,-1.9517764836,0.0 612 | 610,0.0,-0.0731631738909,-0.318748315246,-0.812545770122,0.0,1.41903561137,1.0,0.0,1.85229095407,1.0 613 | 611,1.0,0.797633791755,-0.0298118485418,3.10529742946,2.0,0.293352036323,3.0,1.0,-0.296854893732,2.0 614 | 612,1.0,0.533908541216,0.876655935954,1.03488794709,2.0,0.729819362268,0.0,0.0,-1.10466754773,0.0 615 | 613,0.0,0.0768839675969,0.309047443033,-1.37551088957,0.0,1.39192088768,0.0,0.0,-1.14316060604,0.0 616 | 614,1.0,1.16226041635,0.344312280539,2.36807935049,1.0,0.0218888211648,3.0,1.0,0.167862393607,0.0 617 | 615,1.0,0.295165963144,0.764288755143,1.12590138839,1.0,0.316952006984,1.0,0.0,-0.394852103604,0.0 618 | 616,0.0,0.0311109991143,-0.939463241986,0.85112409838,0.0,0.810027238506,2.0,0.0,-1.91929257886,1.0 619 | 617,0.0,-0.18896492921,1.11924491756,1.22385591854,0.0,-0.7248610838,1.0,0.0,0.864540669463,0.0 620 | 618,1.0,2.02213081159,0.705544242412,1.33795555415,1.0,0.054051662846,0.0,1.0,0.334983555498,1.0 621 | 619,1.0,0.399121804484,2.45275554513,0.407759155187,1.0,0.125548586651,2.0,1.0,1.83991099917,1.0 622 | 620,0.0,-0.0397195316146,1.52874785054,0.975713377669,0.0,-0.956058551683,0.0,1.0,1.14079144755,2.0 623 | 621,0.0,-0.110226974046,-0.0810459647217,0.000755507454596,0.0,2.31763678867,0.0,0.0,-3.09814715452,2.0 624 | 622,0.0,0.0347561613804,-1.00844873255,0.685857818608,0.0,-1.40729344349,1.0,1.0,1.41697397384,0.0 625 | 623,0.0,0.00866976994144,-2.08589787773,-2.15373057379,0.0,-1.29810390369,3.0,0.0,1.20749124927,1.0 626 | 624,1.0,0.946929617031,-0.472037073027,1.44698171701,1.0,1.3142265757,1.0,0.0,-0.736372752356,1.0 627 | 625,1.0,0.0191577396194,-1.3738348249,-0.638585825145,0.0,0.713266250797,0.0,1.0,-0.432575757123,0.0 628 | 626,0.0,0.0506240989306,1.37846962746,1.65330963718,0.0,-1.02596481748,0.0,0.0,0.411725107241,0.0 629 | 627,1.0,0.991046547405,1.11582458723,1.62308734789,1.0,0.607289015102,1.0,0.0,-1.0142150088,0.0 630 | 628,0.0,0.0568103205129,0.389604524092,0.239857745849,0.0,1.467850445,0.0,0.0,-0.242728868213,0.0 631 | 629,0.0,-0.104965549891,-2.22042100894,0.48630999335,0.0,-0.030263057597,0.0,0.0,1.00003744583,0.0 632 | 630,1.0,0.400276366605,-0.197966429217,0.00155914712328,1.0,2.59882290007,1.0,1.0,0.51772790869,0.0 633 | 631,1.0,1.43641495646,1.88707977645,2.62325669053,1.0,-1.72406181087,1.0,0.0,-0.666784763962,0.0 634 | 632,1.0,1.04769777623,1.28677411238,2.99137041842,1.0,0.693823453859,0.0,0.0,1.02276055664,1.0 635 | 633,1.0,0.176374259501,0.852794721314,1.39291351055,1.0,1.16652833622,1.0,0.0,0.302895262543,0.0 636 | 634,0.0,0.024288201315,0.5648423586,1.59040356857,0.0,0.891343901605,1.0,1.0,0.268705452947,0.0 637 | 635,0.0,-0.208209870319,1.63579780614,-0.569148198673,0.0,-0.204355726646,0.0,1.0,-0.514932362981,3.0 638 | 636,1.0,0.178023849234,0.778957536463,0.202886433775,1.0,-0.290441482011,0.0,0.0,-0.00653854366886,1.0 639 | 637,0.0,-0.0548200298167,0.0693698026581,0.0409247487289,0.0,0.444145171087,0.0,1.0,-0.77409148162,0.0 640 | 638,0.0,0.192344579482,0.192596918731,0.434941038368,1.0,0.815754486652,0.0,1.0,-1.9405515847,3.0 641 | 639,0.0,-0.0774614970019,2.39210963527,-0.393986681243,0.0,0.602473436282,2.0,0.0,-0.279792165699,1.0 642 | 640,0.0,-0.168918303797,-2.09935626442,0.537768190368,0.0,1.04005789079,2.0,0.0,-0.122152246095,1.0 643 | 641,0.0,-0.0471263740703,0.683223014789,0.306389482073,0.0,-1.01886995707,2.0,0.0,0.137288779488,1.0 644 | 642,0.0,-0.197548777122,-0.114802248759,-0.998306775291,1.0,-0.227770979124,1.0,1.0,1.21215459837,1.0 645 | 643,0.0,0.0751099454507,0.566771726184,0.518793017452,1.0,-0.940015932124,1.0,0.0,-0.652284844727,1.0 646 | 644,0.0,-0.206508304626,-0.657372553995,0.863528242522,0.0,-0.386112776086,2.0,0.0,-0.367752003515,0.0 647 | 645,1.0,0.0803262766372,0.951034969142,1.17146931759,1.0,1.01522089181,1.0,0.0,0.766177597621,1.0 648 | 646,1.0,0.0499713581571,1.71141057947,2.15264810326,1.0,0.107983920725,0.0,1.0,-0.752522114582,1.0 649 | 647,1.0,1.20973079503,4.11291020104,-0.217403793497,1.0,2.60685916315,0.0,0.0,0.153749528808,1.0 650 | 648,1.0,0.498514232825,1.8080361894,1.46795042213,1.0,0.19340636719,0.0,1.0,-0.408282013564,0.0 651 | 649,0.0,0.0360647891436,-0.848065598031,-1.1702807064,0.0,0.0596918805797,1.0,1.0,-0.243624382711,2.0 652 | 650,0.0,-0.0863493604965,-0.423759682023,-1.11408135823,0.0,0.10618291944,1.0,0.0,0.758144889211,1.0 653 | 651,1.0,0.857264661886,0.546585891616,0.369069166262,1.0,-0.63780869286,1.0,0.0,-0.37345305598,0.0 654 | 652,1.0,0.415407220626,-0.79564317263,0.0579398164258,1.0,-0.0578366123776,0.0,0.0,0.79074400724,1.0 655 | 653,1.0,1.93495069192,0.669909808299,0.452004181259,1.0,1.12778802711,4.0,1.0,-1.95243310821,1.0 656 | 654,0.0,-0.136685836328,0.732829081822,-0.214150310711,0.0,0.113970668128,0.0,0.0,-1.42961467392,2.0 657 | 655,0.0,0.0592567273847,-1.27423211908,0.837154486331,0.0,-0.793459729883,4.0,0.0,-2.31820009075,0.0 658 | 656,0.0,-0.27043916316,1.04848265105,-0.321159038706,1.0,-0.925084620479,0.0,0.0,-1.16577061717,0.0 659 | 657,0.0,-0.0629884552364,0.487774821084,-1.58562570677,1.0,-0.450201891666,2.0,0.0,1.85684366285,0.0 660 | 658,1.0,1.03386366964,0.265766678029,2.1400678465,1.0,0.0738634344109,0.0,1.0,-0.0175359086835,2.0 661 | 659,1.0,0.534457334425,0.858470362662,0.162909866385,1.0,1.19358653548,0.0,0.0,-0.721302750457,1.0 662 | 660,0.0,0.00226308526769,1.59832180764,-0.0587204271046,1.0,-1.34048864137,0.0,1.0,0.782806824992,2.0 663 | 661,1.0,1.18524034216,1.73354781351,1.44653650694,1.0,-0.319826277889,0.0,0.0,0.924011057257,0.0 664 | 662,0.0,1.188664256,1.0087836549,1.1996104184,1.0,0.144310019435,1.0,0.0,-1.22084781406,1.0 665 | 663,0.0,0.0198680009547,-0.237683316961,1.09417954752,0.0,-1.83370576763,0.0,1.0,2.49820011797,1.0 666 | 664,0.0,-0.00790673418646,0.0766090704517,0.479003143393,0.0,-0.833598282966,0.0,0.0,0.276330843001,1.0 667 | 665,0.0,-0.0579124109636,-0.511763557942,-0.861309579697,0.0,-0.679888539736,1.0,1.0,0.402351988454,1.0 668 | 666,0.0,-0.0480833789512,-2.10474950572,2.17856217399,1.0,-0.79597037385,0.0,0.0,0.497233151358,2.0 669 | 667,0.0,0.0696167997159,2.04217791053,0.194333463338,0.0,0.191889545022,0.0,0.0,0.495137870046,2.0 670 | 668,0.0,-0.0517692572869,0.155324999199,-0.147340226622,0.0,-0.160559609502,0.0,0.0,-0.621473404714,0.0 671 | 669,0.0,-0.00880912440291,0.398147265123,0.963925423056,0.0,-0.555286102601,1.0,1.0,2.11251929096,0.0 672 | 670,0.0,0.216993658808,-0.0579077498769,0.24945094593,0.0,0.427962626553,2.0,1.0,-0.285188446744,3.0 673 | 671,1.0,0.320793098397,0.264883199275,1.39922819294,1.0,1.72307471765,1.0,0.0,0.957517777643,1.0 674 | 672,0.0,-0.185184273157,-0.185924480949,2.4921839986,0.0,1.63925651674,1.0,0.0,-0.474934622221,1.0 675 | 673,1.0,1.23225970074,-0.599394762194,0.724878571745,1.0,-1.92277177206,3.0,0.0,-0.652266503103,2.0 676 | 674,0.0,-0.0678643061294,2.27708649805,-0.317760894017,0.0,0.577072183835,0.0,0.0,1.90186461325,2.0 677 | 675,1.0,0.356697022409,-0.234511998422,1.11657851201,1.0,-0.178023290064,3.0,1.0,-0.108371036619,1.0 678 | 676,0.0,-0.0781156378131,-1.03196628385,1.07151593558,0.0,0.155155342865,0.0,0.0,-0.0341072009895,2.0 679 | 677,0.0,-0.0259800140768,-0.440259204386,-1.50653403019,1.0,-0.398283033543,1.0,1.0,0.283617205505,1.0 680 | 678,1.0,0.669660504401,2.28807572485,-0.965555891477,1.0,0.117588629887,0.0,0.0,2.60177047132,0.0 681 | 679,1.0,0.114653857568,1.01450899926,0.41288472938,1.0,0.151407396072,0.0,1.0,2.16876116792,1.0 682 | 680,1.0,2.5745497046,-0.23613579603,-0.633922959059,1.0,-0.578951757349,3.0,0.0,1.28378260833,1.0 683 | 681,0.0,-0.141622705579,1.25433836076,-0.424831347526,0.0,-0.896367547825,2.0,0.0,2.85362258274,1.0 684 | 682,0.0,-0.115115373655,0.731000626785,0.502499696129,0.0,-0.448695682619,1.0,1.0,-0.944576719921,1.0 685 | 683,1.0,0.698386168306,1.53843495722,0.109251136448,1.0,0.234259264457,0.0,0.0,0.655883990691,0.0 686 | 684,1.0,-0.0219538605187,1.71573424117,-0.426826576781,1.0,0.598996341684,1.0,1.0,0.0758229309804,0.0 687 | 685,1.0,0.542542819441,3.39436190058,1.06933716172,1.0,0.85334897734,1.0,1.0,-1.76908773204,2.0 688 | 686,0.0,0.394243852433,3.18509489504,1.86254348462,1.0,-0.494190023067,0.0,0.0,0.463096930664,5.0 689 | 687,0.0,-0.0221513262952,-0.686715343003,-1.69497343852,0.0,0.283844567303,0.0,0.0,-0.490826479914,1.0 690 | 688,1.0,0.960502536913,2.62388499281,1.82023239831,1.0,0.962502591953,2.0,0.0,1.53350084098,1.0 691 | 689,0.0,-0.0688885542575,0.383168189759,0.817306203738,0.0,1.16559489514,1.0,0.0,-0.395021864438,1.0 692 | 690,0.0,0.0204758882402,0.499095816138,0.954085102157,0.0,-0.0588328541315,0.0,0.0,-0.451891969223,1.0 693 | 691,0.0,0.0765878279481,-1.69227083164,1.21848021487,0.0,-0.22093172494,1.0,0.0,1.53306882585,2.0 694 | 692,1.0,0.424942590823,0.829614234612,3.20201392466,1.0,0.191124233836,0.0,0.0,-0.0654539784222,1.0 695 | 693,0.0,0.0299647687837,-0.812823590337,-0.356092048619,0.0,-1.1497074729,1.0,0.0,1.16287769375,2.0 696 | 694,1.0,0.0932434870955,0.828058814893,0.109571580078,0.0,-0.193609511036,0.0,0.0,0.424359439923,2.0 697 | 695,1.0,2.00843124968,2.0710805004,0.583561566752,1.0,0.744586398473,1.0,0.0,0.437771461303,0.0 698 | 696,0.0,0.0700700612121,-2.07448635102,0.00197684475581,1.0,0.641947129444,2.0,0.0,-0.24404737288,1.0 699 | 697,1.0,0.617720183128,0.977965135996,2.53287335564,2.0,-0.270267604364,1.0,0.0,0.502210045707,1.0 700 | 698,0.0,-0.0104342792987,1.12186150479,-1.34501448393,0.0,0.217718201087,0.0,0.0,-0.131491811989,2.0 701 | 699,0.0,0.0393307050005,-0.186678962313,-0.861049672166,0.0,-0.824650340291,1.0,0.0,-0.803803447656,2.0 702 | 700,0.0,1.29786798886,1.729063645,2.3771809365,1.0,0.703492148225,2.0,0.0,-0.104254315316,1.0 703 | 701,1.0,0.0181251162602,0.351165467627,1.0200365069,0.0,-0.0778214361365,0.0,0.0,1.28783078868,3.0 704 | 702,0.0,0.0460271624982,0.341660231953,-0.363131646817,0.0,-0.275951451696,0.0,1.0,0.536009225591,2.0 705 | 703,0.0,0.019484234027,-0.271314978068,0.854402001121,0.0,-0.361723836093,0.0,0.0,0.768440731327,0.0 706 | 704,0.0,-0.101969531971,-1.21658080414,0.341215842492,0.0,-0.0628938668999,0.0,0.0,0.00146737144211,0.0 707 | 705,1.0,0.877408270959,-0.121530147425,2.500274609,2.0,-0.447877644932,2.0,1.0,-1.93779015618,0.0 708 | 706,0.0,0.146219593872,0.709352514455,0.0745095938268,0.0,0.658143036003,0.0,1.0,-1.22142849842,0.0 709 | 707,1.0,0.249252608054,1.01945825552,2.02563211387,1.0,-0.395283548016,1.0,0.0,-0.289005553544,0.0 710 | 708,0.0,0.0961987189072,-0.138512244607,2.64201191049,0.0,1.59296409603,3.0,0.0,-1.13506234552,1.0 711 | 709,1.0,0.371979514755,0.576109957678,1.59809915505,1.0,1.46521050348,1.0,0.0,-0.524357562591,0.0 712 | 710,1.0,0.392443285193,0.694811154519,1.04932816579,1.0,-0.891543489855,1.0,0.0,-0.560554569714,0.0 713 | 711,1.0,0.360787188204,2.04691179449,1.72244698522,1.0,0.0697042694293,1.0,1.0,-0.530408740128,0.0 714 | 712,0.0,-0.0950910729687,-0.335244081868,-0.365280858204,0.0,-0.650656621336,0.0,0.0,1.4371698553,0.0 715 | 713,0.0,0.0318521004799,-1.3410647133,2.38796770552,0.0,-0.326647563189,0.0,1.0,-0.0529782749295,4.0 716 | 714,0.0,-0.099169666344,0.74365177554,0.180071037696,0.0,2.00242746764,0.0,0.0,0.934670158101,0.0 717 | 715,0.0,0.258305183851,0.795123336135,0.727066679774,1.0,-0.307571417116,0.0,1.0,0.163944944558,0.0 718 | 716,1.0,1.77386590238,1.03139586553,0.16431099498,2.0,0.360226037077,0.0,0.0,1.41574660766,1.0 719 | 717,1.0,0.0481260581215,2.6075783064,2.09722019161,1.0,0.541321294008,0.0,0.0,1.02097960515,1.0 720 | 718,0.0,-0.118923246508,-0.0205605573505,0.867187412828,1.0,-1.00062937248,0.0,0.0,-0.591515869671,0.0 721 | 719,1.0,0.798121332235,1.28918367312,0.502645628586,1.0,-0.855095474409,0.0,0.0,1.9616294733,3.0 722 | 720,1.0,1.32653112438,-0.178923491298,1.57645134512,1.0,-1.20602237141,1.0,0.0,-0.454522407018,3.0 723 | 721,0.0,-0.0704728435611,-0.219669452351,-1.50855596821,0.0,-0.885970733898,0.0,1.0,0.200000665832,2.0 724 | 722,0.0,-0.153758479645,0.609526045209,0.184970575073,0.0,-2.85003010932,2.0,0.0,0.37702683303,3.0 725 | 723,1.0,1.61736644118,-0.555373733841,1.45275635208,2.0,0.544582400794,0.0,1.0,0.488364760214,2.0 726 | 724,1.0,0.688438624138,1.20084509312,2.70732980956,1.0,2.05419384126,2.0,0.0,0.796179894976,0.0 727 | 725,1.0,1.82937596826,1.10079107264,0.229181197271,1.0,0.147820739037,3.0,0.0,-0.756784418748,1.0 728 | 726,0.0,-0.0363116661156,0.0412874555874,-1.2783526288,0.0,-1.41626885934,1.0,1.0,0.712335266813,1.0 729 | 727,0.0,0.352294399778,2.03715889866,0.104572039075,1.0,-0.6427763829,1.0,0.0,0.581145557009,2.0 730 | 728,0.0,-0.0388346938301,0.334438514849,-1.33656850031,0.0,-0.458876845025,1.0,0.0,0.000472034789085,0.0 731 | 729,0.0,-0.0305619111068,1.47807189836,1.33665735776,0.0,-1.01758477721,2.0,0.0,-0.189743503954,1.0 732 | 730,0.0,0.0633661024774,-0.993589515594,1.54863929502,0.0,0.860182638395,1.0,0.0,-0.808101645526,0.0 733 | 731,1.0,0.0705399023869,1.13592456722,1.32021657795,1.0,0.810260044375,1.0,1.0,0.480351162124,4.0 734 | 732,1.0,2.13493717092,1.08446678639,2.22129494569,2.0,-1.15545179382,0.0,0.0,-0.660469519958,0.0 735 | 733,1.0,0.926022406642,-0.0692544937551,1.13395838058,1.0,0.725081044448,3.0,0.0,0.2378807702,0.0 736 | 734,1.0,0.13111674978,0.956295002091,-0.0951116477008,0.0,1.52681266358,1.0,1.0,-0.101329022818,2.0 737 | 735,1.0,0.287567086078,3.32467330585,0.666962380946,1.0,1.90255820523,0.0,0.0,-1.33416075575,1.0 738 | 736,1.0,0.0859584872344,-0.0170060744838,-0.310390991378,0.0,2.86521202309,0.0,0.0,-0.933438513873,2.0 739 | 737,1.0,1.2269509382,1.50502108827,-0.547801556309,1.0,-0.901992649443,2.0,1.0,0.404775857774,2.0 740 | 738,1.0,0.113955553603,0.0845184758153,0.264254763607,0.0,2.8242204264,0.0,0.0,-0.524318113969,2.0 741 | 739,0.0,-0.0387361964553,-0.713584669907,-0.040333910214,0.0,-0.354206388509,0.0,1.0,-0.558420168488,0.0 742 | 740,0.0,-0.109862042518,-1.8207602778,0.745360724078,0.0,-0.592465455381,1.0,0.0,-0.763947402244,1.0 743 | 741,0.0,0.142050428727,-0.705773483095,0.0935234964386,0.0,0.327072374878,0.0,1.0,-0.730011522864,2.0 744 | 742,1.0,0.0831106498538,-0.391958380952,0.837296298431,1.0,-0.582061334093,1.0,1.0,1.64266651786,1.0 745 | 743,1.0,0.441765819387,2.70410207806,0.128806969992,1.0,0.399044140647,2.0,0.0,-1.119939137,3.0 746 | 744,0.0,0.123475191404,-0.115109693923,0.0721532368218,0.0,-1.32007718774,2.0,0.0,1.47290324567,2.0 747 | 745,1.0,1.17626940745,0.654080670953,1.73823723082,3.0,-0.238752602063,0.0,0.0,-0.330731220798,3.0 748 | 746,0.0,0.0595490897639,0.889153824788,-1.14333899108,0.0,1.28558223436,1.0,1.0,-0.653754492578,0.0 749 | 747,1.0,0.524554827366,-0.121751102856,1.08747375368,2.0,-0.0570612914312,0.0,0.0,0.383823563831,1.0 750 | 748,1.0,0.116300311299,0.233135961995,1.23304295153,1.0,0.14159578674,1.0,0.0,0.0530407842704,0.0 751 | 749,1.0,0.587085181834,1.06807226925,0.281935216382,1.0,0.475258604717,3.0,0.0,-0.197499950869,0.0 752 | 750,0.0,-0.150022186145,1.02876899142,-0.587856304908,0.0,1.17066162932,2.0,1.0,0.219883630493,0.0 753 | 751,1.0,0.777671954739,1.50168504517,1.23061084877,1.0,-1.65522471219,0.0,0.0,0.0371981969363,0.0 754 | 752,1.0,1.78458818357,1.24832514252,-0.133421018293,1.0,0.584524051837,0.0,0.0,-0.21559775134,1.0 755 | 753,0.0,0.0886191188585,0.078117735236,0.349923715249,0.0,-0.268139139242,2.0,0.0,0.935674379251,1.0 756 | 754,0.0,-0.00626395773272,0.400235855527,-0.895354373659,1.0,0.166637895312,1.0,0.0,-1.44697671551,1.0 757 | 755,1.0,0.385729663124,1.20165290513,2.06285369303,1.0,1.05995016976,2.0,0.0,-0.914664823164,2.0 758 | 756,0.0,1.2637172932,-0.0299722747769,3.33782774539,1.0,-1.19418665141,1.0,0.0,-0.788215167302,1.0 759 | 757,1.0,0.708048649758,1.04607922163,0.139243198298,1.0,-1.01264444144,3.0,1.0,-1.05793666201,4.0 760 | 758,1.0,0.430568155083,-0.0736886589178,1.53420786237,1.0,-1.93542995971,0.0,1.0,0.0859266093324,1.0 761 | 759,1.0,1.89300054875,1.0810825429,0.273258095118,1.0,-0.549158941764,1.0,0.0,0.505419559074,1.0 762 | 760,0.0,0.114603014414,-0.480647941488,1.0409541738,0.0,1.33043234438,3.0,0.0,-1.96253049452,2.0 763 | 761,0.0,-0.0777371484846,2.53938162278,-1.26525840909,0.0,-0.120587188473,3.0,0.0,-0.474053073036,0.0 764 | 762,0.0,0.15587891845,-0.0398943837517,0.480586758428,0.0,-1.34012489565,0.0,0.0,-0.321663580549,0.0 765 | 763,1.0,1.05643079444,-0.404239566262,0.127011033111,3.0,-0.485678744575,0.0,0.0,-0.285855956157,1.0 766 | 764,0.0,0.162964213111,-0.134180210677,-0.206984589098,0.0,-1.48786170349,3.0,0.0,-1.28508796987,3.0 767 | 765,1.0,0.214206050545,1.51935874564,-0.0310252751473,1.0,-1.12518610173,0.0,0.0,-0.313320872828,0.0 768 | 766,1.0,0.169999257196,2.67336394615,1.8223504709,2.0,0.388818910264,4.0,1.0,-0.91112289187,3.0 769 | 767,1.0,0.56679048304,0.410547600061,0.16301964556,1.0,-1.17387332631,2.0,1.0,-0.334377106701,1.0 770 | 768,0.0,-0.0454794717378,-1.58242797402,0.551964259332,0.0,1.1126343052,0.0,0.0,-1.71962751867,3.0 771 | 769,1.0,1.55142645999,1.81683701143,0.655901971738,1.0,-0.0711202908303,0.0,0.0,-0.327559423369,0.0 772 | 770,0.0,-0.0607646345373,-1.3805987059,-0.114472371799,0.0,0.0855947039445,0.0,1.0,-0.719033595962,2.0 773 | 771,1.0,0.598435820576,0.563844558493,1.1477559074,1.0,-0.278372967608,1.0,1.0,-0.262481047747,1.0 774 | 772,0.0,0.0957791614473,-0.257620485511,-0.761824671659,0.0,0.772847838544,0.0,0.0,0.300792710314,1.0 775 | 773,0.0,0.0207603351401,-0.0696334533001,0.210367113541,0.0,0.783159887777,0.0,0.0,-0.0447350604152,1.0 776 | 774,1.0,0.170164866003,1.68916445707,2.53033456435,1.0,0.335054351912,1.0,0.0,0.793395201776,1.0 777 | 775,0.0,-0.109551938885,-0.683634282286,-0.778094785833,0.0,0.564789105908,1.0,0.0,-0.360766413196,0.0 778 | 776,0.0,-0.0880754089603,-0.273729252167,1.17181014327,1.0,-0.21208966992,0.0,0.0,0.618884817865,1.0 779 | 777,1.0,1.49817482669,0.985729647051,2.49809763349,1.0,0.542203006909,1.0,0.0,1.12498710638,4.0 780 | 778,1.0,-0.000839579146983,1.14959795752,0.183845010972,1.0,-0.337877775474,0.0,0.0,0.273759705464,0.0 781 | 779,1.0,0.577113969768,1.09782717471,-0.455054605091,1.0,0.0022316221624,0.0,0.0,-0.0207978305322,1.0 782 | 780,1.0,0.0649280343334,1.43600577522,1.30196090017,2.0,-0.274643749366,2.0,0.0,0.414362084179,1.0 783 | 781,0.0,0.0377994385938,1.84383950964,0.452592477233,1.0,-0.457218539319,0.0,1.0,0.309083617454,1.0 784 | 782,1.0,0.107036516023,0.392634115651,1.86860321916,0.0,-0.689111797722,2.0,0.0,1.00124300809,1.0 785 | 783,0.0,0.127189242194,0.453585523509,0.0348075404998,1.0,0.467690103859,3.0,0.0,0.79379945951,0.0 786 | 784,0.0,-0.0110812560279,-1.58222316675,-0.802199408035,0.0,1.31060591281,1.0,0.0,0.805827210425,1.0 787 | 785,1.0,0.404177825095,1.05022769917,-0.147159511012,2.0,1.17110197167,2.0,0.0,0.0440259575618,2.0 788 | 786,1.0,0.945957725722,1.479507548,2.08990495909,1.0,-1.25656533595,5.0,0.0,0.341226632692,2.0 789 | 787,0.0,0.0337957528232,0.72894119457,-0.571183974084,0.0,1.28920305141,2.0,0.0,0.322526263256,1.0 790 | 788,1.0,0.089130368687,-0.692350774234,0.0438287994604,1.0,-0.318158501618,0.0,0.0,-1.20737940211,0.0 791 | 789,1.0,0.268064076798,0.340960725111,1.95580274511,1.0,0.600733015146,1.0,0.0,1.06891601843,0.0 792 | 790,0.0,0.0618886298023,-0.574100675284,-0.484258351931,0.0,-0.906215332047,1.0,0.0,-1.66929052994,1.0 793 | 791,1.0,2.29106339358,1.53641389989,0.95407117126,1.0,0.141979913874,0.0,1.0,0.712186657627,1.0 794 | 792,1.0,0.137225261468,2.03388105492,0.983431590177,2.0,0.313723182897,1.0,0.0,0.266996096858,1.0 795 | 793,1.0,0.633985941384,0.592539892708,1.68332451152,1.0,-1.48460479192,2.0,0.0,-0.284288227769,0.0 796 | 794,0.0,-0.151891082509,0.907962313627,0.59074433551,0.0,0.608267166344,0.0,0.0,0.391190158826,1.0 797 | 795,1.0,0.206971173685,1.12347980916,0.779886268745,1.0,1.34593500784,1.0,0.0,0.418569326229,0.0 798 | 796,1.0,0.746463467745,0.875714222838,1.0636490615,1.0,-0.174647945682,1.0,0.0,-1.30779990675,0.0 799 | 797,1.0,0.702691441048,0.788615770182,0.628220988477,1.0,1.36016813083,0.0,0.0,1.41612628208,2.0 800 | 798,1.0,0.0591871010659,1.7466113646,-0.477612406919,1.0,-0.189693493452,1.0,1.0,0.0721380538517,0.0 801 | 799,1.0,0.920995247734,1.32557781679,1.2576008574,1.0,0.849584531047,0.0,1.0,2.31473230454,1.0 802 | 800,0.0,0.835943322532,3.27582542765,2.89219176083,1.0,-2.21856996595,0.0,0.0,0.789771028637,3.0 803 | 801,1.0,0.112778025063,-0.852224642997,-0.883719140691,0.0,2.41877777931,3.0,1.0,0.0493973469154,3.0 804 | 802,1.0,2.91559930615,1.51810170203,0.226970290397,1.0,1.49545824524,0.0,0.0,-0.690039285993,0.0 805 | 803,1.0,0.300129728115,0.470798990188,0.129272228356,2.0,-0.284625504254,3.0,1.0,-0.110839537193,1.0 806 | 804,0.0,0.0990166238959,-0.869286986989,0.724591778723,1.0,-1.97208902664,0.0,0.0,0.149830728583,3.0 807 | 805,1.0,1.60956270797,0.989132862965,1.4484854542,1.0,0.288028368305,3.0,0.0,1.46543015433,0.0 808 | 806,1.0,1.29008030659,1.13735247941,0.841462307584,1.0,-1.44392554707,4.0,0.0,1.22665983431,1.0 809 | 807,1.0,0.0616674012137,3.91817355506,0.081980938361,1.0,0.444853537557,0.0,0.0,0.451488482475,1.0 810 | 808,0.0,-0.0649826885497,-0.184145815683,0.0923767916399,0.0,0.411565719164,0.0,1.0,1.76919116924,2.0 811 | 809,0.0,0.00841682301857,-1.13017872948,-1.56462212734,0.0,-0.941403169002,1.0,1.0,-2.0161811296,0.0 812 | 810,1.0,0.60778625257,1.27301071749,1.14342656686,1.0,1.12096702361,1.0,0.0,0.462787386528,3.0 813 | 811,1.0,0.503886898707,-1.07464003755,1.87152438609,1.0,0.805574702806,0.0,1.0,1.25565191852,0.0 814 | 812,0.0,-0.026864575331,-0.0919567826043,-1.25119913663,1.0,0.975823337289,1.0,1.0,0.547437771416,0.0 815 | 813,1.0,0.510964390786,1.0160252823,-0.53251827683,1.0,0.0088577036689,0.0,0.0,-1.33280797882,0.0 816 | 814,1.0,1.11108527987,1.79460038295,2.57943789169,1.0,-1.41552406691,1.0,0.0,1.38944313352,2.0 817 | 815,0.0,1.83121065347,1.97362224943,0.388240360495,1.0,0.977872272211,0.0,0.0,0.761348563373,0.0 818 | 816,1.0,0.360186098635,0.496430381092,2.13594784594,2.0,-0.270371399136,2.0,0.0,0.343011960213,0.0 819 | 817,0.0,-0.0246383402515,-0.15061401463,-0.153997665198,0.0,-1.38978014319,1.0,0.0,0.0883579911561,2.0 820 | 818,0.0,0.0986376505906,-0.766120830611,-0.161954816941,0.0,1.35203936597,0.0,0.0,1.99370206815,1.0 821 | 819,0.0,-0.0711973227259,-1.12806255481,0.438412699497,0.0,2.0994075205,0.0,0.0,0.444517543733,1.0 822 | 820,1.0,0.791465738872,1.30989477938,0.116001143254,1.0,-0.0412481289792,1.0,0.0,-0.241919658737,2.0 823 | 821,0.0,-0.0160631119525,-1.2735855486,0.132497143496,0.0,2.1591211546,1.0,1.0,-0.811378500896,0.0 824 | 822,0.0,-0.0484173951249,-0.414626900572,-0.381489414824,0.0,0.0913147286113,0.0,0.0,0.757529139209,1.0 825 | 823,0.0,-0.0966246319753,-0.995173959899,-1.32049344341,0.0,-0.380455904166,0.0,0.0,0.986233395276,2.0 826 | 824,1.0,0.984679173337,1.54968318629,1.33748207473,1.0,-0.630458454185,2.0,0.0,0.0565155544837,0.0 827 | 825,1.0,0.801585802078,2.80143009927,0.736692193122,1.0,1.63708240799,0.0,0.0,-0.557778479846,0.0 828 | 826,0.0,-0.000928856156782,-1.3015879828,-0.157024828445,1.0,-0.780143881388,1.0,0.0,1.33005659821,1.0 829 | 827,0.0,0.0306981072686,-1.8530184829,-1.21016094341,0.0,0.735269309975,1.0,0.0,-0.887415417697,1.0 830 | 828,1.0,1.15665322833,0.87511311465,2.59140036776,1.0,-0.559163835059,1.0,0.0,1.96944538133,4.0 831 | 829,0.0,-0.0342878861558,0.0156977959578,0.876714186386,0.0,-0.460306762574,1.0,0.0,-0.734533818348,1.0 832 | 830,0.0,0.0278348634645,0.218659306757,0.964155884172,0.0,1.03024969397,1.0,0.0,-1.27829801385,0.0 833 | 831,0.0,-0.0509213362599,-0.446320515234,-0.305444702442,0.0,-0.380036846289,0.0,0.0,-1.15036669736,0.0 834 | 832,0.0,-0.0846359719887,-0.200639298825,-1.7291828895,0.0,-0.40479537942,3.0,0.0,-1.10972082829,2.0 835 | 833,0.0,-0.0584907653418,0.367510410541,1.95291738249,1.0,1.13280469717,3.0,0.0,-0.236596104037,3.0 836 | 834,0.0,-0.0478758571522,1.04043089264,-0.0610975080059,1.0,1.59739729322,0.0,0.0,-0.468172515601,1.0 837 | 835,1.0,0.0359475797547,-1.95504877032,-0.74879979602,0.0,0.644689803284,2.0,0.0,1.02463982483,0.0 838 | 836,1.0,1.4316962251,0.631060560969,1.41680157448,1.0,-0.654769775624,1.0,1.0,0.882074815289,1.0 839 | 837,0.0,-0.0716043436276,0.213808793941,1.167120788,0.0,-0.510608499298,1.0,0.0,-0.223511059016,0.0 840 | 838,0.0,0.851291339547,0.0820238953893,0.976949443915,1.0,0.07991526374,0.0,1.0,3.10338440576,3.0 841 | 839,1.0,1.8233079004,2.73116963177,2.27857516794,1.0,0.320930061926,1.0,1.0,-0.236761066785,1.0 842 | 840,0.0,0.039579884871,-0.635409880229,1.08299993852,0.0,-0.98786591014,2.0,0.0,-0.103516355063,0.0 843 | 841,1.0,0.738677240776,0.958707312993,-0.0763811874021,2.0,0.72303793958,0.0,0.0,-1.27741794813,1.0 844 | 842,1.0,0.128409579395,0.556022096842,-0.673790105659,0.0,0.0855133296396,2.0,0.0,-0.080540324625,0.0 845 | 843,1.0,0.37500246988,0.408715211198,1.95753716328,2.0,-1.71570831864,0.0,0.0,0.297400691391,1.0 846 | 844,0.0,-0.23869298702,-1.8465730478,-2.71261256381,0.0,-0.928926482461,1.0,0.0,-1.18422089389,3.0 847 | 845,0.0,-0.049587817201,-0.428654526917,-0.149455693165,0.0,-0.504128673652,2.0,0.0,-0.49869142481,1.0 848 | 846,0.0,0.109730018754,1.02944055593,-1.43083120162,0.0,-0.0728576888411,1.0,0.0,0.327010729976,1.0 849 | 847,1.0,1.7265854049,0.663104873215,0.523446198566,1.0,1.8892787955,2.0,0.0,-0.524835479101,0.0 850 | 848,1.0,0.0715558189685,0.153565698541,0.701179910971,1.0,0.23817130614,1.0,1.0,-0.734159172371,1.0 851 | 849,1.0,0.494431127661,1.9256722095,0.641755622092,1.0,-0.840771889899,2.0,0.0,0.782133014204,0.0 852 | 850,0.0,0.0243657223703,-0.330774896023,-0.552261252113,0.0,0.220630804307,0.0,1.0,-1.28211381113,1.0 853 | 851,1.0,0.316424023504,0.48983918635,-0.0971436496288,2.0,-0.352087747454,2.0,1.0,-1.08792237859,0.0 854 | 852,0.0,-0.0985539600721,0.149456089663,2.29191126682,0.0,0.324758239534,0.0,1.0,0.177379340584,1.0 855 | 853,1.0,1.18189144135,1.77075020962,2.86746200416,1.0,0.580567687036,0.0,1.0,0.84615926274,2.0 856 | 854,0.0,0.0110535317474,2.38171353173,-1.16206582026,1.0,1.20923064722,0.0,0.0,0.305523966227,1.0 857 | 855,0.0,-0.0626315276183,0.827236107657,1.5821167513,0.0,-0.02428649567,3.0,0.0,-0.223887255356,0.0 858 | 856,0.0,0.0494063918976,1.15983996639,-0.399465490473,0.0,1.6389605276,1.0,0.0,-0.305388619204,0.0 859 | 857,0.0,-0.28546266629,-0.505966198988,0.129187473332,0.0,0.908022662536,0.0,0.0,1.01044188283,1.0 860 | 858,1.0,0.814713401882,-0.0258681059695,0.936726040103,1.0,-0.707439544812,3.0,1.0,0.859001432971,1.0 861 | 859,0.0,-0.112605396091,0.0623313496191,-0.659748641254,1.0,2.20985566575,2.0,1.0,0.0498492518429,1.0 862 | 860,1.0,1.15785959905,1.10716991526,1.98385234361,1.0,0.32699451327,0.0,0.0,-0.277618699137,2.0 863 | 861,0.0,-0.053804775849,-1.07851274136,0.125886530577,0.0,-0.835124503972,2.0,0.0,0.0352721926453,0.0 864 | 862,1.0,1.74700848954,0.824705470096,0.523448576781,1.0,1.65291305123,1.0,0.0,-0.727197448593,1.0 865 | 863,0.0,-0.185933677166,0.399317601719,-1.3045894438,0.0,2.0777775852,0.0,0.0,-0.150175651395,0.0 866 | 864,0.0,0.00454914763308,0.360393395018,-0.893595013719,0.0,-0.0330252637196,2.0,0.0,-0.489536671991,0.0 867 | 865,0.0,1.83763255109,1.50428785338,-0.641380115602,2.0,-0.503650260376,0.0,0.0,-0.100844818378,0.0 868 | 866,0.0,0.185664743656,0.290964730137,0.0122235484152,0.0,-0.172374957454,1.0,1.0,-0.453684269661,1.0 869 | 867,0.0,-0.0481765971093,-0.50700865927,-1.19666559228,0.0,0.714731727518,2.0,0.0,0.523951873938,1.0 870 | 868,1.0,0.767749321117,0.486099373351,0.734439487481,1.0,1.27785665503,0.0,1.0,0.818405399849,2.0 871 | 869,1.0,0.541093044501,-0.198951397994,2.37010185361,1.0,0.570487330864,0.0,0.0,-0.379715820215,3.0 872 | 870,0.0,-0.239195620431,1.78477503919,1.19929957292,0.0,0.101723208472,0.0,1.0,-0.811879668867,2.0 873 | 871,1.0,0.0844774375782,0.0134503646193,-0.0322768941026,1.0,1.4980117703,0.0,0.0,0.711621734184,0.0 874 | 872,1.0,1.36998011463,0.775146944205,0.912915273857,1.0,-0.312836473052,1.0,1.0,0.184758812788,0.0 875 | 873,0.0,0.11785126898,-0.928792081452,1.87987454942,0.0,1.03091933837,1.0,0.0,-0.366736078517,2.0 876 | 874,0.0,-0.137340288897,2.93565790233,0.520756120359,0.0,-0.288062798351,0.0,0.0,1.37555191336,2.0 877 | 875,0.0,0.0519902139529,-1.07332803222,-0.327806459877,0.0,0.431022958011,0.0,0.0,-0.565034260466,1.0 878 | 876,1.0,1.03373275018,0.571152074394,-0.42601811712,1.0,-0.11356256479,0.0,1.0,-1.99293631568,3.0 879 | 877,1.0,1.29158946613,1.41583683629,1.39387321816,1.0,-0.0558521826528,2.0,0.0,-0.707959370632,1.0 880 | 878,0.0,0.0276581505591,0.600212965744,0.829323772583,0.0,-0.377386517462,0.0,0.0,1.61837847689,0.0 881 | 879,0.0,0.000855608082435,0.957932055216,-0.631651524514,1.0,1.34485403118,3.0,0.0,-0.317703731067,2.0 882 | 880,0.0,-0.157088145713,1.80760850777,0.291202755138,0.0,-0.732926038109,0.0,0.0,-0.515439291436,0.0 883 | 881,1.0,2.16136516668,1.50615765546,0.636426705085,1.0,-0.740232252549,2.0,1.0,0.0266031212536,1.0 884 | 882,0.0,-0.0610857639805,-1.05603079997,-0.184032399199,0.0,2.12099356585,2.0,0.0,1.01106308789,1.0 885 | 883,0.0,0.0504483256383,-0.256945125122,-2.48782205756,0.0,0.977847564654,1.0,0.0,-0.0828999907172,2.0 886 | 884,1.0,1.12415214035,1.30783237251,0.778218596284,2.0,-2.38511369869,0.0,1.0,0.591347581909,0.0 887 | 885,1.0,-0.117945966451,2.06822604151,0.969369302408,1.0,-0.56525873921,1.0,1.0,-0.189266230937,2.0 888 | 886,1.0,1.15095271312,-0.397805478424,0.368597444433,1.0,-1.81198933756,2.0,1.0,0.599211171146,1.0 889 | 887,0.0,-0.0347302288958,1.20257650523,0.0525263682153,1.0,-0.950690693415,2.0,0.0,0.180262793902,1.0 890 | 888,0.0,0.145327547604,0.179914369546,-0.755950706692,0.0,-3.13851466623,1.0,0.0,-0.397991774889,0.0 891 | 889,0.0,-0.00782306590585,0.837830535229,0.360441676293,1.0,-0.136989577694,1.0,0.0,0.258091976601,1.0 892 | 890,1.0,-0.171690455389,0.898005283364,0.783476802464,1.0,-1.14194181916,1.0,1.0,-0.542509907715,4.0 893 | 891,1.0,2.95760981564,0.157567369874,0.060758459318,1.0,0.0599052567964,1.0,0.0,-1.37818835183,1.0 894 | 892,1.0,1.6096100271,1.7508727794,2.33255146767,1.0,-1.62512125888,2.0,0.0,-0.0198877938521,0.0 895 | 893,0.0,0.0698688813517,0.654431027106,0.928932013532,1.0,0.082911853172,1.0,0.0,-1.28937435789,1.0 896 | 894,1.0,0.17532282415,1.97205696574,0.395093236072,1.0,-0.41491627812,0.0,0.0,0.597429535529,3.0 897 | 895,0.0,-0.154311822794,-0.0133046353786,0.497788309418,0.0,1.50195296519,0.0,1.0,-0.0374907717248,1.0 898 | 896,0.0,0.0164294765371,-0.59982202332,0.53741200282,0.0,1.41135686175,0.0,0.0,1.42329194842,1.0 899 | 897,1.0,0.952778511325,-0.558786995024,1.64230123501,1.0,0.78534560301,0.0,0.0,-0.330237111024,1.0 900 | 898,0.0,0.0492986458514,0.819373268139,-1.694255896,0.0,-0.326613780661,2.0,1.0,-0.0200271968435,0.0 901 | 899,0.0,-0.00575177530055,0.423889482444,1.00660654103,1.0,1.98538039526,3.0,0.0,-1.46962605115,1.0 902 | 900,0.0,0.107534340196,-0.965782632864,-0.569698962926,0.0,-1.55303527784,0.0,0.0,-1.10409331117,1.0 903 | 901,0.0,0.0210668465203,-0.538573673297,-0.357827933441,1.0,-1.40355862956,1.0,1.0,-1.67872276235,0.0 904 | 902,0.0,0.0209534230263,-0.466758811951,2.63788175226,0.0,-0.0837830998891,0.0,1.0,1.07749381115,1.0 905 | 903,1.0,0.948955807871,-0.482984431982,1.30187338072,1.0,2.25403810892,0.0,0.0,-0.459554314994,1.0 906 | 904,0.0,0.023384802579,-0.817682396605,-0.386322475447,0.0,-0.20233890687,0.0,0.0,1.32707975139,0.0 907 | 905,1.0,0.25163376144,-0.133830356806,-1.20529437276,1.0,-0.183245243209,0.0,0.0,-2.68061113407,0.0 908 | 906,1.0,0.797462121451,0.587520988112,2.38976413395,1.0,-1.44191035611,1.0,1.0,1.54807439854,0.0 909 | 907,0.0,0.142449582125,-0.73869749833,-1.34520967081,0.0,0.94592958527,0.0,1.0,-0.0680228907049,1.0 910 | 908,0.0,-0.00917060241451,-1.62700492087,-1.0034389035,0.0,0.953176254329,2.0,0.0,0.339847388965,1.0 911 | 909,0.0,-0.0887769511539,2.02259023057,-0.331352299088,0.0,0.7890752014,0.0,0.0,-1.06294273018,0.0 912 | 910,1.0,0.337873644004,2.25254073103,2.4164117917,1.0,-0.629220672847,0.0,0.0,0.527289918837,1.0 913 | 911,0.0,-0.0286794235738,-0.77901942152,0.773239986666,0.0,-0.706706768373,1.0,0.0,-0.373914146055,2.0 914 | 912,0.0,0.980565863742,1.27242139665,0.84216249016,1.0,-1.2931222504,1.0,0.0,-1.19395422205,1.0 915 | 913,1.0,-0.0291758632259,0.417465089821,0.308292063639,0.0,0.0838725017609,1.0,1.0,-1.2076663529,0.0 916 | 914,1.0,0.659434209339,2.19108585477,0.399614307129,1.0,-1.08040732928,0.0,0.0,-1.22535043658,0.0 917 | 915,0.0,0.0493560204334,-0.81860502666,0.139653689565,0.0,-1.17741650525,3.0,0.0,0.380239595797,1.0 918 | 916,0.0,0.029089705759,1.09210678398,0.0733367447781,0.0,-0.423690716911,0.0,0.0,-0.635631615862,0.0 919 | 917,1.0,0.178454720973,0.452094695793,1.96876989568,1.0,-0.489156175184,0.0,0.0,-1.64009375571,1.0 920 | 918,1.0,0.119321548516,-0.335862404169,1.96717812244,1.0,-0.537978528822,1.0,0.0,0.369299514038,0.0 921 | 919,0.0,0.0929409984791,0.724136559314,0.493977382206,0.0,0.46644459684,3.0,0.0,-2.1727295232,0.0 922 | 920,1.0,0.202453978657,2.29075842412,0.637652442454,1.0,0.0790478021503,1.0,0.0,1.32907209699,1.0 923 | 921,0.0,-0.0523731302771,2.58790897353,0.74182229439,0.0,-0.288156030511,0.0,0.0,1.98641057627,2.0 924 | 922,1.0,0.745550127398,-0.19972526509,0.908031533797,1.0,0.183012928311,0.0,0.0,-1.31242367553,0.0 925 | 923,1.0,0.613161730418,1.69891968508,-0.0819143687131,1.0,-0.991527041105,2.0,1.0,1.05245063161,1.0 926 | 924,0.0,-0.202179863996,-0.409801243794,-0.403287791911,0.0,0.10527862391,0.0,0.0,0.349098002406,0.0 927 | 925,1.0,-0.0101280718702,0.783358710524,0.0845269837843,0.0,0.150602492845,2.0,0.0,-0.500038676549,0.0 928 | 926,0.0,-0.0598437580581,-1.47048955123,0.910215783665,0.0,-1.50304685936,1.0,1.0,-0.45337242063,0.0 929 | 927,1.0,0.0376377081493,-0.262769775699,0.816471827843,1.0,0.99569375437,1.0,0.0,0.65447831291,2.0 930 | 928,1.0,0.0727855198592,0.224125176834,-0.20919871124,1.0,-0.881433705227,2.0,1.0,-0.0399507976035,2.0 931 | 929,0.0,0.0363970630853,0.0789640456681,0.0567416832968,1.0,0.0903097992064,1.0,0.0,-2.59420915731,2.0 932 | 930,0.0,0.209319793221,-0.641081266538,0.113456040057,1.0,1.16441174054,0.0,1.0,2.073014403,0.0 933 | 931,1.0,-0.121156862792,1.65905434391,1.1858376289,1.0,0.925676757714,0.0,1.0,0.433174185985,0.0 934 | 932,1.0,2.26832164894,2.02689461826,1.91987151595,1.0,0.0343333885688,1.0,1.0,-0.052010780817,2.0 935 | 933,1.0,0.973765801604,1.59957754125,2.01892324009,1.0,-0.362499002882,1.0,0.0,-0.718423239685,1.0 936 | 934,0.0,-0.0779092739377,1.61878763966,-0.594210872382,0.0,0.947511908576,1.0,0.0,-0.188960503666,1.0 937 | 935,0.0,0.0203235954586,0.415826629455,-0.616143458049,0.0,0.674694977809,0.0,0.0,1.26918725885,0.0 938 | 936,0.0,-0.0457633249338,-1.21689671034,-1.04019871096,0.0,-0.618365020044,2.0,0.0,0.261618434546,3.0 939 | 937,1.0,0.230235839973,2.36337651354,1.69881567028,1.0,-0.794893647002,0.0,1.0,0.375374624448,0.0 940 | 938,1.0,0.15091310134,-0.605156235606,1.44882010834,0.0,-2.0723551817,1.0,0.0,-1.24917061965,1.0 941 | 939,1.0,0.348599497185,1.91041849969,0.684918072091,2.0,0.154031841684,3.0,0.0,-0.349630276227,1.0 942 | 940,0.0,0.0508608373233,1.57373421656,-0.241430564725,0.0,-0.0826977450184,1.0,0.0,0.0510515067433,2.0 943 | 941,1.0,2.44477772454,1.45668801073,2.4667825569,2.0,1.13619137464,0.0,0.0,0.696566343458,1.0 944 | 942,1.0,1.1285597196,-0.496158813165,1.50555785322,2.0,0.35905509348,0.0,1.0,-0.415816209879,1.0 945 | 943,1.0,0.317176660048,0.0817878334902,1.4362357048,1.0,1.33422919417,0.0,1.0,0.927868765475,2.0 946 | 944,0.0,0.120660815486,1.32274446689,-1.19091650597,0.0,-0.697364227916,0.0,0.0,-1.14435320835,1.0 947 | 945,0.0,-0.152716785659,-0.169122685643,0.678728069279,0.0,1.13815033097,0.0,0.0,0.069536323087,0.0 948 | 946,0.0,-0.105508936818,0.0795735349422,-0.92913634051,0.0,-0.528916379105,2.0,0.0,-0.0976148788985,1.0 949 | 947,1.0,0.958133653566,1.75882441616,-0.134020185935,1.0,0.777596061792,0.0,0.0,-1.51552646139,2.0 950 | 948,1.0,1.05488503211,1.69632286208,0.653228423233,1.0,-1.45875839253,0.0,1.0,-0.0477081566759,1.0 951 | 949,1.0,1.05806219765,1.27879981239,0.414207276551,1.0,0.235135299366,1.0,1.0,-0.582604520566,2.0 952 | 950,1.0,0.296193018113,0.79133162878,0.778400305615,1.0,-1.98468794145,2.0,0.0,1.41377472749,2.0 953 | 951,1.0,0.801363836117,0.687331554268,-0.440981634525,1.0,-0.267137485942,0.0,0.0,-0.410256035921,3.0 954 | 952,0.0,-0.0974121846216,0.857898825291,0.958816306468,0.0,0.440353993878,2.0,0.0,0.350870534593,1.0 955 | 953,1.0,1.09609547532,1.55356953107,2.12768629452,1.0,-0.520968551231,1.0,0.0,-1.23104198282,0.0 956 | 954,0.0,-0.130736978223,-0.257300000618,-1.94734247414,0.0,-1.05043762876,1.0,0.0,0.236568893413,0.0 957 | 955,0.0,-0.159787213449,1.08211231299,0.978457805667,0.0,0.846118469296,0.0,0.0,-0.41504630861,2.0 958 | 956,1.0,0.469003700869,0.87096588487,0.189471370178,1.0,-0.103462789847,2.0,0.0,-0.776276483968,3.0 959 | 957,0.0,0.073195550251,-0.851662174334,0.856975536983,0.0,-0.489570647031,0.0,0.0,2.83389223194,1.0 960 | 958,0.0,-0.0196921807997,-0.758970698903,-0.0684464926664,0.0,0.0418959211543,0.0,0.0,-0.35344902875,1.0 961 | 959,1.0,-0.0461444351998,0.0212591636902,1.02877556408,2.0,2.63666914195,0.0,1.0,-0.211948929324,1.0 962 | 960,0.0,0.00443587975156,-0.272410016604,-0.185097649421,0.0,1.15350284978,0.0,1.0,0.90199345275,1.0 963 | 961,1.0,0.274903169546,2.23372427834,2.21212920423,1.0,1.16257366819,4.0,0.0,-0.768426681526,0.0 964 | 962,0.0,0.0494705653775,-0.805095181031,-1.23958801253,0.0,0.435546318992,2.0,0.0,0.403272277411,0.0 965 | 963,1.0,0.0383435031404,0.188475761018,0.607840338735,1.0,0.166485272577,1.0,0.0,0.510320412444,0.0 966 | 964,0.0,-0.0409308474096,-0.656689345627,1.10133016489,0.0,-2.39608228833,2.0,0.0,0.244700426462,1.0 967 | 965,0.0,0.10059245118,-0.260309041271,0.71634008054,0.0,-0.678980346463,1.0,0.0,2.29633931593,1.0 968 | 966,1.0,-0.0588447608896,-0.510041211985,3.32469891432,1.0,-0.480574413202,1.0,1.0,-0.804269049529,1.0 969 | 967,0.0,0.112790899325,-0.220538229157,-0.528946762725,0.0,-1.87489206405,0.0,0.0,1.53760060157,0.0 970 | 968,1.0,1.13730722279,0.806294620195,1.95730482259,1.0,-1.15741579022,0.0,0.0,0.472140402426,2.0 971 | 969,0.0,-0.0336552589878,0.540287944036,-0.106090635341,0.0,-1.98083647092,1.0,0.0,0.90944961319,1.0 972 | 970,1.0,0.194144095487,1.22328091326,2.23340607635,3.0,-0.0383238356974,1.0,1.0,0.341234371683,2.0 973 | 971,1.0,0.893341813155,-0.198392124952,0.992311004279,1.0,0.818765970849,2.0,1.0,1.87827735174,1.0 974 | 972,1.0,1.6709888147,2.08419824404,0.612124218138,1.0,1.10677451862,1.0,0.0,-0.320077923272,1.0 975 | 973,0.0,-0.107667912747,0.210303040222,1.30607220387,0.0,0.414784462079,2.0,0.0,0.497220238443,1.0 976 | 974,0.0,-0.0762519239147,0.198393517177,-0.491561939019,0.0,-0.963396341199,2.0,0.0,1.30547294057,1.0 977 | 975,0.0,0.103630289207,-0.00918235338514,-1.4127257589,1.0,-1.93206515852,1.0,0.0,-0.558842697071,0.0 978 | 976,1.0,-0.0571496525995,0.482242552778,0.483153116826,1.0,-1.7568686994,2.0,0.0,1.0004366773,1.0 979 | 977,0.0,0.0900533077332,0.217802339749,0.619032946589,0.0,-1.26898257725,0.0,0.0,-0.0186382555943,0.0 980 | 978,0.0,0.169943598301,0.475588435929,1.39203875159,0.0,-0.888859698036,0.0,0.0,-1.23488362733,0.0 981 | 979,1.0,0.794571823631,-0.746895691346,1.1111293753,2.0,-0.159748497992,1.0,0.0,-1.45158957855,0.0 982 | 980,0.0,0.0681362326575,-0.538760837346,1.31819706723,0.0,-1.01416421813,2.0,0.0,-0.0908198333754,3.0 983 | 981,1.0,1.43036055856,0.745053029596,-0.358174921478,1.0,0.338975893668,2.0,1.0,0.990885121604,2.0 984 | 982,0.0,0.0754733298068,0.256170605694,-0.443263464818,0.0,-0.232273502799,0.0,0.0,-2.07896956497,1.0 985 | 983,0.0,0.0199423985987,1.19331100593,-0.288575117154,0.0,0.010545711741,1.0,0.0,0.200450039129,1.0 986 | 984,1.0,1.44689847336,0.228259185403,0.885440572527,2.0,1.14025055267,1.0,0.0,0.892377134885,0.0 987 | 985,1.0,-0.0645572072035,-0.497961846818,0.0840943882502,0.0,-1.1802317342,2.0,0.0,-1.27794988532,1.0 988 | 986,1.0,1.19971581386,0.487465889353,1.69091095739,1.0,0.418704578292,2.0,0.0,-0.63396662563,0.0 989 | 987,0.0,0.050325206475,-0.801527590105,-0.44480683817,0.0,-0.0139732284761,2.0,0.0,0.572366941578,1.0 990 | 988,0.0,-0.206340315248,-0.347186495112,0.139028686953,0.0,-0.33348628097,0.0,0.0,0.848537947342,1.0 991 | 989,1.0,1.7646257737,1.77080221999,0.954877109676,1.0,0.885256320866,0.0,0.0,1.6040982222,0.0 992 | 990,1.0,0.800197100457,-0.0538354953643,0.0741100961089,2.0,0.879014154557,1.0,0.0,-0.5863408013,2.0 993 | 991,1.0,0.261871050399,1.42781439515,0.886333310919,1.0,-0.946490795988,1.0,0.0,-0.815576854438,2.0 994 | 992,0.0,0.194834264479,-1.70190223002,-0.143659529897,1.0,-0.182160583858,0.0,1.0,1.65268546468,2.0 995 | 993,1.0,1.33251148798,0.438662003558,0.834919434997,1.0,0.281211682584,3.0,0.0,-0.75494186618,0.0 996 | 994,0.0,-0.0653898388326,-0.329489300218,0.0317594565815,0.0,-0.273006748023,1.0,0.0,0.507285507601,0.0 997 | 995,0.0,0.00273133798514,1.67485967291,0.0756735406134,0.0,0.585021332288,2.0,0.0,2.18311485643,0.0 998 | 996,0.0,0.279647579352,0.725197695247,0.567704820893,1.0,0.28119201791,1.0,1.0,0.752708693606,0.0 999 | 997,0.0,-0.158217676335,-2.20124347345,1.27271473397,1.0,1.83256124036,4.0,0.0,0.783270216937,2.0 1000 | 998,1.0,0.584891398411,-0.998888906861,-0.169480629203,2.0,-1.53027913593,0.0,1.0,1.27806610477,1.0 1001 | 999,0.0,-0.056076090698,0.0340295863467,-0.72097010847,0.0,-0.122435989747,0.0,1.0,0.524867577885,0.0 1002 | --------------------------------------------------------------------------------